Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Звіти до лабораторних робіт № 4 7
Виконав:
ст. гр. КСМсі-11з
Мархоцький В.С.
Прийняв:
Бачинський Р.В.
Львів 2013
ЛР № 4.
Імплементування та дослідження VHDL моделі машини з архітектурою MIPS
Мета: опанування технікою створення та використання софтконтролерів з архітектурою MIPS.
Хід роботи:
Вікно програми XILINX WebPack після завантаження , перевірки та імплементації проекту має наступний вигляд (рис. 1):
Рис. 1 Вікно XILINX із завантаженим проектом.
Імплементована схема проекту має вигляд (рис 2):
Рис. 2 RTL-схема проекту.
Для перевірки правильності функціонування моделі потрібно створити тестовий файл:
…
clock <= not clock after 50ns;
reset <= '0' after 180ns;
…
Результат роботи цього файлу наведено на рисунку 3.
Рис. 3 Результат симуляції проекту.
Як видно з діаграми, значення програмного лічильника збільшується в кожному такті на 4, оскільки саме така ширина інструкції. Програмний лічильник регістр що вказує на наступну команду у памяті. Отже, за результатами видно, що команди вибираються поступово, без переходів.
ЛР № 5
Імплементування та дослідження VHDL моделі софтконтролера XILINX PicoBlaze
Мета роботи: опанування технікою створення і використання 8 бітових софтконтролерів з архітектурою Xilinx PicoBlaze.
Хід роботи:
Тестова програма для PicoBlaze:
Load s7, 01 ; init shifter reg
Output s7, 04
SL0 s7 ; rotate left
Jump NZ, 01
Jump 00
VHDL модель програмної памяті з тестовою програмою:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity demo_test is
port( address : in std_logic_vector(7 downto 0);
clk : in std_logic;
dout : out std_logic_vector(15 downto 0));
end;
architecture v1 of demo_test is
constant ROM_WIDTH: INTEGER:= 16;
constant ROM_LENGTH: INTEGER:= 256;
subtype rom_word is std_logic_vector(ROM_WIDTH-1 downto 0);
type rom_table is array (0 to ROM_LENGTH-1) of rom_word;
constant rom: rom_table := rom_table'(
"0000011100000001",
"1000111100000100",
"1010011100000110",
"1101010100000001",
"1101000000000000",
"0000000000000000",
"0000000000000000",
"0000000000000000",
…………………………………
"0000000000000000");
begin
process (clk)
begin
if clk'event and clk = '1' then
dout <= rom(conv_integer(address));
end if;
end process;
end v1;
Завантаження VHDL проекту до САПР
Рис. 1. Завантажений до WebPack VHDL проект софтконтролера Xilinx PicoBlaze
На рис. 1. Показано проектні джерельні файли, що утворюють ієрархію проекту. Тестбенч файлу містить автоматично задані нульові початкові значення вхідних сигналів. Зміни вхідних сигналів змінюються, а саме: на 10 нс сигнал скиду приймає значення 0 і припиняє свою дію; через кожні 15 нс рівень такту інвертується; отже такт має період 30 нс, відповідно частоту зміни 1/30нс =33 МГц.
Інтерфейс софтконтролера
Рис. 2. Інтерфейсні сигнали софтконтролера з архітектурою Xilinx PicoBlaze
На даному рисунку показано два вхідні сигнали: clk і reset, та чотири вихідні сигнали(output + три сигнали для контрольного спостереження на симуляційній часовій діаграмі: out_port_view інформація, що виводиться на порт, port_id_view номер порту, write_strobe_view звернення до порту запису).
Симуляційна часова діаграма:
Рис. 3. Часова діаграма симуляційного виконання програмного коду
ЛР № 6
Імплементування та дослідження VHDL моделі софтконтролера XESS Gnome
Мета: опанування технікою створення і використання 4 бітового софтконтролера з архітектурою XESS Gnome.
Теоретичні відомості:
Рис. 1. Інтерфейсні сигнали софтконтролера з архітектурою Xilinx XESS Gnome
Праворуч розташовані два вхідні сигнали (clk, reset). Реалізовано не весь софтконтролер, а лише його ядро. Підсистеми введення/виведення немає. Її має додати студент. Всі вихідні сигнали розташовано праворуч. Присутність в назві сигналу слова view свідчить про те, що це є синал, трасу якого тз метою налаштування можна побачити на симуляційній часовій діаграмі. Перелічимо вихідні сигнали:
acc_view вихід акумулятора;
addr_view шина адреси;
data_view шина даних;
ir_view вихід регістра інструкцій;
pc_view вихід програмного лічильника;
сarry_view сигнал переносу;
sel_ram_view сигнал вибору памяті даних (регістрового файлу);
we_view сигнал дозволу запису до памяті даних.
Хід роботи:
Завантаження VHDL проекту XESS Gnome до САПР
Рис. 2. Завантажений до WebPack VHDL проект софтконтролера XESS Gnome
На рис. 2. подані проектні джерельні файли, що утворюють ієрархію проекту. В редакторі текстів показано фрагмент тестбенч файлу, що містить автоматично задані нульові початкові значення вхідних сигналів. Темним фоном виділено два рядки, що записані вручну і задають бажані зміни цих вхідних змінних, а саме: на 17 нс сигнал скиду приймає значення 0 і припиняє свою дію; через кожні 25 нс рівень такту інвертується; отже такт має період 50 нс, відповідно частоту зміни 1/50нс = 20 МГц.
Симуляційна часова діаграма виконання тестової програми
Рис. 3. Симуляційна діаграма виконання тестової програми ядром Gnome
На рис. 3. показано трасу зміни сигналу скиду, потім розташовано трасу такту. Далі йдуть траси всіх вихідних сигналів, що присутні в інтерфейсі ядра. Видно, що період такту складає 50 нс, частота тактування дорівнює 20МГц.
Функційна (RTL) схема софтконтролера
Рис. 4. Функційна (RTL) схема софтконтролера з архітектурою XESS Gnome
ЛР № 7
Імплементування та дослідження софтконтролера з шиною wishbone
Мета: опанування технікою створення і використання машин на основі стандартної системної шини wishbone.
Завдання:
В САПР WebPack імплементувати до ПЛІС Virtex-II проект софтконролера “Micro8”, побудований на системній шині wishbone. Результат проектування верифікувати методом часової симуляції. Необхідними змінами в VHDL коді моделі забезпечити візуалізацію с подальшим аналізом часових діаграм циклів, що відбуваються на шині wishbone. Скласти звіт з проведених лабораторних досліджень і захистити його.
Теоретичні відомості:
Передусім розглянемо систему машинних інструкцій того варіанту софтконтролера Micro8, що розглядається в лабораторній роботі. Зауважимо, що відомі декілька модифікацій софтконтролера. Перший варіант софтконтролера мав наступні інструкції: ADD (додавання), NOR (логічного додавання з запереченням), STA та JCC (Jump on Carry, збереження акумулятора в памяті і умовний перехід за ознакою переносу). It had a singlecarry bit which was reset by the JCC instruction. При цьому більш складні машинні інструкції інших контролерів вдається запрограмувати кодами софтконтролера Micro8.
Зараз всі машинні інструкції мають наступний двохбайтовий формат.
Рис. 1. Двохбайтовий формат інструкції процесора контролера Micro8
Старшу частину адреси (high) формують біти B2, B1 та B0 першого байту формату
машинної інструкції of the opcode, а молодші біти (low) адреси або безпосереднє значення (immediate value) задають біти від B7 до B0 другого байту формату. Отже, можна адресувати 2(3+8=11) × 1 byte = 2 KВ памяті, тоді як первинний варіант дозволяв адресування (шістьма бітами однобайтового формату інструкції) лише 26 = 64 байти памяті. До першого варіанту внесено наступні зміни:
абсолютної адреси):
Далі ми розглянемо тестову програму, що виконує Micro8. Подамо текст програми, що “зашита” до програмної памяті мікроконтролера Micro8 та імплементується разом з мікроконтролером:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity boot_rom is
port (WB_ADR_I : in std_logic_vector(5 downto 0);
WB_DAT_O : out std_logic_vector(7 downto 0);
WB_STB_I : in std_logic;
WB_ACK_O : out std_logic);
end entity boot_rom;
architecture basic of boot_rom is
constant width : integer := 8;
constant memsize : integer := 64;
type rom_array is array(0 to memsize-1) of std_logic_vector(width-1 downto 0);
constant rom_data : rom_array :=
( "10100000", "11111111", -- 0000 - a0 ff RESET NORX #$FF
"00100000", "11111111", -- 0002 - 20 ff POLL1 NORA #$FF
"00001111", "11111101", -- 0004 - 0f fd ADDA UARTCR
"00100000", "11111110", -- 0006 - 20 fe NORA #not(TXBE)
"11101111", "11111000", -- 0008 - ef f8 BNE POLL1
"00100000", "11111111", -- 000a - 20 ff NORA #$FF
"00010000", "00110000", -- 000c - 10 30 ADDA MSG,X
"01101000", "00000110", -- 000e - 68 06 BEQ POLL2
"10000000", "00000001", -- 0010 - 80 01 ADDX #1
"01001111", "11111100", -- 0012 - 4f fc STA UARTDR
"11101111", "11101100", -- 0014 - ef ec BNE POLL1
"00100000", "11111111", -- 0016 - 20 ff POLL2 NORA #$FF
"00001111", "11111101", -- 0018 - 0f fd ADDA UARTCR
"00100000", "11111101", -- 001a - 20 fd NORA #not(RXBF)
"11101111", "11111000", -- 001c - ef f8 BNE POLL2
"00100000", "11111111", -- 001e - 20 ff NORA #$FF
"00001111", "11111100", -- 0020 - 0f fc ADDA UARTDR
"01100111", "11011100", -- 0022 - 67 dc BRA RESET
"00000000", "00000000", -- 0024 - 00 00 fcb $00,$00
"00000000", "00000000", -- 0026 - 00 00 fcb $00,$00
"00000000", "00000000", -- 0028 - 00 00 fcb $00,$00
"00000000", "00000000", -- 002a - 00 00 fcb $00,$00
"00000000", "00000000", -- 002c - 00 00 fcb $00,$00
"00000000", "00000000", -- 002e - 00 00 fcb $00,$00
"01001000", "01100101", "01101100", -- 0030 - 48 65 6c MSG FCC "Hel"
"01101100", "01101111", "00100000", -- 0033 - 6c 6f 20 FCC "lo "
"01010111", "01101111", "01110010", -- 0036 - 57 6f 72 FCC "Wor"
"01101100", "01100100", -- 0039 - 6c 64 FCC "ld"
"00001010", "00001101", "00000000", -- 003b - 0a 0d 00 FCB LF,CR,NULL
"00000000", "00000000" -- 003e - 00 00 fcb null,null);
begin
WB_DAT_O <= rom_data(conv_integer(WB_ADR_I));
WB_ACK_O <= WB_STB_I;
end architecture basic;
Проект Micro8 містить асинхронний приймач-передавач UART, що дозволяє в нашому випадку виводити з мікроконтролера послідовним асинхронним кодом повідомлення Hello World. Rx позначає приймач UART, на вхід якого ми в симуляції задамо рівень rxbit = 1 (нема сигналу, тобто, пасивний стан входу). Послідовний код повідомлення hello World спостерігає на бітовому виході передавача Tx, який позначено через txbit. VHDL модель універсального асинхронного приймача-передавача містять файли miniUART.vhd (а це є локальний топ-файл вкладеного проекту), txunit.vhd, rxunit.vhd та utils.vhd. VHDL модель процесора містить файл cpu8bit2.vhd, а програму, що виконує процесор, містить файл bootrom.vhd. Зараз подамо копію вікна навігатора із завантаженим VHDL проектом Micro8. Цільова ПЛІС Xilinx Virtex2 (40 тис. вентилів).
Рис. 2. Вікно навігатора з завантаженим проектом Micro8
Рис. 3. Інтерфейс мікроконтролера Micro8
В симуляціє на вхід rxbit треба подати одиницю, на вхід Reset_n (низькоактивний скид) на короткий час (декілька періодів тактових імпульсів, але не на ціле число їхнє число) треба подати нуль. На вхід SysClk треба подати тактові імпульси (в нас частотою 10 МГц, період 100 нс). Вихідні сигнали треба спостерігати (на часових симуляційних діаграмах).
Маємо наступні вихідні сигнали:
· ram_address(16 : 0) є адресою зовнішньої щодо мікроконтролера памяті,
· led є вхідним сигналом зовнішнього світлодіода, що розташований на прототипній платі, засобами якою емулюють проект (в нас прототипної плати нема, сигнал можна не спостерігати),
· ram_cs є сигналом вибору кристала зовнішньої памяті,
· ram_wrin
· ram_wrun
· ram_data(7:0) є двохнаправленою шиною поміж ram та Micro8.
Подамо витяг із звіту про синтез проекту (мікростатистика витрат базових елементів ПЛІС). Звіт отримано по завершенню синтезу.
Рис. 4. Топологія мікроконтролера Micro8
Рис. 5. - Часова поведінка мікроконтролера Micro8 на початку виконання програми
Розглянемо VHDL модель памяті стартової програми, а ця модель ще містить код повідомлення Hello World, що виводиться на бітову лінію txbit передавача Tx вихідного каналу UART, що є в складі мікроконтролера.
Копію коду повідомлення Hello World подано нижче.
"01001000", "01100101", "01101100", -- 0030 - 48 65 6c MSG FCC "Hel"
"01101100", "01101111", "00100000", -- 0033 - 6c 6f 20 FCC "lo "
"01010111", "01101111", "01110010", -- 0036 - 57 6f 72 FCC "Wor"
"01101100", "01100100", -- 0039 - 6c 64 FCC "ld"
"00001010", "00001101", "00000000", -- 003b - 0a 0d 00 FCB LF,CR,NULL
"00000000", "00000000" -- 003e - 00 00 fcb null,null
Залишається пересвідчитися в тому, що поданий симуляційною часовою діаграмою код відповідає саме коду повідомленню Hello World.
Рис. 7. Cимуляційна часова діаграма виконання програми Hello World компютера Micro8
Надамо пояснення щодо часової діаграми для перших двох символів He повідомлення Hello World на виході txbit, яка від самого початку знаходиться в стані “1” (нема передачі в асинхронному послідовному інтерфейсі).
Рис. 8. Відповідний кодовій послідовності фрагмент симуляційної часової діаграми