RAM pristup problemu u verilog [50 - 100 bodova na rješenje]

T

tariq786

Guest
Hi prijatelj,
Imam modelira RAM-a na verilog.Kod je jednostavan vidjeti u nastavku.Mogu čitati i pisati bez ikakvih problema.Našto ja probati za pristup iz testa klupa koristeći novi primjer, ja dobiti xxxxxxxxxxxxxxxxx.Može li me netko vodič prema rješenje.
Imajte na umu da imam pristup u različitim OVAN modul većeg projekta, a ja moram napraviti RAM instance za pristup RAM-a.

Onaj koji pomaže dobiti 50 do 100 bodova.vremenske rokove 1ns / 1ps

modul REGFILE (
izlaz reg [127:0] Rdata,
input [127:0] Wdata,
CLK ulaz,
Pročitajte ulaz,
ulaz Napiši
);reg [127:0] RAM-a;

Uvijek @ (posedge CLK, čitanje, pisanje)
if (Pročitajte)
započeti
Rdata = RAM-a;
kraj
else if (write)
započeti
RAM = Wdata;
krajendmodule/*********************************************** Test Bench ********/
`rokove 1ns / 10psmodul test;reg CLK;
reg. čitanje, pisanje;
reg. Read1, Write2;
reg [127:0] X;

žice [127:0] Y;
žice [127:0] Z;početna
započeti

CLK = 0;
X = 128'b0;

krajuvijek
započeti
# 5 CLK = ~ CLK;
krajpočetna
# 15 Napiši = 1;
početna
# 25 Napiši = 0; / / stop pisanje

početna
begin # 25 Pročitajte = 1; Read1 = 1; kraj

početna
begin # 35 Pročitajte = 0; Read1 = 0; krajREGFILE u0 (. Rdata (Y),
. Wdata (X),
. CLK (CLK),
. Pročitajte (Read),
. Write (Write)
);

REGFILE u1 (. Rdata (Z),
. Wdata (X),
. CLK (CLK),
. Pročitajte (Read1),
. Write (Write1)
);početna
$ monitor ($ vrijeme, "X% H, Y% h, Z je% h Pročitajte je% d, Pisanje je% d \ n", X, Y, Z, čitanje, pisanje);

endmodule/**************** Simulacije Rezultat ******************************* *** /# 0, je 00000000000000000000000000000000 X, Y je xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, Z je xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Pročitajte je x, Napisati je x
#
# 15, je 00000000000000000000000000000000 X, Y je xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, Z je xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Pročitajte je x, Napisati je 1
#
# 25, je 00000000000000000000000000000000 X, Y je 00000000000000000000000000000000, Z je xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Pročitajte je 1, Napisati je 0
#
# 35, je 00000000000000000000000000000000 X, Y je 00000000000000000000000000000000, Z je xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Pročitajte je 0, Pisanje je 0

 
Ulaz je X, 0000000000000000000000

Regfile u0 dobiva pisati signal da ćete pisati ovu vrijednost u, a možete ga pročitati.Y 0000000 je nakon operacije.

Regfile u1 nikad nije pisao.Signala ovdje pisati, nikad nije proglašen Write1 ili promijeniti.Tako Regfile U1 je uninitialized ....kad pročitate od uninitialized Regfile, te bi trebao dobiti Z = xxxxxxxxxxxxxxxxxxxxxx.

 
vremenske rokove 1ns / 1ps

modul REGFILE (
izlaz reg [127:0] Rdata,
input [127:0] Wdata,
CLK ulaz,
Pročitajte ulaz,
ulaz Napiši
);

reg [127:0] RAM-a;

Uvijek @ (posedge CLK)
if (Pročitajte)
započeti
Rdata = RAM-a;
kraj
else if (write)
započeti
RAM = Wdata;
kraj

endmodule

`rokove 1ns / 1ps

modul test;

reg CLK;
reg. čitanje, pisanje;
reg. Read1, Write1;
reg [127:0] X;

žice [127:0] Y;
žice [127:0] Z;početna
započeti

CLK = 0;
X = 128'b0;
pisati = 0;
write1 = 0;
read = 0;
read1 = 0;
# 15 napisali = 1;
write1 = 1;
# 10 napisali = 0;
write1 = 0;
read = 1;
read1 = 1;
# 10 pročitati = 0;
read1 = 0;

X = (128) (1'b1);
# 15 napisali = 1;
write1 = 1;
# 10 napisali = 0;
write1 = 0;
read = 1;
read1 = 1;
# 10 pročitati = 0;
read1 = 0;
krajuvijek
započeti
# 5 CLK = ~ CLK;
kraj

REGFILE u0 (. Rdata (Y),
. Wdata (X),
. CLK (CLK),
. Pročitajte (Read),
. Write (Write)
);

REGFILE u1 (. Rdata (Z),
. Wdata (X),
. CLK (CLK),
. Pročitajte (Read1),
. Write (Write1)
);početna
$ monitor ($ vrijeme, "X% H, Y% h, Z je% h Pročitajte je% d, Pisanje je% d \ n", X, Y, Z, čitanje, pisanje);

endmodulePokušajte gore kod i pustiti mene znati ako lice bilo prolem!

 
dcreddy!svoj kod nt 'funkcionirati at svi.JA dobiti xxxxxxxxxxxxxxxxxx.

Pogledajte pitanje je želim pročitati sadržaj RAM-a iz primjer koji je različit od primjer koji je pisao u nju.

To znači da ako sam napisao RAM koristeći primjer u0, želim pročitati napisan sadržaj koristeći primjer u1 kao na slici gore.Budući da je RAM-a, ja bi trebao biti u mogućnosti to učiniti.Dodano nakon 2 minute:Da bi stvari bile još jasnije, kako će ja pisati i čitati RAM-a u različitim modulima moj projekt stvaranje siguran taj JA imati jedan RAM-a koga sam čitanje ili pisanje u različitim modulima moj projekt?

 
Hi Tariq,

Ako sam shvatio ur pitanje, ja ću to ponoviti još jednom:

Želite li pisati na RAM0 istovremeno želite čitati od RAM1 ili viceversa

Ako se to mora dogoditi i napraviti općenito, prva stvar koju morate učiniti, morate napraviti top level RAM datoteku i instantiate dva modula RAM-a morate imati generira kontrolu logike pisati i čitati signale za RAM0 i RAM1 na temelju globalno čitanje i pisanje signala.Neke kako ste staviti prioritet shemu za RAM0 ili RAM1 u tu kontrolu logika.

Ako ne želite ići na taj gore appraoch, a zatim primijeniti poticaje za čitanje i pisanje signali ispravno.To je učinjeno krivo vi u trenutnoj testbench.

dozvoljava uzeti primjer: ako želite pisati RAM0 i čitanje iz RAM1, morate imati pisati = 1 i write1 = 0, kao i čitanje read1 = 0 i = 0.

Nadam se da ste je dobio što sam pokušava reći.Ako to nije ono što si namjeravao, let me knowJoš jedna stvar Tariq:

Imam samo simulirani kod koje sam dao vam jučer,

Ja sam zaboravio i korištenje pisati i čitati signala imena umjesto Pisanje i Čitanje i ja dont znati kako je sastavljen za vas bez mijenjanja tih imena.Nakon što sam promijenio imena, to je ono što imam je dobio nakon što je simulacija:

dodaj val sim: / ram_tb / *
pokrenuti
# 0, je 00000000000000000000000000000000 X, Y je xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, Z je xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Pročitajte je 0, Pisanje je 0
#
# 15, je 00000000000000000000000000000000 X, Y je xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, Z je xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Pročitajte je 0, Pisanje je 1
#
# 25, je 00000000000000000000000000000000 X, Y je 00000000000000000000000000000000, Z je 00000000000000000000000000000000 Pročitajte je 1, Napisati je 0
#
# 35, je ffffffffffffffffffffffffffffffff X, Y je 00000000000000000000000000000000, Z je 00000000000000000000000000000000 Pročitajte je 0, Pisanje je 0
#
# 50, je ffffffffffffffffffffffffffffffff X, Y je 00000000000000000000000000000000, Z je 00000000000000000000000000000000 Pročitajte je 0, Pisanje je 1
#
# 60, je ffffffffffffffffffffffffffffffff X, Y je ffffffffffffffffffffffffffffffff, Z je ffffffffffffffffffffffffffffffff Pročitajte je 1, Napisati je 0
#
# 70, je ffffffffffffffffffffffffffffffff X, Y je ffffffffffffffffffffffffffffffff, Z je ffffffffffffffffffffffffffffffff Pročitajte je 0, Pisanje je 0
#Pozdravi,
dcreddy

 

Welcome to EDABoard.com

Sponsor

Back
Top