首页 > 其他分享 >verilog signed to unsigned offset binary

verilog signed to unsigned offset binary

时间:2024-08-06 09:43:12浏览次数:17  
标签:binary 符号 补码 h80 verilog offset 数据

verilog signed to unsigned offset binary

背景

有符号数据的最高bit 是 符号位,通常有符号数据都用补码来表示。补码就是该数绝对值的原码取反 再加1 得到,取补码的原因是为了把减法操作变成加法操作,便于电路实现。

但是在HDL语言中处理有符号数据比较麻烦,HDL更习惯于无符号数据,无符号数据的补码就是其原码,不需要任何转换。因此在需要做有符号数计算的时候,通常会把有符号数转换到无符号数,计算完成之后再转换到有符号数据。这样就可以避免对补码进行操作。

转换方法

原理

比如对8bit 数据来说,有符号数据的范围是-128 - 127,无符号数据的表示范围为0-255,实际上就是多了128的偏移,因此可以将有符号数整体偏移后 参与后续处理,其数据范围并没有改变。在后续DSP处理完成之后再转换到有符号数据即可。

有符号数转无符号数 offset binary

下面是8bit数据的转换,整体加上8‘h80 即可实现转换。比如8’h80 + 8’h80 = 8’h00,其中产生的进位由于位数原因会自动丢弃。

assign id_unsigned = id_signed + 8'h80;//二进制补码转换到 offset binary convert

十进制 补码 转换后
-128 8’h80 8’h00
-127 8’h81 8’h01
-126 8’h82 8’h02
0 8’h00 8’h80
126 8’h7e 8’hfe
127 8’h7f 8’hff

offset binary 无符号数转有符号数

与上述转换相反,整体减去8‘h80 即可实现转换。为了避免减法的出现,我们可以做如下操作

assign id_signed = id_unsigned<8'h80 ?(id_unsigned + 8'h80) : id_unsigned[7:0] ;//offset binary convert to 二进制补码

进行上述操作后,符号位就被轻松做了化解,这在ADC/DAC等数据处理应用中十分有用。

标签:binary,符号,补码,h80,verilog,offset,数据
From: https://www.cnblogs.com/xingce/p/18344491

相关文章

  • systemverilog中for/foreach并行执行
    目录for-join_none并行foreach并行for-join_none并行for循环和fork-join_none语句可以组合使用来并行执行多个块,这里必须使用非阻塞的fork-join_none来启动多线程,因为使用fork-join_none时每一次循环都会创建新的fork块,并且不影响之后创建fork块,而fork-join则会阻塞后面的for......
  • Modelsim仿真实现Verilog HDL序列检测器
    检测接收到的数字序列中出现“10011”的次数。例如输入序列为40位:1100_1001_1100_1001_0100_1100_1011_0010_1100_1011从最高位开始检测,出现了2次:1100_1001_1100_1001_0100_1100_1011_0010_1100_1011所以,序列检测器的计数结果应该是2。状态机如下:当前状态current_stat......
  • Towards Practical Binary Code Similarity Detection: Vulnerability Verification v
    "迈向实用的二进制代码相似性检测:通过补丁语义分析进行漏洞验证"0x0Abstruct二进制代码相似性检测方法可以有效地搜索二进制软件中代码共享引入的重复出现的漏洞(1day)。然而,这些方法存在较高的误报率(FPR),因为它们通常将修补的函数视为易受攻击的函数,并且当使用不同的编译设置编译......
  • Selenium“没有提供‘moz:firefoxOptions.binary’功能,并且在命令行上没有设置二进制
    我一直在尝试将python脚本移植到我的wsl/bash编码中心中。我继续收到此错误:Traceback(mostrecentcalllast):File"/path/to/my/file.py",line20,in<module>driver=webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))Fil......
  • LeetCode | 704 BinarySearch
    https://github.com/dolphinmind/datastructure/tree/datastructure-array主类packagecom.github.dolphinmind.array.binarysearch;/***@authordolphinmind*@ClassNameBinarySearch*@description704二分法搜索*前提条件:有序数组,且无重复元素......
  • canal 报错:Could not find first log file name in binary log index file
    canalwiki地址:https://github.com/alibaba/canal/wiki/canal报错:Couldnotfindfirstlogfilenameinbinarylogindexfile1、canal_deployer日志报错:2024-07-2914:25:21.624[destination=example,address=/192.168.1.7:3306,EventParser]ERRORc.a.o.c.p.......
  • Verilog连续赋值、过程赋值、过程连续赋值总结
    最近总是遇到systemverilog的赋值问题,查看了一下手册发现SV的赋值方式总的还是继承了verilog的赋值方式,而且verilog赋值方面的资料比较多,所以就写了先写一篇关于verilog的赋值总结。连续赋值连续赋值就是一旦赋值,输出将随输入改变而变化,一旦修改输入则立刻体现在输出上。input......
  • Modelsim仿真实现Verilog HDL频率检测器
     检测输入信号的频率,输出8位数码显示,十进制。可以用于八段式数码管显示屏。1clk产生1Hz的方波,这是个很低的频率,被检测的频率都比这个高,因此,1个周期(即1s)内,可以有很多很多个signal的上升沿,只需要统计signal上升沿的数量,就可以算出signal的频率。在clk第1个上升沿发生后,令......
  • Verilog编程学习之—呼吸灯
    Verilog编程-呼吸灯1.设计目标用FPGA产生占空比变化的PWM波,控制LED灯由暗变亮的变化。2.设计思路设置PWM波的步长为2us,周期为2ms,每个周期内LED亮的时间由0增加至999,再从999减少至0,依次循环,就可以看到LED灯由暗变亮再由亮变暗的循环过程。可以设置一个占空比寄存器duty_r和一个......
  • Verilog HDL 的简单组合逻辑设计代码学习记录
    1.比较数据a和b,若两个数据相同则输出1,否则输出0(a、b均为单比特)看需求就简单设置输入a,b,输出o。modulecompare(a,b,o);inputa;inputb;outputo;//先来第一种写法,使用?:,这里是默认全是wire类型assigno=(a==b)?1'b1:1'b0;//第二种写法,使用ifelserego;alwa......