Jump to content

    
Sign in to follow this  
b-volkov

Подсчет импульсов

Recommended Posts

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

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

 

Share this post


Link to post
Share on other sites
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;

...

Share this post


Link to post
Share on other sites
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;

...

Share this post


Link to post
Share on other sites
Давайте применять общепринятые сокращения.

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

 

 

 

 

 

Share this post


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

Share this post


Link to post
Share on other sites

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 by Димон

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this