Verilog:使用触发器实现管道硬件

问题描述 投票:0回答:2

如何在 Verilog 中创建简单的单级管道?

verilog hardware system-verilog flip-flop
2个回答
0
投票
module pipeline#(
   parameter PIPE_NUM = 2,
   parameter DATA_WIDTH = 32 
)(
  input clock,
  input [DATA_WIDTH-1:0]data_in,
  output [DATA_WIDTH-1:0]data_out
);

 //synthesis translate_off
 initial begin
   if(PIPE_NUM < 1) begin
       $fatal("Error: PIPE_NUM must be greater than 0!");
   end 
 end 
 //synthesis translate_on

 reg [DATA_WIDTH-1:0]pipeline_reg[PIPE_NUM-1:0]/*synthesis preserve*/;

 assign data_out = pipeline_reg[PIPE_NUM-1];

 integer p;
 always @(posedge clock)begin
    pipeline_reg[0] <= data_in; 
    for(p = 1;p < PIPE_NUM;p = p+1)begin
       pipeline_reg[p] <= pipeline_reg[p-1];
    end
 end 

endmodule

0
投票

创建单个状态管道的最简单方法是创建两个与管道输入(in_pipe)同步的always块,如下所示。这是有效的,因为事件在模拟器时间周期中是如何排队的。

module pipeline (reset,in,clock,out)

input reset, input, clock;
output out;`

logic reset, input, clock;
reg out, in_pipe;

always @(posedge clock or negedge reset)
 begin
  if(reset)
   begin
    in_pipe <= 0;
   end
 else
   begin
    in_pipe <= in;
   end
 end

always @(posedge clock or negedge reset)
begin
 if(reset)
  begin
   out<= 0;
  end
 else
  begin
   out<= in_pipe;
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.