FIFO连接到多路复用器

时间:2018-11-30 16:32:57

标签: verilog

我正在尝试对FIFO和多路复用器进行环回。 FIFO连接到多路复用器的输入2,而多路复用器的输出循环回输入1。每当有选择对多路复用器进行选择时,它都会从fifo接收输入并将其输入到多路复用器输出,但是当选择输入为零时,多路复用器只会将其循环回送。输出到输入1。一旦FIFO已满,就不再需要任何输入。写请求变为零。然后,选择信号变高,从而来自fifo的数据进入多路复用器输出。

FIFO,MUX是从ALTERA导入的ip内核,因此非常完美。数据输入和输出为44位宽。 FIFO为44位宽和16位深。

这是我的Verilog代码及其测试平台和仿真,但是只要我将SELECT输入提供给多路复用器,它就会从我的fifo中读取一个输入。我的fifo的其余数据在哪里?任何帮助请... !!!

module dataintest(
input clock,
input [43:0] in_word_packet,
//input RDReq,
//input WRReq,
input reset,
output EMPty,
output FULl,
output [43:0] out_word_packet,
input SEL
);

wire [43:0] fifo_mux;

reg read;
reg write;

always @ (posedge clock)
    begin
        if(reset)
            begin
                read<=0;
                write<=0;
            end
        else if(FULl)
            begin
                write<=0;
                //read<=1;
            end
        else if(SEL) //at the start fifo is empty so at every posedge of clock if doesnt allow fifo to read anything and goes forever
            begin
                read<=1;
            end
        else
            begin
            //  read<=1;
                write<=1;
            end
    end

    FIFOIP u0(
    .clock(clock),
    .data(in_word_packet),
    .rdreq(read),
    .sclr(reset),
    .wrreq(write),
    .empty(EMPty),
    .full(FULl),
    .q(fifo_mux));

    MUXIP u1(
    .data0x(out_word_packet),
    .data1x(fifo_mux),
    .sel(SEL),
    .result(out_word_packet));

endmodule

我写的测试台是:

`timescale 1ns / 1ns
module dataintesttb2  ; 

  reg    SEL   ; 
  reg    clock   ; 
  reg  [43:0]  in_word_packet   ; 
  wire  [43:0]  out_word_packet   ; 
  wire    FULl   ; 
  wire    EMPty   ; 
  reg    reset   ; 
  dataintest  
   DUT  ( 
       .SEL (SEL ) ,
      .clock (clock ) ,
      .in_word_packet (in_word_packet ) ,
      .out_word_packet (out_word_packet ) ,
      .FULl (FULl ) ,
      .EMPty (EMPty ) ,
      .reset (reset ) ); 


 initial
  begin
        SEL=1'b0;
        clock  = 1'b0  ;
        reset =1'b1;
        #10 reset =1'b0;
        //#10 SEL=1'b1;
      #200 SEL=1'b1;
      //#1600 SEL=1'b1;
    end

    always
        begin
            #5 clock = ~clock;
        end

    always
        begin
            #10 in_word_packet=in_word_packet+1;
        end

  initial
        begin
            in_word_packet=0;
        end


  initial
    #2000 $stop;
endmodule

这是模拟结果。 enter image description here

0 个答案:

没有答案