2.2 Verilog HDL数据类型及变量、常量


Verilog HDL有两种常用的数据类型, 线网(Net)类型及变量 类型(REG)
常量的值是不能够被改变的,变量的值是可以被改变的,例如寄存器型的变量reg。
从逻辑值和常量式开始,对于线网类型重点是常用的wire型变量,对于变量类型重点是reg型。

1 逻辑值和常量

1.1 逻辑值

在这里插入图片描述

1.2 数的表达

位宽表示的是二进制的位数
4’h5实际上就是4’b0101,只不过是用十六进制表示
8’h2x是8位二进制数,对应二进制数的值是8’b0010xxxx,低4位不确定
16(默认)是32位的二进制数,十进制的值是16
在这里插入图片描述

2 线网型wire

线网(net)型变量最常用的就是wire,最大的问题就是怎么去理解wire。可以将wire直接的理解为连线。
在这里插入图片描述
例如一个D触发器reg1的输出是Q,这个Q连接到端口out1上,那么out1的值始终跟随着reg1的值的变化而变化。

wire clk_out;
assign clk_out=c_out;

在这里插入图片描述
wire型信号的定义格式如下:
定义一个n位的wire变量: wire [n-1:0] 变量名;
定义m个n位的wire变量: wire [n-1:0] 变量名1,变量名2,……变量名m;

下面给出2个例子:

wire [7:0] a, b, c; // a, b, c都是位宽为8位的wire
wire d; //d是1位的wire

3 寄存器类型reg

寄存器必须在时钟的驱动下(有效边沿)才能改变其内容
在这里插入图片描述reg型也称为寄存器型。数字电路中的触发器只在时钟有效边沿到来的时候,保存的值才能够发生改变。

wire clk_out;
reg c_out;
assign clk_out=c_out;
always @ (posedge clk_in) 
begin
c_out=~c_out; 
end

在这里插入图片描述
在这里插入图片描述
reg型信号的定义格式如下:
定义一个n位的寄存器变量:reg [n-1:0] 变量名;
定义m个n位的寄存器变量:reg [n-1:0] 变量名1,变量名2,……变量名m;

下面给出2个例子:

reg [7:0] a, b, c; // a, b, c都是位宽为8位的寄存
器
reg d; //1位的寄存器d

4 符号常量

如果用关键词parameter来定义一个标识符,代表一个常量,这个常量就被称为符号常量

例如:parameter width=3;//符号常量width的值是3,如果未进行重定义,当在程序中出现width时就用3代替。
parameter idle=1,one=2,two=3,stop=4; //定义了4个符号常量。如果未进行重定义,当代码中出现idle就用1代替,出现one就用2代替,出现tow就用3代替,出现stop就用4代替。

parameter width=3;那么width就一定是3吗?这是不一定的,因为使用parameter定义的常量,仍然可以重定义。重定义方法如下:
在这里插入图片描述
在这里插入图片描述

5 存储器型变量

存储器实际上是一个寄存器数组存储器使用如下方式定义
reg [ msb: lsb] memory1 [ upper1: lower1]
从高到低或从低到高均可(msb是最高有效位,lsb是最低有效位)。
例如:

reg[3:0] mymem1[63:0] //mymem1为64个4位寄存器的数组。
reg dog [1:5] //dog为5个1位寄存器的数组。
dog[4] = 1//合法赋值语句,对其中一个1位寄存器赋值(即第4个寄存器赋值)。
dog[1:5] = 0//合法赋值语句,对存储器大范围赋值。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值