Confusão entre os modelos de modelos comportamentais e de fluxo de dados em VHDL

Eu estou usando o livro "VHDL: Programação pelo exemplo" por Douglas L Perry, quarta edição. Ele deu um exemplo do modelo de programação do Dataflow na página 4:

Código 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;

Agora na página 17,Código 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;

Este é suposto ser ummodelo comportamental, de acordo com o mesmo livro didático. Além das diferenças no nome da variável, a única grande diferença que vejo aqui é que há uma instrução extra

WITH sel SELECT

no segundo caso e pequenas diferenças de sintaxe.Este código II é concorrente. Mas de outras fontes na internet (listadas abaixo), eu vi que um modelo comportamental deveria ser seqüencial. Qual deles devo acreditar?

Agora de algumas outras fontes da internet, a definição desses modelos é a seguinte:

Comportamental - Circuit é descrito como uma relação de i / o usandosequencial declarações dentro de umprocesso.

Fluxo de dados - O circuito é descrito usandoconcorrente afirmações

-San Jose State University

Comportamental - descreve como a saída é derivada das entradas usando instruções estruturadas.

Fluxo de dados - descreve como os dados fluem.

-Universidade da Akron College of Engineering

Aqui eu não entendo o que as declarações estruturadas significam.

no nível de comportamento, a palavra-chave do processo está presente

no nível do fluxo de dados, a instrução simultânea (<=) está presente

Isso foi visto em um fórum on-line.

A declaração do processo é obrigatória para o modelo comportamental?

Qual é a diferença real entre os códigos I e II? Segundo o autor, eles possuem modelos diferentes, fluxo de dados e comportamentais. Não consigo ver como isso é possível. O que devo acreditar?

Por fim, em Perry D L, página 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;

Esta é uma versão sequencial do MUX. De acordo com as outras definições, isso é supostamente comportamental, mas o autor não afirma isso. Você poderia esclarecer minha confusão em relação a esses modelos?

questionAnswers(3)

yourAnswerToTheQuestion