Jump to content

    

dde29

Участник
  • Content Count

    87
  • Joined

  • Last visited

Everything posted by dde29


  1. Мой параметризируемый модуль приемника UART: https://github.com/DigitalRabbit85/SvLibDR/tree/main/SingleRxUART За пояснениями - в личку...
  2. Вот! Именно с добавлением параллельного (у них общий только клок ) - и проект может рухнуть. Вопрос именно как использовать create_clock при том, что клоки, например разветвил assign clk1 = clk_pll, assign clk2 = clk_pll ... При этом варианте таймквестом не получается использовать create_clock По поводу false_path можете пример привести в моем случае?)
  3. 50 МГц это входная частота от генератора, следом рождается в PLL клок 300 МГц. Вот на этой частоте и работают эти условные счетчики. Ну асинхры точно никакой нет - так как источник, вход по сути один (клок от генератора). По поводу констрейнов - да, поэтому и вопрос - что я еще могу умного прописать)) У меня 10й цыклон LP
  4. Я может не правильно мысли свои донес) Другими словами, ТаймКвест показывает меньшее значение максимальной частоты Fmax при компиляции проектс с двумя счетчиками, по сравнению чем с один счетчиком. Вопрос - почему частота уменьшается, если ресурсы практически не задействованы и модули не связаны? Почему занялся этим вопросом - имеется проект, в котором генерируются разные сигналы, с возможностью шага мелкого шага смещение (ну т.е. модуль работает на большое частоте...) Если таких разных сигналов 2 то все ок, добавляешь в проект 3-й - и все рушится, проект перестает адекватно работать... Вот и возникла мысль сделать для каждого такого сигнала что-то вроде set_false_path
  5. Всем привет! В одном проекте, работающим на большое частоте, появилась необходимость в прописании констрейнов на проект... Допустим, имеется два модуля счетчиков - один инкрементирует, другие декрементирует (это условно, в реальном проекте вместо счетчиков другие модули). Они, по сути, работают на одном клоке... При компиляции проекта, синтезатор пытается выровнять пути сигналов по всем проекту. Но, мне необходимо так прописать констрейны, чтобы два клока clk_incr и clk_decr были экслюзивные. Т.е. как бы абсолютно два разных клоковых домена, не связанных между собой: RTL: module Top ( input inclk, output imp1, output imp2 ); mypll mypll_0( .inclk0 (inclk), .c0 (clk) ); wire clk_incr = clk; wire clk_decr = clk; defparam CounterIncr.parWIDTH = 32; CounterIncr CounterIncr( .clk (clk_incr), .out (imp1) ); defparam CounterDecr.parWIDTH = 32; CounterDecr CounterDecr( .clk (clk_decr), .out (imp2) ); endmodule SDC: #************************************************************** # Time Information #************************************************************** set_time_format -unit ns -decimal_places 3 #************************************************************** # Create Clock #************************************************************** create_clock -name {inclk} -period 20.000 -waveform { 0.000 10.000 } [get_ports {inclk}] #************************************************************** # Create Generated Clock #************************************************************** create_generated_clock -name {mypll_0|altpll_component|auto_generated|pll1|clk[0]} -source [get_pins {mypll_0|altpll_component|auto_generated|pll1|inclk[0]}] -duty_cycle 50/1 -multiply_by 6 -master_clock {inclk} [get_pins {mypll_0|altpll_component|auto_generated|pll1|clk[0]}] Вот, вопрос, собственно в том - что именно мне нужно прописать в SDC чтобы скомпилировалось так как задумывалось...
  6. Чет не нашел я в Convert Programming File я такую галочку )) В общем понятно, спасибо. Просто как-то странно. Если ба данные в блок запихивал бы последовательно - то там тожно было понять фичу... И Если это формат RPD файла такой - то почему данные переворачивать нужно именно блоками по 4 байта... Дело в том, что я статью пишу на эту тему - и как это объяснить - дилемма )))
  7. Т.е. это формат файла такой? или именно шина?
  8. Всем привет, ковыряюсь с ПЛИС Max10 от Интела. Копаю корку Altera On-Chip Flash, которая позволяет в менять файл конфигурации находу, не используя JTAG. Грубо говоря самостоятельно себя перешивать. Структурная схема доступа к корке - на картинке. Если читать или записывать 32-х битное слово на шине writedata[31:0] блока Data и сравнивать данные с RPD-файлом, то оказывается что если брать данные по 4 байта из RPD-файла и записывать их на writedata[31:0] блока Data, то это 32-х битное слово нужно переворачивать - младший бит нужно записывать самым старшим в writedata и т д... Причем если читать и записывать writedata[31:0] блока Control - то там все впорядке. И вот вопрос: - это особенности шины данных Avalon или это такой хитрый формат RPD-данных, что врядли...
  9. Фишка в том, что по основному протоколу работы оборудования, необходимо по запросу отдавать контрольную сумму прошивки, конкретное число, а не сам факт - удачный файл прошивки или нет) Если бы Вы поделились ссылочкой, было бы неплохо
  10. Поставлена задача после подачи питания на ПЛИС (Cyclone III) посчитать CRC16 файла прошивки, залитой в конфигурационную флеш-память, в которую предварительно была записана прошивка в формате RBF. Вопрос: кто-нибудь знаком с форматом файла RBF в данном контексте? Где-нибудь в файле прописан размер файла? Чтобы считать CRC16 не всей флеш-памяти. Суть в том, чтобы посчитанная CRC16 из флеш совпадала с CRC16 файлом прошивки...
  11. Compact → базовое исполнение; Flash → имеется возможность реализации двух конфигурационных схем с самообновлением и инициализация встроенной RAM при подаче питания; Analog → все то же что и в варианте Flash, плюс встроенный блок АЦП. Разбить в исполнении Campact не получится точно, но можно попробовать реализовать boot-модуль в основном проекте и перешивать как бы самого себя. Но я так не пробовал, интересная мысль, но я думаю Ква не даст скомпилить IP-корку... Будет время - попробую. А вообще, я сейчас занимаюсь написанием статьи на тему бутлодера на 10м Максе... Там может быть данную тему затрону...
  12. В общем, ситуация следующая: В древнем, как гамно мамонта, Ква9.0 не работает ни системная функция $clog2() ни функция. Скомпилировал в 15.1 - удачен и первый и второй вариант! Спасибо за советы!
  13. Спасибо! Попробую модифицировать функцию с проверкой на <0... А про встроенный $clog2() не знал... я на СВ недавно пересел... Error (10174): Verilog HDL Unsupported Feature error at WidthParamProblem.sv(21): system function "$clog2" is not supported for synthesis Может потому что у меня Ква 9.0 ? ))))) Я сторонник того - если работает - нафиг что-то менять и куда-то перелазить)
  14. Здравствуйте, форумчане. У меня на редкость нелепая проблема: Я, что называется, "на бильярдном столе яму с г*вном нашел и в ней утонул" (с) Жмурки. Короче, решил я параметризировать один свой модуль, а именно, автоматическое вычисление ширины регистра от максимального значения счетчика. Вот мой код: module WidthParamProblem ( inclk, led ); /// PARAMETERS /// parameter int counter = 8; /// FUNCTIONS /// function automatic int clogb2 (input int number); int calc; begin for (int i = 0; 2**i < number; i++) calc = i + 1; clogb2 = (number == 0) ? 0 : (number == 1) ? 1 : calc; end endfunction /// PORTS /// input inclk; output logic [clogb2(counter):0] led = '0; /// BODY /// always_ff @ (posedge inclk) led <= led + 1'b1; endmodule В итоге модуль не компилируется, как бы я не приседал ромбиком... Квартус выдает следующую ошибку: Error (10140): Verilog HDL error at WidthParamProblem.sv(20): range index is not constant Понятно, что он имеет в виду, типа чтобы размер регистра должен быть константой - ну это понятно. Но разве - у меня не константа?? Да, она вычисляется по функции, но это же значение вычисляется в самом начале компиляции и не меняется в дальнейшем... Подскажите, как можно исправить данную проблему и починить, данный параметризируемый модуль... Спасибо! В догонку: в симуляторе все работает на ура...
  15. Наконец-то добился того, что удалось считать записанную область CFM0, соответствующую одному образу. Полученный файл очень похож на искусственно сгенерированный файл *.rpd. Но, чтобы его сгенерировать, необходимо каждый раз указывать второй образ CFM1, хотя какое он отношение имеет с независимому от него образу в CFM0 пока не разобрался... Буду копать дальше. Попробую данный сгенерированный *.rpd записать насильно в CFM0 используя свой УАРТ и OnFlashChip, и посмотрю что получится...
  16. Да, в CFM0 хранится один образ, а в CFM1 и 2 хранится второй. Естественно, когда я зашиваю первый раз через JTAG я так и делаю - из двух SOF генерю один POF и зашиваю. Но а что делать потом) Когда уже по не JTAG, а по какому-то основному интерфейсу, в моем случае, UART необходимо передать только один образ, в каком-то формате (вопрос в каком и как его сделать!) и правильно его запилить по нужному адресу. Про то, что в CFM байты перевернуты я учту, спасибо. Посмотрю, а по поводу чтения - я сейчас как раз и пишу прошивку и софт, чтобы по основному интерфейсу хотя бы прочитать CFMы... Дело идет не очень быстро из-за большой загруженности). Но результат обязательно опубликую
  17. Либо DDS - заранее в матлабе или маткаде высчитать отчеты и забить их в в память Либо Кордиком формировать 3 частоты и при желании суммировать отчеты
  18. Всем привет! давненько меня тут не было...) В данный момент знакомлюсь с MAX 10-м. А конкретно разбираюсь как использовать одну области CFM в качестве бутлодера для перепрошивки второй области CFM. Идея, надеюсь, понятна :) реализовать возможность смены основной прошивки плис удаленно, не используя программатор... На данный момент реализовал переключение между двумя образами командой по УАРТ, читаю Status и Control Register используя OnChip Flash IP-Core и соответственно стирать определенные области памяти UFM и CFM. Осталось реализовать запись по тому же УАРТ другой основной прошивки, но не могу разобраться какой из форматов образов нужно генерить и передавать - POF, SOF или RPD??? Насколько я понял, нужно что-то откуда генерить используя различные настройки, но что именно так и не разобрался... Может кто-нить занимался данной проблемой P.S. Ниос не перевариваю...
  19. В MAX10 имеется возможность загрузки 2 конфигураций. Одну из них можно использовать как бутлодер. Копать в теме MAX10, Internal Configuration, Remote System Upgrade.
  20. Действительно, а что это за закрома такие. Если обычный люд заходит на сайт журнала, идет в архив номеров, ищет нужный и в нем содержится только лишь анонс...
  21. Я?) http://www.kit-e.ru/articles/circuit/2013_12_123.php по поводу электронного варианта - пишите в личку. Срок давности должен уже пройти.