Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Пример выполнения задания на разработку многофункционального регистра (МФР) на языке VHDL

Требуется разработать МФР, который выполняет следующий набор микроопераций:

 

Состояние входов Микрооперация
CLR EN Y0 Y1
  X X X Асинхронная установка в ‘0’
        Параллельная загрузка по каналу Z
        Сдвиг влево
        Арифметический сдвиг влево (дополнительный код)
        Параллельная загрузка количества ‘1’ в кодах, поступающих по каналам Х и Z
    X X Хранение

 

Примечание: Х – означает, что микрооперация выполняется независимо от значения на данном входе.

Для решения задачи будем использовать смешанный стиль составления VHDL описания, сочетающий элементы структурного и поведенческого стилей.

Структурное описание базируется на представлении объекта проектирования (проекта) в виде структуры – функциональных модулей и связей между ними. В общем случае описание функциональных модулей может быть также структурным. То есть каждый функциональный модуль может быть представл в виде структуры, состоящей из модулей более низкого уровня иерархии. При смешанном стиле используется поведенческое описание функциональных модулей с использованием параллельных и потоковых операторов. Поведенческое описание основано на представлении функционального модуля в виде «черного ящика», а составление такого описания называют макромоделированием.

Ключевым понятием для структурного описания в VHDL являются объекты COMPONENT (компонент). Каждый функциональный модуль проекта реализуется при помощи соответствующего компонента в виде экземпляра компонента. Компоненты и экземпляры компонентов объявляются в теле архитектуры при помощи карт портов (PORT MAP). Для соединения экземпляров компонентов в структуру используются внутренние сигналы (SIGNAL), также определяемые в теле архитектуры. Типы сигналов должны строго соответствовать типам, указанным при описании интерфейсов компонентов.

Рассмотрим порядок составления структурного описания, соответствующего следующей функциональной схеме МФР:

Назначение отдельных модулей:

1. Модуль (COMPONENT) POZ – служит для формирования на выходе значения суммы единиц во входном двоичном векторе. Для удобства последующей обработки значение суммы представляется с использованием типа integer.

2. Модуль (COMPONENT) SM – сумматор, для описания работы которого используются сигналы типа integer.

3. Модуль (COMPONENT) RG – служит для непосредственной реализации микроопераций.

 

Создаваемому описанию для наглядности сопоставим структурную схему, представленную на рисунке.

 

 

Пример составления VHDL описания смешанного типа для регистра с заданным перечнем микроопераций:

 

 

library IEEE;

use IEEE.std_logic_1164.all;

 

-- Описание интерфейса проекта;

 

entity MFR is

port (

x0: in BIT;

x1: in BIT;

x2: in BIT;

x3: in BIT;

z0: in BIT;

z1: in BIT;

z2: in BIT;

z3: in BIT;

SI: in BIT;

Y0: in BIT;

Y1: in BIT;

EN: in BIT;

CLK: in BIT;

CLR: in BIT;

q0: buffer BIT;

q1: buffer BIT;

q2: buffer BIT;

q3: buffer BIT

);

end MFR;

 

-- Описание архитектуры проекта;

 

architecture MFR_arch of MFR is

 

-- Объявление внутренних сигналов для связывания экземпляров компонентов;

 

signal s1: integer range 0 to 4;

signal s2: integer range 0 to 4;

signal s3: integer range 0 to 8;

 

-- Объявление компонента POZ, в котором с функциональным преобразованием совмещено преобразование типов;

 

COMPONENT POZ

PORT (

D0: in BIT;

D1: in BIT;

D2: in BIT;

D3: in BIT;

F: out integer range 0 to 4

);

end COMPONENT;

 

-- Объявление компонента SM;

 

COMPONENT SM

PORT (

A: in integer range 0 to 4;

B: in integer range 0 to 4;

S: out integer range 0 to 8

);

end COMPONENT;

 

-- Объявление компонента RG;

 

COMPONENT RG

PORT (

SI: in BIT;

SMM: in integer range 0 to 8;

D0: in BIT;

D1: in BIT;

D2: in BIT;

D3: in BIT;

Y0: in BIT;

Y1: in BIT;

EN: in BIT;

CLK: in BIT;

CLR: in BIT;

Q0: buffer BIT;

Q1: buffer BIT;

Q2: buffer BIT;

Q3: buffer BIT

);

end COMPONENT;

 

-- Объявление экземпляров компонентов и описание их связей;

 

Begin

-- Объявление экземпляров компонента POZ с именами DD1 и DD2;

 

DD1: POZ

PORT MAP (

D0 => x0,

D1 => x1,

D2 => x2,

D3 => x3,

F => s1

);

DD2: POZ

PORT MAP (

D0 => z0,

D1 => z1,

D2 => z2,

D3 => z3,

F => s2

);

 

-- Объявление экземплярa компонента SM;

DD3: SM

PORT MAP (

A => s1,

B=> s2,

S => s3

);

-- Объявление экземплярa компонента RG;

 

DD4: RG

PORT MAP (

SI => SI,

SMM => s3,

D0 => z0,

D1 => z1,

D2 => z2,

D3 => z3,

Y0 => Y0,

Y1 => Y1,

EN => EN,

CLK => CLK,

CLR => CLR,

Q0 => q0,

Q1 => q1,

Q2 => q2,

Q3 => q3

);

 

 

end MFR_arch;

-- Окончание структурной части описания проекта и начало поведенческого описания компонентов;

library IEEE;

use IEEE.std_logic_1164.all;

-- Описание интерфейса entity компонента в точности совпадает с описанием интерфейса при объявлении компонента;

 

entity POZ is

PORT (

D0: in BIT;

D1: in BIT;

D2: in BIT;

D3: in BIT;

F: out integer range 0 to 4

);

end POZ;

-- Поведенческое описание архитектуры компонента POZ;

architecture RTY_arch of POZ is

begin

process (D0, D1, D2, D3)

variable D: BIT_VECTOR (3 downto 0);

begin

D: = D3 & D2 & D1 & D0;

case D is

when " 0000" => F< = 0;

when " 0001" => F< = 1;

when " 0010" => F< = 1;

when " 0011" => F< = 2;

when " 0100" => F< = 1;

when " 0101" => F< = 2;

when " 0110" => F< = 2;

when " 0111" => F< = 3;

when " 1000" => F< = 1;

when " 1001" => F< = 2;

when " 1010" => F< = 2;

when " 1011" => F< = 3;

when " 1100" => F< = 2;

when " 1101" => F< = 3;

when " 1110" => F< = 3;

when " 1111" => F< = 4;

end case;

end process;

end RTY_arch;

 

-- Описание интерфейса и архитектуры компонента SM;

 

 

library IEEE;

use IEEE.std_logic_1164.all;

 

entity SM is

PORT (

A: in integer range 0 to 4;

B: in integer range 0 to 4;

S: out integer range 0 to 8

);

end SM;

 

architecture ADD_arch of SM is

begin

S < = A + B;

end ADD_arch;

 

 

-- Описание интерфейса и архитектуры компонента RG;

 

 

library IEEE;

use IEEE.std_logic_1164.all;

 

entity RG is

PORT (

SI: in BIT;

SMM: in integer range 0 to 8;

D0: in BIT;

D1: in BIT;

D2: in BIT;

D3: in BIT;

Y0: in BIT;

Y1: in BIT;

EN: in BIT;

CLK: in BIT;

CLR: in BIT;

Q0: buffer BIT;

Q1: buffer BIT;

Q2: buffer BIT;

Q3: buffer BIT

);

end RG;

 

architecture RG_arch of RG is

 

begin

process (clk, clr, en)

begin

if clr = '1' then

Q0 < = '0';

Q1 < = '0';

Q2 < = '0';

Q3 < = '0';

elsif EN = '0' then null;

elsif CLK'event and CLK = '1' then

if Y0 = '0' and Y1 = '0' then

Q0 < = D0;

Q1 < = D1;

Q2 < = D2;

Q3 < = D3;

elsif Y0 = '0' and Y1 = '1' then

Q0 < = SI;

Q1 < = Q0;

Q2 < = Q1;

Q3 < = Q2;

elsif Y0 = '1' and Y1 = '0' then

Q0 < = '0';

Q1 < = Q0;

Q2 < = Q1;

elsif Y0 = '1' and Y1 = '1' then

 

case SMM is

when 0 => Q0 < = '0'; Q1 < = '0'; Q2 < = '0'; Q3 < = '0';

when 1 => Q0 < = '1'; Q1 < = '0'; Q2 < = '0'; Q3 < = '0';

when 2 => Q0 < = '0'; Q1 < = '1'; Q2 < = '0'; Q3 < = '0';

when 3 => Q0 < = '1'; Q1 < = '1'; Q2 < = '0'; Q3 < = '0';

when 4 => Q0 < = '0'; Q1 < = '0'; Q2 < = '1'; Q3 < = '0';

when 5 => Q0 < = '1'; Q1 < = '0'; Q2 < = '1'; Q3 < = '0';

when 6 => Q0 < = '0'; Q1 < = '1'; Q2 < = '1'; Q3 < = '0';

when 7 => Q0 < = '1'; Q1 < = '1'; Q2 < = '1'; Q3 < = '0';

when 8 => Q0 < = '0'; Q1 < = '0'; Q2 < = '0'; Q3 < = '1';

end case SMM;

 

--with SMM select

--Q0 < = '1' when 1 | 3 | 5 |7, '0' when others;

--with SM select

--Q1 < = '1' when 2 | 3 | 6 | 7, '0' when others;

--with SM select

--Q2 < = '1' when 4 | 5 | 6 | 7, '0' when others;

--with SM select

--Q3 < = '1' when 8, '0' when others

 

end if;

end if;

end process;

end RG_arch;

 

Порядок выполнения работы

 

1. В соответствии с порядком создания проекта и макроэлемента с VHDL описанием, изложенным в пособии «Инструментальные средства …..» сформировать VHDL шаблон регистра.

2. Изучив пример составления смешанного VHDL описания регистра составить описание в соответствии с индивидуальным заданием.

3. Заменить шаблон созданным описанием регистра.

4. Выполнить последовательно проверку синтаксиса описания, синтез и создание макроэлемента.

5. Выполнить функциональное моделирование макроэлемента, руководствуясь следующим требованием к тестовой временной диаграмме:

Выполняя моделирование необходимо показать, что при выполнении каждой микрооперации, каждый разряд регистра переходит как из состояния «1» в состояние «0», так и наоборот. Очевидно, что при таком требовании каждая микрооперация в тесте может выполняться несколько раз. Микрооперации в тесте могут выполняться в любой последовательности. При невозможности применения этого правила к какой-либо микрооперации, вследствие ее специфики, следует привести соответствующее объяснение.

6. Подготовить проект с макроэлементом для загрузки в ПЛИС (см. рисунок).

7. Выполнить загрузку проекта в ПЛИС и продемонстрировать работу регистра на стенде.

 

 

<== предыдущая лекция | следующая лекция ==>
Система критериев вредного для здоровья и развития детей контента | Уголовное право. Вопросы для подготовки к государственному экзамену по Теории государства и права




© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.