Jump to content

    

Nieve

Участник
  • Content Count

    26
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Nieve

  • Rank
    Участник

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Москва

Старые поля

  • Vkontakte
    https://vk.com/pingopongo90

Recent Profile Visitors

169 profile views
  1. Вопрос так и был сформулирован: надо все или только стробы? Я так понимаю что как синхронизировать ТС уже знает, если нет, то ваша ссылка будет ему очень полезна.
  2. Сигнал, сформированный по "clk_1", должен быть синхронизорован по "clk_2".
  3. Вы понимаете что написанный RTL затем синтезируется в электрическую схему, состоящую из таких логических элементов как "И", "ИЛИ", мультиплексоры, триггеры и т.д.? Так вот, стандартный D триггер работает по фронту клока, обозначенный в списке чувствительности как "posedge sck", а также реагирующий на фронт - "negedge rstb" (без учета входных данных, сигнал разрешения клока и т.д.). А теперь вопрос - во что по вашему синтезнётся "posedge ss" ? Тоесть к D триггеру нужно "приделать" еще один вход, который будет реагировать на фронт третьего сигнала. Таких элементов в ПЛИС просто нет и синтезатор должен выдать ошибку в 99.9% процентов случаев. 0.1% это похоже ваш случай, если вы не перепутали симулятор и синтезатор.
  4. Что такое 《posedge sck or negedge rstb or posedge ss 》 ? С точки зрения синтеза весьма любопытно.
  5. Привидите пример использования в одном always блоке блокирующего и неблокируюего присвоения. Не видел никогда ничего подобного, любопытно.
  6. Сразу же возникает логичный вопрос - в чем философия не использования PLL?
  7. Пример простейшего кода представлен ниже: `timescale 1ns/1ns module counter ( /*******************/ // System /*******************/ input rst_i, // Reset. Active Is "0" input clk_i, // Main Clock /*******************/ // Counter Control /*******************/ input incr_i, // Increment Counter (Counter++) input decr_i, // Decrement Counter (Counter--) /*******************/ // Counter /*******************/ output reg [3:0] counter_o // Counter Value ); always @(posedge clk_i or negedge rst_i) begin if (!rst_i) counter_o <= 4'b0; else if (incr_i) counter_o <= counter_o + 1'b1; else if (decr_i) counter_o <= counter_o - 1'b1; end endmodule НО! Сигналы "incr_i" и "decr_i" необходимо пропустить через схему "антидребезг", а потом через схему "детектор фронта" (если кнопками с платы управляете).
  8. В результате синтеза какой логический элемент получается? Загрузите картинку.
  9. Не знаю как на VHDL, но на Verilog-e удобно использовать функцию для автоматического подсчета CRC. Можете задать нужный вам полином для вычисления CRC и не надо будет придумывать свою собственную формулу. Ссылка - https://www.easics.com/webtools/crctool
  10. "?" - комбинационный мультиплексор. "if/else, case" - последовательный мультиплексор.
  11. Довольно сложно, я бы даже сказал невыполнимо взять и договориться всем разработчикам. Если говорить о входны сигналах, то часто ставят префикс "i" или "in", соответственно "o" или "out" у выходных. А вообще у Иосифа Григорьевича в "Краткий курс HDL. Часть 3. О написании кода <вообще> ..." есть примеры и рекомендации.
  12. Использование "case" предпочтительнее (когда это возможно), т.к. при синтезе получается 1 MUX, а при использовании конструкций типа "if ... else" синтезится N-ое количество последовательных MUX-ов. Помимо увеличения логики в схеме, увеличиваются задержки на каждом из элементов.
  13. Да, причем в оригинале. Скажу лишь одно, применял подобную схему во многих проектах (FPGA, ASIC) и никогда проблем со сбросом не наблюдалось. Спасибо за Ваше уточнение, а я обязательно проанализирую Ваше замечание. Насколько я понял, тут имеется в виду ситуация, когда сигнал сброса формируется по одной частоте, а схема работает по другой. В таком случае, после подачи сигнала сброса на триггер, он действительно может "свалиться" в метастабильное состояние.
  14. Не совсем. Сначала триггер синхронизируется по тактовой частоте, а только потом уже используется для асинхронного сброса.