Verilog签署了未签名的操作

时间:2015-06-11 14:49:21

标签: verilog

我在48页引用了this ppt

Q1。如果签名的加法操作有正或负溢出怎么办? 在(签名签名)或(签名+签名)之间,我该怎么办?

例如,-63 + -96或72 + 105  如何处理这些?

Q2。我从这里找到了这样的代码。

reg signed [7:0] a;
reg [7:0] b;

initial
begin
result = a;            //Signed
result = a * a;        //Signed
result = a * 10;       //Signed
result = $unsigned(a); //Unsigned
result = a[0];         //Unsigned
result = a[7:0];       //Unsigned
result = {a,a};        //Unsigned
result = {10{a}};      //Unsigned
result = a + b;        //Unsigned
result = a * b;        //Unsigned
end
这是真的吗?

1 个答案:

答案 0 :(得分:0)

最好单独询问问题,以便接受每个部分的最佳答案。

Emman发布了a previous answer of mine链接,我认为它与问题的第一部分有关,因为它显示了如何检测溢出和下溢。

由于dave_59已经提到基于溢出/下溢的限制或允许包装完全取决于所需的算术。对于某些操作,您知道并且溢出将在下一个操作中返回到范围内,因此您可以在不需要硬件的情况下获得扩展精度的效果。通常在积分器(累积值)中进行区分(或者是相反的方式?)。

在我的大部分工作中,我需要限制,一旦检测到限制,只需指定最大值,最小值或实际值。

 always @* begin
   if (overflow) begin
     result = {1'b0, {WIDTH-1{1'b1}}; //MAX +ve
   end
   else if (underflow) begin
     result = {1'b1, {WIDTH-1{1'b0}}; // MAX -ve
   end
   else begin
     result = the_real_result;
   end
 end

关于有符号/无符号算术的问题,它们看起来是正确的,但是一种简单的检查方法是设置为负值并使用$display("%d", variable_x);运行模拟以查看算术的值类型。

注意:Verilog更喜欢无符号算术,并且会抓住机会去做。必须为签名算术签名所有操作数。