✎ 编 者 按
不知诸君可还记得在SystemVerilog中数组,压缩数组等等这些令人挠头的东西,看似方便但不知各位在真实中使用几何。
Vec
在SystemVerilog中关于数组有多个概念,想必各位在初学之时对于数组、压缩数组这些概念都有些了解,在最初使用之时想必亦是小心翼翼。
所谓大道至简,SpianlHDL对于数组的概念,其只有一个Vec的概念,其和软件中的数组概念并无不同,借鉴SpinalHDL灵活的数据类型转换,Vec在整个设计里可谓起到起承转合的作用。Vec的声明形式如下:
声明一个一维数组:val myVecOfMixedUInt = Vec(UInt(3 bits), UInt(5 bits), UInt(8 bits))val data=Vec(UInt(8 bits),3)声明一个3*3的二维数组val data1=Vec(Vec(in UInt(8 bits),3),3)
四两拨千斤——read巧妙替换case
对于Vec,其提供有一个read方法,其方法原型为:
read(address: UInt)read(address: UInt)
而对于Scala中的Seq类型,其也提供了一个方法read,用于实现像软件中根据index索引输出对应的变量值。可还记得在《SpinalHDL—小练