Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра ЕОМ
Звіт
з лабораторних робіт №1-3
з дисципліни:
«Проектування комп'ютерних систем та мереж, частина 1»
Лабораторна робота №1
САПР Xilinx WebPack
Мета:
Опанувати методами роботи в САПР Xilinx WebPack. Дослідити властивості, поведінку та варіанти використання базового примітивного елементу ПЛІС, що отримав назву функційної таблиці (в оригіналі – Look-Up Table (LUT)).
Завдання:В САПР WebPack/ModelSim імплементувати в ПЛІС Virtex-II власні модифікації наданого базового проекту «Функційна таблиця». Запропоновані імплементування верифікувати. Скласти звіт з виконання лабораторних досліджень та захистити його.
Виконання:
Створення проекту my_lab
Вибір ПЛІС та симулятора
Згенероване резюме проекту
У щойно створеному проекті автоматично генерується файл з кодом
опису роботи створюваного пристрою. Після редагування даного файлу він матиме наступний вигляд до нього додано поведінку роботи пристрою: library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity my_lab2 is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
c : out STD_LOGIC);
end my_lab2;
architecture Behavioral of my_lab2 is
begin
c <=(a and b);
end Behavioral;Источник: http://12fan.ru/3217856884.html
На етапі синтезу створено звіт і технологічну схему.
=========================================================================
* Final Report *
=========================================================================
Final Results
RTL Top Level Output File Name : my_lab2.ngr
Top Level Output File Name : my_lab2
Output Format : NGC
Optimization Goal : Speed
Keep Hierarchy : NO
Design Statistics
# IOs : 3
Cell Usage :
# BELS : 1
# LUT2 : 1
# IO Buffers : 3
# IBUF : 2
# OBUF : 1
=========================================================================
Device utilization summary:
---------------------------
Selected Device : 2v40fg256-5
Number of Slices: 1 out of 256 0%
Number of 4 input LUTs: 1 out of 512 0%
Number of IOs: 3
Number of bonded IOBs: 3 out of 88 3%
Технологічна схема проекту:
Вікно утиліти Floorplaner.
Видно які контакти ПЛІС та під які сигнали задіяв автомат розведення.
Енергоспоживання проекту my_lab1
Еквівалентне подання функційною схемою наповнення функційної таблиці проекту my_lab2
Функціональна таблиця і карта Карно
Добавив TestBench tb
Часова діаграма
12) Часове симулювання табличної реалізації функції «І» на два входи
Топологія табличної реалізації логічної функції and2 на ПЛІС Virtex-2
Лабораторна робота №2
Імплементування VHDL моделей операційного та керуючогопристроїв (автоматів)
Мета роботи: опанування технікою VHDL проектування основних комп’ютерних автоматів
Хід роботи: Для початку промодельовано базову модель операційного пристрою:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity comst_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 comst_alu;
architecture Behavioral of comst_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 Behavioral;
Для моделювання роботи необхідно створити 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;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity my_avt_moore is
port ( clk, reset, x1 : IN std_logic;
outp : OUT std_logic);
end my_avt_moore;
architecture Behavioral of my_avt_moore 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
begin
case state is
when s1 => if x1='1' then
next_state <= s2;
else
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 Behavioral;
Спершу сигнал х1 ставився в значення «1», результ моделювання при цьому показаний на рис. 3. Потім сигнал х2 ставився в значення «0», результат показаний на рис. 4.
Рис. 3 Моделювання при х1 = ‘1’
Рис. 4 Моделювання при х1 = ‘0’
Як видно з результатів на вихід подається різна комбінація («110» при першому варіанті, і «100» при другому). Це вказує на те, що автомат працює так, як задумувалось при розробці.
Лабораторна робота №3а
Імплементування VHDL моделей двохнаправленої шини та LVDSшини
Мета роботи: Опанувати техніку використання шин в системних проектах на ПЛІСХід роботи: Реалізація тристабільної двонаправленої шини даних наведена нижче:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity tristate is
port (
clk: in STD_LOGIC;
rstn: in STD_LOGIC;
read_state: out std_logic;
write_state: out std_logic;
bus_out: out STD_LOGIC_VECTOR (7 downto 0);
z_bus: inout STD_LOGIC_VECTOR (7 downto 0));
end tristate;
architecture Behavioral of tristate is
signal chronometer: std_logic_vector(7 downto 0);
signal bus_register: std_logic_vector(7 downto 0);
signal write_to_bus, read_from_bus : std_logic;
begin
write_to_bus <= '1' when chronometer > "00000011" and chronometer < "00010000" else '0'; -- multiplexor
read_from_bus <= '1' when chronometer > "00011111" and chronometer < "00111111" else '0'; -- multiplexor
z_bus <= "01110111" when write_to_bus = '1' else (others => 'Z'); -- multiplexor, write cycle
bus_out <= bus_register; -- out from chip
write_state <= write_to_bus; -- write-gate signal, chip output
read_state <= read_from_bus; -- read-gate signal, chip output
U1: process (clk, rstn, read_from_bus) -- reading from tristate bus
begin
if rstn ='0' then
bus_register <= (others => '0');
elsif read_from_bus='1' then
if clk'event and clk='1'then
bus_register <= z_bus; -- read cycle
else
null;
end if;
else null;
end if;
end process;
U2: process (clk, rstn)
begin
if rstn ='0' then
chronometer <= (others => '0');
elsif clk'event and clk='1' then
chronometer <= chronometer + '1';
else null;
end if;
end process;
end Behavioral;
Результат симулювання наведено на рисунку 1. Як видно з діаграми в момент запису на шину, шина виходить зі стану Z. І на неї записується код. Коли відкриті ворота читання, виконується читання на шину bus_out починаючи з 420 ns. Ці дані будуть на шині поки будуть відкриті ворота читання. Для симулювання використано наступне доповнення:
Рис. 1. Моделювання роботи тристабільної двохнаправленої шини.
Шина LVDS
Текст модуля реалізації даної шини наведено нижче:
library IEEE;
Library UNISIM;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use UNISIM.vcomponents.all;
entity lvds is
Port ( i : in std_logic;
ib : in std_logic;
tri: in std_logic;
o : out std_logic;
ob : out std_logic);
end lvds;
architecture Behavioral of lvds is
component IBUFDS_LVDS_25
port( I : in std_logic;
IB : in std_logic;
O : out std_logic );
end component;
component OBUFTDS_LVDS_25
port(
I : in std_logic;
T : in std_logic;
O : out std_logic;
OB : out std_logic
);
end component;
signal wire_in : std_logic;
signal wire_out : std_logic;
begin
U0: wire_in <= not wire_out;
U1: IBUFDS_LVDS_25
port map ( I => i, -- P-Channel input to LVDS in_buffer
IB => ib, -- N-Channel input to LVDS in_buffer
O => wire_out); -- Output to FPGA fabric
U2: OBUFTDS_LVDS_25
port map (
I => wire_in, -- Input from FPGA fabric
T => tri, -- 3-State control input to LVDS out-buffer
O => o, -- P-Channel Output of LVDS buffer
OB => ob -- N-Channel Output of LVDS buffer
);
end Behavioral;
У тест бенч були внесені зміни:
i <= not i after 50ns;
ib <= not ib after 50ns;
………..
wait for 200 ns;
tri <= '0';
wait for 300 ns;
tri <= '1';
Рис.2 Часове симулювання функціонування LVDS шини.
Рис. 3. Розміщення LVDS-шини на кристалі.
Лабораторна робота №3б
Синтез та дослідження DLL/DCM тактування проектів на ПЛІС
Мета: Опанувати технікою тактування поектів на ПЛІС
Хід роботи: Текст модуля наведено нижче:library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--library UNISIM;
--use UNISIM.VComponents.all;
entity dll_standard is
port (CLKIN : in std_logic;
RESET : in std_logic;
CLK0 : out std_logic;
CLK2X : out std_logic;
LOCKED: out std_logic);
end dll_standard;
architecture Behavioral of dll_standard is
component IBUFG
port(
O : out STD_ULOGIC;
I : in STD_ULOGIC);
end component;
component IBUF
port(
O : out STD_ULOGIC;
I : in STD_ULOGIC);
end component;
component CLKDLL
port ( CLKIN : in std_ulogic := '0';
CLKFB : in std_ulogic := '0';
RST : in std_ulogic := '0';
CLK0 : out std_ulogic := '0';
CLK90 : out std_ulogic := '0';
CLK180 : out std_ulogic := '0';
CLK270 : out std_ulogic := '0';
CLK2X : out std_ulogic := '0';
CLKDV : out std_ulogic := '0';
LOCKED : out std_ulogic := '0');
end component;
component BUFG
port(
O :out STD_ULOGIC;
I :in STD_ULOGIC);
end component;
component OBUF
port(
O : out STD_ULOGIC;
I : in STD_ULOGIC);
end component;
signal CLKIN_w, RESET_w, CLK0_dll, CLK0_g, CLK2X_dll, LOCKED_dll : std_logic;
begin
clkpad : IBUFG port map (I=>CLKIN, O=>CLKIN_w);
rstpad : IBUF port map (I=>RESET, O=>RESET_w);
dll : CLKDLL port map (CLKIN=>CLKIN_w, CLKFB=>CLK0_g, RST=>RESET_w,CLK0=>CLK0_dll, CLK90=>open, CLK180=>open, CLK270=>open, CLK2X=>CLK2X_dll, CLKDV=>open, LOCKED=>LOCKED_dll);
clkg : BUFG port map (I=>CLK0_dll, O=>CLK0_g);
clk2xg : BUFG port map (I=>CLK2X_dll, O=>CLK2X);
lckpad : OBUF port map (I=>LOCKED_dll, O=>LOCKED);
CLK0 <= CLK0_g;
end Behavioral;
Автоматично згенерована схема проекту наведена на рисунку 1
Рис. 1 RTL – схема проекту.
Рис. 2 Часова діаграма симуляції проекту за допомогою TEST-BENCH.
Як видно з часової діаграми сигнал CLK0 повністю повторює вхідний сигнал синхронізації. А сигнал CLK2X формується з частотою, вдвічі швидчою ніж попередній, отже модуль працює правильно.
Висновок:
На даних лабораторних роботах я дослідив властивості поведінку та варіанти базового примітивного елементу PLIS, опанував техніку VHDL проектування основних комп’ютерних автоматів, використання шин в системних проектах на ПЛІС, тактування проектів на ПЛІС.