roadrunner Postat Ianuarie 10 Partajează Postat Ianuarie 10 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 1 Link spre comentariu
mihaiaurul Postat Marți la 12:02 Partajează Postat Marți la 12:02 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
roadrunner Postat Marți la 16:04 Autor Partajează Postat Marți la 16:04 (editat) 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 Marți la 16:14 de roadrunner Link spre comentariu
mihaiaurul Postat Marți la 16:28 Partajează Postat Marți la 16:28 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
roadrunner Postat Marți la 16:44 Autor Partajează Postat Marți la 16:44 (editat) 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 Marți la 16:49 de roadrunner Link spre comentariu
mihaiaurul Postat Marți la 16:49 Partajează Postat Marți la 16:49 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
roadrunner Postat Marți la 16:52 Autor Partajează Postat Marți la 16:52 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum