5
我想在Verilog中編寫BCD加法器,但是我遇到了其中一個模塊的問題。具體來說,需要兩個BCD數字並添加它們的加法器。所以,這個想法是,如果兩位數的總和小於或等於九,那麼它是正確的。但是,如果它更大,則必須添加6的偏移量。這裏是我的Verilog代碼至今:Verilog中的BCD加法器
module DIGITADD(
input [3:0] IN_A,
input [3:0] IN_B,
input CIN,
output reg COUT,
output reg [3:0] SUM
);
wire s2, c2;
always @ (*)
begin
assign {c2, s2} = IN_A + IN_B + CIN;
if(s2 <= 9 && c2 == 0) begin
assign {COUT, SUM} = {c2, s2};
end
else if({c2, s2} > 9) begin
assign {COUT, SUM} = {c2, s2 + 6};
end
end
endmodule
不管怎麼說,當我嘗試合成它在賽靈思,我得到以下錯誤:
錯誤:HDLCompilers:247 - 「DIGITADD.v」線33參考標量線「C2」不是合法的REG的或可變的左值
ERROR:HDLCompilers:247 - 「DIGITADD.v」線33參考爲「S2」的標量線是不是合法的REG的或可變的左值
錯誤:HDLCompilers:42 - 「DIGITADD.v」第33行程序助手左側非法gn
我試着改變一些東西,如改變電線註冊,但我仍然無法得到它的工作。任何幫助表示讚賞。
好吧,我現在想通了。它基本上只是verilog令人討厭,但一些技巧,以防萬一誰發現這一點,並有同樣的問題。 1.不要把賦值語句放在塊 中2.在這種情況下,線路應該是reg 3.基本上,你聲明reg [4:0] s2並且分配SUM = s2 [3:0]和COUT s2 [4] 4.然後它更容易做邏輯 – DemonicImpact 2010-11-14 23:49:10
你可以添加自己的答案,然後接受它。這樣,這個問題就不會出現在未回答的問題列表中。 – George 2010-11-15 09:03:46
好的,謝謝。我不知道,如果它不是很明顯,我對此還是有點新鮮的。 – DemonicImpact 2010-11-17 11:25:43