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?