Разработка и функционально-временное моделирование средствами САПР QUARTUS II блока регистров общего назначения и его схемотехнического окружения

  • Вид работы:
    Практическое задание
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    108,75 Кб
  • Опубликовано:
    2014-10-31
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка и функционально-временное моделирование средствами САПР QUARTUS II блока регистров общего назначения и его схемотехнического окружения

МИНОБРНАУКИ РОССИИ

Федеральное государственное автономное образовательное учреждение высшего профессионального образования

«ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

ИНЖЕНЕРНАЯ ТЕХНОЛОГИЧЕСКАЯ АКАДЕМИЯ В Г. ТАГАНРОГЕ

(ТРТИ Южного федерального университета)

Факультет АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

Кафедра ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ





ОТЧЕТ

Лабораторная работа №4

«Разработка и функционально-временное моделирование средствами САПР QUARTUS II блока регистров общего назначения и его схемотехнического окружения»

по учебной дисциплине: «Микропроцессорные системы»

Проверил:

к.т.н., доцент, Пьявченко Алексей Олегович

Выполнил:

студент гр. А-41, Фетисов А.В.

Таганрог, 2014 г.

Цель работы:

Изучение основ построения с применением VHDL и методики отладки в САПР Quartus II регистровых запоминающих устройств общего назначения, обладающих требуемыми параметрами и входящих в состав вычислительных блоков микропроцессоров.

Постановка задачи.

В соответствии с вариантом задания разработать в базисе ПЛИС Altera VHDL-описание модели регистрового запоминающего устройства общего назначения, обладающего требуемыми параметрами. Устройство входит в состав проектируемого в рамках цикла лабораторных работ вычислительного блока микропроцессора. При разработке компонентов и всего РЗУ в целом допускается смешанное VHDL-описание проекта, т.е. как структурное, так и поведенческое описание.

Результаты разработки проекта РЗУ на VHDL оформить в виде библиотечного компонента (пакета).

В качестве исходных данных студенту перед проектированием задаются:

Ø n - число разрядов регистра общего назначения из состава РЗУ;

Ø  М - количество n-разрядных регистровых ячеек общего назначения (РОН), составляющих РЗУ;

Ø  Pin - число входных информационных шин (портов) РЗУ, используемых для записи данных в его внутренние n-разрядные ячейки;

Ø  SHin - число установленных по входам РЗУ параллельных многоразрядных сдвигателей (не превышает числа входных портов);

Ø  n1 - количество сдвигателей в схеме на входах или выходах блока РОН;

Ø  n2 - число разрядов, на которые сдвигатель может сдвинуть двоичный код, установленный на его входе. Причем в общем случае n2 может принимать числовое значение от 0 до n (разрядность информационной шины порта РЗУ);

Ø  Us - направление сдвига, если последний разрешен, определяемое как R/L/U (вправо/влево/универсально (или влево/ или вправо));

Ø  Ts - тип сдвига A/Ma/L.1/L.0/C/CC (арифметический (A), модифицированный арифметический (Ma), логический с установкой 1 (L.1) или 0 (L.0) в освобождающиеся разряды, циклический (С), циклический через признак С (CC));

Ø  Pout - число выходных информационных шин (портов) РЗУ, используемых для считывания данных из его внутренних n-разрядных ячеек;

Ø  SHout - число установленных по выходам РЗУ параллельных многоразрядных сдвигателей (не превышает числа входных портов);

Ø  OEZ - наличие буферов с Z-состоянием по выходу.

Задание.

VHDL код РОН 32 на 8:

--РОН 6 регистров ieee; ieee.std_logic_1164.all; ieee.std_logic_arith.all; ieee.std_logic_signed.all;

entity RonParam is (: natural := 7

);( AI: in std_logic_vector (nR downto 0); -- входная данных шина A: in std_logic_vector (nR downto 0); -- входная данных шина B_AI: in std_logic_vector (4 downto 0); -- адрес записи А_BI: in std_logic_vector (4 downto 0); -- адрес записи В_AO: in std_logic_vector (4 downto 0); -- адрес чтения А_BO: in std_logic_vector (4 downto 0); -- адрес чтения В_AI: in std_ulogic; -- разрешение записи А_BI: in std_ulogic; -- разрешение записи В_AO,EN_BO: in std_ulogic; -- разрешение чтения,RST: in std_ulogic;: out std_logic_vector (nR downto 0); -- выходная шина А: out std_logic_vector (nR downto 0) -- выходная шина В

); RonParam; RON of RonParam is TOutReg is array (0 to 31) of std_logic_vector(nR downto 0); WR_RgB: std_logic_vector(31 downto 0); -- выбор регистра для записи по ВWR_RgA: std_logic_vector(31 downto 0); -- выбор регистра для записи по АDRg:TOutReg; -- регистр для считывания данных

-Выбор регистра для записи в РОН по шине BI : process (ADR_BI, WR_BI)WR_BI = '1' thenADR_BI (4 downto 0) is "00000" => WR_RgB <= X"00000001";"00001" => WR_RgB <= X"00000002";"00010" => WR_RgB <= X"00000004";"00011" => WR_RgB <= X"00000008";"00100" => WR_RgB <= X"00000010";"00101" => WR_RgB <= X"00000020";"00110" => WR_RgB <= X"00000040";"00111" => WR_RgB <= X"00000080";"01000" => WR_RgB <= X"00000100";"01001" => WR_RgB <= X"00000200";"01010" => WR_RgB <= X"00000400";"01011" => WR_RgB <= X"00000800";"01100" => WR_RgB <= X"00001000";"01101" => WR_RgB <= X"00002000";"01110" => WR_RgB <= X"00004000";"01111" => WR_RgB <= X"00008000";"10000" => WR_RgB <= X"00010000";"10001" => WR_RgB <= X"00020000";"10010" => WR_RgB <= X"00040000";"10011" => WR_RgB <= X"00080000";"10100" => WR_RgB <= X"00100000";"10101" => WR_RgB <= X"00200000";"10110" => WR_RgB <= X"00400000";"10111" => WR_RgB <= X"00800000";"11000" => WR_RgB <= X"01000000";"11001" => WR_RgB <= X"02000000";"11010" => WR_RgB <= X"04000000";"11011" => WR_RgB <= X"08000000";"11100" => WR_RgB <= X"10000000";"11101" => WR_RgB <= X"20000000";"11110" => WR_RgB <= X"40000000";"11111" => WR_RgB <= X"80000000";others => WR_RgB <= (others => '0'); -- иначе 0case;WR_RgB <= (others => '0'); -- иначе 0if;process DCB;

- Реализация блока регистров общего назначения и

- организация записи в выбранную ячейку : process (CLK,BI,AI,RST) RST='1' then j in 0 to 31 loop (j)<=(others=>'0'); loop;

-Изменим текущие значения регистров CLK='1' and CLK'event then j in 0 to 31 loop -- Запись по AI более приоритетная (WR_RgA(j)='1') then DRg(j)<=AI; (WR_RgB(j)='1') then DRg(j)<=BI; if; loop; if; process;

- выбор источника и подключение его к шине АО _AO: process (EN_AO,ADR_AO,DRg)EN_AO = '1' thenADR_AO (4 downto 0) is"00000" => AO <= DRg(0);"00001" => AO <= DRg(1);"00010" => AO <= DRg(2);"00011" => AO <= DRg(3);"00100" => AO <= DRg(4);"00101" => AO <= DRg(5);"00110" => AO <= DRg(6);"00111" => AO <= DRg(7);"01000" => AO <= DRg(8);"01001" => AO <= DRg(9);"01010" => AO <= DRg(10);"01011" => AO <= DRg(11);"01100" => AO <= DRg(12);"01101" => AO <= DRg(13);"01110" => AO <= DRg(14);"01111" => AO <= DRg(15);"10000" => AO <= DRg(16);"10001" => AO <= DRg(17);"10010" => AO <= DRg(18);"10011" => AO <= DRg(19);"10100" => AO <= DRg(20);"10101" => AO <= DRg(21);"10110" => AO <= DRg(22);"10111" => AO <= DRg(23);"11000" => AO <= DRg(24);"11001" => AO <= DRg(25);"11010" => AO <= DRg(26);"11011" => AO <= DRg(27);"11100" => AO <= DRg(28);"11101" => AO <= DRg(29);"11110" => AO <= DRg(30);"11111" => AO <= DRg(31); others => AO <= (others => '0'); case;AO <= (others => '0'); if;process RD_AO;

- выбор источника и подключение его к шине ВО _BO: process (EN_BO,ADR_BO,DRg)EN_BO = '1' thenADR_BO (4 downto 0) is"00000" => BO <= DRg(0);"00001" => BO <= DRg(1);"00010" => BO <= DRg(2);"00011" => BO <= DRg(3);"00100" => BO <= DRg(4);"00101" => BO <= DRg(5);"00110" => BO <= DRg(6);"00111" => BO <= DRg(7);"01000" => BO <= DRg(8);"01001" => BO <= DRg(9);"01010" => BO <= DRg(10);"01011" => BO <= DRg(11);"01100" => BO <= DRg(12);"01101" => BO <= DRg(13);"01110" => BO <= DRg(14);"01111" => BO <= DRg(15);"10000" => BO <= DRg(16);"10001" => BO <= DRg(17);"10010" => BO <= DRg(18);"10011" => BO <= DRg(19);"10100" => BO <= DRg(20);"10101" => BO <= DRg(21);"10110" => BO <= DRg(22);"10111" => BO <= DRg(23);"11000" => BO <= DRg(24);"11001" => BO <= DRg(25);"11010" => BO <= DRg(26);"11011" => BO <= DRg(27);"11100" => BO <= DRg(28);"11101" => BO <= DRg(29);"11110" => BO <= DRg(30);"11111" => BO <= DRg(31); others => BO <= (others => '0'); case;BO <= (others => '0');if;process RD_BO;RON;

Получившийся параметрический блок РОН 32 на 8:

Результат функционирования РОН:

Схема входного арифметического универсального циклического сдвигателя на 4 разрядов:

библиотека запоминающее устройство микропроцессор

VHDL код входного свдигателя:

library ieee;

use ieee.std_logic_1164.all;ieee.std_logic_arith.all; ieee.std_logic_signed.all;Shift_OUT is(FI: in std_logic_vector (8 downto 6);: in std_logic_vector (1 downto 0);: in std_logic_vector (7 downto 0);: in std_logic_vector (2 downto 0);: out std_logic_vector (7 downto 0)

);Shift_OUT;SHIFT of Shift_OUT is: process(FI, MI, DI, NI) MF : std_logic_vector (4 downto 0);BUF : std_logic_vector (7 downto 0);

begin:= MI & FI;

- сдвиг вправоMF = "01101" thenNI is"001" => BUF := DI(0) & DI(7 downto 1);"010" => BUF := DI(1 downto 0) & DI(7 downto 2);"011" => BUF := DI(2 downto 0) & DI(7 downto 3);"100" => BUF := DI(3 downto 0) & DI(7 downto 4);others => BUF := DI; case;

- сдвиг влевоMF = "01111" thenNI is"001" => BUF := DI(6 downto 0) & DI(7);"010" => BUF := DI(5 downto 0) & DI(7 downto 6);"011" => BUF := DI(4 downto 0) & DI(7 downto 5);"100" => BUF := DI(3 downto 0) & DI(7 downto 4);others => BUF := DI; case;:= DI;if;<= BUF;process;SHIFT; library ieee;ieee.std_logic_1164.all;ieee.std_logic_arith.all; ieee.std_logic_signed.all;Shift_OUT is(FI: in std_logic_vector (8 downto 6);: in std_logic_vector (1 downto 0);: in std_logic_vector (7 downto 0);: in std_logic_vector (2 downto 0);: out std_logic_vector (7 downto 0)

begin:= MI & FI;

- сдвиг вправоMF = "01101" thenNI is"001" => BUF := DI(0) & DI(7 downto 1);"010" => BUF := DI(1 downto 0) & DI(7 downto 2);"011" => BUF := DI(2 downto 0) & DI(7 downto 3);"100" => BUF := DI(3 downto 0) & DI(7 downto 4);others => BUF := DI; case;

- сдвиг влевоMF = "01111" thenNI is"001" => BUF := DI(6 downto 0) & DI(7);"010" => BUF := DI(5 downto 0) & DI(7 downto 6);"011" => BUF := DI(4 downto 0) & DI(7 downto 5);"100" => BUF := DI(3 downto 0) & DI(7 downto 4);others => BUF := DI; case;:= DI;if;<= BUF;process;SHIFT;

Схема РЗУ:

VHDL код РЗУ:

-- Copyright (C) 1991-2010 Altera Corporation

- Your use of Altera Corporation's design tools, logic functions

- and other software and tools, and its AMPP partner logic

- functions, and any output files from any of the foregoing

- (including device programming or simulation files), and any

- associated documentation or information are expressly subject

- to the terms and conditions of the Altera Program License

- Subscription Agreement, Altera MegaCore Function License

- Agreement, or other applicable license agreement, including,

- without limitation, that your use is for the sole purpose of

- programming logic devices manufactured by Altera and sold by

- Altera or its authorized distributors. Please refer to the

- applicable agreement for further details.

- PROGRAM"Quartus II"

- CREATED"Tue May 20 15:35:09 2014"ieee;ieee.std_logic_1164.all; work;rzu IS

(: IN STD_LOGIC;: IN STD_LOGIC;_AI : IN STD_LOGIC;_BI : IN STD_LOGIC;_AO : IN STD_LOGIC;_BO : IN STD_LOGIC;_AI : IN STD_LOGIC_VECTOR(4 DOWNTO 0);_AO : IN STD_LOGIC_VECTOR(4 DOWNTO 0);_BI : IN STD_LOGIC_VECTOR(4 DOWNTO 0);_BO : IN STD_LOGIC_VECTOR(4 DOWNTO 0);: IN STD_LOGIC_VECTOR(7 DOWNTO 0);: IN STD_LOGIC_VECTOR(7 DOWNTO 0);: IN STD_LOGIC_VECTOR(8 DOWNTO 6);: IN STD_LOGIC_VECTOR(1 DOWNTO 0);: IN STD_LOGIC_VECTOR(2 DOWNTO 0);: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)

);rzu;bdf_type OF rzu IS ronparam(nR : INTEGER

);(WR_AI : IN STD_LOGIC;_BI : IN STD_LOGIC;_AO : IN STD_LOGIC;_BO : IN STD_LOGIC;: IN STD_LOGIC;: IN STD_LOGIC;_AI : IN STD_LOGIC_VECTOR(4 DOWNTO 0);_AO : IN STD_LOGIC_VECTOR(4 DOWNTO 0);_BI : IN STD_LOGIC_VECTOR(4 DOWNTO 0);_BO : IN STD_LOGIC_VECTOR(4 DOWNTO 0);: IN STD_LOGIC_VECTOR(7 DOWNTO 0);: IN STD_LOGIC_VECTOR(7 DOWNTO 0);: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)

);COMPONENT;shift_out(DI : IN STD_LOGIC_VECTOR(7 DOWNTO 0);: IN STD_LOGIC_VECTOR(8 DOWNTO 6);: IN STD_LOGIC_VECTOR(1 DOWNTO 0);: IN STD_LOGIC_VECTOR(2 DOWNTO 0);: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)

);COMPONENT;shift_out_a(DI : IN STD_LOGIC_VECTOR(7 DOWNTO 0);: IN STD_LOGIC_VECTOR(8 DOWNTO 6);: IN STD_LOGIC_VECTOR(1 DOWNTO 0);: IN STD_LOGIC_VECTOR(2 DOWNTO 0);: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)

);COMPONENT;: STD_LOGIC_VECTOR(7 DOWNTO 0);: STD_LOGIC_VECTOR(7 DOWNTO 0);v_inst : ronparamMAP(nR => 7

)MAP(WR_AI => WR_AI,_BI => WR_BI,_AO => EN_AO,_BO => EN_BO,=> CLK,=> RST,_AI => ADR_AI,_AO => ADR_AO,_BI => ADR_BI,_BO => ADR_BO,=> AI,=> BI,=> Aout,=> Bout);v_inst1 : shift_outMAP(DI => Bout,=> I,=> M,=> N,=> BO);v_inst2 : shift_out_aMAP(DI => Aout,=> I,=> M,=> N,=> AO); bdf_type;

Вывод

В ходе выполнения данной лабораторной работы, я с применением VHDL и методики отладки в САПР Quartus II сумел построить параметрический блок РОН, входной и выходной сдвигатели. Затем собрал РЗУ используя написанные библиотеки (РОН, сдвигатели).

Похожие работы на - Разработка и функционально-временное моделирование средствами САПР QUARTUS II блока регистров общего назначения и его схемотехнического окружения

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!