Verilog HDL 基础语法

一、逻辑值

0: 逻辑低电平,条件为假
1: 逻辑高电平,条件为真
z: 高阻态,无驱动
x: 未知逻辑电平

二、实际例子

1. 模块名一般与文件名相同

在这里插入图片描述
线网型变量会被映射成一条真实存在的物理连线。
寄存器型变量会被映射成一个寄存器。


2. 参数

parameter 与 localparam 都可以作为参数的关键字,进行参数的定义。

区别:
  1. 如果参数关键字使用 parameter,我们可以在顶层文件通过实例化,来对此功能模块中的参数进行修改。如截图中的红框所示。
  2. localparam 只能在模块内部使用,不能进行实例化。

在这里插入图片描述


3、常量

基数表示法
格式:[换算为二进制后位宽的总长度]['][数值进制符号][与数值进制符号对应的数值]

8'd171: 位宽是8bit,十进制的171。

[数值进制符号]中如果是[h]则表示十六进制,如果是[o]则表示八进制,如果是[b]则表示二进制,如果是[d]则表示十进制。

8'hab: 表示8bit的十六进制数 ab;
8'o253: 表示8bit的八进制数 2538'b1010_1011: 表示 8bit 的二进制数 1010_1011,下划线增强可读性。

[换算为二进制后位宽的总长度]:可有可无,verilog 会为常量自动匹配合适的位宽。
当总位宽大于实际位宽,则自动在左边补0,总位宽小于实际位宽,则自动截断左边超出的位数。
'd7与8’d7: 表示相同数值,8’d7换算为二进制就是8’b0000_0111,前面 5 位补 0;
2’d7 换算为二进制就是 2’b11,超过 2 位宽的部分被截断。
如果直接写参数,例如100,表示位宽为 32bit 的十进制数 100.


4、赋值方式

阻塞型赋值

声明 3 个变量,a 的值是 1,b 的值是2,c 的值是 3.
阻塞赋值可以理解为顺序执行,也就是说第一句语句执行完毕之后, 才会执行第二句语句。
在这里插入图片描述


非阻塞型赋值

非阻塞型赋值语句是并行执行的。即在同一时刻,多条语句是同时执行的。
声明 3 个变量,a 的值是 1,b 的值是2,c 的值是 3.
b 的值目前是 2,a 的值目前是 1. 在同一时刻,将 b 的值赋值给 a,将 a 的值赋值给 c.
在这里插入图片描述


三、算术运算符

+  (加法,如 assign c=a+b; 即把a与b的和赋值给c)
-  (减法,如 assign c=a-b; 即把a减b的差赋值给c)
*  (乘法,如 assign c=a*3; 即让a和3相乘,结果赋值给c,但是一般不用乘号)
/  (除法,如 assign c=a/2; 即让a和2相除,结果赋值给c,一般也不用除号)
%  (求模,或称为求余,要求%两侧均为整型数据,5%3的值为2,用在测试文件)

四、归约运算符、按位运算符

以 “&” 操作符为例,“&” 操作符有两种用途,既可以作为一元运算符(仅有一个参与运算的量),也可以作为二元运算符(有两个参与运算的量)。
当 “&” 作为一元运算符时表示归约与,&m 是将 m 中所有比特相与,最后的结果为 1bit。
例如:
&4’b1111=1&1&1&1=1’b1
&4b1101=1&1&0&1=1’b0

当 “&” 作为二元运算符时表示按位与,m&n 是将 m 的每个比特与 n 的相应比特相与,在运算的时候要保证 m 和 n 的比特数相等,最后的结果和 m(n) 的比特数相同。
例如:
4’b1010&4’b0101=4’b0000
4’b1101&4‘’b1111=4’b1101

“~&”、“ ^ ”、“ ~^ ”、“|”、“ ~|” 同理。


五、逻辑运算符

以 “&&” 操作符为例,“&&” 表示逻辑与,运算规则:逻辑与运算符号两边只有真或者假,非零表示真,零表示假,逻辑运算符两边都不为零则结果为 1,否则为 0。
例如:
a=4’ha, b=4’d0, c=a&&b, 则c的值为0.
“ ||(逻辑或)”、 “==(逻辑相等)”、“!=(逻辑不等)” 同理。


六、关系运算符

a<b      a小于b
a>b      a大于b
a<=b     a小于或等于b
a>=b     a大于或等于b
注:关系运算符一般在条件判断时用到,例如 if 的判断语句,如果 if 后面接的判断语句是真的,则返回值为1,
否则为0.

七、移位运算符

移位运算符是二元运算符,左移符号为 “<<”,右移符号为 “>>”,将运算符左边的操作数左移或右移指定的位数,用 0 来补充空闲位。
b <= a<<1; 即让 a 的每一位都往左移动1位,结果赋值给 b;
b<= a>>2; 即让 a 的每一位都往右移动2位,结果赋值给 b;

在应用移位运算符的时候一定要注意它的这个特性,那就是空闲位用 0 来填充,也就是说,一个二进制数不管原数值是多少,只要一直移位,最终全部会变为 0。

例如:4’b1000 >>3 后的结果为 4’b0001, 4’b1000>>4 的结果为 4’b0000。

移位运算符在使用时,可代替乘法和除法,左移一位可以看成是乘以 2,右移一位可以看成是除以 2,但要注意位宽的拓展。


八、位拼接运算符

位拼接运算符由一对花括号加逗号组成 “{,}”,拼接的不同数据之间用“,”隔开。
例如:将 8bit 的 a、3bit 的 b、5bit 的 c ,按顺序拼接成一个 16 位的 d, 表示方法为:d={a,b,c};


九、条件运算符

条件运算符,“ ?:”,是一个三元运算符,即有三个参与运算的量,条件表达式的一般形式为:表达式1 ?表达式2 :表达式3。
执行过程是:当表达式1 为真,则表达式2 作为条件表达式的值,否则以表达式3 作为条件表达式的值。
例如:当 a=6, b=7, c=(a>b)?a:b的结果为7。
要注意的是,使用条件表达式时 “?” 和 “:” 是一对,不可以只是用一个。


十、优先级

总的优先级关系为 :归约运算符 > 算数运算符 > 移位运算符 > 关系运算符 > “==” 和 “!=” > 按位运算符> “&&” 和 “‖” >条件运算符,总的来说是一元运算符 > 二元运算符 > 三元运算符。
如果在编写代码的时候对这些关系容易混淆,最好的方式就是使用 “()” 增加优先级。


十一、 if-else 条件分支语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


十二、case 分支控制语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


十三、系统函数

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值