集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2664|回复: 4

频率计的verilog的程序

[复制链接]
CHAN 发表于 2010-6-27 23:20:24 | 显示全部楼层 |阅读模式
//测频率控制器
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[3:0] outy;
output  cout;
reg[3:0]  outy;

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[3]&outy[0];
endmodule
//4位锁存器
module reg4b(load,din,dout);
input[3:0]din;
input   load;
  output[3:0] dout;
  reg[3:0]  dout;

always @(posedge load)
   begin
    dout=din;
   end
endmodule
//顶层源程序
module plj4(f1hz,fin,doutt,coutt);
  input     f1hz,fin;
  output[15:0]doutt;
  output   coutt;
  reg[15:0]  doutt;
wire[3:0]   cnt_ent,rst_cntt,loadt;
wire[3:0]   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[3:0]);
reg4b    u6(loadt,outy1,doutt[7:4]);
reg4b    u6(loadt,outy1,doutt[11:8]);
reg4b    u6(loadt,outy1,doutt[15:12]);
endmodule
测频率控制器那段不怎么看得懂呢 大家帮帮忙啊 谢谢 
能再给我个程序就更好了
HANG 发表于 2010-6-28 00:55:53 | 显示全部楼层
我只有vhdl的,最后那段是调用前面的模块,举个例子,就拿testctl来说吧,<br>
testctl&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; 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对应
UFP 发表于 2010-6-28 02:07:26 | 显示全部楼层
testctl中的div2clk是对clkk二分频。<br>
load是一个相对div2clk相移180度的时钟,信号在load为0的半周期内计数,同时cnt_ent在此周期内使能,对应cnt10中的ena,使得计数进行。当load跳变的上边沿,将数传给寄存器输出。至于rst_cnt,是为了在load跳变为低时清零,开始计数。<br>
计数有1的误差。
ATA 发表于 2010-6-28 02:10:19 | 显示全部楼层
晕,又学到东西了
ngtim 发表于 2010-6-28 03:57:38 | 显示全部楼层
我真佩服高手们,同时也感谢他们
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-24 09:48 , Processed in 0.076315 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表