假设我们要将158的个位、十位、百位进行输出
在c语言中,我们通常是
158/100=1//百位
158%100=58 58/10=5//十位
158%10=8//个位
如果使用这种算法,会耗费很多的时间,效率较低。
而BCD码计数器,每四位表示一个数。比如我们想要表示158,需要12位
1 | 5 | 8 |
---|---|---|
0001 | 0101 | 1000 |
我们在计数的时候,保证计数器计数到9之后,就进位到下一级,这样就可以分离个位、十位、百位了。
首先是编写BCD_Counter文件,这个是级联基础
module BCD_Counter(Clk,Cin,Rst_n,Cout,q);
input Clk;//计数器基准时钟
input Rst_n;//系统复位
input Cin;//计数器进位输入
output Cout;//计数器进位输出
output [3:0]q;//计数值输出
reg [3:0]cnt;
//reg Cout;//在always里面赋值了,所以设置为reg类型
//计数
always@(posedge Clk or negedge Rst_n)//当clk上升沿到来或者rst下降沿到来,执行always块里面的内容
if(Rst_n==1'b0)
cnt<=4'd0;//当复位键按下,cnt置零
else if(Cin