我已经将一些十进制值转换为固定点并且想要进行一些乘法,但是这些值中的一些是负的,任何人都可以向我展示一种简单的方法来执行乘法我尝试了但是没有成功:
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;
答案 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
但您可能希望将结果标记为已签名,因此您应该使用:
reg signed [16:0]pix_r2m;