Jump to content
    

pavlovconst

Свой
  • Posts

    104
  • Joined

  • Last visited

Everything posted by pavlovconst


  1. Здравствуйте! Пишу в проекте примерно такой код. В одном блоке вычисляю несколько типов аварий. Намеренно использую при этом блокирующее присваивание, так код получается коротким и хорошо читаемым. Во втором блоке накапливаю полученные аварии. module main( input clk, input nrst, input [7:0] in_data, output [7:0] out_data ); reg [3:0] brd_err2 = 0; reg [7:0] brd_err2_cntr = 0; always @(posedge clk) begin if( ~nrst ) begin brd_err2_cntr[7:0] <= 0; end else begin brd_err2_cntr[7:0] <= brd_err2_cntr[7:0] + brd_err2[3] + brd_err2[2] + brd_err2[1] + brd_err2[0]; end end always @(posedge clk) begin if( ~nrst ) begin brd_err2[3:0] = 0; end else begin brd_err2[3] = in_data[3] || in_data[2] || in_data[1] || in_data[0]; brd_err2[2] = in_data[4] || in_data[2] || in_data[1] || in_data[0]; brd_err2[1] = in_data[5] || in_data[2] || in_data[1] || in_data[0]; brd_err2[0] = in_data[3] || in_data[1]; end end assign out_data[7:0] = brd_err2_cntr[7:0]; endmodule При синтезе и для brd_err2, и для brd_err2_cntr создаются регистры, выходы задержаны относительно входов на 2 такта. А вот на симуляции получаю очень странные результаты, которые, к тому же, меняются при изменении порядка always`ов. Что можно сделать, чтобы поправить симуляцию?
  2. Скорее всего, подразумевается размах сигналов в дифф. паре. Для LVDS он как раз +-350mV. Синфазное напряжение (common mode voltage) в вашем случае получается около 200mV, это допустимо по стандарту. LVDS как раз и отличается от других дифференциальных стандартов тем, что синфазное напряжение может меняться в широких пределах. Картинка из "LVDS Owner’s Manual" от Texas - http://www.ti.com/lit/ug/snla187/snla187.pdf Если так, то прописываете set_property IOSTANDARD LVDS [get_ports SYSCLK_N] set_property IOSTANDARD LVDS [get_ports SYSCLK_P] или set_property IOSTANDARD LVDS_25 [get_ports SYSCLOCK_N] set_property IOSTANDARD LVDS_25 [get_ports SYSCLOCK_P] в зависимости от выбранного банка
  3. В систем консоли открывается встроенный интерпретатор TCL. Поэтому эксперименты с GUI я бы начинал без квартуса, на чистом TCL. https://www.tutorialspoint.com/tcl-tk/tk_environment.htm
  4. QIP обычно описывает исходники стандартных IP из каталога. Подпроекты я бы объединял с помощью дочерних QSF-ов. Это, по крайней мере, более логично. set_global_assignment -name SOURCE_TCL_SCRIPT_FILE my_subproject_1_settings.qsf set_global_assignment -name SOURCE_TCL_SCRIPT_FILE my_subproject_2_settings.qsf
  5. Кто ж спорит. Всего три томика прочитал - и дело в шляпе =)
  6. Flip-fl0p, Burenkov Спасибо за советы! Я разобрался. У контроллера памяти есть статусные выходы .status_local_init_done .status_local_cal_success .status_local_cal_fail Начинать чтение нужно только после того, как память инициализирована и успешно откалибрована
  7. Возможно, сигнал waitrequest не инвертированнный на самом деле (хотя суффикс "_n" намекает об обратном), и мне стоит ждать 6 тактов после первого запроса?
  8. Здравствуйте! Делаю аппаратный контроллер (HMC) памяти DDR3 на CycloneV. Создал два порта Avalon-MM по 32 бит - один для JTAG Debug Master, второй - для штатного (моего) контроллера. Через JTAG Debug Master память пишется и читается, из чего делаю вывод, что временнЫе настройки чипов памяти я поставил правильные. Через штатный контроллер могу питать в память, и единичные записи и берсты проходят. Но вот чтение поднять никак не получается. Контроллер принимает 2 первых запроса по 8 слов, а на третьем поднимает waitrequest и больше его не опускает. Никогда. Сигнал readdatawalid вижу где-то вдалеке и только один. Может кто-то сталкивался с таким? Что я делаю не так? Обязательно ли логику мастера описывать в виде компонента QSYS, сейчас весь авалон у меня экспортирован из QSYS...
  9. Подтверждаю. Я тоже попробовал менять настройки PLL в проекте с непроходящими таймингами. Я ожидал, что при увеличении джиттера на входе тайминг станет еще хуже. Но получил точно такие же знеачения TNS. Странно...
  10. Расскажите, как вы выяснили, что не влияет? Когда мастер генерирует исходники PLL, он также создает файл с констрейнами для выходных сигналов. Величина заявленной вами нестабильности на входе PLL повлияет на расчетную нестабильность выходов, а это, в свою очередь, повлияет на расчет времянки всех блоков, затактированных через PLL.
  11. Еще не продано. Предлагайте вашу цену
  12. Щуп измерительный HP-2060. Оригинальный комплект насадок Встроенный делитель на 1 и на 10 Полоса - до 60 МГц Разъем BNC, совместим с советскими СР-50 Цена - 1000р. Продаю в Петербурге.
  13. Производитель Cypress Название CY8CKIT-042 PSoC 4 Pioneer Kit На плате: Микропроцессор ARM Cortex M0 USB-программатор Емкостной датчик-слайдер Разъемы ввода-вывода в стандарте Arduino Страница на сайте производителя http://www.cypress.com/documentation/devel...c-4-pioneer-kit Фото моего комплекта - https://yadi.sk/d/jydFTvkXncda5 Цена 500р. (Петербург) Доставку оплачивает покупатель
  14. В статье приемник (только приемник) занимает 5000 ячеек из 22000. Можно легко найти ПЛИС в десятки и даже сотни раз более емкие, другой вопрос - сколько это стоит. Напишите, что вы хотите сделать?
  15. Вообще ПЛИС - это цифровое устройство, поэтому встроенного радио нет. Но сделать можно всякое
  16. Аналоговый осциллограф-мультиметр С1-112А, полоса 10МГц, экспортный вариант Полный оригинальный комплект - инструкции со схемами, щупы, крышка-органайзер. В идеальном рабочем состоянии Цена 4900 р. Продаю в Петербурге. Если вы из другого города - нужно будет оплатить пересылку.
  17. Достаточно обконстрейнить быстрый клок. В общем-то и все. У вас нет асинхронных проблем. Clock domain - всего один. Да, в нем есть еще сигнал, который меняет состояние каждый второй такт (вы его зовете медленным клоком) - ну и ОК. А еще есть внешний ресет. Да, это внешний асинхронный сигнал, его нужно синхронизировать - записать в регистр по клоку. А на выходе регистра будет он уже синхронным в этом клок домейне. ОСтальные расчеты оставьте технике.
  18. То, что происходит в схеме между фронтами тактовой частоты - вас волновать по идее не должно. Вы же цифровым дизайном занимаетесь, а не аналоговым. Роутер постарается развести так, чтобы К СЛЕДУЮЩЕМУ фронту клока на выходе всех регистров был годный результат. Именно для этого пишутся констрейнты, в которых явно прописываются частоты и нестабильности клоков. Если времянка сошлась, схема БУДЕТ работать на этой частоте. Вот, это правильные слова! Нужно написать XDC constraints - и сетапы-холды будут проверены автоматически, и даже репорт будет генериться на каждую реинкарнацию дизайна.
  19. Я считаю, такого быть не может. Фронты не могут взяться ниоткуда. При делении частоты тем более. Еще раз поясните, откуда берется исходный тактовый сигнал и каким образом вы его делите. Даже если, допустим, медленная появляется из PLL и есть непредсказуемое время на ее раскачку, тогда сигнал locked можно использовать как enable для счетчиков, чтобы начать считать от одного момента во времени Очень полезно воспользоваться симулятором
  20. Если вам нужно знать фазовые соотношения - то они же и так известны. Частоты отличаются ровно в два раза ) Считайте такты быстрой и сможете пересчитать в медленную делением на два. Медленную умножайте. Каждый триггер на пути сигнала будут задерживать сигнал на один такт той частоты, которым он тактируется. Это можно учесть при отладке в симуляторе.
×
×
  • Create New...