当前位置: 首页 > news >正文

jchdl - RTL Data Types

https://mp.weixin.qq.com/s/hWYW1Bn---WhpwVu2e98qA
 
一. Bit
类结构如下:
 
主要属性:
  1. value: bit的值,只支持0,1, 分别为 Bit.BIT_0 和 Bit.BIT_1;
 
主要方法:
  1. 构造方法
Bit(): 创建一个Bit,值为默认值0;
Bit(int value): 创建一个Bit,值为参数value;
Bit(boolean): 创建一个Bit,boolean参数为true,则比特值为1,反之为0;
 
  1. 获取值的方法
boolVal(): 比特值为1,则返回true,为0则返回false;
intVal():返回int型(32位)0或1;
longVal(): 返回long型(64位)0或1;
 
  1. 赋值方法
set(): 置1;
clr(): 清0;
被Bits使用的赋值方法:assign;
被Reg使用的赋值方法:set;
 
  1. 逻辑操作方法
and(): 与;
or(): 或;
not(): 非;
xor(): 异或;
 
  1. 判断方法
equals(int value): 判断是否月value相等;
equals(Object): 判断是否与某个Bit相同或值相等;
 
二. BitVec
 
辅助类,方便处理一组Bit;
Bits和Reg继承自BitVec;
 
类结构如下:
 
主要属性:
  1. Bit[]: 比特数组,0为lsb,length - 1为msb;
  1. nBits: 比特位数;
 
主要方法:
  1. 构造方法
BitVec(Bit[]): 直接基于提供的比特数组,创建比特向量;
BitVec(int nBits): 创建一个nBits位的比特向量,所有比特为默认值;
BitVec(int nBits, int value): 创建一个nBits位(最多32位)的比特向量,使用int值(最多32位)的每一位分别赋值;
BitVec(int nBits, long value): 创建一个nBits位(最多64位)的比特向量,使用long值(最多64位)的每一位分别赋值;
 
  1. 获取值的方法
boolVal(): 所有比特值都为0,则返回false,否则返回true;
intVal():返回int型(32位)值,从lsb到msb每一个比特的值,分别赋值给int值的每一位;
intVal(int msb, int lsb):返回从lsb到msb这一部分比特位组成的int值;
longVal(): 返回long型(64位)值,从lsb到msb每一个比特的值,分别赋值给long值的每一位
longVal(int msb, int lsb): 返回从lsb到msb这一部分比特组成的long值;
 
  1. 获取某一个比特
bit(int index): 获取第index个比特(从0开始);
 
  1. 获取全部比特:bits()
  1. 获取部分比特
bits(int msb, int lsb):[msb, lsb], 获取从lsb(包含)到msb(包含)的比特;如果msb < lsb,则获取的比特逆序;
如:一组比特abcd, bits(1,0)返回cd,bits(0,1)返回dc.
 
  1. 赋值方法
这里主要提供set方法。
 
  1. 判断方法
eq: 等于
ne: 不等于
lt: 小于
le: 小于等于
gt: 大于
ge: 大于等于
需要注意的是,这些判断方法,返回的不是布尔型true/false,而是一个Bit。
这样做一则方便判断的结果参与后续的处理,一则更贴近判断的物理意义(返回值通过一根线的高低电平标识)。
 
  1. match():把把比特数组的值分别与字符串如"0b10xx"逐位比较,忽略字符串标识为x的位,看值是否匹配;
  1. 连接方法:vecConcat()
举例:a.vecConcat(b, c)之后,返回的bit[]的值为abc,如果b=0bxyz,则bit[]值为0baxyzc
  1. 逻辑运算:与或非、异或
  1. 数学运算:加法
 
三. Bits
 
意为一组线,处理一组线的各种操作。使用BitVec提供的方法,但是返回的类型为Bits类型,而非比特数组;
Bits赋值使用assign方法,不能使用set方法。
 
 
主要方法:
  1. 构造方法
与BitVec对应;
 
  1. 获取部分比特
类似于BitVec的bits()方法组,但是返回的不是比特数组,而是Bits类的对象;
 
  1. 赋值方法
assign():意义上相当于Verilog中对线的continuous assignment.
 
  1. 连接方法
concat():同BitVec的连接方法,返回Bits类的对象;
 
  1. 逻辑操作
同BitVec的逻辑操作,返回Bits类的对象;
 
  1. 数学运算
只实现了加法,同BitVec的运算方法,返回Bits对象;
 
静态辅助方法:
  1. inst():是Bits的创建更紧凑,省略new的使用;
  1. Bits.of(Bit):返回只包含一根线的Bits对象,一般是为了方便与其他Bits进行操作,如连接;
  1. Bits.of(Bit[]):返回包含比特数组的Bits对象;
  1. Bits.from(Reg):返回有Reg包含的一组比特构成的Bits,意义上的理解为:返回的是寄存器的输出线;
 
 
四. Reg
 
意为寄存器,处理寄存器的各种操作。使用BitVec提供的方法,但是返回的类型为Reg类型,而非比特数组;
寄存器赋值使用set方法,不能使用assign方法。
 
可以看到基本与Bits的方法相同,只是返回的为Reg对象。这里不做赘述。
 
增加了一个赋值方法:
  1. set(Bits): 把Bits包含的比特数组的值分别赋给reg包含的比特数组,意为:Bits中的线为Reg对象的输入线;
 
增加了一组方便方法:简化只有一个比特的寄存器与Bit之间的操作:
  1. set(Bit):将reg第一个比特的值,赋值为参数比特的值;
  1. and(Bit):将reg第一个比特,与参数Bit相与;
  1. or(Bit):将reg第一个比特,与参数Bit相或;
  1. xor(Bit):将reg第一个比特,与参数Bit相异或;
 
不同的静态辅助方法为:
  1. Reg.to(Bit): 返回比特组成的Reg对象,意为:参数Bit对应的线为返回的Reg对象的输出线;
  1. Reg.to(Bits):返回Bits的比特数组组成的Reg对象,意为:参数Bits中的线为返回的Reg对象的输出线,即返回的Reg对象的值输出到Bits中的线上;
 
五. Bitable
 
辅助接口,方便对Bit、Bits、Reg的统一处理。意义为:可比特化的类型。比如Bits和Reg都可以分为多个比特。
 

转载于:https://www.cnblogs.com/wjcdx/p/9626491.html

相关文章:

  • Python基础之for循环
  • 刚在虚拟机上装的Linux系统,ifconfig后IP地址怎么成了127.0.0.1了
  • 教你利用Python把图片转字符画!代码哆啦A梦你见过嘛?
  • MongoDB 有关实体映射具体应用及对查询的影响
  • Zabbix篇二:Linux批量安装客户端Zabbix-agent
  • 重新思考数据输入
  • EasyUI的Vue版本
  • mi家前端面经
  • cpp学习(一)环境搭建
  • Facebook 开发的 HHVM 引擎宣布停止支持 PHP
  • 面向对象:classmethod、staticmethod、property
  • 面试宝典系列-nginx的缓冲和缓存
  • GitHub:我们为什么会弃用jQuery?
  • PostgrepSQL(大象)的使用
  • 如何在Ubuntu14.04中创建Python虚拟环境
  • [译] 怎样写一个基础的编译器
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2019.2.20 c++ 知识梳理
  • Android Volley源码解析
  • ES6语法详解(一)
  • express.js的介绍及使用
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java 多线程编程之:notify 和 wait 用法
  • Java教程_软件开发基础
  • PHP 7 修改了什么呢 -- 2
  • React的组件模式
  • webpack入门学习手记(二)
  • 闭包--闭包之tab栏切换(四)
  • 高性能JavaScript阅读简记(三)
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 如何设计一个微型分布式架构?
  • 为视图添加丝滑的水波纹
  • 新版博客前端前瞻
  • 一份游戏开发学习路线
  • 06-01 点餐小程序前台界面搭建
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • Semaphore
  • 阿里云重庆大学大数据训练营落地分享
  • ​flutter 代码混淆
  • #微信小程序:微信小程序常见的配置传值
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)RocketMQ初步认识
  • (转载)(官方)UE4--图像编程----着色器开发
  • (转载)OpenStack Hacker养成指南
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • :O)修改linux硬件时间
  • @Data注解的作用