Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Labs_1-3 ПКС.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

Імплементування vhdl моделей операційного та керуючого пристроїв (автоматів)

Мета роботи: опанування технікою VHDL проектування основних комп’ютерних автоматів

Завдання:

Засобами САПР WebPack/ModelSim імплементувати розширення базового проекту “Операційний пристрій”.

Хід роботи:

Для початку промодельовано базову модель операційного пристрою:

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_unsigned.all;

entity constant_alu is

port (OPCODE : in STD_LOGIC_VECTOR(2 downto 0);

A, B : in STD_LOGIC_vector(3 downto 0);

OP_OUT : out STD_LOGIC_vector(3 downto 0));

end constant_alu;

architecture alu_BEHAV of constant_alu is

constant ZERO : STD_LOGIC_VECTOR (2 downto 0) := "000";

constant A_AND_B: STD_LOGIC_VECTOR (2 downto 0) := "001";

constant A_OR_B : STD_LOGIC_VECTOR (2 downto 0) := "010";

constant ONE : STD_LOGIC_VECTOR (2 downto 0) := "111";

constant A_PL_B : STD_LOGIC_VECTOR (2 downto 0) := "011";

constant A_MI_B : STD_LOGIC_VECTOR (2 downto 0) := "100";

constant A_SRL : STD_LOGIC_VECTOR (2 downto 0) := "101";

constant A_SLL : STD_LOGIC_VECTOR (2 downto 0) := "110";

begin

process (OPCODE, A, B)

begin

if (OPCODE = A_AND_B) then OP_OUT <= A and B;

elsif (OPCODE = A_OR_B) then OP_OUT <= A or B;

elsif (OPCODE = A_PL_B) then OP_OUT <= A + B;

elsif (OPCODE = A_MI_B) then OP_OUT <= A - B;

elsif (OPCODE = A_SRL) then OP_OUT <= '0' & A(3 downto 1);

elsif (OPCODE = A_SLL) then OP_OUT <= A(2 downto 0) & '0';

elsif (OPCODE = ONE) then OP_OUT <= x"f";

else OP_OUT <= x"0";

end if;

end process;

end alu_BEHAV;

Для моделювання роботи необхідно створити test-bench файл з наступним вмістом (після доповнення):

OPCODE <= "100" after 200ns;

A <= "1111" after 150ns;

B <= "0111" after 220ns;

Рис. 1 Моделювання стандартної моделі операційного пристрою.

Для виконання лабораторної роботи необхідно змінити виконувану операцію. Для цього операцію віднімання заміняємо на операцію множення. До:

elsif (OPCODE = A_MI_B) then OP_OUT <= A - B;

після:

elsif (OPCODE = A_MI_B) then OP_OUT <= A * B;

Також проведемо моделювання зміненої моделі (рис. 2).

Рис. 2 Моделювання зміненої моделі операційного пристрою.

Як бачимо все працює правильно.

До зміни операції: 1111 – 0111 = 1000 (8) після: 1111 * 0111 = 1001 (9)

Єдиним недоліком є те, що втрачається старший розряд результату.

Автомат Мура

Завдання:

Засобами САПР Xilinx ISE WebPack/ModelSim імплементувати проект «Автомат Мура» на основі дослідження і розширення наданої базової (прототипної) моделі.

Далі подамо прототипну VHDL модель автомата Мура, що містить три процеси, а саме:

  • синхропроцес, що зростаючим фронтом тактового імпульсу змінює поточний внутрішній стан автомата на наступний,

  • процес формування функції переходів, тобто, комбінаційного обчислення наступного стану автомата в залежності від поточного стану та поточного вхідного сигналу,

  • процес формування вихідної функції, що залежить в автоматі Мура виключно від поточного внутрішнього стану.

Хід роботи:

Для роботи з автоматом використано наступну модель:

library IEEE;

use IEEE.std_logic_1164.all;

entity fsm_3 is

port ( clk, reset, x1 : IN std_logic;

outp : OUT std_logic);

end entity;

architecture beh1 of fsm_3 is

type state_type is (s1,s2,s3,s4);

signal state, next_state: state_type ;

begin

synchro_process: process (clk,reset)

begin

if (reset ='1') then

state <=s1;

elsif (clk='1' and clk'Event) then

state <= next_state;

end if;

end process synchro_process;

transition_function_process : process (state, x1)

begin

case state is

when s1 => if (x1='1') then

next_state <= s2;

elsif (x1='0') then

next_state <= s3;

end if;

when s2 => next_state <= s4;

when s3 => next_state <= s4;

when s4 => next_state <= s1;

end case;

end process transition_function_process;

output_function_process : process (state)

begin

case state is

when s1 => outp <= '1';

when s2 => outp <= '1';

when s3 => outp <= '0';

when s4 => outp <= '0';

end case;

end process output_function_process;

end beh1;

для перевірки правильності роботи було написано наступний test-bench файл:

reset <= '0' after 105ns;

clk <= not clk after 25ns;

Спершу сигнал х1 ставився в значення «1», результ моделювання при цьому показаний на рис. 3. Потім сигнал х2 ставився в значення «0», результат показаний на рис. 4.

Рис. 3 Моделювання при х1 = ‘1’

Рис. 4 Моделювання при х1 = ‘0’

Як видно з результатів на вихід подається різна комбінація («110» при першому варіанті, і «100» при другому). Це вказує на те, що автомат працює так, як задумувалось при розробці.

ЛР № 3А.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]