「Verilog HDL」自学计划|基础知识

「Verilog HDL」自学计划|001|基础知识

1 Verilog HDL 语言要素

「注释符」

多行注释不允许嵌套,但是单行注释可以嵌套在多行注释中。

单行注释:

assign a = b & c;       //单行注释

多行注释:

assign a[3:0] = b[3:0] & c[3:0];       /*注释行1
					注释行2*/

非法多行注释:

/*注释内容 /*多行注释嵌套多行注释*/ 注释内容*/

合法多行注释:

/*注释内容 //多行注释嵌套单行注释*/

「数值」

Verilog HDL 中的整数可以是二进制(b或B)八进制(o或O)十进制(d或D)十六进制(h或H)

「合法的整数表示」

8'b10001101       //位宽为8位的二进制数10001101
8'ha6             //位宽为8位的十六进制数a6
5'o35             //5位八进制数35
4'd6              //4位十进制数6
4'b1x_01          //4位二进制数1x01
5'hx              //5位十六进制数x(扩展的x),即xxxxx
4'hz              //4位十六进制数z,即zzzz

2 数据类型

「reg型变量和wire型变量」

在过程块内被赋值的每一个信号都必须定义成reg类型,并且只能在always或initial过程块中赋值,大多数reg型信号常常是寄存器或触发器的输出。

在设计中,输入信号一般来说你是不知道上一级是寄存器输出还是组合逻辑输出,那么对于本级来说就是一根导线,也就是wire型。

而输出信号则由你自己来决定是寄存器输出还是组合逻辑输出,wire型、reg型都可以。

但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。

「存储型变量与寄存器型变量的比较」

reg[n-1:0] a;       //表示一个n位的寄存器a
reg meml[n-1:0] ;   //表示一个由n个1位寄存器构成的存储器meml

一个n位的寄存器可以在一条赋值语句里进行赋值,而一个完整的存储器则不行。例如,对于上例可以进行“reg a = 0;”的赋值操作,而不能进行“meml1 = 0;”的赋值操作。

如果想对存储器中的存储单元进行读写操作,则必须指定该单元在存储器中的地址。

「存储器型变量的赋值」

meml1[2] = 0;       //给meml1存储器中的第3个存储单元(寄存器)赋值为0

3 运算符

「Verilog HDL 中的运算符和优先级」

运算符功能
! 、~反逻辑/逻辑非、位反相
* 、/ 、%乘、除、取模
+ 、-加、减
<< 、>>左移、右移
< 、<= 、 > 、>=小于、小于等于、大于、大于等于
== 、!=等、不等
===全等
!==非全等
&按位与
^ 、^~按位逻辑异或和同或
按位逻辑或
&&逻辑与
逻辑或
?:条件运算符,唯一的三目运算符,等同于if-else

「算术运算符」

%是取模运算,如“6%3”的值为0(余数),“7%4”的值为3(余数)。

「算术运算示例」

reg[3:0]A, B, C;
reg[5:0]D;
A = B + C;
D = B + C;

第一个加法中,表达式“B+C”的位宽由B、C中最长的位宽决定,为4位,结果位由A决定,为4位;第二个加法中,右端表达式的位宽同样由B、C中最长的位宽决定,为4位,但结果位由D决定,为6位。在第一个赋值中,加法操作的溢出部分被丢弃;而在第二个赋值中,任何溢出的为存储在D[5:4]中。

「关系运算符」

关系运算符是双目运算符,是对两个操作数的大小进行比较。

在Verilog HDL中,规定任何的不定状态数和已知状态数的比较,结果都会成为未知状态。

产生不定状态:(1)信号悬空;(2)两个信号对同一个信号进行驱动

「相等关系运算符」

相等关系运算符是对两个操作数进行比较,比较的结果有三种,即真(1)、假(0)和不定值(x)。

信号类型比较范围中,相等和全等之间有差别。

信号比较长度中,相等和全等之间也有差别。

在正常电路设计中,或者是一个可靠性要求高的电路设计中,是不允许不定状态和高阻状态进行比较的,所以在大部分电路中,选择“==”运算符。

「逻辑运算符」

在逻辑运算的操作过程中,如果操作数是1位的,那么1就代表逻辑真,0就代表逻辑假;如果操作数是由多位组成的,则当操作数每一位都是0时才是逻辑0值,只要有某一位为1,这个操作数就是逻辑1值。

例如:寄存器变量a、b的初值分别为4’b1110和4’b0000,则!a = 0,!b = 1,a&&b = 0,a║b = 1。

需要注意的是,若操作数中存在不定态x,则逻辑运算的结果也是不定态。

例如:a的初值为4’b1100,b的初值为4’b01x0,则!a = 0,!b = x,a&&b = x,a║b = x。

「按位运算符」

按位取反(~)
按位(&)
按位(|)
按位异或(^)(AB取值相同为0,取值相异为1)
按位同或(^~)(AB取值相同为1,取值相异为0)

「归约运算符」

归约运算符按位进行逻辑运算,属于单目运算符。由于这一类运算符运算的结果是产生1位逻辑值,因而被形象地称为所谓运算符。

归约运算符的运算过程是:设a是一个4位的寄存器型变量,它的4位分别是a[0]、a[1]、a[2]和a[3]。当对a进行缩位运算时,先对a[0]和a[1]进行缩位运算,产生1位的结果,再将这个结果与a[2]进行缩位运算,再接着是a[3],最后产生1位的操作结果。

「移位运算符」

左移位运算符(<<)、右移位运算符(>>)

「条件运算符」

表达式形式:<条件表达式>?<表达式1>:<表达式2>

其中,条件表达式的运算结果有真(1)、假(0)和不定态(x)三种。当条件表达式的结果为真时,执行表达式1,当条件表达式的结果为假时,执行表达式2。

「连接和复制运算符」

a = 5'b00101
a << 2 = 5'b10100
a << 2 = { a[2,0], 2'b00} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值