|
Симуляция счётчика в ModelSim |
|
|
|
May 29 2018, 16:27
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 17-03-18
Пользователь №: 102 435

|
Подскажите, как запустить счетчик, чтобы вместо красных линий (нулей) были зелёные линии Код module count (input clk, output reg [1:0]counter); always @(posedge clk) counter <= counter + 1; endmodule Test bench Код module top; reg clk; wire [1:0] counter; count tcount (clk, counter); initial begin clk = 0; forever #10 clk = !clk; end endmodule
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 28)
|
May 29 2018, 16:51
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 12-05-05
Из: г. Москва
Пользователь №: 4 944

|
Задайте начальное значение счетчику (обнулите). Вы же сигналу clk в тестбенче задали начальное значение перед инверсией.
|
|
|
|
|
May 29 2018, 17:09
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 17-03-18
Пользователь №: 102 435

|
Спасибо. А как это сделать? Если написать Код module top; reg clk; wire [1:0] counter; count tcount (clk, counter); initial begin clk = 0; forever #10 clk = !clk; counter=0; end endmodule то компилятор выдаёт ошибку Error: C:/.../tcount.v(9): (vlog-2110) Illegal reference to net "counter". Наверное, надо делать счётчик с загрузкой и загружать значение "ноль"
Сообщение отредактировал demsp - May 29 2018, 17:16
|
|
|
|
|
May 29 2018, 17:33
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 12-05-05
Из: г. Москва
Пользователь №: 4 944

|
Да, конечно, нужно сделать синхонную загрузку или обнуление (что вам нужно по заданию) счетчика. Делаете дополнительный вход (reset, например) и по нему обнуляете. А если совсем по простому, то можно попробовать так (по крайней мере в sv) Код module count (input clk, output reg [1:0]counter = 0); always @(posedge clk) counter <= counter + 1; endmodule [/quote]
|
|
|
|
|
May 29 2018, 18:56
|
Группа: Участник
Сообщений: 13
Регистрация: 29-04-18
Из: Москва
Пользователь №: 103 558

|
Асинхронный сброс Код module count ( input clk_i, input reset_i, output out_o );
reg rst_rg; reg [2:0] cnt;
always @(posedge clk_i) begin rst_rg <= reset_i; end
always @(posedge clk_i or negedge rst_rg) begin if (!rst_rg) cnt <= 3'b0; else cnt <= cnt + 1'b1; end
assign out_o = cnt[0]; // Just an example endmodule
|
|
|
|
|
May 29 2018, 19:00
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата Подскажите, как запустить счетчик, чтобы вместо красных линий (нулей) были зелёные линии Quartus знает, что при включении питания регистры инициализируются нулями. А вот Modelsim про это не знает, и инициализирует регистры неопределенным значением. Вывод: в файле описания счетчика принудительно проинициализировать регистры.
|
|
|
|
|
May 29 2018, 19:54
|
Группа: Участник
Сообщений: 13
Регистрация: 29-04-18
Из: Москва
Пользователь №: 103 558

|
Еще давно, когда только начинал изучать Verilog, коллега поделился мудростью. Применял подобную схему в своих проектах, никогда проблем не возникало.
|
|
|
|
|
May 30 2018, 22:01
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 8-05-18
Пользователь №: 103 834

|
Цитата(iosifk @ May 30 2018, 07:09)  А просто взять шаблон простейшего счетчика из учебника или из того же Моделсима без отдельного триггера для сигнала сброс, слабо было? Он его, Иосиф Григорьевич, "недосинхронизировал" )) Спасибо за всю серию в общем и за статью "Краткий курс HDL. Часть 10. Несколько слов о «сбросе»" в частности )
--------------------
-- С наилучшими пожеланиями, Marat.
|
|
|
|
|
May 31 2018, 04:15
|
Группа: Участник
Сообщений: 13
Регистрация: 29-04-18
Из: Москва
Пользователь №: 103 558

|
Цитата(Marat Zuev @ May 30 2018, 23:01)  Он его, Иосиф Григорьевич, "недосинхронизировал" )) Спасибо за всю серию в общем и за статью "Краткий курс HDL. Часть 10. Несколько слов о «сбросе»" в частности ) И где же тут "недосинхронизация" ?
|
|
|
|
|
May 31 2018, 04:37
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(Nieve @ May 31 2018, 07:15)  И где же тут "недосинхронизация" ? Приходит асинхронный сброс на триггер. И загоняет его в метастабильное состояние. И этот нестабильный сброс с выхода триггера сбрасывает счетчик. Или не сбрасывает. Или недосбрасывает. Как повезет. Если в проекте в верхнего уровня есть reset bridge - то данный триггер не несет никакого смысла. Если в проекте в верхнего уровня нет reset bridge - то данный триггер не несет никакого смысла.
|
|
|
|
|
May 31 2018, 04:42
|
Группа: Участник
Сообщений: 13
Регистрация: 29-04-18
Из: Москва
Пользователь №: 103 558

|
Не совсем. Сначала триггер синхронизируется по тактовой частоте, а только потом уже используется для асинхронного сброса.
|
|
|
|
|
May 31 2018, 04:44
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(Nieve @ May 31 2018, 07:42)  Не совсем. Сначала триггер синхронизируется по тактовой частоте, а только потом уже используется для асинхронного сброса. Тогда он не нужен совсем... Выход с reset bridge делает асинхронный сброс синхронным тактовой. Больше никаких дополнительных триггеров не нужно. P.S. Вы хоть читали статью "Краткий курс HDL. Часть 10. Несколько слов о «сбросе»"
|
|
|
|
|
May 31 2018, 05:28
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(andrew_b @ May 31 2018, 08:08)  Эм, может, я чего-то пропустил в этой жизни? Где это написано? Так вот была предложена такая схема сброса: Код always @(posedge clk_i) begin rst_rg <= reset_i; end Если сигнал reset_i - внешний и асинхронен тактовой, то триггер rst_rg перейдет в метастабильное состояние. И соответственно применять выход rst_rg применять как асинхронный сброс - чревато проблемами. А если сброс был синхронизирован раньше, то зачем вообще применять триггер rst_rg ?
|
|
|
|
|
May 31 2018, 05:31
|
Группа: Участник
Сообщений: 13
Регистрация: 29-04-18
Из: Москва
Пользователь №: 103 558

|
Цитата(Flip-fl0p @ May 31 2018, 04:44)  Тогда он не нужен совсем... Выход с reset bridge делает асинхронный сброс синхронным тактовой. Больше никаких дополнительных триггеров не нужно. P.S. Вы хоть читали статью "Краткий курс HDL. Часть 10. Несколько слов о «сбросе»" Да, причем в оригинале. Скажу лишь одно, применял подобную схему во многих проектах (FPGA, ASIC) и никогда проблем со сбросом не наблюдалось. Спасибо за Ваше уточнение, а я обязательно проанализирую Ваше замечание. Цитата(andrew_b @ May 31 2018, 05:08)  Эм, может, я чего-то пропустил в этой жизни? Где это написано? Насколько я понял, тут имеется в виду ситуация, когда сигнал сброса формируется по одной частоте, а схема работает по другой. В таком случае, после подачи сигнала сброса на триггер, он действительно может "свалиться" в метастабильное состояние.
|
|
|
|
|
May 31 2018, 06:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757

|
Цитата(Nieve @ May 31 2018, 08:31)  Насколько я понял, тут имеется в виду ситуация, когда сигнал сброса формируется по одной частоте, а схема работает по другой. В таком случае, после подачи сигнала сброса на триггер, он действительно может "свалиться" в метастабильное состояние. Это странно. Сброс на то и сброс, чтобы переводить триггер в заведомо известное стабильное состояние. А вот снятие сброса в окрестности фронта клока может устроить метастабильность, тут я согласен. Поэтому часто делают так: подача сброса асинхронно, снятие сброса синхронно. Быстрый гуглинг: http://chipverification.blogspot.com/2008/...nous-reset.html
|
|
|
|
|
May 31 2018, 10:07
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Flip-fl0p @ May 31 2018, 12:02)  Код ТС почему Вы не хотите пользоваться описание из темплате: Могу предположить потому-что ему не нужен был изначально асинхронный сброс. Но нужна была начальная установка регистрам, для того, чтобы запускалось моделирование в Modelsim А отсюда какой вывод? Проще было взять "обычное шаблонное" описание с асинхронным сбросом, как это привел Маверик. В симуляторе не задумываясь использовать Сброс, подогнав его в тестбенче под такты. А в железе, если этот Сброс не нужен, то на самом верху приписать ему неактивное значение и компилятор его сожрет. При этом все делается совершенно без ошибок и не плодятся лишние версии описания... Правда тогда нам всем нечего будет обсуждать, увы
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Jun 5 2018, 06:42
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 17-03-18
Пользователь №: 102 435

|
Да, спасибо, в реальной схеме сброс вообще не нужен, но в симуляции использую сброс для инициализации регистров нулями
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|