Professional Documents
Culture Documents
Véges Állapotú Szekvenciális Automaták Tervezése VHDL Hardverleíró Nyelven
Véges Állapotú Szekvenciális Automaták Tervezése VHDL Hardverleíró Nyelven
Véges Állapotú Szekvenciális Automaták Tervezése VHDL Hardverleíró Nyelven
nyelven
X(t) Z(t)
S(t)
1
𝑥ҧ 𝑥ҧ /0
S0/0 𝑥ҧ S1/1 S0 𝑥ҧ /0 S1
x x/1
x x/1
x/1
x
𝑥ҧ 𝑥ҧ 𝑥ҧ /0 𝑥ҧ /1
Ábra 2. Moore típusú automatát szemléltető állapotgráf Ábra 3. Mealy típusú automatát szemléltető állapotgráf
S={S0, S1, S2, S3} – állapotok S={S0, S1, S2, S3} – állapotok
2
változók értékeit meghatározó kombinációs logikai áramkörnek szüksége van úgy az
állapotregiszter értékére, mint a bemeneti változók értékeire.
Clk
VHDL MODUL
ENTITÁS
x0 z0
x1 z1
… …
ARCHITEKTÚRA
xn-1 zm-1
3
A Moore típusú automata VHDL modul megírása
A 2. Ábrán feltüntetett állapotgráf által leírt Moore típusú automata VHDL entitás része
a következőképpen írható meg:
𝑥ҧ
𝑥ҧ 𝑥ҧ
4
Ugyancsak az architektúra részben írjuk meg két különálló folyamatként a következő
állapot és a kimenet értékét meghatározását, illetve az aktuális állapotból a következő állapotba
való átlépést.
begin
-- órajel felfutó élét figyelő folyamat
PROCESS (CLK)
BEGIN
IF rising_edge(CLK) THEN
--órajel felfutó él detektálása esetén átlépteti az automatát az aktuális
állapotból a következő állapotba
aktualis <= kovetkezo;
END IF;
END PROCESS;
5
A Mealy típusú automata VHDL modul megírása
A 3. ábrán feltüntetett állapotgráf által leírt Moore típusú automata VHDL entitás része
a következőképpen írható meg:
ENTITY MEALYautomata IS 𝑥ҧ /0
PORT ( CLK : in STD_LOGIC;
x : in STD_LOGIC;
Q0 : out STD_LOGIC; 00 𝑥ҧ /0 01
Q1 : out STD_LOGIC;
z : out STD_LOGIC); x/1
END;
x/1
x/1
11 x/0 10
𝑥ҧ /0 𝑥ҧ /1
6
BEGIN
-- órajel felfutó élét figyelő folyamat
PROCESS (CLK, kovetkezo, kovetkezo_z)
BEGIN
IF rising_edge(CLK) THEN
--átlépteti az automatát az aktuális állapotból a következo állapotba
aktualis <= kovetkezo;
--kiadja a következo kimenetet
z <= kovetkezo_z;
END IF;
END PROCESS;
7
kovetkezo<=S3;
kovetkezo_z<='0';
END IF;
IF ( x='1' ) THEN
kovetkezo<=S1;
kovetkezo_z<='1';
END IF;
WHEN OTHERS => kovetkezo_z<='Z'; kovetkezo<="ZZ";
END CASE;
END PROCESS;
END BEHAVIOR;
8
A lábkiosztásra vonatkozó megkötéseket tartalmazó .ucf állomány tartalma itt található:
9
A tesztelés második lehetősége a tesztáramkör strukturális leírásmódjának az
elkészítése. Ebben az esetben az órajel, a MOOREautomata és a hexdisplay vhdl modulokat
külső komponensként deklaráljuk és port map hívásokkal írjuk meg az áramkör felépítését. A
tesztmodul be és kimenetei megegyeznek a 10. ábrán látható kapcsolási rajz I/O Markerekkel
jelölt ki- és bemeneteivel.
entity struktMoore_top_module is
Port ( mclk : in STD_LOGIC;
x : in STD_LOGIC;
z : out STD_LOGIC;
szegmensek : out STD_LOGIC_VECTOR (7 downto 0));
end struktMoore_top_module;
component MOOREautomata is
Port ( CLK : in STD_LOGIC;
x : in STD_LOGIC;
Q0 : out STD_LOGIC;
Q1 : out STD_LOGIC;
z : out STD_LOGIC);
end component;
component hexdisplay is
Port( A : in std_logic; --LSB
B : in std_logic;
C : in std_logic;
D : in std_logic;--MSB
szegm : out std_logic_vector(7 downto 0));
end component;
--segédváltozók deklarálása
signal ora, Q0, Q1 : std_logic;
begin
--külső komponens hívások
U1: orajel port map('1', mclk, ora);
U2: MOOREautomata port map(ora, x, Q0, Q1, z);
U3: hexdisplay port map(Q0, Q1, '0', '0', szegmensek);
end Behavioral;
10