Verilog缺少一个复合数据类型,如C语言中的结构体

https://mp.weixin.qq.com/s/_9UsgUQv-MfLe8nS938cfQ 

 

Verilog中的数据类型(Data Type)是分散的,缺少一个复合数据类型:把多个wire, reg组合到一起成为一个新的类型。

 

如C语言里面的结构体(struct),SystemVerilog已经添加了支持。

struct {

reg [15:0] opcode;

reg [23:0] addr;

} IR;

 

union {

int I;

shortreal f;

} N;

 

 

 

如Chisel中的Bundle:

import chisel3._

 

class GCD extends Module {

val io = IO(new Bundle {

val a = Input(UInt(32.W))

val b = Input(UInt(32.W))

val e = Input(Bool())

val z = Output(UInt(32.W))

val v = Output(Bool())

})

val x = Reg(UInt(32.W))

val y = Reg(UInt(32.W))

when (x > y) { x := x -% y }

.otherwise { y := y -% x }

when (io.e) { x := io.a; y := io.b }

io.z := x

io.v := y === 0.U

}

 

有一个复合数据结构,即可把Module的input/output参数简化很多。

 

程序 = 数据 + 算法

Module可以通过子模块来简化逻辑的构建;

数据也需要用户使用primitive data type构建data structure来自行定义数据类型,以简化数据的表达。

 

有这两个方面,即可以组成基本的程序编写语言。在Verilog即为基本的hardware modeling language。缺少哪一方面都是缺憾。

 

posted @ 2018-09-18 14:39  wjcdx  阅读(1499)  评论(0编辑  收藏  举报