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

Lubnin

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

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

  • Посещение

Репутация

0 Обычный

Информация о Lubnin

  • Звание
    Участник
    Участник
  • День рождения 24.06.1986

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Задача была "факультативная" ("Попробовать перевести критические куски проекта"). Поэтому была перебита текущей работой и заброшена. Сейчас порылся - у меня вариант с использованием мегафункции. Следовательно вопрос остался открытым. Похоже самый оптимальный вариант это использовать generic по рекомендации TRILLER.
  2. Спасибо, Andrew Su все работает :a14: . Но пока ковырялся обнаружил такой нюанс: При моделировании блока памяти с использованием тестбенча (не важно VHDL или Verilog) все работает как надо, а при попытке моделирования с использованием команд среды (force, run и т.д.) при чтении данные на шину dat не выставляются и шина остается в третьем состоянии. Кто-нибудь вкурсе в чем дело?
  3. Длительность импульсов записи и чтения по 100 нс. В принципе ничего не мешает взять стандартную и моделировать нетлист, но почему мое описание не работает? где я ошибся, я ведь не синтезирую его. Память не суть какая, в работе циклы записи и чтения разнесены по времени.
  4. Добрый день, уважаемые коллеги! в целях отладки мне требуется имитация внешней памяти, для чего мной было написано следующее описание: `timescale 1ns/1ps module RAM (DAT, ADRESS, CE, WE, OE, read, test_dat); input [14:0] ADRESS; inout [7:0] DAT; input CE; input OE; input WE; output read; output test_dat; reg [7:0] mas [0:32767]; wire read; assign read = OE | CE; assign DAT = !read ? mas[ADRESS] : 8'bZ; assign test_dat = mas[ADRESS]; always @(negedge WE) begin if (!CE) #5 mas[ADRESS] = DAT; end endmodule Вроде бы описание простейшее и все понятно, но не понятно почему не работает. Прилагаю диаграммы. Вопроса собственно два: 1. Почему не происходит запись во втором случае (когда выставлены данные и СЕ = 0)? 2. Почему не происходит чтение, дже тех же иксов, (когда ОЕ и read равны 0)?
  5. на двух частотах 37,5 и 40 реализован нониусный метод измерения временнЫх задержек.
  6. Вроде разобрался. Оказалась банальная невнимательность. В процессе доработок каким-то образом покарежил цыфровую часть системы ФАПЧ, расположенную в ПЛИС (странно, вроде бы этот блок вообще не трогал). В итоге ФАПЧ вместо 37,5 генерил что придется. Сейчас все поправил - все работает. Всем спасибо за активное участие и полезные советы. :a14:
  7. Обратите внимание, что при смене регистров reseta и resetc в строчке assign reset = reseta & !resetc; Формирование импульса будет происходить либо по положителльному, либо по отрицательному перепаду входного сигнала alarm. Также проверте длительность входного сигналла alarm. Ну и попробуйте синтезировать и моделировать синтезированное описание.
  8. Добрался я сегодня до инструментария и... действительноничего не работает и не только на моделировании, но и синтезится не правильно. Странно на VHDL'е такой ситуации не возникало. Для правильной симуляции и синтеза нужно поменять порядок назначения регистров на противоположный. Да и описание приведенное Вами будет выдавать импульсы длительностью в 2 такта частоты ALARM. именно этот сигнал считается у Вас тактовой!!! Если Вам нужен сигнал длительностью 2 такта частоты CLK, то вам нужно придерживаться моего описания приведенного выше. Для этого нужен сигнал alarm больше 2-х тактов частоты CLK. Если у вас короткий сигнал - самое простое решение - расширить его на триггерах и функции "ИЛИ". итоговый код для узкого импульса alarm выглядит так: module one (clk, alarm,reset); input clk; input alarm; output reset; //reg reset; reg reseta; reg resetb; reg resetc; reg alarmb; always @(posedge clk) begin alarmb = alarm; end assign alarmbig = alarm | alarmb; always @(posedge clk) begin resetc = resetb; resetb = reseta; reseta = alarmbig; end assign reset = reseta & !resetc; endmodule
  9. Вот тут крепко подумать надо. Вроде бы ничего такого нет все шины данных переходят вместе с сигналами записи, и при этом данные появляются на несколько тактов раньше записи т.е таких ситуаций с неполным защелгиванием быть не должно. Но на всякий случай еще раз проверю в понедельник. Да и при такой ситуации он бы вылетал постоянно, а не только после компиляции с изменениями. Там частоты близкие 40 и 37,5 они за 15/16 тактов полностью сходятся и расходятся.
  10. стандартное решение выделения фронта широкого сигнала выглядит примерно так: always @(CLK, alarm) begin if(posedge(CLK)) begin reseta = alarm; resetb = reseta; resetc = resetb; end end assign reset = resetc & !reseta;
  11. В этом вопросе согласен с Kuzmi4. Метасостояние, если оно имелось виду под "красные линии" не должно исправляться инверсией тактовой частоты в тесте. думаю вам нужно пересмотреть свой дизайн в плане включения синхронных сбросов всех или хотябы ключевых регистров. Или отковырять причину появления этих самых "красных линий".
  12. Вам нужен однократный сброс при включении питания, или сигнал сброса должен появляться перед каждым обновлением кода? Приведенный вами код - не синтесируем думаю именно на это рукается компилятор. Во первых условие alarm == 1'b1 не имеет смысла т.к. все, что у вас в блоке always будет происходить в момент перехода сигналла alarm из 0 в 1, т.е. в данном случае сигнал alarm у вас является тактовой частотой. не уверен насчет правильности синтаксита конструкции if else begin ( CLK == CLK +2'b10 ) именно первых трех слов. Далее условие (если это конечно условие) такое впринцепе не может быть выполнено потому что вы пытаетесь сравнить одноразрядный сигнал с самим собой + двухразрядная константа - на физическом уровне это полный абсурд. ну и (posedge CLK =0 ); вот это вообще не понял.
  13. "Примерно так" - это как? уже представлено 3 варианта кода :) Ну. если по моему первому варианту, то я оговорил сразу что предполагается короткий запускающий. Выкладывайте код - будем смотреть.
×
×
  • Создать...