一. Bit
类结构如下:
 
主要属性:
  1. value: bit的值,只支持0,1, 分别为 Bit.BIT_0 和 Bit.BIT_1;
 
主要方法:
  • 构造方法
  • 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;
     
    类结构如下:
     
    主要属性:
  • Bit[]: 比特数组,0为lsb,length - 1为msb;
  • nBits: 比特位数;
  •  
    主要方法:
  • 构造方法
  • 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()
  • 获取部分比特
  • 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。
    这样做一则方便判断的结果参与后续的处理,一则更贴近判断的物理意义(返回值通过一根线的高低电平标识)。
     
  • match():把把比特数组的值分别与字符串如"0b10xx"逐位比较,忽略字符串标识为x的位,看值是否匹配;
  • 连接方法:vecConcat()
  • 举例: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对象;
     
    静态辅助方法:
  • inst():是Bits的创建更紧凑,省略new的使用;
  • Bits.of(Bit):返回只包含一根线的Bits对象,一般是为了方便与其他Bits进行操作,如连接;
  • Bits.of(Bit[]):返回包含比特数组的Bits对象;
  • Bits.from(Reg):返回有Reg包含的一组比特构成的Bits,意义上的理解为:返回的是寄存器的输出线;
  •  
     
    四. Reg
     
    使用BitVec提供的方法,但是返回的类型为Reg类型,而非比特数组;
    寄存器赋值使用set方法,不能使用assign方法。
     
    可以看到基本与Bits的方法相同,只是返回的为Reg对象。这里不做赘述。
     
    增加了一个赋值方法:
  • set(Bits): 把Bits包含的比特数组的值分别赋给reg包含的比特数组,意为:Bits中的线为Reg对象的输入线;
  •  
    增加了一组方便方法:简化只有一个比特的寄存器与Bit之间的操作:
  • set(Bit):将reg第一个比特的值,赋值为参数比特的值;
  • and(Bit):将reg第一个比特,与参数Bit相与;
  • or(Bit):将reg第一个比特,与参数Bit相或;
  • xor(Bit):将reg第一个比特,与参数Bit相异或;
  •  
    不同的静态辅助方法为:
  • Reg.to(Bit): 返回比特组成的Reg对象,意为:参数Bit对应的线为返回的Reg对象的输出线;
  • Reg.to(Bits):返回Bits的比特数组组成的Reg对象,意为:参数Bits中的线为返回的Reg对象的输出线,即返回的Reg对象的值输出到Bits中的线上;
  •  
    五. Bitable
     
    辅助接口,方便对Bit、Bits、Reg的统一处理。意义为:可比特化的类型。比如Bits和Reg都可以分为多个比特。
     

    相关文章:

    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    猜你喜欢
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    • 2022-12-23
    相关资源
    相似解决方案