Перейти к содержанию
    

Nieve

Участник
  • Постов

    38
  • Зарегистрирован

  • Посещение

Весь контент Nieve


  1. Если я правильно понял, вам не нужно реализовывать весь интерфейс, достаточно только механизм управления управляющих кодов. Ставите настройку "autostart" (ожидание получения NULL кодов), после получения первого отправляете несколько NULL в ответ, а далее от 1 до 7 FCT символов для установки соединения. После этого обмениваетесь NULL кодами для поддержки соединения. Установите приоритет при отправки управляющих кодов и дело в шляпе.
  2. Изначально "fsm" в каком состоянии? Теоретически на симуляторе все триггера автомата могут быть в "0", а в ПЛИС в "1" и наоборот.
  3. Здравствуйте! Вопрос следующий: создаю .do файл в САПРе, где прописываю сигналы, которые необходимо добавить на waveform, например: wave -noreg /testbench/main/clk wave -noreg/testbench/main/rst И так далее. Потом, на открывшейся waveform, руками могу изменить цвет нужного мне сигнала. Внимание вопрос: можно ли установить цвет нужного сигнала в .do файле?
  4. Не понятен такой момент: вы получили байт по UART, зачем его переделывать на VHDL? Вы получили число, в симуляторе смотрите значение в хексе или десятке, суть задачи не ясна.
  5. ST_END_ZONE: state_zone <= ST_END_ZONE; Вы не выходите из третьего состояния.
  6. Синтезните свой проект в ISE / Vivado и САПР сам покажет кол-во используемых элементов.
  7. "частоты приблизительно равны, но асинхронны" - это уже накладывает ограничения по применению, это неправильно. FIFO должна корректно работать при абсолютно разных частотах. Зачем вообще понадобились "error" регистры? Ваша задача не в том чтобы ошибку найти, а в том, чтобы корректно записывать данные в буффер. Из любопытства: что будет если например сработал этот регистр? Смотрю с телефона, поэтому код не удобно читать.
  8. Если вы тактируете одну PLL от другой, то напрямую так делать нельзя. Либо используйте одну PLL и от нее пускайте разные клоки, либо выводите выход одной PLL наружу и заводите его на вход во вторую, обозначив его как входной тактовый сигнал.
  9. Попробуйте вывести все возможные флаги FIFO и ищите закономерномести при неправильном считывании. Все таки альторовские IP верифицированные, поэтому вряд ли глючит именно сам блок, скорее всего некая обвязка.
  10. Нет, не так. Если у Вас в схеме есть триггеры, в таком случае тактовый сигнал нужно подавать обязательно.
  11. Нет. Вы будете работать с его инстансом. Например у вас в схеме есть два порта UART, описанные одним Verilog файлом. Обращаясь к первому порту, Вы будете вызывать его например так: uart uart_inst_1 (...); Ко вторумо так: uart uart_inst_2(...); Тоесть два разных порта UART, но чтобы не добавлять в проект 2 одинаковых UART модуля используют инстансы. С FIFO все тоже самое.
  12. С пина на пин можно обойтись без тактирования. Через assign присвоить значение выходной ножки входной. P.S Если Вы в начале пути по освоению ПЛИС и Verilog, идите по простейшему пути, отложите пока двунаправленные порты.
  13. Подключайте в двух разных вызываемых модулях разные инстансы FIFO и проблем не будет. У Вас FIFO модуль создается один раз в проекте, дальше Вы работаете с его инстансами.
  14. Вопрос так и был сформулирован: надо все или только стробы? Я так понимаю что как синхронизировать ТС уже знает, если нет, то ваша ссылка будет ему очень полезна.
  15. Сигнал, сформированный по "clk_1", должен быть синхронизорован по "clk_2".
  16. Вы понимаете что написанный RTL затем синтезируется в электрическую схему, состоящую из таких логических элементов как "И", "ИЛИ", мультиплексоры, триггеры и т.д.? Так вот, стандартный D триггер работает по фронту клока, обозначенный в списке чувствительности как "posedge sck", а также реагирующий на фронт - "negedge rstb" (без учета входных данных, сигнал разрешения клока и т.д.). А теперь вопрос - во что по вашему синтезнётся "posedge ss" ? Тоесть к D триггеру нужно "приделать" еще один вход, который будет реагировать на фронт третьего сигнала. Таких элементов в ПЛИС просто нет и синтезатор должен выдать ошибку в 99.9% процентов случаев. 0.1% это похоже ваш случай, если вы не перепутали симулятор и синтезатор.
  17. Что такое 《posedge sck or negedge rstb or posedge ss 》 ? С точки зрения синтеза весьма любопытно.
  18. Привидите пример использования в одном always блоке блокирующего и неблокируюего присвоения. Не видел никогда ничего подобного, любопытно.
  19. Сразу же возникает логичный вопрос - в чем философия не использования PLL?
  20. Пример простейшего кода представлен ниже: `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" необходимо пропустить через схему "антидребезг", а потом через схему "детектор фронта" (если кнопками с платы управляете).
  21. В результате синтеза какой логический элемент получается? Загрузите картинку.
  22. Не знаю как на VHDL, но на Verilog-e удобно использовать функцию для автоматического подсчета CRC. Можете задать нужный вам полином для вычисления CRC и не надо будет придумывать свою собственную формулу. Ссылка - https://www.easics.com/webtools/crctool
  23. "?" - комбинационный мультиплексор. "if/else, case" - последовательный мультиплексор.
  24. Довольно сложно, я бы даже сказал невыполнимо взять и договориться всем разработчикам. Если говорить о входны сигналах, то часто ставят префикс "i" или "in", соответственно "o" или "out" у выходных. А вообще у Иосифа Григорьевича в "Краткий курс HDL. Часть 3. О написании кода <вообще> ..." есть примеры и рекомендации.
×
×
  • Создать...