我正在尝试对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