verilog中signed的使用

Posted yuandonghua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog中signed的使用相关的知识,希望对你有一定的参考价值。

1、在verilog中有时会用signed修饰符来修饰定义的数据,运算的时候也会用$signed()任务来强制转换数据,那么signed的修饰是为什么呢,是为了区分有符号数和无符号数的加法和乘法吗?其实不是的,因为有符号数和无符号数据的加法强结果和乘法器结构是一样的,signed的真正作用是决定如何对操作数扩位的问题。

2、verilog中的加法和乘法操作前,会先对操作数据扩位成结果相同的位宽,然后进行加法或者乘法处理。比如a/b都为4位数据,c为5位数据,c = a + b,这个运算的时候会先把a和b扩位成5位,然后按照无符号加法进行相加。a/b没有被signed修饰的时候会按照无符号数的扩位方式进行扩位,即高位补0,加法的结果当然也是a、b为无符号数相加的结果。

3、如果想把a、b作为有符号数来相加,那么就得在a/b数据定义的时候用signed修改,或者在计算的时候用$signed()来修饰,这样在c = a + b,这个运算开始的扩位就会按照有符号数的方式进行扩位,在高位补符号位,加法得出的结果就是a、b视为有符号数的结果。当然c要视为有符号数据。技术分享图片技术分享图片

技术分享图片

以上是关于verilog中signed的使用的主要内容,如果未能解决你的问题,请参考以下文章

在verilog设计中,如何将特定位数的数值转换成32位signed型?

Verilog 关于负数

如何理解verilog HDL中的不定值(x)?

使用Verilog如何设计一个上升沿检测器?

关于verilog 中 assign 用法的一个问题

verilog数字高位扩展表示方法