Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Программируемая логика

Программируемая логика FPGA, CPLD

Ответ
 
Опции темы Опции просмотра
Старый 25.03.2009, 13:58   #1
Romantic
Senior Member
 
Аватар для Romantic
 
Регистрация: 13.07.2007
Адрес: Ленинград
Возраст: 33
Сообщений: 2,091
Вес репутации: 3340/94
Romantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond reputeRomantic has a reputation beyond repute
По умолчанию Связать функции в Quartus

Доброго времени суток, Уважаемые!

Возник вопрос о том, как связать функции в программе, написанной на Verilog. Если все действия запихиваются в основную функцию, проблем не возникает. Они появляются, когда требуется создать функции для выполнения однотипных операций. За основу взят пример из книги. По отдельности всё работает, при совместной компиляции функции игнорируются.

Может, я чего не понимаю? Подскажите, умудрённые, буду бесконечно благодарен!
Romantic вне форума   Ответить с цитированием
Старый 26.03.2009, 15:01   #2
Wagir
Junior Member
 
Регистрация: 26.03.2009
Возраст: 32
Сообщений: 19
Вес репутации: 99/0
Wagir will become famous soon enough
По умолчанию Ответ: Связать функции в Quartus

Во-Во! Кто что-нибудь слыхивал на сей счет прошу поделиться опытом.
P.S
Romantic, привет тебе с Новатора!
Wagir вне форума   Ответить с цитированием
Старый 28.03.2009, 00:30   #3
igor_tgru
Senior Member
 
Аватар для igor_tgru
 
Регистрация: 25.02.2007
Возраст: 45
Сообщений: 684
Вес репутации: 1421/62
igor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud of
По умолчанию Re: Связать функции в Quartus

а поподробней что имеется ввиду
igor_tgru вне форума   Ответить с цитированием
Старый 28.03.2009, 11:27   #4
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 52
Сообщений: 400
Вес репутации: 330/45
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: Связать функции в Quartus

Покажи небольшой примерчик.
Iptash вне форума   Ответить с цитированием
Старый 28.03.2009, 22:11   #5
igor_tgru
Senior Member
 
Аватар для igor_tgru
 
Регистрация: 25.02.2007
Возраст: 45
Сообщений: 684
Вес репутации: 1421/62
igor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud of
По умолчанию Re: Связать функции в Quartus

примерчик чего ? того как связываются модули ?

например так

Код:
 
wire [2:0] countpixel;
wire [6:0] Cur_chrX; 
wire [5:0] Cur_chrY; 
wire [3:0] Cur_lin_chr;
wire flash;
wire cursor_flash;
wire inDisplayArea;
hvsync_640x480 hvsync_640x480
(
.clk (clk_25),
.RESET (1),
.countpixel (countpixel[2:0]),
.Cur_chrX (Cur_chrX[6:0]), 
.Cur_chrY (Cur_chrY[5:0]),
.Cur_lin_chr (Cur_lin_chr[3:0]),
.flash (flash),
.cursor_flash (cursor_flash),
.inDisplayArea (inDisplayArea),
.VGA_VS (vs),
.VGA_HS (hs)
 
);
если это имеется ввиду
igor_tgru вне форума   Ответить с цитированием
Старый 28.03.2009, 23:32   #6
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 52
Сообщений: 400
Вес репутации: 330/45
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: Связать функции в Quartus

Да нет. Вопрос был адресован для Romantic.Попрсил что-бы показал,
что не получается. Извени, что не цетировал.
Iptash вне форума   Ответить с цитированием
Старый 31.03.2009, 14:16   #7
Wagir
Junior Member
 
Регистрация: 26.03.2009
Возраст: 32
Сообщений: 19
Вес репутации: 99/0
Wagir will become famous soon enough
По умолчанию Re: Связать функции в Quartus

Братцы, добрый день! Romantic задавал вопрос от моего имени.
У меня возник такой косяк. Иерархический проект, писанный на Verilog, ни получался. Т. е. модули по отдельности определены, но объединения между ними не было. Покопавшись некоторое время, я пришел к выводу, что, скорее всего, причина была в том, что имя самой верхней в иерархии функции, должно совпадать с именем файла, в котором она хранится.
Если кому-нибудь интересно, то вот счетчик, который я "написал" и который теперь работает в отладчике:

// Верхний уровень иерархии
module Counter_4 (q, c);
output [3:0] q;
input c;
wire net_0, net_1, net_2, net_3;

d_ff dff0 (q[0], net_0, net_0, c); // 0-й разряд счетчика
d_ff dff1 (q[1], net_1, net_1, q[0]); // 1-й
d_ff dff2 (q[2], net_2, net_2, q[1]); // 2-й
d_ff dff3 (q[3], net_3, net_3, q[2]); // 3-й
endmodule

// Нижний уровень иерархии
module d_ff (q, nq, data, clock);
output q, nq;
input data, clock;
reg q;

always @(posedge clock)
q = data;
not (nq, q);
endmodule

Wagir вне форума   Ответить с цитированием
Старый 31.03.2009, 14:32   #8
Wagir
Junior Member
 
Регистрация: 26.03.2009
Возраст: 32
Сообщений: 19
Вес репутации: 99/0
Wagir will become famous soon enough
По умолчанию Re: Связать функции в Quartus

Однако, развивая тему, хочу также спросить:
У меня возникли проблемы с шитьем Альтеры. Ту программу, что вы, уважаемые, лицезрели выше я в нее (EPM7256SRI208-10) загрузил.
Однако проект, прекрасно работающий в отладчике, в железе выдает какуюто хрень. Вместо деления входной частоты /2, /4, /8, /16 я имею на выходах отдельно проскакивающие беспорядочные импульсы длительностью 2Т.
Wagir вне форума   Ответить с цитированием
Старый 31.03.2009, 17:03   #9
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 39
Сообщений: 3,251
Вес репутации: 3684/110
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Связать функции в Quartus

Цитата:
Сообщение от Wagir Посмотреть сообщение
Однако, развивая тему, хочу также спросить:
У меня возникли проблемы с шитьем Альтеры. Ту программу, что вы, уважаемые, лицезрели выше я в нее (EPM7256SRI208-10) загрузил.
Однако проект, прекрасно работающий в отладчике, в железе выдает какуюто хрень. Вместо деления входной частоты /2, /4, /8, /16 я имею на выходах отдельно проскакивающие беспорядочные импульсы длительностью 2Т.
может частоты большие? клоки лучше на специальные входы заводить, а счетчики делать не на каскадировании триггеров, а с синхронной перезагрузкой выход -> вход!
С симулятором тоже надо уметь работать, можно в настройках входные клоки и их частоты задать, тогда симуляция временных интервалов будет более- менее точной. Может в настройках проекта выбрана самая быстрая микросхема, а в железе стоит самая медленная (ибо стоит в несколько раз дешевле ) - вот и косяки.
IceS вне форума   Ответить с цитированием
Старый 31.03.2009, 17:16   #10
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 39
Сообщений: 3,251
Вес репутации: 3684/110
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Связать функции в Quartus

Цитата:
Сообщение от Wagir Посмотреть сообщение

d_ff dff0 (q[0], net_0, net_0, c); // 0-й разряд счетчика
d_ff dff1 (q[1], net_1, net_1, q[0]); // 1-й
d_ff dff2 (q[2], net_2, net_2, q[1]); // 2-й
d_ff dff3 (q[3], net_3, net_3, q[2]); // 3-й
Вот это то, о чем я говорил, так лучше не делать!
Представьте что 3й триггер будет около входного клока, а 0й - около выходного сигнала (ну так фиттер раскидает , почему он это может сделать - другой вопрос, конечно в данном случае он может раскидать правильно, а завтра будет другой проект и там он решит, что так ему удобнее). И вот ваш вроде не большой (каких-то 20 мегагерц) сигнал идет сначала на другой конец кристалла, чтобы быть поделенным на 2 потом (через промежуточные цепи) возвращается к началу (где уже делится на 16) и оттуда опять в конец - чтобы выйти наружу. Из-за времен распространения сигнала у вас будет запаздывание, т.е. будет не "мгновенное" переключение 0xF > 0x0, а через несколько промежуточных состояний: 0xF > 0xE> 0xC > 0x8 > 0x0, а может быть и хитрее, если промежуточные сигналы раньше выходят из микрухи или используются в промежуточной логике - постоянно будут глитчи вылезать.
В общем для счетчиков есть библиотечный компонент lpm_counter - уже готовый, лучше им пользоваться, и оптимизируются библиотечные компоненты лучше самописных.
IceS вне форума   Ответить с цитированием
Старый 31.03.2009, 19:08   #11
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 52
Сообщений: 400
Вес репутации: 330/45
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: Связать функции в Quartus

Честно говоря как то запутанно у вас программа написана.
Во первых в модуле d_ff у вас 'q' выход и в тоже время 'q' определена
как внутренняя рег. переменная.
Во вторых у вас 'data' является input, а 'nq' output, а в основном модуле
допустим net_0 включена и там и там. Может не понятно объяснил, но
проверь сам. Я конечно не программирую в Verilog, но если счетчик
просто, то наверное вот так:
Код:
module Counter_4 (q, c);
output [3:0] q;
input c;
  always@(posedge c)
          q = q+1;
endmodule
Iptash вне форума   Ответить с цитированием
Старый 31.03.2009, 21:09   #12
igor_tgru
Senior Member
 
Аватар для igor_tgru
 
Регистрация: 25.02.2007
Возраст: 45
Сообщений: 684
Вес репутации: 1421/62
igor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud of
По умолчанию Re: Связать функции в Quartus

Цитата:
Сообщение от Wagir Посмотреть сообщение
Если кому-нибудь интересно, то вот счетчик, который я "написал" и который теперь работает в отладчике:

Код:
 
// Верхний уровень иерархии
module Counter_4 (q, c);
output [3:0] q;
input c;
wire net_0, net_1, net_2, net_3;
 
d_ff dff0 (q[0], net_0, net_0, c); // 0-й разряд счетчика
d_ff dff1 (q[1], net_1, net_1, q[0]); // 1-й
d_ff dff2 (q[2], net_2, net_2, q[1]); // 2-й
d_ff dff3 (q[3], net_3, net_3, q[2]); // 3-й 
endmodule
// Нижний уровень иерархии
module d_ff (q, nq, data, clock);
output q, nq;
input data, clock;
reg q;
always @(posedge clock)
q = data;
not (nq, q);
endmodule
полагаю что подключение модулей хоть по синтаксису и верное но всетаки так делать имхо нестоит лучше посмотрите на то как я это делаю несколькими постами выше , тоесть говорю какой сигнал в нижнем модуле подключается к сигналу в вышестояшем модуле в вашем случае это будет как то вот так:

Код:
 
d_ff dff0 (
.q (q[0]), 
.nq (net_0), 
.data (net_0), 
.clock (c)
); // 0-й разряд счетчика
и я бы конечно вместо = использовал бы <= , ну и как правильно тут заметили счетчик может быть описан более примитивно .

Последний раз редактировалось igor_tgru; 31.03.2009 в 22:07.
igor_tgru вне форума   Ответить с цитированием
Старый 01.04.2009, 10:41   #13
Wagir
Junior Member
 
Регистрация: 26.03.2009
Возраст: 32
Сообщений: 19
Вес репутации: 99/0
Wagir will become famous soon enough
По умолчанию Re: Связать функции в Quartus

Друзья, большое спасибо за советы! Почерпнул много полезного.
Хочу прокоментировать свой "прожект".
Я этот счетчик оптимальным и не хотел делать. Мне, на этапе изучения, важно понять базовые принцыпы программирования в Verilog (в частности как строится иерархическая структура). Именно поэтому я применил 4 каскада D-триггеров, описанных в нижнем уровне. (Это было первое, что пришло тогда в голову )
Частоты, которые я подаю в Альтеру на мой счетный вход С составляют ~2 кГц, поэтому о быстродействии я даже не задумывался.
Wagir вне форума   Ответить с цитированием
Старый 01.04.2009, 10:52   #14
Wagir
Junior Member
 
Регистрация: 26.03.2009
Возраст: 32
Сообщений: 19
Вес репутации: 99/0
Wagir will become famous soon enough
По умолчанию Re: Связать функции в Quartus

Вопрос к IceS: что такое синхронная перезагрузка вход->выход и как она реализуется. Я в мире программируемой логики человек новый, и много чего еще не разумею.
Заранее благодарен.
Wagir вне форума   Ответить с цитированием
Старый 01.04.2009, 11:09   #15
Wagir
Junior Member
 
Регистрация: 26.03.2009
Возраст: 32
Сообщений: 19
Вес репутации: 99/0
Wagir will become famous soon enough
По умолчанию Re: Связать функции в Quartus

Для Iptash: 'q' выход и в тоже время 'q' определена
как внутренняя рег. переменная для того, чтобы назначит явно его значения (т.е эта величина сохраняется до тех пор, пока не сделано новое назначение). Как я понимаю, это нужно для правильной работы оператора always@.
P.S. Всю информацию черпаю из книги В.Б.Стешенко ПЛИС фирмы "ALTERA": элементная база, система проектирования и языки описания аппаратуры
Wagir вне форума   Ответить с цитированием
Старый 01.04.2009, 17:33   #16
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 52
Сообщений: 400
Вес репутации: 330/45
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: Связать функции в Quartus

Цитата:
Сообщение от Wagir Посмотреть сообщение
Для Iptash: 'q' выход и в тоже время 'q' определена
как внутренняя рег. переменная для того, чтобы назначит явно его значения (т.е эта величина сохраняется до тех пор, пока не сделано новое назначение). Как я понимаю, это нужно для правильной работы оператора always@.
P.S. Всю информацию черпаю из книги В.Б.Стешенко ПЛИС фирмы "ALTERA": элементная база, система проектирования и языки описания аппаратуры
Состояние 'q' и так не изменится до любого др. назначения. Можешь
проверить в Quartus или в др. симуляторе.
Почитай Полякова "Языки VHDL и VERILOG в проектировании цифровой
аппаратуры", или лучше стандарт IEEE Std 1364-2001.
Iptash вне форума   Ответить с цитированием
Старый 02.04.2009, 10:47   #17
Wagir
Junior Member
 
Регистрация: 26.03.2009
Возраст: 32
Сообщений: 19
Вес репутации: 99/0
Wagir will become famous soon enough
По умолчанию Re: Связать функции в Quartus

Iptash, большое спасибо за совет.
Wagir вне форума   Ответить с цитированием
Старый 03.04.2009, 18:00   #18
Wagir
Junior Member
 
Регистрация: 26.03.2009
Возраст: 32
Сообщений: 19
Вес репутации: 99/0
Wagir will become famous soon enough
По умолчанию Re: Связать функции в Quartus

Igor_tgru, вчера пробовал нсписать по-вашему образцу.
Компилятор все схавал, но вот железо продолжает упрямиться.
Принципиально на выходах ничего не изменилось, как были беспорядочные импульсы, так и остались.
Я уже другую альтеру взял (EPM7128SQC-100) но все одно.
Думаю, может с программатором чего. Есть ли у LPT-шного ByteBlaster-а ограничения на длину проводов? (просто у меня шнур JTAG длиной ~ 1м)
Wagir вне форума   Ответить с цитированием
Старый 03.04.2009, 20:47   #19
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 52
Сообщений: 400
Вес репутации: 330/45
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: Связать функции в Quartus

У меня шнур 1,2м. Проблем не было.
Iptash вне форума   Ответить с цитированием
Старый 03.04.2009, 20:54   #20
Iptash
Senior Member
 
Регистрация: 29.03.2008
Возраст: 52
Сообщений: 400
Вес репутации: 330/45
Iptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the roughIptash is a jewel in the rough
По умолчанию Re: Связать функции в Quartus

И еще. У EPM7... с буквой S, вроде свои особенности с программированием и стиранием или еще что-то. В даташите на эту
серию написано про это, почитай.
Iptash вне форума   Ответить с цитированием
Старый 06.04.2009, 11:50   #21
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 39
Сообщений: 3,251
Вес репутации: 3684/110
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: Связать функции в Quartus

Цитата:
Сообщение от Wagir Посмотреть сообщение
Igor_tgru, вчера пробовал нсписать по-вашему образцу.
Компилятор все схавал, но вот железо продолжает упрямиться.
Принципиально на выходах ничего не изменилось, как были беспорядочные импульсы, так и остались.
А вы пины назначили сигналам? Выходы там, входы? Это удобно делать в графическом редакторе.
На счет счетчика:
открываем квартус, лезем в меню Help\Index
там вводим слово Counter и нам для ознакомления предлагается пример создания счетчика на разных языках, AHDL, VHDL и на Verilog.
Учитесь пользоваться встроенным хелпом, он много чего подскажет.
IceS вне форума   Ответить с цитированием
Старый 06.04.2009, 12:09   #22
igor_tgru
Senior Member
 
Аватар для igor_tgru
 
Регистрация: 25.02.2007
Возраст: 45
Сообщений: 684
Вес репутации: 1421/62
igor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud ofigor_tgru has much to be proud of
По умолчанию Re: Связать функции в Quartus

Цитата:
Сообщение от Wagir Посмотреть сообщение
Igor_tgru, вчера пробовал нсписать по-вашему образцу.
Компилятор все схавал, но вот железо продолжает упрямиться.
Принципиально на выходах ничего не изменилось, как были беспорядочные импульсы, так и остались.
Я уже другую альтеру взял (EPM7128SQC-100) но все одно.
Думаю, может с программатором чего. Есть ли у LPT-шного ByteBlaster-а ограничения на длину проводов? (просто у меня шнур JTAG длиной ~ 1м)
Скажу чесно с max7000 я никогда не работал , а вообще имхо что бы выяснить в чем проблема стоит написать простой инвертор на выходе которого посадить светодиод а на вход повесить кнопку , этим вы проверите и правильность програмирования плиски и то как вы "привязываете" пины к сигналам .
igor_tgru вне форума   Ответить с цитированием
Старый 07.04.2009, 11:24   #23
Wagir
Junior Member
 
Регистрация: 26.03.2009
Возраст: 32
Сообщений: 19
Вес репутации: 99/0
Wagir will become famous soon enough
По умолчанию Re: Связать функции в Quartus

Братцы, благодарю за помощь!
IceS, я пины назначаю через Pin Planner. С помощью функции Node Finder.
Хочу сказать также, что я, отчаявшись, построил все тоже самое в редакторе Block Diagram, взяв готовый счетчик. Результат прежний...

Инвертер и D-триггер я примерно пол года назад на Verilog делал (в качестве первого шага к изучению языка) Все работало. Но с тех пор, волею судеб, я за это дело не брался и проект тот где-то похерил.
А теперь возникла острая необходимость в применении альтеры, и я остался с неприкрытым задом.
Wagir вне форума   Ответить с цитированием
Старый 07.04.2009, 11:30   #24
Wagir
Junior Member
 
Регистрация: 26.03.2009
Возраст: 32
Сообщений: 19
Вес репутации: 99/0
Wagir will become famous soon enough
По умолчанию Re: Связать функции в Quartus

А по поводу Help-a, отдельная галактического размера благодарность. Действительно, я не знал, что в Квартусе, примеры есть.
Wagir вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внешнее объявление функции. Mario Продукция MICROCHIP 7 15.01.2009 21:44
Вызов функции через указатель структуры petrd Вопросы начинающих 20 06.01.2009 01:47
Связать порты igorwdq Программируемая логика 3 23.12.2008 18:36


Часовой пояс GMT +3, время: 15:09.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot