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

Ну и как Вам все объяснять?

Ведь все эти 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

 

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


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

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;

...

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


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

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;

...

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


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

Давайте применять общепринятые сокращения.

Есть сигнал разрешения работы счетчика, например "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, по снятию сигнала разрешения работы, обязательна.

 

 

 

 

 

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


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

Тут счётчик считает не тактовые импульсы, а импульсы со входа 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, если Вы не в СПБ.. Ну или познакомьтесь с девушкой у которой скайп есть.

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


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

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х.

Изменено пользователем Димон

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


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

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

 

Или так, даже поближе к пределу мечтаний будет.

 

post-93222-1473234289_thumb.png

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


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

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

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

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

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

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

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

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

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

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