linxiaorui 发表于 2011-12-11 12:15:44

FPGA产生方波

最近想做一个步进为100Hz频率为0-5M的方波,想用FPGA来做,但是遇到的下面的问题希望各位大虾能帮下忙
1、每做一个频率都要一个分频程序,这样5M/100=50000个分频程序。
2、想问大家是否用任意分频的程序比较简单的没有?
我知道一定有更简单的方法的但是总想不到。
module div_277(clkin,clkout);
input clkin;
output clkout;
reg clkout;
reg count;
always@(posedge clkin) //90k
begin
if(count==9'd277)
   begin
   clkout=!clkout;
   count=9'd0;
   end
else
   count=count+1'b1;
end
endmodule

module div_312(clkin,clkout);//80k
input clkin;
output clkout;
reg clkout;
reg count;
always@(posedge clkin)
begin
if(count==9'd312)
   begin
   clkout=!clkout;
   count=9'd0;
   end
else
   count=count+1'b1;
end
endmodule

NJ8888 发表于 2011-12-11 14:01:07

太难,你试下分出两个频率4.9999M和5.00000M

cq-317 发表于 2011-12-11 14:43:51

用5M的频率去记数不可以?

linxiaorui 发表于 2011-12-11 19:24:22

回复【2楼】cq-317
-----------------------------------------------------------------------

不行啊,1k变到2k,2k变到3k,这个数值不是固定的增长

yutianyiren 发表于 2011-12-11 20:52:42

将你的频率提高到20M左右,然后通过20M为时钟进行计数,提高到20M是为了提高所需频率准确度,然后通过控制计数器值来产生。
我现在用的就是通过传输不同的计数器值,通过读取传输数值来发送一些频率与占空比不固定的波形的。

majk1990 发表于 2011-12-26 23:42:46

不知用dds可否?(事先说明我也刚学不久,菜鸟水平)。k = 2^n*f/f0;(k是步长,n是计数器的位宽,f0晶振频率,f是输出频率)。不过晶振的频率要很高才能使相位抖动较小。。错了勿怪哈
module dds(clkin,k,clr,clkout);
input clkin;
input k;
input clr;
output clkout;

reg cnt;
assign clkout = cnt;

always @(posedge clkin or negedge clr)
begin
if(!clr)
cnt <= 32'b0;
else
cnt <= cnt + k;
end

endmodule
页: [1]
查看完整版本: FPGA产生方波