辛集哪做网站,京津冀协同发展的首要任务有,信息聚合网站怎么做,龙岩正规全网品牌营销招商本文介绍常见的电路——计数器#xff0c;方便后续讲解分频电路。
一、计数器
#xff08;1#xff09;计数器代码 计数器#xff0c;顾名思义就是在时钟的节拍下进行计数#xff0c;一个简单的N位计数器的代码如下所示#xff0c;这个计数器从0计数到2N -1#x…本文介绍常见的电路——计数器方便后续讲解分频电路。
一、计数器
1计数器代码 计数器顾名思义就是在时钟的节拍下进行计数一个简单的N位计数器的代码如下所示这个计数器从0计数到2N -1共计数了2N个数也就是N位计数器。例如0123计数到2的2次方-1共计2的2次方个数是一个2位计数器 module count#(parameter N8)(
input clk,
input clear,
output[N-1:0] cnt_Q
);
reg[N-1:0] cnt;
assign cnt_Q cnt;//傀儡8位寄存器always(posedge clk)if(clear)cnt h0; //同步清 0高电平有效elsecnt cnt1b1; //加法计数endmodule上述代码中有一行很不起眼always(posedge clk)同步复位。 当复位信号发生变化时并不立即生效而是等到有效时钟沿采集到复位信号的变化后才会对寄存器进行复位操作。 同步复位的过程是依赖于时钟信号的所以称之为同步。由于在现有的大多数逻辑器件库中触发器DFF都是只包含有异步复位端口所以同步复位的使用会造成冗余组合逻辑的使用浪费资源将同步复位改为异步复位
always(posedge clk or negedge reset) //异步复位if(!reset) beginout1 0 ;elseout1 in1 ;异步复位则不依赖于系统时钟一旦信号发生变化就会立即对寄存器进行复位操作。 异步复位信号一般会持续相对较长的时间保证寄存器能复位完成。但是由于复位信号是异步的我们不知道它会在什么时刻被释放。如果异步复位信号撤销时不满足recovery time和removal time时可能会造成亚稳态。 为减少亚稳态的产生采用傀儡寄存器寄存进行异步复位同步释放
module sync_async_reset(clock,reset_n,rst_n);input clock, reset_n;output rst_n;reg rst_nr1, always (posedge clock or negedge reset_n) beginif(!reset_n) beginrst_nr1 1b0;rst_n 1b0; //异步复位endelse beginrst_nr1 1b1;rst_n rst_nr1; //同步释放endend//新的系统复位信号rst_n//信号rst_n作为新的系统复位信号后续可以用来直接“异步复位”endmodule上述描述的计数器通过 clear 信号清除计数值然后下一周期开始加 1 计数当计数器计到能够存储的最大数值时 例如本例为 8 个 1即 8’hff 就会自动回到 0然后开始下一轮计数。 改进计数器实现0~k范围内计数其中k不等于2N: always(posedge clk)if(clear)cnt h0; //同步清 0高电平有效else if(cntK)cnt h0;elsecnt cnt1b1; //加法计数前面是累加计数下面是一个既可以递增也能递减且具备初始值装载和复位的计数器代码如下所示
module updown_count#(parameter N8)(input clk,input clear,input load,input up_down,input [N-1:0] preset_D,output[N-1:0] cnt_Q
);
reg[N-1:0] cnt;
assign cnt_Q cnt;always(posedge clk)if(clear)cnt h0; //同步清 0高电平有效else if(load)cnt preset_D; //同步预置else if(up_down)cnt cnt1; //加法计数elsecnt cnt-1; //减法计数endmodule二、计数器的用途
1基本的计数功能与分频 计数器的基本功能顾名思义就是计数了用来计数产生某个信号等等。利用这个功能可以实现信号的分频具体会在后面的分频电路中进行描述。 2看门狗 计数器其实就可以设计成看门狗。在初始状态时看门狗电路首先装载一个大数当状态机或者程序开始运行后看门狗开始倒计数。如果状态机或程序运行正常每隔一段时间应发出指令或信号让看门狗重新装载一个大的初始值并再次开始倒计数。如果看门狗减到 0 就认为程序或状态机没有正常工作就需要强制整个系统复位。 上面的第二处改进的计数器电路描述就是一个看门狗电路只要加上 cnt0 作为看门复位状态即可而 load 信号则是状态机或软件给出的喂狗动作。 3特殊的有限状态机 当状态机要求没有那么严格的时候这个时候就可以用计数器的计数值当做状态机的状态计数增加或者减少就是改变状态。