用并发语句实现触发器

马哈茂德

VHDL编程中规定,对于组合电路,使用并发语句,而对于时序电路,并发和时序语句都适用。现在的问题是:

如果我以并发形式编写顺序代码会发生什么?例如,我不使用process和编写触发器when..else

architecture x of y is
begin
   q <= '0' when rst=1 else
        d   when (clock'event and clock='1') else
        q;
end;

这是一个正确且可综合的代码吗?如果它是一个不正确的代码,那到底有什么问题(除了形式语法错误)?

马修·泰勒

你说:“VHDL编程中规定,对于组合电路,使用并发语句,而对于时序电路,并发和时序语句都适用。”。那明显是错的。您可以使用并发或顺序语句对组合代码和顺序代码进行建模。

使用并发语句对时序逻辑进行建模是不常见的。(我这么说是因为我在工作中看到了很多其他人的代码,而我几乎从未见过)。然而,这是可能的。您的代码确实存在语法错误和更基本的错误。如您所料,此修改后的代码版本合成为具有异步、高电平有效复位的上升沿触发触发器:

q <= '0' when rst='1' else
      d  when clock'event and clock='1';

语法错误是你有rst=1而不是rst='1'. 更根本的错误是您不需要else q. 这是不必要的,因为 VHDL 中的信号会保留先前分配的值,直到分配新值。因此,在 VHDL 代码建模时序逻辑中,永远不需要编写q <= q(或等效的)。在您的情况下,在我构建MCVE 中q是一个输出,因此您else q给出了语法错误,因为您无法读取输出。

这是 MCVE:

library IEEE;
use IEEE.std_logic_1164.all;

entity concurrent_flop is
  port (clock, rst, d : in  std_logic;
        q             : out std_logic);
end entity concurrent_flop;

architecture concurrent_flop of concurrent_flop is
begin
   q <= '0' when rst='1' else
         d  when clock'event and clock='1';
end architecture concurrent_flop;

我写了一个 MCVE 来检查我要说的是否正确。你也可以这样做。这样做是学习 VHDL 的好方法。EDA Playground 通常是一个尝试事物的好地方(无耻的插件),但在这种情况下不好,因为无法在 EDA Playground 上综合 VHDL。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用触发器更新多个表

来自分类Dev

更改触发器是否是DDL语句

来自分类Dev

具有If语句AND OR条件的Oracle触发器

来自分类Dev

SQLite触发器带有“ case when”语句

来自分类Dev

如何在Postgres中使用“ for语句”触发器?

来自分类Dev

缺少等号和SQL语句忽略了Oracle触发器?

来自分类Dev

MySQL触发器与if语句和变量

来自分类Dev

触发器子句中的IF语句

来自分类Dev

如何添加“ IF NOT EXISTS”以创建触发器语句

来自分类Dev

从选择语句循环更新触发器

来自分类Dev

执行触发器时出错。如何重做选择语句?

来自分类Dev

触发器内的if语句不起作用SQL(Oracle)

来自分类Dev

触发器IF语句中的MySQL语法错误?

来自分类Dev

如何在MYSQL触发器中使用IF语句?

来自分类Dev

DB2 9.7语句与行触发器

来自分类Dev

SQL知道如果触发器失败,则哪个语句激活了触发器

来自分类Dev

触发器给出了PL / SQL语句被忽略的错误

来自分类Dev

在插入触发器中使用case语句

来自分类Dev

触发器中的IF语句语法

来自分类Dev

在触发器中实现条件

来自分类Dev

如何在触发器中指定if语句?

来自分类Dev

触发器子句中的IF语句

来自分类Dev

Oracle触发器实现

来自分类Dev

使用IF语句插入触发器

来自分类Dev

在Verilog中实现JK触发器

来自分类Dev

触发器,包括if else语句

来自分类Dev

Oracle 中的语句级触发器

来自分类Dev

MYSQL触发器中的CASE语句

来自分类Dev

执行约束的语句级触发器