我如何表示负十进制 verilog
how do I represent negative decimal verilog
我已经将一些十进制值转换为定点数并想进行一些乘法运算,但是其中一些值是负数谁能告诉我一个简单的方法来进行乘法运算我已经尝试过但没有成功:
pix_r2m<=($signed({1'b0,pix_rld})*8'b11101101;// the binary is:-0.148.
这是同步发生的,pix_r2m
、pix_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
但是您可能希望将结果标记为已签名,因此您应该使用:
reg signed [16:0]pix_r2m;
我已经将一些十进制值转换为定点数并想进行一些乘法运算,但是其中一些值是负数谁能告诉我一个简单的方法来进行乘法运算我已经尝试过但没有成功:
pix_r2m<=($signed({1'b0,pix_rld})*8'b11101101;// the binary is:-0.148.
这是同步发生的,pix_r2m
、pix_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
但是您可能希望将结果标记为已签名,因此您应该使用:
reg signed [16:0]pix_r2m;