verilog 语言学习笔记

verilog 语言学习笔记(不断更新)

1.always@()函数

括号内容表示敏感条件,比如always@(sel),意义:sel信号发生变化就执行赋值语句。
若括号内为*,则表示任何一个信号只要有电平变化都要执行赋值语句。
这个函数一般用于时序逻辑电路,会有延时一拍的效果。

赋值语句一般可以写为:if()…begin…end \else if ()…begin…end

2.阻塞赋值和非阻塞赋值

类似于"<="、“>=”这样的符号为非阻塞赋值,"="为阻塞赋值。
非阻塞赋值的语句特点
在begin-end串行语句块中,一条非阻塞过程语句的执行不会阻塞下一条语句的执行。仿真过程中在遇到非阻塞型过程赋值语句后,先计算右端赋值表达式的值,然后等到仿真时间结束时再将右侧的值赋给左面。
也就是说,非阻塞赋值先等到普通运算结束后再进行赋值。

非阻塞赋值语句对应的实际电路中,与触发沿有关,类似于脉冲触发,从开始赋值时对赋值号右侧计算,结束赋值时将右侧的值赋给左侧。

阻塞赋值的语句特点
仿真过程中,首先计算右端赋值表达式的结果,然后立即将该值赋给左侧的参数。因为在串行语句块中,使用该阻塞赋值语句会阻塞后面的语句,因此叫做阻塞赋值。
阻塞赋值对应的实际电路与触发沿无关。

3.归约运算符、按位运算符和逻辑运算符

(1)归约运算符和按位运算符

"&"操作符有两种用途,一种是作为一元运算符,也可以作为二元运算符。

①当"&"作为一元运算符时表示归约与。&m是将m中所有bit进行与运算,最后的结果变为1bit。例如

&4'b1111 = 1 & 1 & 1 & 1 = 1'b1
&4'b1101 = 1 & 1 & 0 & 1 = 1'b0

②当"&"作为二元运算符时表示按位与。n&m是将m的每个bit与n的对应的bit进行相与运算,在运算时要保证m和n的bit数要相等。例如:

4'b1010 & 4'b0101 = 4'b0000
4'b1101 & 4'b1111 = 4'b1101
(2)逻辑运算符

m&&n是判断m和n是否都为真,最后的结果只有1bit,如果都为真则输出1’b1,如果不都真则输出1’b0。

(3)移位运算符

“>>”、"<<"与C语言中使用方式一致,即将运算符左边的操作数左移或右移指定的位数,用0来补充空闲位。如果右边操作数的值为x或z,则移位结果为未知数x。在应用中一定要注意空闲位用0进行补位

4.参数定义

(1)localparam定义

localparam定义方式为普通定义方式,定义后的参数只能在该模块中使用

(2)parameter定义

首先是parameter的特点,这样的参数定义可以让定义的参数被其他模块使用,比如在仿真文件中,该模块如需实例化两次,且每次的参数需要进行修改,则可以直接在实例化中对参数赋值。
如需实现以上功能,定义代码格式为:

#(
	parameter  CNT_MAX = XXXXXX;
)

仿真代码实例化调用代码格式

counter
#(
	.CNT_MAX(参数值)
)
counter_inst1
(
	参数及参数连接情况
);
重定义

defparam,例如在模块中定义了一些参数数值较大,希望在仿真文件中将参数修改以便缩短仿真的时间,可以采用重定义的方式。
例如仿真代码中

defparam	rom_inst.key_filter_inst1.CNT_MAX = 20'd99 ;

这里需要注意的是,路径的描述:一定是参数所在的模块的实例化代码,而且需要一级一级从顶层模块中连接到底层模块。

5.状态机

状态机分为三种写法:一段式、二段式、三段式。

一段式

在一段状态机代码中,使用时序逻辑既描述状态的转移,也描述数据的输出。

缺点:描述大型状态转换时麻烦。

二段式

第一段状态机中使用时序逻辑描述状态的转移;
第二段中使用组合逻辑描述数据的输出。

三段式

第一段状态机中采用时序逻辑进行状态的转移;
第二段中采用组合逻辑,判断状态转移条件,描述状态转移规律;
第三段描述输出,时序逻辑组合逻辑都可以

新二段式

将三段式的前两段进行整合,就是新二段式。

6 位拼接

**{A,B}**的含义即表面的A与B以A在前,B在后的顺序直接拼接。

task、function任务函数

在这里插入图片描述
1、task定义可以没有输入。function必须至少输入
2、function智能与主模块共用同一个仿真时间单位,而task可以定义自己的方阵时间单位
3、function要有返回值,返回一个值,而task不需要返回值。
4、function不能启动task,而task可以启动其他task和function.

task任务类似C语言中的自定义函数,将需要经常重复的代码进行写入,之后进行调用。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值