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

VHDL-to-Verilog

Всем доброго времени суток. Хочу перевести сабж.

Код VHDL

process(clk, Q)
  begin
    if (clk'event and clk = '1') then
      if (ena = '1') then
        delay_pipe(0) <= Q;
        for n in 1 to PipeLength -1 loop
          delay_pipe(n) <= delay_pipe(n -1);
        end loop;
      end if;
    end if;
end process;
dQ <= delay_pipe(PipeLength -1);

 

мой код на Verilog

always    @(posedge clk) begin
  if (ena) begin
    delay_pipe[0] <= Q;    
    for (n = 1; n < PipeLength; n = n + 1)
      delay_pipe[n] <= delay_pipe[n - 1];
  end
end
assign    dQ = delay_pipe[PipeLength - 1];

 

получается такая картина

RTLView VHDL

post-64879-1344872639_thumb.jpg

 

RTLView Verilog

post-64879-1344872586_thumb.jpg

 

Вопрос: Как избавиться от мультиплексора в конце конвеера?

 

Спасибо.

 

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


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

Грамотно сравнивать эти вещи умеют Formality(Synopsys) / Conformal (Cadence)/ что_там_есть_у_ментора.

Усе.

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


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

Вопрос: Как избавиться от мультиплексора в конце конвеера?

Вроде, обе схемы - это одно и тоже. Во второй схеме вместо триггера с входом разрешения разрисованы его потроха, обычный триггер и мультиплексор. Но это тоже самое.

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


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

Из этого кода такого он не нагородил бы! Дайте весь код

 

reg        [ 2:0] delay_pipe [PipeLength - 1: 0];
integer n;
    
    always    @(posedge clk) begin
        if (ena) begin
            delay_pipe[0] <= Q;            
            for (n = 1; n <= PipeLength - 1; n = n + 1)
                delay_pipe[n] <= delay_pipe[n - 1];
        end
    end
    
    assign    dQ = delay_pipe[PipeLength - 1];

 

все!

 

Вроде, обе схемы - это одно и тоже. Во второй схеме вместо триггера с входом разрешения разрисованы его потроха, обычный триггер и мультиплексор. Но это тоже самое.

 

Не тоже самое. Насколько я знаю у каждого D-тригера есть вход ENA. А в моем случае создается мультиплексор. Кроме того при компиляции есть разница в кол-ве Comb. logic ровно на один мультиплексор :). И поскольку работают обе схемы одинаково, это чисто академический интерес.

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


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

это чисто академический интерес.

 

Если это оформить отдельным модулем, вся цепочка регистров реализуется одинаково и на верилоге.

`timescale 1 ns / 1 ps
module pipelined_rg
#(
parameter PipeLength = 15
)
(
input             clk,
input             ena,
input  [3:0] Q,
output [3:0] dQ
);


integer n;

reg [3:0] delay_pipe [PipeLength-1:0];

always @(posedge clk)
begin
if(ena)
    begin
    delay_pipe[0] <= Q;
    for (n=1; n<PipeLength; n=n+1)
        delay_pipe[n] <= delay_pipe[n-1];
    end
end

assign dQ = delay_pipe[PipeLength-1];

endmodule

 

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


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

Если это оформить отдельным модулем, вся цепочка регистров реализуется одинаково и на верилоге.

 

Да действительно. Странно, и о чем это говорит?

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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