![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
a,bともに正の数(15bit目が0のとき)のみしか計算が合いません。いろいろ試した結果「~」か「()」に問題があるのではないかと思っています。(優先順位はちゃんと考慮してプログラムを組んだつもりなのですが…)なにかこれらについて知らずに見落としていることがあるのではないかと思っています。もしくはほかに問題があるのでしょうか?おしえてgoo!!教えてください!内容は以下です
********************************
//module mul.v
//`timescale 1ns/10p
module mul(a,b,q);
input [15:0] a,b;
output [32:0] q;
wire [15:0] _a,_b;
wire [32:0] q;
assign _a= a;
assign _b= b;
assign q =((a == 16'h8000) || (b == 16'h8000))?33'h1ffffffff:
((a[15] == 0) && (b[15] == 0))?_a * _b:
((a[15] == 0) && (b[15] == 1))?~(_a * (~_b+1))+1:
((a[15] == 1) && (b[15] == 0))?~((~_a+1) * _b)+1:
((a[15] == 1) && (b[15] == 1))?(~_a + 1) * (~_b + 1):
_a * _b;
endmodule
****************************************************************
以下演算結果、NOTが使われたときのみqの上位16bitの結果が計算と合わない(関数電卓で確認)
****************************************************************
300 c = 010 a = 0000000000000000 b = 0010011001100101 q = 000000000000000000000000000000000
310 c = 010 a = 0001000100010001 b = 0110001001100011 q = 000000110100011110001101110010011
320 c = 010 a = 0010001000100010 b = 1000011100001010 q = 000010010000000010100001101010100
330 c = 010 a = 0011001100110011 b = 0010001010000000 q = 000000110111001100101111110000000
340 c = 010 a = 0100010001000100 b = 0010000100100000 q = 000001000110101010100110010000000
350 c = 010 a = 0101010101010101 b = 0100010110101010 q = 000010111001110001001001101110010
360 c = 010 a = 0110011001100110 b = 1100110010011101 q = 001010001110110000001010010001110
370 c = 010 a = 0111011101110111 b = 0011111010010110 q = 000011101001101001101000110111010
380 c = 010 a = 1000100010001000 b = 1011100000010011 q = 001100010001010111110001000011000
390 c = 010 a = 1001100110011001 b = 0011100000001101 q = 000100001101000010100010011000101
400 c = 010 a = 1010101010101010 b = 1101011001010011 q = 010001110111000010111000100011110
410 c = 010 a = 1011101110111011 b = 1101110101101011 q = 010100010010111101110011000101001
420 c = 010 a = 1100110011001100 b = 0010101011010101 q = 000100010010000111101110110111100
430 c = 010 a = 1101110111011101 b = 0100101000000010 q = 001000000001000111001110110111010
440 c = 010 a = 1110111011101110 b = 0011111010101110 q = 000111010100000000000100111000100
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 高校 有効数字計算 確定した値を含む 2 2023/01/18 06:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- HTML・CSS CSS上での計算を行うためのルールについて教えてください。 3 2022/08/15 14:43
- 化学 化学のエンタルピ変化を求め方について ある例題では各物質のモール数を換算して計算することもあり、ある 1 2022/06/20 23:22
- Excel(エクセル) エクセルのSUM関数について 4 2023/04/18 10:37
- Access(アクセス) Access クエリ 同一テーブル内 複数フィールドの同時集計のやり方について 1 2022/05/18 19:01
- 労働相談 有給休暇使用時の賃金の計算方法について 5 2022/04/04 00:02
- 統計学 テストの順位についてです 今回のテストの順位を知りたいのですが、できますでしょうか?今回は僕の学年は 4 2022/11/30 19:15
- 高校 高校化学有効数字計算 4 2023/02/26 09:09
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
計算機はなぜ計算間違いをしないか
-
フラクタル次元の解析プログラ...
-
プログラムの発散
-
VBAで関数をつくる
-
[ASP]日付と時間の比較
-
EXCELなどで「返す」という表現
-
PHPで四則演算以外の微分、積分...
-
EXCEL VBAとワークシート関数の...
-
優先度付き待ち行列について
-
アドオン利率を実質年率に変換
-
バッチファイルでウインドウを...
-
骨折リスク評価のFRAXについて...
-
スパイダソリティアの問題
-
桁区切り数値の計算
-
【JAVA】数字をひし形に出力す...
-
Bluestacks内でダウンロードし...
-
グループを均等に分けるには?...
-
COBOLのUNSTRINGについて
-
自動クエリとはどういうもので...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
65536は2の何乗なのでしょうか?
-
mod でうまく
-
めちゃきれい
-
VBAの再計算が反映されない件に...
-
排他的論理和 BCC(水平パリテ...
-
バッチファイルでウインドウを...
-
モジュラス103の計算とは何でし...
-
EXCELなどで「返す」という表現
-
変化させるセルが変化しない
-
60進数の四則計算
-
プログラムの質問
-
VBでReplace
-
数値計算の高速化 (cos, sin, exp)
-
C言語についてです。 再帰を使...
-
Javaを使った行列計算
-
C言語のプログラミングの問題で...
-
エクセルで特定のセルのみを任...
-
matlab計算での進捗状況を知りたい
-
CとFORTRANの計算速度はどちら...
-
matlabで計算終了
おすすめ情報