如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
moduleodd_division(clk,rst,count,clk_odd);/*count没必要放在端口中,这里只是为了仿真时观察*/inputclk,rst;outputclk_odd;output[3:0]count;regclk_odd;reg[3:0]count;parameterN=6;/*6分频*/always@(posedgeclk)if(!rst)begincount<=1'b0;clk_odd<=1'b0;endelseif(count<N/2-1)begincount<=count+1'b1;endelsebegincount<=1'b0;clk_odd<=~clk_odd;endendmodule奇数倍分频:归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数从零开始,到N-1)/2进行输出时钟翻转,然后经过(N+1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。moduleeven_division(clk,rst,count1,count2,clk_even);/*count1,count2没必要放在端口中,这里只是为了仿真时观察*/inputclk,rst;output[3:0]count1,count2;outputclk_even;reg[3:0]count1,count2;regclkA,clkB;wireclk_even,clk_re;parameterN=5;/*5分频*/assignclk_re=~clk;assignclk_even=clkA|clkB;always@(posedgeclk)if(!rst)begincount1<=1'b0;clkA<=1'b0;endelseif(count1<(N-1))begincount1<=count1+1'b1;/*这里是非阻塞赋值是先执行了下面的IF判断,最后才赋的值。最初看这程序时没注意,想了好半天*/if(count1==(N-1)/2)beginclkA<=~clkA;endendelsebeginclkA<=~clkA;count1<=1'b0;endalways@(posedgeclk_re)if(!rst)begincount2<=1'b0;clkB<=1'b0;endelseif(count2<(N-1))begincount2<=count2+1'b1;if(count2==(N-1)/2)beginclkB<=~clkB;endendelsebeginclkB<=~clkB;count2<=1'b0;endendmoduleVerilogHDL的分频器设计2009-12-0310:22用D触发器实现2倍分频的Verilog描述?moduledivide2(clk,clk_o,reset);inputclk,reset;outputclk_o;wirein;regout;always@(posedgeclkorposedgereset)if(reset)out<=0;elseout<=in;assignin=~out;assignclk_o=out;endmodule用verilog实现分频的一点心得2007-08-0422:40在用verilog编写程序的过程中,将时钟进行11分频,花了好多的心思才将其搞定。通常实现偶数的分频比较容易,以十分频为例:always@(posedgeclkorposedgereset)if(reset)begink<=0;clk_10<=0;endelseif(k==4)begink<=0;clk_10<=~clk_10;endelsek<=k+1;二分频最简单了,一句话就可以了:always@(negedgeclk)clk_2<=clk_2;若进行奇数分频,则稍微麻烦点,以11分频为例:always@(posedgeclk)if(!reset)begini<=0;clk11<=0;endelseif(i==5)beginclk11<=~clk11;i<=i+1;endelseif(i==10)begini<=0;clk11<=~clk11;endelsei<=i+1;以上语句虽然可以实现,