5

我正在使用 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 的顺序版本。根据其他定义,这应该是行为性的,但作者没有这么说。你能澄清我对这些模型的困惑吗?

4

3 回答 3

8

不要寻找这些术语的数学上严格的描述;它们比这要模糊得多,松散的分类可以重叠。

我认为“数据流”在这里很清楚;它确实描述了数据流,并且它用并发语句来描述它。但我要补充一点,每个并发语句都会被其输入的变化唤醒并传递其输出;因此(重要的一点:)事情发生的顺序和源代码中元素的顺序之间没有对应关系。在这方面,它与函数式编程有很多共同之处。前两个模型都是数据流;在 (I) 中,元素是按逻辑顺序排列的,而 (II) 则不是。

“行为”也应该相当清楚 - 它只是根据其行为来描述电路。

但它一般并不反对数据流——尽管你的圣何塞引用有些正确——行为描述通常是顺序的,因为顺序范式(在 VHDL 过程中)是程序员常见和熟悉的。即便如此,几个这样的进程相互交互的行为是……数据流。

那么Behavioral并不正确地反对dataflow。它更正确地反对具有相当明确含义的RTL(Register Transfer Level)和结构。

结构描述由许多构建块(门、多路复用器、整个 CPU)和互连它们的信号组成:文本框图(可能从图形框图自动生成)。因此,它可以是最低级别(请参阅此处有关使用门制作加法器的常见问题!)或最高级别(将 CPU 连接到内存、外围设备等)。

RTL 描述是相当低级的;它描述了存储元素(寄存器)之间的数据传输和操作,并且在进程内部很常见;它更像是来自(行为)C 程序的汇编语言列表。

最后——太多的描述和太多无关的细节妨碍了正确的设计工作。查看手头的任务,提取其本质,然后实施。

多路复用器根据您想要的元素的索引选择一组输入元素中的一个。最自然的索引形式通常是整数类型,很少包含负索引,而 VHDL 中最自然的集合形式是……数组。

那为什么不写

ENTITY mux IS
  PORT ( a, b, c, d : in BIT;
         sel        : in natural range 0 to 3;
         x          : out BIT);
END mux;
ARCHITECTURE simple OF mux IS
SIGNAL values : array (0 to 3) of BIT;
BEGIN
   values <= a & b & c & d;
   x      <= values(sel);   -- after 0.5 ns; if you need to model timing!
END simple;

或者更好,使“值”成为输入端口......

于 2013-09-08T11:02:42.150 回答
1

在这本特定的书中没有很好地解释行为实现和结构实现之间的区别。根据谁试图传达什么,数据流可能是对硬件应用不佳的描述。

我怀疑这一点:Switching & Logic Laboratory Spring 2008 jeg 1 Lab 2 – Behavioral and Dataflow VHDL (PDF, 66KB, 12 pages) 是为了克服像你这样的本书读者的困惑:

在 VHDL 中,我们可以用三种不同的方式描述逻辑。这三种不同的架构是:

  • 行为 - 描述如何使用结构化语句从输入中得出输出。

  • 数据流——描述数据如何从输入流到输出,最常使用 NOT、AND 和 OR 操作。

  • 结构 - 描述门如何互连,类似于示意图方法。

数据流可以暗示并发,而行为或结构都不能排除顺序或并发描述。所有并发描述都转换为 VHDL 仿真的顺序过程,依靠增量仿真周期来同步模拟并发的信号分配。

模拟器中有一个设计网络的概念,它反映了设计层次结构,就像原理图可以用平面网表表示一样。

在这里使用所谓的数据流是有充分理由的,因为使用 9 级逻辑(MVL9,由包 std_logic_1164 使用)来描述逻辑行为会导致未知数('X')和未初始化值('U')的传播。它在行为模型和结构模型之间带来了关闭,而无需在可见值周围挥手,您无法在抽象级别之间调和,除非例外。数据流行为描述和结构实现之间的刺激和预期结果是相同的。

从经验来看,预先让不同的抽象级别匹配要容易得多,而不是从想要延迟第一块硅片等待您批准您提供的刺激的例外情况的代工厂的回复,加上至少从历史上看,数字您可以在 IC 测试仪上做出的例外情况非常有限。您可以将 IC 测试仪上的真实硅片视为另一个抽象级别。

为了在 VHDL 中模拟不同的抽象级别,您基本上编写了一个行为模型,该模型的行为与结构模型的行为更接近。一种

我通过谷歌搜索“VHDL 数据流”找到了上述 PDF,它揭示了更多信息来源。

于 2013-09-08T11:08:26.867 回答
1

行为 - 描述如何使用结构化语句从输入中得出输出。

数据流——描述数据如何流动。

-阿克伦大学工程学院

数据流模型要求您对数据流(即物理电路)有清晰的了解。但是,在使用行为模型时,只需要关注设计的主要行为即可。所以行为模型更容易理解和维护。例如,要实现一个并行乘法器

数据流模型

您将需要寄存器、FAU、多路复用器等组件。您应该自己实现它们。特别是当输入数字为 16 位或更多时,这很糟糕。

行为模型

你所需要的只是写下这样的声明:

p <= a * b;

模型是数据流模型还是行为模型取决于您对设计的建模方式。顺序语句还是并发语句?那没关系。

于 2013-09-08T11:37:25.097 回答