我需要将两位数字分开,以便我可以单独显示它们。问题是mod仅适用于2的幂数。如何做到这一点?
答案 0 :(得分:2)
来自http://www.edaboard.com/thread112872.html
许多综合工具不支持 整数除法/模数/余数 除非计算是微不足道的, 比如用两个力量除法。如果 那么,你的价值不是两个人的力量 你可能运气不好。
也许你可以使用另一种方法 比如建立自己的数学模块, 或使用你的数学核心 软件的IP库。
或许你可以近似 除以乘以 分数1 / K而不是除以K.
如果两个操作数都很小,你可以 从ROM查找中获取结果 表
答案 1 :(得分:2)
如果这是一个简单的递增值,您应该考虑Binary Coded Decimal个计数器。每个数字需要4位,但它可以更容易地与7段显示器连接。
//BCD counter - I did not test this
reg [3:0] digit_one, digit_two;
always @(posedge clk)
begin : led_digits
if(reset)
begin
digit_one <= 0;
digit_two <= 0;
end
else if(increment)
begin
//BCD values wrap at 9
if(digit_one == 4'd9)
digit_one <= 0;
else
digit_one <= digit_one + 1;
//Carry when previous digit wraps
if(digit_one == 4'd9)
begin
if(digit_two == 4'd9)
digit_two <= 0;
else
digit_two <= digit_two + 1;
end
end
end
如果你需要显示一些任意十进制值,那么它会变得更复杂。 GuanoLoco的解决方案应该适用于2位数输出。存在一种更有效的算法,但implementation并不那么简单。
答案 2 :(得分:1)
一个简单的强力解决方案是使用if-else块将你的数字与10的倍数进行比较。小于你的数字的十的最大倍数是“十位”数字,差别是“ “数字。
if (number >= 90) begin
tens <= 9;
ones <= number - 90;
end else if ...
尽管如此,这是不可扩展的,并且巨大的if-else块通常不是好的做法。
答案 3 :(得分:-1)
相当困惑的问题。当你说“显示”时,我立即想到$display
,因此建模和模拟。对于建模目的,模数没有2个限制的权限。
但即使你的意思是综合,一般情况下,模数只适用于2的幂。但是,这样做可能不是一个好主意,因为它在硬件上会非常昂贵。