FIFO-updation чтения и записи ПТРС

S

shyamsundar

Guest
HI EVERYBODY И. пытается писать код для FIFO и получил Этот пример из сети.Теперь надо было написано TESTBENCH для этого и в функциональном МОДЕЛИРОВАНИЕ чата не могут получить чтения и записи указателями обновляется.Может ли кто помочь решить эту проблему?

Модуль fifo2 (CLK, RST, FR, FW, данные, OUT);
Параметр fifo_width = 8, fifo_depth = 16, ptr_width = 4;
ввод CLK, RST, FR, FW;
вход [fifo_width-1: 0] данные;
Мощность [fifo_width-1: 0] Out;
Проволока полный, пустой;
Целое J;
REG [fifo_width-1: 0] Out;
REG [ptr_width-1: 0] WP;
REG [ptr_width-1: 0] RP;
REG [fifo_width-1: 0] стек [fifo_depth-1: 0];
REG [ptr_width-1: 0] fifo_count;

/***********************************************
Если это запись, поставить данные на
ввод автобуса в месте, на которое указывает
FIFO Напишите указателю
************************************************/
Всегда @ (posedge CLK)
начинать
если (FW) начать
Стек [WP] <= данные;
конец
конец

/***********************************************
Если это читать получить данные, которые в
Место, на которое указывает читать указатели
и поместить ее в выходной шины
************************************************/
Всегда @ (posedge CLK)
начинать
если (FR) начать
Выйти <= стек [RP];
конец
конец

/************************************************
Прирост записи указателя на каждом писать и
читать указатели на каждом чтении
************************************************/
Всегда @ (posedge CLK)
если (RST)
WP <= 0;
еще
WP <= (FW)?РГ 1: РГ;

Всегда @ (posedge CLK)
если (RST)
RP <= 0;
еще
RP <= (FR)?RP 1: RP;/*********************************************
FIFO Увеличение счетчика на каждом писать и
декремент на каждом чтении
**********************************************/

Всегда @ (posedge CLK)
начинать
если (РСТ) начала
fifo_count <= 0;
конец
ELSE BEGIN
случай ((FW, Fr))
2'b00: fifo_count <= fifo_count;
2'b01: fifo_count <= (fifo_count == 0)?fifo_depth: fifo_count - 1;
2'b10: fifo_count <= (fifo_count == fifo_depth)?0: fifo_count 1;
2'b11: fifo_count <= fifo_count;
ENDCASE
конец
конец

/ / присвоить fifo_hf = (fifo_count> = 4);
/ / присвоить fifo_he = (fifo_count <= 4);
назначить пусто = (fifo_count == 0);
назначить полной = (fifo_count> = fifo_depth);

ENDMODULE / / из FIFO//----------------------------- Испытательный стенд ----------------- ------------------------------
Модуль fifo_tb;
Параметр fifo_width = 8, fifo_depth = 16, ptr_width = 4;
р CLK, RST, FR, FW;
REG [fifo_width-1: 0] данные;
проволоки [fifo_width-1: 0] Out;
Проволока полный, пустой;
Целое ч;
REG [ptr_width-1: 0] WP = 0, Мп = 0;
REG [ptr_width-1: 0] РП = 0;
REG [fifo_width-1: 0] тет [fifo_depth-1: 0];
REG [ptr_width-1: 0] fifo_count;
fifo2 F1 (CLK, RST, FR, FW, данные, OUT);
первоначальный
начинать
CLK = 1'b1;
RST = 1'b1;
$ readmemb ( "stimuli_fifo.txt", MEM);
H = $ FOPEN ( "result_fifo.txt");
RST # 20 = 1'b0;
конец
всегда
# 5 = ~ CLK CLK;

первоначальный
начинать
# 30 FW = 1'b1;
# 30 FR = 1'b1;
# 120 FW = 1'b0;
# 10 FR = 1'b0;
конец
Всегда @ (posedge CLK)
начинать
если (FW)
начинать
Data = Mem [MP];
MP MP = 1; / / Увеличение Mem ИНДЕКС
если (полная)
$ DISPLAY ( "FIFO Overflow");
Else If (пусто)
$ DISPLAY ( "буфер FIFO");
конец
конец

Всегда @ (posedge CLK)
начинать
$ DISPLAY ( "Out =% D, данные =% D", то данные);
$ DISPLAY ( "fifo_count =% D", fifo_count);
fdisplay $ (H, "Out =% D", OUT);
конец
ENDMODULE [/ QUOTE] [/ CODE]

 
Полное, Ваше testbench пусто, Р, РП, (и, возможно, некоторые другие сигналы), не связанных с их коллегами в fifo2.Я не знаю, если вы сделали это сознательно по некоторым причинам.

В модуле fifo2, WP и RP изменением от нуля до "Х" вскоре после сброса, потому что отец и FW являются 'X' в начале моделирования.Попробуйте инициализации Fr и FW к нулю в testbench.

Я не вижу никаких данных о деятельности.Может быть другая проблема.

Днем Verilogging

 

Welcome to EDABoard.com

Sponsor

Back
Top