我需要拆分兩位數字以便我可以分別顯示它們。問題是mod只能使用2的冪數。如何做到這一點?如何在Verilog中拆分兩位數號碼
回答
一個簡單的蠻力解決方案是使用if-else塊來比較你的數字和10的倍數。小於你的數字的十的最大倍數是「十」數字,不同之處在於「一個」數字。
if (number >= 90) begin
tens <= 9;
ones <= number - 90;
end else if ...
這就是說,這是不可擴展的,巨大的if-else塊通常不是好的做法。
從http://www.edaboard.com/thread112872.html
許多合成工具不通過二的冪支持 整數除法/模量/餘 除非計算是微不足道的, 如分裂。如果 你的價值不是2的冪,那麼 你可能倒黴。
也許你可以使用另一種方法 如建立自己的數學模塊, 或使用數學核心從 軟件的IP庫。
或者你可以通過在 分數1/K相乘,而不是由K.
如果兩個操作數都是小分逼近 師,你可以取 從ROM查找 表的結果。
相當混淆的問題。當你說「顯示」時,我立即想到$display
,因此建模和仿真。對於建模而言,不存在對模2的限制的權力。
但即使你的意思是合成,一般情況下模數只能在2的冪運算時纔是真的。但是,這樣做可能不是一個好主意,因爲它在硬件上會相當昂貴。
我不想使用$ display。我需要點亮一些7段LED來顯示二進制數的十進制值。我有一個模塊可以在一個LED上顯示一個十進制數字。我試圖用這個模塊顯示一個兩位數的數字,所以我需要將二進制數分成兩個十進制數。 – 2011-03-11 16:33:43
如果這是一個簡單遞增值,您應該考慮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並不那麼簡單。
- 1. 在Verilog中拆分位陣列
- 2. 如何拆分號碼
- 3. 拆分兩位數INT
- 4. 如何將10位數的電話號碼分爲兩部分
- 5. 如何拆分順序和組合verilog
- 6. 在R中拆分字符串並在兩個符號中拆分字符
- 7. 拆分電話號碼
- 8. 拆分號碼模式
- 9. 拆分電話號碼
- 10. jQuery拆分出現數字號碼
- 11. 將兩位NSInteger拆分爲兩個NSInteger
- 12. 如何在Verilog中重置復位信號?
- 13. 如何拆分兩次?
- 14. 如何在javascript中將數組拆分爲兩個數組?
- 15. 如何劃分兩位數
- 16. 如何在R中用括號和數字拆分字母?
- 17. 在Verilog中將一個位陣列拆分成更小的陣列
- 18. 拆分BigInteger,計數位數?
- 19. 如何拆分字符串分隔號碼
- 20. 如何拆分逗號分隔變量?
- 21. 如何在Verilog中對可變長度進行位分片
- 22. 如何在Lua中將字符串拆分爲兩個數組?
- 23. Verilog中的數字符號
- 24. 在verilog中更改64位浮點數的符號?
- 25. Verilog代碼移位和添加乘數
- 26. 正確定位兩個div,拆分
- 27. RegExpValidator帶號碼。兩位小數
- 28. 拆分引號
- 29. 如何在Oracle中拆分逗號分隔的字符串
- 30. 如何在tcl中拆分逗號分隔值
我認爲你的意思是一個兩位數*十進制*數字? – 2011-03-10 23:45:31
「分裂」和「兩位數」是什麼意思?就像把數字'42'變成'4'和'2'? – 2011-03-10 23:47:12
是的,就像那樣。 – 2011-03-10 23:54:33