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 太难,你试下分出两个频率4.9999M和5.00000M 用5M的频率去记数不可以? 回复【2楼】cq-317
-----------------------------------------------------------------------
不行啊,1k变到2k,2k变到3k,这个数值不是固定的增长 将你的频率提高到20M左右,然后通过20M为时钟进行计数,提高到20M是为了提高所需频率准确度,然后通过控制计数器值来产生。
我现在用的就是通过传输不同的计数器值,通过读取传输数值来发送一些频率与占空比不固定的波形的。 不知用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]