欢迎光临散文网 会员登陆 & 注册

Verilog语言(数字逻辑课程笔记二)——赋值语句

2023-02-21 09:00 作者:IC芯博士  | 我要投稿

Verilog HDL在相当长的时间内,仍是IC设计人员不可或缺的技能。

教师和教材都过于强调Verilog语言的硬件特性和可综合特性。将Verilog语言的行为级语法只作为语法设定来介绍,忽略了Verilog语言的软件特性和仿真特性。使得初学者无法理解Verilog语言在行为级语法(过程块、赋值和延迟)背后隐藏的设计思想。

今天为大家分享《Verilog语言(数字逻辑课程笔记二)——赋值语句希望能为大家带来帮助,干货满满,点赞收藏。

识别二维码添加老师

领取Verilog学习资料


《经典Verilog100多个代码案例》

《Verilog数字系统设计教程》


赋值语句

连续赋值

连续赋值语句是 Verilog 数据流建模的基本语句,用于对 wire 型变量进行赋值。其格式如下:

➢ 等式左边必须是一个标量或者线性向量,而不能是寄存器类型;
➢ 等式右边的类型没有要求,等式右边的值一旦发生变化,就会立刻重新计算并同时赋值给左侧。


过程赋值

● 过程赋值是在 initial 或 always 语句块里的赋值,主要用于对寄存器类型变量进行赋值

● 寄存器变量在被赋值后,其值将保持不变,直到重新被赋予新值

● 过程赋值只有在语句执行的时候,才会起作用

● Verilog 过程赋值包括 2 种语句:阻塞赋值与非阻塞赋值


过程赋值语句块:always语句块

➢ 通常带有触发条件
➢ 语句块中的语句会重复执行
➢ 一个变量不能在多个 always 块中被赋值
➢ 在 always 块中被赋值的只能是 register 型变量
➢ always 语句块即可以用来实现组合逻辑也可以用来实现时序逻辑

模块声明:

不带有敏感信号的 always 语句块会一直
执行
➢ 可用于仿真时钟信号生成

always设计组合电路
代码示例:

always设计时序逻辑电路

➢ 模N计算器,计数器从0开始,每个时钟周期上升沿自加1,计算器加到N-1之后重新从0开始计数。
➢ 模N计数器需要 log2 𝑁 个触发器来保存计数值

代码示例:

阻塞赋值

➢ 阻塞赋值属于顺序执行,即下一条语句执行前,当前语句一定会执行完毕
➢ 阻塞赋值语句使用等号 = 作为赋值符
➢ 仿真中,initial 里面的赋值语句都是用的阻塞赋值

非阻塞赋值

➢ 非阻塞赋值属于并行执行语句,即下一条语句的执行和当前语句的执行是同时进行的,它不会阻塞位于同一个语句块中后面语句的执行
➢ 非阻塞赋值语句使用小于等于号 <= 作为赋值符


➢ 仅用于仿真,沿时间轴只执行一次
➢ 用途主要是在仿真的初始状态对各变量进行初始化
➢ 不可综合,常用于测试文件中生成激励波形(如复位信号)作为电路的仿真信号


generate

generate 可以用来循环实例化模块或条件实例化模块
➢ generate 与 for loop,用来构造循环结构,多次实例化某个模块
➢ generate 与 if else 或 case,用来在多个块之间选择一个代码块

 

文章长度有限,该学习笔记将持续更新,点赞收藏。

想要获取IC设计资料(前端、后端、验证、模拟版图...)的同学,赶快扫下面二维码私信助教老师,还有机会获取免费课程哦~ 


来自CSDN秘密果酱博主的,已获博主许可,转载请联系博主。


Verilog语言(数字逻辑课程笔记二)——赋值语句的评论 (共 条)

分享到微博请遵守国家法律