一. 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都可以分为多个比特。
 

jchdl - RTL Data Types的更多相关文章

  1. C and SQL data types for ODBC and CLI

    C and SQL data types for ODBC and CLI   This topic lists the C and SQL data types for ODBC and CLI a ...

  2. allow zero datetime=true导致datetime转换失败:MySql.Data.Types.MySqlDateTime”的对象无法转换为类型“System.Nullable`1[System.DateTime]

    allow zero datetime=true导致datetime转换失败:MySql.Data.Types.MySqlDateTime”的对象无法转换为类型“System.Nullable`1[S ...

  3. "SQL Server does not handle comparison of NText, Text, Xml, or Image data types."

    "SQL Server does not handle comparison of NText, Text, Xml, or Image data types." sql2000 ...

  4. ExtJS笔记 Ext.data.Types

    This is a static class containing the system-supplied data types which may be given to a Field. Type ...

  5. Entity Framework Code First (七)空间数据类型 Spatial Data Types

    声明:本文针对 EF5+, Visual Studio 2012+ 空间数据类型(Spatial Data Types)是在 EF5 中引入的,空间数据类型表现有两种: Geography (地理学上 ...

  6. Core Java Volume I — 3.3. Data Types

    3.3. Data TypesJava is a strongly typed language(强类型语音). This means that every variable must have a ...

  7. Delphi Data Types

    http://docwiki.embarcadero.com/RADStudio/XE6/en/Delphi_Data_Types Integer Data Types Type Descriptio ...

  8. MongoDB - The mongo Shell, Data Types in the mongo Shell

    MongoDB BSON provides support for additional data types than JSON. Drivers provide native support fo ...

  9. SQL Server 2008 Data Types and Entity Framework 4

    Because I’ve had a lot of conversations about spatial data types lately, I thought I would create a ...

随机推荐

  1. linux解压缩tar.gz文件

    1.解压缩命令 命令:tar -zxvf 文件名 -z 有gzip属性的 -x 解压 -v 显示所有过程 -f 要处理的文件名 2.压缩命令 命令: tar -zcxf 压缩后的文件名 要压缩的文件名 ...

  2. 常见的GAN网络的相关原理及推导

    常见的GAN网络的相关原理及推导 在上一篇中我们给大家介绍了GAN的相关原理和推导,GAN是VAE的后一半,再加上一个鉴别网络.这样而导致了完全不同的训练方式. GAN,生成对抗网络,主要有两部分构成 ...

  3. 2018-06-27 jq文档处理与jq对象属性操作

    jQ文档处理: 内部插入 A.append(B) ->把B后追加到A内部中 B.appendTo(A) ->把B后追加到A内部中 A.prepend(B) ->把B后追加到A内部中 ...

  4. 对background: url("~assets/img/common/collect.svg") 0 0/14px 14px 的理解

    需求:给收藏数字前面通过::before伪元素添加图标 相关代码: .goods-info .collect { position: relative; } .goods-info .collect: ...

  5. 网站设计时应考虑哪些因素,以保证网站是对SEO友好

    根据用户的搜索习惯做好栏目的设计 根据用户的习惯做好三大标签的设计 做好首页栏目的展现布局  对于用户来说的重点 展示栏目的合理化 多样化 细节化 代码的静态化 域名 服务器购买稳定 合格 网站内容的 ...

  6. appium——如何导出夜神模拟器下载“微信”app的apk

    背景:夜神模拟器是一款功能强大的安卓模拟器,但是当我们在上面下载APP应用后,通常不知道apk文件在哪里,下面以“微信”APP为例做一下详细介绍. 一般情况下,使用夜神安卓模拟器下载的文件只能在夜神安 ...

  7. RabbitMQ及延时队列

    一.简介 我用过RabbirMQ的发布订阅模式,以及一对一的延迟队列. 1.RabbitMQ的有消息确认机制,消费一条则队列中少一条,也有对应的消费到消息及认为是消费成功这样的模式,一般使用前者. 发 ...

  8. maven打包相关配置

    1.在pom.xml中进行如下配置: <build> <plugins> <plugin> <groupId>org.springframework.b ...

  9. List的扩容机制,你真的明白吗?

    一:背景 1. 讲故事 在前一篇大内存排查中,我们看到了Dictionary正在做扩容操作,当时这个字典的count=251w,你把字典玩的66飞起,其实都是底层为你负重前行,比如其中的扩容机制,当你 ...

  10. SQL——SQL别名、UNION和SELECT INTO

    Alias(别名) - 为列名称和表名称指定别名    语法:表SELECT columnName(s) FROM tableName AS aliasName          列SELECT co ...