Jump to content

    

dde29

Участник
  • Content Count

    85
  • Joined

  • Last visited

Community Reputation

0 Обычный

About dde29

  • Rank
    Частый гость
  • Birthday 07/29/1985

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1465 profile views
  1. 50 МГц это входная частота от генератора, следом рождается в PLL клок 300 МГц. Вот на этой частоте и работают эти условные счетчики. Ну асинхры точно никакой нет - так как источник, вход по сути один (клок от генератора). По поводу констрейнов - да, поэтому и вопрос - что я еще могу умного прописать)) У меня 10й цыклон LP
  2. Я может не правильно мысли свои донес) Другими словами, ТаймКвест показывает меньшее значение максимальной частоты Fmax при компиляции проектс с двумя счетчиками, по сравнению чем с один счетчиком. Вопрос - почему частота уменьшается, если ресурсы практически не задействованы и модули не связаны? Почему занялся этим вопросом - имеется проект, в котором генерируются разные сигналы, с возможностью шага мелкого шага смещение (ну т.е. модуль работает на большое частоте...) Если таких разных сигналов 2 то все ок, добавляешь в проект 3-й - и все рушится, проект перестает адекватно работать... Вот и возникла мысль сделать для каждого такого сигнала что-то вроде set_false_path
  3. Всем привет! В одном проекте, работающим на большое частоте, появилась необходимость в прописании констрейнов на проект... Допустим, имеется два модуля счетчиков - один инкрементирует, другие декрементирует (это условно, в реальном проекте вместо счетчиков другие модули). Они, по сути, работают на одном клоке... При компиляции проекта, синтезатор пытается выровнять пути сигналов по всем проекту. Но, мне необходимо так прописать констрейны, чтобы два клока 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 чтобы скомпилировалось так как задумывалось...
  4. Чет не нашел я в Convert Programming File я такую галочку )) В общем понятно, спасибо. Просто как-то странно. Если ба данные в блок запихивал бы последовательно - то там тожно было понять фичу... И Если это формат RPD файла такой - то почему данные переворачивать нужно именно блоками по 4 байта... Дело в том, что я статью пишу на эту тему - и как это объяснить - дилемма )))
  5. Т.е. это формат файла такой? или именно шина?
  6. Всем привет, ковыряюсь с ПЛИС 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-данных, что врядли...
  7. Фишка в том, что по основному протоколу работы оборудования, необходимо по запросу отдавать контрольную сумму прошивки, конкретное число, а не сам факт - удачный файл прошивки или нет) Если бы Вы поделились ссылочкой, было бы неплохо
  8. Поставлена задача после подачи питания на ПЛИС (Cyclone III) посчитать CRC16 файла прошивки, залитой в конфигурационную флеш-память, в которую предварительно была записана прошивка в формате RBF. Вопрос: кто-нибудь знаком с форматом файла RBF в данном контексте? Где-нибудь в файле прописан размер файла? Чтобы считать CRC16 не всей флеш-памяти. Суть в том, чтобы посчитанная CRC16 из флеш совпадала с CRC16 файлом прошивки...
  9. Compact → базовое исполнение; Flash → имеется возможность реализации двух конфигурационных схем с самообновлением и инициализация встроенной RAM при подаче питания; Analog → все то же что и в варианте Flash, плюс встроенный блок АЦП. Разбить в исполнении Campact не получится точно, но можно попробовать реализовать boot-модуль в основном проекте и перешивать как бы самого себя. Но я так не пробовал, интересная мысль, но я думаю Ква не даст скомпилить IP-корку... Будет время - попробую. А вообще, я сейчас занимаюсь написанием статьи на тему бутлодера на 10м Максе... Там может быть данную тему затрону...
  10. В общем, ситуация следующая: В древнем, как гамно мамонта, Ква9.0 не работает ни системная функция $clog2() ни функция. Скомпилировал в 15.1 - удачен и первый и второй вариант! Спасибо за советы!
  11. Спасибо! Попробую модифицировать функцию с проверкой на <0... А про встроенный $clog2() не знал... я на СВ недавно пересел... Error (10174): Verilog HDL Unsupported Feature error at WidthParamProblem.sv(21): system function "$clog2" is not supported for synthesis Может потому что у меня Ква 9.0 ? ))))) Я сторонник того - если работает - нафиг что-то менять и куда-то перелазить)
  12. Здравствуйте, форумчане. У меня на редкость нелепая проблема: Я, что называется, "на бильярдном столе яму с г*вном нашел и в ней утонул" (с) Жмурки. Короче, решил я параметризировать один свой модуль, а именно, автоматическое вычисление ширины регистра от максимального значения счетчика. Вот мой код: 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 Понятно, что он имеет в виду, типа чтобы размер регистра должен быть константой - ну это понятно. Но разве - у меня не константа?? Да, она вычисляется по функции, но это же значение вычисляется в самом начале компиляции и не меняется в дальнейшем... Подскажите, как можно исправить данную проблему и починить, данный параметризируемый модуль... Спасибо! В догонку: в симуляторе все работает на ура...