rmods 0 September 5, 2016 Posted September 5, 2016 · Report post Ну и как Вам все объяснять? Ведь все эти ENB, LATCH, PLS не прокомментированы... Вот это зачем? else begin CNT_REG <= 24'd0; CNT_OUT <= 24'd0; И это не "айс": ... CNT_REG <= 24'd0; end else CNT_REG = CNT_REG + PLS; module fdb_cnt ( input CLK, input ENB, //разрешение работы счётчика input RST, input LATCH, //запись данных в выходной регистр и сброс счётчика input PLS, //вход импульсов output reg [23:0] CNT_OUT ); reg [23:0] CNT_REG; ... endmodule Это else CNT_REG = CNT_REG + PLS; считать опечаткой, заменить на else CNT_REG <= CNT_REG + PLS; else begin CNT_REG <= 24'd0; CNT_OUT <= 24'd0; Это брос регистров при снятом сигнале ENB Quote Share this post Link to post Share on other sites More sharing options...
iosifk 3 September 5, 2016 Posted September 5, 2016 · Report post module fdb_cnt ( input CLK, input ENB, //разрешение работы счётчика input RST, input LATCH, //запись данных в выходной регистр и сброс счётчика input PLS, //вход импульсов output reg [23:0] CNT_OUT ); reg [23:0] CNT_REG; ... endmodule Это else CNT_REG = CNT_REG + PLS; считать опечаткой, заменить на else CNT_REG <= CNT_REG + PLS; else begin CNT_REG <= 24'd0; CNT_OUT <= 24'd0; Это брос регистров при снятом сигнале ENB Давайте применять общепринятые сокращения. Есть сигнал разрешения работы счетчика, например "ena" сигнал синхронного сброса - "sreset" Счетчик считает при if(ena) begin CNT_REG <= CNT_REG + 1'b1; ... Quote Share this post Link to post Share on other sites More sharing options...
iosifk 3 September 5, 2016 Posted September 5, 2016 · Report post module fdb_cnt ( input CLK, input ENB, //разрешение работы счётчика input RST, input LATCH, //запись данных в выходной регистр и сброс счётчика input PLS, //вход импульсов output reg [23:0] CNT_OUT ); reg [23:0] CNT_REG; ... endmodule Это else CNT_REG = CNT_REG + PLS; считать опечаткой, заменить на else CNT_REG <= CNT_REG + PLS; else begin CNT_REG <= 24'd0; CNT_OUT <= 24'd0; Это брос регистров при снятом сигнале ENB Давайте применять общепринятые сокращения. Есть сигнал разрешения работы счетчика, например "ena" сигнал синхронного сброса - "sreset" Счетчик считает при if(ena) begin CNT_REG <= CNT_REG + 1'b1; ... Quote Share this post Link to post Share on other sites More sharing options...
rmods 0 September 5, 2016 Posted September 5, 2016 · Report post Давайте применять общепринятые сокращения. Есть сигнал разрешения работы счетчика, например "ena" сигнал синхронного сброса - "sreset" Счетчик считает при if(ena) begin CNT_REG <= CNT_REG + 1'b1; ... Тут счётчик считает не тактовые импульсы, а импульсы со входа PLS, так-что доложно быть так: if(ena) begin if(PLS) CNT_REG <= CNT_REG + 1'b1; либо так: if(ena) begin CNT_REG <= CNT_REG + PLS; или ещё как. Вход LATCH то-же нужно учитывать, сигнал на него может прийти одновременно с сигналом PLS, и если это произошло, то записать в выходные регистры CNT_OUT <= CNT_REG + 1'b1; Очистка CNT_REG, по снятию сигнала разрешения работы, обязательна. Quote Share this post Link to post Share on other sites More sharing options...
iosifk 3 September 6, 2016 Posted September 6, 2016 · Report post Тут счётчик считает не тактовые импульсы, а импульсы со входа PLS, так-что доложно быть так: if(ena) begin if(PLS) CNT_REG <= CNT_REG + 1'b1; либо так: if(ena) begin CNT_REG <= CNT_REG + PLS; или ещё как. Вход LATCH то-же нужно учитывать, сигнал на него может прийти одновременно с сигналом PLS, и если это произошло, то записать в выходные регистры CNT_OUT <= CNT_REG + 1'b1; Очистка CNT_REG, по снятию сигнала разрешения работы, обязательна. Давайте еще раз... Я пытаюсь Вам объяснить, что не нужно плодить сущности... Иначе проект будет богат ошибками. Есть стандартный счетчик. У него есть параметр "разрядность", входы "сброс", "синхронный сброс", "разрешение счета"... Ну и возможно "направление счета"... Вот это все и ничего более быть не должно... Такой подход позволяет вставлять куски кода из заготовок одним кликом мыша... Либо в виде "модуля", либо в виде куска текста. Но в любом случае - без ошибок. Причем сразу с комментариями и с оформлением по всем правилам. Потому что наиболее часто встречающиеся куски кода я сразу же вставляю в "заготовки" в редакторе текста. Если в понятие "разрешение счета" входят несколько сигналов, то на входе "разрешение счета" должно быть "ena & PLS". Но никак не дополнительные строки текста if(ena) begin if(PLS) Тоже самое и для "Очистка CNT_REG, по снятию сигнала разрешения работы, обязательна".. Есть вход "синхронный сброс", надо просто приписать туда нужный сигнал... Был бы скайп, я бы показал на примерах. Так что ищите кафе или вокзал с бесплатным WiFi, если Вы не в СПБ.. Ну или познакомьтесь с девушкой у которой скайп есть. Quote Share this post Link to post Share on other sites More sharing options...
rmods 0 September 6, 2016 Posted September 6, 2016 (edited) · Report post module fdb_cnt ( input CLK, input ENB, input RST, input LATCH, input PLS, output reg [23:0] CNT_OUT ); reg [23:0] CNT_REG; reg CNT_CLR; always @ (posedge CLK) begin if(RST | CNT_CLR) CNT_REG <= 24'd0; else if(ENB && PLS) CNT_REG <= CNT_REG + 1'b1; end always @ (posedge CLK or posedge RST) begin if(RST) begin CNT_OUT <= 24'd0; CNT_CLR <= 1'b0; end else if(ENB && LATCH) begin CNT_OUT <= CNT_REG + PLS; CNT_CLR <= 1'b1; end else CNT_CLR <= ~ENB; end endmodule Ну а так? В симуляторе вроде работает, максимальная частота выросла на ~50МГц, и количество логических элементов уменьшилось на 20ть, до 52х. Edited September 6, 2016 by Димон Quote Share this post Link to post Share on other sites More sharing options...
rmods 0 September 7, 2016 Posted September 7, 2016 · Report post module efdb_cnt ( input CLK, input ENB, input RST, input LATCH, input PLS, output reg [23:0] CNT_OUT ); reg [23:0] CNT_REG; always @ (posedge CLK or posedge RST) begin if(RST) CNT_REG <= 24'd0; else if(~ENB || LATCH) CNT_REG <= 24'd0; else CNT_REG <= CNT_REG + PLS; end always @ (posedge CLK or posedge RST) begin if(RST) CNT_OUT <= 24'd0; else if(ENB && LATCH) CNT_OUT <= CNT_REG + PLS; end endmodule Или так, даже поближе к пределу мечтаний будет. Quote Share this post Link to post Share on other sites More sharing options...