OparinVD 0 30 мая, 2020 Опубликовано 30 мая, 2020 · Жалоба Всем доброго дня! Такая проблема: моделирую в Active-HDL в смешанном режиме. Для синтеза пишу на vhdl, а тестбенч на sv. Столкнулся с тем, что мой компонент uut видит управляющий сигнал, формируемый в тестбенче по @(posedge clk), не после прихода фронта clk, а в момент прямо перед фронтом. Пока писал, пост, решение уже подсказали. Поменял в тестбенче module на program. Теперь сигналы из тестбенча в uut видятся корректно, а вот в обратную сторону - по-прежнему нет. Тестбенч видит tready так, будто он установлен не в момент времени, стремящийся к фронту справа, а в момент, стремящийся к фронту слева... Как это исправить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Джеймс 3 30 мая, 2020 Опубликовано 30 мая, 2020 · Жалоба Во-первых непонятно, что у вас за симулятор. Может ошибка в нём (UPD. Увидел, Active HDL - ничего про него сказать не могу) Но я так подозреваю что вам нужно применить во всём проекте так называемую транспортную задержку:пример: always @ (posedge clk) begin a<= #1 d; b<= #1 a; end где 1 конечно же лучше заменить параметром. Вариант VHDL: TIME_DELAY : time := 1 ns PROCESS(clk, rst) BEGIN cnt_data <= cnt_data - 1 after TIME_DELAY; и так везде Первая попавшаяся ссылка на эту тему:https://asic4u.wordpress.com/2016/03/28/verilog-1-delay-in-rtl/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OparinVD 0 31 мая, 2020 Опубликовано 31 мая, 2020 · Жалоба Спасибо. Честно говоря, транспортная задержка - это первое, что пришло в голову. Но мне показалось, что вставлять ее повсеместно, да к тому же на этапе функционального моделирования как-то через чур. Может тут еще где-то собака порылась? Еше немного из "истории болезни": 1) когда я пользовался только vhdl, то с подобным сталкивался, когда в тестбенче писал просто "wait for ..." И даже если этот wait совпадал по времени с тактом, это событие симулятором выставлялось в очередь перед фронтом клока. Вылечил тем, что везде, где надо стал ставить "wait until (clk='1' and clk'event)". 2) Связку vhdl-sv использую впервые. Тут также явно жду события @(posedge clk), и поначалу всё работало, как задумано. Но потом я исключил входную fifo от xilinx из цепочки TB-UUT и стал axi-стримить напрямую своему компоненту... и всё сломалось ) Вероятно, IP FIFO как раз и обеспечивало все нужные задержки, но хоть убейте, это выглядит костылем :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 31 мая, 2020 Опубликовано 31 мая, 2020 · Жалоба 21 hours ago, OparinVD said: Тестбенч видит tready так, будто он установлен не в момент времени, стремящийся к фронту справа, а в момент, стремящийся к фронту слева... На картинке явно нарушен холд. Это - нетлист моделируется, или RTL? - Если нетлист, то нарушены тайминги по холду (надо смотреть репорты) - Если это RTL - надо разбираться с тем, как формируются клоки S_AXIS_CLK и тот клоки, что драйверит S_AXIS_TREADY; скорее всего где то есть некорректный клокгейт или просто задержка в цепи клока S_AXIS_CLK . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 31 мая, 2020 Опубликовано 31 мая, 2020 · Жалоба Race condition, что тут еще сказать. Нужно использовать конструкцию clocking. Тогда не будет проблем с моделированием RTL и netlist. interface arb_if(input bit clk); logic [1:0] grant, request; logic rst; clocking cb @(posedge clk); output request; input grant; endclocking // Declare cb modport TEST (clocking cb, output rst); // Use cb modport DUT (input request, rst, output grant); endinterface Возьмите книгу SystenVerilog for Verification https://www.springer.com/gp/book/9781441945617 Chapter 4 Connecting the Testbench and Design И детально разберитесь с этим вопросом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 1 июня, 2020 Опубликовано 1 июня, 2020 · Жалоба Еще стандарт SV поройте, ЕМНИП, хотя может и изменять может помочь #0 после события по которому нужно читать в tb Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OparinVD 0 1 июня, 2020 Опубликовано 1 июня, 2020 · Жалоба Спасибо за наводку! Почитал про клокинг-блоки, вроде всё понятно, тут же внедрил, но потом голову сломал, как sv-program с интерфейс-блоком вставить в топлевел на vhdl... В общем, плюнул, поставил транспортные задержки в обе стороны. #0 не помогло, а больше ноля - всё заработало. Потом уже подумал, что надо наверное было топлевел на sv сделать и не мудрить, но в тот момент че-то не сообразил. Правда, вивадо мое художество отказывается биндить и не модлирует, но это уже другая история )) On 5/31/2020 at 10:52 AM, Aleх said: На картинке явно нарушен холд. Это - нетлист моделируется, или RTL? Не уверен в терминологии, но речь о нетлисте. Т.е. то, что получается после компиляции hdl без привязки ни к вендору, ни к конкретным ресурсам. Самое первичное функциональное моделирование. В общем, как выше выяснилось, дело именно в race Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться