我如何表示负十进制verilog

时间:2016-03-18 13:39:56

标签: math verilog fixed-point

我已经将一些十进制值转换为固定点并且想要进行一些乘法,但是这些值中的一些是负的,任何人都可以向我展示一种简单的方法来执行乘法我尝试了但是没有成功:

pix_r2m<=($signed({1'b0,pix_rld})*8'b11101101;// the binary is:-0.148.

这是以同步方式进行的,pix_r2mpix_rld定义为:

reg [16:0]pix_r2m;
reg [7:0]pix_rld;

1 个答案:

答案 0 :(得分:1)

给出任何机会的Verilog将恢复为无符号算术,这里被乘数或系数是无符号的。告诉它用8&#39; s b签名,允许进行正确的符号扩展。

module test;
  reg [16:0]pix_r2m;
  reg [7:0]pix_rld;

  always @* begin
    //* -0.148
    pix_r2m = $signed({1'b0,pix_rld}) * 8'sb11110111;
  end

  initial begin
    pix_rld = {4'd1,4'd0}; //1
    #1 $display("%b", pix_r2m);


    pix_rld = {4'd2,4'd0}; //2
    #1 $display("%b", pix_r2m);
  end


endmodule

EDA Playground

但您可能希望将结果标记为已签名,因此您应该使用:

reg signed [16:0]pix_r2m;