samir630 0 26 марта, 2017 Опубликовано 26 марта, 2017 · Жалоба счетчик времени работает некоректно. вместо переключения на 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 26 марта, 2017 Опубликовано 26 марта, 2017 · Жалоба счетчик времени работает некоректно. вместо переключения на 59 секундах, минутах, часах и т.д заглатывает число 60. как исправить? "Трошечки не так..." Так на Верилоге файлы не пишут. Это же не Си... Это не "программа", а "описание". Вот порядок действий. Нарисуйте блок-схему алгоритма. По ней нарисуйте блок-схему вычислителя. Как минимум есть 3 варианта таких блок-схем. И соотв. получается 3 разных схемы часов... Далее выделите блоки, которые выполняют одинаковые функции и сделайте их отдельными параметризируемыми модулями. Введите параметры, позволяющие выводить на консоль не все подряд, а только то, что требуется для данного прогона отладки. И только потом делайте симуляцию... Если надо подробнее, то могу голосом по скайпу. PS и если не лень, то посчитайте на пальцах от 0 до 24.. От 0 до 60... Сколько получится и сколько Вам бы хотелось получить? Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба Да ему лабу сдать и успокоится:) у него секунды до 59, часы до 23, а минуты до 60, и его это не смущает ни капельки:) это он еще день, месяц и год не ждал чтобы поглядеть как у него в этом месте переходы:).... ведь завтра то у него не наступит никогда:) Обидно не то что он хотел проскочить на халяву, обидно что он захотел этого даже не попытавшись сделать хоть что-то. Даже прочесть содранный код... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
likeasm 0 27 марта, 2017 Опубликовано 27 марта, 2017 · Жалоба про високосный год не забудьте :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться