Моделювання комп'ютерних систем

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
О
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Моделювання комп ютерних систем

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з лабораторних робіт з дисципліни: “Моделювання комп'ютерних систем” Лабораторна робота № 2 Тема: Розробка та моделювання декодера для семисегментного індикатора. Завдання: Описати на мові VHDL декодер: перша цифра – 7-сегментний індикатор, друга цифра – 9-сегментний індикатор. / Змінити вивід цифр 1, 2, 3, 9 на 9-сегментному індикаторі таким чином: / / / / Інші цифри не змінювати. Декодер повинен генерувати числа від 0 до 10. Вихідний код library IEEE; use IEEE.STD_LOGIC_1164.all; entity Decoder is port( X : in STD_LOGIC_VECTOR(3 downto 0); Y1 : out STD_LOGIC_VECTOR(6 downto 0); Y2 : out STD_LOGIC_VECTOR(8 downto 0) ); end Decoder; architecture Decoder of Decoder is begin process (X) begin case (X) is when "0000" => Y1 <= "1110111"; Y2 <= "001110111"; when "0001" => Y1 <= "1110111"; Y2 <= "010100100"; when "0010" => Y1 <= "1110111"; Y2 <= "101000101"; when "0011" => Y1 <= "1110111"; Y2 <= "110001001"; when "0100" => Y1 <= "1110111"; Y2 <= "001001101"; when "0101" => Y1 <= "1110111"; Y2 <= "001101011"; when "0110" => Y1 <= "1110111"; Y2 <= "001111011"; when "0111" => Y1 <= "1110111"; Y2 <= "001000110"; when "1000" => Y1 <= "1110111"; Y2 <= "001111111"; when "1001" => Y1 <= "1110111"; Y2 <= "100001111"; when "1010" => Y1 <= "1110111"; Y2 <= "001110111"; when others => Y1 <= "0000000"; Y2 <= "000000000"; end case; end process; end Decoder; Часова діаграма / Лабораторна робота № 4 Тема: Моделювання режиму очікування в цифрових пристроях за допомогою оператора wait. Завдання: Змінити час затримки в процесах: CLK – 35 нс, Pr_B – 25 нс. Вихідний код library IEEE; use IEEE.STD_LOGIC_1164.all; entity comp is port( --CLK : in STD_LOGIC; Bout : out STD_LOGIC; Ainout : inout STD_LOGIC ); end comp; architecture comp of comp is signal CLK : std_logic := '0'; begin Pr_CLK: process--(CLK) begin wait for 35 ns; CLK <= not CLK; end process Pr_CLK; Pr_A: process--(CLK) begin --if CLK'event and CLK = '1' then Ainout <= '1' after 5 ns; --elsif CLK'event and CLK = '0' then Ainout <= '0' after 5 ns; --end if; wait on CLK until CLK = '1'; Ainout <= '1' after 5 ns; wait on CLK until CLK = '0'; Ainout <= '0' after 5 ns; end process Pr_A; Pr_B: process--(Ainout) begin --if Ainout'event then Bout <= not Ainout; --end if; wait on Ainout; wait for 25 ns; Bout <= not Ainout; end process Pr_B; end comp; Часова діаграма / Лабораторна робота № 5 Тема: Розробка та моделювання паралельного регістру та регістру зсуву. Завдання: Описати на мові VHDL паралельний регістр та регістр зсуву. Розрядність паралельного регістра – 12, регістра зсуву – 10. Вихідний код паралельного регістра library IEEE; use IEEE.STD_LOGIC_1164.all; entity Reg_Paral is port ( DATA_IN: in STD_LOGIC_VECTOR (11 downto 0); CLK: in STD_LOGIC; WE: in STD_LOGIC; RE: in STD_LOGIC; DATA_OUT: out STD_LOGIC_VECTOR (11 downto 0) ); end Reg_Paral; architecture Reg_Paral of Reg_Paral is begin process (DATA_IN, CLK, WE, RE) variable MEDIUM : STD_LOGIC_VECTOR (11 downto 0); begin if (CLK = '1' and WE = '1' and RE = '0') then MEDIUM := DATA_IN; elsif (CLK = '1' and WE = '0' and RE = '1') then DATA_OUT <= MEDIUM; else DATA_OUT <= "ZZZZZZZZZZZZ"; end if; end process; end Reg_Paral; Часова діаграма / Вихідний код регістра зсуву library IEEE; use IEEE.STD_LOGIC_1164.all; entity Reg_Shift is port ( DATA_IN : in STD_LOGIC; CLK : in STD_LOGIC; WE : in STD_LOGIC; RE : in STD_LOGIC; DATA_OUT : out STD_LOGIC_VECTOR(9 downto 0) ); end Reg_Shift; architecture Reg_Shift of Reg_Shift is begin process (DATA_IN, CLK, WE, RE) variable MEDIUM : STD_LOGIC_VECTOR (9 downto 0); begin if (CLK = '1' and WE = '1' and RE = '0') then for i in 8 downto 0 loop MEDIUM(i + 1) := MEDIUM(i); end loop; MEDIUM(0) := DATA_IN; elsif (CLK = '1' and WE = '0' and RE = '1' and (MEDIUM(9) = '1' or MEDIUM(9) = '0')) then DATA_OUT <= MEDIUM; else DATA_OUT <= "ZZZZZZZZZZ"; end if; end process; end Reg_Shift; Часова діаграма / Лабораторна робота № 6 Тема: Проектування постійного запам'ятовуючого пристрою. Завдання: Описати на мові VHDL ПЗП розрядністю 7, який приймає на вході адресу розрядністю 3 біти. Вихідний код library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; entity rom is port( CEO : in STD_LOGIC; Addr : in STD_LOGIC_VECTOR(2 downto 0); Dout : out STD_LOGIC_VECTOR(6 downto 0) ); end rom; architecture rom of rom is type ARR is array (7 downto 0) of STD_LOGIC_VECTOR(6 downto 0); constant MEMORY : ARR := ( "0000000", "0000001", "0000010", "0000100", "0001000", "0010000", "0100000", "1000000" ); begin process begin wait on CEO; if CEO = '1' then Dout <= MEMORY(conv_integer(Addr)); else Dout <= "UUUUUUU"; end if; end process; end rom; Часова діаграма / Лабораторна робота № 7 Тема: Проектування сканеру клавіатури із застосуванням діаграм скінчених автоматів для опису об'єктів в САПР Active-HDL. Завдання: Спроектувати сканеру клавіатури, натиснути клавішу “5”. Діаграма автомата / Вихідний код library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; entity Keyboard is port ( CLK: in STD_LOGIC; Ret: in STD_LOGIC_VECTOR (3 downto 0); KeyCode: out STD_LOGIC_VECTOR (7 downto 0); Strobe: out STD_LOGIC; Scan: inout STD_LOGIC_VECTOR (3 downto 0)); end Keyboard; architecture Keyboard_arch of Keyboard is -- diagram signals declarations signal Cond: STD_LOGIC; -- SYMBOLIC ENCODED state machine: Sreg0 type Sreg0_type is ( S0, S1, S2, S3, S4, S5 ); -- attribute enum_encoding of Sreg0_type: type is ... -- enum_encoding attribute is not supported for symbolic encoding signal Sreg0: Sreg0_type; begin ---------------------------------------------------------------------- -- Machine: Sreg0 ---------------------------------------------------------------------- Sreg0_machine: process (CLK) begin if CLK'event and CLK = '1' then -- Set default values for outputs, signals and variables -- ... case Sreg0 is when S0 => Scan <= "1111"; Strobe <= '0'; if Cond = '1' then Sreg0 <= S1; elsif Cond = '0' then Sreg0 <= S0; end if; when S1 => Scan <= "0001"; if Cond = '0' then Sreg0 <= S2; elsif Cond = '1' then Sreg0 <= S5; end if; when S2 => Scan <= "0010"; if Cond = '0' then Sreg0 <= S3; elsif Cond = '1' then Sreg0 <= S5; end if; when S3 => Scan <= "0100"; if Cond = '0' then Sreg0 <= S4; elsif Cond = '1' then Sreg0 <= S5; end if; when S4 => Scan <= "1000"; if Cond = '0' then Sreg0 <= S0; elsif Cond = '1' then Sreg0 <= S5; end if; when S5 => Strobe <= '1'; if Cond = '0' then Sreg0 <= S0; elsif Cond = '1' then Sreg0 <= S5; end if; --vhdl_cover_off when others => null; --vhdl_cover_on end case; end if; end process; -- signal assignment statements for combinatorial outputs KeyCode_assignment: KeyCode <= Ret & Scan when (Sreg0 = S5) else "00000000" when (Sreg0 = S0) else "00000000"; Cond_assignment: Cond <= Ret(0) or Ret(1) or Ret(2) or Ret(3); end Keyboard_arch; Часова діаграма / Лабораторна робота № 8 Тема: Використання блок-діаграм для декомпозиції складних пристроїв в САПР Active-HDL. Завдання: Створити блок-генератор сигналів для 8-розрядного 7-сегментного індикатора. Декодер розряду індикатора та паралельний регістр (моделі яких було розроблено в лабораторних роботах № 2 і № 5) мають входити до проекту як структурні складові. Інтерфейс генератора сигналів містить: вхідний 32-розрядний порт Х типу std_logic_vector (31 downto 0), на який у двійково-десятковій формі подається 8-розрядне десяткове число (на кожний десятковий розряд по 4 двійкові розряди); вхідний порт WE типу std_logic, подання '1' на який дозволяє запис у проміжний регістр блоку; сигнал синхронізації CLK типу std_logic; вісім 7-розрядних вихідних портів LCD7 … LCD0 типу std_logic_vector (6 downto 0), що підключаються безпосередньо до відповідних розрядів 7-сегментного індикатора. Діаграма автомата / Вихідний код Reg.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; entity Reg is generic (size : INTEGER := 32); port ( DATA_IN: in STD_LOGIC_VECTOR (size - 1 downto 0); CLK: in STD_LOGIC; WE: in STD_LOGIC; DATA_OUT: out STD_LOGIC_VECTOR (size - 1 downto 0) ); end Reg; architecture Reg of Reg is begin process (DATA_IN, CLK, WE) variable MEDIUM : STD_LOGIC_VECTOR (size - 1 downto 0); begin if rising_edge(CLK) then if WE = '1' then MEDIUM := DATA_IN; elsif WE = '0' then DATA_OUT <= MEDIUM; else for i in size - 1 downto 0 loop DATA_OUT(i) <= 'Z'; end loop; end if; end if; end process; end Reg; DeMux.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; entity DeMux is port( CLK : in STD_LOGIC; X : 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 DeMux; architecture DeMux of DeMux is begin process(CLK) begin if rising_edge(CLK) then Y0 <= X(3 downto 0); Y1 <= X(7 downto 4); Y2 <= X(11 downto 8); Y3 <= X(15 downto 12); Y4 <= X(19 downto 16); Y5 <= X(23 downto 20); Y6 <= X(27 downto 24); Y7 <= X(31 downto 28); end if; end process; end DeMux; LEDconv.vhd library IEEE; use IEEE.STD_LOGIC_1164.all; entity LEDconv is port( X : in STD_LOGIC_VECTOR(3 downto 0); Y : out STD_LOGIC_VECTOR(6 downto 0) ); end LEDconv; architecture LEDconv of LEDconv is begin process (X) begin case (X) is when "0000" => Y <= "1110111"; when "0001" => Y <= "1000100"; when "0010" => Y <= "0111110"; when "0011" => Y <= "1101110"; when "0100" => Y <= "1001101"; when "0101" => Y <= "1101011"; when "0110" => Y <= "1111011"; when "0111" => Y <= "1000110"; when "1000" => Y <= "1111111"; when "1001" => Y <= "1101111"; when others => Y <= "0000000"; end case; end process; end LEDconv; Diagram.vhd library IEEE; use IEEE.std_logic_1164.all; entity Diagram is port( CLK : in STD_LOGIC; WE : in STD_LOGIC; X : in STD_LOGIC_VECTOR(31 downto 0); 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 Diagram; architecture Diagram of Diagram is ---- Component declarations ----- component DeMux port ( CLK : in STD_LOGIC; X : 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 LEDconv port ( X : in STD_LOGIC_VECTOR(3 downto 0); Y : out STD_LOGIC_VECTOR(6 downto 0) ); end component; component Reg generic( size : INTEGER := 32 ); port ( CLK : in STD_LOGIC; DATA_IN : in STD_LOGIC_VECTOR(size-1 downto 0); WE : in STD_LOGIC; DATA_OUT : out STD_LOGIC_VECTOR(size-1 downto 0) ); end component; ---- Signal declarations used on the diagram ---- signal BUS2208 : STD_LOGIC_VECTOR (3 downto 0); signal BUS2222 : STD_LOGIC_VECTOR (3 downto 0); signal BUS2236 : STD_LOGIC_VECTOR (3 downto 0); signal BUS2250 : STD_LOGIC_VECTOR (3 downto 0); signal BUS2281 : STD_LOGIC_VECTOR (3 downto 0); signal BUS2321 : STD_LOGIC_VECTOR (3 downto 0); signal BUS2330 : STD_LOGIC_VECTOR (3 downto 0); signal BUS2339 : STD_LOGIC_VECTOR (3 downto 0); signal BUS5300 : STD_LOGIC_VECTOR (31 downto 0); begin ---- Component instantiations ---- U0 : LEDconv port map( X => BUS2321, Y => LCD0 ); U1 : LEDconv port map( X => BUS2330, Y => LCD1 ); U2 : LEDconv port map( X => BUS2339, Y => LCD2 ); U3 : LEDconv port map( X => BUS2281, Y => LCD3 ); U4 : LEDconv port map( X => BUS2250, Y => LCD4 ); U5 : LEDconv port map( X => BUS2236, Y => LCD5 ); U6 : LEDconv port map( X => BUS2222, Y => LCD6 ); U7 : LEDconv port map( X => BUS2208, Y => LCD7 ); U8 : DeMux port map( CLK => CLK, X => BUS5300, Y0 => BUS2321, Y1 => BUS2330, Y2 => BUS2339, Y3 => BUS2281, Y4 => BUS2250, Y5 => BUS2236, Y6 => BUS2222, Y7 => BUS2208 ); U9 : Reg port map( CLK => CLK, DATA_IN => X( 31 downto 0 ), DATA_OUT => BUS5300( 31 downto 0 ), WE => WE ); end Diagram; Часова діаграма / Лабораторна робота № 9 Тема: Синтез та моделювання спеціалізованого пристрою. Завдання: В лабораторній роботі проводиться: Проектування, симуляція та верифікація спеціалізованого пристрою, спроектованого в лабораторній роботі № 8. Синтез, функціональне моделювання, трасування, та часова симуляція спеціалізованого пристрою для реалізації його в ПЛІС фірми Xilinx. Вихідний код В даній лабораторній роботі використовуються всі вихідні файли з лабораторної роботи № 8 (Diagram.vhd, Reg.vhd, DeMux.vhd, LEDconv.vhd), а також файл тестового стенду testbench.vhd. testbench.vhd LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY testbench IS END testbench; ARCHITECTURE testbench OF testbench IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT Diagram PORT( CLK : IN std_logic; WE : IN std_logic; X : IN std_logic_vector(31 downto 0); 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 COMPONENT; --Inputs signal CLK : std_logic := '0'; signal WE : std_logic := '0'; signal X : std_logic_vector(31 downto 0) := (others => '0'); --Outputs signal LCD0 : std_logic_vector(6 downto 0); signal LCD1 : std_logic_vector(6 downto 0); signal LCD2 : std_logic_vector(6 downto 0); signal LCD3 : std_logic_vector(6 downto 0); signal LCD4 : std_logic_vector(6 downto 0); signal LCD5 : std_logic_vector(6 downto 0); signal LCD6 : std_logic_vector(6 downto 0); signal LCD7 : std_logic_vector(6 downto 0); BEGIN -- Instantiate the Unit Under Test (UUT) uut: Diagram PORT MAP ( CLK => CLK, WE => WE, X => X, LCD0 => LCD0, LCD1 => LCD1, LCD2 => LCD2, LCD3 => LCD3, LCD4 => LCD4, LCD5 => LCD5, LCD6 => LCD6, LCD7 => LCD7 ); -- Clock process definitions CLK_process :process begin CLK <= '0'; wait for 10 ns; CLK <= '1'; wait for 10 ns; end process; -- Stimulus process process begin wait until CLK = '1'; WE <= '1'; X <= "00000001001000110100010101100111"; wait until CLK = '1'; WE <= '0'; end process; END; Часова діаграма В середовищі Aldec Active-HDL / В середовищі Xilinx ISE WebPack /
Антиботан аватар за замовчуванням

07.05.2017 14:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!