VERILOG中的有符号数运算

相比C/C++等语言,verilog在处理带符号运算时没有那么灵活。首先需要用语法申明是带符号数,其次要扩展符号位、对加法运算扩展后的参加运算的带符号数位宽要一样。

比如下面代码:

wire                  [7:0]       a;

wire   signed     [15:0]      b;

parameter   WEIGHT = 8 ;

wire  signed [8+15:0]     pa;

wire  signed [16+ 7:0]    pb;

wire  signed [23:0]         pc; //相加后位宽仍为24bit

wire  signed [23:0]         pd; //相乘后位宽仍为24bit

符号位扩展:

assign pb = b[15] ? {{8{1'b1}},b} : {{8{1'b0}},b} ; //扩展8bit符号位

assign pa = {16'b0,a}; //无符号数直接扩展8bit的0

相加:

assign pc = $signed (pa) + $signed (pb) ;

2个带符号数如位宽不一致,会导致计算结果出错。

相乘:

8bit与16bit相乘,结果位宽需要24bit;符号位扩展方法仍然与上面一样,乘积结果仍然为24bit。(想想这是为什么?)

assign pd = $signed (pa) * $signed (pb) ;

有位操作,有符号数被视为无符号数;带符号数如果被列入拼接符号内,相当于位操作将被视为无符号数。比如:

wire       signed [10:0]           A0;

wire       signed [10:0]           A1;

wire       signed [10:0]           B;

wire       signed [10:0]           C;

assign  A0 = B[10:1];

assign  A1 = {C,2‘b0};

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Verilog,有符号运算需要通过使用`signed`关键字或`$signed()`函来表示。有符号的计算需要将操作声明为有符号类型,并且使用特定的运算符进行操作。 如果在Verilog叙述有需要进行有符号的计算,可以使用Verilog 2001提供的`signed`关键字或`$signed()`函来标识有符号。通过使用这些机制,可以确保有符号的正确计算结果。 需要注意的是,只有两个操作都是有符号时,才会将这两个操作都视为有符号进行计算。如果只有一个操作是有符号,那么无论另一个操作是有符号还是无符号,都会按照无符号计算。 举个例子,假设有以下Verilog代码: ``` wire [3:0] a=4'b1001; wire signed [3:0] b=4'b1110; wire signed [4:0] c; assign c = ((a + b)>>>1); //-9=10111 ``` 在上述代码,通过将变量`b`声明为有符号类型,可以确保与变量`a`的计算结果是按照有符号进行计算的。在这种情况下,计算结果将是-9。 综上所述,Verilog符号运算需要使用`signed`关键字或`$signed()`函来标识有符号,并确保所有操作都是有符号才能正确进行有符号的计算。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [verilog的有符号运算(转)](https://blog.csdn.net/feixiaku/article/details/8646674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Verilog符号与无符号运算](https://blog.csdn.net/u014485485/article/details/79962316)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值