DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з лабораторних робіт з дисципліни: “Моделювання комп'ютерних систем” Лабораторна робота № 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:50

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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