RAM problema d'accés en verilog [50 a 100 punts en la solució]

T

tariq786

Guest
Hola amics,
Tinc el model de RAM a Verilog.El codi és senzill veure a continuació.Sóc capaç de llegir i escriure sense cap problema.Quan intento accedir-hi des del banc d'assaig utilitzant una nova instància, em xxxxxxxxxxxxxxxxx.Pot algú em guiï cap a la solució.
Tingueu en compte que he d'accedir a la RAM en el mòdul diferent d'un projecte més gran i he de crear instàncies de RAM a la memòria RAM d'accés.

El que ajuda a obtenir 50 a 100 punts.1NS calendari / 1JRV

Regfile mòdul (
sortida reg [127:0] rdata,
d'entrada [127:0] Wdata,
CLK d'entrada,
d'entrada de lectura,
Escriure entrada
);reg [127:0] de RAM;

sempre @ (clk posedge, llegir, escriure)
si (Llegir)
començar
Rdata = RAM;
final
else if (Escriure)
començar
RAM = Wdata;
finalendmodule/*********************************************** Banc de Proves ********/
»1NS calendari / 10psMòdul de proves;reg clk;
reg llegir, escriure;
reg Read1, Write2;
reg [127:0] X;

de cable [127:0] I;
de cable [127:0] Z;inicial
començar

clk = 0;
X = 128'b0;

finalsempre
començar
# 5 clk = ~ clk;
finalinicial
# 15 Escriu = 1;
inicial
# 25 Escriu = 0; / / deixar d'escriure

inicial
Begin # 25 read = 1; Read1 = 1; final

inicial
Begin # 35 read = 0; Read1 = 0; finalRegfile u0 (. Rdata (I),
. Wdata (X),
. CLK (CLK),
. Read (Llegir),
. Write (Escriure)
);

Regfile U1 (. Rdata (Z),
. Wdata (X),
. CLK (CLK),
. Llegir (Read1),
. Escrigui (Write1)
);inicial
monitor $ ($ temps ", X és% h, I és% h, Z és% h és% d Llegir, Escriure és% d \ n", X, Y, Z, llegir, escriure);

endmoduleResultats de la simulació /**************** ******************************* *** /# 0, X és 00000000000000000000000000000000, I és xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, Z és xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx és x Llegir, Escriure és x
#
# 15, X és 00000000000000000000000000000000, I és xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, Z és xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx és x Llegir, Escriure és d'1
#
# 25, X és 00000000000000000000000000000000, I és 00000000000000000000000000000000, Z és xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Llegir és 1, Escriure és 0
#
# 35, X és 00000000000000000000000000000000, I és 00000000000000000000000000000000, Z és xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Llegir és 0, Escriure és 0

 
D'entrada és X, 0000000000000000000000

Regfile u0 rep un senyal d'escriure per escriure aquest valor en, i vostè pot llegir-lo.I és 0000000 després de l'operació.

Regfile U1 mai s'escriu.El senyal d'escriure aquí, Write1 mai s'ha declarat o el canvi.Així Regfile U1 no està inicialitzat ....quan es llegeix d'un Regfile no inicialitzada, vostè ha d'obtenir Z = xxxxxxxxxxxxxxxxxxxxxx.

 
1NS calendari / 1JRV

Regfile mòdul (
sortida reg [127:0] rdata,
d'entrada [127:0] Wdata,
CLK d'entrada,
d'entrada de lectura,
Escriure entrada
);

reg [127:0] de RAM;

sempre @ (clk posedge)
si (Llegir)
començar
Rdata = RAM;
final
else if (Escriure)
començar
RAM = Wdata;
final

endmodule

»1NS calendari / 1JRV

Mòdul de proves;

reg clk;
reg llegir, escriure;
reg Read1, Write1;
reg [127:0] X;

de cable [127:0] I;
de cable [127:0] Z;inicial
començar

clk = 0;
X = 128'b0;
write = 0;
write1 = 0;
read = 0;
read1 = 0;
# 15 write = 1;
write1 = 1;
# 10 write = 0;
write1 = 0;
read = 1;
read1 = 1;
# 10 read = 0;
read1 = 0;

X = (128)) (1'b1;
# 15 write = 1;
write1 = 1;
# 10 write = 0;
write1 = 0;
read = 1;
read1 = 1;
# 10 read = 0;
read1 = 0;
finalsempre
començar
# 5 clk = ~ clk;
final

Regfile u0 (. Rdata (I),
. Wdata (X),
. CLK (CLK),
. Read (Llegir),
. Write (Escriure)
);

Regfile U1 (. Rdata (Z),
. Wdata (X),
. CLK (CLK),
. Llegir (Read1),
. Escrigui (Write1)
);inicial
monitor $ ($ temps ", X és% h, I és% h, Z és% h és% d Llegir, Escriure és% d \ n", X, Y, Z, llegir, escriure);

endmoduleProveu el codi anterior i fes-me saber si tens qualsevol prolem!

 
dcreddy!el codi de NT no funciona en absolut.Em xxxxxxxxxxxxxxxxxx.

Vegeu la pregunta és que vull llegir el contingut de la RAM en una instància que és diferent de la instància que va escriure-hi.

Això vol dir que si he escrit RAM fent servir u0 exemple, vull llegir el contingut escrit usant U1 exemple, com es mostra a dalt.Atès que és la memòria RAM, hauria de ser capaç de fer-ho.Alta després de 2 minuts:per fer les coses més clares, Com puc llegir i escriure en diferents mòduls de RAM del meu projecte, assegurant-se que tinc una memòria RAM únic que estic llegint o escrivint en diferents mòduls del meu projecte?

 
Hola Tariq,

Si he entès bé la pregunta Ur, ho repeteixo una vegada més:

voleu escriure a la RAM0 al mateix temps que voleu llegir de RAM1 o viceversa

Si això s'ha de fer happend i genèrics, el primer que has de fer, has de crear una memòria RAM d'alt nivell d'arxiu i una instància de dos mòduls de memòria RAM i has de tenir la generació de la lògica de control d'escriptura i lectura dels senyals RAM0 i RAM1 sobre la base d' senyals globals llegir i escriure.Alguns règim de prioritat del que has posat per RAM0 o RAM1 en què la lògica de control.

Si no vols anar perquè appraoch anterior, a continuació, aplicar els estímuls per a llegir i escriure correctament els senyals.Això es va fer malament per vostè en el banc de proves actual.

permet prendre un exemple: si vols escriure en RAM0 i llegir RAM1, vostè ha de tenir permisos d'escriptura = 1 i write1 = 0, així com llegir i read1 = 0 = 0.

Espero que tinguis el que jo estic tractant de dir.Si això no és el que desitja, avisa'mUna cosa més Tariq:

Acabo de simular el codi que he donat a vostè ahir,

Se m'ha oblidat i l'ús de llegir i escriure els noms de la senyal en lloc de llegir i escriure i no sé com s'ha recopilat per a vostè sense canviar aquests noms.Després que he canviat la denominació, això és el que tinc després de la simulació:

Afegir sim onada: / ram_tb / *
córrer
# 0, X és 00000000000000000000000000000000, I és xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, Z és xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Llegir és 0, Escriure és 0
#
# 15, X és 00000000000000000000000000000000, I és xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, Z és xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Llegir és 0, Escriure és d'1
#
# 25, X és 00000000000000000000000000000000, I és 00000000000000000000000000000000, Z és 00000000000000000000000000000000 Llegir és 1, Escriure és 0
#
# 35, X és FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, I és 00000000000000000000000000000000, Z és 00000000000000000000000000000000 Llegir és 0, Escriure és 0
#
# 50, X és FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, I és 00000000000000000000000000000000, Z és 00000000000000000000000000000000 Llegir és 0, Escriure és d'1
#
# 60, X és FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, I és FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, Z és FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Llegir és 1, Escriure és 0
#
# 70, X és FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, I és FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF, Z és FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF Llegir és 0, Escriure és 0
#Records,
dcreddy

 

Welcome to EDABoard.com

Sponsor

Back
Top