一. 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. IDEA 2020.1 安装教程

    目录 IDEA 2020.1 安装教程 准备工作 破解教程 IDEA 2020.1 安装教程 IDEA 2020.1 安装教程 Win 10 版 64位操作系统 准备工作 IDEA旗舰版下载地址 je ...

  2. Python Tkinter 图形组件介绍

    1. 窗口 Tkinter.Tk() # -*- coding: UTF-8 -*- import Tkinter myWindow = Tkinter.Tk() myWindow.title('南风 ...

  3. Android 电池管理系统架构总结 Android power and battery management architecture summaries

    文章目录 1 整体架构 2 设计构架 2.1 driver 2.1.1 Charger.ko 2.1.2 Battery.ko 2.2 power supply 2.2.1 基础架构 2.2.2 代码 ...

  4. Arrays.binarySearch的返回值

    如果查找的值包含在数组中,返回搜索的第一个值的下标: 如果查找的值不在数组中,返回(-插入点-1):插入点即为第一个大于此查找值的元素下标 插入点 为将该值插入数组的那一点:即第一个大于此键的元素下标 ...

  5. [java作业]Fan、求直线交点、Triangle2D、选课

    public class Fan { public static void main(String[] args) { Fan fan1 = new Fan(), fan2 = new Fan(); ...

  6. 【hdu1030】“坐标表示法”

    http://acm.hdu.edu.cn/showproblem.php?pid=1030 算法:以顶点为原点,建立坐标系,一个数可以唯一对应一个三元组(x, y, z),从任意一个点出发走一步,刚 ...

  7. [hdu4801]搜索

    http://acm.hdu.edu.cn/showproblem.php?pid=4801 状态和生成状态的过程处理好了,这个题就是简单的搜索题了== #include <iostream&g ...

  8. 【漫画】互斥锁ReentrantLock不好用?试试读写锁ReadWriteLock

    ReentrantLock完美实现了互斥,完美解决了并发问题.但是却意外发现它对于读多写少的场景效率实在不行.此时ReentrantReadWriteLock来救场了!一种适用于读多写少场景的锁,可以 ...

  9. layui select下拉菜单联动

    做的比较简单,先从后台直接把第一级菜单输出,然后点击二级菜单的时候再动态展示 <div class="layui-inline"> <label class=&q ...

  10. css3盒子flex

    一.定义在容器上的属性有6个: 1.flex-direction: 决定主轴的方向,即项目的排列方向. 属性值:row.row-reverse.column.column-reverse: 2.fle ...