
- •Задание на моделирование
- •Описания лабораторных работ. Лабораторная работа №1. Формирование памяти инструкций.
- •Задание на работу в лаборатории.
- •Лабораторная работа №2. Формирование устройства управления.
- •Задание на работу в лаборатории.
- •Лабораторная работа № 3. Формирование блока регистров.
- •Задание на работу в лаборатории.
- •Лабораторная работа № 4. Формирование блока арифметико-логического устройства (алу).
- •Задание на работу в лаборатории.
- •Лабораторная работа № 5. Построение простейшего risc-процессора.
- •Задание на работу в лаборатории.
Лабораторная работа № 3. Формирование блока регистров.
Цель работы. Получение представления о временном хранении данных в RISC-процессоре.
Постановка задачи. Исполнительное устройство нашего процессора содержит два блока: блок регистров, где операнды временно хранятся для производства операций над ними, и блок АЛУ, где собственно и производятся операции. Наша задача построить блок регистров, содержащий четыре 8-разрядных регистра. Один из этих регистров постоянно хранит «0», т.е. не может быть приемником информации, три других же предполагаются под общее назначение. На общую шину данных может поступать как значение непосредственного операнда источника, так и содержимое выхода сумматора АЛУ. Простейшей развязкой этих сигналов в нашем случае может служить блок элементов 2ИЛИ. У каждого регистра буфер записи может быть включен только в том случае, если этот регистр служит приемником операнда (позиции приемник или второй источник). Полученная структура представлена на рис.3.1.
Задание на работу в лаборатории.
Открыть свою папку в пакете Quartus II и создать в ней проект для лабораторной работы №3. Проекты всех лабораторных работ должны находиться в единой папке.
Открыть файл графического редактора и построить в нем схему по рис.3.1, используя модуль схемы 8-разрядного буферного регистра, созданный в лаб. работе № 1. Сохранить файл под именем проекта.
Откомпилировать файл и проверить с помощью временных диаграмм. На диаграммах установить интервалы: sync =40ns, ad1: ad1[1] =1 на интервале от 10 до 90ns, ad1[2] =1 на интервале от 90 до 170ns, data: data[1] =1 на интервале от 10 до 170ns, data[2] =1 на интервале от 90 до 170ns, data[3] =1 на интервале от 90 до 170ns, data[4] =1 на интервале от 10 до 90ns, s=0, ads1=0, ads2=0. Продемонстрировать диаграммы преподавателю. Создать библиотечный модуль файла.
Отчет должен содержать: схему блока – рис.3.1, временную диаграмму работы блока. Отчет представлять совместно с отчетом по лабораторным работам № 1 и №2.
Лабораторная работа № 4. Формирование блока арифметико-логического устройства (алу).
Цель работы. Получение представления о проведении арифметических операций в RISC-процессоре.
Постановка задачи. Последний из синтезируемых блоков – АЛУ. В нашем случае АЛУ состоит только из 8-разрядного сумматора. Программа, описывающая такой сумматор – прогр.4.3. Она строится на основе прогр.4.1, описывающей одноразрядный сумматор без входа переноса для младшего разряда и прогр.4.2, описывающей одноразрядный сумматор имеющий вход переноса для построения всех остальных разрядов. На входы сумматора могут поступать данные с выходов регистров соответствующего блока. Для выбора нужных операндов строим два блока из восьми мультиплексоров на четыре направления каждый. Для хранения бита переноса нужен триггер. Схема блока АЛУ представлена на рис.4.1.
Задание на работу в лаборатории.
Открыть свою папку в пакете Quartus II и создать в ней проект для лабораторной работы №4. Проекты всех лабораторных работ должны находиться в единой папке.
Открыть VHDL-файл и записать в него текст прогр.4.1 для одноразрядного сумматора без входа переноса. Сохранить файл под именем add1и установить его приоритет.
Откомпилировать файл add1. Открыть VHDL-файл и записать в него текст прогр.4.2 для одноразрядного сумматора. Сохранить файл под именем add11 и установить его приоритет.
Откомпилировать файл add11. Открыть VHDL-файл и записать в него текст прогр.4.3 для 8-разрядного сумматора. Сохранить файл под именем add8 и установить его приоритет.
Откомпилировать файл программы и проверить с помощью временных диаграмм. На диаграммах установить a=18 (a[1]=1, a[4]=1), b=14 (b[1]=1, b[2]=1, b[3]=1).
Открыть файл графического редактора и построить в нем схему рис.4.2, мультиплексор на 4 направления. Сохранить файл под именем mlt, установить его приоритет. Откомпилировать файл, создать библиотечный модуль.
Открыть файл графического редактора и построить в нем схему рис.4.3, блок из 8-ми мультиплексоров на 4 направления каждый. Сохранить файл под именем mult8, установить его приоритет. Откомпилировать файл, создать библиотечный модуль.
Открыть файл графического редактора и построить в нем схему рис.4.1, блок АЛУ, основанный на модулях мультиплексоров и сумматора. Сохранить файл под именем проекта, установить его приоритет.
Откомпилировать файл и проверить с помощью временных диаграмм. На диаграммах установить: clk=40ns, ads1[3..0] <=0010, ad2[3..0] <=0100, en_add=1, d1[7..0]<=00010010, d2[7..0] <=00001110, d0,d3 установить «0» во всех разрядах. Продемонстрировать диаграммы преподавателю. Создать библиотечный модуль файла.
Отчет должен содержать: схему блока – рис.4.1, программы для сумматора; временную диаграмму работы блока. Отчет представлять совместно с отчетами по лабораторным работам № 1, 2 и 3.
Прогр.4.1
library ieee;
use ieee.std_logic_1164.all;
entity add1 is
port(a1,b1:in BIT;c1,s1:out BIT);
end add1;
architecture struct_1 of add1 is
begin
s1<= ((a1 and (not b1)) or ((not a1) and b1));
c1<= a1 and b1;
end struct_1;
Прогр.4.2
library ieee;
use ieee.std_logic_1164.all;
entity add11 is
port(a2,b2,c1:in BIT;c2,s2:out BIT);
end add11;
architecture struct_1 of add11 is
begin
s2<=(a2 xor b2) xor c1;
c2<= (a2 and b2) or ((a2 xor b2)and c1);
end struct_1;
Прогр.4.3
library ieee;
use ieee.std_logic_1164.all;
port(a,b:in bit_vector(7 downto 0);
entity add8 is
s:out bit_vector(7 downto 0);
c : out bit);
end add8;
architecture structural of add8 is
component add1
port(a1,b1:in BIT;c1,s1:out BIT);
end component;
component add11
port (c1,a2,b2:in BIT; c2,s2:out BIT);
end component;
signal c_in: bit_vector(6 downto 0);
begin
p0: add1
port map(a1=>a(0),b1=>b(0),c1=>c_in(0),s1=>s(0));
p1: add11
port map(c1=>c_in(0),a2=>a(1),b2=>b(1),c2=>c_in(1),s2=>s(1));
p2: add11
port map(c1=>c_in(1),a2=>a(2),b2=>b(2),c2=>c_in(2),s2=>s(2));
p3: add11
port map(c1=>c_in(2),a2=>a(3),b2=>b(3),c2=>c_in(3),s2=>s(3));
p4: add11
port map(c1=>c_in(3),a2=>a(4),b2=>b(4),c2=>c_in(4),s2=>s(4));
p5: add11
port map(c1=>c_in(4),a2=>a(5),b2=>b(5),c2=>c_in(5),s2=>s(5));
p6: add11
port map(c1=>c_in(5),a2=>a(6),b2=>b(6),c2=>c_in(6),s2=>s(6));
p7: add11
port map(c1=>c_in(6),a2=>a(7),b2=>b(7),c2=>c,s2=>s(7));
end structural;