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
    评论
“时序”最容易联想到就是“时序图”,亦即模块的输出。换句话说“时序”是模块执 行过程的显性记录。一般在仿真上,模块的时序图都是在理想状态下(没有任何物理上 的问题)产生的。时序图里边包含了模块最清洁的执行记录。这些信息对于“细化”模 块来说有很大的帮助。然而影响着这些时序就是Verilog HDL 语言本身。 很多时候,虽然低级建模(建模技巧)已经可以帮助我们完成许多模块设计上的要求, 但是低级建模始终是属于“建模”的层次,亦即“塑造”模块一个大概的形状,而且是 粗糙的东西而已。这粗糙的东西,效果能不能发完全发挥? 我们需要经过“细化”它才 知道结果。 要完成“细化”的过程一点也不可以马虎。早期的建模必须留下可以“细化”的种子。 此外我们还要往模块更深入去了解它,去分析它,如果有模块有问题就调试它。这全部 的工作要求,更进一步挑战我们对Verilog HDL 语言的认识和掌握的程度。有关这一点, 再也不是:了解Verilog HDL 语言相关的语法如何使用?如何使用Verilog HDL 语言建 立一个模块?等这些Verilog HDL 语言“外观的单纯工作”,而是“深入分析”模块执 行时的“内部细节”。关于模块一切的一切过程,我们只能在“时序图”上了解而已。 这就是这本笔记命名的初衷。
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 枚举类型 23 字符串 25 1.2 过程块和方法 27 initial和always 30 function逻辑电路 33 task时序电路 35 动态 静态变量 39 1.3 设计例化和连接 45 第二章 验证的方法 393 动态仿真 395 静态检查 397 虚拟模型 403 硬件加速 405 效能验证 408 性能验证 410 第三章 SV组件实现 99 3.1 接口 100 什么是interface 101 接口的优势 108 3.2 采样和数据驱动 112 竞争问题 113 接口的时序块clocking 123 利于clocking的驱动 133 3.3 测试的开始和结束 136 仿真开始 139 program隐式结束 143 program显式结束 145 软件域program 147 3.4 调试方法 150 第四章 验证的计划 166 4.1 计划概述 166 4.2 计划的内容 173 4.3 计划的实现 185 4.4 计划的进程评估 194 第五章 验证的管理 277 6.1 验证的周期检查 277 6.2 管理三要素 291 6.3 验证的收敛 303 6.4 问题追踪 314 6.5 团队建设 321 6.6 验证的专业化 330 第六章 验证平台的结构 48 2.1 测试平台 49 2.2 硬件设计描述 55 MCDF接口描述 58 MCDF接口时序 62 MCDF寄存器描述 65 2.3 激励发生器 67 channel initiator 72 register initiator 73 2.4 监测器 74 2.5 比较器 81 2.6 验证结构 95 第七章 激励发生封装:类 209 5.1 概述 209 5.2 类的成员 233 5.3 类的继承 245 三种类型权限 protected/local/public 247 this super 253 成员覆盖 257 5.4 句柄的使用 263 5.5 包的使用 269 第八章 激励发生的随机化 340 7.1 随机约束和分布 340 权重分布 353 条件约束 355 7.2 约束块控制 358 7.3 随机函数 366 7.4 数组约束 373 7.5 随机控制 388 第九章 线程与通信 432 9.1 线程的使用 432 9.2 线程的控制 441 三个fork...join 443 等待衍生线程 451 停止线程disable 451 9.3 线程的通信 458 第十章 进程评估:覆盖率 495 10.1 覆盖率类型 495 10.2 功能覆盖策略 510 10.3 覆盖组 516 10.4 数据采样 524 10.5 覆盖选项 544 10.6 数据分析 550 第十一章 SV语言核心进阶 552 11.1 类型转换 552 11.2 虚方法 564 11.3 对象拷贝 575 11.4 回调函数 584 11.5 参数化的类 590 第十二章 UVM简介 392 8.2 UVM简介 414 8.3 UVM组件 420 8.4 UVM环境 425

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值