|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Меню:
Главная
Форум
Литература: Программирование и ремонт Импульсные блоки питания Неисправности и замена Радиоэлектронная аппаратура Микросхема в ТА Рубрикатор ТА Кабельные линии Обмотки и изоляция Радиоаппаратура Гибкие диски часть 2 часть 3 часть 4 часть 5 Ремонт компьютера часть 2 Аналитика: Монтаж Справочник Электроника Мощные высокочастотные транзисторы 200 микросхем Полупроводники ч.1 Часть 2 Алгоритмические проблемы 500 микросхем 500 микросхем Сортировка и поиск Монады Передача сигнала Электроника Прием сигнала Телевидиние Проектирование Эвм Оптимизация Автомобильная электроника Поляковтрансиверы Форт Тензодатчик Силовые полевые транзисторы Распределение частот Резисторные и термопарные Оберон Открытые системы шифрования Удк |
[0] имя автора - Иосиф Каршенбойм Сайт автора - www.iosifk.narod.ru Сайт журнала - www.kit-e.ru Компоненты и технологии, № 12003 Шпаргалка для перехода от AHDL к VHDL Иосиф Каршенбойм Ik@lmail.loniis.spb.su Михаил Косткин kostkin@asicdesign.ru Вступление Когда-то в популярной книжке по математике была напечатана такая шутка. Математик задал Физику задачу: «Имеем чайник, воду, плиту и спички. Как получить кипяток?» Физик ответил - «Поставить чайник на плиту, налить воду, зажечь плиту и вскипятить воду». «Правильно», сказал Математик, «а вот более сложная задача - чайник с водой уже стоит на плите, что нужно сделать в этом случае?» Физик ответил: чего, мол, проще, надо зажечь огонь и готово. «Нет, - сказал Математик, - надо вылить из чайника воду, и тогда мы придем задаче, которую уже умеем решать». То же происходит и в реальной жизни, когда есть необходимость перевести старый проект из AHDL в VHDL. Можно просто взять и сделать проект заново, а можно попытаться переписать строчку за строчкой. Для того, чтобы этот процесс произошел быстрее, можно прибегнуть к данной шпаргалке. Необходимость перехода от языка AHDL к VHDL Сравнение проектирования на AHDL и VHDL приведено в статье Г. Варфоломеева [1]. В данной статье достаточно подробно описаны все аспекты перехода с AHDL на VHDL. Хочется добавить только следующее: в случае применения ModelSim в качестве инструмента моделирования при проведении симуляции появляется возможность читать данные из файла и это данные выдавать на проверяемый проект в качестве входных воздействий. Очень полно и подробно о таких методах отладки и проверки проектов, написанных на VHDL, можно прочитать в учебнике [2]. Ссылки на подобные решения можно также найти, например, на сайтах www.asicdesign.ru и www.actel.ru. Результаты моделирования тоже могут быть записаны в файл. Допустим, что проект представляет собой многоканальный HDLC-контроллер. Число каналов - 30. Данные, которые необходимо пропустить через HDLC-контроллер, представляют собой, по меньшей мере, последовательность из 10 байт в каждом канале. Ядро контроллера при обработке каждого канала имеет не менее 10 состояний автомата. В итоге получаем: 30x10x10 = 3000 участков на диаграмме симуляции для проверяемого устройства. Разбираться с такой диаграммой (в случае применения AHDL и программного средства разработки MaxPlus или Quartus с его встроенным симулятором) довольно затруднительно. В случае применения ModelSim для аналогичного проекта, выполненного на VHDL, мы получим, например, 30 файлов с выходными данными. Причем, в случае необходимости, можно записать в файл и состояния автомата на требуемых участках диаграммы, или на всех участках диаграммы, а также состояния внутренних сигналов проекта и т. д. Результаты моделирования можно сравнить с математической моделью обработки данных и сделать вывод о работоспособности разрабатываемого проекта. Существуют программы-перекодировщики, которые автоматически переводят файлы из AHDL в VHDL или в Verilog. Примером такой программы может служить Xport.exe. Этот перекодировщик успешно переводит файлы из одного формата в другой, но при перекодировке в выходном файле он не делает параметрических функций. То есть, если в AHDL-файле проект выполнен с параметрами, которые позволяют его гибко использовать, то при перекодировке, в выходном VHDL-файле эти параметры ввести будет уже невозможно, и они будут жестко заданы в соответствии с теми значениями, которые были установлены в момент перекодировки. Именно поэтому ручная перекодировка в большинстве случаев будет более предпочтительной. Шпаргалка Для того чтобы было проще перейти от AHDL к VHDL, попробуем сопоставить известным и хорошо изученным в AHDL-выражениям аналогичные выражения в VHDL. Тогда-то мы и придем к задаче, которую уже умеем решать. Данная статья не является учебным пособием, описывающим язык VHDL. Ее цель - облегчить переход к программированию на VHDL для тех разработчиков, которые уже имеют опыт работы на AHDL. Рассмотрим структуру AHDL-файла. Он может содержать следующие части: 1. 2. 3. 4. 5. 6. 7. 8. 9. Title Statement (optional). Include Statement (optional). Constant Statement (optional). Define Statement (optional). Parameters Statement (optional). Function Prototype Statement (optional). Options Statement (optional). Assert Statement (optional). Subdesign Section. Компоненты и технологии, № 12003 10. Variable Section (optional). 11.1.If Generate Statement (optional). 11.2.Node Declaration (optional). 11.3.Instance Declaration (optional). 11.4.Register Declaration (optional). 11.5.State Machine Declaration (optional). 11.6.Machine Alias Declaration (optional). 11.7.Assert Statement (optional). 12. Logic Section. 12.1. Defaults Statement (optional). В части файла, называемой Logic Section, находятся следующие выражения, которые могут следовать в файле в любом порядке и повторяться произвольное число раз: 1.Boolean Equation 2.Case Statement 3.For Generate Statement 4.If Generate Statement 5.If Then Statement 6.In-Line Logic Function Reference 7.Truth Table Statement 8.Assert Statement Далее попробуем заменять каждую часть AHDL-файла на соответствующее выражение для VHDL-файла. 1.Пропустим Title Statement, так как аналога в VHDL-файле нет и вместо этого воспользуемся символом комментария «-- » и напишем: My project... и т. д. 2.Для VHDL-файла заголовочными являются файлы, описывающие, с какими библиотеками придется работать компилятору, а не описания библиотечных и «самодельных» компонентов проекта. Типичный вид части VHDL-файла, описывающего библиотеки: library ieee; use ieee.std logic 1164.all; use ieee.std logic arith.all ; use ieee.std logic unsigned.all ; use work.uart signals.all ; USE std.standard.ALL; USE std.textio.All; Поэтому часть AHDL-файла, пункт 2, Include Statement, в которой дано описание библиотечных и «самодельных» компонентов для данного проекта, переносится в конструкцию PACKAGE, где компоненты описываются, например, так: COMPONENT DFFE PORT (d : IN STD LOGIC; clk : IN STD LOGIC; clrn: IN STD LOGIC := 1; prn : IN STD LOGIC := 1; ena : IN STD LOGIC; q : OUT STD LOGIC ); END COMPONENT; Собственно раздел PACKAGE может быть размещен в одном файле с entities. То-же самое относится и к части 6 AHDL-файла - Function Prototype Statement. Вместо декларирования прототипа функции, принятого в AHDL, в VHDL объявляется компонент, так, как указано выше. 3.Выделим часть 3 AHDL-файла, в которой описываются константы, применяемые для данного файла - Constant Statement. В VHDL константы желательно размещать в конструкции PACKAGE. Выражение из AHDL-файла, например: CONSTANT DATA WIDTH = Data width; заменяем на выражение для VHDL, при этом необходимо учесть тип данных константы: constant constant name : type := value; 4.Выделим часть 4 AHDL-файла, в которой описываются параметры, применяемые для данного файла - Parameters Statement. В VHDL настраиваемые параметры Entity имеют название GENERIC и инициализируются при использовании компонента. Выражение из AHDL-файла, например: PARAMETERS ( Data width = 32, Data len = 8 ); заменяем на выражение для VHDL, при этом необходимо учесть тип данных параметров. Для VHDL параметры могут относиться ко всему файлу, тогда они связаны с ENTITY и выглядят, например, так: ENTITY Adder IS GENERIC - Interface constants, can be modified by configuration (MaxValue g : integer := 255); PORT (A : in Integer range 0 to MaxValue g; B : in Integer range 0 to MaxValue g; Y : out Integer range 0 to MaxValue g); END ENTITY Adder; 5.Выделим часть 8 AHDL-файла, Assert Statement, в которой описываются сообщения, выдаваемые при компиляции файла. Выражение из AHDL-файла, например: ASSERT REPORT « CNT WIDTH равен - %, DATAB WIDTH равно - %» CNT WIDTH, DATAB WIDTH SEVERITY INFO; заменяем на выражение для VHDL, при этом необходимо учесть тип данных, которые проверяются в выражении ASSERT, например вот так: ASSERT A s = 1 REPORT «A s /= 1, it is « & Bit2Strg c(A s) SEVERITY NOTE; При этом параметр после SEVERITY определяет уровень сообщения (NOTE, ERROR или другие), которое генерируется при выполнении команды ASSERT, что позволяет, настроив симулятор необходимым образом, либо выдать сообщение, указывающее пользователю о том, что при заданном условии команда ASSERT выполнилась, либо остановить симуляцию, если выполнение команды ASSERT происходит при возникновении ошибки. 6.Выделим часть 9 AHDL-файла, Subdesign Section, в которой описывается название проекта, например: SUBDESIGN design name ( clk, .); и заменим эту часть на соответствующее выражение в VHDL: ENTITY entity name IS GENERIC(.); PORT( input name, input name : IN STD LOGIC; input vector name: IN STD LOGIC VECTOR ( high downto low); bidir name, bidir name : INOUT STD LOGIC; output name, output name : OUT STD LOGIC); END entity name; И, далее, добавим следующую часть кода, описывающего архитектуру:
8. Выделим часть 10 AHDL-файла, Variable Section, в которой описываются переменные для данного проекта, например:
и т. д. Поступаем следующим образом: А.То, что в AHDL-файле называлось NODE, теперь назовем SIGNAL и поместим либо в ARCHITECTURE (см. п. 7), либо вынесем в отдельный файл PACKAGE. Это позволит уменьшить объем основного файла проекта. Б. Библиотечные и «самодельные» компоненты в VHDL заменяются декларированием соответствующего компонента. Пример файла PACKAGE.
Если компонент имеет параметры, тогда он
В. Несколько сложнее обстоит дело с декларацией сигналов статических автоматов. Компоненты и технологии, № 12003 Вот часть кода, описывающего работу статического автомата: type State Typ is (RST, RedOn, YelOn, GrnOn); signal State s : State Typ; begin Explicit Lbl : process begin wait until Clkevent and Clk = 1; if Reset = 1 and State s = GrnOn then Red <= 0; Yellow <= 0; Green <= 0; State s <= RST; elsif Reset = 0 and (State s = RST or State s = GrnOn) then Red <= 1; Yellow <= 0; Green <= 0; State s <= RedOn; elsif State s =..... end if; end process Explicit Lbl; end Explicit a; Как видно из приведенного примера, необходимо указать тип данных для сигнала State s и перечислить те состояния, которые он принимает. 9.В части AHDL-файла, называемой Logic Section, могут находиться выражения If Generate Statement. Данная часть AHDL-файла аналогична следующему выражению в VHDL: generate label: IF expression GENERATE statement; END GENERATE; 10.В части AHDL-файла, называемой Logic Section, могут находиться булевы выражения типа: node name = node name & node name; node name = node name # node name; node name = node name $ node name; из AHDL заменяются в VHDL на следующие выражения для сигналов: sygnal name <= sygnal name AND sygnal name; sygnal name <= sygnal name OR sygnal name; sygnal name <= sygnal name XOR sygnal name; а для переменных аналогичные выражения будут выглядеть так: variable name := variable name AND variable name; variable name := variable name OR variable name; variable name := variable name XOR variable name; 11.В части AHDL-файла, называемой Logic Section, могут находиться выражения «IF - THEN». Выражение из AHDL «IF - THEN» выглядит следующим образом: IF expression 1 THEN statement 1; ELSIF expression 2 THEN statement 2; ELSE statement 3; END IF; В AHDL данное выражение заставляет выполняться выражения statement 1, state-ment 2 или statement 3 только в зависимо- сти от выполнения или невыполнения условий expression 1 или expression 2. В VHDL выражение «IF - THEN» имеет несколько иное значение, чем в AHDL, поэтому аналогом данного выражения в VHDL будет являться выражение, называемое Concurrent signal: label: signal <= expression WHEN boolean expression ELSE expression WHEN boolean expression ELSE expression; Если речь идет об обработке сигналов «внутри» выражения PROCESS:
то тогда возможно применение выражения «IF expression THEN», такого же вида, что и в AHDL. Отличия будут только в выражении expression. В AHDL все переменные NODE имеют один и тот же тип данных, который можно сопоставить с типом данных SYGNAL в VHDL. Назовем сигнал, который будет проверяться в выражении «IF expression THEN», именем my sygnal и проверим его на соответствие высокому уровню. Выражение в AHDL будет выглядеть так: IF my sygnal = = 1 THEN Поскольку в AHDL имеется только один тип данных для сигналов, и при проверке сигнала ему автоматически приписывается значение True в том случае, если данный сигнал имеет высокий уровень, выражение может выглядеть и так: IF my sygnal THEN Для VHDL имеется несколько типов данных, поэтому для данных типа SYGNAL выражение будет выглядеть так: IF my sygnal = 1 THEN а для данных типа BOOLEAN выражение будет выглядеть так: IF my bool THEN 12. В части AHDL-файла, называемой Logic Section, могут находиться выражения CASE. Выражение CASE в AHDL: CASE expression IS WHEN constant value => statement; statement; WHEN OTHERS => statement; statement; END CASE; аналогично выражению «IF - THEN», для выражения CASE могут быть применены те же самые правила. Если это выражение не входит в какое-либо выражение PROCESS (см. объявление PROCESS выше), то такое выражение AHDL заменяется на выражение VHDL, называемое Selected signal: label: WITH expression SELECT signal <= expression WHEN constant value, expression WHEN constant value, expression WHEN constant value, Если речь идет об обработке сигналов «внутри» выражения PROCESS, то тогда аналогично изложенному выше применяется функция «CASE expression IS» такого же вида, что и в AHDL. 13. В части AHDL-файла, называемой Logic Section, могут находиться выражения, называемые таблицами истинности. Выражение из AHDL, соответствующее таблице истинности, выглядит следующим образом:
Данному выражению нет прямой аналогии в VHDL, поэтому необходимо воспользоваться выражениями типа Concurrent signal, «IF - THEN» или CASE, в зависимости от того, входит ли таблица истинности в выражение PROCESS или нет. Заключение Языки AHDL и VHDL относятся к одной группе языков описания аппаратуры. Именно поэтому большую часть выражений языка AHDL можно перевести непосредственно в выражения языка VHDL. Однако полного соответствия между выражениями в этих двух языках, к сожалению, нет. Поэтому часть выражений языка AHDL, которым нет прямой аналогии в VHDL, придется перерабатывать в аналогичные по смыслу конструкции языка VHDL. Поскольку VHDL по отношению к AHDL является языком более высокого уровня, то необходимо также учитывать и дополнительные факторы, такие как, например, разные типы данных, отличия в описании статических автоматов и др. Однако достаточно хотя бы один раз преодолеть все эти трудности, чтобы потом сказать: «от AHDL до VHDL всего один шаг».МММ Литература 1.Глеб Варфоломеев. Проектирование в системе Max+Plus II: VHDL против AHDL «Компоненты и Технологии». 2002. № 7. 2.Ben Cohen. VHDL Coding Styles and Methodologies. Second Edition. Kluwer academic publishers. Boston-Dordrecht-London. 1999. имя автора - Иосиф Каршенбойм Сайт автора - www.iosifk.narod.ru Сайт журнала - www.kit-e.ru |
Среды: Smalltalk80 MicroCap Local bus Bios Pci 12С ML Микроконтроллеры: Atmel Intel Holtek AVR MSP430 Microchip Книги: Емкостный датчик 500 схем для радиолюбителей часть 2 (4) Структура компьютерных программ Автоматическая коммутация Кондиционирование и вентиляция Ошибки при монтаже Схемы звуковоспроизведения Дроссели для питания Блоки питания Детекторы перемещения Теория электропривода Адаптивное управление Измерение параметров Печатная плата pcad pcb Физика цвета Управлении софтверными проектами Математический аппарат Битовые строки Микроконтроллер nios Команды управления выполнением программы Перехода от ahdl к vhdl Холодный спай Усилители hi-fi Электронные часы Сердечники из распылённого железа Анализ алгоритмов 8-разрядные КМОП Классификация МПК История Устройства автоматики Системы и сети Частотность Справочник микросхем Вторичного электропитания Типы видеомониторов Радиобиблиотека Электронные системы Бесконтекстный язык Управление техническими системами Монтаж печатных плат Работа с коммуникациями Создание библиотечного компонента Нейрокомпьютерная техника Parser Пи-регулятор ч.1 ПИ-регулятор ч.2 Обработка списков Интегральные схемы Шина ISAВ Шина PCI Прикладная криптография Нетематическое: Взрывной автогидролиз Нечеткая логика Бытовые установки (укр) Автоматизация проектирования Сбор и защита Дискретная математика Kb радиостанция Энергетика Ретро: Прием в автомобиле Управление шаговым двигателем Магнитная запись Ремонт микроволновки Дискретные системы часть 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||