Міністерство Освіти і Науки
Національний Університет «Львівська політехніка»
кафедра ЕОМ
Звіт про виконання лабораторної роботи №9
з предмету «Моделювання комп’ютерних систем»
на тему : «Синтез та моделювання спеціалізованого пристрою»
Мета роботи: Навчитися створювати завершені VHDL-проекти, використовувати тестові стенди для симуляції та верифікації їх роботи за допомогою пакету Active-HDL і проектувати завершені пристрої на базі ПЛІС фірми Xilinx, використовуючи пакет WebPACK ISE для синтезу готового VHDL-проекту.
Вміст файлів згенерованого тестового стенду.
Demux.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity DemuxInt is
port(
CLK : in STD_LOGIC;
Seg : in STD_LOGIC_VECTOR(31 downto 0);
Y7 : out STD_LOGIC_VECTOR(3 downto 0);
Y6 : out STD_LOGIC_VECTOR(3 downto 0);
Y5 : out STD_LOGIC_VECTOR(3 downto 0);
Y4 : out STD_LOGIC_VECTOR(3 downto 0);
Y3 : out STD_LOGIC_VECTOR(3 downto 0);
Y2 : out STD_LOGIC_VECTOR(3 downto 0);
Y1 : out STD_LOGIC_VECTOR(3 downto 0);
Y0 : out STD_LOGIC_VECTOR(3 downto 0)
);
end DemuxInt;
architecture DemuxArch of DemuxInt is
begin
process (Seg)
begin
Y0 <= Seg(3 downto 0);
Y1 <= Seg(7 downto 4);
Y2 <= Seg(11 downto 8);
Y3 <= Seg(15 downto 12);
Y4 <= Seg(19 downto 16);
Y5 <= Seg(23 downto 20);
Y6 <= Seg(27 downto 24);
Y7 <= Seg(31 downto 28);
end process ;
end DemuxArch;
Register.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity ParalRg is
port(
CLK : in STD_LOGIC;
WE : in STD_LOGIC;
RE : in STD_LOGIC;
Data_In : in STD_LOGIC_Vector (31 downto 0) :="01101000001101000101011100100010";
--Data_In : in STD_LOGIC_Vector (7 downto 0) :="00000000";
Data_Out : out STD_LOGIC_VECTOR(31 downto 0)
);
end ParalRg;
--}} End of automatically maintained section
architecture ParalRGAch of ParalRg is
signal temp : std_logic_vector (31 downto 0) ; -- Використовується для зберігання всередині регістра
begin
Proc : process (CLK)
begin
if RE = '0' and WE = '1' then temp<=Data_In ;
elsif RE = '1' and WE = '0' then Data_Out <= temp;
else Data_Out <= "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ";
end if;
end process Proc;
end ParalRGAch;
decod.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity DecoderInt is
port(
X : in STD_LOGIC_VECTOR(3 downto 0);
Y : out STD_LOGIC_VECTOR(6 downto 0)
);
end DecoderInt;
--}} End of automatically maintained section
architecture DecoderArch of DecoderInt is
begin
process (X)
begin
case(x) is
when x"0" => Y <= "1111111";
when x"1" => Y <= "0100100";
when x"2" => Y <= "1101011";
when x"3" => Y <= "1101101";
when x"4" => Y <= "0111100";
when x"5" => Y <= "1011101";
when x"6" => Y <= "1011111";
when x"7" => Y <= "1100100";
when x"8" => Y <= "1111111";
when x"9" => Y <= "1111101";
when others => Y <="0000000";
end case;
end process;
end DecoderArch;
El.vhd
-------------------------------------------------------------------------------
--
-- Title : diagr
-- Design : lab8
-- Author : Stas
-- Company : polytex
--
-------------------------------------------------------------------------------
--
-- File : C:\Documents and Settings\Admin\Рабочий стол\lab8\lab8\compile\El.vhd
-- Generated : Fri Nov 11 23:15:01 2011
-- From : C:\Documents and Settings\Admin\Рабочий стол\lab8\lab8\src\El.bde
-- By : Bde2Vhdl ver. 2.6
--
-------------------------------------------------------------------------------
--
-- Description :
--
-------------------------------------------------------------------------------
-- Design unit header --
library IEEE;
use IEEE.std_logic_1164.all;
-- active library clause
entity diagr is
port(
CLK : in STD_LOGIC;
RE : in STD_LOGIC;
WE : in STD_LOGIC;
X : in STD_LOGIC_VECTOR(31 downto 0) := "00000000000000000000000000000000";
LCD0 : out STD_LOGIC_VECTOR(6 downto 0);
LCD1 : out STD_LOGIC_VECTOR(6 downto 0);
LCD2 : out STD_LOGIC_VECTOR(6 downto 0);
LCD3 : out STD_LOGIC_VECTOR(6 downto 0);
LCD4 : out STD_LOGIC_VECTOR(6 downto 0);
LCD5 : out STD_LOGIC_VECTOR(6 downto 0);
LCD6 : out STD_LOGIC_VECTOR(6 downto 0);
LCD7 : out STD_LOGIC_VECTOR(6 downto 0)
);
end diagr;
architecture diagr of diagr is
---- Component declarations -----
component DecoderInt
port (
X : in STD_LOGIC_VECTOR(3 downto 0);
Y : out STD_LOGIC_VECTOR(6 downto 0)
);
end component;
component DemuxInt
port (
CLK : in STD_LOGIC;
Seg : in STD_LOGIC_VECTOR(31 downto 0);
Y0 : out STD_LOGIC_VECTOR(3 downto 0);
Y1 : out STD_LOGIC_VECTOR(3 downto 0);
Y2 : out STD_LOGIC_VECTOR(3 downto 0);
Y3 : out STD_LOGIC_VECTOR(3 downto 0);
Y4 : out STD_LOGIC_VECTOR(3 downto 0);
Y5 : out STD_LOGIC_VECTOR(3 downto 0);
Y6 : out STD_LOGIC_VECTOR(3 downto 0);
Y7 : out STD_LOGIC_VECTOR(3 downto 0)
);
end component;
component ParalRg
port (
CLK : in STD_LOGIC;
Data_In : in STD_LOGIC_VECTOR(31 downto 0) := "01101000001101000101011100100010";
RE : in STD_LOGIC;
WE : in STD_LOGIC;
Data_Out : out STD_LOGIC_VECTOR(31 downto 0)
);
end component;
---- Signal declarations used on the diagram ----
signal BUS1609 : STD_LOGIC_VECTOR (31 downto 0);
signal BUS409 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS783 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS811 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS819 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS827 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS835 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS843 : STD_LOGIC_VECTOR (3 downto 0);
signal BUS851 : STD_LOGIC_VECTOR (3 downto 0);
begin
---- Component instantiations ----
U1 : DecoderInt
port map(
X => BUS851,
Y => LCD0
);
U10 : DecoderInt
port map(
X => BUS843,
Y => LCD1
);
U2 : ParalRg
port map(
CLK => CLK,
Data_In => X,
Data_Out => BUS1609,
RE => RE,
WE => WE
);
U3 : DemuxInt
port map(
CLK => CLK,
Seg => BUS1609,
Y0 => BUS409,
Y1 => BUS783,
Y2 => BUS811,
Y3 => BUS819,
Y4 => BUS827,
Y5 => BUS835,
Y6 => BUS843,
Y7 => BUS851
);
U4 : DecoderInt
port map(
X => BUS409,
Y => LCD7
);
U5 : DecoderInt
port map(
X => BUS783,
Y => LCD6
);
U6 : DecoderInt
port map(
X => BUS811,
Y => LCD5
);
U7 : DecoderInt
port map(
X => BUS819,
Y => LCD4
);
U8 : DecoderInt
port map(
X => BUS827,
Y => LCD3
);
U9 : DecoderInt
port map(
X => BUS835,
Y => LCD2
);
end diagr;
testbench.vhd
-------------------------------------------------------------------------------
--
-- Title : testbench
-- Design : lab8
-- Author : Stas
-- Company : poletex
--
-------------------------------------------------------------------------------
--
-- File : testbench.vhd
-- Generated : Fri Nov 11 23:03:24 2011
-- From : interface description file
-- By : Itf2Vhdl ver. 1.20
--
-------------------------------------------------------------------------------
--
-- Description :
--
-------------------------------------------------------------------------------
--{{ Section below this comment is automatically maintained
-- and may be overwritten
--{entity {testbench} architecture {testbench}}
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity testbench is
end testbench;
--}} End of automatically maintained section
architecture testbench of testbench is
signal RE : STD_LOGIC;
signal We : STD_LOGIC;
signal CLK : STD_LOGIC;
signal X : STD_LOGIC_VECTOR(31 downto 0);
signal LCD7 : STD_LOGIC_VECTOR(6 downto 0);
signal LCD6 : STD_LOGIC_VECTOR(6 downto 0);
signal LCD5 : STD_LOGIC_VECTOR(6 downto 0);
signal LCD4 : STD_LOGIC_VECTOR(6 downto 0);
signal LCD3 : STD_LOGIC_VECTOR(6 downto 0);
signal LCD2 : STD_LOGIC_VECTOR(6 downto 0);
signal LCD1 : STD_LOGIC_VECTOR(6 downto 0);
signal LCD0 : STD_LOGIC_VECTOR(6 downto 0);
begin
UUT : entity work.diagr(diagr)
port map (
CLK=>CLK,
WE=>WE,
RE=>RE,
X=>X,
LCD7=>LCD7,
LCD6=>LCD6,
LCD5=>LCD5,
LCD4=>LCD4,
LCD3=>LCD3,
LCD2=>LCD2,
LCD1=>LCD1,
LCD0=>LCD0
);
-- enter your statements here --
Pr_CLK: process
begin
CLK <= '0';
while true loop
wait for 10 ns;
CLK <=not CLK;
end loop;
end process Pr_CLK;
process
begin
WE <= '1';
RE<='0';
wait until CLK='1';
X <= "00100001000100010001000100010001";
wait for 20 ns;
WE <='0';
RE<='1';
wait for 100 ns;
while true loop
wait for 10 ns;
end loop;
end process;
end testbench;
На рис.№1 і на рис.№2 часові діаграми цього проекту:
/
Рис.№1
/
Рис.№2
Висновок : ми навчилися створювати завершені VHDL-проекти, використовувати тестові стенди для симуляції та верифікації їх роботи за допомогою пакету Active-HDL і проектувати завершені пристрої на базі ПЛІС фірми Xilinx, використовуючи пакет WebPACK ISE для синтезу готового VHDL-проекту.