`timescale 1ns / 1ps module sram_uygulamasi( SAAT, LEDLER, ILKLENDIR ); // girdi-ç?kt? kap?lar? input SAAT; output [7:0] LEDLER; input ILKLENDIR; // yazmaç ve teller reg yaz_oku; wire [7:0] sram_veri_cikis; reg [7:0] sram_veri_giris; reg [12:0] sram_adres; reg sram_veri_yaz; reg [31:0] sayac; reg [7:0] ledler; always @ (posedge SAAT) begin if(ILKLENDIR) begin // sistemi ilklendir yaz_oku <= 1'b0; sayac <= 0; sram_veri_yaz <= 1'b0; sram_veri_giris <= 0; sram_adres <= 0; ledler <= 0; end else begin // 1000 veri yaz, 1000 veri oku if(yaz_oku == 1'b0) begin // yaz sayac <= 0; sram_veri_yaz <= 1'b1; ledler <= ledler; if(sram_adres == 5000) begin // okumaya geç yaz_oku <= 1'b1; sram_adres <= 0; sram_veri_giris <= 0; end else begin // yazmaya devam et yaz_oku <= 1'b0; sram_adres <= sram_adres + 1'b1; sram_veri_giris <= sram_veri_giris + 1'b1; end end else begin // oku sram_veri_yaz <= 1'b0; sram_veri_giris <= sram_veri_giris; ledler <= sram_veri_cikis; if(sayac == 50000000) begin // yeni veri okunabilir sayac <= 0; if(sram_adres == 5000) begin // yeni veri okuma, yazmaya geri dön sram_adres <= 0; yaz_oku <= 1'b0; end else begin // yeni veri oku yaz_oku <= 1'b1; sram_adres <= sram_adres + 1'b1; end end else begin // yeni veri okuma, bekle yaz_oku <= yaz_oku; sayac <= sayac + 1'b1; sram_adres <= sram_adres; end end end end // Block RAM block_ram_1 bellegim_benim( .clka(SAAT), // saat darbesi .dina(sram_veri_giris), // yaz?lacak veri .addra(sram_adres), // adres .wea(sram_veri_yaz), // yaz/oku ayar i?nesi .douta(sram_veri_cikis) // okunan veri ); assign LEDLER = ledler; endmodule