博客
关于我
2.2 连续赋值、过程赋值
阅读量:798 次
发布时间:2023-04-16

本文共 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实现并行执行。

通过合理选择赋值方式和模块类型,可以更好地实现设计需求。

转载地址:http://wpgfk.baihongyu.com/

你可能感兴趣的文章
mysql中的字段如何选择合适的数据类型呢?
查看>>
MySQL中的字符集陷阱:为何避免使用UTF-8
查看>>
mysql中的数据导入与导出
查看>>
MySQL中的时间函数
查看>>
mysql中的约束
查看>>
MySQL中的表是什么?
查看>>
mysql中穿件函数时候delimiter的用法
查看>>
Mysql中索引的分类、增删改查与存储引擎对应关系
查看>>
Mysql中索引的最左前缀原则图文剖析(全)
查看>>
MySql中给视图添加注释怎么添加_默认不支持_可以这样取巧---MySql工作笔记002
查看>>
Mysql中获取所有表名以及表名带时间字符串使用BetweenAnd筛选区间范围
查看>>
Mysql中视图的使用以及常见运算符的使用示例和优先级
查看>>
Mysql中触发器的使用示例
查看>>
Mysql中设置只允许指定ip能连接访问(可视化工具的方式)
查看>>
mysql中还有窗口函数?这是什么东西?
查看>>
mysql中间件
查看>>
MYSQL中频繁的乱码问题终极解决
查看>>
MySQL为Null会导致5个问题,个个致命!
查看>>
MySQL为什么不建议使用delete删除数据?
查看>>
MySQL主从、环境搭建、主从配制
查看>>