返回介绍

第九章 进程

发布于 2020-09-09 22:55:48 字数 2320 浏览 963 评论 0 收藏 0

主题
主题描述
9.1 简介(一般信息)Verilog-2001具有定义了静态进程的always和initial块。

在一个用来建模组合逻辑的always块中,如果忘记了else语句会产生一个不期望的锁存器。为了避免这个错误,SystemVerilog加入了专门的always_comb和always_latch块,它向仿真、综合和形式验证工具指明设计意图。SystemVerilog还加入了一个always_ff块来指示时序逻辑。

在系统建模过程中,Verilog的一个主要限制是缺乏动态创建进程的能力,这种能力在操作系统中经常出现。虽然Verilog具有fork...jion结构,但它仍然被限制成静态的。

SystemVerilog既具有由always、initial或fork引入的静态进程,也具有由fork...join_any和fork...join_none引入的动态进程。

SystemVerilog为每一个initial或always块、fork...join块中的每一条并行语句以及为每一个动态进程均创建了一个执行线程。每一条连续赋值语句也被认为是它自己的线程。

SystemVerilog 3.1通过增强fork...join结构加入了动态进程的能力,这种方式对于Verilog用户来说是非常自然的。SystemVerilog 3.1还引入了动态进程控制结构,它能够使用动态、父子关系来中止或等待进程。它们是wait fork和disable fork。
9.2 组合逻辑SystemVerilog提供了一个特殊的always_comb过程来建模组合逻辑行为。例如:
9.3 锁存逻辑SystemVerilog还包含了一个特殊的always_latch过程来建模锁存逻辑行为。例如:
9.4 时序逻辑SystemVerilog的always_ff过程可以用来建模可综合的时序逻辑行为。例如:
9.5 连续赋值在Verilog中,连续赋值只能驱动线网,而不能驱动变量。

SystemVerilog去除了这个限制,允许连续赋值驱动任何类型的变量。线网可以被多个连续赋值驱动,或者被原语和连续赋值混合驱动。而变量仅仅能够被一个连续赋值或一个原语驱动。对于被一个连续赋值或原语输出驱动的变量来说,在其声明或任何过程赋值中包含初始化是错误的。参见5.6节。
9.6 fork...joinfork...join能够从它的每一个并行语句中产生并发进程。

fork...join块的声明语法如下:
9.7 进程执行线程SystemVerilog为下列进程产生一个执行线程:

  • 每一个initial块
  • 每一个always块
  • fork...join(或join_any,或jion_none)语句组中的每一个并行语句
  • 每一个动态进程

每一个连续赋值也可以认为是它自己的线程

9.8 进程控制SystemVerilog提供了一些结构,它们允许一个进程能够中止其它进程,或者等待其它进程的结束。wait fork等待进程的结束。disable fork结构停止进程的执行。
9.9 精细的进程控制进程是一个内建的类,一旦一个进程被启动,就允许这个进程访问和控制另外一个进程。用户可以声明进程类型的变量,并且能够通过任务对它们进行安全的传递,或者将它们结合到其它对象中。进程类的原型如下:
链接 主题

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文