作者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/cn.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