- •Звіти до лабораторних робіт № 1 - 3 «Проектування комп’ютерних систем та мереж»
- •Сапр Xilinx WebPack
- •Імплементування vhdl моделей операційного та керуючого пристроїв (автоматів)
- •Автомат Мура
- •Імплементування vhdl моделей двохнаправленої шини та lvds шини
- •Шина lvds
- •Синтез та дослідження dll/dcm тактування проектів на пліс
Імплементування 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А.
