【发布时间】:2017-12-11 18:53:19
【问题描述】:
我正在尝试将两个 7 位数字与 Verilog 相乘。然而,我似乎遇到了麻烦。当结果在小数点 0-9 之间时,乘法似乎起作用(产生 1 的输出)。然而,似乎任何大于 9 的结果似乎都不会产生 1 的输出。即使“操作数 1”和“操作数 2”在技术上只有 4 位(十进制 0-9),我尝试将它们切换为 7-位数来确定这是否能解决我遇到的问题。
此特定模块通过物理开关检查用户以二进制形式提供的答案,如果所述答案不正确则返回 0,如果正确则返回 1。所有其他运算(加法、减法和除法)都能完美运行。
这是我的代码:
module checkAnswer(OpSel, negFlag, Operand1, Operand2, usrAnswer, Correct);
input [1:0]OpSel;
input [6:0]Operand1, Operand2;
input negFlag;
input [6:0]usrAnswer;
output reg Correct;
always @ (*)
case (OpSel)
2'b00:
if ((Operand1%10 + Operand2%10) == usrAnswer)
Correct = 1'b1;
else
Correct = 1'b0;
2'b01:
if ((negFlag && (Operand2 > Operand1) && ((Operand1%10 - Operand2%10) == -1*usrAnswer)) || ((Operand1 >= Operand2) && ((Operand1%10 - Operand2%10) == usrAnswer)))
Correct = 1'b1;
else
Correct = 1'b0;
2'b10:
if ((Operand1%10 * Operand2%10) == usrAnswer)
Correct = 1'b1;
else
Correct = 1'b0;
2'b11:
if ((Operand1%10 / Operand2%10) == (usrAnswer))
Correct = 1'b1;
else
Correct = 1'b0;
default: Correct = 1'b0;
endcase
endmodule
【问题讨论】: