下面我以一个模为60的BCD码加法计数器为例来讲解此教程。
先贴上代码:
module bcd60counter(clk,switch,count);
input clk,switch;
output[7:0]count;
reg[7:0]count=8'b0;
always@(posedge clk)
begin
if(switch)
begin
count=count+8'b1;
//若低四位向高四位进位
if(count[3:0]==4'b1010)
count=count+8'b00000110;
//若到了60
if(count==8'b01100000)
count=0;
end
else
begin
//count=count-8'b1;
//若低四位向高四位借位
if(count[3:0]==4'b0000)
begin
//count[3:0]=4'b1010
count=count-8'b1;
count=count-8'b00000110;
end
else
count=count-8'b1;
if(count==8'b00000000-8'b00000111)
count=8'b01011001;
end
end
endmodule
程序写好后,点击如图按钮进行编译:
编译成功后,按如图所示顺序依次点击,建立波形文件。
在新窗口中,选择以下项,添加波形。
按以下顺序依次点击,选择波形:
依次点击完ok后,会看到以下界面:
下列图标中,最左端用于选择波形区间,第二个用于放大缩小,之后十一个用于设置之前选中的波形区间,后面的为仿真。设置好波形并仿真得到以下结果:
在使能端switch为高电平时,计数器从当前数字开始计数(向上计数),最高计到59,然后从0重新开始;在使能端为低电平时,计数器从当前数字开始计数(向下计数),最低到0,然后从59从新开始向下计数。