Езикови преводи От български на английски



Дата25.02.2018
Размер344.9 Kb.
#59066

Системи с Програмируема логика Лекция No 6, 2012

Основни елементи на езикови (VHDL-) описания на цифрови устройства при проектирането им върху интегрални схеми.
Езикови преводи

От български на английски:

Тя стана една - да не ти е работа, мани, мани - She became one - not to be of your business, remove, remove;

Гладна мечка хоро не играе - Hungry bear does not play boogie-boogie;

От VHDL на български :

entity Spas_day is

port( bride : in std_logic; -

Те ти булке Спасов ден!

1. VHDL като входно средство към развойни среди за проектиране на цифрови устройства върху ASIC и FPGA – чипове.
Езикът VHDL се причислява към групата на езиците за описание на хардуер (HDL – Hardware Description Languages). Той най-общо е предназначен за създаване на описания, необходими при проектиране и моделиране на цифрови схеми, устройства и системи. За пълнота трябва да се отбележи, че се разработва и съществува вариант на езика, описващ и аналогови схеми. В настоящите лекции този вариант няма да се разглежда, тъй като излиза извън обхвата им.

В първоначалния си вариант езикът е създаден през 1980 г. в САЩ във връзка с проект за разработка на интегрални схеми с много високо бързодействие за военни цели (VHSIC – Very High Speed Integrated Circuits). Този проект е дал и името на VHDL (VHSIC Hardware Description Language). Поради изключителната нужда в практиката от стандартизиран език за описание на хардуер, VHDL е избран, а по-късно (1987г.) утвърден като стандарт от IEEE под наименованието IEEE Std 1076. В последствие езикът е усъвършенствуван и допълван (последно чрез стандарт IEEE Std 1164) с цел да удовлетворява изискванията на развиващите се автоматизирани системи (така наречените развойни среди) за проектиране на цифрови устройства върху интегрални схеми и особено върху свръхголеми интегрални схеми.



Ако бързате или не искате да се разсейвате при ученето, можете да пропуснете текста на следващата страница:

------------------------------------------------------------------------------------------------------------------------------



В землището на с.Арчар, Видинско (бившият известен Римски град Рицария ) иманярите са захвърлили като непотребна една стелла (каменна плоча), на която има много странен текст – с ранно романски (римски) букви, но с арабски цифри, вместо римски. Археолозите, които са я прибрали, са я датирали към 500 - 300 г.пр.Хр, но никой от нашите специалисти не е могъл да я разчете. В последствие, след като сканираният текст е бил разпространен по Интернет, от известната Лаборатория по Реактивно движение, Невада, САЩ,(която работи за NASA и Пентагона) обявяват, че са разчели текста с помощта на суперкомпютъра Jaguar . Текстът, според д-р Джоан Флемминг, описва на непознат досега на археолозите език, а именно VHDL, конструкцията и начина на функциониране на стенобойна балиста – страшното тежко оръжие на римските легиони, пред което варварите треперели . Това е много странно, след като официално се знае, че езикът VHDL е създаден от компютърни специалисти през 1980 г. – ако римляните са го използвали, това значи, че не е изобретен сега, а много по-рано. Или стеллата все пак е фалшификат, и е направена в наши дни, въпреки твърденията на археолозите. Но на кого би му притрябвало да я изчука и да я захвърли след това в нивата до с.Арчар? На всичко отгоре скоро се разбра, че стеллата е изчезнала безследно от хранилището на музея на гр. Видин и никой не може да каже къде е в момента – в мазето на някой богат колекционер от Драгалевци или е вече в Невада? На Фигура 1 и Фигура 1а са показани стеллата, рисунка на римска балиста, снимка на доктор Флемминг и на суперкомпютъра Jaguar (само за снимката на госпожица Флемминг не е сигурно, че е автентична, тъй като по принцип сътрудниците на Лабораторията по Реактивно движение са засекретени).



Фигура 1



Фигура 1а

-------------------------------------------------------------------------------------------------------------------

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

Известната Y - диаграма на Gajski и Kuhn на Фигура 2 представя в резюмирана и нагледна форма съвременните нива и аспекти на описание на цифрови устройства, реализирани върху интегрални схеми. Върху диаграмата е обозначена областта на най-често използване в момента на езика VHDL. Вижда се от покритите от областта нива и аспекти на представяне, че с помощта на VHDL е възможно да се описва от една страна структурата, от друга страна поведението на цифрови схеми, устройства и системи на логическо, функционално и системно ниво.

В практиката на проектиране на цифрови устройства върху съвременните интегрални схеми се оказва удобно за решаване на задачите, възникващи при проектирането, моделирането и документирането им, описанието на устройствата да се извършва на така нареченото ниво на междурегистрови прехвърляния. Това ниво влиза в означената използвана област на Фиг.2.1. То е популярно още и съкратено като RTL-ниво (от Register Transfer Level). Това е ниво на описание на устройствата с градивни елементи (компоненти) – регистри, аритметически и логически функционални възли, памети, буфери и шини, синхронизирани с тактови сигнали. Данните представляват съдържанията на регистрите и паметите – най-често двоично представени числа и кодове, а операциите с тях са аритметическите и логически операции, които изпълняват функционалните възли от структурата.



Фигура 2

Проектирането на цифрови устройства върху интегрални схеми се извършва понастоящем с помощта на автоматизирани програмни системи (развойни среди). С термина развойна среда за проектиране върху ИС ще означаваме система от програми за проектиране, симулиране и документиране на устройства, реализирани върху потребителски ориентирани интегрални схеми. Програмите от една развойна среда са със съгласуван интерфейс помежду си така, че резултатите от работата на една програма се използват от други програми на същата среда. Очевидно развойните среди принадлежат към класа на системите за автоматизирано проектиране с помощта на компютър (CAD systems – Computer-Aided Design systems).

На Фигура 3 е показана опростена диаграма, обобщаваща стъпките на работа по проектиране на цифрови устройства върху потребителски ориентирани ИС. Вижда се, че преди да започне работа с развойната среда, проектантът трябва да е разработил модел на бъдещото цифрово устройство. Както бе отбелязано и по-горе, в съвременната практика най-удобно е (и по принцип повечето развойни среди така го изискват) моделът да е изграден на RTL – ниво (RTL - модел). От този модел проектантът трябва да състави входно за развойната среда RTL – описание на устройството в нашия случай на езика VHDL.

Трябва да се отбележи, че използваните развойни среди допускат входните описания на устройствата, които ще се проектират, да бъдат не само на VHDL, но и на други езици за описание на хардуер (HDL) – например Verilog, SystemC, Abel и др. Допускат се и графични входни описания на устройствата или на техни блокове. Тук ще се съсредоточим върху разглеждане на VHDL – описания на цифрови устройства поради популярността на езика.





Фигура 3

Диаграмата от Фигура 3 откроява основните етапи в проектирането на цифрово устройство върху потребителски ориентирани ИС. Развойната среда, четейки входното за нея RTL – описание на това устройство, създава (синтезира) своя, вътрешна абстрактна RTL – схема на устройството. Схемата е абстрактна, тъй като все още не е решено как компонентите й ще бъдат реализирани върху чипа. Следват стъпките на логическо, схемотехническо и топологическо проектиране, довеждащи до реализация на проектираното устройство върху ИС. Популярно е названието на целия този процес като RTL – синтез , както е показано на Фигура 3.



Фигура 4 показва основните задачи, изпълнявани от конкретна развойна среда – ISE WebPACK, както и работните й прозорци :





Фигура 4

2. Основни елементи на VHDL – описание на цифрово устройство в развойна среда
Ще представим основните елементи на едно VHDLописание в развойна среда с помощта на пример за описание на цифрово устройство, извършващо изчисления за един тип основна макрооперация в областта на цифрова обработка на сигнали - а именно така наречената “пеперуда” при бързо преобразуване на Фурие (Fourier) с комплексни числа.

Тук ще представим устройството първоначално зададено като “черна кутия” с изводи за входове и изходи за 16- и 32- разрядни двоични числа, както е показано на Фигура 5. Това са изводи за входни данни (P,Q,M,N), входни коефициенти за изчисленията (R,S), изходни резултати (Mp,Np,Pp,Qp) и входен синхронизиращ (тактов) сигнал за работа на устройството CLK.

RTL – моделът на устройството, съставен от проектанта му, е показан на Фигура 6. Както бе обяснено по-горе, RTL означава, че моделът на устройството, включващ структурата и начина му на функциониране, се разглежда на ниво на междурегистровите прехвърляния.



Фигура 5

Регистрите на Фигура 6 съхраняват 16- или 32- разрядни данни и в тях се записват нови данни синхронизирано (например по нарастващ фронт) чрез тактовия сигнал CLK. Функционалните възли, означени с mult, sub и adder, извършват съответните операции (умножение, изваждане и събиране) с двоичните числа. Предполага се, че всеки от тези функционални възли извършва операцията си за интервал от време, по-малък от периода на тактовия сигнал CLK. По този начин структурата функционира правилно във времето, като операции с нови входни данни могат да започват за всеки период на тактовия сигнал. Регистрите за входни данни между функционалните възли дават възможност на устройството да работи в така наречения конвейерен режим.

Тук ще разгледаме основните елементи (ще ги наричаме конструктивни единици) на VHDL – описанието на това устройство. Това описание е представено на Фигура 7.



Фигура 6



Фигура 7

От трите изобразени на Фигура 7 конструктивни единици ще разгледаме първоначално втората от тях - интерфейсната декларация на проектирания обект (така се нарича устройството, което се описва на VHDL). Накратко ще й казваме и entity - декларация (от entity - ключовата дума, използвана за началото й). След началната ключова дума следва името на описвания обект - в случая сме избрали за име на устройството Fourier_butterfly. Тук ще отбележим, че в имената и в ключовите думи синтактичните анализатори на VHDL в развойните среди не правят разлика между малки и големи букви.

Интерфейсната декларация по същество описва интерфейса на описваното устройство с външния за него свят. Затова в нея след ключовата дума port следва списък на декларациите на входно - изходните изводи на устройството (още наричани портове). Всеки порт се декларира чрез входно-изходния сигнал, който всъщност се разпространява по този порт. Всеки сигнал си има име - в нашия случай имената са от P до Qp. За всеки сигнал се декларира и посоката му. Най-често използваните декларации за посока са с ключовите думи: in - за входен сигнал, out - за изходен сигнал и inout - за сигнал, който е изходен за устройството, но се използва и като аргумент в някой негов вътрешен функционален възел (пример за такъв интерфейсен сигнал на устройство ще бъде даден по-нататък ).

В декларацията на всеки сигнал се описва и типът данни, които пренася той. В нашия пример типът данни се декларира чрез ключовата дума std_logic_vector, представяща вектор от двоични разряди - с други думи двоично число с повече от един разряди, като номерата на най-левия и най-десния разряд са разделени с ключовата дума downto. По принцип най-често използваните типове данни в VHDL - описанията на цифрови устройства върху ИС са дадени в следващите лекции.

Следващата основна конструктивна единица на VHDL - описанието е архитектурата на проектирания обект (цифровото устройство). Текстът й започва с ключовата дума architecture, следва избрано от проектанта име на архитектурата (в нашия случай това е Stage_1_2_3). Декларира се и това, на кой описван обект принадлежи тази архитектура - след ключовата дума of е поставено името на нашето устройство Fourier_butterfly.

Архитектурата описва структурата и/или функционирането (поведението) на проектирания обект. Това описание се разполага в блока на архитектурата, заключен между ключовата дума begin и ключовата дума end с името на архитектурата Stage_1_2_3. В случая описанието е на поведението на устройството – описани са операциите, които извършва то, включени в оператори за присвояване на нови стойности на сигнали. В следващи лекции са представени и обсъдени различни типове архитектури, използвани често при проектиране на цифрови устройства върху СГИС.

От Фигура 7 се вижда,че архитектурата на проектирания обект има и декларативна част, която се разполага пред блока й (пред begin). В нея най-често се декларират вътрешните сигнали от структурата на цифровото устройство, които пренасят данните между компонентите на тази структура. В нашия случай това са сигналите A11, A12, A13, A14, A, B, необходимостта от които може да се види от структурната схема на Фигура 6. За вътрешните сигнали не може да се говори за посока, свързана с тях, затова в декларациите им липсват ключовите думи за посока in, out, inout.

Трябва да се отбележи, че декларираните в entity – декларацията на един обект сигнали (или други елементи на VHDL) са достъпни (видими) в архитектура, принадлежаща на този обект. Затова и входно-изходните сигнали от по-горе разглежданата entity – декларация имат право да участвуват в операторите на принадлежащата й архитектура.

Конструктивната единица, която стои пред entity – декларацията в описанието на Фигура 7, включва редове с декларации за достъп до библиотеки и пакети на VHDL. В нашия пример библиотеката е една - тя е с име IEEE и това, че се иска достъп до нея, се декларира чрез ключовата дума library, поставена пред името й.

Една библиотека от гледна точка на VHDL - описание се възприема като съвкупност от вид конструктивни единици на VHDL - а именно така наречените пакети. В пакет на VHDL се дефинират нови типове данни, процедури, функции, които могат да бъдат използвани от entity – декларациите, а съответно и от принадлежащите им архитектури.

Достъпът до пакет се заявява чрез ключовата дума use , след което разделени с точка се написват името на библиотеката, в която е пакетът, името на самия пакет и дефинираното име в пакета (на тип, процедура, функция), което искаме да използваме. (В този случай се казва, че искаме това име да е видимо в entity – декларацията и в архитектурата).

Ако искаме да използваме всички дефинирани в един пакет имена, след точката след името на пакета в декларацията use трябва да поставим ключовата дума all.

На Фигура 7 е деклариран достъп до два пакета, намиращи се в библиотеката IEEE - STD_LOGIC_1164 и STD_LOGIC_UNSIGNED. В първия пакет е дефиниран типът std_logic_vector, който използваме за деклариране на сигналите в entity – декларацията и в архитектурата Stage_1_2_3, а във втория пакет са предефинирани операциите +, -, * така, че да се извършват със същия тип данни std_logic_vector. Информация за най-често използваните типове данни, операции и изрази с тях е дадена в следваща лекция.

Таблица 1, която следва по-долу, съдържа сбита информация за основните конструктивни единици на VHDL – описание на цифрово устройство..

Таблица 1

конструктивна

VHDL -единица

принципен синтаксис на конструктивната единица

предназначение на конструктивната единица

интерфейсна декларация на проектиран обект

(entity-декларация)



entity <име на обект > is

port (


<списък от декларации на

сигнали>


);

end <име на обект >;



описва входовете и изходите (интерфейса) на проектирания обект с външната за него среда

архитектура на проектиран обект

(architecture)



architecture <име на архитектура> of <име на обект >

<списък от декларации>

begin


<оператори>

end <име на архитектура>;



описва начина на функциониране (поведението) и/или структурата на проектирания обект

съответствие между деклариран обект и архитектура

(декларация на конфигурацията)



configuration <име на конфигурация> of

<име на обект> is

for <име на архитектура>



<оператори use…>

end for;


end <име на конфигурация>;

декларира с коя от предложените архитектури да се проектира обект от проекта

декларация на пакет

(package)



package <име на пакет> is

<декларации>

end <име на пакет>;



съхранява често използвани дефиниции (на типове, константи и др.), дефиниции на процедури, функции

тяло на пакет

(package body)



package body <име на пакет> is

<декларации>

<дефиниции на функции>

end <име на пакет>;



За да се провери коректността на VHDL – описанието от Фигура 7, което би трябвало да описва цифровото устройство с RTL – модел от Фигура 6, това описание е подадено като входно към развойна среда с цел да се проектира цифрово устройство. Средата е с име WebPACK и се използва за проектиране на цифрови устройства върху програмируеми чипове (включително и FPGA). Работейки съвместно с проектанта по стъпките на диаграмата на проектиране от Фигура 3, средата първоначално транслира това входно за нея описание и от него строи свой вътрешен RTL – модел на устройството, като синтезира абстрактна RTL – схема (да напомним, че й казваме абстрактна, защото компонентите й не са реализирани все още върху чипа).

Резултатите от тази първа стъпка от работата на развойната среда по проектирането на устройството с коментираното тук VHDL – описание са представени по-долу. На Фигура 8 е показана схема, генерирана от развойната среда. Чрез тази схема развойната среда показва как е възприела от прочитането на entity -декларацията информацията за входовете и изходите на устройството. Вижда се, че данните за входовете и изходите като имена, брой на разряди и посока на сигналите съвпадат с декларираните от входното описание на Фигура 5.





Фигура 8

Синтезираната RTL – схема от развойната среда (тоест съдържанието на “кутията” от Фигура 8 е показана на Фигура 9. (В средата тази схема се нарича неслучайно RTL-Schematic). На фигурата правоъгълниците означават регистри за данни, синхронизирани по нарастващ фронт на тактовия сигнал CLK, освен това функционалните възли за умножение, събиране и изваждане се разпознават лесно. Вижда се, че синтезираната RTL – схема от Фигура 9 съвпада абсолютно с RTL - модела на проектанта от Фигура 6. Следователно архитектурното VHDL – описание на устройството, от което е синтезирана тази схема, е правилно съставено.

На Фигура 10 са показани конструктивните единици на едно VHDL - описание в развойна среда за проектиране на цифрови устройства върху ИС. За работата на средата се създава така нареченият проект, който конструктивно представлява множество от файлове, съхранявани в директория на този проект. Демонстрирано е едно просто VHDL – описание, представляващо entity - декларация и една архитектура на устройството. За тях средата определя един VHDL - модул (файл в директорията на проекта). За файловете, които се генерират при следващите стъпки на работа на развойната среда по проектиране на устройството, средата създава и поддържа една работна библиотека с име work.



Фигура 9



Фигура 10



Фигура 11

На Фигура 11 е показано оформянето в развойна среда на друго (по-сложно) VHDL – описание с йерархична структура. Entity – декларацията на устройството е означена като entity - декларация1. Проектираното устройство е съставено от компоненти, като всеки компонент е описан с неговата entity - декларация и архитектура, включени в отделни модули (разположени в отделни файлове). Примери за такива VHDL – описания с йерархична структура са дадени в следващи лекции.

В описанието на компонент2 на Фигура 11 влизат три архитектури. Чрез конструктивната VHDL – единица “конфигурация” се определя коя от трите архитектури ще бъде конкретно използвана при проектирането на устройството.

Развойната среда WebPACK, пример за работата на която беше даден по-горе, автоматично създава рамка за VHDL - описание, при деклариране от проектанта, който работи с нея, че желае създаването на нов VHDL – модул в проекта си. Пример за такава рамка е показан по-долу – за устройство, наречено butterfly и с архитектура, наречена Behavioral. Вижда се, че рамката съдържа основните конструктивни елементи на едно VHDL – описание.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity butterfly is

-- място за деклариране

-- на входно-изходните сигнали

-- на устройството

end butterfly;
architecture Behavioral of butterfly is

-- място за вътрешни декларации

-- за архитектурата

begin


-- място за описание

-- на архитектурата

-- на устройството

end Behavioral;



Следващата фигура показва отново основните елементи на едно VHDL - описание на цифрово устройство:



3. Основни типове данни и операции при VHDL-описания на цифрови устройства. Реализация върху интегрални схеми.

В следващата Таблица 2 са събрани основни типове данни на VHDL, които често се използват при описания на цифрови устройства, проектирани върху ИС. Показаните в таблицата типове могат да имат материални носители в структурата на устройството. Това означава, че с такива типове могат да бъдат данни, които като стойности на сигнали се обменят между устройството и външната за него среда, появяват се на изходите на функционалните му възли и се разпространяват по вътрешните линии и шини на устройството. Съкратено казваме,че сигналите на устройството могат да са от такива типове.



Таблица 2

тип на данни, които получават материален носител в проектираното устройство

възможни стойности на данните

boolean

TRUE

FALSE


integer

според развойната среда; типично в обхвата от –(231 – 1) до +(231 – 1)

bit

‘0’

‘1’


bit_vector

вектор (едномерен масив) от

елементи bit

std_logic

U’ (Uninitialized)

X’ (Forcing Unknown)

0' (Forcing 0)

1’ (Forcing 1)

Z’ (High Impedance)

W’ (Weak Unknown)

L’ (Weak 0)

H’ (Weak 1)

-‘ (Don’t care)


std_logic_vector

вектор (едномерен масив) от

елементи std_logic

Класическият тип bit от горната таблица представя стойностите на цифров сигнал по една линия (цифрова ‘0’ и цифрова ‘1’). Типът bit_vector представя едномерен масив от сигнали bit, разпространявани по група линии (например шина). Тези типове, заедно с типовете boolean и integer са дефинирани в пакет STANDARD на библиотека STD и заедно с работната библиотека WORK са достъпни по премълчаване за проект с VHDL – описание в развойните среди (без да се декларира с library… и use…). Типът std_logic е сравнително нов в VHDL и също представя стойностите на цифров сигнал по една линия или на изход на цифрова схема. Тези стойности са 9, за разлика от двете на bit и най-общо се използват за по-прецизно моделиране на проектираното цифрово устройство от развойната среда. Типът std_logic и типът std_logic_vector (представящ едномерен масив от std_logic) са дефинирани в пакета STD_LOGIC_1164, а операции с тях, които са описани в Таблица 3 по-долу, са предефинирани в пакета STD_LOGIC_UNSIGNED. Последните два пакета са разположени в библиотеката IEEE и достъпът до тях се декларира.

Представените в горната таблица типове могат да характеризират освен сигнали, също така променливи и константи. Тези елементи на VHDL – описанието се декларират по следния начин:

signal <име на сигнал>: <тип на данни>;

variable <име на променлива>: < тип на данни >;

constant <име на констнанта>: <тип на данни> := <стойност>;

Примери за декларации с използване на описваните тук типове данни:

signal CARRY: std_logic;

signal INPUT_D: std_logic_vector (0 to 15);

signal A_EQ_B: boolean;

signal RESULT: integer range 0 to 31;

signal BYTE_OUT: integer range -256 to 255;

variable OVERFLOW: bit;

variable CONTROL: bit_vector (3 downto 0);

constant COEFF1: std_logic_vector (7 downto 0) := "00100111";



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

Когато във VHDL–процес сигнал приема нова стойност по време на нарастващия фронт на тактовите (синхронизиращи устройството)импулси, за този сигнал се синтезира регистър, съхраняващ стойността му в структурата на проектираното усткройство. Ако стойността се приема от променлива, за нея в структурата не се синтизира регистър.

Ако цифрово устройство за изчисления за “пеперуда” при бързо преобразуване на Фурие има в VHDL–описанието на архитектурата си следващия текст, а не текстът от Фигура 7, то в синтезираната му структура няма да ги има регистрите за междинните резултати А и В, тъй като в следващия текст те се декларират чрез променливи, а не чрез сигнали, както е на Фигура 7.
architecture Stage_1_3 of Fourier_butterfly is

signal Al1, Al2, Al3, Al4 : std_logic_vector (15 downto 0);

begin

process (CLK )



variable A, B : std_logic_vector (15 downto 0);

begin


if (CLK'event and CLK='1') then

Al1 <= P * R; Al2 <= S * Q;

Al3 <= P * S; Al4 <= R * Q;

A := Al1 - Al2; B := Al3 - Al4;

Mp <= M - A; Pp <= M + A;

Qp <= N + B; Np <= N - B;

end if;

end process;



end Stage_1_3;

При проектиране на цифровото устройство развойната среда разполага декларираните сигнали и променливи върху линии и шини с брой на линииите в шините такъв, че да е съобразен с декларирания брой разряди за данните от тип std_logic_vector или със съображение да представят двоично интервала от стойности, деклариран за типа, в случая за тип integer range….

Следващата Фигура 12 показва RTL – схемата, която една развойна среда съставя от горното VHDL – - описание и генерира входове и изходи на устройството с необходимия брой линии за обмен на сигналите, декларирани с типовете, показани по-горе.



Фигура 12

Следват примери за деклариране на константи. Тези примери демонстрират как се записват стойности на представяните тук типове данни:

constant EQ: boolean := TRUE;

constant INT: integer := 31;

constant ZERO: std_logic_vector (3 downto 0) := "0000";

constant HI_IMP: std_logic := 'Z';

constant DATA_REZ: (31 downto 0) := x"FF00";

Последната константа е декларирана с шестнадесетично представена стойност

С означението 'Z' се описва високоимпедансно състояние на изход на цифрова схема. В следваща лекция са разглеждани VHDL – описания на цифрови устройства и системи с такива изходи, свързани към обща шина.

VHDL – описанията допускат в тях да бъдат декларирани нови (потребителски) типове. Най-често при проектирането на цифрови устройства върху ИС това са масиви от сигнали. При декларирането се използва ключовата дума array.

На първо място масивите са използвани за описване на памети, реализирани върху ИС. Следващият текст декларира памет RAM с 1024 8 – разрядни думи:

type ram_type is array (1023 downto 0) of std_logic_vector (7 downto 0);

signal RAM : ram_type;

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



Таблица 4

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

означения

особености в приложимостта

логически операции

and, or, nand, nor, xor, xnor, not


реализират се в структурата за типове данни boolean, bit, std_logic, а поразрядно и за типове integer, bit_vector, std_logic_vector

операции на отношение

(сравнение)



=, /=, <, <=, >, >=

реализират се в структурата за всички типове данни, като резултатът е от тип boolean

аритметически операции

+, -, *, /, rem, mod, abs, **

реализират се в структурата за типове данни integer и std_logic_vector с особености, определяни от конкретната развойна среда

операция за слепване (конкатенация)

&

реализира се в структурата за типове данни std_logic и std_logic_vector

Като нови потребителски типове понякога се налага и декларирането и използването на изброими типове. За тях при декларирането трябва да се изброят всички възможни стойности, които те могат да заемат, например:

type code is (ADD, INCR, SUB, MULT, SHL, SHR);

signal CO_ALU1 : code;

Изброимите типове, както е и декларираният тип на горния пример, се използват за описание на (управляващи) кодове с техните имена, разпространявани по шини или приемани на входовете на блокове в структурата на устройствата.

Горната Таблица 4 показва най-често използваните операции при VHDL – описанията на цифрови устройства:

Възможностите и начините за реализация в структрата на ИС на операциите от горната таблица зависят от конкретната развойна среда, която се използва за проектиране на цифровите устройства. Развойните среди използват и библиотеки от предварително проектирани блокове за реализацията на някои (най-често аритметични) операции.

Приоритетът при изпълняване в израз на операциите от горната таблица е дефиниран в следващата, Таблица 5:

Таблица 5

тип на операциите

операции от групата

приоритет на изпълнение

логически операции

and, or, nand, nor, xor, xnor

най-нисък

(изпълняват се последни)



операции на отношение

=, /=, <, <=, >, >=




аритметически операции и слепване

+, -,&




унарни операции за знак

+, -




аритметически операции

*, /, rem, mod




операции от различен тип

**, abs, not

най-висок

(изпълняват се първи)



За да представим примери на изрази, използващи горните операции в VHDL – описания, първоначално ще покажем синтаксиса на операторите за присвояване на стойности на променливи и констнанти, които оператори допускат използването на изрази вдясно на знаците за присвояване:

<име на сигнал> <= <израз>;

<име на променлива> := <израз>;

Следват примери на изрази с логически операции. Ако операндите и резултатите в не са от тип boolean, то трябва да са с еднакъв брой разряди и се приема, че логическите операции се извършват за тях поразрядно.

signal A, B, C, Y: std_logic_vector(3 downto 0);

signal D, E, F, G: std_logic_vector(0 to 31);

signal H, I, J, K: std_logic;

signal L, M, N, O, P: boolean;


Y <= (B and not C) or A;

D <= E or (F or G);

H <= (I nand J) nand K;

L <= (M xor N) and (O xor P);

За да има яснота за развойната среда, която трябва за синтезира логическа схема за реализация на израза в ИС, необходимо е използването на скоби и при изрази с операции, които имат еднакъв приоритет, както е показано по-горе. (Има изключение от това изискване за операциите or и and, например: допустимо е E or F or G).

Следват примери на изрази с операции за сравнение. Трябва да се има предвид, че изразите с такива операции са от булев тип:

signal A, B: std_logic_vector(15 downto 0);

signal NUM : integer range 0 to 511;

signal G, LE, BOOL, FL : boolean;
G <= A > B;

LE <= C <= D;

FL <= not BOOL and NUM = 4;

Следват примери на изрази с аритметически операции.

signal A, B: std_logic_vector(7 downto 0);

signal C, Y: std_logic_vector(15 downto 0);

signal RESULT : std_logic_vector(8 downto 0);
Y <= A * B + C;

RESULT <= ‘0’&A + ‘0’& В;

В израз, който съдържа операцията умножение, желателно е броят на разрядите на резултата да е два пъти по-голям от броя на разрядите на операндите, тъй като представянето в структурата е двоично. Така се гарантира, че няма да се загубят цифри от резултата.

Последният израз от горния пример демонстрира често използван начин на описание и реализация в структурата на операция събиране така, че да не се загуби евентуалният пренос от най - старшия разряд на резултата. Преди извършване на операцията към двата операнда A и В се слепва константа ‘0’ като най-старши разряд. Операцията се извършва тогава с операнди с единица по-голям брой разряди (в случая 9) от първоначалния им брой. Резултатът (в случая RESULT) е деклариран със същия (с единица по-голям брой) разряди и в най-старшия му разряд се установява стойността на този пренос. От това описание се синтезира в структурата на ИС 9 – разряден суматор, въпреки че първоначалните операнди са 8 – разрядни.

Последните два примера показват използване на операция конкатенация за описване сливането на две шини в една, а също така и отделяне на част от линиите на шина за формиране на друга, с по-малък брой линии:

signal A, B: std_logic_vector(15 downto 0);

signal СONC: std_logic_vector(31 downto 0);

signal D: std_logic_vector (7 to 0);

CONC <= A & B;

D <= B(7 downto 0);

След въвеждане чрез проект в развойната среда на входно VHDL - описание на цифрово устройство, средата синтезира върху ИС електрически схеми, реализиращи операциите от описанието. По-рано бяха представени стъпките на проектиране на цифрови устройства върху ИС с помощта на развойна среда. Накратко те бяха:

а)синтезиране на абстрактна RTL – схема;

б)синтезиране на логическа схема;

в)синтезиране на електрическа схема;

г)синтезиране на топологични клетки, разполагане и свързване в чипа.

Процесът на проектиране за операциите от VHDL – описанието спазва тези стъпки, като в някои случаи някои от тях могат да бъдат пропуснати поради това, че развойните среди разполагат с библиотеки от готови модули, реализирани на някои от изброените по-горе нива.

Ще покажем някои примери за проектиране в ИС за операции от VHDL – описания.

За следващите логически операции с четириразрядни сигнали:

signal X1, X2, X3, Y : std_logic_vector (0 to 3);

Y <= (X1 and not X2) or X3;

развойната среда WebPACK синтезира RTL – схемата, показана на Фигура 13. Всеки блок от тази схема би трябвало да реализира операциите за един разряд от декларираните по-горе сигнали – операнди.



Фигура 13

След логическо проектиране е получена логическа схема за всеки от горните блокове, показана на Фигура 14:





Фигура 14

Компонентите на логическата схема – логическите елементи - се синтезират електрически и топологически в логическите блокове на електрически конфигурируема ИС (FPGA). На Фигура 15 са показани логическите генератори (F и G) в логическите блокове на FPGA - чип от фамилията VirtexII на фирма Xilinx, в които се реализират при програмиране (чрез управление от конфигурационен файл) логическите елементи за горната логическа схема.





Фигура 15

За операцията abs, представена по-долу, развойната среда синтезира RTL - схема от Фигура 17, съдържаща инвертор, мултиплексер и блок, който е синтезиран на Фигура 18.

signal IN1, OUTD1 : integer range -8 to 7;

OUTD1 <= abs IN1;





Фигура 17



Фигура 18

За всеки от блоковете на Фигура 18 се синтезира логическата схема от Фигура 19, с което завършва логическият синтез за реализацията на тази операция.





Фигура 19

За трите операции на сравнение:

OUTB1 <= A > B;

OUTB2 <= A = B;

OUTB3 <= A < B;

развойната среда за проектиране върху FPGA първоначално синтезира RTL – схемата от Фигура 20.





Фигура 20

Всеки от трите блока – компаратори е синтезиран логически, а след това и електрически, и топологически в блоковете на FPGA – чип, използвайки библиотека на развойната среда – Фигура 21.



Фигура 21

Аритметическият израз, представен по-долу, също се реализира с помощта на библиотека на развойната среда. Първоначално синтезираната от него, вътрешна за средата RTL – схема е показана на Фигура 22.

signal A, B: std_logic_vector(7 downto 0);

signal C, Y: std_logic_vector(15 downto 0);

Y <= A * B + C;





Фигура 22

Изразът е проектиран върху FPGA - чип от фамилията VirtexII на фирма Xilinx, в структурата на който има вградени умножители (Фигура 23).





Фигура 23

Развойната среда директно реализира операцията умножение в един от умножителите, без да синтезира тази операция. Операцията събиране се синтезира в логическите блокове на чипа, като средата използва библиотека.

Ако аритметическата схема се реализира върху FPGA – чип, който не притежава вградени блокове – умножители, развойната среда проектира логическа схема за умножение и я реализира чрез логическите блокове на чипа, както е показано за чип от фамилията VirtexE на фирма Xilinx (Фигура 24):

Фигура 24

4. Използване на VHDL – архитектури с поток на данните

VHDL – архитектурите с поток на данните (dataflow – архитектури) описват начина на функциониране на проектираните устройства чрез зависимостите на едни сигнали на устройствата (най-често изходни) от други сигнали (най-често входни или вътрешни). Тези зависимости се представят чрез оператори за присвояване и изрази на VHDL най-често логически и аритметически. По-долу ще обсъдим няколко типични примера на такива архитектури, представящи възможностите им за проектиране на цифрови устройства върху FPGA-'чипове.

Първият пример е на dataflow – архитектура на едноразряден суматор с операнди IN1 и IN2, входен пренос C_IN, резултат - сума SUM и изходен пренос C_OUT. Следващата Таблица 4 включва таблиците за истинност на логическите функции SUM и C_OUT в зависимост от аргементите IN1, IN2 и C_IN. Таблица 4


IN1

IN2

C_IN

SUM

C_OUT

0

0

0

0

0

0

0

1

1

0

0

1

0

1

0

0

1

1

0

1

1

0

0

1

0

1

0

1

0

1

1

1

0

0

1

1

1

1

1

1

Решавайки задачата за логическо проектиране, можем да получим следните логически изрази за двете функции:

където:

Схемата на устройството, изпълняващо горните изрази, е представена на Фигура 25.





Фигура 25

Следва VHDL – описанието на устройството с име full_adder. В него архитектурата Dataflow1 е с поток на данните (dataflow – архитектура ).

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity full_adder is

Port ( IN1, IN2, C_IN : in std_logic;

SUM, C_OUT : out std_logic );

end full_adder;

architecture Dataflow1 of full_adder is

signal S1, S2, S3 : std_logic;

begin

S1 <= IN1 xor IN2;



S2 <= C_IN and S1;

SUM <= S1 xor C_IN;

S3 <= IN1 and IN2;

C_OUT <= S2 or S3;

end Dataflow1;

Както се вижда от горниия текст, в тялото на архитектурата (между ключовите думи begin и end) са поставени операторите за присвояване на нови стойности на сигнали.

Важно правило, което трябва да се има предвид при dataflow – архитектурите е, че се приема, че операторите за присвояване на нови стойности на сигналите се изпълняват паралелно в тялото на архитектурата. Това е съществено за работата на развойната система, която от VHDL – описанието проектира устройството и за работата на симулатора на функционирането на устройството.

Следвайки това правило, можем да кажем, че операторите за присвояване в горния текст, подредени по всякакъв друг начин , няма да променят проектираното устройство и неговото функциониране.

Както знаем от по-горе, операторите за присвояване на стойности на сигналимогат да бъдат написани и с по-сложни изрази, съдържащи повече знаци за операции в тях. Долната архитектура Dataflow2, например, описва същото устройство:

architecture Dataflow2 of full_adder is

begin

SUM <= (IN1 xor IN2) xor C_IN;



C_OUT <= ((IN1 xor IN2) and C_IN) or (IN1 and IN2);

end Dataflow2;





Фигура 26

Начинът на реализация на едноразрядния суматор върху FPGA – чип е показан на Фигура 26. Всяка от двете логически функции, които описват изходите му, е реализирана поотделно върху комбинационни схеми (така наречените логически генератори F и G), настройвани при конфигурирането на чипа да изпълняват съответните логически функции. Изходите на логическите генератори са свързани към изводи на чипа, представящи SUM и C_OUT.

Следващият пример е на dataflow – архитектура на D - тригер, синхронен по ниво на синхронизиращия сигнал C (така нареченият latch). Като всеки друг тригер, и този притежава прав (Q) и обратен изход (NQ). Схемата на тригера е представена на Фигура 27.

VHDL – описанието на тригера е показано по-долу. Този пример илюстрира възможността да се описват чрез dataflow – архитектури и устройства с обратни връзки в структурата си.



Фигура 27

В приведената по-долу entity - декларация на тригера изходните сигнали Q и NQ са декларирани като inout, защото се използуват и като аргументи на операции в схемата поради обратните връзки в нея.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity d_latch is

Port (D, C : in std_logic;

Q, NQ : inout std_logic );

end d_latch;


architecture Dataflow3 of d_latch is

signal NS, NR : std_logic;

begin

NS <= D nand C;



NR <= NS nand C;

Q <= NS nand NQ;

NQ <= NR nand Q;

end Dataflow3;

Реализацията на тригера върху FPGA – чип от фамилията Spartan3 е показана на Фигура 28. Интересно в нея е това, че въпреки че чипът притежава в структурата си такива тригери, то за реализацията са използвани логически генератори (F и G), както за комбинационна схема (едноразряден суматор), разгледана по-горе. Това е така, защото развойните системи, проектиращи тригера, не разпознават горното описание като описание на тригер.

Фигура 28

Следващият пример е на описание на устройство, извършващо изчисления за макрооперацията “пеперуда” за бързо преобразуване на Фурие. Видът и връзките между операциите (с комплексни числа) са представени на диаграмата на Фигура 29.



Фигура 29

Граф на зависимостта по данни (dataflow - граф), описващ необходимите аритметични операции, е показан на Фигура 30.





Фигура 30

Имайки предвид графа на зависимостта по данни, е съставена архитектурата Dataflow4 на устройството с име fourier_top:

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity fourier_top is

port (


P : in std_logic_vector (15 downto 0);

Q : in std_logic_vector (15 downto 0);

R : in std_logic_vector (15 downto 0);

S : in std_logic_vector (15 downto 0);

M : in std_logic_vector (15 downto 0);

N : in std_logic_vector (15 downto 0);

Mp : out std_logic_vector (15 downto 0);

Np : out std_logic_vector (15 downto 0);

Pp : out std_logic_vector (15 downto 0);

Qp : out std_logic_vector (15 downto 0)

);

end fourier_top;


architecture Dataflow4 of fourier_top is

signal Al1, Al2, Al3, Al4, A, B : std_logic_vector (15 downto 0);

begin

Al1 <= P * R; Al2 <= S * Q; Al3 <= P * S; Al4 <= R * Q;



A <= Al1 - Al2; B <= Al3 - Al4;

Mp <= M - A; Pp <= M + A; Qp <= N + B; Np <= N - B;

end Dataflow4;

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

Следващата схема на Фигура 31 е на устройство, съставено от умножител и буферна схема с три състояния на изхода си. Входовете за операнди на умножителя са A и B , входът RESET нулира изхода C на умножителя (когато има стойност '1'), входът OE на буфера привежда изхода му във високоимпедансно състояние, когато има стойност, различна от '0' , (тоест '1').



Фигура 31

VHDL – описанието на устройството е показано по-долу. С него е демонстрирано това, че във dataflow - архитектура може да бъде използван, освен оператор за присвояване, още и оператор за условно присвояване на стойност на сигнал (това са синтактичните конструкции в архитектурата с ключовите думи when и else).

В entity - декларацията на устройството изходният сигнал C е деклариран като inout, защото едновременно е и входен за буферната схема.

Конструкцията (others =>…) описва това, че всички разряди на съответната дума (вектор от битове) приемат означената стойност след стрелката. Ще припомним, че константата 'Z' означава високоимпедансно състояние на едноразряден изход.

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity mult_buff is

Port (A: in std_logic_vector (15 downto 0);

B: in std_logic_vector (15 downto 0);

C: inout std_logic_vector (31 downto 0);

Y: out std_logic_vector (31 downto 0);

RESET: in std_logic;

OE: std_logic

);

end mult_buff;


architecture Dataflow5 of mult_buff is

begin


C <= (others => '0') when (RESET = '1')

else A * B;

Y <= C when (OE = '0')

else (others => 'Z');



end Dataflow5;



понякога е невъзможно да се разбере какво са скрили конструкторите в някои ъгълчетата на една свръхголяма интегрална схема





Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница