2.2 连续赋值、过程赋值
发布日期:2025-06-19 22:56:27
浏览次数:7
分类:精选文章
本文共 1058 字,大约阅读时间需要 3 分钟。
Verilog HDL赋值与过程模块基础知识
Verilog HDL在逻辑设计中提供了两种变量赋值的方法,分别是连续赋值和过程赋值。这些方法在不同的设计场景中发挥着重要作用。
赋值方法
连续赋值主要用于线网型变量(wire)的驱动,只能为线网型变量赋值,且线网型变量也必须使用连续赋值方式进行赋值。其基本语法格式为:
assign # [延时量] 线网型变量名 = 赋值表达式
赋值表达式可以是标量、向量线网、向量寄存器或函数调用。连续赋值的特点是只要右侧表达式中的任何一个操作数发生变化,表达式就会立即重新计算并赋值给对象。
例如:
wire a, b;assign a = b;wire [7:0] a, b;assign a = b;wire [7:0] a, b;assign a[3] = b[1];wire [7:0] a, b;assign a[3:0] = b[3:0];wire a, b;wire [1:0] c;assign c = {a, b}; 过程赋值用于为寄存器型变量(reg、integer、real、time)赋值,常见于always块、initial块等。过程赋值的特点是赋值后变量值保持不变,直到另一个赋值语句重新赋值为止。过程赋值又分为阻塞赋值和非阻塞赋值。
阻塞赋值
阻塞赋值使用“=”符号,赋值过程会阻塞其他操作,直到当前赋值完成。赋值按顺序执行,只有上一条语句完成后,才会执行下一条。
非阻塞赋值
非阻塞赋值使用“<=”符号,赋值过程不会阻塞其他操作。右侧表达式计算后,结果会在块结构结束时同时赋值给左侧变量。非阻塞赋值常用于流水线建模和互斥数据传输,但可能导致仿真速度下降和内存使用量增加。
选择赋值方式的要点
- 组合逻辑建模一般采用阻塞赋值。
- 时序逻辑建模通常使用非阻塞赋值。
- 在多个always块中,可以分别对组合和时序逻辑进行建模。
过程模块
Verilog中提供了多种过程模块,包括begin..end块(串行执行)、fork..join(并行执行)、case语句(分支并行)和if语句(选择分支串行)。
常用模块
- initial模块:在仿真时刻0执行一次,常用于初始化。
- always模块:持续重复执行,触发条件包括组合逻辑和时序触发(如边缘检测)。
- task、function模块:用于用户自定义任务和函数。
语句块执行特点
- begin..end块内语句串行执行。
- fork..join实现并行执行。
通过合理选择赋值方式和模块类型,可以更好地实现设计需求。
发表评论
最新留言
很好
[***.229.124.182]2026年06月18日 18时54分14秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP设计模式:观察者模式
2023-03-02
php访问mysql(1)
2023-03-02
php详细学习1
2023-03-02
php语言优劣
2023-03-02
PHP语言最优雅的支付SDK扩展包
2023-03-02
PHP请求https域名发生segment fault段错误
2023-03-02
PHP读写XML文件
2023-03-02
PHP读写XML文件
2023-03-02
R&Python Data Science 系列:数据处理(3)
2023-03-02
php读取xml 数据库字段超长处理
2023-03-02
php课程 12-40 抽象类的作用是什么
2023-03-02
php课程 4-16 数组自定义函数(php数组->桶)
2023-03-02
PHP调用接口用post方法传送json数据
2023-03-02
php转化IP为整形
2023-03-02
php输出数据到csv文件
2023-03-02
php输出语句
2023-03-02
php运行原理详细说明
2023-03-02
php运行环境出现Undefined index 或variable时解决方法
2023-03-02
php进程通信
2023-03-02
R&Python Data Science 系列:数据处理(2)
2023-03-02