Я сделал поведенческое моделирование своего кода, и он отлично работает. Результаты прогнозируются. Когда я синтезирую свой код и загружаю его в spartan 3e FPGA и пытаюсь анализировать с помощью chipcope, результаты даже не приближаются к тому, что я ожидал. Что я сделал неправильно? http://pastebin.com/XWMekL7rКод Verilog имитирует, но не работает, как прогнозировалось на FPGA
ответ
Ваша проблема с линиями 13-16, где вы установили начальные значения для государственных регистров:
reg [OUTPUT_WIDTH-1:0] previousstate = 0;
reg [OUTPUT_WIDTH-1:0] presentstate = 1;
reg [6:0] fib_number_cnt = 1;
reg [OUTPUT_WIDTH-1:0] nextstate = 1;
Это эквивалентно написанию «начальное» заявление назначая эти значения, которое не является Синтезируемый - в аппаратных средствах нет такой ценности, как значение по умолчанию. Когда вы вставляете свой дизайн внутри FPGA, все эти регистры будут принимать случайные значения.
Вместо этого вам нужно инициализировать эти счетчики/состояния внутри вашего всегда блока, когда сброс высок.
always @(posedge clk or posedge reset)
if (reset) begin
previousstate <= 0;
presentstate <= 1;
... etc ...
end
Ответ на последующие вопросы:
При инициализации кода, как это, вообще ничего не происходит на аппаратном уровне - он получает полностью игнорируется, так же, как если бы вы положили в $ дисплей заявление. Инструмент синтеза пропускает все симуляционные конструкции, но обычно дает вам какое-то предупреждение об этом (это действительно зависит от инструмента).
Теперь блокирующий и неблокирующий вопрос требует очень длинного ответа :). Я приведу вас к этой статье из SNUG-2000, которая, вероятно, является лучшей бумагой, когда-либо написанной по этому вопросу. Он отвечает на ваш вопрос, как и многие другие по этой теме. Позже вы поймете, почему использование блокирующих операторов в последовательной логике считается плохой практикой, и почему ваш код отлично работает с операторами блокировки.
http://cs.haifa.ac.il/courses/verilog/cummings-nonblocking-snug99.pdf
Больше ответов:
Обычный «шаблон» для создания логики, как ваша, чтобы иметь два всегда блоков, один определяющий логику, и один определения триггеров. В первом случае вы используете блокирующие операторы для реализации логики, а в последнем вы защелкиваете (или перезапускаете) генерируемое значение. Итак, что-то вроде этого:
wire some_input;
// Main logic (use blocking statements)
reg state, next_state;
always @*
if (reset) next_state = 1'b0;
else begin
// your state logic
if (state) next_state = some_input;
else next_state = 1'b0;
end
// Flops (use non-blocking)
always @(posedge clock)
if (reset) state <= 1'b0;
else state <= next_state;
Обратите внимание, что я использую синхронный сброс, но при необходимости вы можете использовать async.
Интересный момент! Когда я инициализировал свои регистры, как показано в коде, синтезатор не жаловался. Что именно происходит в оборудовании, когда что-то подобное делается? –
Кроме того, когда я выполняю симуляцию с неблокирующими операторами в всегда блоке, числа, которые я получаю, не совпадают с операторами блокировки. Зачем? (Операторы блокировки дают правильные результаты) –
Привет, спасибо за дополнительный ввод. Чтение раздела 11, я вижу, что я должен добавить дополнительные элементы в список чувствительности для неблокирующих назначений для правильной работы. Но в списке чувствительности я не могу смешивать элементы с инициированным эффектом и уровнем срабатывания. Я также не могу сделать еще один блок с элементами, инициирующими уровень, потому что это будет делать несколько назначений для одних и тех же элементов в более чем одном блоке всегда (помните, согласно вашему предложению, я использую блок, инициированный фронтом, для инициализации элементов в состоянии сброса). Что бы вы посоветовали? Придерживайтесь блокировкой? –
Строки 13-16 являются правильными. "reg [6: 0] fib_number_cnt = 1;" это не то же самое, что использовать «начальную» инструкцию. Прочтите руководство по синтезу Xilinx для более подробного описания того, как инициализировать регистры.
- 1. FPGA (Verilog) - Работа в симуляции, но не работающая на FPGA
- 2. Verilog: Параметр модуля, код имитирует, но не синтезирует
- 3. Verilog поведенческий код получения моделируется правильно, но не работает, как ожидалось на FPGA
- 4. Поведенческий код Verilog правильно моделируется, но не работает как ожидалось на FPGA
- 5. Verilog код очень хорошо работает в моделировании, но не на FPGA
- 6. Код VHDL работает в ModelSim, но не на FPGA
- 7. Код VHDL работает в симуляции, но не на FPGA
- 8. verilog modelsim fpga
- 9. DWT в Verilog (реализация FPGA)
- 10. Verilog, FPGA, использование унифицированного регистра
- 11. Verilog Inter-FPGA SPI Communication
- 12. VHDL Работает ли мой код на FPGA?
- 13. FPGA синтезируемый код Verilog с номерами с плавающей запятой
- 14. Испытательный стенд Verilog компилируется, но имитирует остановки при 700 тиках
- 15. FPGA скорость Verilog код загрузки и предельный размер
- 16. Verilog: 1-битный полный сумматор не будет работать на FPGA
- 17. Программа работает на тренажере, но не на FPGA
- 18. Verilog HDL, Пользовательский вход от FPGA
- 19. Мой быстры код не имитирует
- 20. Код импорта из FPGA Board (Spartan 3E)
- 21. Код для проверки ps/2 на verilog
- 22. Как получить изображение rgb в FPGA наиболее эффективно, используя verilog
- 23. Имитация процессора MIPS на FPGA с использованием Verilog
- 24. Как настроить Eclipse для дизайна FPGA в VHDL и Verilog)?
- 25. Verilog always @ (..) выход не работает как ожидалось
- 26. Тестирование интерфейса PCI на FPGA
- 27. verilog mux не работает
- 28. Как связать монитор vga с fpga с помощью verilog?
- 29. Зарегистрируйте varibles в Verilog с помощью Quartus и FPGA
- 30. nth-child не влияет на границы, как и прогнозировалось
Когда вы говорите «поведенческие», я предполагаю, что вы имеете в виду RTL. Создает ли ваш инструмент синтеза файл списка соединений Verilog и файл SDF? Если это так, вы запустили имитацию ворот с задержками SDF с аннотированным аннотацией? Это тоже прошло? Использует ли ваша цепочка инструментов средство проверки эквивалентности или средство анализа статического времени? Это поможет вам определить, есть ли у вас функциональная ошибка или проблема с синхронизацией. – toolic
Я не делал никаких STA. Я использую Xilinx ISE без доступа Primetime или другого инструмента анализа STA. Я попытаюсь использовать Xilinx Timing Analyzer и посмотреть, какую информацию я могу извлечь. –