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