RTL设计中中$signed函数的使用

这次在进行lint检查时,出现了关于$signed函数的使用警告,基于此点,给自己把$signed的应用整理记录在此。

在硬件中,都是二进制数,但是在实际的使用中经常使用的是有符号数,就是一个数是有正负之分。verilog语言给我们提供了方便设计者的有符号数处理的函数$signed,这也依赖于我们的编译器能识别并正确的解释该函数。该函数存在以下几方面的使用和注意事项。

1 数据类型的声明

在定义一个有符号变量时,直接在定义时声明,在之后的使用中不用在该变量前加上$signed。

wire signed [2:0] data_a;
reg  signed [3:0] data_b;

如果定义的变量没有声明为有符号数,在使用过程中需要做有符号数运算时,需要在该变量前加上$signed。

wire [3:0] data_c;
wire signed [4:0] data_d;

assign data_d = $signed(data_c)+$signed(-3'd2);

 定义有符号数变量的最小位宽为2bit,因为1bit无法表示符号位和数值位。

 如果一个变量已经被定义为有符号数,在调用时还在该变量前加了$signed,则在lint检查时会报warning。

2 加、减、乘运算

运算的操作数都是$signed的才会进行有符号运算,否则按照无符号数进行运算。

3 移位操作

有符号数移位操做后会成为无符号数。

4 位扩展和截短操作

对有符号数进行截短操作后获得一个无符号数,对一个有符号数进行位扩展需要考虑是向左还是向右进行扩展,但一般多用于向左扩展符号位,保留其有能号数的性质。

5 参考链接

数字IC秋招面试专题(二)verilog的signed和unsigned_verilog $signed-CSDN博客总

写在最后,记住输入是什么样子,明确需要的结果是什么,就会时刻记住数据的正确格式和类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值