用“*”做二进制数的乘法,只得到加法,为什么? (代码在这里)
Using " * " for multiplication of binary numbers, only gives me addition, why? (Code here)
我正在学习“+”、“-”和“*”的运算,加法和减法效果很好,但乘法只给我加法,link代码:
http://www.edaplayground.com/x/NvT
我检查了代码,无法理解发生了什么。我给了足够的space(位)结果变量。
顺便说一句,它是用于包括小数在内的定点运算的代码,但所有内容都按整数计算。
你的select信号只有1bit。
然后,当您设置 select = 2 时,它会分配 2(2'b10) 的低位,即 0.
您应该通过 :
更改 select 声明
input [1:0] select; // In the module
reg [1:0] select; // In the testbench
为避免此类错误,我建议您使用完整的值表示法:
x'tnnn...nnn
其中 x 是信号的宽度,t 是类型(d 代表十进制,h 代表六进制,b 代表二进制,...)和 nnn...nnn 指定类型的值。
例如,对于十进制值 2,您将有几种在某些情况下有意义的符号:
2'd2 //2 bits decimal
2'h2 //2 bits hexadecimal
2'b10//2 bits binary
有关这些符号的更多信息,您可以阅读 this pdf。
我正在学习“+”、“-”和“*”的运算,加法和减法效果很好,但乘法只给我加法,link代码:
http://www.edaplayground.com/x/NvT
我检查了代码,无法理解发生了什么。我给了足够的space(位)结果变量。
顺便说一句,它是用于包括小数在内的定点运算的代码,但所有内容都按整数计算。
你的select信号只有1bit。
然后,当您设置 select = 2 时,它会分配 2(2'b10) 的低位,即 0.
您应该通过 :
input [1:0] select; // In the module
reg [1:0] select; // In the testbench
为避免此类错误,我建议您使用完整的值表示法:
x'tnnn...nnn
其中 x 是信号的宽度,t 是类型(d 代表十进制,h 代表六进制,b 代表二进制,...)和 nnn...nnn 指定类型的值。
例如,对于十进制值 2,您将有几种在某些情况下有意义的符号:
2'd2 //2 bits decimal
2'h2 //2 bits hexadecimal
2'b10//2 bits binary
有关这些符号的更多信息,您可以阅读 this pdf。