RAM проблем с достъпа до

T

tariq786

Guest
Здравейте приятели,
Имам модел RAM в Verilog.Кодът е проста виж по-долу.Мога да чета и пиша то без никакъв проблем.Когато се опитам да го достъп от стенд за изпитване с помощта на нова инстанция, аз добивам xxxxxxxxxxxxxxxxx.Може ли някой да ме упъти към решаване.
Имайте предвид, че аз имам достъп до RAM в различни модула от по-голям проект и аз трябва да създадете RAM случаи за достъп до RAM.

Онзи, който помага се от 50 до 100 точки.срокове 1ns / 1PS

модул REGFILE (
продукция обл [127:0] Rdata,
вход [127:0] Wdata,
въвеждане на CLK,
Прочетете вход,
Напиши вход
);обл [127:0] RAM;

Винаги @ (posedge CLK, четене, писане)
ако (прочети)
започвам
Rdata = RAM;
приключвам
иначе, ако (пиша)
започвам
RAM = Wdata;
приключвамendmodule/*********************************************** Стенд за изпитване ********/
"срок 1ns / 10psмодул за изпитване;обл CLK;
обл четене, писане;
обл Read1, Write2;
обл [127:0] X;

тел [127:0] Y;
тел [127:0] Z;първоначален
започвам

CLK = 0;
X = 128'b0;

приключвамвинаги
започвам
# 5 CLK = ~ CLK;
приключвампървоначален
# 15 Напиши = 1;
първоначален
# 25 Напиши = 0; / / писмено спиране

първоначален
започва # 25 Прочетете = 1; Read1 = 1; края

първоначален
започва # 35 Прочетете = 0; Read1 = 0; краяREGFILE u0 (. Rdata (Y),
. Wdata (Х),
. CLK (CLK),
. Четене (Read),
. Запис (пиша)
);

REGFILE U1 (. Rdata (Z),
. Wdata (Х),
. CLK (CLK),
. Четене (Read1),
. Запис (Write1)
);първоначален
$ монитор ($ време ", Х% H, е Y% H, Z е% з Прочетете е% D, е% Напиши г \ N", X, Y, Z, четене, писане);

endmodule/**************** Симулация Резултат ******************************* *** /# 0, Х е 00000000000000000000000000000000, е xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Y, Z е xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Прочетете е X, напишете е х
#
# 15, Х е 00000000000000000000000000000000, е xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Y, Z е xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Прочетете е Х, е 1 Напиши
#
# 25, Х е 00000000000000000000000000000000, е 00000000000000000000000000000000 Y, Z е xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Прочетете е 1, е 0 Напиши
#
# 35, Х е 00000000000000000000000000000000, е 00000000000000000000000000000000 Y, Z е xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Прочетете е 0, напишете е 0

 
Входът е Х, 0000000000000000000000

Regfile u0 получава сигнал пиша да напиша тази стойност, а вие може да го прочете.Да е 0000000 след операцията.

Regfile U1 никога не е писано да.В сигнал пиша тук, Write1 никога не е деклариран или промяна.Така Regfile U1 е неинициализирана ....когато четете от неинициализирана Regfile, вие трябва да получите Z = xxxxxxxxxxxxxxxxxxxxxx.

 
срокове 1ns / 1PS

модул REGFILE (
продукция обл [127:0] Rdata,
вход [127:0] Wdata,
въвеждане на CLK,
Прочетете вход,
Напиши вход
);

обл [127:0] RAM;

Винаги @ (posedge CLK)
ако (прочети)
започвам
Rdata = RAM;
приключвам
иначе, ако (пиша)
започвам
RAM = Wdata;
приключвам

endmodule

"срок 1ns / 1PS

модул за изпитване;

обл CLK;
обл четене, писане;
обл Read1, Write1;
обл [127:0] X;

тел [127:0] Y;
тел [127:0] Z;първоначален
започвам

CLK = 0;
X = 128'b0;
напишете = 0;
write1 = 0;
прочети = 0;
read1 = 0;
# 15 напишете = 1;
write1 = 1;
# 10 напишете = 0;
write1 = 0;
прочети = 1;
read1 = 1;
# 10 четат = 0;
read1 = 0;

X = ((128)) 1'b1;
# 15 напишете = 1;
write1 = 1;
# 10 напишете = 0;
write1 = 0;
прочети = 1;
read1 = 1;
# 10 четат = 0;
read1 = 0;
приключвамвинаги
започвам
# 5 CLK = ~ CLK;
приключвам

REGFILE u0 (. Rdata (Y),
. Wdata (Х),
. CLK (CLK),
. Четене (Read),
. Запис (пиша)
);

REGFILE U1 (. Rdata (Z),
. Wdata (Х),
. CLK (CLK),
. Четене (Read1),
. Запис (Write1)
);първоначален
$ монитор ($ време ", Х% H, е Y% H, Z е% з Прочетете е% D, е% Напиши г \ N", X, Y, Z, четене, писане);

endmoduleОпитайте по-горе код и да ме уведомите, ако ти лице кой prolem!

 
dcreddy!NT кода си е работа на всички.Аз се xxxxxxxxxxxxxxxxxx.

Виж въпроса е, че искате да прочетете съдържанието на РАМ от една инстанция, която е различна от например, че пише в нея.

Това означава, че ако аз имам писмено RAM използва например u0, искам да прочетете съдържанието писмено използва например U1, както е показано по-горе.Тъй като е Овен, аз трябва да бъде в състояние да го направи.Added след 2 минути:За да направим нещата по-ясно, как щях да чета и пиша RAM в различни модули на проекта си като се уверите, че аз имам една единствена RAM, които аз съм четене или писане в различни модули на моя проект?

 
Здравейте Тарик,

Ако аз разбира Ур въпрос, аз ще го повтори още веднъж:

искате да напишете, за да RAM0 в същото време искате да прочетете от RAM1 или ViceVersa

Ако това трябва да е станало и да родово, първото нещо, което трябва да направите, вие трябва да създадете най RAM ниво файл и конкретни примери две RAM модули и трябва да имаш контрол генериране логика пишат и четат сигнали за RAM0 и RAM1 въз основа на глобални четат и пишат сигнали.Някои как сте поставили приоритет схема за RAM0 или RAM1 в този контрол логика.

Ако не искате да отидете за appraoch, че по-горе, след това се прилага на дневника, за да четат и пишат правилно сигналите.Това беше направено погрешно от вас в текущата testbench.

ви позволява да един пример: ако искате да пишете и четете RAM0 от RAM1, трябва да напишете = 1 и write1 = 0, както и прочети = 0 и read1 = 0.

Надявам се да имам това, което аз съм се опитвам да кажа.Ако това не е това, което сте замислили, да ме уведомитеОще едно нещо, Тарик:

Имам само симулира кода, която съм дал да ви вчера,

Аз забравих и използването пишат и четат сигнал имена вместо Напиши прочете и Не знам как го е съставила за вас, без да променя тези имена.След като са се променили за именуване, това е, което аз имам ли след симулация:

добави SIM вълната: / ram_tb / *
бягам
# 0, Х е 00000000000000000000000000000000, е xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Y, Z е xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Прочетете е 0, напишете е 0
#
# 15, Х е 00000000000000000000000000000000, е xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Y, Z е xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Прочетете е 0, напишете е 1
#
# 25, Х е 00000000000000000000000000000000, е 00000000000000000000000000000000 Y, Z е 00000000000000000000000000000000 Прочетете е 1, е 0 Напиши
#
# 35, Х е ffffffffffffffffffffffffffffffff, е 00000000000000000000000000000000 Y, Z е 00000000000000000000000000000000 Прочетете е 0, напишете е 0
#
# 50, Х е ffffffffffffffffffffffffffffffff, е 00000000000000000000000000000000 Y, Z е 00000000000000000000000000000000 Прочетете е 0, напишете е 1
#
# 60, Х е ffffffffffffffffffffffffffffffff, е ffffffffffffffffffffffffffffffff Y, Z е ffffffffffffffffffffffffffffffff Прочетете е 1, е 0 Напиши
#
# 70, Х е ffffffffffffffffffffffffffffffff, е ffffffffffffffffffffffffffffffff Y, Z е ffffffffffffffffffffffffffffffff Прочетете е 0, напишете е 0
#С уважение,
dcreddy

 

Welcome to EDABoard.com

Sponsor

Back
Top