Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: VHDL в QUARTUS для очень начинающего
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
_Ie0nid
Здравствуйте. Совсем отчаялся разобраться в этом языке. Сколько есть у меня книжек, все не дают достаточного понимания в программировании VHDL. Помогите пожалуйста разобраться на простых примерах. Например на AHDL можно составить элемент написав таблицу истинности, покажите как это сделать на VHDL. Желательно в quartus, чтобы не добавлять в мое незнание дополнительных переменных.
Может у кого любимые книжки по этой теме, я буду только благодарен.
Заранее спасибо.
Methane
Цитата(_Ie0nid @ Aug 18 2010, 06:25) *
Здравствуйте. Совсем отчаялся разобраться в этом языке. Сколько есть у меня книжек, все не дают достаточного понимания в программировании VHDL. Помогите пожалуйста разобраться на простых примерах. Например на AHDL можно составить элемент написав таблицу истинности, покажите как это сделать на VHDL. Желательно в quartus, чтобы не добавлять в мое незнание дополнительных переменных.
Может у кого любимые книжки по этой теме, я буду только благодарен.
Заранее спасибо.

Просто в гугле все ищется.
http://en.wikipedia.org/wiki/VHDL
Создать элемент, написав таблицу истинности, можно через case, но какой-то подход не правильный. Обычно просто что надо описывается и все.
XVR
Цитата
Например на AHDL можно составить элемент написав таблицу истинности, покажите как это сделать на VHDL.
Это можно сделать на Verilog'е - там есть специальная конструкция. Но делать этого не надо - не все (мягко говоря) синтезаторы эту конструкцию поддерживают smile.gif
_Ie0nid
Здравствсуйте. Хорошо, давайте другой пример.
1. В прикрпеленном файле реализован пример простого D тригера из книжки, компилятор выдал ошибки можете сказать в чем дело?
2. На пальцах может кто ни будь объяснить что делает оператор EVENT?
3. В книжке описаны объявление типов. что означают std_logic и std_logic_vector
Заранее благодарю.
andrew_b
Цитата(_Ie0nid @ Aug 19 2010, 06:41) *
1. В прикрпеленном файле
Имейте совесть и немного уважения к другим. Лично я не буду смотреть рисунок размером в 4 без малого мегабайта.

Цитата
2. На пальцах может кто ни будь объяснить что делает оператор EVENT?
'event --это не оператор, а атрибут сигнала. Он возвращает true, если с сигналом в данный момент времени произошло любое изменение. Например, сигнал перешёл из нулевого состояния в единичное.

Цитата
3. В книжке описаны объявление типов. что означают std_logic и std_logic_vector
Это основные типы стандартной библиотеки VHDL, описанные в пакете std_logic_1164. В той же книжке они должны быть описаны.
Вкратце, std_logic -- это перечислимый тип, имеющий 9 состояний. Позволяет описывать не только логические уровни '0' и '1', но и третье (высокоимпедансное) состояние 'Z', конфликт сигналов 'X', неинициализированный сигнал 'U' и др. std_logic_vector -- это массив элементов std_logic.
_Ie0nid
//Andrey_B
//Имейте совесть и немного уважения к другим. Лично я не буду смотреть рисунок размером в 4 без малого мегабайта.
Хорошо, давайте вот так:
library IEEE;
use IEEE.std_logic_1164.all;
entity element001 is
port(DATA,CLK: in std_logic;
Q:out std_logic);
end element001;
architecture element001_ARCH of element001 is
begin
process (CLK)
begin
if CLK `event and CLK = `1` then
Q<=DATA;
end if;
end process;
end element001_ARCH;

Error (10500): VHDL syntax error at element001.vhd(12) near text `
Error (10500): VHDL syntax error at element001.vhd(12) near text "`"; expecting "then"
Error (10500): VHDL syntax error at element001.vhd(14) near text "if"; expecting "process"
Stewart Little
if CLK `event and CLK = `1` then - это условие нарастающего фронта сигнала (т.е. ожидаем изменения сигнала CLK, после которого этот сигнал принимает значение логической единицы).
А по поводу ошибок - проверяйте синтаксис.
Еще рекомендую почитать "The VHDL Cookbook" Питера Ашендена - эта книжка валяется где-то в закромах.
sazh
Цитата(_Ie0nid @ Aug 19 2010, 08:48) *
if CLK `event and CLK = `1` then


Код
if (clk'event and clk = '1') then


А по поводу языка. После AHDL Вам verilog в помощь.
VHDL - это язык преподавателей вузов. Они редко схемные решения описывают для реального железа.
Скачайте с сайта xilinx документ xst.pdf, там на примере графического примитива на обоих языках приведено текстовое описание
andrew_b
Цитата(sazh @ Aug 19 2010, 10:19) *
VHDL - это язык преподавателей вузов.
Давайте уже не будем, а?
_Ie0nid
Извините, но скобки не совсем помогли, осталось две ошибки, кто знает в чем дело?
sazh
Цитата(_Ie0nid @ Aug 19 2010, 11:57) *
Извините, но скобки не совсем помогли, осталось две ошибки, кто знает в чем дело?


Вы скопировали мою строчку, или только скобки поставили.
Можно без скобок. исправив ошибку
'` это разные символы
_Ie0nid
Цитата(sazh @ Aug 19 2010, 12:15) *
Вы скопировали мою строчку, или только скобки поставили.
Можно без скобок. исправив ошибку
'` это разные символы

УРА!!! ЗАРРАБОТАЛО!! Большое спасибо.
А можете мне сказать, что эти кавычки вообще означают, почему там одна, а там две? в книжке этого нет.
andrew_b
Цитата(_Ie0nid @ Aug 20 2010, 05:59) *
там одна, а там две?
Где?
Stewart Little
Цитата(_Ie0nid @ Aug 20 2010, 05:59) *
УРА!!! ЗАРРАБОТАЛО!! Большое спасибо.
А можете мне сказать, что эти кавычки вообще означают, почему там одна, а там две? в книжке этого нет.

В какой книжке?
Апострофы используются для задания значения сигнала, а двойные кавычки - для задания значения вектора.
_Ie0nid
Цитата(Stewart Little @ Aug 20 2010, 10:43) *
В какой книжке?
Апострофы используются для задания значения сигнала, а двойные кавычки - для задания значения вектора.

Извините за низкий интелект, теперь я окончательно запутался.
1. Вот это апостроф - `, или вот это тоже апостроф - '.
2. Вот такая запись if CLK ' event, почему нельзя записать типа CLK=event, или этот одиночный апостроф и имеет значения "=" в данном случае.
3. CLK = '1', почему значение сигнала, логическая еденица, взята в двойные апострофы, это такой синтаксис, все логические значения должны быть в апострофах.
4. Что такое значение вектора (если для меня это еще слишком рано, можете не отвечать).
Заранее Благодарю.
Stewart Little
Цитата(_Ie0nid @ Aug 20 2010, 12:20) *
Извините за низкий интелект, теперь я окончательно запутался.
1. Вот это апостроф - `, или вот это тоже апостроф - '.
2. Вот такая запись if CLK ' event, почему нельзя записать типа CLK=event, или этот одиночный апостроф и имеет значения "=" в данном случае.
3. CLK = '1', почему значение сигнала, логическая еденица, взята в двойные апострофы, это такой синтаксис, все логические значения должны быть в апострофах.
4. Что такое значение вектора (если для меня это еще слишком рано, можете не отвечать).
Заранее Благодарю.

1. Апостроф - '
2. Потому, что event - это атрибу сигнала CLK, а не присваивание. CLK'event - это "единая сущность", означающая любые изменения сигнала CLK
3. Это не двойные апострофы. Значение одиночного сигнала заключается в апострофы, к примеру '1' , '0', 'Z' и т.д.
4. Векторы - это многоразрядные сигналы (ну или шины), их значения заключаются в двойные кавычки : "0000", "01011001" и т.д.
Короче, читайте литературу, и не морочьте голову. Языки описания аппаратуры "ковбойским наскоком" не изучаются.
_Ie0nid
За книжку большое спаисибо. Хотя, надо признаться, у меня книжек такого плана уже целый килограмм.
Вопрос по теме. Есть пример в котором есть такая запись S = "01", ну и другие условия S = "10", и так далее. КТо сможет подсказать, как такой элемент должен выглядеть в квартусе. Это два вывода S1 и S2, или как то по другому. Заранее благодарю.
DSIoffe
Когда я переходил с AHDL на VHDL, мне очень помогла книга Дж.Ф.Уэйкерли "Проектирование цифровых устройств". Там про VHDL по сравнению со всем объёмом книги написано немного, но самое основное и очень понятно, можно сразу начинать работать. Здесь на форуме уже кто-то давал ссылку.
Fynjisx
Цитата(_Ie0nid @ Aug 23 2010, 07:39) *
Хотя, надо признаться, у меня книжек такого плана уже целый килограмм.

Если книжек уйма и все равно не можете понять что такое VHDL, то это сигнал к тому, что пора менять парадигму изучения...
Вообще, лично для меня, если всё читать то можно с ума сойти...Поэтому дам совет- ключ, как постичь это язык... Для начала нужно ознакомиться с цифровой техникой вообще, понять из чего она состоит, из каких кирпичиков. Изучить и комбинационные и последовательностные компоненты(это логические элементы и элементы памяти - триггеры)... Короче если вы смотжете ответить на вопрос что такое счетчик, или дешифратор или сумматор и т.д и более того, как каждый элемент работает, вот только тогда можно двигаться дальше...А дальше это просто... Смотрните какому VHDL описанию соответствует, каждый цифровой элемент...В самом простом случае - запоминаете...И вот тогда что-то начнет проясняться в голове...Уж поверьте...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.