100进制可逆计数器的设计
以下是仿真代码与注释:
仿真代码:
module keni100(clr,clk,plus,minus,out); //100进制可逆计数器
input clr,plus,minus,clk;
output [7:0]out;
reg[7:0]out;
always@(posedge clk)
begin
if(!clr) //如果clr为零,输出为零;反之运行else程序
out[7:0]<=0;
else
begin
if(plus==0 && minus==1) //100进制的递减计数
begin
if (out[3:0]==0)
begin
out[3:0]<=9;
if (out[7:4]==0) out[7:4]<=9;
else
out[7:4]<=out[7:4]-1;
end
else out[3:0]<=out[3:0]-1;
end
if(plus==1 && minus==0) //100进制的递增计数
begin
if (out[3:0]==9)
begin
out[3:0]<=0;
if (out[7:4]==9) out[7:4]<=0;
else
out[7:4]<=out[7:4]+1;
end
else out[3:0]<=out[3:0]+1;
end
if(plus==1 && minus==1) out<=out; //若plus和minus都为1,暂停计数
if(plus==0 && minus==0) out<=0; //若都为零,输出为零
end
end
endmodule
注:本代码实现了100进制的可逆计数。以下是仿真结果仅供参考:
波形图说明:当“clr”为低电平时,out输出为0;当“clr”为高电平时,计数器正常工作。在每个时钟“clk”上升沿时,当plus=1且minus=0,计数器为加法器,则out输出开始递增;当plus和minus都为1时,计数器暂停计数;当plus=0且minus=1,计数器为减法器,则out输出开始递减。