sonycman 0 24 октября, 2015 Опубликовано 24 октября, 2015 · Жалоба Доброго времени суток! Недавно начал разбираться с ПЛИС, осваиваю потихоньку семейство небольших CPLD MachXO2. Возник вопрос к сообществу - как принято устанавливать дефолтные значения регистров данных внутри модулей (не массивов памяти)? Может, кто подскажет из тех, кто знаком с кристаллами от Лэттиса. К примеру, простой модуль: module counter_test( input CLK, input RESET_N, output reg [7:0] LEDS ); reg [20:0] counter; reg [7:0] leds = 8'd64; initial begin leds = 8'd64; end always @ (posedge CLK) begin counter <= counter + 21'd1; LEDS <= leds; end always @ (posedge counter[19] or negedge RESET_N) begin if (!RESET_N) begin leds <= 8'd64; end else begin leds <= leds + 8'd1; end end endmodule Строка с инициализацией: reg [7:0] leds = 8'd64; и блок initial не синтезируются, к сожалению :( Остаётся вариант со сбросом на начальные значения по внешнему сигналу RESET_N, если вывести его на ножку чипа. Но всё же хотелось бы использовать внутренние ресурсы, мне сброс не нужен как таковой, нужна только начальная установка после подачи питания. Хотел использовать внутренние сигналы GSR и PUR, но не пойму, как их задействовать, чтобы сработала ветка модуля по входу RESET_N? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qwa 0 24 октября, 2015 Опубликовано 24 октября, 2015 · Жалоба Строка с инициализацией: reg [7:0] leds = 8'd64; и блок initial не синтезируются, к сожалению :( Вообще,подобные конструкции нужны только для симуляции.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 24 октября, 2015 Опубликовано 24 октября, 2015 · Жалоба Вообще,подобные конструкции нужны только для симуляции.... Я уже понял, однако в Квартусе, говорят, синтезируются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qwa 0 24 октября, 2015 Опубликовано 24 октября, 2015 · Жалоба Я уже понял, однако в Квартусе, говорят, синтезируются? Синтезируется. И в ISE тоже. Это или их особая фишка, или нововведение какое-то - в книжке 2004 года по VHDL сказано,что такая конструкция не синтезируется :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 24 октября, 2015 Опубликовано 24 октября, 2015 · Жалоба В общем, насколько я понял, в случае MachXO2 для установки всех ненулевых регистров придётся выделять отдельный пин на корпусе, вешать на него кондёр и подтяжку резистором. И уже с него заводить внутрь сигнал сброса. Это при том, что мне нафиг не нужен внешний сброс... Вот шняга то :( Получается определить входной сигнал сброса в топ модуле, и синтезатор вешает на него глобальный сброс GSR. Но роутер выводит этот сигнал на пин на корпусе кристалла, даже когда он не задан в .lpf файле - на первый попавшийся свободный пин. Можно ли как-то запретить роутеру выводить этот сигнал наружу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 25 октября, 2015 Опубликовано 25 октября, 2015 · Жалоба В общем, насколько я понял, в случае MachXO2 для установки всех ненулевых регистров придётся выделять отдельный пин на корпусе, вешать на него кондёр и подтяжку резистором. И уже с него заводить внутрь сигнал сброса. Это при том, что мне нафиг не нужен внешний сброс... Вот шняга то :( Получается определить входной сигнал сброса в топ модуле, и синтезатор вешает на него глобальный сброс GSR. Но роутер выводит этот сигнал на пин на корпусе кристалла, даже когда он не задан в .lpf файле - на первый попавшийся свободный пин. Можно ли как-то запретить роутеру выводить этот сигнал наружу? Можно создать сдвиговый регистр, который после конфигурирования устанавливается в ноль, и к старшему биту этого регистра подключить инверсный сброс. После загрузки конфигурации в регистр задвигаются единицы, после чего сброс завершится. Ведь клок для сдвигового регистра какой-то у вас будет, хотя бы внутренний осциллятор. Триггеры можно в крайнем случае задать с помощью примитивов из стандартной библиотеки Lattice, и, кстати, насчёт MachXO не уверен, а для ECP можно создавать триггеры, которые стартуют с единицы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 25 октября, 2015 Опубликовано 25 октября, 2015 · Жалоба Можно создать сдвиговый регистр, который после конфигурирования устанавливается в ноль, и к старшему биту этого регистра подключить инверсный сброс. Ага, спасибо, сегодня уже делал похожий блок сброса, на счётчике, правда. Работает, но тогда надо отключать фишку под именем GSR, что не очень хорошо, как я понимаю. Вот почему бы примитив под этот внутренний сброс GSR лэтисовцам не сделать с назначаемым выходом? А то вход сделали, который не всегда нужен, а выхода сброса почему то нет, надо надеятся на автоматику, которая сама должна найти в схеме асинхронный сброс и подсоединиться к нему, что она делает не всегда так, как хотелось бы... ЗЫ: посмотрел в квартусе, как альтера реализует в синтезе начальную установку - дополнительной логикой, ставятся инверторы для битов, установленных как бы в единички. Наворочено! Смотрится всё потом весьма громоздко, конечно. ЗЗЫ: никто не знает, есть ли в мире форум по Лэттисам, подобие альтеровского? На офф. сайте вроде нет, хотя раньше что-то было, как я понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 25 октября, 2015 Опубликовано 25 октября, 2015 · Жалоба Ага, спасибо, сегодня уже делал похожий блок сброса, на счётчике, правда. Работает, но тогда надо отключать фишку под именем GSR, что не очень хорошо, как я понимаю. Вот почему бы примитив под этот внутренний сброс GSR лэтисовцам не сделать с назначаемым выходом? А то вход сделали, который не всегда нужен, а выхода сброса почему то нет, надо надеятся на автоматику, которая сама должна найти в схеме асинхронный сброс и подсоединиться к нему, что она делает не всегда так, как хотелось бы... Для генератора сброса можно индивидуально отключить GSR, либо атрибутом, либо использовав для него примитивы без GSR. А реализован GSR действительно очень извращённо. На самом деле вы можете сами присоединить вход примитива GSR к своему сигналу управляющему общим сбросом, тогда точно именно он будет работать через GSR, однако при этом в настройках симплифая GSR всё равно должен быть включён. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksim.maneyev 0 26 октября, 2015 Опубликовано 26 октября, 2015 · Жалоба Синтезируется. И в ISE тоже. Это или их особая фишка, или нововведение какое-то - в книжке 2004 года по VHDL сказано,что такая конструкция не синтезируется :laughing: В Даймонде для XO2 синтезируется начиная с версии 3.5 (для VHDL проверено и работает). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 27 октября, 2015 Опубликовано 27 октября, 2015 · Жалоба В Даймонде для XO2 синтезируется начиная с версии 3.5 (для VHDL проверено и работает). Ну а для Verilog нифига не синтезируется :( Каким синтезатором пользуетесь? LSE или Synplify? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qwa 0 27 октября, 2015 Опубликовано 27 октября, 2015 · Жалоба В Даймонде для XO2 синтезируется начиная с версии 3.5 (для VHDL проверено и работает). С Латтисами не работал - только с Xilinx и Альтера. :laughing: Кстати, позволю небольшой оффтоп - какой сегмент рынка держат Латтисы? Ну для каких задач в основном ПЛИСки делают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Sam_ 0 27 октября, 2015 Опубликовано 27 октября, 2015 · Жалоба Попробуйте PUR PUR_INST (.PUR (<powerup reset sig>)); Описание. Возможно будет полезна дока от Lattice. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 27 октября, 2015 Опубликовано 27 октября, 2015 · Жалоба Попробуйте PUR PUR_INST (.PUR (<powerup reset sig>)); Спасибо, но тут такая же ситуация, как и с GSR: powerup reset sig - это входной сигнал для блока PUR, а не выходной. Маразм, конечно - какой ещё входной сигнал нужен для сброса при подаче питания? Разве что для симуляции (о чём и пишут в доках). Я уже стал привыкать к отдельному входному пину, выделенному для сброса, как у микроконтроллеров. Заодно при таком "внешнем" стартовом сбросе можно установить внутренние регистры в состояния, зависящие от уровней на других входных пинах. Используя блоки initial такого эффекта не получить, как мне кажется... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Sam_ 0 27 октября, 2015 Опубликовано 27 октября, 2015 · Жалоба Да я ерунду написал так краем глаза увидел и не разобрался что к чему )) PUR только для симуляции годится. Ответ на вопрос тута страница 333. т.е. должна прокатывать инициализация при объявлении: reg tst = 1'b1; однако блок initial по прежнему несинтезируемый. попробовал, работает для инициализации использует LUTы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 27 октября, 2015 Опубликовано 27 октября, 2015 · Жалоба Благодарю, потом обязательно попробую сравнить синтез LSE и Синплифай для XO2. Последний, очевидно, более продвинутый. ЗЫ: сначала пробую работать на Verilog, но уже посматриваю в сторону SystemVerilog. А может сразу стоило осваивать SV? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться