Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Оператор реализации компонента

Поиск

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

 

instance_name: component_name

[ generic map (

generic_name => expression

{, generic_name => expression }

) ]

port map (

[ port_name => ] expression

{, [ port_name => ] expression }

);

где instance_name - имя реализации компонента типа component_name. Необязательный элемент generic map назначает иные, чем по умолчанию, общие значения. Каждый элемент generic_name является именем generic, точно так же, как указывалось в соответствующем операторе объявления компонента. Каждое выражение expression представляет соответствующее значение, port map назначает порты для связей компонента. Каждое имя port_name является именем порта, точно так же, как указывалось в соответствующем операторе объявления компонента. Каждое выражение expression представляет значение сигнала.

FPGA Express использует следующие два правила для решения, какой объект и архитектуру ассоциировать с реализацией компонента:

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

2. Если объект VHDL имеет более, чем одну архитектуру, то для каждой компонентной реализации, соответствующей объявлению компонента, используется последняя введенная архитектура. Файл.mra определяет последнюю проанализированную архитектуру.

Размещение связей портов

Вы можете определить связи портов в операторах компонентной реализации как при помощи нужного поименования, так и при помощи соответствующего расположения. При использовании именованной записи конструкция port_name => идентифицирует определенные порты компонента. При использовании позиционной записи выражения для портов компонента просто перечисляются в порядке объявления. В примере 15 показана именованная и позиционная запись оператора компонентной реализации для U5.

 

Пример 15. Эквивалентные именованная и позиционные записи

...

U5: or2 port map (O => n6, I1 => n3, I2 => n1);

-- Именованная запись

U5: or2 port map (n3, n1, n6);

-- Позиционная запись

...

Примечание. Когда вы используете позиционную запись, то реализуемые выражения (сигналы) для порта должны следовать в том же порядке, как при объявлении портов.

В примере 16 показано структурное описание (список цепей) для объекта COUNTER3 из примера 9.

 

Пример 16. Структурное описание трехбитового счетчика

architecture STRUCTURE of COUNTER3 is

component DFF

59 60  
port(CLK, DATA: in BIT;

Q: out BIT);

end component;

component AND2

port(I1, I2: in BIT;

O: out BIT);

end component;

component OR2

port(I1, I2: in BIT;

O: out BIT);

end component;

component NAND2

port(I1, I2: in BIT;

O: out BIT);

end component;

component XNOR2

port(I1, I2: in BIT;

O: out BIT);

end component;

component INV

port(I: in BIT;

O: out BIT);

end component;

 

signal N1, N2, N3, N4, N5, N6, N7, N8, N9: BIT;

 

begin

u1: DFF port map(CLK, N1, N2);

u2: DFF port map(CLK, N5, N3);

u3: DFF port map(CLK, N9, N4);

u4: INV port map(N2, N1);

u5: OR2 port map(N3, N1, N6);

u6: NAND2 port map(N1, N3, N7);

u7: NAND2 port map(N6, N7, N5);

u8: XNOR2 port map(N8, N4, N9);

u9: NAND2 port map(N2, N3, N8);

COUNT(0) <= N2;

COUNT(1) <= N3;

COUNT(2) <= N4;

end STRUCTURE;

4. Ход работы

 

4.1. С помощью любого текстового редактора и на основе объекта и архитектуры создать простейшее описание вашего цифрового устройства в соответствии с вариантом и использовать его свойства как часть функциональных свойств более сложного дискретного устройства. Дополнительно следует спроектировать одну общую функцию или процедуру для вложенного и конечного устройства в соответствии с заданием варианта. Для предупреждения ошибок необходимо, чтобы файл имел расширение *.vhd.

4.2. Создать проект в отладчике FPGA Express и подключить к нему набранный файл.

4.3. После корректного подключения файла описания создать с помощью FPGA Express отчет по вашему проекту.

4.4. Синтезировать модель вашего цифрового устройства.

4.5. Оптимизировать созданную модель с помощью FPGA Express.

4.6. Вывести список цепей оптимального варианта вашего устройства.

4.7 Создать проект в системе моделирования ModelSim и подключить к нему набранный и отлаженный в FPGA Express файл.

4.8 После корректного подключения файла описания сделать полный анализ вашего устройства в соответствии с вашим вариантом.

 

5. Указания по оформлению отчета и Контрольные вопросы

 

5.1. Отчет по лабораторной работе должен содержать:

- наименование;

- цель работы;

- используемое оборудование;

- теоретическую часть;

- описание последовательности действий при отладке и моделировании вашего варианта;

-

61 62
распечатку временных диаграмм и таблиц истинности по проекту;

- распечатку вашего исходного файла;

- выводы по проделанной работе.

 

5.2. Контрольные вопросы к лабораторной работе

 

1. Каковы принципы структурного проектирования в VHDL?

2. Каковы недостатки и достоинства данного вида проектирования?

3. Что представляет собой компонента в языке VHDL?


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

 

ПАКЕТ И ПРОЦЕСС В VHDL

 

1. Общее описание работы

 

1.1. Цель работы – изучение конструкций языка VHDL "пакета" и "процесса".

 

1.2. Содержание работы

 

Лабораторная работа состоит из домашнего и лабораторного заданий. Домашнее задание заключается в повторении ранее изученного материала. Лабораторное задание - в создании простейшего устройства на основе объекта и его архитектуры, причем архитектура должна реализовывать функциональные свойства объекта в виде процесса, а составляющие компоненты более сложного устройства необходимо описать в виде пакета. Кроме этого, созданное описание необходимо проверить с помощью отладчика FPGA EXPRESS и осуществить полный анализ функциональных свойств проектируемого устройства с помощью системы ModelSm.

 

1.3. Используемое оборудование

 

Для выполнения лабораторной работы используется ПЭВМ типа IBM PC, цветной монитор с графическим адаптером VGA и выше, принтер.

 

2. Домашнее задание и методические указания по его выполнению

 

По методическому руководству и учебному пособию ознакомиться с основными понятиями процесса и пакета.

 

63 64


3. Теоретическая часть

Использование блока объявлений

Оператор use позволяет объекту использовать объявления из блока. Поддерживаемый синтаксис этого оператора следующий:

 

use LIBRARY_NAME. PACKAGE_NAME. ALL;

 

где LIBRARY_NAME - имя библиотеки VHDL, а PACKAGE_NAME - имя включаемого блока объявлений. Оператор use обычно является первым в файле блока объявлений или спецификации объекта. Synopsys не поддерживает разные блоки объявлений с одинаковыми именами, если они существуют в различных библиотеках. Никакие два блока не могут иметь одинаковое имя.

Структура блока объявлений

Блок объявлений состоит из двух частей - объявления и тела:

объявление блока.

Хранит общую информацию, включая объявления констант, типов и подпрограмм.

тело блока.

Хранит частную информацию, включая локальные типы и исполнения подпрограмм (тела).

Примечание. Если объявление блока содержит объявления подпрограмм, то соответствующее тело блока должно определять тела подпрограмм.

 

Объявления блока

Объявления блока содержат информацию, необходимую одному или более объектам проекта. Эта информация включает объявления типов данных сигналов, подпрограмм и компонентов.

Примечание. Сигналы, объявленные в блоках, не могут совместно использоваться разными объектами. Если два объекта используют сигнал из данного блока, то каждый из них должен создавать свою собственную копию этого сигнала.

Хотя можно объявить всю эту информацию явно в каждом проектном объекте или системной архитектуре, часто более легким является объявление системной информации в отдельном блоке объявлений. Каждый объект системы может впоследствии использовать системный блок объявлений.

Объявление блока имеет следующий синтаксис:

 

package package_name is

{ package_declarative_item }

end [ package_name ];

 

где package_name - имя данного блока объявлений. Элемент package_declarative_item может быть любым из следующих:

предложением use (для включения других блоков)

объявлением типа;

объявлением подтипа;

объявлением константы;

объявлением сигнала;

объявлением подпрограммы;

объявлением компонента.

В примере 17 приведены некоторые объявления блоков.

 

Пример 17. Простые объявления блока

...

package EXAMPLE is

 

type BYTE is range 0 to 255;

subtype NIBBLE is BYTE range 0 to 15;

 

constant BYTE_FF: BYTE:= 255;

 

signal ADDEND: NIBBLE;

 

component BYTE_ADDER

port(A, B: in BYTE;

C: out BYTE;

OVERFLOW: out BOOLEAN);

65 66
end component;

function MY_FUNCTION (A: in BYTE)return BYTE;

 

end EXAMPLE;

...

 

Для использования приведенного выше примера объявлений добавьте оператор use в начале описания вашего проекта следующим образом:

 

use WORK.EXAMPLE.ALL;

 

entity...

 

architecture...

 

Прочие примеры блоков и их объявлений приведены в блоках объявлений, обеспечиваемых Synopsys.

 

Тела блока объявлений

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

Тело блока объявлений имеет следующий синтаксис:

 

package body package_name is

{ package_body_declarative_item }

end [ package_name ];

 

где package_name - имя соответствующего блока объявлений. Элемент package_body_declarative_item может быть любым из следующих:

предложением use;

объявлением подпрограммы;

тело подпрограммы;

объявлением типа;

объявлением подтипа;

объявлением константы.

 

Операторы process

Оператор process содержит упорядоченный набор последовательных операторов. Синтаксис этого оператора следующий:

 

[ label: ] process [ (sensitivity_list) ]

{ process_declarative_item }

begin

{ sequential_statement }

end process [ label ];

 

Необязательная метка label именует процесс. Список чувствительности (sensitivity_list) является списком всех сигналов (включая порты), читаемых процессом, в следующем формате:

 

signal_name {, signal_name}

 

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

Примечание. IEEE VHDL не разрешает наличие списка чувствительности, если процесс включает оператор wait.

process_declarative_item объявляет подпрограммы, типы, константы и переменные, локальные для процесса. Эти пункты могут быть любыми из следующих:

предложением use;

объявлением подпрограммы;

67 68
тело подпрограммы;

объявлением типа;

объявлением подтипа;

объявлением константы;

объявлением переменной.

Концептуально поведение процесса определяется последовательностью его операторов. После того, как выполнен последний оператор в процессе, работа программы продолжается с первого оператора процесса. Единственное исключение существует при моделировании, если процесс имеет список чувствительности, то он приостанавливается (после выполнения последнего оператора), пока не произойдет изменение одного из сигналов из списка чувствительности. Если процесс имеет один или более операторов wait (и, следовательно, у него нет списка чувствительности), то он приостанавливается на первом из операторов wait, условие ожидания которого является ложным.

Аппаратное обеспечение, синтезируемое для процесса, является либо комбинационным (не тактируемым), либо последовательным (тактируемым). Если процесс включает операторы wait или if signal ’event, то его схема содержит последовательные компоненты.

Примечание. Операторы process обеспечивают натуральные средства для описания концептуально последовательных алгоритмов. Если значения, вычисляемые в процессе, являются безусловно параллельными, рассмотрите использование параллельных операторов присваивания сигналам.

Пример комбинационного процесса

В примере 18 показан процесс, который реализует простой счетчик по модулю 10. Рассматриваемый процесс чувствителен (читает) к двум сигналам: CLEAR и IN_COUNT. Он управляет одним сигналом, OUT_COUNT. Если CLEAR равен ’1’ или IN_COUNT равен 9, то OUT_COUNT устанавливается в ноль. В противном случае OUT_COUNT устанавливается на единицу больше, чем IN_COUNT.

 

Пример 18. Процесс для счетчика по модулю 10

...

entity COUNTER is

port (CLEAR: in BIT;

IN_COUNT: in INTEGER range 0 to 9;

OUT_COUNT: out INTEGER range 0 to 9);

end COUNTER;

 

architecture EXAMPLE of COUNTER is

begin

process(IN_COUNT, CLEAR)

begin

if (CLEAR = ’1’ or IN_COUNT = 9) then

OUT_COUNT <= 0;

else

OUT_COUNT <= IN_COUNT + 1;

end if;

end process;

end EXAMPLE;

...

 

Пример последовательного процесса

Поскольку часто процесс не содержит операторов wait, то он синтезируется с помощью комбинационной логики. Альтернативной реализацией счетчика является сохранение его значения внутри процесса с помощью оператора wait. В примере 19 показана реализация счетчика в виде последовательного (тактируемого) процесса. По каждому переходу CLOCK из 0 в 1, если CLEAR равен ’1’ или COUNT равен 9, COUNT устанавливается в ноль; в противном случае COUNT инкрементируется на 1.

 

Пример 19. Процесс для счетчика по модулю 10 с оператором wait

...

entity COUNTER is

port (CLEAR: in BIT;

CLOCK: in BIT;

69 70
COUNT: buffer INTEGER range 0 to 9);

end COUNTER;

 

architecture EXAMPLE of COUNTER is

begin

process

begin

wait until CLOCK’event and CLOCK = ’1’;

 

if (CLEAR = ’1’ or COUNT >= 9) then

COUNT <= 0;

else

COUNT <= COUNT + 1;

end if;

end process;

end EXAMPLE;

 

В примере 19 значение переменной COUNT хранится в четырех триггерах. Эти триггера генерируются вследствие того, что COUNT может быть прочитан до того, как установлен, поэтому его значение должно поставляться из предыдущего синхроцикла.

Управляемые сигналы

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

В примере 20 показано два буфера с третьим состоянием, управляющих одним и тем же сигналом (SIG).

 

Пример 20. Сигнал с несколькими драйверами

...

A_OUT <= A when ENABLE_A else ’Z’;

B_OUT <= B when ENABLE_B else ’Z’;

 

process(A_OUT)

begin

SIG <= A_OUT;

end process;

 

process(B_OUT)

begin

SIG <= B_OUT;

end process;

...

 

Функции шинного разрешения присваивают значение сигналу с несколькими драйверами.

 

4. Ход работы

 

4.1. С помощью любого текстового редактора и на основе объекта, архитектуры и последовательного или комбинационного процесса создать простейшее описание вашего цифрового устройства в соответствии с вариантом и использовать его свойства как часть функциональных свойств более сложного дискретного устройства, используя пакетную конструкцию. Для предупреждения ошибок необходимо, чтобы файл имел расширение *.vhd.

4.2. Создать проект в отладчике FPGA Express и подключить к нему набранный файл.

4.3. После корректного подключения файла описания создать с помощью FPGA Express отчет по вашему проекту.

4.4. Синтезировать модель вашего цифрового устройства.

4.5. Оптимизировать созданную модель, с помощью FPGA Express.

4.6. Вывести список цепей оптимального варианта вашего устройства.

4.7. Создать проект в системе моделирования ModelSim и подключить к нему набранный и отлаженный в FPGA Express файл.

4.8. После корректного подключения файла описания сделать полный анализ вашего устройства в соответствии с вашим вариантом.

 

 

71 72


5. Указания по оформлению отчета и Контрольные вопросы

 

5.1. Отчет по лабораторной работе должен содержать:

- наименование;

- цель работы;

- используемое оборудование;

- теоретическую часть;

- описание последовательности действий при отладке и моделировании вашего варианта;

- распечатку временных диаграмм и таблиц истинности по проекту;

- распечатку вашего исходного файла;

- выводы по проделанной работе.

 

5.2. Контрольные вопросы к лабораторной работе

 

1. Что такое пакет (блок объявлений) в VHDL?

2. В чем разница между последовательным и комбинационным процессами?

3. Объясните необходимость использования пакета (блока объявлений)?


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

 

ПАРАЛЛЕЛИЗМ В VHDL

 

1. Общее описание работы

 

1.1. Цель работы – изучение конструкций языка VHDL, обеспечивающих параллелизм функций и процессов в проектируемом устройстве.

 

1.2. Содержание работы

 

Лабораторная работа состоит из домашнего и лабораторного заданий. Домашнее задание заключается в повторении ранее изученного материала. Лабораторное задание заключается в создании простейшего устройства с параллельными процессами. Созданное описание необходимо проверить с помощью отладчика FPGA EXPRESS и осуществить анализ функциональных свойств проектируемого устройства с помощью системы ModelSm.

 

1.3. Используемое оборудование

 

Для выполнения лабораторной работы используется ПЭВМ типа IBM PC, цветной монитор с графическим адаптером VGA и выше, принтер.

 

2. Домашнее задание и методические указания

по его выполнению

 

По методическому руководству и учебному пособию ознакомиться с основными понятиями процесса и блока.

 

3. Теоретическая часть

Оператор block

73 74
Оператор block именует набор параллельных операторов. Используйте блоки для иерархической организации параллельных операторов. Синтаксис этого оператора следующий:

label: block

{ block_declarative_item }

begin

{ concurrent_statement }

end block [ label ];

 

Обязательный параметр label именует блок. block_declarative_item объявляет локальные для блока объекты и может быть любым из следующих пунктов:

предложением use;

объявлением подпрограммы;

телом подпрограммы;

объявлением типа;

объявлением подтипа;

объявлением константы;

объявлением сигнала;

объявлением компонента.

Порядок каждого из параллельных операторов (concurrent_statement) в блоке не важен, поскольку каждый из операторов всегда активен.

Примечание. FPGA Express не поддерживает защищенные блоки.

Объекты, объявленные в блоке, являются видимыми для него самого и для всех вложенных в него блоков. Когда вложенный блок объявляет объектом с тем же именем, что и в родительском блоке, то объявление вложенного блока переписывает объявление родительского (внутри вложенного блока). В примере 21 показано использование вложенных блоков.

 

Пример 21. Вложенные блоки

...

B1: block

signal S: BIT; -- Объявление "S" в блоке B1

begin

S <= A and B; -- "S" из B1

 

B2: block

signal S: BIT;-- Объявление "S" в блоке B2

begin

S <= C and D; -- "S" из B2

B3: block

begin

Z <= S; -- "S" из B2

end block B3;

end block B2;

Y <= S; -- "S" из B1

end block B1;

...



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 194; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.202.169 (0.011 с.)