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

счетчики считают лишний сигнал

счетчик времени работает некоректно. вместо переключения на 59 секундах, минутах, часах и т.д заглатывает число 60. как исправить?

 

 

`timescale 1ms / 1us

 

module simple_add_sub(wcounter,wsec, wmin,wchas,wday,wmonth,wyear,wr,year,month,day,chas, min,sec,counter,clk,reset);

input wire reset, clk,wr;

input wire [9:0] wcounter;

input wire [5:0] wsec;

input wire [5:0] wmin;

input wire [5:0] wchas;

input wire [5:0] wday;

input wire [5:0] wmonth;

input wire [20:0] wyear;

 

output reg [9:0] counter;

output reg [5:0] sec;

output reg [5:0] min;

output reg [5:0] chas;

output reg [5:0] day;

output reg [5:0] month;

output reg [20:0] year;

 

always @(posedge clk or posedge reset)

 

if(reset || counter==999) // Считаем миллисекунды

counter <= 10'd0;

else

counter <= counter + 1'd1;

 

 

always @(posedge clk or posedge reset) // Считаем секунды

if(reset || sec==59)

sec = 10'd0;

else

begin

if(counter==998)

sec = sec+1'd1;

end

 

always @(posedge clk or posedge reset) // Считаем наши минуты хмхм

 

if(reset || min==60)

min <= 10'd0;

else

begin

if(sec==60)

min <= min+1'd1;

end

 

always @(posedge clk or posedge reset) // Считаем наши часы хмхм

if(reset || chas==23)

chas <= 10'd0;

else

begin

if(min==60)

chas <= chas+1'd1;

end

 

always @(posedge clk or posedge reset) // Считаем наши часы хмхм

if(reset || day==31)

day <= 10'd0;

else

begin

if(chas==24)

day <= day+1'd1;

end

 

 

always @(posedge clk or posedge reset) // Считаем наши часы хмхм

if(reset || month==12)

month <= 10'd0;

else

begin

if(day==31)

month <= month+1'd1;

end

 

always @(posedge clk or posedge reset) // Считаем наши года хмхм

if(reset || year==1000000)

year <= 10'd0;

else

begin

if(month==12)

year <= year+1'd1;

end

 

/* always @(wr) // Считаем наши года хмхм

if(wr)

begin

year <= wyear;

month<=wmonth;

day<=wday;

chas<=wchas;

min<=wmin;

sec<=wsec;

counter<=wcounter;

end

 

 

*/

 

 

endmodule

 

 

module test_counter;

 

reg clk,reset,wr;

reg [9:0] wcounter;

reg [5:0] wsec;

reg [5:0] wmin;

reg [5:0] wchas;

reg [5:0] wday;

reg [5:0] wmonth;

reg [20:0] wyear;

wire [9:0]counter;

wire [5:0] sec;

wire [5:0] min;

wire [5:0] chas;

wire [5:0] day;

wire [5:0] month;

wire [20:0] year;

 

//устанавливаем экземпляр тестируемого модуля

simple_add_sub counter_inst(wcounter,wsec, wmin,wchas,wday,wmonth,wyear,wr,year,month,day,chas,min,sec,counter,clk,reset);

 

//моделируем сигнал тактовой частоты

 

always

 

#0.5 clk <= ~clk;

 

 

 

 

 

 

//от начала времени...

 

initial

begin

clk=1;

wyear=2017;

wmonth=12;

wday=31;

wchas=23;

wmin=59;

wsec=59;

wcounter=999;

 

#0 reset=1;

#1 reset=0;

#0 wr=1;

#1 wr=0;

 

 

 

end

 

//заканчиваем симуляцию в момент времени "400"

initial

begin

#400000 $finish;

end

 

//создаем файл VCD для последующего анализа сигналов

initial

begin

$dumpfile("out.vcd");

$dumpvars(0,test_counter);

end

 

//наблюдаем на некоторыми сигналами системы

 

 

endmodule

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


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

счетчик времени работает некоректно. вместо переключения на 59 секундах, минутах, часах и т.д заглатывает число 60. как исправить?

 

"Трошечки не так..."

Так на Верилоге файлы не пишут. Это же не Си... Это не "программа", а "описание".

Вот порядок действий.

Нарисуйте блок-схему алгоритма.

По ней нарисуйте блок-схему вычислителя. Как минимум есть 3 варианта таких блок-схем. И соотв. получается 3 разных схемы часов...

Далее выделите блоки, которые выполняют одинаковые функции и сделайте их отдельными параметризируемыми модулями.

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

И только потом делайте симуляцию...

 

Если надо подробнее, то могу голосом по скайпу.

 

PS и если не лень, то посчитайте на пальцах от 0 до 24.. От 0 до 60... Сколько получится и сколько Вам бы хотелось получить?

Удачи!

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


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

Да ему лабу сдать и успокоится:)

 

у него секунды до 59, часы до 23, а минуты до 60, и его это не смущает ни капельки:)

 

это он еще день, месяц и год не ждал чтобы поглядеть как у него в этом месте переходы:)....

ведь завтра то у него не наступит никогда:)

 

 

Обидно не то что он хотел проскочить на халяву, обидно что он захотел этого даже не попытавшись сделать хоть что-то. Даже прочесть содранный код...

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...