プロが教える店舗&オフィスのセキュリティ対策術

加算器、減算器 どうやらうまくいったようでやっと乗算器を作っています。それで早速質問ですが、2の補数形式を「*」をつかって作りたいのですが、次のようにやると文法エラーになってしまいます。
******************************
module mul(a,b,q);

input [15:0] a,b;
output [32:0] q;

reg [32:0] q;

always@(a or b)
begin
if((a == 16'h8000) || (b == 16'h8000))
$monitor("error");
else if((a[15] == 0) && (b[15] == 0))
q = a * b;
else if((a[15] == 0) && (b[15] == 1))
begin
q =a * (~b+1);
q = ~q+1;
end
else if((a[15] == 1) && (b[15] == 0))
begin
q =(~a+1) * b;
q = ~q+1;
end
elseif((a[15] == 1) && (b[15] == 1))
q = (~a + 1) * (~b + 1);
else
q = a * b;
end
endmodule
********************************
内容は
q = (~a + 1) * (~b + 1);
(mul.v,28|16): expecting a semicolon(';')
けれどどこが間違っているのか…
ちなみにalways@(a[15] or b[15])のように書き換えるとシミュレーションできるのですが、結果があっていません。
どなたか教えてくださいm(_ _)m

A 回答 (1件)

最後の "else if" が "elseif" になっているためにエラーになるのでは。


でもそれだと、
>ちなみにalways@(a[15] or b[15])のように書き換えるとシミュレーションできるのですが、結果があっていません。
というのがわからないのですが。。。

ちなみに、上記のように記述を訂正してシミュレータ(Icarus Verilog)に
かけたところ通りました。結果はきちんと見ていませんが、それらしい値が
出ているようでした。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!