Я пытаюсь сделать петлю из fifo и mux.FIFO подключен ко входу 2 мультиплексора, в то время как выход мультиплексора зациклен на входе 1. Всякий раз, когда есть выбор для мультиплексирования, он принимает вход от fifo и переводит его в мультиплексор, но когда вход выбора равен нулю, мультиплексор просто зацикливает еговывод на вход 1. Как только FIFO заполнен, он больше не требует ввода.Запрос на запись становится равным нулю.Сигнал выбора становится высоким, поэтому данные из fifo поступают на выход мультиплексора.
FIFO, MUX - это импортированные IP-ядра от ALTERA, поэтому они идеальны.ширина ввода и вывода данных составляет 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
Это результаты моделирования. введите описание изображения здесь