Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Verilog:无符号乘有符号_Verilog_Modelsim - Fatal编程技术网

Verilog:无符号乘有符号

Verilog:无符号乘有符号,verilog,modelsim,Verilog,Modelsim,现在我正试图通过一个8位变量来调整12位有符号输入的振幅 module mixer_4input (in, amp, out); input signed [11:0] in; input [7:0] amp; wire signed [8:0] signed_amp; output signed [19:0] out; assign signed_amp = amp; assign out = $signed((in >>

现在我正试图通过一个8位变量来调整12位有符号输入的振幅

module mixer_4input (in, amp, out);

input signed    [11:0]  in;
input           [7:0]   amp;
wire signed     [8:0]   signed_amp;
output signed  [19:0]   out;
  
assign signed_amp = amp; 
assign out = $signed((in  >> 8) * signed_amp);  
//assign out = $signed(amp) * (in >> 8); //this one works wrong too
  
endmodule

但是输出要么缺少符号,要么完全错误。 modelsim中的基数类型是根据我等待看到的设置的


我做错了什么?谢谢

这一行不会像我想的那样延伸:

assign signed_amp = amp;
amp
为8位宽且无符号。Verilog将通过在左侧添加一个
1'b0
将其扩展到9位,无论
amp
的第7位的状态如何。
signed\u amp
已签名这一事实与此无关

要实现此功能,首先需要使用
$signed
系统功能将
amp
转换为要签名:

assign signed_amp = $signed(amp);
我认为这也不是你所期望的:

assign out = $signed(amp) * (in >> 8);
>
是逻辑右移。因此,将在左侧添加零。我想你需要这个:

assign out = $signed(amp) * (in >>> 8);

使用算术右移运算符-
>
,它将在中保留
的符号

我使用>>8将输入除以256,这样就可以乘以0…255。事实证明,变量的“12位有符号”部分存储在前12位(duh!),而modelsim显示整个19位的值,这是误导性的