完成38为模值的BCD加法计数器的Verilog HDL设计。
答案:1 悬赏:0 手机版
解决时间 2021-11-12 08:20
- 提问者网友:世勋超人
- 2021-11-11 12:04
完成38为模值的BCD加法计数器的Verilog HDL设计。
最佳答案
- 五星知识达人网友:神也偏爱
- 2021-11-11 13:15
module count38(qout,cout,data,load,cin,reset,clk);
output[7:0] qout; //BCD码输出,高四位表示十位,低四位表示个位
output cout; // 溢出进位输出
input[7:0] data; //置数输入端
input load,cin,clk,reset;
reg[7:0] qout;
always @(posedge clk) //clk上升沿时刻计数
begin
if (reset) qout<=0; //同步复位
else if(load) qout<=data; //同步置数
else if(cin) //计数使能控制
begin
if(qout[3:0]==7) //低位是否为7,是则判断十位是否为3(38同步计数,即0到37)
begin
if (qout[7:4]==3)
qout<=8'b0; //高位为3,则归零
else
qout[3:0]<=qout[3:0]+1; //高位不为3,则正常加1
end
else if(qout[3:0]==9) //低位是否为9,是则进位十位
begin
qout[3:0]<=0; //回0,并判断高位是否为5
qout[7:4]<=qout[7:4]+1; //高位不为5,则加1
end
else //低位不为9,则加1
qout[3:0]<=qout[3:0]+1;
end
end
assign cout=((qout==8'h37)&cin)?1:0; //产生进位输出信号
endmodule**********----分割线--------************
有问题及时问我,因为在Linux下没有进行仿真,应该没有错。
output[7:0] qout; //BCD码输出,高四位表示十位,低四位表示个位
output cout; // 溢出进位输出
input[7:0] data; //置数输入端
input load,cin,clk,reset;
reg[7:0] qout;
always @(posedge clk) //clk上升沿时刻计数
begin
if (reset) qout<=0; //同步复位
else if(load) qout<=data; //同步置数
else if(cin) //计数使能控制
begin
if(qout[3:0]==7) //低位是否为7,是则判断十位是否为3(38同步计数,即0到37)
begin
if (qout[7:4]==3)
qout<=8'b0; //高位为3,则归零
else
qout[3:0]<=qout[3:0]+1; //高位不为3,则正常加1
end
else if(qout[3:0]==9) //低位是否为9,是则进位十位
begin
qout[3:0]<=0; //回0,并判断高位是否为5
qout[7:4]<=qout[7:4]+1; //高位不为5,则加1
end
else //低位不为9,则加1
qout[3:0]<=qout[3:0]+1;
end
end
assign cout=((qout==8'h37)&cin)?1:0; //产生进位输出信号
endmodule**********----分割线--------************
有问题及时问我,因为在Linux下没有进行仿真,应该没有错。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯