Jump to content

    

des00

Модераторы
  • Content Count

    7654
  • Joined

  • Last visited

Everything posted by des00


  1. Хмм, непомню зачем в Хэмминге единичные матрицы, ну да ладно) Как вариант, можете в теме про FEC кодек Хэмминга посмотреть) очень условно interface pipa_if #(parameter int pIDAT_W = 8); localparam int cODAT_W = 10 + pIDAT_W; function logic [cODAT_W-1 : 0] do_something (input logic [pIDAT_W-1 : 0] dat); do_something = (dat << 8) ^ dat; endfunction endinterface module test (input logic [15 : 0] idat, output logic [17 : 0] odat8, logic [23 : 0] odat16); pipa_if #(8) popa8 (); pipa_if #(16) popa16(); assign odat8 = popa16.do_something(idat[7 : 0]); assign odat16 = popa16.do_something(idat); endmodule
  2. Размеры должны быть определены статически, до компиляции. Это HDL. А по вашему вопросу, если нужно синтезированное, то сделать шаблон через функцию в параметризуемом интерфейсе. Если для моделирования - параметризуемый класс. PS. LDPC декодер?
  3. от реализации зависит. никто не мешает пройтись по потоку мультипликативным скремблером, вместо 8/10. или свои синхрометки и аддитивный скремблер. Но, в контексте темы, это не принципиально.
  4. Подсунуть отсинтезированную модель и если и там все хорошо(вероятность этого 99.5%), то значит у вас проблемы явно не с ПЛИС, а с окружением. В частности внутри МК
  5. Из первого что под рукой : Quartus II Handbook Version 9.0 Volume 3: Verification -> Section I. Simulation -> 2. Mentor Graphics ModelSim Support -> Altera Design Flow with ModelSim-Altera or ModelSim Software
  6. медианный фильтр не пойдет ?
  7. Файлы нужные для моделирования, с правкой ссылок на библиотеки в VHDL файлах в квартусе 17.1 quartus\eda\sim_lib\altera_lnsim.sv quartus\libraries\vhdl\altera_lnsim\altera_lnsim_components.vhd pll\Quartus\mypll_sim\mypll.vho pll\Sources\TestPLL.vhd pll\Model\TestPLL_tb.vhd Мне лень было собирать все это правильно и все такое. Правка mypll.vho -- LIBRARY altera_lnsim; -- USE altera_lnsim.altera_lnsim_components.all; USE work.altera_lnsim_components.all; запуск моделирования vsim -novopt TestPLL_tb -t 1ps Судя по тексту в консоли # Info: ================================================= # Info: Generic PLL Summary # Info: ================================================= # Time scale of (testpll_tb.TestPLL_0.mypll_0.mypll_altera_pll_altera_pll_i_639.new_model.gpll.no_need_to_gen) is 1ps / 1ps # Info: hierarchical_name = testpll_tb.TestPLL_0.mypll_0.mypll_altera_pll_altera_pll_i_639.new_model.gpll.no_need_to_gen # Info: reference_clock_frequency = 120.0 MHz # Info: output_clock_frequency = 17 MHZ # Info: phase_shift = 0 ps # Info: duty_cycle = 50 # Info: sim_additional_refclk_cycles_to_lock = 0 # Info: output_clock_high_period = 29411.764706 # Info: output_clock_low_period = 29411.764706 # Info: hierarchical_name = testpll_tb.TestPLL_0.mypll_0.mypll_altera_pll_altera_pll_i_639.new_model.gpll.UI # Warning: The frequency of the reference clock signal differs from the specified frequency (120.0 MHz). какие то параметры не те и моделирование идет не так)
  8. думаю, при желании любой опытный разработчик может сделать. чип маленький и по емкости и по ногам. Схемотехника есть, понимание что оно делает тоже. снять логером работу устройства и попробовать переписать. Потом запустить одновременно со сравнением входов/выходов и там уже станет ясно полный это клон или нет) Ну и если бит защиты не стоит, то прочитать да)
  9. думаю не в списках дело. так, по коду ошибок явно не видно. но, ошибки могут быть не в этом месте) Сделайте тестбенч в симуляторе, только полный. промоделируйте запись/чтение со стороны МК и с вашей системы. Тогда вам станет доступны все внутренности и ошибка сразу всплывет)
  10. думаю лучше всего, сделайте простой проект с PLL. выложите сюда для проверки. а то, так можно долго угадывать
  11. Вам повезло, что поведение сигналов rstb и ss у вас одинаковое и ss по сути асинхронный сброс. Поэтому он их заорил. Если бы поведение было другое, например сигнал ss работал как сигнал асинхронной установки, то он не смог бы это сделать. Т.к. таких тригеров, в том семействе ПЛИС, что вы используете, нет)
  12. Да вроде верно, если еще в списке библиотек есть, то тем более. Надо читать логи, которые выдает симулятор и смотреть, что ему не хватает.
  13. Сие нам не ведомо. Знаю людей, которые студентам, могут дать первое задание на реализацию сопроцессора криптографии или кодирования) Еще и результат требовать быстро и качественно) Видно же, что человек без опыта, но вроде пытается разобраться. Все ошибаются, но если всех выпилить на старте, то кто останется? :)
  14. что-то мне подсказывает, что у вас не скомпилированы и не подключены корректно библиотеки Altera. А полуичлось, потому что когда то, вы использовали настроенный симулятор, а потом снесли библиотеки или сменили софт)
  15. Вот когда будет работать без если, тогда имеет смысл обсуждать, а пока это так, легкое позерство) Временные ограничения на SPI, при синхронной реализации, это две строчки set_false_path. А дальше, в синхронной реализации, теорема котельникова, учет временных параметров ПЛИС. Очень странно что у вас это синтезировалось и работает в железе. Хотя, вполне возможно, в вашей плис есть регистры с асинхроным сбросом и(или) установкой в произвольные значения, тогда решение действительно возможно.. А в симуляторе да, там можно делать все что угодно. Часовню тоже я разрушил??? (с) :) сразу бы вам, с плеча рубить, не разобравшись. может у него действительно 90МГц SPI
  16. это для тех кому старшие семерки и ультрас достаются бесплатно) такие люди, спиай давно уже не используют. Оке, уточним задачу, берем чип класса спартан6/сыклон 5, самый медленный. SPI 90 МГц.
  17. алгоритм не полный, что бы вы делали, "В случае если SPI быстрый". положим 90МГц. Ваши действия?
  18. Декодер Витерби

    Странно, но наверное так и есть. я плисовод, мне сложно адекватно оценивать производействие процессоров в том или ином алгоритме. Сам метод register exchange я не реализовывал, тем более програмно. Когда изучал витерби, посмотрел модель в матлабе, лежит тут \toolbox\hdlcoder\hdlcoderdemos\hdlcoderviterbi.mdl. Увидел что сохраняются решения и выбранное состояние, по сути считается вперед комбинационно. Да, это можно конвейризировать, но тогда, нужно пробрасывать индексы состояний по всей линейке. Это ресурс. Но зато никаких обратных пробегов, LIFO и т.д.. В traceback сохраняется только вектор решений, в соответствии с индексами состояний. Затем, когда получено значение, делается обратный пробег, на котором определяется значение выходного бита. И действительно, памяти, для путей нужно меньше. Но нужно LIFO для восстановления порядка следования бит. А вот с определением индекса состояния, с которого нужно начинать обратный пробег, возможны варианты: 1. Размер блока кодирования меньше L - выбора нет, считаем решетку, ищем минимальный, декодируем. Символы хвоста защищены намного слабее чем символы головы. Но, ИМХО, для таких блоков применение витерби сомнительно, лучше MAP. а еще лучше короткий сверточный турбокод. 2. Размер блока кодирования меньше 2*L, все тоже самое, только первые L символов защищены лучше чем вторые L. 3. Размер блока кодирования больше 2*L. Нарезаем блок на перекрывающиеся подблоки по 2*L. В каждом подблоке первые L символов 99.9% будут в слитом пути, и для определения этого пути, можно сделать обратный пробег из любого состояния, на момент 2*L. Т.е. берем блок 2*L, берем любое состояние, запускаем обратный пробег, ищем состояние в момент L и с него декодируем. Так будет до тех пор, пока не доберемся до последнего блока 2*L, его декодируем как 2. Варианты с витерби можно улучшить защиту последних символов терминированием решетки(добить символами, что бы конечное состояние было априори известно), тогда вообще компаратор не нужен никогда. Ну или в конце вписать немного мусора и отбросить при декодировании. ЗЫ. Да, вам не показалось, при traceback блоки пробегаются по 2 раза. Поэтому была придумана техника pre-traceback. Что бы убрать один пробег и сразу знать состояние с которого надо декодировать данные. Т.е. классический traceback конвейер выглядит так : вперед 2*L -> назад L -> назад L(решения) -> LIFO L -> вперед L -> назад L -> назад L (решения) -> LIFO L и .т.д. с pre-traceback выглядит так: вперед 2*L -> назад L(решения) -> LIFO L -> вперед L -> назад L (решения) -> LIFO L и .т.д. быстрее, но на плис это выливается в ресурс, а в проце - вычислительная мощность)
  19. вы работаете по фронту частоты SCK. в SPI интерфейсе она мало того что отключаема, так еще и ее фронт не обязательно присутствует при сигнале выбора слейва. Т.е. вы не ловите фронт сигнала ss, вы ловите его уровень, при фронте сигнала SCK.
  20. а вот в этом, вы сильно ошибаетесь. это прям из кода видно, что так будет только в ограниченном количестве случаев и зависеть от фазы луны.
  21. Странно, вы пишите: " механизм сброса счетчика nb не работает, и каждый 8 байт я вижу одиночный импульс на sdout" Но тогда причем здесь reg [3:0] nb = 0; // счетчик бит Так все таки, байты или биты? как она должна у вас работать? Что именно вы сделали в симуляторе? И да, " 8 байт я вижу одиночный импульс на sdout. " - именно так и должна работать исходная логика, вторая картинка как раз неправильная. И с присваиваниями все же разберитесь.
  22. торговые роботы. правда, тут надо будет труда закопать......много в общем)
  23. Сам вхдл код посмотрите. Может эти порты там не нужны и генерируется полная комбинаторика.
  24. Вы ещё не забывайте, что гигабитный эзернет, на витой паре FEC кодер ещё содержит. Т.е. даже в стерильных условиях офиса, там проблемы
  25. 90 мегабайт, 720мегабит. Один трансивер, гигабитную оптику на сфп кейджах. Если дорого, использовать сфп пачкорд. А потом все равно поставить оптику)