对于我的应用程序,我可以使用0到9999之间的数字,我需要将它放在4个7段显示器上。
我遇到的主要问题是将数字分成4位数,我想到了几种方法:
有更好的方法吗? (我很确定有)
答案 0 :(得分:0)
理想情况下,您可以将数字除以10,100和1000(取结果和余数),这将告诉您您的数字中有多少,数十,数百和数千。
然而,由于除法/模数在verilog中是一项昂贵的操作,因此您可能希望尝试一种在区域/逻辑上更有效但在时间上效率较低的方法。
一个想法是只计算一次一个循环,每个列中有多少个数字位于一些单独的计数器中:
一些未经测试的伪代码:
input [13:0] mynumber;
input start;
output done;
reg [13:0] counter;
reg [3:0] ones;
reg [3:0] tens;
reg [3:0] hundreds;
reg [3:0] thousands;
reg done;
always @ posedge clk begin
if(start)
counter <= 0;
else if(counter == mynumber)
done <= 1;
else begin
counter <= counter + 1;
ones <= ones == 9 ? 0 : ones + 1;
if(ones == 9) begin
tens <= tens == 9 ? 0 : tens + 1;
if(tens == 9) begin
hundreds <= hundreds == 9 ? 0 : hundreds + 1;
if(hundreds == 9) begin
thousands <= thousands + 1;
end
end
end
end
end