-5

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

4

2 回答 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
于 2018-06-10T06:54:34.153 回答
0

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

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
于 2017-11-03T21:57:45.367 回答