VHDL中行为和数据流模型程序之间的混淆

时间:2013-09-08 08:54:22

标签: vhdl dataflow

我正在使用Douglas L Perry,第四版的教科书“VHDL:Programming by Example”。他在第4页中给出了Dataflow编程模型的一个示例:

代码I:

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页, Code 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关系。

数据流 - 使用并发语句描述电路

- 圣何塞州立大学

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

数据流 - 描述数据的流动方式。

- 阿克伦大学工程学院

这里我不明白结构化陈述是什么意思。

在行为级别,存在流程关键字

在数据流级别中,并发语句(&lt; =)存在


这是在在线论坛上看到的。

行为模型是强制性的流程声明吗?

代码I和II之间的实际差异是什么?据作者说,他们有不同的模型,数据流和行为。我看不出这是怎么可能的。我应该相信什么?

最后,在Perry D L,第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的顺序版本。根据其他定义,这应该是行为,但作者并没有这样说。你能解清我对这些模型的困惑吗?

3 个答案:

答案 0 :(得分:8)

不要寻找这些术语的数学严谨描述;它们比那些更加模糊,松散的分类可能会重叠。

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

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

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

行为然后没有正确地反对 dataflow 。它更恰当地与 RTL (寄存器传输级别)和结构相对立,具有相当明确的含义。

结构描述包括许多构建块(门,多路复用器,整个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;

或更好,将“值”设为输入端口......

答案 1 :(得分:1)

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

我怀疑这个:Switching & Logic Laboratory Spring 2008 jeg 1 Lab 2 – Behavioral and Dataflow VHDL(PDF,66KB,12页)是为了克服像你这样的书的读者的混淆:

  

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

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

  •   
  • 数据流 - 描述数据如何使用NOT,AND和OR操作从输入流向输出。

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

  •   

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

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

有充分的理由在这里使用所谓的数据流,因为用9级逻辑(MVL9,由包std_logic_1164使用)描述逻辑行为会导致未知数('X')和单值化('U')的传播。它带来了行为模型和结构模型之间的闭合,无需挥动可见值,除了异常之外,你无法在抽象层次之间进行协调。数据流行为描述和结构实现之间的刺激和预期结果是相同的。

根据经验,预先获得不同级别的抽象匹配比从晶圆代工厂回复想要延迟第一个芯片等待您批准您提供的刺激的例外情况更加容易,加上至少历史上,你可以在IC测试仪上做的例外数量相当有限。您可以将IC测试仪上的真实硅视为另一种抽象层次。

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

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

答案 2 :(得分:1)

  

行为 - 描述输出是如何从输入中导出的   结构化陈述。

     

数据流 - 描述数据的流动方式。

     

- 阿克伦大学工程学院

dataflow 模型要求您清楚地了解数据流(即物理电路)。但是,使用行为模型时,您只需要注意设计的主要行为。因此,行为模型更易于理解和维护。例如,实现并行乘法器

数据流模型

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

行为模型

你需要的只是写下这样的陈述:

p <= a * b;

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