作者Jasonnnnn (Nickkkkk)
看板Electronics
標題[請益] 除頻電路 FPGA DAC輸出三角波
時間Mon Dec 20 17:18:26 2021
想請問一下高手
小弟新手試寫verilog
FPGA板的震盪器頻率為50MHz
問題一:我寫了一個除10萬的除頻器
照理說週期應該是要2ms
我給一個方波去看 發現週期是4ms請問下是我的程式寫錯了嗎
問題二:我試寫一個三角波 除10萬的除頻器跑不出圖形 改成除500的除頻器 就可以跑出
圖形可是圖形有斷層請問一下原因在哪 麻煩各位高手解答
以下是我的verilog程式
https://i.imgur.com/L93Mq5F.jpg
https://i.imgur.com/ac9xLpb.jpg
https://i.imgur.com/mSRyPp0.jpg
https://i.imgur.com/R9iQUom.jpg
module handsome(clk,rst,CS,RW,data,AB,cnt,dir,o_clk);
input clk,rst;
output reg RW;
output reg CS;
output reg AB='b0;
output reg [11:0]data;
output reg[3:0]cnt;//計數器選case
output reg [1:0]dir; //1往上 0往下
output reg o_clk;//除頻後的clock
reg[20:0]cout;//除頻用的計數器
reg[3:0]a;
always@(posedge clk or negedge rst)
begin
if(!rst)cnt<='d0;
else if(cnt==5)cnt<='d0;
else cnt<=cnt+1;
end
always@(posedge o_clk)//三角波
begin
if(rst==0)
begin
data<=0;
dir<='d1;
end
if(dir==0)
begin
if(data>1000)
begin
dir<='d0;
data<=data-1;
end
else
begin
dir<='d1;
data<=data+1;
end
end
else
begin
if(data<4000)
begin
dir<='d1;
data<=data+1;
end
else
begin
dir<='d0;
data<=data-1;
end
end
end
always@(posedge clk or negedge rst)
begin
if(!rst)
begin
RW<=1;
CS<=1;
end
case(cnt)
'd0:
begin
RW<=1;
CS<=1;
end
'd1://read
begin
RW<=0;
CS<=1;
end
'd2://load
begin
RW<=0;
CS<=0;
end
/*'d3://read
begin
RW<=0;
CS<=1;
end
'd4:
begin
RW<=1;
CS<=1;
end
'd5:
begin
RW<=1;
CS<=0;
end
'd6:
begin
RW<=1;
CS<=1;
end
'd7://read
begin
RW<=0;
CS<=1;
end */
endcase
end
always@(posedge clk or negedge rst)
begin
if (!rst)
cout <= 0;
else if (cout == 99999) // 0 ~ 99999
cout <= 0;
else
cout <= cout + 1;
end
always@(posedge clk or negedge rst)
begin
if (!rst)
o_clk <= 0;
else if (cout < 50000) // 0 ~ 49999
o_clk = 0;
else // 50000 ~ 99999
o_clk = 1;
end
always@(posedge o_clk or negedge rst)
begin
if(!rst)a<='d0;
else if(a==1)a<='d0;
else a<=a+1;
end
always@(posedge o_clk or negedge rst ) //方波
begin
if(!rst)data<='d0;
else if(a==1)data<=4000;
else data<=100;
end
endmodule
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.76.222.60 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Electronics/M.1639991908.A.AF3.html
1F:推 god145145: 用別人的程式確認過板子沒問題了嗎? 12/20 20:52
2F:→ Jasonnnnn: 還沒試過欸 請問一下我的寫法沒有錯嗎~ 12/20 22:17
3F:推 mmonkeyboyy: 你把 DAC 前的數字拿出來看不就得了@_@ 12/21 01:55
4F:→ mmonkeyboyy: 你的寫法有沒有錯 = =" 拿個simulator 跑一下啊 12/21 01:56
5F:→ Jasonnnnn: 我那個simulator 到一半都會寫error 跑不出結果QQ 12/21 13:18
6F:推 mmonkeyboyy: 那你就是有出錯了啊 不然這樣 你到edaplayground 12/22 02:09
7F:→ mmonkeyboyy: 跑一下 然後把link 貼過來大家幫你看一下 12/22 02:09
8F:→ mmonkeyboyy: 你要是code就錯了....後面都不用提了啊 = =" 12/22 02:09
9F:→ mmonkeyboyy: 要解這種東西 要先code 對 simu對 板子吃 上板對 12/22 02:10
10F:→ mmonkeyboyy: 大概有這幾個分析的階段 你要一個一個來啊XD 12/22 02:11
11F:→ mmonkeyboyy: 如果你覺得還吃不下 也可以verilator 12/22 02:11
12F:→ Jasonnnnn: 了解 感謝高手 晚點去學校試試看再貼上來 順帶一提 DAC 12/22 10:41
13F:→ Jasonnnnn: 如果輸出有毛刺是什麼問題 本身FPGA板輸出的5V 3.3V好 12/22 10:41
14F:→ Jasonnnnn: 像就有毛刺了QQ 12/22 10:41
15F:推 mmonkeyboyy: 要看是一直出現還是跳著出現 還是只出幾次 12/22 11:09
16F:→ mmonkeyboyy: 通常是電源問題 (不一定是外部 內部也是) 12/22 11:10
17F:→ mmonkeyboyy: 你外面可以接個負載再看情況 12/22 11:10
18F:→ mmonkeyboyy: 最差情況加個lpf也可以 12/22 11:10
19F:→ mmonkeyboyy: dac有毛刺這問題很常見 但要理解原因不容易 12/22 11:11
20F:→ Jasonnnnn: 我同學的一直出現 我的倒是還好 感覺是電源問題 12/22 15:15