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