【问题标题】:could you help me undrstand the parrallelisme in VHDL?你能帮我理解 VHDL 中的并行性吗?
【发布时间】:2019-11-03 18:33:04
【问题描述】:

我知道在一个进程中指令是按顺序执行的,直到进程结束才更新信号的值,但是我不明白并行性的原理?例如,在下面的代码中,我知道两条指令将并行执行(同时),但我不知道 Q 是否会具有 Sig2 的新值,或者当我们计算 Sig2 时我们是否使用新值Sig1 还是先例?

Sig1<=a and b; Sig2<=Sig1 and a; Q<=Sig2;

【问题讨论】:

  • 参见 IEEE Std 1076-2008 11.6 并发信号赋值语句 “并发信号赋值语句代表一个等效的过程语句,它为信号赋值。” 10.2 等待语句,第 3 和 4 段“该规则还用于构造等价过程语句中等待语句的敏感度集...,以及并发信号分配语句 (11.6)。”等效过程对信号分配右侧评估的信号上的事件敏感。 (并发——不并行不代表连续,尝试模拟)。

标签: concurrency vhdl fpga hdl


【解决方案1】:

由于 VHDL 使用事件驱动语义,实际上没有什么是并行执行的。它只是具有并行性的外观。只要 RHS 操作数更改,您显示的并发分配就会执行——没有隐含的顺序。如果a 从 1 变为 0,则不能依赖前两条语句的执行顺序。有可能第 2nd 赋值首先执行,然后第 1st 赋值第二个执行,接着 3rd 赋值第三个执行(因为 @987654322 @ 已更改),然后 2nd 分配再次执行,因为 Sig1 已更改。

大多数工具会尝试对语句进行排序以最小化重新执行赋值的次数,甚至可能像您写的那样对其进行优化:

Q <= a and b;

并从模拟中消除Sig1Sig2

【讨论】:

  • 首先非常感谢您,所以值((a和b)和a)将直接分配给Q,就好像值的分配像普通编程语言一样顺序完成?
  • 不,不是按顺序排列的。并发语句的执行顺序不是由标准定义的,而是依赖于实现的,也是事件驱动的。 dave_59 错误地使用了概括“大多数工具将尝试对语句进行排序以最小化重新执行分配的次数,甚至可能优化......”没有信号分配被优化掉,而在综合中介网络中,它们是不同域 VHDL 仿真语言和映射到硬件的详细设计层次结构。
  • @user1155120,我曾为目前生产 VHDL 模拟器的三个不同公司工作过,我知道这是真的。这就是当您想将信号转储到波形时需要 +acc 或访问开关的原因。这保留了它们的存在。
  • @Rachid_Tahiri 是一种普通编程语言,在单个线程中仅按顺序处理变量赋值。如何排序写入和读取以获得不同的状态行为很重要。在 VHDL 程序中也是如此。但是当你有多个进程/线程时,VHDL 要求你使用信号而不是变量来在进程之间进行通信。
猜你喜欢
  • 2021-06-11
  • 1970-01-01
  • 2020-04-11
  • 2011-04-02
  • 2012-06-05
  • 2014-10-13
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多