博客
关于我
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底层概述—3.InnoDB线程模型
查看>>
MySQL底层概述—4.InnoDB数据文件
查看>>
MySQL底层概述—5.InnoDB参数优化
查看>>
MySQL底层概述—6.索引原理
查看>>
MySQL底层概述—7.优化原则及慢查询
查看>>
MySQL底层概述—8.JOIN排序索引优化
查看>>
MySQL底层概述—9.ACID与事务
查看>>
Mysql建立中英文全文索引(mysql5.7以上)
查看>>
mysql建立索引的几大原则
查看>>
Mysql建表中的 “FEDERATED 引擎连接失败 - Server Name Doesn‘t Exist“ 解决方法
查看>>
MySQL开源工具推荐,有了它我卸了珍藏多年Nactive!
查看>>
MySQL异步操作在C++中的应用
查看>>
MySQL引擎讲解
查看>>
Mysql当前列的值等于上一行的值累加前一列的值
查看>>
MySQL当查询的时候有多个结果,但需要返回一条的情况用GROUP_CONCAT拼接
查看>>
MySQL必知必会(组合Where子句,Not和In操作符)
查看>>
MySQL必知必会总结笔记
查看>>
MySQL快速入门
查看>>
MySQL快速入门——库的操作
查看>>
mysql快速复制一张表的内容,并添加新内容到另一张表中
查看>>