|
Симуляция счётчика в 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
|
|
|
|
|
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 - то данный триггер не несет никакого смысла.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|