0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog中signed和$signed()的用法

FPGA设计论坛 来源:FPGA设计论坛 2025-02-17 17:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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要视为有符号数据。

e55494b0-ec1b-11ef-9310-92fbcf53809c.png

e5626766-ec1b-11ef-9310-92fbcf53809c.png

e577d7d6-ec1b-11ef-9310-92fbcf53809c.png

$signed()函数

返回有符号的值,值得注意的是verilog中的负数其实是{1’b1,pos_num},而并非高级语言中的补码。使用中最好通过增加$signed{1’b符号,正数}来实现转换以避免错误。

此外在对signed wire 或signed reg 赋值时,右侧的所有变量最好全部加上$signed函数转换,以防止遗漏,造成数据错误

signed变量移位操作时最好使用<<<和>>>,防止对符号位进行操作,导致数据出错

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    31

    文章

    1374

    浏览量

    114718

原文标题:Verilog 中signed和$signed()的用法

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    昉·星光开发板气压与高度测量

    开发板使用气压传感器获取当前环境的温度与大气压,并进行高度测量 二、准备工作 在开始本次课程的实际操作之前,同学们需要做好一些准备工作,课程涉及到的硬件如下: 开发板:昉·星光开发板 气压传感器
    发表于 03-17 07:39

    使用 VisionFive 2 上的气压传感器测量高度

    此参考值测量高程值。 在实际测量,由于环境影响,结果值可能会有一定程度的漂移。可以考虑连续读取多条数据,然后使用一定的算法来获得最终合理的测试结果。 4. 总结 在这个演示,我们学习了气压传感器的基本用法。 事实上,压力传感
    发表于 03-09 06:02

    变频器的特殊用法

    变频器作为电力电子技术的重要应用设备,其核心功能是通过改变电源频率实现对电机转速的精确控制。然而在实际工业场景和创意应用,工程师们早已突破传统认知,开发出一系列令人惊叹的特殊用法。这些创新实践不仅拓展了变频器的应用边界,更展现了电力电子技术的无限可能。
    的头像 发表于 03-03 17:08 608次阅读

    通过2的幂次进行除法和取余数快捷方法优化

    如果除法的除数是2的幂次,我们可以更好的优化除法。 编译器使用移位操作来执行除法。因此,我们需要尽可能的设置除数为2的幂次(例如64而不是66)。 并且依然记住,无符号unsigned整数除法
    发表于 12-12 06:02

    C语言的printf基本用法介绍

    is %d !\" 的 %d 被替换成了 abc 的值,其他字符没有改变。这说明 %d 比较特殊,不会原样输出,会被替换成对应的变量的值。 再来看: int a=100; int b
    发表于 11-12 07:04

    verilog testbench运行测试用例时,运行到make run_test出错怎么解决?

    按照胡老师书上的在verilog testbench运行测试用例时,在运行到make run_test步骤时出错,查了很多方案没有解决。
    发表于 11-11 06:52

    使用NucleiStudio生成tb仿真需要的.verilog文件

    打开仿真顶层文件tb_top.v,存放在ITCM模块里面的指令是通过readmemh函数读入.verilog文件实现的: 下面通过对NucleiStudio IDE进行设置,实现将c
    发表于 11-05 07:07

    定点数表示实数的方法以及定点数在硬件上的运算验证

    实现,不建议使用除法,通常除法运算较慢,将严重影响时序。 FPGA定点数乘法运算 高版本的综合工具已经支持有符号整数运算的综合,我们仅需要在RTL代码的对应数据中加入 signed关键词
    发表于 10-28 08:13

    rt-thread studio怎么设置才能让char变量是真正的有符号类型?

    如下图所示‘char’ is signed(fsigned-char)这个选项,编译器都将char变量视为无符号的。请知晓的朋友指导一下,谢谢。
    发表于 09-16 08:23

    【汇思博SEEK100开发板试用体验】3/第一次使用OpenHarmony

    Automatically generate signing 。 点击Build → Build HAP(s)→ 生成entry-default-signed.hap(自动签名完成)。 ​​手动安装
    发表于 08-20 22:21

    用TXT编辑器打开十六进制文件,如何知道校验和值?

    ).elf --output ./build/APP_PMG1-CY7113/Release/ $(APPNAME)_signed.elf --hex ./build/APP_PMG1-CY7113
    发表于 05-23 07:49

    UIAbility组件基本用法说明

    UIAbility组件基本用法 UIAbility组件的基本用法包括:指定UIAbility的启动页面以及获取UIAbility的上下文UIAbilityContext。 指定UIAbility
    发表于 05-16 06:32

    SVA断言的用法教程

    SVA是System Verilog Assertion的缩写,即用SV语言来描述断言。断言是对设计的属性的描述,用以检查设计是否按照预期执行。
    的头像 发表于 05-15 11:39 3758次阅读
    SVA断言的<b class='flag-5'>用法</b>教程

    verilog模块的调用、任务和函数

    在做模块划分时,通常会出现这种情形,某个大的模块包含了一个或多个功能子模块,verilog是通过模块调用或称为模块实例化的方式来实现这些子模块与高层模块的连接的.
    的头像 发表于 05-03 10:29 1736次阅读
    <b class='flag-5'>verilog</b>模块的调用、任务和函数

    harmony OS NEXT-Navagation基本用法

    # Navagation基本用法 > Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏,内容栏和公工具栏,其中内容区默认首页显示导航内容
    的头像 发表于 04-27 17:39 1068次阅读