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







截位(rnd/prnd/floor):都是去掉低位数据的操作(去掉低位低精度的数据,或者说小数位,降低数据的精度)
饱和(sat/sym_sat):都是去掉高位数据的操作,(去掉无符号数高位的0,或者有符号数高位多余的符号位)
函数说明:
floor:
1、这个操作很简单,就是把低位直接截掉,精度损失大。有符号和无符号数据都适用用于这个函数,且不需要指示输入的数据是有符号还是无符号。
prnd:
1、一种四舍五入处理,对于正数,是大于等于0.5就加1,否则去掉小数位;对于负数则是大于0.5就加1,否则去掉小数位。prnd(+x.5)=x+1、prnd(+x.499..99)=x、prnd(-x.5)=-x,prnd(-x.50.....01)=-(x+1)
2、prnd可以处理无符号和有符号数据,输入要指示数据的类型,sign=0表示无符号,sign=1表示有符号数据。
3、prnd处理有加法操作,会扩宽数据位宽,比如一个6bit的数据,你想截掉低3位数据,那么输出的数据位宽应该是4bit,OUT_DW = IN_DW - nBits + 1,4 = 6 - 3 + 1.
rnd:
1、一种四舍五入的处理,对于正数和负数都是小数大于等于0.5就加1,否则去掉小数位。rnd(+x.5)=x+1、rnd(+x.499..99)=x、rnd(-x.5)=-(x+1),rnd(-x.499...99)=-x
2、rnd的处理是关于原点对称的,而prnd的处理不是关于原点对称的。在ASIC处理中,prnd相对简单些,rnd要复杂些,但是两种处理后保留的精度是一样的,不存在prnd好于rnd的说法。只有一些需要将数据处理成原点对称,用于RM比较的时候才会用到rnd。比如RM的处理顺序是先取反后截位,ASIC的处理是先截位后取反,这个时候截位就必须要使用rnd,因为取反是关于原点对称的处理,rnd才有会有,-rnd(a)=rnd(-a)
3、rnd与prnd的唯一不同点就是在小数-0.5的截位上,prnd是截成-1,rnd是截成-2.

4、将数据分为保留部分preserve_part和截去部分cut_part

sat:
1、sat直接去掉有符号数的高位符号,或者无符号数据高位的0,如果发现溢出了,就把数据保持为最大的正数或者负数。
sym_sat:
1、相比sat,多了一个对称的操作,就是数据如果是最大的负数要设为最大负数-1,负数溢出了也只保持到最大负数-1。这样做的目的也rnd一样,就是为了保证数据处理的对称性。
RAND_SAT/LIB_CUT_SAT:
1、RAND_SAT类中,实现了基本的饱和截位处理,有的时候要连续使用两种处理,且中间会有扩位,就把额外添加了一个LIB_CUT_SAT类。
systemverilog中实现饱和截位和饱和截位的分析的更多相关文章
- SystemVerilog 中的相等运算符:== or === ?
1. 四值逻辑的逻辑运算 在对比SystemVerilog中的相等运算符之前,先来看一下三种最基本的逻辑运算符,下文中以·表示与运算,以+表示或运算,以'表示非运算.我们都知道在逻辑代数中,只有0和1 ...
- system verilog中的类型转换(type casting)、位宽转换(size casting)和符号转换(sign casting)
类型转换 verilog中,任何类型的任何数值都用来给任何类型赋值.verilog使用赋值语句自动将一种类型的数值转换为另一种类型. 例如,当一个wire类型赋值给一个reg类型的变量时,wire类型 ...
- 控制input标签中只能输入数字以及小数点后两位
js 代码如下: /* 控制input标签中只能输入数字 和小数点后两位 */ function checkNum(obj) { //检查是否是非数字值 if (isNaN(obj.value)) { ...
- 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)
关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...
- 图解单片机8位PWM、16位PWM中“位”的含义!
今天 发现很多同学 搞不懂单片机的pwm中的位表示什么意思,如很多同学会问“8位pwm.16位pwm是什么意思啊,它们有什么区别啊,其中的‘位’表示什么意思啊”.对于这些问题,今天就给大家解释下,由于 ...
- 浮点数在计算机内存中的表示(IEEE 754规定1位是符号位,8位是指数,剩下的23位为有效数字)
本文转载自:阮一峰的博客,http://www.ruanyifeng.com/blog/2010/06/ieee_floating-point_representation.html 张玉彬的博客 h ...
- oracle中nvarchar2查询结果显示总是少一位
问题: 有个表的字段是nvarchar2(32),但是在plsql中查询显示结果发现一直少一位. 修改方法: 在plsql里的首选项-连接里有个选项: 在oci8上强制使用oci7, 把这个勾上就ok ...
- iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)
iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏) 2017.03.16 12:18* 字数 52 阅读 563评论 4喜欢 2 1. 截取屏幕尺寸大小的图片并保存至相册 ...
- JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储。浮点型数据使用注意事项。全局变量特殊之处
JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储. 所有的编程语言,包括 JavaScript,对浮点型数据的精确度都很难确定: <!DOCTYPE html& ...
随机推荐
- [再寄小读者之数学篇](2014-06-26 Besov space estimates)
(1) $$\bex \sen{D^k f}_{\dot B^s_{p,q}}\sim \sen{f}_{\dot B^{s+k}_{p,q}}. \eex$$ (2) $$\beex \bea &a ...
- word20161228
1.principles英[p'rɪnsəplz]美[p'rɪnsəplz]n.原则; 原理; 准则; 道义; 节操; 原则( principle的名词复数 ); 工作原理; [P-] (基督教科学派 ...
- 第一天 Requests库入门
Requests库的get()方法 requests.get(url, params=None, **kwargs) ∙ url : 拟获取页面的url链接 ∙ params : url中的额外参数, ...
- IEnumerable<T>和IQueryable<T>区别
LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展:Queryab ...
- php-beast 代码加密
https://github.com/liexusong/php-beast 修改php.ini配置 extension_dir = "/usr/lib/php/20151012/" ...
- SQLAlchemy 使用(一)创建单一model
前言 最近项目等待前端接接口,比较空闲.就想学习一些新东西.学啥呢?考虑到ORM的易用性,还是学习一下ORM.那么与Flask搭配的ORM有 flask-sqlalchemy 但是该组件专为Flask ...
- C语言学习及应用笔记之四:C语言volatile关键字及其使用
在C语言中,还有一个并不经常使用但却非常有用的关键字volatile.那么使用volatile关键字究竟能干什么呢?接下来我将就此问题进行讨论. 一个使用volatile关键字定义变量,其实就是告诉编 ...
- C#+EntityFramework编程方式详细之Model First
Model First Model First模式即“模型优先”,这里的模型指的是“ADO.NET Entity Framework Data Model”,此时你的应用并没有设计相关数据库,在VS中 ...
- jackson对日期的处理(序列化与反序列化)
https://blog.csdn.net/cover1231988/article/details/76021478
- UOJ#55. 【WC2014】紫荆花之恋 点分树 替罪羊树 平衡树 splay Treap
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ55.html 题解 做法还是挺容易想到的. 但是写的话…… 首先这种题如果只要求一棵树中的满足条件的点数( ...