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

    

Симуляция счётчика в ModelSim

Подскажите, как запустить счетчик, чтобы вместо красных линий (нулей) были зелёные линии

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

post-102435-1527611175_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задайте начальное значение счетчику (обнулите).

Вы же сигналу clk в тестбенче задали начальное значение перед инверсией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо. А как это сделать? Если написать

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, конечно, нужно сделать синхонную загрузку или обнуление (что вам нужно по заданию) счетчика.

Делаете дополнительный вход (reset, например) и по нему обнуляете.

 

А если совсем по простому, то можно попробовать так (по крайней мере в sv)

module count (input clk, 
output reg [1:0]counter = 0);
always @(posedge clk) 
counter <= counter + 1; 
endmodule

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Асинхронный сброс

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Подскажите, как запустить счетчик, чтобы вместо красных линий (нулей) были зелёные линии

Quartus знает, что при включении питания регистры инициализируются нулями. А вот Modelsim про это не знает, и инициализирует регистры неопределенным значением.

Вывод: в файле описания счетчика принудительно проинициализировать регистры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Асинхронный сброс

Даже слишком асинхронный, очень даже слишком, чтобы его другим предлагать...

Откуда такое откопали?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще давно, когда только начинал изучать Verilog, коллега поделился мудростью. Применял подобную схему в своих проектах, никогда проблем не возникало.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Еще давно, когда только начинал изучать Verilog, коллега поделился мудростью. Применял подобную схему в своих проектах, никогда проблем не возникало.

Ну да, а Суворов через Альпы ходил, так его австрийцы и французы сподобили. И тоже проблем не было...

Вот видимо и ваш коллега тоже любит через Альпы и шаблоны ему не указ...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Еще давно, когда только начинал изучать Verilog, коллега поделился мудростью. Применял подобную схему в своих проектах, никогда проблем не возникало.

Значит Вы очень везучий человек :biggrin: .

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Даже слишком асинхронный, очень даже слишком, чтобы его другим предлагать...

Откуда такое откопали?

Всегда так делали. А в чём, собственно, проблемы?

У асинхронного сброса есть одно неустанимое преимущество: для него не нужен клок. В отличие от.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Всегда так делали. А в чём, собственно, проблемы?

У асинхронного сброса есть одно неустанимое преимущество: для него не нужен клок. В отличие от.

А просто взять шаблон простейшего счетчика из учебника или из того же Моделсима без отдельного триггера для сигнала сброс, слабо было?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А просто взять шаблон простейшего счетчика из учебника или из того же Моделсима без отдельного триггера для сигнала сброс, слабо было?
Он его, Иосиф Григорьевич, "недосинхронизировал" ))

Спасибо за всю серию в общем и за статью "Краткий курс HDL. Часть 10. Несколько слов о «сбросе»" в частности )

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Он его, Иосиф Григорьевич, "недосинхронизировал" ))

Спасибо за всю серию в общем и за статью "Краткий курс HDL. Часть 10. Несколько слов о «сбросе»" в частности )

И где же тут "недосинхронизация" ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
И где же тут "недосинхронизация" ?

Приходит асинхронный сброс на триггер.

И загоняет его в метастабильное состояние.

И этот нестабильный сброс с выхода триггера сбрасывает счетчик.

Или не сбрасывает.

Или недосбрасывает.

Как повезет.

 

Если в проекте в верхнего уровня есть reset bridge - то данный триггер не несет никакого смысла.

Если в проекте в верхнего уровня нет reset bridge - то данный триггер не несет никакого смысла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти