频率计的verilog的程序
//测频率控制器module testctl(clkk,cnt_en,rst_cnt,load);
inputclkk;
outputcnt_en,rst_cnt,load;
reg rst_cnt;
reg div2clk;
always @(posedge clkk)
begin
div2clk=~div2clk;
end
always @(clkk or div2clk)
begin
if((clkk=='b0)&(div2clk=='b0))
rst_cnt='b1;
else tst_cnt='b0;
end
assign load=~div2clk;
assign cnt_en=div2clk;
endmodule
//10进制计数器
module cnt10(clk,rst,ena,outy,cout);
input clk,rst,ena;
output outy;
outputcout;
regouty;
always @(posedge clk)
begin
if(rst) outy='b0000;
else if(ena)
begin
if(outy<'b1001) outy=outy+1;
elseouty='b0000;
end
end
assign cout=outy&outy;
endmodule
//4位锁存器
module reg4b(load,din,dout);
inputdin;
input load;
output dout;
regdout;
always @(posedge load)
begin
dout=din;
end
endmodule
//顶层源程序
module plj4(f1hz,fin,doutt,coutt);
input f1hz,fin;
outputdoutt;
output coutt;
regdoutt;
wire cnt_ent,rst_cntt,loadt;
wire couty1,couty2,couty3,couty4;
wire cout1,cout2,cout3;
testctl u1(f1hz,cnt_ent,rst_cntt,loadt);
cnt10 u2(fin,rst_cntt,cnt_ent,outy1,cout1);
cnt10 u3(cout1,rst_cntt,cnt_ent,outy2,cout2);
cnt10 u4(cout2,rst_cntt,cnt_ent,outy3,cout3);
cnt10 u5(cout3,rst_cntt,cnt_ent,outy4,coutt);
reg4b u6(loadt,outy1,doutt);
reg4b u6(loadt,outy1,doutt);
reg4b u6(loadt,outy1,doutt);
reg4b u6(loadt,outy1,doutt);
endmodule
测频率控制器那段不怎么看得懂呢 大家帮帮忙啊 谢谢
能再给我个程序就更好了 我只有vhdl的,最后那段是调用前面的模块,举个例子,就拿testctl来说吧,<br>
testctl u1(f1hz,cnt_ent,rst_cntt,loadt);<br>
module testctl(clkk,cnt_en,rst_cnt,load);<br>
f1hz与clkk对应,<br>
cnt_ent 与cnt_en对应<br>
rst_cntt 与rst_cnt对应<br>
loadt 与load对应 testctl中的div2clk是对clkk二分频。<br>
load是一个相对div2clk相移180度的时钟,信号在load为0的半周期内计数,同时cnt_ent在此周期内使能,对应cnt10中的ena,使得计数进行。当load跳变的上边沿,将数传给寄存器输出。至于rst_cnt,是为了在load跳变为低时清零,开始计数。<br>
计数有1的误差。 晕,又学到东西了 我真佩服高手们,同时也感谢他们
页:
[1]