Verilog语法入门 (一) 数值表示,数据类型及运算符

文章介绍了学习Verilog的一个在线资源HDLBits,强调刷题对于掌握该语言的重要性。内容涵盖Verilog的四种逻辑值,数字进制格式,数据类型(寄存器和连线)的详细解释,以及参数类型、数组的声明和使用。还特别提到变量赋值注意事项和各种运算符的用法,包括算术、关系、逻辑、位运算及条件、拼接运算符。

0.前言

强烈推荐一个学习Verilog的刷题网站,HDLBits,从基础语法到一个比较完整的模块设计,提供了完整的练习过程,把上面的题刷完之后基本就可以完成大部分的Verilog程序设计了。不过网站是全英文的,需要一些英语基础。

HDLBits (01xz.net)

1.逻辑值

Verilog中存在四种逻辑值

  • 逻辑0:表示低电平,对应GND
  • 逻辑1:表示高电平,对应VCC
  • 逻辑X:表示未知,有可能是高电平,也可能是低电平
  • 逻辑Z:表示高阻态,外部没有激励信号,是一个悬空状态。'?'是Z的另一种表达形式。

2.进制格式

Verilog 数字进制格式包括二进制(b)、 八进制(o)、 十进制(d)和十六进制(h),一般常用的为二进制、 十进制和十六进制。

书写格式:[换算成二进制后位宽总长度]['][数值进制符号][与数值进制符号对应的数值]

例如:

  • 二进制: 4’b0101 表示 4 位二进制数字 0101
  • 十进制: 4’d2 表示 4 位十进制数字 2(对应二进制 0010)
  • 十六进制: 4’ha 表示 4 位十六进制数字 a(对应二进制 1010)

注意进制前的数值表示该数换成二进制后对应的位数

位宽与进制默认32位10进制。

用下划线可增加程序可读性不会影响计算机识别数值,如16'b1001_1010_1010_1001 = 16'h5AA5。

换算成二进制后的位宽总长度是非必须的,Verilog会为常量自动匹配合适的位宽。例如, 4’ha 写做 ‘ha 是合法的。

当总位宽大于实际位数,则自动在高位补0或X或Z,总位宽小于实际位数,则自动截断高位超出的位数。

最高有效位MSB(most significant bit)在左边。

3.数据类型

Verilog中数据主要分寄存器和连线两种类型,区别在于驱动方法(赋值方式)、保持方式、硬件实现。

3.1寄存器类型(reg)

寄存器是具有状态保持作用的硬件电路元件,通常会是一个触发器

驱动方式:

        过程赋值只能出现在过程语句(initial和always)之后,及reg类型的数据只能在always语句和initial语句中被赋值

        如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器;

        如果该过程语句描述的是组合逻辑,即always语句不带时钟信号,则该寄存器变量对应为硬件连线;

        未赋值前,认为处于不定状态X

保持方式:

        在下一次赋值前保持不变

硬件实现:

        触发器和锁存器等(reg类)

寄存器数据类型有很多种

  • reg,行为描述,过程赋值
  • integer,32位带符号整形变量
  • real,64位带符号实性
  • time,63位无符号时间变量

integer,real,time均为过程中数学描述,不对应具体硬件电路,即无法综合

最常用的是reg型,刚开始接触Verilog时,只需要记住reg即可

reg key;    //声明一个1位的寄存器
reg [31:0] cnt;    //声明一个32位的寄存器
reg [7:0] cnt1,cnt2;    //可以一次声明多个相同位宽的寄存器,用‘,’隔开
//可以通过以下形式对寄存器进行位选或片选
cnt[0]    //cnt寄存器的最低位
cnt[7:0]    //cnt寄存器的低8位

3.2连线类型(wire)

连线数据类型表示结构实体(例如门)之间的物理连线

驱动方式:

        连到门或模块的输出,或连续赋值语句assign赋值,信号连线不能出现在过程语句(initial和always)中

&n

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值