Zamieszanie między modelami programów behawioralnych i przepływu danych w VHDL

Używam podręcznika „VHDL: Programming By Example” Douglasa L Perry'ego, wydanie czwarte. Podał przykład modelu programowania Dataflow na stronie 4:

Kod 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;

Teraz na stronie 17,Kod 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;

To ma byćmodel behawioralny, jak w tym samym podręczniku. Oprócz różnic w nazwie zmiennej, jedyną istotną różnicą, jaką tu widzę, jest to, że istnieje dodatkowe stwierdzenie

WITH sel SELECT

w drugim przypadku i niewielkie różnice składniowe.Ten kod II jest równoległy. Ale z innych źródeł w Internecie (wymienionych poniżej) widziałem, że model behawioralny ma być sekwencyjny. Który powinienem wierzyć?

Teraz z niektórych innych źródeł Internetu definicja tych modeli jest następująca:

Behawioralne - obwód jest opisany jako relacja we / wy za pomocąsekwencyjny oświadczenia wewnątrz aproces.

Przepływ danych - Obwód jest opisany za pomocąrównoległy sprawozdania

- Uniwersytet Stanowy San Jose

Behawioralne - opisuje, w jaki sposób dane wyjściowe pochodzą z danych wejściowych za pomocą strukturalnych instrukcji.

Przepływ danych - opisuje przepływ danych.

-Uniwersytet Akron College of Engineering

Tutaj nie rozumiem, co oznaczają wyrażenia strukturalne.

w poziomie zachowania występuje słowo procesowe

na poziomie przepływu danych występuje instrukcja współbieżna (<=)

To było widoczne na forum internetowym.

Czy oświadczenie procesowe jest obowiązkowe dla modelu behawioralnego?

Jaka jest rzeczywista różnica między kodami I i II? Według autora mają one różne modele, przepływ danych i zachowanie. Nie widzę, jak to możliwe. Co mam wierzyć?

Wreszcie w Perry D L, str. 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;

To sekwencyjna wersja MUX. Zgodnie z innymi definicjami ma to być zachowanie, ale autor tak nie twierdzi. Czy mógłbyś wyjaśnić moje zamieszanie dotyczące tych modeli?

questionAnswers(3)

yourAnswerToTheQuestion