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




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

 

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

 

Примечание: «Х» – означает, что микрооперация выполняется независимо от значения на данном входе. Регистр имеет два входных 4-х разрядных канала X и Z для параллельного приема данных.

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

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

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

Выбор стиля описания (структурное, поведенческое, смешанное) и особенности его реализации (например, представление объекта проектирования в виде некоторой структуры, определение функций модулей, используемые типы переменных и сигналов и др.).

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

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

Рассмотрим в качестве примера порядок составления смешанного описания МФР с заданным набором микроопераций. Анализ задания показал, что при составлении функциональной схемы МФР с учетом небольшой разрядности регистра целесообразно выделить две части – комбинационную для реализации арифметической микрооперации, и последовательностную для реализации стандартных функций регистра – хранения, загрузки и сдвига.

Комбинационную часть целесообразно представить в виде трех модулей, а последовательностную в виде одного.

Назначение модулей:

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

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

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

Ввиду незначительной функциональной сложности для всех модулей будет использовано поведенческое описание. На рис.1 представлена функциональная схема МФР.

 

Рис. 1 Функциональная схема МФР

 

Примечание: на функциональной схеме (рис.1) добавлены некоторые обозначения, поясняющие специфику структурного VHDL описания (например, вместо понятия функциональный модуль, используемого в функциональной схеме, используется термин экземпляр компонента).

 

Пример составления 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. Подготовить проект с макроэлементом для загрузки в ПЛИС (см. рис.2).

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

 

 

 

Рис.2 Схема экспериментального исследования макроэлемента МФР



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-07-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: