Verilog HDL 中常用的数据类型有:线网(Net)、寄存器(Register)、整数(Integer)、
实数(Real)、时间(Time)、参数(Parameter)和存储器等。
1、线网
凡电路连接支点皆称为线网。线网声明的关键词为(wire),其默认值为(Z)。申明现网的格式如下:
1wire [msb:lsb] net1, net2, ... , netn;
其中,wire为关键词,表示变量为线网变量类型;msb 和 lsb 定义了范围,并且均为常数值表达式,范围定义是可选的,如果没有定义,缺省值为1位的线网t类型变量;net1, net2, ... , netn为定义的线网类型变量名称;
1
2
3wire sig1; //声明sig1这个线网 wire sib2,sib3; //声明 sig2, sig3 这俩个变量 wire sig4 = 0; //声明sig4 这个线网,并指定其值为 0
总线(Bus)则是线网的组合,声明为wire。举例如下:
1
2
3wire[7 : 0] test1; wire[3 : 0] test2 = 3'b100; wire[3 : 5] test3 = 3'b100;
其中test2 = test3,只是test3的声明是从bit3 到 bit5的,习惯上我们以test2为标准写法;
2、寄存器
寄存器除了硬件电路上的意义外,还有类似高级编程语言中的变量。寄存器变量用reg来声明。例如:
1reg [msb : lsb] reg1, reg2, reg3 ...regn;
其中,reg为关键词,表示变量为寄存器变量;msb 和 lsb 定义了范围,并且均为常数值表达式,范围定义是可选的,如果没有定义,缺省值为1位的寄存器;reg1, reg2, reg3 ...regn为定义的寄存器类型变量名称;
1
2reg d1 //声明d1为reg类型 reg[2 : 0] d2 //声明d2为3位的reg类型
若某信号声明为寄存器类型,经综合后却不一定会是在硬件上的寄存器上输出,必须格外注意,因为 Verilog 规定凡是在always语句后的类型都必须声明为 reg 。例如
1
2
3
4
5
6
7
8
9wire a, b, sel; reg d; always @ (aorborsel) begin if (sel == 0) d = a; else d = b; end
此例中,虽然声明d为一寄存器数据类型, 但是综合后d是一个MUX(多路选择器(MUX))的输出。
最后
以上就是强健金鱼最近收集整理的关于关于学习FPGA,Verilog HDL,的基本知识(四)的全部内容,更多相关关于学习FPGA,Verilog内容请搜索靠谱客的其他文章。
发表评论 取消回复