systemverilog中实现饱和截位和饱和截位的分析

截位(rnd/prnd/floor):都是去掉低位数据的操作(去掉低位低精度的数据,或者说小数位,降低数据的精度)

饱和(sat/sym_sat):都是去掉高位数据的操作,(去掉无符号数高位的0,或者有符号数高位多余的符号位)

函数说明:

floor:

这个操作很简单,就是把低位直接截掉,精度损失大。有符号和无符号数据都适用用于这个函数,且不需要指示输入的数据是有符号还是无符号。

prnd:

1.假的四舍五入处理,与真正的四舍五入唯一的区别在于,当输入的数据是负数的时候,且要截掉的数据为1xx1xx的时候(要截掉的数据最高位为1,且低位还有1的存在),prnd处理的结果是有误差的。

2.prnd可以处理无符号和有符号数据,输入要指示数据的类型,sign=0表示无符号,sign=1表示有符号数据。

3.prnd处理有加法操作,会扩宽数据位宽,比如一个6bit的数据,你想截掉低3位数据,那么输出的数据位宽应该是4bit,OUT_DW = IN_DW - nBits + 1,4 = 6 - 3 + 1.

rnd:

1.常规的四舍五入,比prnd精确,但是资源要大些。

2.rnd是对prnd在负数时候出现误差的一个优化处理,所以输入的数据必须是有符号数,输入无符号输出会导致错误。

3.把数据分为保留部分preserve_part和截去部分cut_part,preserve_part=din[IN_DW-1:IN_DW-OUT_DW+1],cut_part=din[IN_DW-OUT_DW]

4.为了好理解rnd中的处理,先普及3个常识,常识1:有符号数中,把一个正数的一位0替换成1会使数据远离原点(使数据增大,替换最高的符号位除外),;把一个负数的一位0替换成1但却是使数据靠近原点(同样会使负数变大)。nbit负数A=n‘b1xxxx的绝对值   ABS = (2^n-1) - unsigned(A)  ;也就是说,A作为一个无符号数越大,那么A作为一个负数的绝对值越小。表面越大,实际越小。

5.常识2,四舍五入是对小数小于0.5的往靠近原点方向拉,大于0.5的往远离原点方向拉,0.5-->1,0.4-->0,-0.5-->-1,-0.4-->0

6.常识3,二进制数据中,第一位小数的权重为0.5,那么正数二进制数的  .1表示十进制的0.5,而负数二进制数  .0  表示的是-0.5

5.有了(4,5)中的常识,我们可以很快就知道6bit有符号数A=6‘b111000要比B=6‘b111100更靠近原点。假如6bit数据有3bit整数位,3bit小数位,那么A=-1.5,B=-1.25,若要把小数点截掉,那么A应该截位-2,B应该截位-1

原文地址:https://www.cnblogs.com/yuandonghua/p/asic.html

时间: 2024-08-30 00:06:58

systemverilog中实现饱和截位和饱和截位的分析的相关文章

关于32位程序在64位系统下运行中需要注意的重定向问题(有图,很清楚)

0x00 前言 最近学习了[email protected]的文章<Persistence Architecture Matters>,恰巧解决了我之前遇到过的一个问题,理清了文件和注册表重定向中需要注意的细节 大家在学习的过程中难免也会碰到,所以在此分享一下. <Persistence Architecture Matters>的链接:https://labs.mwrinfosecurity.com/blog/persistence-architecture-matters/ 0

控制input标签中只能输入数字以及小数点后两位

js 代码如下: /* 控制input标签中只能输入数字 和小数点后两位 */ function checkNum(obj) { //检查是否是非数字值 if (isNaN(obj.value)) { obj.value = ""; } if (obj != null) { //检查小数点后是否对于两位http://blog.csdn.net/shanzhizi if (obj.value.toString().split(".").length > 1 &a

VS2013 中配置 Qt5.3 开发环境(32位)

需要的东西: 1.VS2013 2.Qt5.3 3.Visual Studio Add-in 1.2.3 for Qt5 其中2和3项可在Qt官网下载:http://qt-project.org/downloads (第3项在download页面最下方的other downloads中找到) 要注意的是,这里使用的是 Qt 5.3.0 for Windows 32-bit (VS 2013, 626 MB) ,使用32位是为了兼容更多的机子,以下的配置也是针对32位的,相比64位可能少一点步骤

JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储。浮点型数据使用注意事项

JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储. 所有的编程语言,包括 JavaScript,对浮点型数据的精确度都很难确定: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <body> <p id="

MAC(Media Access Control)地址,或称为 MAC位址、硬件位址,用来定义网络设备的位置。在OSI模型中,第三层网络层负责 IP地址,第二层

http://baike.baidu.com/view/69334.htm MAC(Media Access Control)地址,或称为 MAC位址.硬件位址,用来定义网络设备的位置.在OSI模型中,第三层网络层负责 IP地址,第二层数据链路层则负责 MAC位址.因此一个主机会有一个IP地址,而每个网络位置会有一个专属于它的MAC位址. MAC(Medium/Media Access Control)地址,或称为 MAC地址.物理地址,用来表示互联网上每一个站点的标识符,采用十六进制数表示,共

systemverilog中module与program的区别

我们知道,verilog语法标准中是没有program的,program是systemverilog语法标准新增的内容. 那么,为什么要新增一个program呢?主要考量是基于电路的竞争与冒险. 为避免仿真和设计竞争问题(race condition),systemverilog中引入了program的概念. 所有与设计相关的线程在module中执行,而与验证有关的线程则在program中运行.在仿真过程中,这两种线程运行在不同的时间步(time step),从而解决了竞争问题. module与

iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)

iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏) 2017.03.16 12:18* 字数 52 阅读 563评论 4喜欢 2 1. 截取屏幕尺寸大小的图片并保存至相册 保存至相册只需将方法saveImage中的代码替换即可 UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0.0); [self.view.layer renderInContext:UIGraphicsGetCur

5北京某高校可用的电话号码有以下几类:校内电话号码由4位数字组成,第一位数字不是0.校外电话又分为本市电话和外地电话两类。拨校外电话需要先拨0,若是本市电话则接着拨8位数字(第一位不是0),若是外地电话则拨3位区码后再拨8位电话号码(第一位不是0)。

答: 电话号码=[校内电话号码|校外电话号码] 校内电话号码=非零数字+3位数字 校外电话号码=[本市号码|外地号码] 本市号码=数字零+8位数字 外地号码=数字零+3位数字+8位数字 非零数字=[1|2|3|4|5|6|7|8|9] 数字零=0 3位数字=3{数字}3 8位数字=非零数字+7位数字 7位数字=7{数字}7 数字=[0|1|2|3|4|5|6|7|8|9] 其中,[ ]意思是或,从校内电话号码或校外电话号码中选择一个:{ }表示重复,两边的数字表示重复次数的下限和上限:=意思是定

32位程序下调用64位函数——进程32位模式与64位模式切换

之前学习的32位进程中调用64位进程函数的知识整理一下,也就是32位模式与64位模式之间的切换. 相关博客:http://www.cnblogs.com/lanrenxinxin/p/4821152.html 这个博客中提到了github上的开源库,我在另一份开源项目中也看到了个库,可以切换32位至64位. 如果对这个功能具体实现比较感兴趣的朋友可以看看下面的内容. 我阅读了源码并进行了注释,算是对这个具体方法的分析和学习. 关键: 1.在x64下的进程,不管是32位或者是64位,实际上都映射了

C# 32位程序在64位系统下注册表操作

在64位的Windows操作系统中,为了兼容32位程序的运行,64位的Windows操作系统采用重定向机制.目的是为了能让32位程序在64位的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与64位程序冲突 相关资料请查看32位程序在64位系统下运行的重定向机制 下面是以获取操作系统安装密匙KEY的案例: using System; using System.Collections.Generic; using System.Linq; using System.Text; using