Sari la conținut
ELFORUM - Forumul electronistilor

Cum Generezi Memorie RAM in LLM (AI) Verilog si VHDL


roadrunner

Postări Recomandate

Cum Generezi Memorie RAM in LLM (AI) Verilog si VHDL fara sa scrii cod ...

Treaba buna e cum initializezi continutul dintr-un fisier ROM (hex)

RR

 

 

Link spre comentariu
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • roadrunner

    4

  • mihaiaurul

    3

On 1/10/2025 at 4:36 PM, roadrunner said:

LLM (AI) Verilog

De ce AI a propus acel "else" la if(we) ?
Si nu a scris asa, care este logica ?
 

{
 if (we)
   mem[] <= din;

 dout <= mem[];
}

 

Link spre comentariu

In Verilog nu e ca in Python (care se prinde de blocuri prin indent) la Verilog block-urile sunt definite clar cu begin/end (cam la fel cum e in ANSI C cu parantezele acolada) - ca sintaxa Verilog a derivat din C, mai putin conceptele de paralelism care nu exista in C (nu exista in programare in general)

 

codul Verilog mai jos ca sa fie mai clar pentru toti.

RR

 

// 32KB RAM Memory in Verilog
module ram_32kb (
    input wire clk,               // Clock signal
    input wire en,                // Enable signal
    input wire we,                // Write enable (1: Write, 0: Read)
    input wire [14:0] addr,       // 15-bit address (2^15 = 32KB)
    input wire [7:0] din,         // 8-bit data input
    output reg [7:0] dout         // 8-bit data output
);

    // Declare memory array (32KB = 32768 bytes)
    reg [7:0] mem [0:32767];

    // Initialize memory from an external HEX file starting at address 16384
    initial begin
        $readmemh("ROM16K.hex", mem, 16384);
    end

    always @(posedge clk) begin
        if (en) begin
            if (we) begin
                // Write operation
                mem[addr] <= din;
            end else begin
                // Read operation
                dout <= mem[addr];
            end
        end
    end

endmodule

 

Editat de roadrunner
Link spre comentariu
20 minutes ago, roadrunner said:

codul Verilog mai jos ca sa fie mai clar pentru toti.

 

20 minutes ago, roadrunner said:
    always @(posedge clk) begin
        if (en) begin
            if (we) begin
                // Write operation
                mem[addr] <= din;
            end else begin
                // Read operation
                dout <= mem[addr];
            end
        end
    end

Nu despre Python vorbeam.
Intrebam de ce secventa de mai sus nu a fost scrisa așa:
 

    always @(posedge clk) begin
        if (en) begin
            if (we) begin
                // Write operation
                mem[addr] <= din;
            end
            // Read operation
            dout <= mem[addr];
        end
    end


 

Link spre comentariu

teoretic functioneaza aprope la fel,  singura diferenta e ca iesirile (cum l-ai scris tu) se vor modifica si la ciclurile de scriere (practic vor face mirror la ce ai scris) 

Comportamentul asta se poate controla la unele tipuri de ram cu un parametru (read before write sau viceversa) care iti va arata la iesiri datele de la adresa selectata inainte sa fie suprascrise (un fel de read combinat cu write pe acelasi front)

Asta ar fi diferenta dar depinde de cum e construit block-ram ul la FPGA-ul respectiv si de comportamentul default in caz ca nu specifici.

 

Asa cum l-ai scris tu citeste si la scriere nu-l mai doare de WE (intern in FPGA nu prea conteaza ca iesirile sunt separate de intrari dar la memorii discrete - adica CI nu vrei asta ca vrei sa controlezi sensul datelor la pinii de date si HIZ

RR

Editat de roadrunner
Link spre comentariu
4 minutes ago, roadrunner said:

teoretic functioneaza aprope la fel,  singura diferenta e ca iesirile (cum l-ai scris tu) se vor modifica si la ciclurile de scriere (practic vor face mirror la ce ai scris) 

Și nu este normal așa, de ce să pierd un ciclu clk ca să aflu ce am scris ?

Link spre comentariu
Acum 2 minute, mihaiaurul a spus:

Și nu este normal așa, de ce să pierd un ciclu clk ca să aflu ce am scris ?

depinde de aplicatie, nu toti avem normalul la fel.

RR

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări