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

samir630

Новичок*
  • Постов

    1
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. счетчик времени работает некоректно. вместо переключения на 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
×
×
  • Создать...