我正在使用 Douglas L Perry 第四版的教科书“VHDL:示例编程”。他在第 4 页给出了 Dataflow 编程模型的示例:
代码一:
ENTITY mux IS
PORT ( a, b, c, d : IN BIT;
s0, s1 : IN BIT;
x, : OUT BIT);
END mux;
ARCHITECTURE dataflow OF mux IS
SIGNAL select : INTEGER;
BEGIN
select <= 0 WHEN s0 = ‘0’ AND s1 = ‘0’ ELSE
1 WHEN s0 = ‘1’ AND s1 = ‘0’ ELSE
2 WHEN s0 = ‘0’ AND s1 = ‘1’ ELSE
3;
x <= a AFTER 0.5 NS WHEN select = 0 ELSE
b AFTER 0.5 NS WHEN select = 1 ELSE
c AFTER 0.5 NS WHEN select = 2 ELSE
d AFTER 0.5 NS;
END dataflow;
现在在第 17 页, 代码 II
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
ENTITY mux4 IS
PORT ( i0, i1, i2, i3, a, b : IN std_logic;
PORT ( i0, i1, i2, i3, a, q : OUT std_logic);
END mux4;
ARCHITECTURE mux4 OF mux4 IS
SIGNAL sel: INTEGER;
BEGIN
WITH sel SELECT
q <= i0 AFTER 10 ns WHEN 0,
q <= i1 AFTER 10 ns WHEN 1,
q <= i2 AFTER 10 ns WHEN 2,
q <= i3 AFTER 10 ns WHEN 3,
q <= ‘X’ AFTER 10 ns WHEN OTHERS;
sel <= 0 WHEN a = ‘0’ AND b = ‘0’ ELSE
1 WHEN a = ‘1’ AND b = ‘0’ ELSE
2 WHEN a = ‘0’ AND b = ‘1’ ELSE
3 WHEN a = ‘1’ AND b = ‘1’ ELSE
4;
END mux4;
根据同一本教科书,这应该是一种行为模型。除了变量名的不同之外,我在这里看到的唯一主要区别是有一个额外的语句
WITH sel SELECT
在第二种情况下,语法差异很小。本准则 II 是并行的。但是从互联网上的其他来源(如下所列),我已经看到行为模型应该是顺序的。我应该相信哪一个?
现在从互联网的其他一些来源,这些模型的定义如下:
行为 - 电路被描述为在进程中使用顺序语句的 i/o 关系。
数据流——使用并发语句描述电路
- 圣何塞州立大学
行为 - 描述如何使用结构化语句从输入中得出输出。
数据流——描述数据如何流动。
-阿克伦大学工程学院
在这里,我不明白结构化陈述是什么意思。
在行为级别,存在流程关键字
在数据流级别,存在并发语句 (<=)
这是在一个在线论坛上看到的。
行为模型的过程声明是强制性的吗?
代码 I 和 II 之间的实际区别是什么?根据作者的说法,它们有不同的模型、数据流和行为。我看不出这是怎么可能的。我应该相信什么?
最后,在 Perry DL,第 45、46 页:
LIBRARY IEEE;
USE IEEE.std_logic_1164ALL;
ENTITY mux IS
PORT (i0, i1, i2, i3, a, b : IN std_logic;
PORT (q : OUT std_logic);
END mux;
ARCHITECTURE better OF mux IS
BEGIN
PROCESS ( i0, i1, i2, i3, a, b )
VARIABLE muxval : INTEGER;
BEGIN
muxval := 0;
IF (a = ‘1’) THEN
muxval := muxval + 1;
END IF;
IF (b = ‘1’) THEN
muxval := muxval + 2;
END IF;
CASE muxval IS
WHEN 0 =>
q <= I0 AFTER 10 ns;
WHEN 1 =>
q <= I1 AFTER 10 ns;
WHEN 2 =>
q <= I2 AFTER 10 ns;
WHEN 3 =>
q <= I3 AFTER 10 ns;
WHEN OTHERS =>
NULL;
END CASE;
END PROCESS;
END better;
这是 MUX 的顺序版本。根据其他定义,这应该是行为性的,但作者没有这么说。你能澄清我对这些模型的困惑吗?