博客
关于我
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 编译安装 window篇
查看>>
mysql 网络目录_联机目录数据库
查看>>
MySQL 聚簇索引&&二级索引&&辅助索引
查看>>
Mysql 脏页 脏读 脏数据
查看>>
mysql 自增id和UUID做主键性能分析,及最优方案
查看>>
Mysql 自定义函数
查看>>
mysql 行转列 列转行
查看>>
Mysql 表分区
查看>>
mysql 表的操作
查看>>
mysql 视图,视图更新删除
查看>>
MySQL 触发器
查看>>
mysql 让所有IP访问数据库
查看>>
mysql 记录的增删改查
查看>>
MySQL 设置数据库的隔离级别
查看>>
MySQL 证明为什么用limit时,offset很大会影响性能
查看>>
Mysql 语句操作索引SQL语句
查看>>
MySQL 误操作后数据恢复(update,delete忘加where条件)
查看>>
MySQL 调优/优化的 101 个建议!
查看>>
mysql 转义字符用法_MySql 转义字符的使用说明
查看>>