счетчик времени работает некоректно. вместо переключения на 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