我如何表示负十进制 verilog

how do I represent negative decimal verilog

我已经将一些十进制值转换为定点数并想进行一些乘法运算,但是其中一些值是负数谁能告诉我一个简单的方法来进行乘法运算我已经尝试过但没有成功:

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;

只要有机会,Verilog 就会恢复为无符号算术,这里的被乘数或系数是无符号的。告诉它用 8'sb 签名,允许进行正确的符号扩展。

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;