akorud 0 12 июля, 2011 Опубликовано 12 июля, 2011 · Жалоба Здравствуйте. Вроде бы простая задача - записывать в память входные данные и считать их количество. Данные приходят со стробом, синхронно с системным клоком, относительно медленно. Решение "в лоб": always @(posedge clk or posedge reset) begin if (reset) begin counter <= 0; mem_bank <=0; end else begin if (sample_wr) begin samples[{mem_bank, counter[4:0]}] <= sample; counter <= counter + 1; end if (counter == 6'b100000) begin counter <= 0; mem_bank <= ~mem_bank; end end end результат симуляции: честно - совсем запутался. Видно что нулевой отсчет записывается на следующем sample_wr в samples[1] (на графике не видно, но значение 3ff попадает именно туда). А нулевой адрес памяти так и остается пустой. Но почему? Я думал (немного освоившись с FPGA уже) что запись и инкремент counter будут происходить одновременно на данным клоке. Размер samples достаточный - я вырезал из графика неинтересное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DevL 0 12 июля, 2011 Опубликовано 12 июля, 2011 · Жалоба http://electronix.ru/forum/index.php?act=a...st&id=42313 может быть интересно для разобраться , слайд 8 Each Verilog simulation time step is divided into 4 queues который ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 13 июля, 2011 Опубликовано 13 июля, 2011 · Жалоба Each Verilog simulation time step is divided into 4 queues Спасибо, интересно. Но все равно не понимаю. На Q1 Evaluate RHS of all non-blocking assignments посчитается новое значение counter, потом на Q2 Change LHS of all non-blocking assignments - должно записаться sample в память (пусть даже под новым адресом). Но ведь Q1 и Q2 - тот же самый time step - дальше не понятно почему оно там появляется на следующем sample_wr, вообще через 4 такта clk. Ну и вопрос - как с таким жить? Задерживать sample_wr на такт clk и сначала делать запись а потом по задержанному - инкремент counter? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 13 июля, 2011 Опубликовано 13 июля, 2011 · Жалоба Похоже в вашем тестбенче sample_wr формируется неправильно, например с помощью блокирующего присваивания '=', а не '<=' На времянке вы этого не увидите, а результат будет ровно такой, как есть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 июля, 2011 Опубликовано 13 июля, 2011 · Жалоба Попробуйте сдвинуть sample на полтакта назад (влево). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 13 июля, 2011 Опубликовано 13 июля, 2011 · Жалоба Похоже в вашем тестбенче sample_wr формируется неправильно, например с помощью блокирующего присваивания '=', а не '<=' На времянке вы этого не увидите, а результат будет ровно такой, как есть Спасибо! Так и было. Теперь записывается под адрес 0 на следующем клоке и counter увеличивается тогда же. Я так понимаю для синтеза данный код подходит? (частоты настолько медленные что о времянке можно не беспокоиться пока). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 14 июля, 2011 Опубликовано 14 июля, 2011 · Жалоба Я так понимаю для синтеза данный код подходит? На первый взгляд - да Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 35 14 июля, 2011 Опубликовано 14 июля, 2011 · Жалоба Приветствую! Судя по картинке это ActiveHDL, а какой версии? Помню в 6-7 версиях постоянно ловил глюк подобного этому - некорректно отрабатывались события в пределах дельта-функции. Причем зависимость была от месторасположения always блока в модуле - поменяешь строки местами - и глюк то появится то пропадет. так что это скорее всего особенность "национального моделирования" от Aldec. Удачи! Rob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 14 июля, 2011 Опубликовано 14 июля, 2011 · Жалоба так что это скорее всего особенность "национального моделирования" от Aldec. По-моему, это принципиальное свойство моделирования (на Verilog, а, возможно, и не только на нем). В Quartus'е при функциональной симуляции наблюдал нечто похожее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 16 июля, 2011 Опубликовано 16 июля, 2011 · Жалоба По-моему, это принципиальное свойство моделирования (на Verilog, а, возможно, и не только на нем). В Quartus'е при функциональной симуляции наблюдал нечто похожее. ActiveHDL 8-й но мне тоже кажется что это принципиальное свойство функционального моделирования в идеальном мире. Я по началу даже добавлял искусственные задержки относительно клока :), потом привык. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться