如何在Verilog中获得分数(例如0.78)的平方和立方?

时间:2019-12-08 14:17:27

标签: verilog system-verilog

我是Verilog / System Verilog的新手,我想实现平方和立方小数。考虑以下示例

module test(
  input wire [31:0] input, 
  output reg [63:0] output
);
reg [63:0] temp;
always @ (*) begin
          temp = input*input;
          output <= temp*input;
end
endmodule

因此,当我的input 32'h0_C7AE147 时(在hexadecimal数字系统中,使用32位表示并假设_等于.(在Verilog中),我期望output 32'h0_797C3D6 (在decimal编号系统中为0.4745)

但是我得到{strong> 64'hD546_4A9C_ED94_2917

output

此外,如何处理乘法中增加的位大小?

当我们将两个 N 位宽的操作数相乘时,将得到宽度为 2N 位的输出。当我们将这个 2N 位宽的数字与一个 k 位宽的数字相乘时,我们得到了多个宽度 2N + k 位宽的数字,这个过程还在继续。

1 个答案:

答案 0 :(得分:2)

您的意思是要用32位定点表示法用4位整数部分+ 28位小数部分表示小数吗?为什么需要64位的输出?

无论如何,我认为您需要为每个乘法将乘积右移28位。

尝试:

temp = input * input >> 28;
output <= temp * input >> 28;

如果需要适当的舍入,请在每次移位之前进行。