add rtl
diff --git a/verilog/rtl/UART_GFA.v b/verilog/rtl/UART_GFA.v
new file mode 100644
index 0000000..c501664
--- /dev/null
+++ b/verilog/rtl/UART_GFA.v
@@ -0,0 +1,63 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+module UART_GFA(
+  input                 clk_g,
+  input                 rst_g,
+  input         [31:0]  komut,
+  input                 komut_gecerli,
+  input                 veri_hazir,
+  input                 RX,
+  output                TX,
+  output        reg     komut_hazir,
+  output        [31:0]  veri,
+  output                veri_gecerli 
+);
+   
+  wire ver_hazir;
+  wire ver_gecerli = komut_gecerli && (komut[2:0] == 3'b001);
+  wire [7:0] ver_veri = komut[31:24];
+  
+  UART_verici verici(
+    .clk_g(clk_g),
+    .rst_g(rst_g),
+    .ver_veri(ver_veri),
+    .ver_gecerli(ver_gecerli),
+    .TX(TX),
+    .hazir(ver_hazir)
+  );
+  
+  wire al_gecerli;
+  wire [7:0] al_veri;
+  
+  assign veri = {24'b0, al_veri};
+  assign veri_gecerli = al_gecerli;
+  
+  UART_alici alici(
+    .clk_g(clk_g)             ,
+    .rst_g(rst_g)             ,
+    .RX(RX)                   ,
+    
+    .al_veri(al_veri)         ,
+    .al_gecerli(al_gecerli)      
+  );
+
+  always @* begin
+    komut_hazir           =       ver_hazir;
+  end
+      
+
+endmodule
\ No newline at end of file
diff --git a/verilog/rtl/UART_alici.v b/verilog/rtl/UART_alici.v
new file mode 100644
index 0000000..4217461
--- /dev/null
+++ b/verilog/rtl/UART_alici.v
@@ -0,0 +1,151 @@
+`timescale 1ns / 1ps
+
+`ifndef GL_RTL_SIM
+`include "sabitler.vh"
+`endif
+
+module UART_alici(
+  input           clk_g           ,
+  input           rst_g           ,
+  input           RX              ,
+  
+  output  [7:0]   al_veri         ,
+  output  reg     al_gecerli
+        
+  );
+  
+  `ifdef FAST_UART
+   localparam UART_SAAT = 16;
+  `else
+   localparam UART_SAAT = 2083;
+  `endif
+
+  /*
+  50 MHz için UART_SAAT = 5208 (20ns*5208 = 104160ns = 9601 bps)
+  20 MHz için UART_SAAT = 2083 (50ns*2083 = 104150ns = 9602 bps)
+  */
+    
+  localparam BOSTA          = 0;
+  localparam START_BITI_AL  = 1;
+  localparam VERI_AL        = 2;
+  localparam DUR            = 3;
+
+  reg [7:0] veri_ns, veri_r;    
+  reg [1:0] durum_ns, durum_r;
+  reg [31:0] baud_sayac_ns, baud_sayac_r;
+  reg [2:0] RX_ek_ns, RX_ek_r; 
+  
+  wire      saat_ac     = baud_sayac_r == UART_SAAT;
+  wire      ornekle1    = baud_sayac_r == (UART_SAAT/16 * 7);
+  wire      ornekle2    = baud_sayac_r == (UART_SAAT/16 * 8);
+  wire      ornekle3    = baud_sayac_r == (UART_SAAT/16 * 9);
+  
+  reg       RX_r1, RX_r2;
+  
+  reg       RX_ornek1_r, RX_ornek1_ns;
+  reg       RX_ornek2_r, RX_ornek2_ns;
+  reg       RX_ornek3_r, RX_ornek3_ns;
+  
+  wire      RX_ornek_cogunluk = (RX_ornek1_r & RX_ornek2_r) | 
+                                (RX_ornek2_r & RX_ornek3_r) | 
+                                (RX_ornek1_r & RX_ornek3_r);
+  
+  // yari kararli durumdan kurtulmak icin RX'i
+  // iki kez yazmaca yaz
+  always @(posedge clk_g) begin
+    RX_r1                      <=                   RX;
+    RX_r2                      <=                   RX_r1;
+  end
+  
+  assign al_veri                =                   veri_r;
+  
+  always @* begin
+    durum_ns                    =                   durum_r;
+    veri_ns                     =                   veri_r ;
+    baud_sayac_ns               =                   baud_sayac_r;
+    RX_ek_ns                    =                   RX_ek_r;
+    RX_ornek1_ns                =                   RX_ornek1_r;
+    RX_ornek2_ns                =                   RX_ornek2_r;
+    RX_ornek3_ns                =                   RX_ornek3_r;
+    
+    al_gecerli                  =                   1'b0;
+    
+    if (ornekle1) begin
+      RX_ornek1_ns              =                   RX_r2;
+    end
+    if (ornekle2) begin
+      RX_ornek2_ns              =                   RX_r2;
+    end
+    if (ornekle3) begin
+      RX_ornek3_ns              =                   RX_r2;
+    end        
+
+    if (durum_r != BOSTA)
+      baud_sayac_ns             =                   baud_sayac_r + 1;
+    
+    case (durum_r)
+      BOSTA: begin
+        if (RX_r2 == 1'b0) // start
+          durum_ns              =                   START_BITI_AL;
+          baud_sayac_ns         =                   32'd0; 
+      end
+      START_BITI_AL: begin
+        if (saat_ac) begin
+          if (RX_ornek_cogunluk == 1'b0)
+            durum_ns            =                   VERI_AL;
+          else
+            durum_ns            =                   BOSTA;          
+        end      
+      end
+      VERI_AL: begin
+        if (saat_ac) begin
+          veri_ns[RX_ek_r]      =                   RX_ornek_cogunluk;        
+          if (RX_ek_r == 3'b111) begin 
+            RX_ek_ns            =                   3'b000;
+            durum_ns            =                   DUR;
+          end
+          else begin
+            RX_ek_ns            =                   RX_ek_r + 1;
+          end
+        end
+      end
+      DUR: begin
+//        if (saat_ac) begin
+//          durum_ns              =                   BOSTA;
+//          al_gecerli            =                   1'b1;    
+//        end
+        if (baud_sayac_r > (UART_SAAT/16 * 9)) begin
+          durum_ns              =                   BOSTA;
+          baud_sayac_ns         =                   32'd0;
+          al_gecerli            =                   1'b1;    
+        end
+      end
+    endcase
+  
+    if (saat_ac) begin
+      baud_sayac_ns             =                   32'd0;        
+    end          
+  end
+  
+  always @(posedge clk_g) begin
+    if (rst_g) begin
+      veri_r                      <=                  0;
+      durum_r                     <=                  BOSTA;
+      baud_sayac_r                <=                  0;
+      RX_ek_r                     <=                  0;    
+      RX_ornek1_r                 <=                  0;
+      RX_ornek2_r                 <=                  0;
+      RX_ornek3_r                 <=                  0;
+    end
+    else begin
+      veri_r                      <=                  veri_ns;
+      durum_r                     <=                  durum_ns;
+      baud_sayac_r                <=                  baud_sayac_ns;
+      RX_ek_r                     <=                  RX_ek_ns;
+      RX_ornek1_r                 <=                  RX_ornek1_ns;
+      RX_ornek2_r                 <=                  RX_ornek2_ns;
+      RX_ornek3_r                 <=                  RX_ornek3_ns;
+    end
+  end   
+  
+endmodule
\ No newline at end of file
diff --git a/verilog/rtl/UART_verici.v b/verilog/rtl/UART_verici.v
new file mode 100644
index 0000000..beee7d4
--- /dev/null
+++ b/verilog/rtl/UART_verici.v
@@ -0,0 +1,116 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+module UART_verici(
+  input           clk_g           ,
+  input           rst_g           ,
+  
+  input   [7:0]   ver_veri        ,
+  input           ver_gecerli     ,
+ 
+  output reg      TX              ,
+  output          hazir 
+  );
+  
+  `ifdef FAST_UART
+   localparam UART_SAAT = 16;
+  `else
+   localparam UART_SAAT = 2083;
+  `endif
+
+  /*
+  50 MHz için UART_SAAT = 5208 (20ns*5208 = 104160ns = 9601 bps)
+  20 MHz için UART_SAAT = 2083 (50ns*2083 = 104150ns = 9602 bps)
+  */
+    
+  localparam BOSTA  = 0;
+  localparam BASLA  = 1;
+  localparam VER    = 2;
+  localparam DUR    = 3;
+
+  reg [7:0] veri_ns, veri_r;    
+  reg [1:0] durum_ns, durum_r;
+  reg [31:0] baud_sayac_ns, baud_sayac_r;
+  reg [2:0] TX_ek_ns, TX_ek_r; 
+  
+  wire      saat_ac   = baud_sayac_r == UART_SAAT;
+  
+  assign    hazir     = durum_r == BOSTA;
+  
+  always @* begin
+    durum_ns                    =                   durum_r;
+    veri_ns                     =                   veri_r ;
+    baud_sayac_ns               =                   baud_sayac_r;
+    TX                          =                   1'b1;
+    TX_ek_ns                    =                   TX_ek_r;
+    case (durum_r)
+      BOSTA: begin
+        if (ver_gecerli) begin
+          veri_ns               =                   ver_veri;
+          durum_ns              =                   BASLA;
+        end        
+      end
+      BASLA: begin
+        TX                      =                   1'b0;
+        if (saat_ac) begin
+          durum_ns              =                   VER;
+        end
+      end
+      VER: begin
+        TX                      =                   veri_r[TX_ek_r];
+        if (saat_ac) begin
+          if (TX_ek_r == 3'b111) begin 
+            TX_ek_ns            =                   3'b000;
+            durum_ns            =                   DUR;
+          end
+          else begin
+            TX_ek_ns            =                   TX_ek_r + 1;
+          end
+        end
+      end
+      DUR: begin
+        TX                      =                   1'b1; //dur?
+        if (saat_ac) begin
+          durum_ns              =                   BOSTA;    
+        end
+      end 
+    endcase
+  
+    if (durum_r != BOSTA) begin
+      baud_sayac_ns             =                   baud_sayac_ns + 1;
+    end
+  
+    if (saat_ac) begin
+      baud_sayac_ns             =                   32'd0;        
+    end          
+  end
+  
+  always @(posedge clk_g) begin
+    if (rst_g) begin
+      durum_r                     <=                  BOSTA;
+      baud_sayac_r                <=                  0;
+      TX_ek_r                     <=                  0;  
+      veri_r                      <=                  0;  
+    end
+    else begin
+      veri_r                      <=                  veri_ns;
+      durum_r                     <=                  durum_ns;
+      baud_sayac_r                <=                  baud_sayac_ns;
+      TX_ek_r                     <=                  TX_ek_ns;
+    end
+  end   
+    
+endmodule
diff --git a/verilog/rtl/adres_tekleyici.v b/verilog/rtl/adres_tekleyici.v
new file mode 100644
index 0000000..6013b9a
--- /dev/null
+++ b/verilog/rtl/adres_tekleyici.v
@@ -0,0 +1,280 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+`ifndef GL_RTL_SIM
+`include "sabitler.vh"
+`endif
+
+module adres_tekleyici(
+    input                                               clk_g                                           ,
+    input                                               rst_g                                           ,
+    // C0 <-> Adres Tekleyici
+    
+    output                                              c0_oku_hazir_c                                  ,
+    output          [31:0]                              c0_oku_veri_c                                   ,
+    output                                              c0_oku_veri_gecerli_c                           ,
+    output                                              c0_yaz_hazir_c                                  ,
+   
+    input           [31:0]                              c0_oku_adres_g                                  ,
+    input                                               c0_oku_gecerli_g                                ,
+    input           [31:0]                              c0_yaz_veri_g                                   ,
+    input           [3:0]                               c0_yaz_gecerli_g                                ,
+    input           [31:0]                              c0_yaz_adres_g                                  ,
+
+    // C0 <-> Disarisi (UART + Veri Bellegi
+    output          [12:0]                              vb_addra_c                                      ,
+    output          [31:0]                              vb_dina_c                                       ,
+    input           [31:0]                              vb_douta_g                                      ,
+    output    reg                                       vb_ena_c                                        ,
+    output    reg   [3:0]                               vb_wea_c                                        ,
+
+    output    reg   [3:0]                               bb_wea_c                                        ,
+    output    reg                                       bb_ena_c                                        ,
+    output          [31:0]                              bb_dina_c                                       ,
+    output          [31:0]                              bb_addra_c                                      ,
+
+ 
+    output          [31:0]                              s_axi_araddr_c                                  ,
+    input                                               s_axi_arready_g                                 ,                                   
+    output    reg                                       s_axi_arvalid_c                                 ,
+    output          [31:0]                              s_axi_awaddr_c                                  ,
+    input                                               s_axi_awready_g                                 ,
+    output    reg                                       s_axi_awvalid_c                                 ,
+    output                                              s_axi_bready_c                                  ,
+    input           [1:0]                               s_axi_bresp_g                                   ,
+    input                                               s_axi_bvalid_g                                  ,
+    input           [31:0]                              s_axi_rdata_g                                   ,
+    output    reg                                       s_axi_rready_c                                  ,
+    input           [1:0]                               s_axi_rresp_g                                   ,
+    input                                               s_axi_rvalid_g                                  ,
+    output          [31:0]                              s_axi_wdata_c                                   ,
+    input                                               s_axi_wready_g                                  ,
+    output    reg   [3:0]                               s_axi_wstrb_c                                   ,
+    output    reg                                       s_axi_wvalid_c                                  
+    
+    );
+    
+    // TODO b kanali ile ilgilenmeyebiliriz? bready hep 1 olur
+    localparam      AXI_BOSTA_S         =               0                                               ;            
+    localparam      AXI_OKU_AR_S        =               1                                               ;            
+    localparam      AXI_OKU_R_S         =               2                                               ;            
+    localparam      AXI_YAZ_AW_W_S      =               3                                               ;            
+    localparam      AXI_YAZ_AW_S        =               4                                               ;            
+    localparam      AXI_YAZ_W_S         =               5                                               ;            
+   
+    localparam      BRAM_BOSTA_S        =               0                                               ;
+    localparam      BRAM_OKU_S          =               1                                               ;
+    localparam      BRAM_OKU_BEKLE_S    =               2                                               ;
+    localparam      BRAM_YAZ_S          =               3                                               ;
+   
+   
+    reg             [2:0]                               axi_durum_r                                     ;
+    reg             [2:0]                               axi_durum_ns_r                                  ;
+    reg             [1:0]                               bram_durum_r                                    ;
+    reg             [1:0]                               bram_durum_ns_r                                 ;
+   
+    reg                                                 yaz_bb_r                                        ;
+    reg                                                 yaz_bb_ns_r                                     ;
+   
+    (*dont_touch = "true"*) reg             [31:0]                              adres_r                                         ;
+    (*dont_touch = "true"*) reg             [31:0]                              adres_ns_r                                      ;
+
+    (*dont_touch = "true"*) reg             [31:0]                              yaz_veri_r                                      ;
+    (*dont_touch = "true"*) reg             [31:0]                              yaz_veri_ns_r                                   ;
+    reg             [3:0]                               yaz_maske_r                                     ;
+    reg             [3:0]                               yaz_maske_ns_r                                  ;
+   
+    wire                                                yaz_axi_istegi_w                                ;
+    wire                                                oku_axi_istegi_w                                ;
+    
+    wire                                                yaz_vb_w                                        ;
+    wire                                                yaz_bb_w                                        ;
+    
+    // TODO: bu daha da genellenebilir, su anda duragan bir adres eslemesi varsayiyor
+    assign          yaz_axi_istegi_w        =           c0_yaz_adres_g >= 32'h8000_0000                 ;
+    assign          oku_axi_istegi_w        =           c0_oku_adres_g >= 32'h8000_0000                 ;
+    
+    assign          yaz_bb_w                =           (c0_yaz_adres_g >= `BB_TABAN_ADR) &&          
+                                                        (c0_yaz_adres_g < 32'h4000_0000)                ;    
+    
+    // TODO: yalniz bir hazir sinyali?
+    assign          c0_yaz_hazir_c          =           axi_durum_r == 2'b00 && bram_durum_r == 2'b00   ;
+    assign          c0_oku_hazir_c          =           axi_durum_r == 2'b00 && bram_durum_r == 2'b00   ;
+
+    assign          c0_oku_veri_c           =           axi_durum_r == AXI_OKU_R_S                      ?
+                                                        s_axi_rdata_g         :     vb_douta_g          ;             
+    assign          c0_oku_veri_gecerli_c   =           (axi_durum_r == AXI_OKU_R_S && s_axi_rvalid_g)  ||
+                                                        (bram_durum_r == BRAM_OKU_BEKLE_S);
+  
+    assign          s_axi_araddr_c          =           adres_r                                         ;
+    assign          s_axi_awaddr_c          =           adres_r                                         ;
+    assign          s_axi_wdata_c           =           yaz_veri_r                                      ;
+
+    assign          vb_addra_c              =           adres_r                                         ;
+    assign          vb_dina_c               =           yaz_veri_r                                      ;
+    assign          bb_dina_c               =           yaz_veri_r                                      ;
+
+    assign          vb_addra_c              =           adres_r                                         ;
+    assign          bb_addra_c              =           adres_r                                         ;
+    assign          vb_dina_c               =           yaz_veri_r                                      ;
+
+    assign          s_axi_bready_c          =           1'b1                                            ;
+  
+    always @* 
+    begin
+        axi_durum_ns_r                      =           axi_durum_r                                     ;
+        bram_durum_ns_r                     =           bram_durum_r                                    ;
+        adres_ns_r                          =           adres_r                                         ;
+        yaz_veri_ns_r                       =           yaz_veri_r                                      ;
+        yaz_maske_ns_r                      =           yaz_maske_r                                     ;
+        s_axi_arvalid_c                     =           1'b0                                            ;
+        s_axi_awvalid_c                     =           1'b0                                            ;
+        s_axi_rready_c                      =           1'b0                                            ;
+        s_axi_wstrb_c                       =           4'b0                                            ;
+        s_axi_wvalid_c                      =           1'b0                                            ;
+        vb_ena_c                            =           1'b0                                            ;
+        vb_wea_c                            =           4'b0                                            ;
+        bb_wea_c                            =           4'b0                                            ;
+        bb_ena_c                            =           1'b0                                            ;
+        yaz_bb_ns_r                         =           yaz_bb_r                                        ;
+        // Su anda herhangi bir veri aktarimi gerceklestirilmiyor
+        if ((axi_durum_r == AXI_BOSTA_S) && (bram_durum_r == BRAM_BOSTA_S)) begin            
+            if (c0_oku_gecerli_g) 
+            begin
+                if (oku_axi_istegi_w) 
+                begin
+                    axi_durum_ns_r          =           AXI_OKU_AR_S                                    ;
+                    adres_ns_r              =           c0_oku_adres_g      -       32'h8000_0000       ;
+                end
+                else 
+                begin
+                    bram_durum_ns_r         =           BRAM_OKU_S                                      ;
+                    // BRAM word adresleme kullaniyor
+                    adres_ns_r              =           c0_oku_adres_g      >>      2                   ;                
+                end    
+            end
+            else if (c0_yaz_gecerli_g != 0)
+            begin
+                yaz_veri_ns_r               =           c0_yaz_veri_g                                   ;
+                yaz_maske_ns_r              =           c0_yaz_gecerli_g                                ;
+                if (yaz_axi_istegi_w) 
+                begin
+                    axi_durum_ns_r          =           AXI_YAZ_AW_W_S                                  ;
+                    adres_ns_r              =           c0_yaz_adres_g      -       32'h8000_0000       ;
+                end
+                else 
+                begin
+                    bram_durum_ns_r         =           BRAM_YAZ_S                                      ;
+                    // BRAM word adresleme kullaniyor
+                    adres_ns_r              =           (c0_yaz_adres_g - `VB_TABAN_ADR) >> 2           ;
+                    if (yaz_bb_w) begin
+                      yaz_bb_ns_r           =           1'b1                                            ;
+                      adres_ns_r            =           (c0_yaz_adres_g - `BB_TABAN_ADR) >> 2           ;
+                    end
+                end            
+            end
+        end
+        else 
+        begin
+            // axi arayuzunde veri aktarimi gerceklestiriliyor
+            if (axi_durum_r != AXI_BOSTA_S) 
+            begin
+                case (axi_durum_r)
+                    AXI_OKU_AR_S: begin
+                        s_axi_arvalid_c         =       1'b1                                            ;
+                        if(s_axi_arready_g)
+                            axi_durum_ns_r      =       AXI_OKU_R_S                                     ;
+                    end
+                    AXI_OKU_R_S: begin
+                        s_axi_rready_c          =       1'b1                                            ;
+                        if(s_axi_rvalid_g)
+                            axi_durum_ns_r      =       AXI_BOSTA_S                                     ;                                           
+                    end
+                    // https://forums.xilinx.com/t5/Processor-System-Design-and-AXI/AXI-UART-Lite-v2-0-is-never-ready/td-p/1064124
+                    AXI_YAZ_AW_W_S: begin
+                        s_axi_awvalid_c         =       1'b1                                            ;
+                        s_axi_wvalid_c          =       1'b1                                            ;
+                        s_axi_wstrb_c           =       yaz_maske_r                                     ;                     
+                        if(s_axi_awready_g && s_axi_wready_g)
+                            axi_durum_ns_r      =       AXI_BOSTA_S                                     ;                        
+                        else if (s_axi_awready_g) 
+                            axi_durum_ns_r      =       AXI_YAZ_W_S                                     ;
+                        else if (s_axi_wready_g)
+                            axi_durum_ns_r      =       AXI_YAZ_AW_S                                    ;                        
+                    end
+                    AXI_YAZ_AW_S: begin
+                        s_axi_awvalid_c         =       1'b1                                            ;
+                        if(s_axi_awready_g)
+                            axi_durum_ns_r      =       AXI_BOSTA_S                                     ;                     
+                    end                        
+                    AXI_YAZ_W_S: begin
+                        s_axi_wstrb_c           =       yaz_maske_r                                     ;
+                        s_axi_wvalid_c          =       1'b1                                            ;
+                        if(s_axi_wready_g)
+                            axi_durum_ns_r      =       AXI_BOSTA_S                                     ;                     
+                    end    
+                endcase
+            end
+            // veri belleginden veri okunuyor veya veri bellegine (ya da buyruk bellegine) yaziliyor
+            else 
+            begin
+                case (bram_durum_r)
+                    BRAM_OKU_S: begin
+                        vb_ena_c                =       1'b1                                            ;
+                        bram_durum_ns_r         =       BRAM_OKU_BEKLE_S                                ;       
+                    end
+                    BRAM_OKU_BEKLE_S: begin
+                        bram_durum_ns_r         =       BRAM_BOSTA_S                                    ;
+                    end
+                    BRAM_YAZ_S: begin
+                        yaz_bb_ns_r             =       1'b0                                            ;
+                        if (yaz_bb_r) begin
+                          bb_ena_c              =       1'b1                                            ;
+                          bb_wea_c              =       yaz_maske_r                                     ;                          
+                        end else begin
+                          vb_ena_c              =       1'b1                                            ;
+                          vb_wea_c              =       yaz_maske_r                                     ;                        
+                        end
+                        bram_durum_ns_r         =       BRAM_BOSTA_S                                    ;
+                    end                        
+                endcase           
+            end
+        end    
+    end
+    
+    always @(posedge clk_g) 
+    begin
+        if (rst_g) 
+        begin
+            axi_durum_r                 <=          AXI_BOSTA_S                                         ;
+            bram_durum_r                <=          BRAM_BOSTA_S                                        ;
+            adres_r                     <=          0                                                   ;
+            yaz_veri_r                  <=          0                                                   ;        
+            yaz_maske_r                 <=          0                                                   ;
+            yaz_bb_r                    <=          0                                                   ;        
+        end
+        else begin
+            axi_durum_r                 <=          axi_durum_ns_r                                      ;
+            bram_durum_r                <=          bram_durum_ns_r                                     ;
+            adres_r                     <=          adres_ns_r                                          ;
+            yaz_veri_r                  <=          yaz_veri_ns_r                                       ;
+            yaz_maske_r                 <=          yaz_maske_ns_r                                      ;
+            yaz_bb_r                    <=          yaz_bb_ns_r                                         ;                                       
+        end
+        
+    end
+    
+endmodule
diff --git a/verilog/rtl/aritmetik_mantik_birimi.v b/verilog/rtl/aritmetik_mantik_birimi.v
new file mode 100644
index 0000000..fce552d
--- /dev/null
+++ b/verilog/rtl/aritmetik_mantik_birimi.v
@@ -0,0 +1,47 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+`ifndef GL_RTL_SIM
+`include "mikroislem.vh"
+`endif
+
+module aritmetik_mantik_birimi(
+    input         [11:0]    islev_kodu_g                                         ,
+    input         [31:0]    islec1_g                                             ,
+    input         [31:0]    islec2_g                                             ,
+    output reg    [31:0]    sonuc_c
+    );
+    
+    always@* begin
+        sonuc_c             = 0                                                  ;
+        case(islev_kodu_g)
+            `ADD:   sonuc_c = islec1_g + islec2_g                                ;
+            `SUB:   sonuc_c = islec1_g - islec2_g                                ;
+            `AND:   sonuc_c = islec1_g & islec2_g                                ;
+            `OR:    sonuc_c = islec1_g | islec2_g                                ;
+            `XOR:   sonuc_c = islec1_g ^ islec2_g                                ;
+            `SLT:   sonuc_c = ($signed(islec1_g) < $signed(islec2_g))            ; 
+            `SLTU:  sonuc_c = (islec1_g < islec2_g)                              ; 
+            `SLL:   sonuc_c = islec1_g << islec2_g[4:0]                          ; 
+            `SRL:   sonuc_c = $signed({1'b0, islec1_g}) >>> islec2_g[4:0]        ; 
+            `SRA:   sonuc_c = $signed({islec1_g[31], islec1_g}) >>> islec2_g[4:0]; 
+            `LUI:   sonuc_c = islec2_g[19:0]  << 12                              ; // islec2 = anlik
+            `AUIPC: sonuc_c = islec1_g + (islec2_g[19:0]  << 12)                 ; //islec1=ps, islec2=anlik
+        endcase
+    end
+
+    
+endmodule
diff --git a/verilog/rtl/axil_interconnect.v b/verilog/rtl/axil_interconnect.v
new file mode 100644
index 0000000..012b549
--- /dev/null
+++ b/verilog/rtl/axil_interconnect.v
@@ -0,0 +1,137 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+`ifndef GL_RTL_SIM
+`include "sabitler.vh"
+`endif
+
+module axi_interconnect #(
+    parameter                       SLAVE_NUM   = 16, //maximum 16 olabilir
+    parameter [32*SLAVE_NUM - 1:0]  bases       = 0,
+    parameter [32*SLAVE_NUM - 1:0]  ranges      = 0   
+    ) (
+        // Masterside WAC
+        input [`ADRES_BIT - 1:0]                    m_axi_awaddr,
+        input                                       m_axi_awvalid,
+        input [2:0]                                 m_axi_awprot,
+        output reg                                  m_axi_awready,
+        // Masterside WDC
+        input [`VERI_BIT - 1:0]                     m_axi_wdata,
+        input [3:0]                                 m_axi_wstrb,
+        input                                       m_axi_wvalid,
+        output reg                                  m_axi_wready,
+        // Masterside WRC
+        input                                       m_axi_bready,
+        output reg [1:0]                            m_axi_bresp,
+        output reg                                  m_axi_bvalid,
+        // Masterside RAC
+        input [`ADRES_BIT - 1:0]                    m_axi_araddr,
+        input                                       m_axi_arvalid,
+        input [2:0]                                 m_axi_arprot,
+        output reg                                  m_axi_arready,
+        // Masterside RDC
+        input                                       m_axi_rready,
+        output reg [`VERI_BIT - 1:0]                m_axi_rdata,   
+        output reg [1:0]                            m_axi_rresp,
+        output reg                                  m_axi_rvalid,
+        // Slaveside WAC
+        input [SLAVE_NUM - 1:0]                     s_axi_awready,
+        output reg [`ADRES_BIT*SLAVE_NUM - 1:0]     s_axi_awaddr,
+        output reg [SLAVE_NUM - 1:0]                s_axi_awvalid,
+        output reg [3*SLAVE_NUM - 1:0]              s_axi_awprot,
+        // Slaveside WDC
+        input [SLAVE_NUM - 1:0]                     s_axi_wready,
+        output reg [`VERI_BIT*SLAVE_NUM - 1:0]      s_axi_wdata,
+        output reg [4*SLAVE_NUM - 1:0]              s_axi_wstrb,
+        output reg [SLAVE_NUM - 1:0]                s_axi_wvalid,
+        // Slaveside WRC
+        input [2*SLAVE_NUM - 1:0]                   s_axi_bresp,
+        input [SLAVE_NUM - 1:0]                     s_axi_bvalid,
+        output reg [SLAVE_NUM - 1:0]                s_axi_bready,
+        // Slaveside RAC
+        input [SLAVE_NUM - 1:0]                     s_axi_arready,
+        output reg [`ADRES_BIT*SLAVE_NUM - 1:0]     s_axi_araddr,
+        output reg [SLAVE_NUM - 1:0]                s_axi_arvalid,
+        output reg [3*SLAVE_NUM - 1:0]              s_axi_arprot,
+        // Slaveside RDC
+        input [`VERI_BIT*SLAVE_NUM - 1:0]           s_axi_rdata,
+        input [2*SLAVE_NUM - 1:0]                   s_axi_rresp,
+        input [SLAVE_NUM - 1:0]                     s_axi_rvalid,
+        output reg [SLAVE_NUM - 1:0]                s_axi_rready
+    );
+    
+    wire [SLAVE_NUM - 1:0]  slave_write;
+    wire [SLAVE_NUM - 1:0]  slave_read;
+        
+    genvar s;
+    for( s = 0; s < SLAVE_NUM; s = s + 1) begin
+        assign slave_write[s] = (m_axi_awvalid || m_axi_wvalid || m_axi_bready) ? ((m_axi_awaddr <= (ranges[s*32+:32] + bases[s*32+:32] - 1) && m_axi_awaddr >= bases[s*32+:32])? `HIGH: `LOW): `LOW;   
+        assign slave_read[s] = (m_axi_arvalid || m_axi_rready)? ((m_axi_araddr <= (ranges[s*32+:32] + bases[s*32+:32] - 1) && m_axi_araddr >= bases[s*32+:32])? `HIGH: `LOW): `LOW;
+    end
+    
+    reg[3:0] write_id;
+    reg[3:0] read_id;
+    
+    integer i;
+    always @* begin
+        write_id  = 0;
+        read_id   = 0;
+        for( i = 0; i < SLAVE_NUM; i = i + 1) begin
+            if(slave_write[i]) begin
+                write_id = i;
+                s_axi_awaddr[`ADRES_BIT*i+:`ADRES_BIT]   = m_axi_awaddr;
+                s_axi_awprot[3*i+:3]                     = m_axi_awprot;
+                s_axi_awvalid[i]                         = m_axi_awvalid;
+                s_axi_wdata[`VERI_BIT*i+:`VERI_BIT]      = m_axi_wdata;
+                s_axi_wstrb[`VERI_BIT/8*i+:`VERI_BIT/8]  = m_axi_wstrb;
+                s_axi_wvalid[i]                          = m_axi_wvalid;
+                s_axi_bready[i]                          = m_axi_bready;
+            end else begin
+                s_axi_awaddr[`ADRES_BIT*i+:`ADRES_BIT]   = {`ADRES_BIT{1'b0}};
+                s_axi_awprot[3*i+:3]                     = {3{1'b0}};
+                s_axi_awvalid[i]                         = {1'b0};
+                s_axi_wdata[`VERI_BIT*i+:`VERI_BIT]      = {`VERI_BIT{1'b0}};
+                s_axi_wstrb[`VERI_BIT/8*i+:`VERI_BIT/8]  = {`VERI_BIT/8{1'b0}};
+                s_axi_wvalid[i]                          = {1'b0};
+                s_axi_bready[i]                          = {1'b0};    
+            end
+            if(slave_read[i]) begin
+                read_id = i;
+                s_axi_araddr[`ADRES_BIT*i+:`ADRES_BIT]   = m_axi_araddr;
+                s_axi_arprot[3*i+:3]                     = m_axi_arprot;
+                s_axi_arvalid[i]                         = m_axi_arvalid;    
+                s_axi_rready[i]                          = m_axi_rready;
+            end else begin
+                s_axi_araddr[`ADRES_BIT*i+:`ADRES_BIT]   = {`ADRES_BIT{1'b0}};
+                s_axi_arprot[3*i+:3]                     = {3{1'b0}};
+                s_axi_arvalid[i]                         = {1'b0};    
+                s_axi_rready[i]                          = {1'b0};            
+            end
+        end
+        m_axi_awready = s_axi_awready[write_id];
+        m_axi_wready = s_axi_wready[write_id];
+        m_axi_bvalid = s_axi_bvalid[write_id];
+        m_axi_bresp = s_axi_bresp[write_id*2+:2];
+        m_axi_arready = s_axi_arready[read_id];
+        m_axi_rdata = s_axi_rdata[read_id*`VERI_BIT+:`VERI_BIT];
+        m_axi_rresp = s_axi_rresp[read_id*2+:2];
+        m_axi_rvalid = s_axi_rvalid[read_id];
+    end
+    
+    
+    
+    
+endmodule
diff --git a/verilog/rtl/axil_slave_gfa.v b/verilog/rtl/axil_slave_gfa.v
new file mode 100644
index 0000000..ab4a9b7
--- /dev/null
+++ b/verilog/rtl/axil_slave_gfa.v
@@ -0,0 +1,208 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+`ifndef GL_RTL_SIM
+`include "sabitler.vh"
+`endif
+
+module axi_slave_gfi (
+    // AXI4 LITE SLAVE signals
+    // Global Signals
+    input                       ACLK,
+    input                       ARESET,
+    // Write Address Channel
+    input [`ADRES_BIT - 1:0]    AWADDR,
+    input                       AWVALID,
+    input [2:0]                 AWPROT,
+    output                      AWREADY,
+    // Write Data Channel
+    input [`VERI_BIT - 1:0]     WDATA,
+    input [`VERI_BIT/8 - 1:0]   WSTRB,
+    input                       WVALID,
+    output                      WREADY,
+    // Write Response Channel
+    input                       BREADY,
+    output                      BVALID,
+    output [1:0]                BRESP,
+    // Read Address Channel
+    input [`ADRES_BIT - 1:0]    ARADDR,
+    input                       ARVALID,
+    input [2:0]                 ARPROT,
+    output                      ARREADY,
+    // Read Data Channel
+    input                       RREADY,
+    output [`VERI_BIT - 1:0]    RDATA,
+    output                      RVALID,
+    output [1:0]                RRESP,
+    
+    // Genel FIFO Aray�z�
+    // Komut Kanali
+    input                       komut_hazir,
+    output                      komut_gecerli,
+    output [`VERI_BIT - 1:0]    komut,
+    // Veri Kanali
+    input [`VERI_BIT - 1:0]     veri,
+    input                       veri_gecerli,
+    output                      veri_hazir
+    );
+    
+    // AXI4 LITE SLAVE Connections
+    localparam [1:0]
+        YAZ_IDLE = 2'd0,
+        YAZ_DATA = 2'd1,
+        YAZ_RESP = 2'd2;
+    localparam [0:0]
+        OKU_IDLE = 1'd0,
+        OKU_DATA = 1'd1;
+    localparam [0:0]
+        KOMUT_IDLE = 1'd0,
+        KOMUT_DATA = 1'd1;
+                    
+    reg [1:0] yaz_state, yaz_state_ns;
+    reg oku_state, oku_state_ns;
+    reg komut_state, komut_state_ns;
+    
+    reg bvalid_r, bvalid_ns_r;
+    reg rvalid_r, rvalid_ns_r;
+    wire [`VERI_BIT - 1:0] strb_data;
+    
+    // Genel FIFO Aray�z� Sinyaller
+    reg veri_reg_bos, veri_reg_bos_ns;
+    reg [`VERI_BIT - 1:0] veri_reg, veri_reg_ns;
+     
+    reg komut_reg_bos, komut_reg_bos_ns;
+    reg [`VERI_BIT - 1:0] komut_reg, komut_reg_ns;
+    
+    reg komut_gecerli_r, komut_gecerli_ns_r;
+    
+
+    // Applying WSTRB to WDATA before pushing into reg
+    genvar i;
+    for(i = 0; i < `VERI_BIT/8; i = i + 1)
+    begin
+        assign strb_data[i*8 +: 8] = WSTRB[i]? WDATA[i*8 +: 8]: 8'hff;
+    end
+    
+    // AXI4 LITE SLAVE Logic
+    assign AWREADY = (komut_reg_bos)? `HIGH: `LOW;
+    assign ARREADY = (~veri_reg_bos)? `HIGH: `LOW;
+    assign WREADY = (komut_reg_bos)? `HIGH: `LOW;
+    assign BVALID = bvalid_r;
+    assign BRESP = 2'b00;
+    assign RDATA = veri_reg;
+    assign RVALID = rvalid_r;
+    assign RRESP = 2'b00;
+    
+    // Genel FIFO Aray�z� Mant?k
+    assign komut_gecerli = komut_gecerli_r;
+    assign komut = komut_reg;
+    assign veri_hazir = (veri_reg_bos)? `HIGH: `LOW;
+
+    always@* begin
+        yaz_state_ns = yaz_state;
+        oku_state_ns = oku_state;
+        komut_state_ns = komut_state;
+        komut_gecerli_ns_r = komut_gecerli_r;
+        veri_reg_bos_ns = veri_reg_bos;
+        komut_reg_bos_ns = komut_reg_bos;
+        veri_reg_ns = veri_reg;
+        komut_reg_ns = komut_reg;
+        rvalid_ns_r = rvalid_r;
+        bvalid_ns_r = bvalid_r;
+        
+        case(yaz_state)
+            YAZ_IDLE: begin
+                if(komut_reg_bos && WVALID) begin
+                    komut_reg_bos_ns = `LOW;
+                    komut_reg_ns = strb_data;
+                    yaz_state_ns = YAZ_DATA;
+                end else begin
+                    yaz_state_ns = YAZ_IDLE;
+                end
+            end
+            YAZ_DATA: begin
+                //if(BREADY) begin // her zaman 1 set ettiÄŸimiz için yoruma aldık
+                    bvalid_ns_r = `HIGH;
+                    yaz_state_ns = YAZ_RESP;
+                //end
+            end
+            YAZ_RESP: begin
+                bvalid_ns_r = `LOW;
+                yaz_state_ns = YAZ_IDLE;
+            end
+        endcase
+        
+        case(oku_state)
+            OKU_IDLE: begin
+                if(RREADY && ~veri_reg_bos) begin
+                    rvalid_ns_r = `HIGH;
+                    veri_reg_bos_ns = `HIGH;
+                    oku_state_ns = OKU_DATA;
+                end
+            end
+            OKU_DATA: begin
+                rvalid_ns_r = `LOW;
+                oku_state_ns = OKU_IDLE;
+            end
+        endcase
+        
+        case(komut_state)
+            KOMUT_IDLE: begin
+                if(komut_hazir && ~komut_reg_bos) begin
+                    komut_gecerli_ns_r = `HIGH;
+                    komut_state_ns = KOMUT_DATA;
+                end
+            end
+            KOMUT_DATA: begin
+                komut_reg_bos_ns = `HIGH;
+                komut_gecerli_ns_r = `LOW;
+                komut_state_ns = KOMUT_IDLE;
+            end
+        endcase
+
+        if(veri_gecerli && veri_reg_bos) begin
+            veri_reg_bos_ns = `LOW;
+            veri_reg_ns = veri;
+        end
+    end
+    
+    always@(posedge ACLK) begin
+        if(ARESET) begin
+            komut_gecerli_r     <= `LOW;
+            yaz_state           <= YAZ_IDLE;
+            oku_state           <= OKU_IDLE;
+            komut_state         <= KOMUT_IDLE;
+            komut_reg           <= 0;
+            veri_reg            <= 0;
+            veri_reg_bos        <= `HIGH;
+            komut_reg_bos       <= `HIGH;
+            rvalid_r            <= `LOW;
+            bvalid_r            <= `LOW;
+        end else begin
+            komut_gecerli_r     <= komut_gecerli_ns_r;
+            yaz_state           <= yaz_state_ns;
+            oku_state           <= oku_state_ns;
+            komut_state         <= komut_state_ns;
+            komut_reg           <= komut_reg_ns;
+            veri_reg            <= veri_reg_ns;
+            veri_reg_bos        <= veri_reg_bos_ns;
+            komut_reg_bos       <= komut_reg_bos_ns;
+            rvalid_r            <= rvalid_ns_r;
+            bvalid_r            <= bvalid_ns_r;
+        end
+    end
+
+endmodule
diff --git a/verilog/rtl/baslangic_bellegi.v b/verilog/rtl/baslangic_bellegi.v
new file mode 100644
index 0000000..8de36b9
--- /dev/null
+++ b/verilog/rtl/baslangic_bellegi.v
@@ -0,0 +1,91 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+module baslangic_bellegi(
+  input                             clk_g                                 ,
+  input                             rst_g                                 ,
+ 
+  input           [31:0]            adres_g                               ,
+  output          [31:0]            buyruk_c                              ,
+  input                             ena_g                         
+);
+
+  wire            [31:0]            buyruklar     [40:0]                  ;
+  reg             [31:0]            buyruk_r                              ;
+  reg             [31:0]            buyruk_ns                             ;
+
+  assign buyruk_c                   =         buyruk_r                    ;
+    
+  assign buyruklar[0]               =         32'H800000B7                ;
+  assign buyruklar[1]               =         32'H00010537                ;
+  assign buyruklar[2]               =         32'H40000A37                ;
+  assign buyruklar[3]               =         32'H0000A103                ;
+  assign buyruklar[4]               =         32'H0000A183                ;
+  assign buyruklar[5]               =         32'H0000A203                ;
+  assign buyruklar[6]               =         32'H0000A283                ;
+  assign buyruklar[7]               =         32'H00028313                ;
+  assign buyruklar[8]               =         32'H00831313                ;
+  assign buyruklar[9]               =         32'H00436333                ;
+  assign buyruklar[10]              =         32'H00831313                ;
+  assign buyruklar[11]              =         32'H00336333                ;
+  assign buyruklar[12]              =         32'H00831313                ;
+  assign buyruklar[13]              =         32'H00236333                ;
+  assign buyruklar[14]              =         32'H00000393                ;
+  assign buyruklar[15]              =         32'H00008103                ;
+  assign buyruklar[16]              =         32'H00250023                ;
+  assign buyruklar[17]              =         32'H00138393                ;
+  assign buyruklar[18]              =         32'H00150513                ;
+  assign buyruklar[19]              =         32'H00638463                ;
+  assign buyruklar[20]              =         32'HFEDFF06F                ;
+  assign buyruklar[21]              =         32'H0000A103                ;
+  assign buyruklar[22]              =         32'H0000A183                ;
+  assign buyruklar[23]              =         32'H0000A203                ;
+  assign buyruklar[24]              =         32'H0000A283                ;
+  assign buyruklar[25]              =         32'H00028313                ;
+  assign buyruklar[26]              =         32'H00831313                ;
+  assign buyruklar[27]              =         32'H00436333                ;
+  assign buyruklar[28]              =         32'H00831313                ;
+  assign buyruklar[29]              =         32'H00336333                ;
+  assign buyruklar[30]              =         32'H00831313                ;
+  assign buyruklar[31]              =         32'H00236333                ;
+  assign buyruklar[32]              =         32'H00000393                ;
+  assign buyruklar[33]              =         32'H00008103                ;
+  assign buyruklar[34]              =         32'H002A0023                ;
+  assign buyruklar[35]              =         32'H00138393                ;
+  assign buyruklar[36]              =         32'H001A0A13                ;
+  assign buyruklar[37]              =         32'H00638463                ;
+  assign buyruklar[38]              =         32'HFEDFF06F                ;
+  assign buyruklar[39]              =         32'H00010537                ;
+  assign buyruklar[40]              =         32'H00050067                ;                       
+                                                    
+  always @* begin                                 
+    buyruk_ns                       =         buyruklar[(adres_g>>2)]     ;
+  end
+  
+  always @(posedge clk_g) begin
+    if (rst_g)
+      buyruk_r                      <=        buyruklar[0]                ;
+    else begin
+      if(ena_g) 
+        buyruk_r                    <=        buyruk_ns                   ;
+      else
+        buyruk_r                    <=        buyruk_r                    ;
+      
+    end        
+  end
+  
+
+endmodule
\ No newline at end of file
diff --git a/verilog/rtl/bellek_islem_birimi.v b/verilog/rtl/bellek_islem_birimi.v
new file mode 100644
index 0000000..9cc9ff8
--- /dev/null
+++ b/verilog/rtl/bellek_islem_birimi.v
@@ -0,0 +1,214 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+//,,,,,,,,,,,,,,.,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,...,.,..,,,,..,..,,...............,......................................................................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,...,,,.,,,..,,,,........,.....,........,.........................................................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,,.,,,,,,,,,,,,.......,,,....,,,,..,,..,,.......................................................................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.,,...,,,.................,.........................................................
+//,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,.,,,,,,,,.,..,...,,,,...,,.,...,.......,...........................,..................................................
+//.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,....,..,...,.....,,,,,.......,.............,.........,.........................................................
+//,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,.,,,.,.,,,,,,...,,......,,.............,......................,....,..................................................
+//,,,,,,,,,,..,,,,,,,,,,,,,,,,,,,,,,,,,,,..,,,,,,.,..,,...,,.,,..........,..........................,...................................................
+//.,,,,,...,,,,,,,.,,,,,,,.,,,,,,,.,,,,,.,.,,,,,,,,,,.,,,,,,Ismail Emir Yuksel.........,,.......,,,..............................................
+//,,,,,,,,.,,...,,,,,,.,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,.,,,,,.......,..,,,....,.................,,.,.,..................................................
+//,,,,,,,,,,,,,..,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,.,.,,....,,,*,*,,,,,,,*,.......,,..,.,..,,,.,.,,..,..,..,.......................................
+//,,,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,/#%&&&&%#(#(#/,,,...........,,.,,,,,,,.,,,,.,,..,..,...................................
+//,,,,,,..,,,,,,,,.,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,*#%&&&@@@@@@@&@&@@&%**,,,.....,,...,.,,,,,,,,.,,,,,,,.,...,...,..............................
+//,,,,,,,,.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,/%@@@@@@@&&&&&&&@@@@@&&%,,,,.,...,.,,,,,,,,,,,,,,,,,,,,,,,,,,...,..,..........................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*&@@@&%(((//(((((((((((%@@@@&%,.,,,,,,,,,,,,,,,.,,,,,,,,,,,,,,,,,,...............................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*@@@@%(/////////////////***/%@@@@(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..............................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@@(///////////////////*****/&@@@(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,...........................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(@@&#//////(((////////////*****/%@@&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,.........................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*@&#/(&&&&%%%#((/////(#%&%%%%%*,(&&&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,........................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&%/((((###%%%#(//*/(#%%##(/*,**,#&#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,......................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&(//(#####%%#((//*/(#%%###%%*,,,#&,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,,,,.....,...................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&//////((((((/(//***/((((///***,%%,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,.......................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#//////////(##//(//,,*,#(///***,,,(,/*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.........................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#//(/////(##(#&&&&%&&%#((#(//*,,,,(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.....,..................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*(#%(///(#&%%########((##%#(**,**(((*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.......................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(%##((#%%&%(((##(((/(#%%#(*////%*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,....................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*%%#####(((##%%%#//**/(#/(#(((#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.......................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(&%%%%%##((#%%%#((((###%###%(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,......................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#&&&%%%%%%%%&&%%%%%##%%%%%/,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,,,,................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,/&&&&&%%&&&&&&%%%%%%%&%%/,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,,.,................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*(#%&&&&&&&&%%%%%&%%#(/*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,,.,,................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(((((##%&&&%%%#(*******,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,.,....................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*(((((((((###((/**********&&#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,...,.,...,............
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,&&@&&(((((((((((((((/***//****/%&@&@&&&#*,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,................
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*&&@@@@@@@@&((((((((((((((/////****/%&&@&&&@@@&&&&&&&%(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,.............
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,/&&&&&@@@&@@@@@@@@@@%(((((((((((((((///((#&&&&@@&&&@@@&&&&&&&&&&&&&%(,,,,,,,,,,,,,,,,,,,,,,,,,,,,,..,.............
+//,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,*%&&&&&&&@&@&@&@@@&@@@@@@@@@@&&((((((((((((#&&&&&@&&&@&&&&&&&&&&&&&&&&&&&&&%%*,,,,,,,,,,,,,,,,,,,,,,,,,,,,.,............
+//,,,,,,,,,,,,,,,,,,,,,,,,,,*(&&&&&&&@&&&&&@&@&@@@&&@@@@@@@@@@@@@@@@@@@@@@@@@@&&@@&&@&&&&&&&&&&&&&@@&&&&&&&&&%%,,,,,,,,,,,,,,,,,,,,,,,,,,.,,............
+//,,,,,,,,,,,,,,,,,,,,,,,,,%&&&&&&&&&&&&&&&&&&&&&@&@&&@@@@@@@@@@@@&@@@@@@&&@@@&&@&&&&&&&&&&&@&&&&&&@&&&&&&&%&&%%*,,,,,,,,,,,,,,,,,,,,,,,,,.,............
+//,,,,,,,,,,,,,,,,,,,,,,,,%&&&&&&&&&&&&&&&&&@@&@&&&&&&&&&@&&&@@@@@@@&&&@&&&&@&&&&&&&@&&&&&@&&&&&&&&&&&&&%&%&&&%%&#,,,,,,,,,,,,,,,,,,,,,,,...............
+//,,,,,,,,,,,,,,,,,,,,,,*%&&&&&&&&&&&&&&&&&&&&&&&&&@&@&&&&@&@&&@@@@@&&@@&&&&@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&@&%%%&%,,,,,,,,,,,,,,,,,,,,,,,..............
+//,,,,,,,,,,,,,,,,,,,,,*%&&&&&&&&&&&&&@&&&@&&&&&&&&@@&&&&&&&&@&&&&&&@&&@&&&@&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&&&%%%&&%,,,,,,,,,,,,,,,,,,,,,.,,............
+//,,,,,,,,,,,,,,,,,,,,*%&&&&&&&@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&@&&@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%@&&&&&%&&&%,,,,,,,,,,,,,,,,,,,,,,.............
+//,,,,,,,,,,,,,,,,,****&&&&@&&@@@&&&&&&&&&&&&&&@&&&&&&@&&&&&&&&@&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%%%&@@&%&&&@&&&%,,,,,,,,,,,,,,,,,,,,,.............
+//,,,,,,,,,,,,,,,,,,*,/&&&&&&&&@@@@&&&&&&&&@@&&&&&&&&&&&@&&&&&&&&&&&&@&&@&&@&&&&@&&&&@&&&&&&&&&&&&&&%%%%%@&&@%&&&&&&&&(,,,,,,,,,,,,,,,,,,,,.............
+//,,,,,,,,,,,,,,,,****#%&&&@@@@@@&@@&&&&&&&&@@&@@&@&&@&@&&&&&&@&&&&@&&@@&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%&&@&&&&&&@&&&@&%/,,,,,,,,,,,,,,,,,,,.,...........
+//,,,,,,,,,,,,*,,**,,*%%&&&&@@@@@&@@&&&&&&&@@&&&&@&&&&&&&&@&&&&&&&@@@&&&&@&&@&&&&&&&&&&&&&&&&&&&&&&%%%%&@@@&&&&&&&&@@&&%/,,,,,,,,,,,,,,,,,,,............
+//.,,,,,,,,,,,,,,,****%&&&@&@@@@@@@@@&&&&&&&&&&&&&&&&&&&&&&&@&&&&&&@@&@&&&&&&&&&&&@&&&&&&&&&&&&&&%%%%%&&@@&&&&&&&&&@@&&%%*,,,,,,,,,,,,,,,,,,............
+//.,,,,,,,,,,,,,,,,***%&&&@&@@@@@&@@@&&&&&&&&&&&&&&@&@&&@&&&&&&@&&&&@@&&&@&&@&&&&@&&&&&&&&&&&&%&%%%%%%@@@@&&&&&&&&@@&&&&%%*,,,,,,,,,,,,,,,,.............
+//.,,,,,,,,,,,,,,*,**/&&&@&@@@@@@@@@@@&@@&&&&&&&&&&&@@@@@&&&&&&&&&&&&&&&&&&&&@&&&@@&&&&&&&&&&&&&%%%%%%&@@&&&&&&@&&@&&&&&&&%*,,,,,,,,,,,,,,,,,...........
+//.,,,,,,,,,,,,,,,,*/&&&@@@@@@@@@@@@@@@@@@&&&&@&&&@&@&&&&@&&@&&&&&@&&&@&@&&&@@&&&&&&&&&&&&&&&&&%%%%%%&@@@@&&&@@&&&&&@&&&&&%#,,,,,,,,,,,,,,,,............
+//.,,,,,,,,,,,,,,,,*&&&@@@@@@@@@@@@@@@@@&@&&&&&&&&&@&&@&&&@&&&&&&&&&&@&@@&&&&&&&&@&&@&&&&&&&%%&%%%%%%@@@@@@&@@@@@@@@@&&&/,,,,,,,,,,,,,,,,,,.,...........
+//.,,,,,,,,,,,,,,*,#&&&&&@@@@@@@@@@@@@@@@&&@&&&&@@&@&&&&&&&&&&&&&&&&&&&&&&&&&@@&&&&&&&&&&&&&&%%%%%%%%%@@@@@@@&@@&&/,,,,,,,,,,,,,,,,,,,,,,,,.............
+//.,,,,,,,,,,,,,,,,*,/&@@@@@@@@@@@@@@@@@@&&&&&&@@&&&&&&&@&&@&&@&&&&&&@&&&&@&@@&&&&&&&&&&&&&&&&%%%%%%*&@@@@&#(//**,,,,,,,,,,,,,,,,,,,,,,,,,,.............
+//.,,,,,,,,,,,,,*,**,*(((((((((##%&@@&#@@@@&&@&@@&&&@@@&@&&&&@&&&&&&&&&&&&&&&&@&&&&&&&&&&&&&&&&%%%%#**%&%##((//**,,,,,,,,,,,,,,,,,,,,,,,,,,,..,.........
+//.,,,,,,,,,,,,,**,***(((((((((((###%%*@@@&@&@&&&&&&&@@@&&&&&&&&&&&&&@@@&&&&&&&&&&&&&&&&&&&&&&&%%%%(,*/&%###((/***,,,,,,,,,,,,,,,,,,,,,,,,,,............
+//.,,,,,,,,,,,*,**,***((((((((((###%%/*#&&&&@@&&&&&&&@@@&@&&@&&&&&&&&&&&@&&&&&&&&&&&&&&&&&&&&&&&%%%/**,%%%##((///**,,,,,,,,,,,,,,,,,,,,,,,.,,...........
+//.,,,,,,,,,,,,,,****/(((((((((####%%***&&&&@&@&&&&&&@@&&&&&&&&@&&&&&&&@@@@&&&&&&@&&&&&&&&&&&&&&&%%****(%%###(((//**,,,,,,,,,,,,,,,,,,,,,..,............
+//.,,,,,,,,,,*,,*****(((((((((####%%*****&&&&@&&&&&&&@&@&&&&&&&&&&&@&@@&@@&&&&&&&&&&&&&%&&&&&&&&&&#*****%%%#####((/*,,,,,,,,,,,,,,,,,,,,,,.,............
+//.,,,,,,,,,,,,,,****((((((((####%%%*****&&&@&&&&&&&&@@&@&&@&&&&&&&&&&&&&&@@&&&&&&@&&&&&&&&&&&&&&&%&**,*%%%######(/*,,,,,,,,,,,,,,,,,,,,,...............
+// SRAM Researcher, Architecturer, Computer Scientist/Electrical Engineer
+// Hobbies: Cryptocurrency Enthusiast, DogeCoin
+// Language: Verilog, C, Turkish, English, Nihongo, BOOTLOADER
+
+module bellek_islem_birimi#(parameter GECIKME = 5)
+    (
+    input                   clk_g                                                ,
+    input                   rst_g                                                ,
+    input         [2:0]     bellek_buyrugu                                       ,
+    input         [31:0]    islec1_g                                             ,
+    input         [31:0]    islec2_g                                             ,
+    input         [31:0]    anlik_g                                              ,
+    input                   bellek_isaretli                                      ,
+    input         [2:0]     bellek_turu                                          ,
+    input                   bellek_hazir_g                                       ,
+    input         [31:0]    oku_veri_g                                           ,
+    input                   oku_veri_gecerli_g                                   ,
+    output  reg             bitti_c                                              ,           
+    output  reg   [31:0]    oku_veri_c                                           , 
+    output  reg   [31:0]    adres_bib_c                                          ,
+    output  reg             oku_gecerli_bib_c                                    ,
+    output  reg             yaz_gecerli_bib_c                                    ,
+    output  reg   [31:0]    yaz_veri_bib_c                                       ,
+    output  reg   [3:0]     yaz_veri_bib_maske_c                                       
+    
+    );
+    localparam FENCE  = 3'b001,
+               KAYDET = 3'b010,
+               YUKLE  = 3'b100;
+           
+      
+    localparam SB  = 3'b001,
+               SH  = 3'b010,
+               SW  = 3'b100;
+     
+    
+    localparam LW    = 5'b00001,
+               LH    = 5'b00010,
+               LB    = 5'b00100,
+               LHU   = 5'b01000,
+               LBU   = 5'b10000;
+                          
+    localparam BOSTA = 2'b10,
+               BEKLE = 2'b01;       
+           
+           
+    reg          [4:0]    oku_islem_turu                = 0                  ;       
+    reg                   islem_basladi_mi              = 0                  ;
+    
+    
+    reg          [1:0]    bib_durum_r = 0, bib_durum_ns = 0                          ;
+    
+    always@* begin
+       bib_durum_ns                 = bib_durum_r                          ;
+       oku_gecerli_bib_c            = 1'b0                                 ;
+       yaz_gecerli_bib_c            = 1'b0                                 ;
+       yaz_veri_bib_maske_c         = 4'b0                                 ;
+       yaz_veri_bib_c               = islec2_g                             ;
+       
+       adres_bib_c                  = 0                                    ;
+       oku_veri_c                   = 0                                    ;
+       bitti_c                      = 0                                    ;
+       
+       case(bellek_buyrugu)
+           FENCE: begin
+               // HICBIR SEY YAPMA
+           end
+           KAYDET: begin
+                   //anlik deger $signed olarak belirtilmemis
+                   adres_bib_c = islec1_g + { {20{anlik_g[11]}}, anlik_g[11:0] };
+
+           end
+           YUKLE: begin
+                   //anlik deger $signed olarak belirtilmemis
+                   adres_bib_c = islec1_g + { {20{islec2_g[11]}}, islec2_g[11:0] };
+                   oku_islem_turu = {bellek_turu[0],bellek_turu[1],bellek_turu[2]} << 2*$unsigned(~bellek_isaretli); // kontrol ettim, simdilik problem yok gibi.
+                   case(oku_islem_turu)
+                        LW:  oku_veri_c = oku_veri_g;
+                        
+                        LH:  oku_veri_c = {{16{oku_veri_g[{adres_bib_c[1], 4'b0000} + 15]}},
+                                             oku_veri_g[{adres_bib_c[1], 4'b0000} +: 16]};
+                                             
+                        LHU: oku_veri_c = {{16{1'b0}},
+                                             oku_veri_g[{adres_bib_c[1], 4'b0000} +: 16]};
+                                             
+                        LB:  oku_veri_c = {{24{oku_veri_g[{adres_bib_c[1:0], 3'b000} + 7]}},
+                                             oku_veri_g[{adres_bib_c[1:0], 3'b000} +:8]};
+                                             
+                        LBU: oku_veri_c = {{24{1'b0}},
+                                                oku_veri_g[{adres_bib_c[1:0], 3'b000} +:8]};
+                    endcase
+           end
+       endcase       
+       
+       case(bib_durum_r)
+            BOSTA: begin
+                if (bellek_hazir_g) begin
+                  if (bellek_buyrugu == YUKLE) begin
+                    bib_durum_ns = BEKLE;
+                    oku_gecerli_bib_c = 1'b1;
+                  end
+                  else begin
+                    if (bellek_buyrugu == KAYDET) begin
+                      case(bellek_turu)
+                           SW: yaz_veri_bib_maske_c = 4'b1111;
+                           SH: begin
+                            yaz_veri_bib_maske_c = {adres_bib_c[1], adres_bib_c[1], ~adres_bib_c[1], ~adres_bib_c[1]};
+                            yaz_veri_bib_c = islec2_g << (adres_bib_c[1] * 16);                          
+                           end
+                           SB: begin
+                            yaz_veri_bib_maske_c[adres_bib_c[1:0]] = 1'b1;
+                            yaz_veri_bib_c = islec2_g << (adres_bib_c[1:0] * 8);                      
+                           end
+                      endcase
+                      yaz_gecerli_bib_c = 1'b1;
+                    end
+                    bitti_c = 1'b1;
+                  end
+                end
+            end // BOSTA
+            BEKLE: begin
+              if (oku_veri_gecerli_g) begin
+                bitti_c = 1'b1;
+                bib_durum_ns = BOSTA;
+              end
+            end
+       endcase
+
+    end
+    
+    always @(posedge clk_g) begin
+       if (rst_g)
+         bib_durum_r <= BOSTA;
+       else
+         bib_durum_r <= bib_durum_ns;
+    end
+               
+endmodule
diff --git a/verilog/rtl/buyruk_bellegi_sram.v b/verilog/rtl/buyruk_bellegi_sram.v
new file mode 100644
index 0000000..9a6644a
--- /dev/null
+++ b/verilog/rtl/buyruk_bellegi_sram.v
@@ -0,0 +1,41 @@
+`timescale 1ns / 1ps
+
+
+module buyruk_bellegi_sram
+(
+    input           [`BB_ADRES_BIT-1:0]             addra                   ,
+    input                                           clka                    ,
+    input           [31:0]                          dina                    ,
+    input                                           ena                     ,
+    input           [3:0]                           wea                     ,
+                
+    output          [31:0]                          douta                   ,
+
+    // To SRAM outside c0's macro
+    output                                          csb0                    ,
+    output                                          web0                    ,
+    output          [3:0]                           wmask0                  ,
+    output          [`BB_ADRES_BIT-1:0]             addr0                   ,
+    output          [31:0]                          din0                    ,
+    input           [31:0]                          dout0                   ,
+
+    output                                          csb1                    ,
+    output          [`BB_ADRES_BIT-1:0]             addr1                   ,
+    input           [31:0]                          dout1                         
+
+);
+
+    assign      csb0        =           ~(ena&(|wea))       ;
+    assign      web0        =           ~(|wea)             ;
+    assign      wmask0      =           wea                 ;
+
+    assign      addr0       =           addra               ;
+    assign      din0        =           dina                ;
+    //assign      dout0       =           32'b0           ;
+
+    assign      csb1        =           ~(ena&(~(|wea)))    ;
+    assign      addr1       =           addra               ;
+    assign      douta       =           dout1               ;
+
+
+endmodule
diff --git a/verilog/rtl/c0_system.v b/verilog/rtl/c0_system.v
new file mode 100644
index 0000000..754c41f
--- /dev/null
+++ b/verilog/rtl/c0_system.v
@@ -0,0 +1,455 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`default_nettype none
+
+module c0_system(
+`ifdef USE_POWER_PINS
+    inout vccd1,	// User area 1 1.8V supply
+    inout vssd1,	// User area 1 digital ground
+`endif
+        input                                           clk_g                   ,
+        input                                           rst_g                   ,
+        
+        output          tx,
+        input           rx,
+        output          io_gecerli,
+        output [31:0]   io_ps,
+        output [37:0]   io_oeb,
+
+        output                                          vb_csb0                 ,
+        output                                          vb_web0                 ,
+        output          [3:0]                           vb_wmask0               ,
+        output          [12:0]                          vb_addr0                ,
+        output          [31:0]                          vb_din0                 ,
+        input           [31:0]                          vb_dout0                ,
+
+        output                                          vb_csb1                 ,
+        output          [12:0]                          vb_addr1                ,
+        input           [31:0]                          vb_dout1                ,
+
+        output                                          bb_csb0                 ,
+        output                                          bb_web0                 ,
+        output          [3:0]                           bb_wmask0               ,
+        output          [`BB_ADRES_BIT-1:0]             bb_addr0                ,
+        output          [31:0]                          bb_din0                 ,
+        input           [31:0]                          bb_dout0                ,
+
+        output                                          bb_csb1                 ,
+        output          [`BB_ADRES_BIT-1:0]             bb_addr1                ,
+        input           [31:0]                          bb_dout1                                   
+    );
+    assign io_oeb = {(`MPRJ_IO_PADS-1){rst_g}};
+
+    //==============================================================================
+    //                        Bellek Adresi Tekleyici ve C0
+    //==============================================================================
+    
+    wire                                                c0_oku_hazir_w                                                  ;
+    wire           [31:0]                               c0_oku_veri_w                                                   ;
+    wire                                                c0_oku_veri_gecerli_w                                           ;
+    wire                                                c0_yaz_hazir_w                                                  ;
+                                                                                                      
+    wire                                                c0_oku_gecerli_w                                                ;
+    wire           [31:0]                               c0_yaz_veri_w                                                   ;
+    wire           [3:0]                                c0_yaz_gecerli_w                                                ;
+    wire           [31:0]                               c0_adres_w                                                  ;
+
+    //==============================================================================
+    //                  C0 Cekirdegi, On Taraf ve Kesme Denetleyici
+    //==============================================================================
+    
+    wire                                                bb_buy_gecerli_g_w                                              ;
+    wire           [`BUYRUK_BIT-1:0]                    bb_buy_g_w                                                      ;
+    wire           [`BB_ADRES_BIT-1:0]                  bb_buy_ps_g_w                                                   ;
+    wire                                                gc_hazir_c_w                                                    ;
+    wire           [`BB_ADRES_BIT-1:0]                  bb_buy_istek_adres_c_w                                          ;
+    wire                                                bb_buy_istek_c_w                                                ; 
+    
+    wire                                                kesme_g_w                                                       ;
+    wire                                                zamanlayici_kesme_g_w                                           ;
+    
+    //==============================================================================
+    //                                Buyruk Bellegi
+    //==============================================================================
+        
+    wire           [`BB_ADRES_BIT-1:0]                  bb_addra_w                                                      ;                                        
+    wire           [`BB_ADRES_BIT-1:0]                  bat_bb_addra_w                                                  ;                                        
+    wire           [`BB_ADRES_BIT-1:0]                  ot_bb_addra_w                                                   ;                                        
+    wire                                                bb_clka_w                                                       ;                                      
+    wire           [31:0]                               bb_dina_w                                                       ;                                     
+    wire           [31:0]                               bb_douta_w                                                      ;                                      
+    wire                                                ot_bb_ena_w                                                     ;                                     
+    wire                                                bat_bb_ena_w                                                    ;                                     
+    wire                                                bb_ena_w                                                        ;                                     
+    wire           [3:0]                                bb_wea_w                                                        ;                                       
+
+        
+    wire           [`BB_ADRES_BIT-1:0]                  basbel_addra_w                                                  ;                                        
+    wire           [31:0]                               basbel_douta_w                                                  ;
+    wire                                                basbel_ena_w                                                    ;
+    
+    //==============================================================================
+    //                                 Veri Bellegi
+    //==============================================================================
+        
+    wire           [12:0]                               vb_addra_w                                                      ;                                        
+    wire                                                vb_clka_w                                                       ;                                      
+    wire           [31:0]                               vb_dina_w                                                       ;                                     
+    wire           [31:0]                               vb_douta_w                                                      ;                                      
+    wire                                                vb_ena_w                                                        ;                                     
+    wire           [3:0]                                vb_wea_w                                                        ;        
+
+    //==============================================================================
+    //                                AXI SISTEMI
+    //==============================================================================
+                             
+    wire                                                interrupt_w                                                     ;                                     
+    wire           [31:0]                               s_axi_araddr_w                                                  ;                                      
+    wire                                                s_axi_arready_w                                                 ;                                     
+    wire                                                s_axi_arvalid_w                                                 ; 
+    wire           [2:0]                                s_axi_arprot_w                                                  ;
+    wire           [31:0]                               s_axi_awaddr_w                                                  ;
+    wire           [2:0]                                s_axi_awprot_w                                                  ;
+    wire                                                s_axi_awready_w                                                 ;
+    wire                                                s_axi_awvalid_w                                                 ;
+    wire                                                s_axi_bready_w                                                  ;
+    wire           [1:0]                                s_axi_bresp_w                                                   ;
+    wire                                                s_axi_bvalid_w                                                  ;
+    wire           [31:0]                               s_axi_rdata_w                                                   ;
+    wire                                                s_axi_rready_w                                                  ;
+    wire           [1:0]                                s_axi_rresp_w                                                   ;
+    wire                                                s_axi_rvalid_w                                                  ;
+    wire           [31:0]                               s_axi_wdata_w                                                   ;
+    wire                                                s_axi_wready_w                                                  ;
+    wire           [3:0]                                s_axi_wstrb_w                                                   ;
+    wire                                                s_axi_wvalid_w                                                  ;
+    wire                                                s_axi_aclk_w                                                    ;
+    wire                                                s_axi_aresetn_w                                                 ;
+
+    adres_tekleyici bat
+    (
+        .clk_g                                          (clk_g)                                                         ,
+        .rst_g                                          (rst_g)                                                         ,
+                                                        
+        .c0_oku_hazir_c                                 (c0_oku_hazir_w)                                                ,
+        .c0_oku_veri_c                                  (c0_oku_veri_w)                                                 ,
+        .c0_oku_veri_gecerli_c                          (c0_oku_veri_gecerli_w)                                         ,
+        .c0_yaz_hazir_c                                 (c0_yaz_hazir_w)                                                ,
+                                                        
+        .c0_oku_adres_g                                 (c0_adres_w)                                                    ,
+        .c0_oku_gecerli_g                               (c0_oku_gecerli_w)                                              ,
+        .c0_yaz_veri_g                                  (c0_yaz_veri_w)                                                 ,
+        .c0_yaz_gecerli_g                               (c0_yaz_gecerli_w)                                              ,
+        .c0_yaz_adres_g                                 (c0_adres_w)                                                    ,
+                                                        
+        .vb_addra_c                                     (vb_addra_w)                                                    ,
+        .vb_dina_c                                      (vb_dina_w)                                                     ,
+        .vb_douta_g                                     (vb_douta_w)                                                    ,
+        .vb_ena_c                                       (vb_ena_w)                                                      ,
+        .vb_wea_c                                       (vb_wea_w)                                                      ,
+
+        .bb_wea_c                                       (bb_wea_w)                                                      ,
+        .bb_ena_c                                       (bat_bb_ena_w)                                                  ,
+        .bb_addra_c                                     (bat_bb_addra_w)                                                ,
+        .bb_dina_c                                      (bb_dina_w)                                                     ,
+
+        .s_axi_araddr_c                                 (s_axi_araddr_w)                                                ,                                    
+        .s_axi_arready_g                                (s_axi_arready_w)                                               ,                                     
+        .s_axi_arvalid_c                                (s_axi_arvalid_w)                                               ,
+        .s_axi_awaddr_c                                 (s_axi_awaddr_w)                                                ,
+        .s_axi_awready_g                                (s_axi_awready_w)                                               ,
+        .s_axi_awvalid_c                                (s_axi_awvalid_w)                                               ,
+        .s_axi_bready_c                                 (s_axi_bready_w)                                                ,
+        .s_axi_bresp_g                                  (s_axi_bresp_w)                                                 ,        
+        .s_axi_bvalid_g                                 (s_axi_bvalid_w)                                                ,
+        .s_axi_rdata_g                                  (s_axi_rdata_w)                                                 ,
+        .s_axi_rready_c                                 (s_axi_rready_w)                                                ,
+        .s_axi_rresp_g                                  (s_axi_rresp_w)                                                 ,    
+        .s_axi_rvalid_g                                 (s_axi_rvalid_w)                                                ,
+        .s_axi_wdata_c                                  (s_axi_wdata_w)                                                 ,
+        .s_axi_wready_g                                 (s_axi_wready_w)                                                ,
+        .s_axi_wstrb_c                                  (s_axi_wstrb_w)                                                 ,
+        .s_axi_wvalid_c                                 (s_axi_wvalid_w)        
+    );
+
+    localparam SLAVE_NUM = 1;
+    localparam [32*SLAVE_NUM - 1:0] bases = {32'h00000000};
+    localparam [32*SLAVE_NUM - 1:0] ranges = {32'h7fffffff};
+    
+    // INTER - SLAVE connections
+    // Write Address Channel
+    wire [SLAVE_NUM - 1:0]              AWVALID_s_w;
+    wire [SLAVE_NUM - 1:0]              AWREADY_s_w;
+    wire [`ADRES_BIT*SLAVE_NUM - 1:0]   AWADDR_s_w;
+    wire [3*SLAVE_NUM - 1:0]            AWPROT_s_w;
+    // Write Data Channel
+    wire [SLAVE_NUM - 1:0]              WVALID_s_w;
+    wire [SLAVE_NUM - 1:0]              WREADY_s_w;
+    wire [`VERI_BIT*SLAVE_NUM - 1:0]    WDATA_s_w;
+    wire [`VERI_BIT/8*SLAVE_NUM - 1:0]  WSTRB_s_w;
+    // Write Response Channel
+    wire [SLAVE_NUM - 1:0]              BVALID_s_w;
+    wire [SLAVE_NUM - 1:0]              BREADY_s_w;
+    wire [2*SLAVE_NUM - 1:0]            BRESP_s_w;
+    // Read Address Channel
+    wire [SLAVE_NUM - 1:0]              ARVALID_s_w;
+    wire [SLAVE_NUM - 1:0]              ARREADY_s_w;
+    wire [`ADRES_BIT*SLAVE_NUM - 1:0]   ARADDR_s_w;
+    wire [3*SLAVE_NUM - 1:0]            ARPROT_s_w;
+    // Read Data Channel
+    wire [SLAVE_NUM - 1:0]              RVALID_s_w;
+    wire [SLAVE_NUM - 1:0]              RREADY_s_w;
+    wire [`VERI_BIT*SLAVE_NUM - 1:0]    RDATA_s_w;
+    wire [2*SLAVE_NUM - 1:0]            RRESP_s_w;
+    
+    // SLAVE - PERIPHERAL connections
+    // Komut Kanali
+    wire [SLAVE_NUM - 1:0]              komut_hazir_p_w;
+    wire [SLAVE_NUM - 1:0]              komut_gecerli_p_w;
+    wire [`VERI_BIT*SLAVE_NUM - 1:0]    komut_p_w;
+    // Veri Kanali
+    wire [SLAVE_NUM - 1:0]              veri_hazir_p_w;
+    wire [SLAVE_NUM - 1:0]              veri_gecerli_p_w;
+    wire [`VERI_BIT*SLAVE_NUM - 1:0]    veri_p_w;    
+    
+    // INTERCONNECT
+    axi_interconnect #(.SLAVE_NUM(SLAVE_NUM),
+                       .bases(bases),
+                       .ranges(ranges)) 
+        interconnect0 (
+        // Masterside WAC
+        .m_axi_awaddr                                   (s_axi_awaddr_w),
+        .m_axi_awprot                                   (s_axi_awprot_w),
+        .m_axi_awvalid                                  (s_axi_awvalid_w),
+        .m_axi_awready                                  (s_axi_awready_w),
+        // Masterside WDC                                
+        .m_axi_wdata                                    (s_axi_wdata_w),
+        .m_axi_wstrb                                    (s_axi_wstrb_w),
+        .m_axi_wvalid                                   (s_axi_wvalid_w),
+        .m_axi_wready                                   (s_axi_wready_w),
+        // Masterside WRC                                
+        .m_axi_bresp                                    (s_axi_bresp_w),
+        .m_axi_bvalid                                   (s_axi_bvalid_w),
+        .m_axi_bready                                   (s_axi_bready_w),
+        // Masterside RAC                                
+        .m_axi_araddr                                   (s_axi_araddr_w),
+        .m_axi_arvalid                                  (s_axi_arvalid_w),
+        .m_axi_arready                                  (s_axi_arready_w),
+        .m_axi_arprot                                   (s_axi_arprot_w),
+        // Masterside RDC                                
+        .m_axi_rdata                                    (s_axi_rdata_w),
+        .m_axi_rresp                                    (s_axi_rresp_w),
+        .m_axi_rvalid                                   (s_axi_rvalid_w),
+        .m_axi_rready                                   (s_axi_rready_w),
+        // Slaveside WAC
+        .s_axi_awaddr                                   (AWADDR_s_w),
+        .s_axi_awprot                                   (AWPROT_s_w),
+        .s_axi_awvalid                                  (AWVALID_s_w),
+        .s_axi_awready                                  (AWREADY_s_w),
+        // Slaveside WDC
+        .s_axi_wdata                                    (WDATA_s_w),
+        .s_axi_wstrb                                    (WSTRB_s_w),
+        .s_axi_wvalid                                   (WVALID_s_w),
+        .s_axi_wready                                   (WREADY_s_w),
+        // Slaveside WRC
+        .s_axi_bresp                                    (BRESP_s_w),
+        .s_axi_bvalid                                   (BVALID_s_w),
+        .s_axi_bready                                   (BREADY_s_w),
+        // Slaveside RAC
+        .s_axi_araddr                                   (ARADDR_s_w),
+        .s_axi_arvalid                                  (ARVALID_s_w),
+        .s_axi_arready                                  (ARREADY_s_w),
+        .s_axi_arprot                                   (ARPROT_s_w),
+        // Slaveside RDC
+        .s_axi_rdata                                    (RDATA_s_w),
+        .s_axi_rresp                                    (RRESP_s_w),
+        .s_axi_rvalid                                   (RVALID_s_w),
+        .s_axi_rready                                   (RREADY_s_w)
+    );
+    
+    // SLAVE
+    genvar s;
+    generate
+        for(s = 0; s < SLAVE_NUM; s = s + 1) begin
+            axi_slave_gfi axi_slave(
+                .ACLK(clk_g),
+                .ARESET(rst_g),
+                .AWADDR(AWADDR_s_w[s*`ADRES_BIT +: `ADRES_BIT]),
+                .AWVALID(AWVALID_s_w[s]),
+                .AWPROT(AWPROT_s_w[s*3 +: 3]),
+                .AWREADY(AWREADY_s_w[s]),
+                .WDATA(WDATA_s_w[s*`VERI_BIT +: `VERI_BIT]),
+                .WSTRB(WSTRB_s_w[s*`VERI_BIT/8 +: `VERI_BIT/8]),
+                .WVALID(WVALID_s_w[s]),
+                .WREADY(WREADY_s_w[s]),
+                .BREADY(BREADY_s_w[s]),
+                .BVALID(BVALID_s_w[s]),
+                .BRESP(BRESP_s_w[s*2 +: 2]),
+                .ARADDR(ARADDR_s_w[s*`ADRES_BIT +: `ADRES_BIT]),
+                .ARVALID(ARVALID_s_w[s]),
+                .ARPROT(ARPROT_s_w[s*3 +: 3]),
+                .ARREADY(ARREADY_s_w[s]),
+                .RREADY(RREADY_s_w[s]),
+                .RDATA(RDATA_s_w[s*`VERI_BIT +: `VERI_BIT]),
+                .RVALID(RVALID_s_w[s]),
+                .RRESP(RRESP_s_w[s*2 +: 2]),
+                .komut_hazir(komut_hazir_p_w[s]),
+                //.komut_hazir(komut_hazir_tb[s]),
+                .komut_gecerli(komut_gecerli_p_w[s]),
+                .komut(komut_p_w[s*`VERI_BIT +: `VERI_BIT]),
+                .veri(veri_p_w[s*`VERI_BIT +: `VERI_BIT]),
+                //.veri(veri_tb[s*`VERI_BIT +: `VERI_BIT]),
+                .veri_gecerli(veri_gecerli_p_w[s]),
+                //.veri_gecerli(veri_gecerli_tb[s]),
+                .veri_hazir(veri_hazir_p_w[s])
+            );
+        end
+    endgenerate    
+    
+    UART_GFA uart(
+        .clk_g                                          (clk_g)                                                         ,
+        .rst_g                                          (rst_g)                                                           ,
+        
+        .komut_hazir                                    (komut_hazir_p_w[0])                                              ,
+        .komut_gecerli                                  (komut_gecerli_p_w[0])                                            ,
+        .komut                                          (komut_p_w[0 +: `VERI_BIT])                                       ,
+        .veri                                           (veri_p_w[0 +: `VERI_BIT])                                        ,    
+        .veri_gecerli                                   (veri_gecerli_p_w[0])                                             ,
+        .veri_hazir                                     (veri_hazir_p_w[0])                                               ,
+        
+        .RX                                             (rx)                                                            ,
+        .TX                                             (tx)
+    );
+
+    //==============================================================================
+    //                                CEKIRDEK & BELLEKLER
+    //==============================================================================    
+
+
+    cekirdek c0
+    (
+        .clk_g                                          (clk_g)                                                         ,
+        .rst_g                                          (rst_g)                                                         ,
+        .bb_buy_gecerli_g                               (bb_buy_gecerli_g_w)                                            ,
+        .bb_buy_g                                       (bb_buy_g_w)                                                    ,
+        .bb_buy_ps_g                                    (bb_buy_ps_g_w)                                                 ,
+ 
+        .bb_buy_istek_adres_c                           (bb_buy_istek_adres_c_w)                                        ,
+        .bb_buy_istek_c                                 (bb_buy_istek_c_w)                                              ,
+        
+        .gc_hazir_c                                     (gc_hazir_c_w)                                                  ,        
+        .kesme_g                                        (kesme_g_w)                                                     ,
+        .zamanlayici_kesme_g                            (zamanlayici_kesme_g_w)                                         ,
+        
+        .oku_hazir_g                                    (c0_oku_hazir_w)                                                ,
+        .oku_veri_g                                     (c0_oku_veri_w)                                                 ,
+        .oku_veri_gecerli_g                             (c0_oku_veri_gecerli_w)                                         ,
+        .yaz_hazir_g                                    (c0_yaz_hazir_w)                                                ,
+                                                         
+        .adres_c                                        (c0_adres_w)                                                    ,
+        .oku_gecerli_c                                  (c0_oku_gecerli_w)                                              ,
+        .yaz_veri_c                                     (c0_yaz_veri_w)                                                 ,
+        .yaz_gecerli_c                                  (c0_yaz_gecerli_w)                                              ,
+        .io_gecerli                                     (io_gecerli)                                          ,
+        .io_ps                                          (io_ps)  
+    );
+
+    assign                                              bb_clka_w         =       clk_g                                 ;
+    
+
+    baslangic_bellegi basbel
+    (
+      .clk_g                                            (clk_g)                                                         ,
+      .rst_g                                            (rst_g)                                                         ,
+      
+      .adres_g                                          (basbel_addra_w)                                                ,
+      .buyruk_c                                         (basbel_douta_w)                                                ,
+      .ena_g                                            (basbel_ena_w)
+    );
+
+    assign                                              bb_ena_w        =       bat_bb_ena_w | ot_bb_ena_w              ;
+    assign                                              bb_addra_w      =       (bb_wea_w != 0) ?
+                                                                                bat_bb_addra_w : (ot_bb_addra_w  >> 2)  ;    
+
+    // la_data_in'i buraya sentez aracini kandirmak icin bagliyoruz.
+    buyruk_bellegi_sram bb
+    (
+        .addra                                          (bb_addra_w)                                                    ,
+        .clka                                           (bb_clka_w)                                                     ,
+        .dina                                           (bb_dina_w)                                                     ,
+        .douta                                          (bb_douta_w)                                                    ,
+        .ena                                            (bb_ena_w)                                                      ,
+        .wea                                            (bb_wea_w)                                                      ,
+
+        .csb0                                           (bb_csb0)                                                       ,
+        .web0                                           (bb_web0)                                                       ,
+        .wmask0                                         (bb_wmask0)                                                     ,
+        .addr0                                          (bb_addr0)                                                      ,
+        .din0                                           (bb_din0)                                                       ,
+        .dout0                                          (bb_dout0)                                                      ,
+
+        .csb1                                           (bb_csb1)                                                       ,
+        .addr1                                          (bb_addr1)                                                      ,
+        .dout1                                          (bb_dout1)                                          
+    );
+    
+    assign                                              vb_clka_w       =       clk_g                                   ;
+    
+    
+    veri_bellegi_sram vb
+    (
+        .addra                                          (vb_addra_w)                                                    ,
+        .clka                                           (vb_clka_w)                                                     ,
+        .dina                                           (vb_dina_w)                                                     ,
+        .douta                                          (vb_douta_w)                                                    ,
+        .ena                                            (vb_ena_w)                                                      ,
+        .wea                                            (vb_wea_w)                                                      ,
+        
+        .csb0                                           (vb_csb0)                                                       ,
+        .web0                                           (vb_web0)                                                       ,
+        .wmask0                                         (vb_wmask0)                                                     ,
+        .addr0                                          (vb_addr0)                                                      ,
+        .din0                                           (vb_din0)                                                       ,
+        .dout0                                          (vb_dout0)                                                      ,
+
+        .csb1                                           (vb_csb1)                                                       ,
+        .addr1                                          (vb_addr1)                                                      ,
+        .dout1                                          (vb_dout1)                                          
+    );
+    on_taraf ot
+    (
+        .clk_g                                          (clk_g)                                                         ,
+        .rst_g                                          (rst_g)                                                         ,
+                                                                                                               
+        .gc_hazir_g                                     (gc_hazir_c_w)                                                  ,
+        .bb_buy_gecerli_c                               (bb_buy_gecerli_g_w)                                            ,
+        .bb_buy_c                                       (bb_buy_g_w)                                                    ,
+        .bb_buy_ps_c                                    (bb_buy_ps_g_w)                                                 ,
+        
+        .bb_buy_istek_adres_g                            (bb_buy_istek_adres_c_w)                                       ,
+        .bb_buy_istek_g                                  (bb_buy_istek_c_w)                                             ,                 
+        
+        .bb_addra_c                                     (ot_bb_addra_w)                                                    ,                                       
+        .bb_douta_g                                     (bb_douta_w)                                                    ,                                      
+        .bb_ena_c                                       (ot_bb_ena_w)                                                      ,
+
+        .basbel_addra_c                                 (basbel_addra_w)                                                ,                                       
+        .basbel_douta_g                                 (basbel_douta_w)                                                ,  
+        .basbel_ena_c                                   (basbel_ena_w)                                                   
+    );
+    
+endmodule
+
+`default_nettype wire
diff --git a/verilog/rtl/cekirdek.v b/verilog/rtl/cekirdek.v
new file mode 100644
index 0000000..b22e795
--- /dev/null
+++ b/verilog/rtl/cekirdek.v
@@ -0,0 +1,287 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+`ifndef GL_RTL_SIM
+`include "sabitler.vh"
+`endif
+
+module cekirdek(
+    `ifdef BASYS3
+    output          [15:0]                              fpga_demo_signal                                     ,
+    `endif
+
+    `ifdef GL_RTL_SIM
+    output                                              io_gecerli                                     ,
+    output          [`PS_BIT-1:0]                       io_ps                                     ,
+    `endif
+
+    input                                               clk_g                                                ,
+    input                                               rst_g                                                ,
+    
+    //    Buyruk Bellegi <-> GetirCoz
+    input                                               bb_buy_gecerli_g                                     ,
+    input           [`BUYRUK_BIT-1:0]                   bb_buy_g                                             ,
+    input           [`BB_ADRES_BIT-1:0]                 bb_buy_ps_g                                          ,
+    output                                              gc_hazir_c                                           ,
+    output          [`BB_ADRES_BIT-1:0]                 bb_buy_istek_adres_c                                 ,
+    output                                              bb_buy_istek_c                                       ,
+    
+    //    Kesme Denetleyicisi <-> DDB
+    input                                               kesme_g                                              ,
+    input                                               zamanlayici_kesme_g                                  ,  
+
+    //    Veri bellegi <-> C0
+    //    TODO: bunlar baglanmadi  
+    input                                               oku_hazir_g                                          ,
+    input           [31:0]                              oku_veri_g                                           ,
+    input                                               oku_veri_gecerli_g                                   ,
+    input                                               yaz_hazir_g                                          ,
+                                                                                                               
+    output                                              oku_gecerli_c                                        ,
+    output          [31:0]                              yaz_veri_c                                           ,
+    output          [3:0]                               yaz_gecerli_c                                        ,
+    output          [31:0]                              adres_c
+
+    
+    );
+    
+    //==============================================================================
+    //                                  GETIR-COZ
+    //==============================================================================
+
+   (* dont_touch = "true" *) wire                                                bb_buy_gecerli_w                                      ;
+    wire            [`BUYRUK_BIT-1:0]                   bb_buy_w                                              ;
+   (* dont_touch = "true" *) wire            [`BB_ADRES_BIT-1:0]                 bb_buy_ps_w                                           ;
+    wire                                                gc_hazir_w                                            ;
+    wire            [`UIS_BIT-1:0]                      gc_uis_w                                              ;  
+    wire                                                gc_odd_w                                              ;
+    wire            [31:0]                              gc_odd_ps_w                                           ;
+
+    //==============================================================================
+    //                             YAZMAC-OKU-YURUT
+    //==============================================================================
+    
+   (* dont_touch = "true" *) wire            [31:0]                              oku_veri_w                                            ;
+   (* dont_touch = "true" *) wire                                                oku_veri_gecerli_w                                    ;
+    wire                                                yaz_hazir_w                                           ;
+    wire                                                oku_hazir_w                                           ;
+    wire            [31:0]                              yo_ky1_veri_w                                         ;
+    wire            [31:0]                              yo_ky2_veri_w                                         ;
+
+    wire            [`UIS_BIT-1:0]                      yoy_uis_w                                             ; 
+    (* dont_touch = "true" *) wire                                                oku_gecerli_w                                         ;
+    wire                                                gc_duraklat_w                                         ;
+    wire            [31:0]                              siradaki_ps_w                                         ;
+    wire            [`ODD_BIT-1:0]                      yoy_odd_kod_w                                         ; 
+    wire                                                yoy_odd_w                                             ;
+    // @ismail bellek islemlerinde oddye yol acan buyruklarina adresi lazim
+    wire            [31:0]                              yoy_odd_adres_w                                       ;
+    // @ismail odd ps degeri lazim
+    wire            [31:0]                              yoy_odd_ps_w                                          ;
+    wire                                                gc_bosalt_w                                           ;
+    wire            [31:0]                              yaz_veri_w                                            ;
+    wire            [3:0]                               yaz_gecerli_w                                         ;
+    (* dont_touch = "true" *) wire            [31:0]                              adres_w                                               ; 
+    wire            [4:0]                               yo_ky1_adres_w                                        ;
+    wire            [4:0]                               yo_ky2_adres_w                                        ;
+
+    //==============================================================================
+    //                              DENETIM-DURUM-BIRIMI
+    //==============================================================================   
+    wire                                                kesme_w                                               ;
+    wire                                                zamanlayici_kesme_w                                   ;
+    wire            [`ODD_BIT-1:0]                      odd_kod_w                                             ;
+    wire            [`PS_BIT-1:0]                       odd_ps_w                                              ;
+    wire            [`ADRES_BIT-1:0]                    odd_adres_w                                           ;
+                                                                                               
+    wire                                                ddy_oku_gecerli_w                                     ;
+    wire            [11:0]                              ddy_oku_adres_w                                       ;
+    wire                                                ddy_yaz_gecerli_w                                     ;
+    wire            [11:0]                              ddy_yaz_adres_w                                       ;
+    wire            [31:0]                              ddy_yaz_veri_w                                        ;
+    wire            [31:0]                              ddy_oku_veri_w                                        ;
+                                                                                                
+    wire                                                odd_ps_al_gecerli_w                                   ;
+    wire            [`PS_BIT-1:0]                       odd_ps_al_w                                           ;  
+
+    //==============================================================================
+    //                                  YAZMAC-YAZ
+    //==============================================================================
+
+    wire                                                yo_yaz_w                                              ;
+    wire            [`HY_BIT - 1: 0]                    yo_yaz_hedef_w                                        ;
+    wire            [`HY_DEGER_BIT - 1: 0]              yo_yaz_veri_w                                         ;      
+
+    //==============================================================================
+    //                                  GETIR-COZ                                   
+    //==============================================================================
+    
+    assign                                              bb_buy_gecerli_w      =       bb_buy_gecerli_g        ;                                        
+    assign                                              bb_buy_w              =       bb_buy_g                ;                                        
+    assign                                              bb_buy_ps_w           =       bb_buy_ps_g             ;                                        
+
+    assign                                              gc_hazir_c            =       gc_hazir_w              ;
+
+    getir_coz gc
+    (
+        .clk_g                                          (clk_g)                                               ,                                                        
+        .rst_g                                          (rst_g)                                               ,       
+        .bb_buy_gecerli_g                               (bb_buy_gecerli_w)                                    , 
+        .bb_buy_g                                       (bb_buy_w)                                            , 
+        .bb_buy_ps_g                                    (bb_buy_ps_w)                                         , 
+        .gc_hazir_c                                     (gc_hazir_w)                                          , 
+        .gc_duraklat_g                                  (gc_duraklat_w)                                       , 
+        .gc_bosalt_g                                    (gc_bosalt_w)                                         , 
+        .gc_uis_c                                       (gc_uis_w)                                            ,   
+        .gc_odd_c                                       (gc_odd_w)                                            ,           
+        .gc_odd_ps_c                                    (gc_odd_ps_w)                                                    
+    );
+
+    //==============================================================================
+    //                             YAZMAC-OKU-YURUT
+    //==============================================================================   
+
+    assign                                              oku_veri_w            =       oku_veri_g              ;
+    assign                                              oku_veri_gecerli_w    =       oku_veri_gecerli_g      ;
+    assign                                              yaz_hazir_w           =       yaz_hazir_g             ;
+    assign                                              oku_hazir_w           =       oku_hazir_g             ;
+
+    assign                                              adres_c               =       adres_w                 ;
+    assign                                              oku_gecerli_c         =       oku_gecerli_w           ;
+    assign                                              yaz_veri_c            =       yaz_veri_w              ;
+    assign                                              yaz_gecerli_c         =       yaz_gecerli_w           ;
+
+    
+    yazmac_oku_yurut yoy
+    (
+        .clk_g                                          (clk_g)                                               ,
+        .rst_g                                          (rst_g)                                               ,
+        .gc_uis_g                                       (gc_uis_w)                                            ,  
+        .oku_veri_g                                     (oku_veri_w)                                          ,
+        .oku_veri_gecerli_g                             (oku_veri_gecerli_w)                                  ,
+        .yo_ky1_veri_g                                  (yo_ky1_veri_w)                                       ,
+        .yo_ky2_veri_g                                  (yo_ky2_veri_w)                                       ,
+        .ddy_oku_veri_g                                 (ddy_oku_veri_w)                                      ,
+        .bellek_hazir_g                                 (yaz_hazir_w && oku_hazir_w)                          ,
+
+        .yoy_uis_c                                      (yoy_uis_w)                                           , 
+        .oku_gecerli_c                                  (oku_gecerli_w)                                       ,
+        .gc_duraklat_c                                  (gc_duraklat_w)                                       ,
+        .siradaki_ps_c                                  (siradaki_ps_w)                                       ,
+        .yoy_odd_kod_c                                  (yoy_odd_kod_w)                                       , 
+        .yoy_odd_ps_c                                   (yoy_odd_ps_w)                                        , 
+        .yoy_odd_adres_c                                (yoy_odd_adres_w)                                     , 
+        .yoy_odd_c                                      (yoy_odd_w)                                           ,
+        .gc_bosalt_c                                    (gc_bosalt_w)                                         ,
+        .yaz_veri_c                                     (yaz_veri_w)                                          ,
+        .yaz_veri_maske_c                               (yaz_gecerli_w)                                       ,
+        .adres_c                                        (adres_w)                                             , 
+        .yo_ky1_adres_c                                 (yo_ky1_adres_w)                                      ,
+        .yo_ky2_adres_c                                 (yo_ky2_adres_w)                                      ,
+        .ddy_oku_adres_c                                (ddy_oku_adres_w)                                     ,                                                 
+        .ddy_oku_gecerli_c                              (ddy_oku_gecerli_w)                     
+    );
+ 
+    //==============================================================================
+    //                              DENETIM-DURUM-BIRIMI
+    //==============================================================================  
+
+    assign                                              kesme_w               =       kesme_g                 ;
+    assign                                              zamanlayici_kesme_w   =       zamanlayici_kesme_g     ;
+    
+    assign                                              odd_kod_w             =       yoy_odd_kod_w           ;
+                                        
+    assign                                              odd_ps_w              =       yoy_odd_w               ?
+                                                            yoy_odd_ps_w      :       gc_odd_ps_w             ;
+    
+    assign                                              odd_adres_w          =       yoy_odd_adres_w         ;
+
+    assign                                              bb_buy_istek_adres_c  =       odd_ps_al_gecerli_w     ?
+                                                            odd_ps_al_w       :       siradaki_ps_w           ;
+    
+    assign                                              bb_buy_istek_c        =       odd_ps_al_gecerli_w     |
+                                                                                      gc_bosalt_w             ; 
+                                        
+    
+    denetim_durum_birimi ddb
+    (
+        .clk_g                                          (clk_g)                                               ,
+        .rst_g                                          (rst_g)                                               ,
+        
+        .kesme_g                                        (kesme_w)                                             ,
+        .zamanlayici_kesme_g                            (zamanlayici_kesme_w)                                 ,
+        .gc_odd_g                                       (!yoy_odd_w && gc_odd_w)                              ,
+        .yoy_odd_g                                      (yoy_odd_w)                                           ,
+        .odd_kod_g                                      (odd_kod_w)                                           ,
+        .odd_ps_g                                       (odd_ps_w)                                            ,
+        .odd_adres_g                                    (odd_adres_w)                                         ,
+        
+        .oku_gecerli_g                                  (ddy_oku_gecerli_w)                                   ,
+        .oku_adres_g                                    (ddy_oku_adres_w)                                     ,
+        .yaz_gecerli_g                                  (ddy_yaz_gecerli_w)                                   ,
+        .yaz_adres_g                                    (ddy_yaz_adres_w)                                     ,
+        .yaz_veri_g                                     (ddy_yaz_veri_w)                                      ,
+        .oku_veri_c                                     (ddy_oku_veri_w)                                      ,
+        
+        .odd_ps_al_gecerli_c                            (odd_ps_al_gecerli_w)                                 ,
+        .odd_ps_al_c                                    (odd_ps_al_w)                   
+    );   
+
+
+    //==============================================================================
+    //                                  YAZMAC-YAZ
+    //==============================================================================
+    
+    yazmac_yaz yy
+    (
+        `ifdef GL_RTL_SIM
+        .io_gecerli                                     (io_gecerli)                                               ,
+        .io_ps                                          (io_ps)                                               ,
+        `endif
+
+        .clk_g                                          (clk_g)                                               ,
+        .yoy_uis_g                                      (yoy_uis_w)                                           ,
+
+        .yo_yaz_c                                       (yo_yaz_w)                                            ,
+        .yo_yaz_hedef_c                                 (yo_yaz_hedef_w)                                      ,
+        .yo_yaz_veri_c                                  (yo_yaz_veri_w)                                       ,
+        
+        .ddy_yaz_c                                      (ddy_yaz_gecerli_w)                                   ,
+        .ddy_yaz_hedef_c                                (ddy_yaz_adres_w)                                     ,
+        .ddy_yaz_veri_c                                 (ddy_yaz_veri_w)                                       
+    );
+
+    //==============================================================================
+    //                                  YAZMAC-OBEGI
+    //==============================================================================
+
+    yazmac_obegi yo     (
+        `ifdef BASYS3
+        .fpga_demo_signal                               (fpga_demo_signal)                                    ,
+        `endif
+        
+        .clk_g                                          (clk_g)                                               ,
+        .rst_g                                          (rst_g)                                               ,
+        .ky1_adres_g                                    (yo_ky1_adres_w)                                      ,
+        .ky2_adres_g                                    (yo_ky2_adres_w)                                      ,
+        .hy_adres_g                                     (yo_yaz_hedef_w)                                      , 
+        .hy_deger_g                                     (yo_yaz_veri_w)                                       ,
+        .yaz_g                                          (yo_yaz_w)                                            ,
+        .ky1_deger_c                                    (yo_ky1_veri_w)                                       ,
+        .ky2_deger_c                                    (yo_ky2_veri_w)
+    );
+                         
+endmodule
diff --git a/verilog/rtl/dallanma_birimi.v b/verilog/rtl/dallanma_birimi.v
new file mode 100644
index 0000000..2dcd343
--- /dev/null
+++ b/verilog/rtl/dallanma_birimi.v
@@ -0,0 +1,75 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+`ifndef GL_RTL_SIM
+`include "mikroislem.vh"
+`endif
+
+module dallanma_birimi(
+    input         [7:0]     islev_kodu_g                                   , // ?slev tipi girisi
+    input         [31:0]    ps_g                                           , //Program sayaci girisi
+    input         [31:0]    islec1_g                                       , //?lk islec
+    input         [31:0]    islec2_g                                       , //?kinci islec
+    input         [31:0]    anlik_g                                        ,  // Dallanma buyruklari icin anlik girisi
+    output reg    [31:0]    jal_sonuc_c                                    , // JAL ve JALR buyruklari icin hedef yazmaci degeri
+    output reg              dallanma_sonuc_c                               , //Dallanma buyruklari icin atliyorsa 1'b1, atlamiyorsa 1'b0 veren cikis
+    output reg    [31:0]    ps_c                                             //Guncellenmis program sayaci cikisi
+    );
+    
+    always@* begin
+        ps_c              = 0        ;
+        dallanma_sonuc_c  = 0        ;
+        jal_sonuc_c       = 0        ;
+        case(islev_kodu_g)
+            `JAL: begin
+                jal_sonuc_c = ps_g + 3'b100                                ;
+                ps_c        = ps_g + $signed(islec2_g)                     ; 
+            end
+            `JALR: begin
+            //ayrica risc-v'te anlik degeri 2'nin kati yapmak icin en anlamsiz bitin 0 
+            //yapilma olayi kodlanmamis
+                jal_sonuc_c      = ps_g + 3'b100; 
+                //burada iki islece de signed koydum ama emin degilim
+                ps_c             =  ($signed(islec1_g) +  $signed(islec2_g)) & -2 ;
+            end
+            `BEQ: begin
+                dallanma_sonuc_c =  $signed(islec1_g) ==  $signed(islec2_g);
+                ps_c             = ps_g +  $signed(anlik_g)                ;
+            end 
+            `BNE: begin
+                dallanma_sonuc_c =  $signed(islec1_g) != $signed(islec2_g) ;
+                ps_c             = ps_g +  $signed(anlik_g)                ;
+            end 
+            `BLT: begin
+                dallanma_sonuc_c = ($signed(islec1_g) < $signed(islec2_g)) ;
+                ps_c             = ps_g +  $signed(anlik_g)                ;
+            end 
+            `BLTU: begin
+                dallanma_sonuc_c =  islec1_g < islec2_g                    ;
+                ps_c             = ps_g +  $signed(anlik_g)                ;
+            end 
+            `BGE: begin
+                dallanma_sonuc_c = ($signed(islec1_g) >= $signed(islec2_g)); 
+                ps_c             = ps_g +  $signed(anlik_g)                ;
+            end 
+            `BGEU: begin
+                dallanma_sonuc_c =  islec1_g >= islec2_g                   ;
+                ps_c             = ps_g +  $signed(anlik_g)                ;
+            end 
+        endcase
+
+    end
+endmodule
diff --git a/verilog/rtl/denetim_durum_birimi.v b/verilog/rtl/denetim_durum_birimi.v
new file mode 100644
index 0000000..62e2bf0
--- /dev/null
+++ b/verilog/rtl/denetim_durum_birimi.v
@@ -0,0 +1,211 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps 
+
+`ifndef GL_RTL_SIM
+`include "sabitler.vh"
+`endif
+
+module denetim_durum_birimi
+    (
+    input                               clk_g                                                               ,
+    input                               rst_g                                                               ,
+
+    // YOY, GC, Sistem <-> DDB
+    input                               kesme_g                                                             ,
+    input                               zamanlayici_kesme_g                                                 ,
+    input                               gc_odd_g                                                            ,
+    input                               yoy_odd_g                                                           ,
+    input        [`ODD_BIT-1:0]         odd_kod_g                                                           ,
+    input        [`PS_BIT-1:0]          odd_ps_g                                                            ,
+    input        [`ADRES_BIT-1:0]       odd_adres_g                                                         ,
+
+    // YOY <-> Denetim Durum Yazmaclari
+    input                               oku_gecerli_g                                                       ,
+    input        [11:0]                 oku_adres_g                                                         ,
+    input                               yaz_gecerli_g                                                       ,
+    input        [11:0]                 yaz_adres_g                                                         ,
+    input        [31:0]                 yaz_veri_g                                                          ,
+    output       [31:0]                 oku_veri_c                                                          ,
+
+    // DDB <-> Buyruk Bellegi
+    output                              odd_ps_al_gecerli_c                                                 ,
+    output       [`PS_BIT-1:0]          odd_ps_al_c                                                          
+    );
+
+    // ===================================================================================================
+    // ========================================= CSR YAZMACLARI ==========================================
+
+    // TODO, bunlar duzgunce doldurulabilir
+    // hartid == 0, cunku tek bir hardware threadimiz (tek cekirdek/tek thread) var
+    // ================================== INFORMATION REGISTERS ===========================================
+    wire          [31:0]                mvendorid_w         =       32'h00000000                            ;
+    wire          [31:0]                marchid_w           =       32'h00000000                            ;
+    wire          [31:0]                mimpid_w            =       32'h00000000                            ;
+    wire          [31:0]                mhartid_w           =       32'h00000000                            ;
+
+    // ======================================= TRAP SETUP ================================================
+    // MISA yazmacini read only bir sekilde implement ediyoruz.
+    // Aslinda bu yazmac WARL, write-any-read-legal, yani herhangi bir deger yazilabilir
+    // ancak okunan degerler legal olmali. Yazma yapildiginda exception'a yol acmayacak
+    // read-only bir yazmac bu tanimlamaya uyuyor.
+    wire          [31:0]                misa_w = 32'b010000_000001000000X100100000000; // TODO X: User-level interrupts
+    // Bunlar 0, trap handling isini usera birakmayacagiz.
+    reg           [31:0]                medeleg_w           =       32'b00000000                            ;
+    reg           [31:0]                mideleg_w           =       32'h00000000                            ;
+    // XS & FS = 0 (FP ve additional state gerektiren extensionlarimiz yok)
+    // SD = 0, yukaridakilerden oturu
+    // SIE, SPIE, UIE, UPIE = 0
+    // MPIE = machine previous interrupt enable? interrupt trapi oldugunda: MPIE = MIE, MIE = 0, MPP = M
+    // MPP = machine previous privilege mode?
+    // MRET calisinca: MIE = MPIE, MPIE = 1, MPP = M
+
+    reg           [31:0]                mstatus_r, mstatus_ns_r                                             ;
+    // machine interrupt enable/pending registerlari
+    //  bit3: software interrupt e/p
+    //  bit7: timer interrupt e/p
+    //  bit11: external interrupt e/p
+    // mie ve mip'te ayni iki bit set ise (yani interrupt enable ve interrupt geldi) interrupt handle edilir
+    reg           [31:0]                mie_r, mie_ns_r                                                     ;
+    reg           [31:0]                mip_r, mip_ns_r                                                     ;
+    // Trap vector. Bunu bootloader dolduracak.
+    reg           [31:0]                mtvec_r, mtvec_ns_r                                                 ;
+    reg           [31:0]                mcounteren_r, mcounteren_ns_r                                       ;
+    // ===================================== TRAP HANDLING ===============================================
+    // Galiba context switch yapildiginda context switchlenen verinin bellekteki adresine isaret ediyor
+    reg           [31:0]                mscratch_r, mscratch_ns_r                                           ;
+    // trap'a yol acan buyrugun program sayaci
+    reg           [31:0]                mepc_r, mepc_ns_r                                                   ;
+    reg           [31:0]                mcause_r, mcause_ns_r                                               ;
+    // load/store/if faultlarinda, page-faultlarda, misaligned load/storelarda sanal adresi kaydeden yazmac
+    reg           [31:0]                mtval_r, mtval_ns_r                                                 ;
+    // ==================================== COUNTERS/TIMERS ==============================================
+    reg           [31:0]                mcycle_r, mcycle_ns_r                                               ;
+    reg           [31:0]                minstret_r, minstret_ns_r                                           ;
+    
+    // ===================================================================================================
+    // ====================================== DURUM DEGISKENLERI =========================================    
+
+    reg                                 odd_ps_al_gecerli_r                                                 ;
+    reg           [31:0]                oku_veri_r                                                          ;
+
+    // ===================================================================================================
+    // ========================================MODUL TANIMLAMASI==========================================
+
+
+    assign                              odd_ps_al_c             = odd_kod_g == `KDD_MRET ? mepc_r : mtvec_r ;
+    assign                              odd_ps_al_gecerli_c     = odd_ps_al_gecerli_r                       ;
+    assign                              oku_veri_c              = oku_veri_r                                ;
+
+
+    // TODOlar (oncelige gore): 
+    //      - interruptlari handle et
+    //      - privilege duzeyini tutan register priv-spec'te belirtilmemis
+    //              bunu yine de tutmamiz gerekiyor mu?
+    //      - instret'i fonksiyonel hale getir
+    always @* begin
+        odd_ps_al_gecerli_r            =               0                                                    ;
+        mie_ns_r                       =               mie_r                                                ;
+        mip_ns_r                       =               mip_r                                                ;
+        mtvec_ns_r                     =               mtvec_r                                              ;
+        mcounteren_ns_r                =               mcounteren_r                                         ;
+        mscratch_ns_r                  =               mscratch_r                                           ;
+        mepc_ns_r                      =               mepc_r                                               ;
+        mcause_ns_r                    =               mcause_r                                             ;
+        mtval_ns_r                     =               mtval_r                                              ;
+        mcycle_ns_r                    =               mcycle_r + 1'b1                                      ;
+        minstret_ns_r                  =               minstret_r                                           ;
+        mstatus_ns_r                   =               mstatus_r                                            ;
+        oku_veri_r                     =               0                                                    ;
+  
+        // Kural disi durum denetimi
+        if (gc_odd_g) begin
+            mepc_ns_r                  =               odd_ps_g                                             ;
+            mtval_ns_r                 =               32'b0                                                ;
+            mcause_ns_r                =               `KDD_YB                                              ;
+            odd_ps_al_gecerli_r        =               `HIGH                                                ;
+        end
+        else if (yoy_odd_g) begin
+            if (odd_kod_g == `KDD_MRET) begin
+                mstatus_ns_r[`MSTATUS_MIE]          =        mstatus_r[`MSTATUS_MPIE]                       ;
+                mstatus_ns_r[`MSTATUS_MPIE]         =        `HIGH                                          ;
+                mstatus_ns_r[`MSTATUS_MPP +: 2]     =        `PRIV_MACHINE                                  ;
+            end 
+            mepc_ns_r                  =               odd_ps_g                                             ;
+            mtval_ns_r                 =               odd_adres_g                                          ;
+            mcause_ns_r                =               odd_kod_g                                            ;
+            odd_ps_al_gecerli_r        =               `HIGH                                                ;
+        end
+
+        // Okuma islemi
+        if(oku_gecerli_g) begin  
+            case (oku_adres_g)
+                `DDY_MSCRATCH: oku_veri_r       =       mscratch_r                                          ;
+                `DDY_MEPC:     oku_veri_r       =       mepc_r                                              ;
+                `DDY_MTVEC:    oku_veri_r       =       mtvec_r                                             ;
+                `DDY_MCAUSE:   oku_veri_r       =       mcause_r                                            ;
+                `DDY_MTVAL:    oku_veri_r       =       mtval_r                                             ;
+                `DDY_MSTATUS:  oku_veri_r       =       mstatus_r                                           ;
+                `DDY_MIP:      oku_veri_r       =       mip_r                                               ;
+                `DDY_MIE:      oku_veri_r       =       mie_r                                               ;
+                `DDY_MCYCLE:   oku_veri_r       =       mcycle_r                                            ;
+                `DDY_MTIME:    oku_veri_r       =       minstret_r                                          ;  
+            endcase     
+        end             
+        
+        // Yazma islemi     
+        if(yaz_gecerli_g) begin     
+            case (yaz_adres_g)      
+                `DDY_MSCRATCH: mscratch_ns_r    =       yaz_veri_g                                          ;
+                `DDY_MEPC:     mepc_ns_r        =       yaz_veri_g                                          ;
+                `DDY_MTVEC:    mtvec_ns_r       =       yaz_veri_g                                          ;
+                `DDY_MCAUSE:   mcause_ns_r      =       yaz_veri_g                                          ;
+                `DDY_MTVAL:    mtval_ns_r       =       yaz_veri_g                                          ;
+                `DDY_MSTATUS:  mstatus_ns_r     =       yaz_veri_g                                          ;
+                `DDY_MIP:      mip_ns_r         =       yaz_veri_g                                          ;
+                `DDY_MIE:      mie_ns_r         =       yaz_veri_g                                          ;           
+            endcase
+        end
+
+    end
+
+    always @ (posedge clk_g) begin  
+        if(rst_g) begin
+            mepc_r                              <=      0                                                   ;
+            mstatus_r                           <=      0                                                   ;
+            mcause_r                            <=      0                                                   ;
+            mtval_r                             <=      0                                                   ;
+            mtvec_r                             <=      0                                                   ;
+            mip_r                               <=      0                                                   ;
+            mie_r                               <=      0                                                   ;
+            mcycle_r                            <=      0                                                   ;
+            minstret_r                          <=      0                                                   ;
+            mscratch_r                          <=      0                                                   ;
+        end
+        else begin
+            mepc_r                              <=      mepc_ns_r                                           ;
+            mstatus_r                           <=      mstatus_ns_r                                        ;
+            mcause_r                            <=      mcause_ns_r                                         ;
+            mtval_r                             <=      mtval_ns_r                                          ;
+            mtvec_r                             <=      mtvec_ns_r                                          ;
+            mip_r                               <=      mip_ns_r                                            ;
+            mie_r                               <=      mie_ns_r                                            ;
+            mcycle_r                            <=      mcycle_ns_r                                         ;
+            minstret_r                          <=      minstret_ns_r                                       ;
+            mscratch_r                          <=      mscratch_ns_r                                       ;
+        end
+    end
+
+endmodule
\ No newline at end of file
diff --git a/verilog/rtl/getir_coz.v b/verilog/rtl/getir_coz.v
new file mode 100644
index 0000000..1c9ec36
--- /dev/null
+++ b/verilog/rtl/getir_coz.v
@@ -0,0 +1,385 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+`ifndef GL_RTL_SIM
+`include "sabitler.vh"
+`include "mikroislem.vh"
+`endif
+
+module getir_coz
+    (
+    input                               clk_g                                                               ,
+    input                               rst_g                                                               ,
+
+    // Buyruk bellegi <-> GetirCoz
+    input                               bb_buy_gecerli_g                                                    ,
+    input        [`BUYRUK_BIT-1:0]      bb_buy_g                                                            ,
+    input        [`BB_ADRES_BIT-1:0]    bb_buy_ps_g                                                         ,
+    output                              gc_hazir_c                                                          ,
+
+    // GetirCoz <-> YazmacOkuYurut
+    input                               gc_duraklat_g                                                       ,
+    input                               gc_bosalt_g                                                         ,
+    output       [`UIS_BIT-1:0]         gc_uis_c                                                            ,  
+
+    // GetirCoz <-> DDY birimi
+    output                              gc_odd_c                                                            ,
+    output      [`BB_ADRES_BIT-1:0]     gc_odd_ps_c                                                                      
+    );
+
+    // ===================================================================================================
+    // ========================================MODUL TANIMLAMASI==========================================
+    // ===================================================================================================
+
+    // Getirilen buyruk
+    wire         [`BUYRUK_BIT-1:0]       buyruk_w          = bb_buy_g                                       ;
+
+    // Buyruk cozmek icin gereken sinyaller
+    wire         [`BUY_ISKODU_BIT-1:0]   iskodu_w          = buyruk_w[`BUY_ISKODU +: `BUY_ISKODU_BIT]       ;
+    wire         [`BUY_HY_BIT-1:0]       hy_w              = buyruk_w[`BUY_HY +: `BUY_HY_BIT]               ;
+    wire         [`BUY_KY1_BIT-1:0]      ky1_w             = buyruk_w[`BUY_KY1 +: `BUY_KY1_BIT]             ;
+    wire         [`BUY_KY2_BIT-1:0]      ky2_w             = buyruk_w[`BUY_KY2 +: `BUY_KY2_BIT]             ;
+    wire         [`BUY_F7_BIT-1:0]       f7_w              = buyruk_w[`BUY_F7 +: `BUY_F7_BIT]               ;
+    wire         [`BUY_F3_BIT-1:0]       f3_w              = buyruk_w[`BUY_F3 +: `BUY_F3_BIT]               ;
+
+    // Mikroislem sinyalleri
+    wire                                     gecerli_w                                                      ;
+    reg          [`YURUT_KODU_BIT - 1: 0]    yurut_kodu_r                                                   ;
+    reg          [`ISLEV_KODU_BIT - 1: 0]    islev_kodu_r                                                   ;
+    reg          [`IS1_SEC_BIT - 1: 0]       is1_sec_r                                                      ;
+    reg          [`IS2_SEC_BIT - 1: 0]       is2_sec_r                                                      ;
+    reg          [`ANLIK_DEGER_BIT - 1: 0]   anlik_deger_r                                                  ; 
+    reg                                      yukle_buyrugu_r                                                ;
+    reg                                      kaydet_buyrugu_r                                               ;
+    reg                                      fence_buyrugu_r                                                ;
+    reg                                      bellek_turu_w_r                                                ;
+    reg                                      bellek_turu_hw_r                                               ;
+    reg                                      bellek_isaretli_r                                              ;
+    reg                                      bellek_turu_b_r                                                ;
+    reg          [`PS_BIT - 1: 0]            ps_r                                                           ;
+
+    reg          [`UIS_BIT - 1: 0]           gc_uis_r                                                       ;
+    reg          [`UIS_BIT - 1: 0]           yazmac_gc_uis_r                                                ;
+
+    // Comb. devrede hesaplanan sinyaller
+    reg          [31:0]                      i_anlik                                                        ;
+    reg          [31:0]                      u_anlik                                                        ;
+    reg          [31:0]                      j_anlik                                                        ;
+    reg          [31:0]                      s_anlik                                                        ;
+    reg          [31:0]                      b_anlik                                                        ;
+
+    wire                                     yanlis_buyruk_w                                                ;
+
+    // denetim sayilabilecek sinyaller
+    assign                                  gecerli_w               =       bb_buy_gecerli_g && ~gc_bosalt_g;
+    assign                                  yanlis_buyruk_w         =       islev_kodu_r == 0               ;
+    assign                                  gc_hazir_c              =       !gc_duraklat_g;
+    assign                                  gc_uis_c                =       yazmac_gc_uis_r                 ;    
+    assign                                  gc_odd_c                =       gecerli_w && yanlis_buyruk_w    ;
+    assign                                  gc_odd_ps_c             =       ps_r                            ;
+
+    // Cozmek icin kocaman bir if else/switch agaci koyacagiz.
+    // Ataberk: Raven-SoC'deki kod da bu (^) sekilde.
+    always @* begin
+        gc_uis_r                        =               yazmac_gc_uis_r                                     ;
+        // Tum reglerin degerlerini belirle, latch olusturmak istemiyoruz.
+        //gecerli_w                       =               0                                                   ;
+        yurut_kodu_r                    =               0                                                   ;
+        islev_kodu_r                    =               0                                                   ;
+        is1_sec_r                       =               0                                                   ;
+        is2_sec_r                       =               0                                                   ;
+        anlik_deger_r                   =               0                                                   ;
+        yukle_buyrugu_r                 =               0                                                   ;
+        kaydet_buyrugu_r                =               0                                                   ;
+        fence_buyrugu_r                 =               0                                                   ;
+        bellek_turu_w_r                 =               0                                                   ;
+        bellek_turu_hw_r                =               0                                                   ;
+        bellek_turu_b_r                 =               0                                                   ;
+        bellek_isaretli_r               =               0                                                   ;
+        ps_r                            =               bb_buy_ps_g                                         ;
+
+        
+
+        // -------------------------- anlik deger hesapla --------------------------
+        // TODO: asagidakileri kontrol et
+        i_anlik = buyruk_w[`I_ANLIK_ISARET] ? {{20{1'b1}}, 
+                                                buyruk_w[`I_ANLIK+:`I_ANLIK_BIT]} 
+                                            : 
+                                              {{20{1'b0}},
+                                                buyruk_w[`I_ANLIK+:`I_ANLIK_BIT]};
+        u_anlik = buyruk_w[`U_ANLIK+:`U_ANLIK_BIT];
+        
+        // J, S ve B tipi anliklar icin tum indisleri `define'lamak kafa
+        // karistirici olabilir, o yuzden yoklar
+        // Asagidaki bit alanlari icin riscv tanimlamasina bakabilirsiniz.
+        j_anlik = { (buyruk_w[19] ? {11{1'b1}} : {11{1'b0}}),
+                    buyruk_w[19], 
+                    buyruk_w[12+:8],
+                    buyruk_w[20],
+                    buyruk_w[21+:10],
+                    1'b0
+                  };
+        s_anlik = { (buyruk_w[31] ? {20{1'b1}} : {20{1'b0}}),
+                    buyruk_w[25+:7],
+                    buyruk_w[7+:5]
+                  };
+        b_anlik = { (buyruk_w[31] ? {19{1'b1}} : {19{1'b0}}),
+                    buyruk_w[31],
+                    buyruk_w[7],
+                    buyruk_w[25+:6],
+                    buyruk_w[8+:4],
+                    1'b0
+                  };
+        
+        // --------------------------- islec sec -----------------------------------
+        if (iskodu_w == 7'h3 || iskodu_w == 7'h67 || iskodu_w == 7'h13) begin
+            is1_sec_r = `IS1_SEC_KY1;
+            is2_sec_r = `IS2_SEC_AD;
+            anlik_deger_r = i_anlik;
+        end
+        
+        if (iskodu_w == 7'h37) begin
+            is1_sec_r = `IS1_SEC_0;
+            is2_sec_r = `IS2_SEC_AD;
+            anlik_deger_r = u_anlik;
+        end
+        
+        if (iskodu_w == 7'h17) begin
+            is1_sec_r = `IS1_SEC_PS;
+            is2_sec_r = `IS2_SEC_AD;
+            anlik_deger_r = u_anlik;
+        end
+
+        if (iskodu_w == 7'h6f) begin
+            is1_sec_r = `IS1_SEC_PS;
+            is2_sec_r = `IS2_SEC_AD;
+            anlik_deger_r = j_anlik;
+        end
+
+        if (iskodu_w == 7'h63) begin
+            is1_sec_r = `IS1_SEC_KY1;
+            is2_sec_r = `IS2_SEC_KY2;
+            anlik_deger_r = b_anlik;
+        end
+
+        if (iskodu_w == 7'h23) begin
+            is1_sec_r = `IS1_SEC_KY1;
+            is2_sec_r = `IS2_SEC_KY2;
+            anlik_deger_r = s_anlik;
+        end
+
+        if (iskodu_w == 7'h33) begin
+            is1_sec_r = `IS1_SEC_KY1;
+            is2_sec_r = `IS2_SEC_KY2;
+        end
+        
+        if (iskodu_w == 7'h73) begin
+            is1_sec_r = `IS1_SEC_KY1;
+            is2_sec_r = `IS2_SEC_AD;
+        end
+        
+        // -------------------- yurut ve islev kodu belirle ------------------------
+        // TODO: hint parallel case
+        case (iskodu_w)
+            7'h37: begin // LUI 
+                yurut_kodu_r = `YURUT_KODU_AMB;
+                islev_kodu_r = `LUI;
+            end 
+            7'h17: begin // AUIPC
+                yurut_kodu_r = `YURUT_KODU_AMB;
+                islev_kodu_r = `AUIPC;            
+            end
+            7'h13: begin
+                yurut_kodu_r = `YURUT_KODU_AMB;
+                case (f3_w)
+                3'h0: islev_kodu_r = `ADD; 
+                3'h1: islev_kodu_r = `SLL;
+                3'h2: islev_kodu_r = `SLT;
+                3'h3: islev_kodu_r = `SLTU;
+                3'h4: islev_kodu_r = `XOR;
+                3'h5: islev_kodu_r = f7_w[5] ? `SRA : `SRL; 
+                3'h6: islev_kodu_r = `OR;
+                3'h7: islev_kodu_r = `AND;
+                endcase
+            end
+            7'h33: begin
+                if (f7_w[0]) begin
+                    yurut_kodu_r = f3_w < 3'h4 ? `YURUT_KODU_TCB : `YURUT_KODU_TBB;
+                    case (f3_w)
+                    3'h0: islev_kodu_r = `MUL; 
+                    3'h1: islev_kodu_r = `MULH;
+                    3'h2: islev_kodu_r = `MULHSU;
+                    3'h3: islev_kodu_r = `MULHU;
+                    3'h4: islev_kodu_r = `DIV;
+                    3'h5: islev_kodu_r = `DIVU; 
+                    3'h6: islev_kodu_r = `REM;
+                    3'h7: islev_kodu_r = `REMU;
+                    endcase                
+                end
+                else begin
+                    yurut_kodu_r = `YURUT_KODU_AMB;
+                    case (f3_w)
+                    3'h0: islev_kodu_r = f7_w[5] ? `SUB : `ADD; 
+                    3'h1: islev_kodu_r = `SLL;
+                    3'h2: islev_kodu_r = `SLT;
+                    3'h3: islev_kodu_r = `SLTU;
+                    3'h4: islev_kodu_r = `XOR;
+                    3'h5: islev_kodu_r = f7_w[5] ? `SRA : `SRL; 
+                    3'h6: islev_kodu_r = `OR;
+                    3'h7: islev_kodu_r = `AND;
+                    endcase                
+                end
+            end
+            7'h6f: begin
+                yurut_kodu_r = `YURUT_KODU_DB;
+                islev_kodu_r = `JAL;
+            end
+            7'h67: begin
+                yurut_kodu_r = `YURUT_KODU_DB;
+                islev_kodu_r = `JALR;
+            end
+            7'h63: begin
+                yurut_kodu_r = `YURUT_KODU_DB;
+                case (f3_w)
+                3'h0: islev_kodu_r = `BEQ; 
+                3'h1: islev_kodu_r = `BNE;
+                3'h4: islev_kodu_r = `BLT;
+                3'h5: islev_kodu_r = `BGE; 
+                3'h6: islev_kodu_r = `BLTU;
+                3'h7: islev_kodu_r = `BGEU;
+                endcase
+            end
+            7'h03: begin
+                yurut_kodu_r = `YURUT_KODU_BIB;
+                yukle_buyrugu_r = 1'b1;
+                case (f3_w)
+                3'h0: begin
+                islev_kodu_r = `LB;
+                bellek_turu_b_r = 1'b1;
+                bellek_isaretli_r = 1'b1; 
+                end
+                3'h1: begin
+                islev_kodu_r = `LH;
+                bellek_turu_hw_r = 1'b1;
+                bellek_isaretli_r = 1'b1; 
+                end
+                3'h2: begin
+                islev_kodu_r = `LW;
+                bellek_turu_w_r = 1'b1;
+                bellek_isaretli_r = 1'b1; 
+                end
+                3'h4: begin
+                islev_kodu_r = `LBU;
+                bellek_turu_b_r = 1'b1;
+                end
+                3'h5: begin
+                islev_kodu_r = `LHU;
+                bellek_turu_hw_r = 1'b1;
+                end
+                endcase           
+            end
+            7'h23: begin
+                yurut_kodu_r = `YURUT_KODU_BIB;
+                kaydet_buyrugu_r = 1'b1;
+                case (f3_w)
+                3'h0: begin
+                islev_kodu_r = `SB;
+                bellek_turu_b_r = 1'b1;
+                end
+                3'h1: begin
+                islev_kodu_r = `SH;
+                bellek_turu_hw_r = 1'b1;
+                end
+                3'h2: begin
+                islev_kodu_r = `SW;
+                bellek_turu_w_r = 1'b1;
+                end
+                endcase           
+            end    
+            7'h0f: begin
+                yurut_kodu_r = `YURUT_KODU_BIB;
+                fence_buyrugu_r = 1'b1;
+                if (f3_w == 0) islev_kodu_r = `FENCE;
+            end  
+            7'h73: begin
+                // CSR
+                yurut_kodu_r = `YURUT_KODU_CSR;
+                if (f3_w == 0) begin
+                    yurut_kodu_r = `YURUT_KODU_SISTEM;
+                    if (ky2_w == 'h1) islev_kodu_r = `EBREAK;
+                    if (ky2_w == 'h0) islev_kodu_r = `ECALL;
+                    if (ky2_w == 'h2) begin 
+                        if (f7_w == 'h0) islev_kodu_r = `URET;
+                        if (f7_w == 'h18) islev_kodu_r = `MRET;
+                    end
+                end
+                if (f3_w == 'h1)  islev_kodu_r = `CSRRW;
+                if (f3_w == 'h2)  islev_kodu_r = `CSRRS;
+                if (f3_w == 'h3)  islev_kodu_r = `CSRRC;
+                if (f3_w == 'h5)  islev_kodu_r = `CSRRWI;
+                if (f3_w == 'h6)  islev_kodu_r = `CSRRSI;
+                if (f3_w == 'h7)  islev_kodu_r = `CSRRCI;
+            end        
+        endcase
+
+        // ------------------------------ denetim ----------------------------------
+        // ancak ve ancak islev kodu belirlenmediyse
+        // yanlis buyruk oddsi olusur
+        
+        
+        
+        gc_uis_r[`GECERLI]                              = gecerli_w  && ~yanlis_buyruk_w;
+        // TODO: if icinde olmasi davranisi degistiriyor mu?
+        if (gecerli_w) begin
+            // mikroislem sinyallerini bagla
+            // TODO: DDB alanlarini doldur
+            gc_uis_r[`YURUT_KODU+:`YURUT_KODU_BIT]      = yurut_kodu_r;
+            gc_uis_r[`ISLEV_KODU+:`ISLEV_KODU_BIT]      = islev_kodu_r;
+            gc_uis_r[`IS1_SEC+:`IS1_SEC_BIT]            = is1_sec_r;
+            gc_uis_r[`IS2_SEC+:`IS2_SEC_BIT]            = is2_sec_r;
+            gc_uis_r[`ANLIK_DEGER+:`ANLIK_DEGER_BIT]    = anlik_deger_r;
+            gc_uis_r[`KY1+:`KY1_BIT]                    = ky1_w;
+            gc_uis_r[`KY2+:`KY2_BIT]                    = ky2_w;
+            gc_uis_r[`YUKLE_BUYRUGU]                    = yukle_buyrugu_r;
+            gc_uis_r[`KAYDET_BUYRUGU]                   = kaydet_buyrugu_r;
+            gc_uis_r[`FENCE_BUYRUGU]                    = fence_buyrugu_r;
+            gc_uis_r[`BELLEK_TURU_W]                    = bellek_turu_w_r;
+            gc_uis_r[`BELLEK_TURU_HW]                   = bellek_turu_hw_r;
+            gc_uis_r[`BELLEK_TURU_B]                    = bellek_turu_b_r;
+            gc_uis_r[`BELLEK_ISARETLI]                  = bellek_isaretli_r;
+            gc_uis_r[`HY+:`HY_BIT]                      = hy_w;
+            gc_uis_r[`PS+:`PS_BIT]                      = ps_r;
+            gc_uis_r[`DDY_ADRES+:`DDY_ADRES_BIT]        = i_anlik;
+            gc_uis_r[`DDY_ANLIK+:`DDY_ANLIK_BIT]        = ky1_w;
+        end
+    end
+
+    always @(posedge clk_g) begin
+        if (rst_g) begin
+            //yazmac_gc_uis_r[`GECERLI] <= 1'b0;
+            yazmac_gc_uis_r <= 0;
+        end
+        else begin
+            if (gc_duraklat_g) begin
+                yazmac_gc_uis_r <= yazmac_gc_uis_r;
+            end
+            else begin
+                yazmac_gc_uis_r <= gc_uis_r;
+            end
+        end
+    end
+
+endmodule
\ No newline at end of file
diff --git a/verilog/rtl/iki_bit_adimli_bolucu.v b/verilog/rtl/iki_bit_adimli_bolucu.v
new file mode 100644
index 0000000..9b8acd3
--- /dev/null
+++ b/verilog/rtl/iki_bit_adimli_bolucu.v
@@ -0,0 +1,164 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+
+module iki_bit_adimli_bolucu(
+    input                   rst_g,
+    input       [31:0]      a_g,
+    input       [31:0]      b_g,
+    input                   istek,
+    input                   isaretli,
+    input                   overflow,
+    input                   divbyzero,
+    input                   clk,
+    output      [31:0]      bolum,
+    output      [31:0]      kalan,
+    output      reg         bitti=0
+    );
+    
+    /*
+        Ä°lk sayı sabit kalırken ikinci sayıyı 31 birim sola kaydırıyoruz kısaca 2^31 ile çarpmış oluyoruz.
+        Daha sonra ikinci sayıyı birinciden çıkarıyoruz. Çıkardığımızda negatif bir sayı çıkıyorsa o çarpım içinde yok demektir.
+        Var ise bölümü o basamaktaki deÄŸer bir oluyor ve ilk sayı yerine artık çıkarılmış halini kullanıyoruz.
+        Tek saat dönümü içinde iki bit iki bit ilerlemeli olduÄŸu için bir kaydırılmış hali ile yine bir çıkarma ve kontrol iÅŸlemi yapıyoruz.
+        Negatif sayılar alınırken positif halleriyle alınıyor ve kalansızsa sadece sonucu negatife çeviriyoruz.
+        Kalan var ise sonuç negatifinin bir eksiÄŸi ve kalan ikinci sayıdan kalanın çıkarılması ile bulunuyor.
+    */
+    
+    localparam EVET = 1'b1;
+    localparam HAYIR = 1'b0;
+    
+    // bölme iÅŸlemine 2^31 sayısıyla baÅŸlıyor
+    localparam BOLME_BASLANGIC = 32'b1000_0000_0000_0000_0000_0000_0000_0000;
+    
+    reg [31:0] A, A_next;
+    reg [63:0] B, B_next;
+    reg [31:0] bolum, bolum_next;
+    reg [31:0] kalan, kalan_next;
+    
+    // o anda hangi basamakta olduÄŸu deÄŸeri, ikinci de ikinci çıkarma iÅŸlemi için
+    reg [31:0] bolme_basamagi, bolme_basamagi_next = BOLME_BASLANGIC;
+    wire [31:0] ikinci_bolme_basamagi = {1'b0, bolme_basamagi[31:1]};
+    
+    reg hesaplaniyor = HAYIR, hesaplaniyor_next = HAYIR; 
+    reg sonuc_ver = HAYIR, sonuc_ver_next = HAYIR;
+    
+    reg bitti_next = 0;
+    
+    
+    wire A_negatif_mi = isaretli & a_g[31];
+    wire B_negatif_mi = isaretli & b_g[31];
+    
+    wire sonuc_negatif_mi = A_negatif_mi ^ B_negatif_mi;
+    
+    // sayının çıkarıldığı yer [32:0] olması bazı taÅŸma durumları için
+    wire [32:0] ilk_cikarma_sonucu = A - B[31:0];
+    wire ilk_cikarma_sonucu_negatif_mi = ilk_cikarma_sonucu[32];
+    wire ilk_cikarma_b_de_tasma_var_mi = |B[63:32];
+    // eÄŸer çıkarttığımızda pozitif bir sayı elde ediyorsak çıkarma iÅŸlemini yapmalıyız
+    wire ilk_cikarmayi_yap = ~ (ilk_cikarma_sonucu_negatif_mi | ilk_cikarma_b_de_tasma_var_mi);
+    // ilk çıkartmadan sonraki deÄŸer
+    wire [31:0] A_ilk_cikarma_sonrasi = ( ilk_cikarmayi_yap ? ilk_cikarma_sonucu[31:0] : A );
+    
+    // ikinci çıkartmada ikinci sayının bir kaydırılmış hali ve ona göre taÅŸma sonucuna bakıyoruz
+    wire [32:0] ikinci_cikarma_sonucu = A_ilk_cikarma_sonrasi - B[32:1];
+    wire ikinci_cikarma_sonucu_negatif_mi = ikinci_cikarma_sonucu[32];
+    wire ikinci_cikarma_b_de_tasma_var_mi = |B[63:33];
+    wire ikinci_cikarmayi_yap = ~ (ikinci_cikarma_sonucu_negatif_mi | ikinci_cikarma_b_de_tasma_var_mi);
+    // ikinci çıkartmanın durumuna göre A'nın yeni durumunu atıyoruz
+    wire [31:0] A_ikinci_cikarma_sonrasi = ( ikinci_cikarmayi_yap ? ikinci_cikarma_sonucu[31:0] : A_ilk_cikarma_sonrasi );
+    
+    
+    always@ (*) begin
+        bitti_next = HAYIR;
+        hesaplaniyor_next = hesaplaniyor;
+        A_next = A;
+        B_next = B;
+        bolme_basamagi_next = bolme_basamagi;
+        sonuc_ver_next = sonuc_ver;
+        kalan_next = kalan;
+        bolum_next = bolum;
+        if (hesaplaniyor) begin
+            hesaplaniyor_next = ~bolme_basamagi[1];
+            sonuc_ver_next = bolme_basamagi[1]; // iki kaydıra kaydıra bitmeden bir önceki adımda olan bir
+            bitti_next = HAYIR;
+            A_next = A_ikinci_cikarma_sonrasi; // ilki hesaplanan çıkarma sonucunu alıyor
+            B_next = B >> 2; // ikinci sayıyı iki birim sağa kaydırıyoruz
+            bolme_basamagi_next = bolme_basamagi >> 2; // bölme basamağı da beraber sola kayıyor
+            case ( {ilk_cikarmayi_yap, ikinci_cikarmayi_yap} ) // çıkarma iÅŸlemini yapıp yapmamamıza göre o basamakları bölüme ekliyoruz
+                2'b00:
+                    bolum_next = bolum;
+                2'b01:
+                    bolum_next = bolum ^ ikinci_bolme_basamagi;
+                2'b10:
+                    bolum_next = bolum ^ bolme_basamagi;
+                2'b11:
+                    bolum_next = bolum ^ bolme_basamagi ^ ikinci_bolme_basamagi;
+            endcase
+        end
+        else if(sonuc_ver) begin // çıkartma iÅŸlemlerinden sonraki negatif hesaplama kısmı
+            hesaplaniyor_next = HAYIR;
+            sonuc_ver_next = HAYIR;
+            bitti_next = EVET;
+            if (divbyzero) begin
+                bolum_next = 32'hffffffff;
+                kalan_next = a_g;
+            end else if (overflow && isaretli) begin
+                bolum_next = 32'h80000000;
+                kalan_next = 32'h0;
+            end
+            else begin
+                bolum_next = sonuc_negatif_mi? -bolum: bolum;
+                kalan_next = A_negatif_mi? -A: A;
+            end
+        end
+        else if (istek) begin // yeni istek
+            hesaplaniyor_next = EVET;
+            sonuc_ver_next = HAYIR;
+            bitti_next = HAYIR;
+            A_next = ( A_negatif_mi ? -a_g : a_g ); // A'yı pozitif olarak al
+            B_next = ( B_negatif_mi ? {1'd0, -b_g, 31'd0} : {1'd0, b_g, 31'd0} ); // B 2^31 ile çarpılmış hali ile baÅŸlat
+            bolme_basamagi_next = BOLME_BASLANGIC; // bölme basamağını baÅŸlangıca sıfırla
+            kalan_next = 32'd0;
+            bolum_next = 32'd0;
+        end
+    end
+    
+    always@ (posedge clk) begin
+        if(rst_g) begin
+            A <= 0;
+            B <= 0;
+            kalan <= 0;
+            bolum <= 0;
+            bitti <= 0;
+            hesaplaniyor <= 0;
+            sonuc_ver <= 0;
+            bolme_basamagi <= 0;
+        end else begin
+            A <= A_next;
+            B <= B_next;
+            kalan <= kalan_next;
+            bolum <= bolum_next;
+            bitti <= bitti_next;
+            hesaplaniyor <= hesaplaniyor_next;
+            sonuc_ver <= sonuc_ver_next;
+            bolme_basamagi <= bolme_basamagi_next;
+        end
+    end
+    
+    
+    
+endmodule
diff --git a/verilog/rtl/iki_bit_adimli_carpici.v b/verilog/rtl/iki_bit_adimli_carpici.v
new file mode 100644
index 0000000..abd2596
--- /dev/null
+++ b/verilog/rtl/iki_bit_adimli_carpici.v
@@ -0,0 +1,114 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+
+module iki_bit_adimli_carpici(
+    input                   rst_g,
+    input       [31:0]      a_g,
+    input       [31:0]      b_g,
+    input                   istek,
+    input                   a_isaretli,
+    input                   b_isaretli,
+    input                   clk,
+    output      [63:0]      sonuc,
+    output      reg         bitti = 0
+    );
+    
+    /*
+        Çarpma her clock başı b'nin en küçük iki biti a ile çarpılarak çarpıma ekleniyor.
+        Sonraki adımda b'yi iki saÄŸa kaydırıp a'yı iki sola kaydırarak yeni en küçük bitiyle olacak çarpımın asıl deÄŸerini koruyoruz.
+        Sayılar negatif veya pozitif olmasına bakılmaksızın pozitif olarak alınıyor.
+        EÄŸer sonuç negatif olması gerkiyorsa sonucu negatife çevirilmiÅŸ haliyle veriyor aksi halde normal kalıyor.
+        Örnek:
+            3   x   5   =   15
+            -2  x   -3  =   2   x   3   =   6
+            -2  x   4   = -(2   x   4)  =  -8
+    */
+    
+    localparam EVET = 1'b1;
+    localparam HAYIR = 1'b0;
+    
+    reg[63:0] A, A_next;
+    reg[31:0] B, B_next;
+    
+    reg[63:0] carpim, carpim_next;
+    
+    reg hesaplaniyor = HAYIR, hesaplaniyor_next;
+    
+    reg bitti_next = 0;
+    
+    
+    wire a_negatif_mi = a_isaretli & a_g[31];
+    wire b_negatif_mi = b_isaretli & b_g[31];
+    
+    wire sonuc_negatif_mi = a_negatif_mi ^ b_negatif_mi;
+    
+    // B'nin ilk biti ile A'nın çarpımı B'nin ilk bit 1 ise A'nın kendisi deÄŸilse sıfırdır
+    wire[63:0] ilk_bit_carpim = ( B[0] ? A : 64'd0 );
+    
+    // B'nin ikinci biti ile A'nın çarpımı B'nin ikinci biti 1 ise A'nın ikiyle çarpılmış/bir kaydırılmış halidir deÄŸilse 0
+    wire[63:0] ikinci_bit_carpim = ( B[1] ? {A[62:0], 1'd0} : 64'd0 );
+    
+    
+    reg[3:0] adim = 4'hf, adim_next = 4'h7; // sabit clock sayısı
+    
+    
+    always@ (*) begin
+        bitti_next = HAYIR;
+        hesaplaniyor_next = hesaplaniyor;
+        A_next = A;
+        B_next = B;
+        carpim_next = carpim;
+        adim_next = adim;
+        if (hesaplaniyor) begin
+            hesaplaniyor_next = |(adim);
+            bitti_next = (adim == 4'h0); // sabit clock sayısı // bitti_next = ~ (|B[31:2]) & ~bitti;
+            adim_next = adim - 1'b1; // sabit clock sayısı
+            A_next = A << 2;
+            B_next = B >> 2;
+            carpim_next = carpim + ilk_bit_carpim + ikinci_bit_carpim;
+        end
+        else if (istek) begin
+            hesaplaniyor_next = EVET;
+            A_next = ( a_negatif_mi ? {32'd0, -a_g} : {32'd0, a_g} ); // A 64 bit olduÄŸu için yanına 0 ekliyoruz
+            B_next = ( b_negatif_mi ? -b_g : b_g );
+            carpim_next = 64'd0; // çarpımı sıfırla
+            bitti_next = HAYIR;
+            adim_next = 4'hf; // sabit clock sayısı
+        end
+    end
+    
+    always@ (posedge clk) begin
+        if(rst_g) begin
+            A <= 0;
+            B <= 0;
+            carpim <= 0;
+            bitti <= 0;
+            hesaplaniyor <= 0;;
+            adim <= 0;
+        end else begin
+            A <= A_next;
+            B <= B_next;
+            carpim <= carpim_next;
+            bitti <= bitti_next;
+            hesaplaniyor <= hesaplaniyor_next;;
+            adim <= adim_next; // sabit clock sayısı
+        end
+    end
+    
+    assign sonuc = ( sonuc_negatif_mi ? -carpim : carpim );
+    
+endmodule
diff --git a/verilog/rtl/mikroislem.vh b/verilog/rtl/mikroislem.vh
new file mode 100644
index 0000000..1d1c061
--- /dev/null
+++ b/verilog/rtl/mikroislem.vh
@@ -0,0 +1,161 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation

+//

+// Licensed under the Apache License, Version 2.0 (the "License");

+// you may not use this file except in compliance with the License.

+// You may obtain a copy of the License at

+//

+//      http://www.apache.org/licenses/LICENSE-2.0

+//

+// Unless required by applicable law or agreed to in writing, software

+// distributed under the License is distributed on an "AS IS" BASIS,

+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+// See the License for the specific language governing permissions and

+// limitations under the License.

+// SPDX-License-Identifier: Apache-2.0

+///////////////////////////

+// Mikroislem sinyalleri//

+`define DDY_ADRES_BIT 12

+`define DDY_ADRES 185

+

+`define DDY_VERI_BIT 32

+`define DDY_VERI 153

+

+`define DDY_ANLIK_BIT 5

+`define DDY_ANLIK 148

+

+`define DDY_YAZ 147

+

+`define GECERLI 146

+

+`define YURUT_KODU_BIT 7

+`define YURUT_KODU 139

+`define YURUT_KODU_AMB 'h1

+`define YURUT_KODU_DB 'h2

+`define YURUT_KODU_BIB 'h4

+`define YURUT_KODU_TCB 'h8

+`define YURUT_KODU_TBB 'h10

+`define YURUT_KODU_CSR 'h20

+`define YURUT_KODU_SISTEM 'h40

+

+`define ISLEV_KODU_BIT 12

+`define ISLEV_KODU 127

+

+`define IS1_SEC_BIT 3

+`define IS1_SEC 124

+`define IS1_SEC_KY1 'h1

+`define IS1_SEC_PS 'h2

+`define IS1_SEC_0 'h4

+

+

+`define IS2_SEC_BIT 5

+`define IS2_SEC 119

+`define IS2_SEC_CSR_AD 'h10 // AD: Anlik deger

+`define IS2_SEC_0 'h8

+`define IS2_SEC_4 'h4

+`define IS2_SEC_AD 'h2

+`define IS2_SEC_KY2 'h1

+

+`define ANLIK_DEGER_BIT 32

+`define ANLIK_DEGER 87

+

+`define KY1_BIT 5

+`define KY1 82

+

+`define KY2_BIT 5

+`define KY2 77

+

+`define BELLEK_BUYRUGU_BIT 3

+`define BELLEK_BUYRUGU 74

+`define YUKLE_BUYRUGU 76

+`define KAYDET_BUYRUGU 75

+`define FENCE_BUYRUGU 74

+

+

+`define BELLEK_TURU_BIT 3

+`define BELLEK_TURU 71

+`define BELLEK_TURU_W 73

+`define BELLEK_TURU_HW 72

+`define BELLEK_TURU_B 71

+

+

+`define BELLEK_ISARETLI 70

+

+`define HY_YAZ 69

+

+`define HY_DEGER_BIT 32 

+`define HY_DEGER 37

+

+

+`define HY_BIT 5

+`define HY 32

+

+`define PS_BIT 32

+`define PS 0

+

+

+////////////////////////

+ // AMB islev kodlari//

+ `define ADD 'h1

+ `define SUB 'h2

+ `define AND 'h4

+ `define OR 'h8

+ `define XOR 'h10

+ `define SLT 'h20

+ `define SLTU 'h40

+ `define SLL 'h80

+ `define SRL 'h100

+ `define SRA 'h200

+ `define LUI 'h400

+ `define AUIPC 'h800

+////////////////////////

+ // DB islev kodlari //

+ `define JAL  'h1

+ `define JALR 'h2

+ `define BEQ  'h4

+ `define BNE  'h8

+ `define BLT  'h10

+ `define BLTU 'h20

+ `define BGE  'h40

+ `define BGEU 'h80

+/////////////////////////

+ // BIB islev kodlari //

+ `define LW    'h1 

+ `define LH    'h2 

+ `define LHU   'h4 

+ `define LB    'h8 

+ `define LBU   'h10

+ `define SW    'h20

+ `define SH    'h40

+ `define SB    'h80

+ `define FENCE 'h100

+ /////////////////////////////

+ // Bellk Buyrugu tanimlamalari//

+ `define FENCE_b 'h1

+ `define KAYDET_b 'h2

+ `define YUKLE_b 'h4

+ ///////////////////////////////

+//////////////////////////////

+ // CSR islev kodlari //

+ `define ECALL  'h1

+ `define EBREAK 'h2

+ `define URET   'h4

+ `define MRET   'h8

+ `define CSRRW  'h10

+ `define CSRRS  'h20

+ `define CSRRC  'h40 

+ `define CSRRWI  'h80

+ `define CSRRSI  'h100

+ `define CSRRCI  'h200

+/////////////////////////

+ // TCB islev kodlari //

+ `define MUL 'h1

+ `define MULH 'h2

+ `define MULHU 'h4

+ `define MULHSU 'h8

+/////////////////////////

+ // TBB islev kodlari //

+ `define DIV 'h1

+ `define DIVU 'h2

+ `define REM 'h4

+ `define REMU 'h8

+

diff --git a/verilog/rtl/on_taraf.v b/verilog/rtl/on_taraf.v
new file mode 100644
index 0000000..42bc1b9
--- /dev/null
+++ b/verilog/rtl/on_taraf.v
@@ -0,0 +1,126 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+//==============================================================================
+// On taraf buyruk bellegi ile C0 arasindaki haberlesmeyi denetler
+//==============================================================================
+
+`ifndef GL_RTL_SIM
+`include "sabitler.vh"
+`endif
+
+module on_taraf(
+
+    input                                                       clk_g                                                                                 ,
+    input                                                       rst_g                                                                                 ,
+    
+    // TODO buraya buyruk adresi gelecek
+    
+    
+    //      On_taraf <-> GC
+    input                                                       gc_hazir_g                                                                            ,
+    output                                                      bb_buy_gecerli_c                                                                      ,
+    output              [`BUYRUK_BIT-1:0]                       bb_buy_c                                                                              ,
+    output              [`BB_ADRES_BIT-1:0]                     bb_buy_ps_c                                                                           ,
+    input               [`BB_ADRES_BIT-1:0]                     bb_buy_istek_adres_g                                                                  ,
+    input                                                       bb_buy_istek_g                                                                        ,
+    
+    //      On_taraf <-> Buyruk Bellegi
+    output              [`BB_ADRES_BIT-1:0]                     bb_addra_c                                                                            ,                                       
+    input               [31:0]                                  bb_douta_g                                                                            ,                                      
+    output                                                      bb_ena_c                                                                              ,   
+    
+    //      On_taraf <-> Baslangic Bellegi
+    output              [`BB_ADRES_BIT-1:0]                     basbel_addra_c                                                                        ,                                       
+    input               [31:0]                                  basbel_douta_g                                                                        ,
+    output    reg                                               basbel_ena_c                      
+   
+    );
+    
+    reg                                                         gc_hazir_degildi_r                                                                    ;
+    reg                                                         gc_hazir_degildi_ns_r                                                                 ;
+    
+    wire                [`BB_ADRES_BIT-1:0]                     baslangic_adresi_w                  =           `BASLANGIC_ADRESI                     ;
+        
+    reg                 [`BB_ADRES_BIT-1:0]                     program_sayaci_r                                                                      ;                                                    
+    reg                 [`BB_ADRES_BIT-1:0]                     program_sayaci_ns_r                                                                   ;
+    
+    reg                                                         buyruk_gecerli_r                                                                      ;
+    reg                                                         buyruk_gecerli_ns_r                                                                   ;
+    
+    reg                 [31:0]                                  buyruk_r                                                                              ;
+    reg                 [31:0]                                  buyruk_ns_r                                                                           ;
+    
+    // TODO: bb_ena_c, baslangic bellegi de okunsa 1 oluyor, cok onemli olmamasi lazim
+    wire                                                        basbel_oku_w                        =           program_sayaci_r < `BB_TABAN_ADR      ;
+    assign                                                      bb_ena_c                            =           basbel_oku_w ? `LOW: basbel_ena_c;
+    
+    assign                                                      bb_buy_c                            =           basbel_oku_w                          ? 
+                                                                                                                  basbel_douta_g                      : 
+                                                                                                                  (gc_hazir_degildi_r)                ?
+                                                                                                                  buyruk_r : bb_douta_g               ;
+                                                                                                                  
+    assign                                                      bb_buy_ps_c                         =           program_sayaci_r    -   3'b100        ;
+    assign                                                      bb_buy_gecerli_c                    =           buyruk_gecerli_r                      ;
+    assign                                                      bb_addra_c                          =           program_sayaci_r - `BB_TABAN_ADR      ;
+    
+    assign                                                      basbel_addra_c                      =           program_sayaci_r - `BASBEL_TABAN_ADR  ;
+    
+    // TODO: iki portlu bram farkli calisiyor, ona gore kodu duzenle
+    // ena 1 olmayinca Z baglaniyor
+    
+    always @* begin
+        program_sayaci_ns_r                     =               program_sayaci_r                                                                      ;
+        buyruk_gecerli_ns_r                     =               buyruk_gecerli_r                                                                      ;
+        basbel_ena_c                            =               `LOW                                                                                  ;
+        buyruk_ns_r                             =               buyruk_r                                                                              ;
+        gc_hazir_degildi_ns_r                   =               !gc_hazir_g                                                                           ;
+        
+        if (!gc_hazir_degildi_r && (!gc_hazir_g)) // hazirdi, artik hazir degil
+            buyruk_ns_r                         =               bb_douta_g                                                                            ; 
+        
+        if (gc_hazir_g) 
+        begin
+            //buyruk_ns_r                         =               bb_douta_g                                                                            ;
+            basbel_ena_c                        =               `HIGH                                                                                 ;
+            buyruk_gecerli_ns_r                 =               `HIGH                                                                                 ;          
+            program_sayaci_ns_r                 =               program_sayaci_r                    +           3'b100                                ;
+            if (bb_buy_istek_g) 
+            begin
+                program_sayaci_ns_r             =               bb_buy_istek_adres_g                                                                  ;
+                buyruk_gecerli_ns_r             =               `LOW                                                                                  ;
+            end
+        end
+    end
+    
+    always @(posedge clk_g) begin
+        if (rst_g)
+        begin
+            program_sayaci_r                    <=              baslangic_adresi_w                                                                    ;
+            buyruk_gecerli_r                    <=              `LOW                                                                                  ;
+            buyruk_r                            <=              32'b0                                                                                 ;
+            gc_hazir_degildi_r                  <=              `LOW                                                                                  ;                   
+        end
+        else
+        begin
+            program_sayaci_r                    <=              program_sayaci_ns_r                                                                   ;
+            buyruk_gecerli_r                    <=              buyruk_gecerli_ns_r                                                                   ;
+            buyruk_r                            <=              buyruk_ns_r                                                                           ;
+            gc_hazir_degildi_r                  <=              gc_hazir_degildi_ns_r                                                                 ;
+        end    
+    end                                                                
+    
+endmodule
diff --git a/verilog/rtl/sabitler.vh b/verilog/rtl/sabitler.vh
new file mode 100644
index 0000000..3cd8027
--- /dev/null
+++ b/verilog/rtl/sabitler.vh
@@ -0,0 +1,99 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+//-----------Sim Parametreleri----
+`define FAST_UART
+//`define SIM_SRAM
+`define GL_RTL_SIM
+//------Sentez Parametreleri------
+//`define VCU108
+//`define BASYS3
+//-----------Diger----------------
+`define BASLANGIC_ADRESI 32'h0
+`define BASBEL_TABAN_ADR 32'h0 // baslangic bellegi (bootrom) taban adresi
+`define BB_TABAN_ADR 32'h1_0000 // buyruk bellegi baslangic adresi
+`define VB_TABAN_ADR 32'h4000_0000 // veri bellegi baslangic adresi
+
+`define HIGH 1
+`define LOW  0
+
+`define VERI_BIT  32
+//-----------Bellek---------------
+`define ADRES_BIT 32
+
+//-----------Mikroislem-----------
+`define UIS_BIT 197
+
+//-----------GetirCoz-------------
+`define BB_ADRES_BIT 32
+`define BUYRUK_BIT 32
+
+`define BUY_ISKODU 0
+`define BUY_ISKODU_BIT 7
+`define BUY_HY 7
+`define BUY_HY_BIT 5
+`define BUY_KY1 15
+`define BUY_KY1_BIT 5
+`define BUY_KY2 20
+`define BUY_KY2_BIT 5
+`define BUY_F7 25
+`define BUY_F7_BIT 7
+`define BUY_F3 12
+`define BUY_F3_BIT 3
+
+`define I_ANLIK 20
+`define I_ANLIK_BIT 12
+`define I_ANLIK_ISARET 31
+
+`define U_ANLIK 12
+`define U_ANLIK_BIT 20
+
+`define ODD_BIT 5
+
+//-------------DDY---------------
+
+// Kural disi durum kodlari
+`define KDD_HBA   32'd0   // hizasiz buyruk adresi
+`define KDD_YB    32'd2   // yanlis buyruk
+`define KDD_HYA   32'd4   // hizasiz yukle buyrugu
+`define KDD_HKA   32'd6   // hizasiz kaydet buyrugu
+`define KDD_MRET  32'd11  // makine modundan ortam cagrisi
+
+// Priv. mode degerleri
+`define PRIV_USER         2'd0
+`define PRIV_SUPER        2'd1
+`define PRIV_MACHINE      2'd3
+
+// Yazmac adresleri
+// TODO, bunlar uyumlu mu?
+`define DDY_MSTATUS       12'h300
+`define DDY_MISA          12'h301
+`define DDY_MEDELEG       12'h302
+`define DDY_MIDELEG       12'h303
+`define DDY_MIE           12'h304
+`define DDY_MTVEC         12'h305
+`define DDY_MSCRATCH      12'h340
+`define DDY_MEPC          12'h341
+`define DDY_MCAUSE        12'h342
+`define DDY_MTVAL         12'h343
+`define DDY_MIP           12'h344
+`define DDY_MCYCLE        12'hc00
+`define DDY_MTIME         12'hc01
+`define DDY_MTIMEH        12'hc81
+`define DDY_MHARTID       12'hF14
+
+// MSTATUS yazmac offsetleri
+`define MSTATUS_MIE       3       
+`define MSTATUS_MPIE      7 
+`define MSTATUS_MPP       11
\ No newline at end of file
diff --git a/verilog/rtl/tamsayi_bolme_birimi.v b/verilog/rtl/tamsayi_bolme_birimi.v
new file mode 100644
index 0000000..08b6c8a
--- /dev/null
+++ b/verilog/rtl/tamsayi_bolme_birimi.v
@@ -0,0 +1,98 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+
+module tamsayi_bolme_birimi(
+    input                 clk_g                                                         ,
+    input                 rst_g                                                         ,
+    input        [3:0]    islev_kodu_g                                                  ,
+    input        [31:0]   islec1_g                                                      ,
+    input        [31:0]   islec2_g                                                      ,
+    input                 hazir_g                                                     ,
+    output                bitti_c                                                       ,
+    output       [31:0]   sonuc_c
+    );
+    
+    
+    localparam DIV  = 4'h1; 
+    localparam DIVU = 4'h2; 
+    localparam REM  = 4'h4; 
+    localparam REMU = 4'h8; 
+    
+    reg basla, basla_next;
+
+    reg [3:0] islev_kodu_r, islev_kodu_ns_r;
+    reg [31:0] A, A_next, B, B_next;
+        
+    // DIV ve REM iÅŸlemleri iÅŸin iÅŸaretli gibi yap diÄŸerleri için iÅŸaretsiz
+    wire isaretli = ( islev_kodu_r == DIV | islev_kodu_r == REM );
+    wire overflow = ((A == 32'h80000000) && (B == 32'hffffffff));
+    wire divbyzero = (B == 32'd0);
+    
+    // bölme ünitesi bölüm ve kalan/mod'u döndürüyor
+    wire [31:0] bolum;
+    wire [31:0] kalan;
+    
+    // iÅŸlemin bittiÄŸi clocku vermek için
+    wire bitti;
+    
+    iki_bit_adimli_bolucu bolme_birimi (
+        .rst_g(rst_g),
+        .a_g(A),
+        .b_g(B),
+        .istek(basla),
+        .isaretli(isaretli),
+        .overflow(overflow),
+        .divbyzero(divbyzero),
+        .clk(clk_g),
+        .bolum(bolum),
+        .kalan(kalan),
+        .bitti(bitti)
+    );
+    
+    always @* begin
+        islev_kodu_ns_r = (hazir_g)? islev_kodu_g: islev_kodu_r;
+        A_next = (hazir_g)? islec1_g: A;
+        B_next = (hazir_g)? islec2_g: B;
+        basla_next = hazir_g;
+    end
+    
+    always @(posedge clk_g) begin
+        if(rst_g) begin 
+            islev_kodu_r <= 0;
+            A <= 0;
+            B <= 0;
+            basla <= 0;
+        end else begin
+            islev_kodu_r <= islev_kodu_ns_r;
+            A <= A_next;
+            B <= B_next;
+            basla <= basla_next;
+        end
+    end
+    
+    // doÄŸrudan bölme biriminin verdiÄŸi deÄŸeri atıyoruz
+    assign bitti_c = bitti;
+    
+    // DIV ve DIVU için bölümü diÄŸerleri için kalanı veriyoruz
+    assign sonuc_c = ( islev_kodu_r == DIV | islev_kodu_r == DIVU ) ? bolum : kalan;
+    
+    
+    
+    
+    
+    
+endmodule
\ No newline at end of file
diff --git a/verilog/rtl/tamsayi_carpma_birimi.v b/verilog/rtl/tamsayi_carpma_birimi.v
new file mode 100644
index 0000000..fc37fed
--- /dev/null
+++ b/verilog/rtl/tamsayi_carpma_birimi.v
@@ -0,0 +1,90 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+
+module tamsayi_carpma_birimi(
+    input                 clk_g                                                         ,
+    input                 rst_g                                                         ,
+    input        [3:0]    islev_kodu_g                                                  ,
+    input        [31:0]   islec1_g                                                      ,
+    input        [31:0]   islec2_g                                                      ,
+    input                 hazir_g                                                     ,
+    output                bitti_c                                                       ,
+    output       [31:0]   sonuc_c
+    );
+    
+    localparam MUL      = 4'h1; 
+    localparam MULH     = 4'h2; 
+    localparam MULHU    = 4'h4;
+    localparam MULHSU   = 4'h8; 
+    
+    reg basla, basla_next;
+    reg [3:0] islev_kodu_r, islev_kodu_ns_r;
+    reg [31:0] A, A_next, B, B_next;
+    // MUL ve MULH iÅŸin iÅŸlemleri iÅŸaretli gibi yap diÄŸerleri için iÅŸaretsiz
+    wire a_isaretli = ( islev_kodu_r == MUL | islev_kodu_r == MULH | islev_kodu_r == MULHSU);
+    wire b_isaretli = ( islev_kodu_r == MUL | islev_kodu_r == MULH );
+
+    // çarpma ünitesi sonucu 64 bit olarak döndürüyor
+    wire [63:0] carpim;
+    
+    // iÅŸlemin bittiÄŸi clocku vermek için
+    wire bitti;
+    
+    iki_bit_adimli_carpici carpma_birimi (
+        .a_g(A),
+        .b_g(B),
+        .istek(basla),
+        .a_isaretli(a_isaretli),
+        .b_isaretli(b_isaretli),
+        .clk(clk_g),
+        .sonuc(carpim),
+        .bitti(bitti)
+    );
+    
+    always @* begin
+        islev_kodu_ns_r = (hazir_g)? islev_kodu_g: islev_kodu_r;
+        A_next = (hazir_g)? islec1_g: A;
+        B_next = (hazir_g)? islec2_g: B;
+        basla_next = hazir_g;
+    
+    end
+    
+    
+    always @(posedge clk_g) begin
+        if(rst_g) begin 
+            islev_kodu_r <= 0;
+            A <= 0;
+            B <= 0;
+            basla <= 0;
+        end else begin
+            islev_kodu_r <= islev_kodu_ns_r;
+            A <= A_next;
+            B <= B_next;
+            basla <= basla_next;
+        end
+    end
+    
+    // doÄŸrudan çarpma biriminin verdiÄŸi deÄŸeri atıyoruz
+    assign bitti_c = bitti;
+    
+    // MUL ve MULU için çarpımın ilk 32 basamağını yolla diÄŸerleri için son 32 basamağı
+    assign sonuc_c = (islev_kodu_r == MUL) ? carpim[31:0] : carpim[63:32];
+    
+    
+    
+endmodule
+
diff --git a/verilog/rtl/uprj_netlists.v b/verilog/rtl/uprj_netlists.v
deleted file mode 100644
index 3537de8..0000000
--- a/verilog/rtl/uprj_netlists.v
+++ /dev/null
@@ -1,28 +0,0 @@
-// SPDX-FileCopyrightText: 2020 Efabless Corporation
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-// SPDX-License-Identifier: Apache-2.0
-
-// Include caravel global defines for the number of the user project IO pads 
-`include "defines.v"
-`define USE_POWER_PINS
-
-`ifdef GL
-    // Assume default net type to be wire because GL netlists don't have the wire definitions
-    `default_nettype wire
-    `include "gl/user_project_wrapper.v"
-    `include "gl/user_proj_example.v"
-`else
-    `include "user_project_wrapper.v"
-    `include "user_proj_example.v"
-`endif
\ No newline at end of file
diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v
index 26081e9..e1829b1 100644
--- a/verilog/rtl/user_proj_example.v
+++ b/verilog/rtl/user_proj_example.v
@@ -66,7 +66,29 @@
     output [`MPRJ_IO_PADS-1:0] io_oeb,
 
     // IRQ
-    output [2:0] irq
+    output [2:0] irq,
+
+    output                                          vb_csb0                 ,
+    output                                          vb_web0                 ,
+    output          [3:0]                           vb_wmask0               ,
+    output          [12:0]                          vb_addr0                ,
+    output          [31:0]                          vb_din0                 ,
+    input           [31:0]                          vb_dout0                ,
+
+    output                                          vb_csb1                 ,
+    output          [12:0]                          vb_addr1                ,
+    input           [31:0]                          vb_dout1                ,
+
+    output                                          bb_csb0                 ,
+    output                                          bb_web0                 ,
+    output          [3:0]                           bb_wmask0               ,
+    output          [31:0]                          bb_addr0                ,
+    output          [31:0]                          bb_din0                 ,
+    input           [31:0]                          bb_dout0                ,
+
+    output                                          bb_csb1                 ,
+    output          [31:0]                          bb_addr1                ,
+    input           [31:0]                          bb_dout1                         
 );
     wire clk;
     wire rst;
@@ -104,11 +126,9 @@
     assign clk = (~la_oenb[64]) ? la_data_in[64]: wb_clk_i;
     assign rst = (~la_oenb[65]) ? la_data_in[65]: wb_rst_i;
 
-    counter #(
-        .BITS(BITS)
-    ) counter(
-        .clk(clk),
-        .reset(rst),
+    c0_system c0_system(
+        .clk_g(clk),
+        .rst_g(rst),
         .ready(wbs_ack_o),
         .valid(valid),
         .rdata(rdata),
@@ -116,50 +136,34 @@
         .wstrb(wstrb),
         .la_write(la_write),
         .la_input(la_data_in[63:32]),
-        .count(count)
+        .count(count),
+        .tx(tx),
+        .rx(rx),
+        .io_gecerli(io_gecerli),
+        .io_ps(io_ps),
+        
+        .bb_csb0                                           (bb_csb0)                                                       ,
+        .bb_web0                                           (bb_web0)                                                       ,
+        .bb_wmask0                                         (bb_wmask0)                                                     ,
+        .bb_addr0                                          (bb_addr0)                                                      ,
+        .bb_din0                                           (bb_din0)                                                       ,
+        .bb_dout0                                          (bb_dout0)                                                      ,
+
+        .bb_csb1                                           (bb_csb1)                                                       ,
+        .bb_addr1                                          (bb_addr1)                                                      ,
+        .bb_dout1                                          (bb_dout1)                                                      ,
+
+        .vb_csb0                                           (vb_csb0)                                                       ,
+        .vb_web0                                           (vb_web0)                                                       ,
+        .vb_wmask0                                         (vb_wmask0)                                                     ,
+        .vb_addr0                                          (vb_addr0)                                                      ,
+        .vb_din0                                           (vb_din0)                                                       ,
+        .vb_dout0                                          (vb_dout0)                                                      ,
+
+        .vb_csb1                                           (vb_csb1)                                                       ,
+        .vb_addr1                                          (vb_addr1)                                                      ,
+        .vb_dout1                                          (vb_dout1) 
     );
 
 endmodule
-
-module counter #(
-    parameter BITS = 32
-)(
-    input clk,
-    input reset,
-    input valid,
-    input [3:0] wstrb,
-    input [BITS-1:0] wdata,
-    input [BITS-1:0] la_write,
-    input [BITS-1:0] la_input,
-    output ready,
-    output [BITS-1:0] rdata,
-    output [BITS-1:0] count
-);
-    reg ready;
-    reg [BITS-1:0] count;
-    reg [BITS-1:0] rdata;
-
-    always @(posedge clk) begin
-        if (reset) begin
-            count <= 0;
-            ready <= 0;
-        end else begin
-            ready <= 1'b0;
-            if (~|la_write) begin
-                count <= count + 1;
-            end
-            if (valid && !ready) begin
-                ready <= 1'b1;
-                rdata <= count;
-                if (wstrb[0]) count[7:0]   <= wdata[7:0];
-                if (wstrb[1]) count[15:8]  <= wdata[15:8];
-                if (wstrb[2]) count[23:16] <= wdata[23:16];
-                if (wstrb[3]) count[31:24] <= wdata[31:24];
-            end else if (|la_write) begin
-                count <= la_write & la_input;
-            end
-        end
-    end
-
-endmodule
 `default_nettype wire
diff --git a/verilog/rtl/user_project_wrapper.v b/verilog/rtl/user_project_wrapper.v
index 5ee1cee..e2aa7df 100644
--- a/verilog/rtl/user_project_wrapper.v
+++ b/verilog/rtl/user_project_wrapper.v
@@ -81,43 +81,108 @@
 /*--------------------------------------*/
 /* User project is instantiated  here   */
 /*--------------------------------------*/
+wire                                         vb_clk0                 ;
+wire                                         vb_csb0                 ;
+wire                                         vb_web0                 ;
+wire         [3:0]                           vb_wmask0               ;
+wire         [12:0]                          vb_addr0                ;
+wire         [31:0]                          vb_din0                 ;
+wire         [31:0]                          vb_dout0                ;
+wire                                         vb_clk1                 ;
+wire                                         vb_csb1                 ;
+wire         [12:0]                          vb_addr1                ;
+wire         [31:0]                          vb_dout1                ;
+wire                                         bb_clk0                 ;
+wire                                         bb_csb0                 ;
+wire                                         bb_web0                 ;
+wire         [3:0]                           bb_wmask0               ;
+wire         [`BB_ADRES_BIT-1:0]             bb_addr0                ;
+wire         [31:0]                          bb_din0                 ;
+wire         [31:0]                          bb_dout0                ;
+wire                                         bb_clk1                 ;
+wire                                         bb_csb1                 ;
+wire         [`BB_ADRES_BIT-1:0]             bb_addr1                ;
+wire         [31:0]                          bb_dout1                ;    
 
-user_proj_example mprj (
+c0_system mprj (
 `ifdef USE_POWER_PINS
 	.vccd1(vccd1),	// User area 1 1.8V power
 	.vssd1(vssd1),	// User area 1 digital ground
 `endif
 
-    .wb_clk_i(wb_clk_i),
-    .wb_rst_i(wb_rst_i),
-
-    // MGMT SoC Wishbone Slave
-
-    .wbs_cyc_i(wbs_cyc_i),
-    .wbs_stb_i(wbs_stb_i),
-    .wbs_we_i(wbs_we_i),
-    .wbs_sel_i(wbs_sel_i),
-    .wbs_adr_i(wbs_adr_i),
-    .wbs_dat_i(wbs_dat_i),
-    .wbs_ack_o(wbs_ack_o),
-    .wbs_dat_o(wbs_dat_o),
-
-    // Logic Analyzer
-
-    .la_data_in(la_data_in),
-    .la_data_out(la_data_out),
-    .la_oenb (la_oenb),
+    .clk_g(wb_clk_i),
+    .rst_g(wb_rst_i),
 
     // IO Pads
-
-    .io_in (io_in),
-    .io_out(io_out),
+    .tx(io_out[1]),
+    .rx(io_in[0]),
+    .io_gecerli(io_out[2]),
+    .io_ps(io_out[34:3]),
     .io_oeb(io_oeb),
 
-    // IRQ
-    .irq(user_irq)
+
+    .bb_csb0                                           (bb_csb0)                                                       ,
+    .bb_web0                                           (bb_web0)                                                       ,
+    .bb_wmask0                                         (bb_wmask0)                                                     ,
+    .bb_addr0                                          (bb_addr0)                                                      ,
+    .bb_din0                                           (bb_din0)                                                       ,
+    .bb_dout0                                          (bb_dout0)                                                      ,
+
+    .bb_csb1                                           (bb_csb1)                                                       ,
+    .bb_addr1                                          (bb_addr1)                                                      ,
+    .bb_dout1                                          (bb_dout1)                                                      ,
+
+    .vb_csb0                                           (vb_csb0)                                                       ,
+    .vb_web0                                           (vb_web0)                                                       ,
+    .vb_wmask0                                         (vb_wmask0)                                                     ,
+    .vb_addr0                                          (vb_addr0)                                                      ,
+    .vb_din0                                           (vb_din0)                                                       ,
+    .vb_dout0                                          (vb_dout0)                                                      ,
+
+    .vb_csb1                                           (vb_csb1)                                                       ,
+    .vb_addr1                                          (vb_addr1)                                                      ,
+    .vb_dout1                                          (vb_dout1) 
 );
 
+sky130_sram_2kbyte_1rw1r_32x512_8 VB_SRAM
+(
+    `ifdef USE_POWER_PINS
+        .vccd1(vccd1),
+        .vssd1(vssd1),
+    `endif        
+
+    .clk0               (wb_clk_i)        ,
+    .csb0               (vb_csb0)        ,
+    .web0               (vb_web0)        ,
+    .wmask0             (vb_wmask0)      ,
+    .addr0              (vb_addr0)       ,
+    .din0               (vb_din0)        ,
+    .dout0              (vb_dout0)       ,
+    .clk1               (wb_clk_i)        ,
+    .csb1               (vb_csb1)        ,
+    .addr1              (vb_addr1)       ,
+    .dout1              (vb_dout1)     
+);
+
+sky130_sram_2kbyte_1rw1r_32x512_8 BB_SRAM
+(
+    `ifdef USE_POWER_PINS
+        .vccd1(vccd1),
+        .vssd1(vssd1),
+    `endif        
+
+    .clk0               (wb_clk_i)      ,
+    .csb0               (bb_csb0)      ,
+    .web0               (bb_web0)      ,
+    .wmask0             (bb_wmask0)    ,
+    .addr0              (bb_addr0)     ,
+    .din0               (bb_din0)      ,
+    .dout0              (bb_dout0)     ,
+    .clk1               (wb_clk_i)      ,
+    .csb1               (bb_csb1)      ,
+    .addr1              (bb_addr1)     ,
+    .dout1              (bb_dout1)   
+);
 endmodule	// user_project_wrapper
 
 `default_nettype wire
diff --git a/verilog/rtl/user_project_wrapper_org.v b/verilog/rtl/user_project_wrapper_org.v
new file mode 100644
index 0000000..5ee1cee
--- /dev/null
+++ b/verilog/rtl/user_project_wrapper_org.v
@@ -0,0 +1,123 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+
+`default_nettype none
+/*
+ *-------------------------------------------------------------
+ *
+ * user_project_wrapper
+ *
+ * This wrapper enumerates all of the pins available to the
+ * user for the user project.
+ *
+ * An example user project is provided in this wrapper.  The
+ * example should be removed and replaced with the actual
+ * user project.
+ *
+ *-------------------------------------------------------------
+ */
+
+module user_project_wrapper #(
+    parameter BITS = 32
+) (
+`ifdef USE_POWER_PINS
+    inout vdda1,	// User area 1 3.3V supply
+    inout vdda2,	// User area 2 3.3V supply
+    inout vssa1,	// User area 1 analog ground
+    inout vssa2,	// User area 2 analog ground
+    inout vccd1,	// User area 1 1.8V supply
+    inout vccd2,	// User area 2 1.8v supply
+    inout vssd1,	// User area 1 digital ground
+    inout vssd2,	// User area 2 digital ground
+`endif
+
+    // Wishbone Slave ports (WB MI A)
+    input wb_clk_i,
+    input wb_rst_i,
+    input wbs_stb_i,
+    input wbs_cyc_i,
+    input wbs_we_i,
+    input [3:0] wbs_sel_i,
+    input [31:0] wbs_dat_i,
+    input [31:0] wbs_adr_i,
+    output wbs_ack_o,
+    output [31:0] wbs_dat_o,
+
+    // Logic Analyzer Signals
+    input  [127:0] la_data_in,
+    output [127:0] la_data_out,
+    input  [127:0] la_oenb,
+
+    // IOs
+    input  [`MPRJ_IO_PADS-1:0] io_in,
+    output [`MPRJ_IO_PADS-1:0] io_out,
+    output [`MPRJ_IO_PADS-1:0] io_oeb,
+
+    // Analog (direct connection to GPIO pad---use with caution)
+    // Note that analog I/O is not available on the 7 lowest-numbered
+    // GPIO pads, and so the analog_io indexing is offset from the
+    // GPIO indexing by 7 (also upper 2 GPIOs do not have analog_io).
+    inout [`MPRJ_IO_PADS-10:0] analog_io,
+
+    // Independent clock (on independent integer divider)
+    input   user_clock2,
+
+    // User maskable interrupt signals
+    output [2:0] user_irq
+);
+
+/*--------------------------------------*/
+/* User project is instantiated  here   */
+/*--------------------------------------*/
+
+user_proj_example mprj (
+`ifdef USE_POWER_PINS
+	.vccd1(vccd1),	// User area 1 1.8V power
+	.vssd1(vssd1),	// User area 1 digital ground
+`endif
+
+    .wb_clk_i(wb_clk_i),
+    .wb_rst_i(wb_rst_i),
+
+    // MGMT SoC Wishbone Slave
+
+    .wbs_cyc_i(wbs_cyc_i),
+    .wbs_stb_i(wbs_stb_i),
+    .wbs_we_i(wbs_we_i),
+    .wbs_sel_i(wbs_sel_i),
+    .wbs_adr_i(wbs_adr_i),
+    .wbs_dat_i(wbs_dat_i),
+    .wbs_ack_o(wbs_ack_o),
+    .wbs_dat_o(wbs_dat_o),
+
+    // Logic Analyzer
+
+    .la_data_in(la_data_in),
+    .la_data_out(la_data_out),
+    .la_oenb (la_oenb),
+
+    // IO Pads
+
+    .io_in (io_in),
+    .io_out(io_out),
+    .io_oeb(io_oeb),
+
+    // IRQ
+    .irq(user_irq)
+);
+
+endmodule	// user_project_wrapper
+
+`default_nettype wire
diff --git a/verilog/rtl/veri_bellegi_sram.v b/verilog/rtl/veri_bellegi_sram.v
new file mode 100644
index 0000000..221d821
--- /dev/null
+++ b/verilog/rtl/veri_bellegi_sram.v
@@ -0,0 +1,41 @@
+`timescale 1ns / 1ps
+
+// Tek RW portlu SRAM bellegi modeller
+
+module veri_bellegi_sram
+(
+    input           [12:0]                          addra                   ,
+    input                                           clka                    ,
+    input           [31:0]                          dina                    ,
+    input                                           ena                     ,
+    input           [3:0]                           wea                     ,
+
+    output          [31:0]                          douta                   ,
+
+   // To SRAM outside c0's macro
+    output                                          csb0                    ,
+    output                                          web0                    ,
+    output          [3:0]                           wmask0                  ,
+    output          [12:0]                          addr0                   ,
+    output          [31:0]                          din0                    ,
+    input           [31:0]                          dout0                   ,
+
+    output                                          csb1                    ,
+    output          [12:0]                          addr1                   ,
+    input           [31:0]                          dout1                         
+
+);
+
+    assign      csb0        =           ~(ena&(|wea))       ;
+    assign      web0        =           ~(|wea)             ;
+    assign      wmask0      =           wea                 ;
+    
+    assign      addr0       =           addra               ;
+    assign      din0        =           dina                ;
+    //assign      dout0       =           32'b0           ;
+
+    assign      csb1        =           ~(ena&(~(|wea)))    ;
+    assign      addr1       =           addra               ;
+    assign      douta       =           dout1               ;
+
+endmodule
diff --git a/verilog/rtl/yazmac_obegi.v b/verilog/rtl/yazmac_obegi.v
new file mode 100644
index 0000000..3f0c6b9
--- /dev/null
+++ b/verilog/rtl/yazmac_obegi.v
@@ -0,0 +1,54 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+module yazmac_obegi(
+    `ifdef BASYS3
+    output        [15:0]            fpga_demo_signal            ,
+    `endif
+
+    input                           clk_g                       ,
+    input                           rst_g                       ,
+    input         [`HY_BIT-1:0]     ky1_adres_g                 ,
+    input         [`HY_BIT-1:0]     ky2_adres_g                 ,
+    input         [`HY_BIT-1:0]     hy_adres_g                  ,
+    input         [31:0]            hy_deger_g                  ,
+    input                           yaz_g                       ,
+    output reg    [31:0]            ky1_deger_c                 ,
+    output reg    [31:0]            ky2_deger_c
+    );
+    
+    reg           [31:0]    y_obek[31:0]                        ;
+    
+    `ifdef BASYS3
+    // FPGA DEMO for RISCV tests
+    assign fpga_demo_signal = {y_obek[10][7:0], y_obek[17][7:0]};
+    `endif
+
+    always@* begin
+        ky1_deger_c            = y_obek[ky1_adres_g]            ;
+        ky2_deger_c            = y_obek[ky2_adres_g]            ;
+    end
+    integer i = 0;
+    always@(posedge clk_g) begin
+        if (rst_g) begin
+            for(i = 0; i < 32; i = i + 1)
+                y_obek[i]           <=  0                           ;
+        end
+        else if(yaz_g) begin
+            y_obek[hy_adres_g]  <=  hy_deger_g                  ;
+        end
+    end
+endmodule
diff --git a/verilog/rtl/yazmac_oku_yurut.v b/verilog/rtl/yazmac_oku_yurut.v
new file mode 100644
index 0000000..3f9da65
--- /dev/null
+++ b/verilog/rtl/yazmac_oku_yurut.v
@@ -0,0 +1,487 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+////////////////////////////////////////////////////////////////////////////////////////
+//**************TODO:**********************
+//+Testbench yazimi
+//+MRET???
+////////////////////////////////////////////////////////////////////////////////////////
+
+`ifndef GL_RTL_SIM
+`include "sabitler.vh"
+`include "mikroislem.vh"
+`endif
+
+module yazmac_oku_yurut
+    (
+    input                               clk_g                                                            ,
+    input                               rst_g                                                            ,
+    input        [`UIS_BIT - 1:0]       gc_uis_g                                                         ,  
+    input        [31:0]                 oku_veri_g                                                       ,
+    input                               oku_veri_gecerli_g                                               ,
+    
+    input        [31:0]                 yo_ky1_veri_g                                                    ,
+    input        [31:0]                 yo_ky2_veri_g                                                    ,
+    input        [31:0]                 ddy_oku_veri_g                                                   ,
+    input                               bellek_hazir_g                                                   ,
+
+
+    output       [`UIS_BIT - 1:0]       yoy_uis_c                                                        , 
+    output                              oku_gecerli_c                                                    ,
+    output reg                          gc_duraklat_c                                                    ,
+    output reg   [31:0]                 siradaki_ps_c                                                    ,
+    output reg   [`ODD_BIT-1:0]         yoy_odd_kod_c                                                    , 
+    output reg                          yoy_odd_c                                                        ,
+    output reg   [31:0]                 yoy_odd_ps_c                                                     ,
+    output reg   [31:0]                 yoy_odd_adres_c                                                  ,
+    output reg                          gc_bosalt_c                                                      ,
+    output       [31:0]                 yaz_veri_c                                                       ,
+    output       [3:0]                  yaz_veri_maske_c                                                 ,
+    output                              yaz_gecerli_c                                                    ,
+    output       [31:0]                 adres_c                                                          , 
+    output reg   [4:0]                  yo_ky1_adres_c                                                   ,
+    output reg   [4:0]                  yo_ky2_adres_c                                                   ,                                  
+    output                              ddy_oku_gecerli_c                                                ,
+    output       [11:0]                 ddy_oku_adres_c                                              
+
+    );
+
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////*************************************uis ayirma***********************************************////
+    wire                                     gecerli_w         = gc_uis_g[`GECERLI]                      ;
+    wire         [`YURUT_KODU_BIT - 1: 0]    yurut_kodu_w      = gc_uis_g[`YURUT_KODU+:`YURUT_KODU_BIT]  ;
+    wire         [`ISLEV_KODU_BIT - 1: 0]    islev_kodu_w      = gc_uis_g[`ISLEV_KODU+:`ISLEV_KODU_BIT]  ;
+    wire         [`IS1_SEC_BIT - 1: 0]       is1_sec           = gc_uis_g[`IS1_SEC+:`IS1_SEC_BIT]        ;
+    wire         [`IS2_SEC_BIT - 1: 0]       is2_sec           = gc_uis_g[`IS2_SEC+:`IS2_SEC_BIT]        ;
+    wire         [`ANLIK_DEGER_BIT - 1: 0]   anlik_deger_w     = gc_uis_g[`ANLIK_DEGER+:`ANLIK_DEGER_BIT];
+    wire         [`KY1_BIT - 1: 0]           ky1_w             = gc_uis_g[`KY1+:`KY1_BIT]                ;
+    wire         [`KY2_BIT - 1: 0]           ky2_w             = gc_uis_g[`KY2+:`KY2_BIT]                ;
+    wire         [`BELLEK_BUYRUGU_BIT - 1: 0] bellek_buyrugu   = {gc_uis_g[`YUKLE_BUYRUGU],
+                                                                  gc_uis_g[`KAYDET_BUYRUGU],
+                                                                  gc_uis_g[`FENCE_BUYRUGU]};
+    wire         [`BELLEK_TURU_BIT - 1: 0]   bellek_turu       = {gc_uis_g[`BELLEK_TURU_W],
+                                                                  gc_uis_g[`BELLEK_TURU_HW],
+                                                                  gc_uis_g[`BELLEK_TURU_B]};
+    wire                                     bellek_isaretli_w = gc_uis_g[`BELLEK_ISARETLI]              ;
+    wire         [`HY_BIT - 1: 0]            hy_w              = gc_uis_g[`HY+:`HY_BIT]                  ;
+    wire         [`PS_BIT - 1: 0]            ps_w              = gc_uis_g[`PS+:`PS_BIT]                  ;
+    wire         [`DDY_ADRES_BIT - 1: 0]     ddy_adres_w       = gc_uis_g[`DDY_ADRES+:`DDY_ADRES_BIT]    ;
+    wire         [`DDY_ANLIK_BIT - 1: 0]     ddy_anlik_w       = gc_uis_g[`DDY_ANLIK+:`DDY_ANLIK_BIT]    ;
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+    
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////***********************************uis birlestirme********************************************////
+
+    reg          [`UIS_BIT - 1: 0]           yoy_uis_r                                                   ;
+    reg          [`UIS_BIT - 1: 0]           yoy_uis_sonraki_r                                           ;
+    
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////********************************Degisken tanimlamalari****************************************////
+    //Islec1 ve Islec2 icin yazmac tanimlamalari
+    reg          [31:0]                      is1_sec_r      =0                                             ; 
+    reg          [31:0]                      is2_sec_r      =0                                             ;
+ 
+    //YOY asamasinda guncellenecek uop bitleri icin yazmac tanimlamalari
+    //Hedef yazmacina yazma yapilacagi durumda -> 1, d.d. -> 0
+    reg                                      yazmac_yaz_r    =0                                             ;     
+    //Islem sonucunun yazilacagi yazmac
+    reg          [31:0]                      hy_deger_r      =0                                            ; 
+    // DDBye yazma yapilacagi durumda 1 
+    reg                                      ddy_yaz_r       =0                                            ;
+    reg                                      ddy_oku_r       =0                                            ;
+    reg          [31:0]                      ddy_yaz_veri_r  =0                                            ;
+
+                                   
+                                                     
+    //Cagirilan moduller icin degisken tanimlamalari
+    //AMB'de yapilan islemin sonucu
+    wire         [31:0]                      amb_sonuc_w                                                 ; 
+    // JAL ve JALR buyruklari icin hedef yazmaci degeri
+    wire         [31:0]                      jal_sonuc_w                                                 ;
+    //Dallanma buyruklari icin atliyorsa 1'b1, atlamiyorsa 1'b0 veren cikis
+    wire                                     db_sonuc_w                                                  ;
+    //DB'de guncellenmis program sayaci cikisi
+    wire         [31:0]                      siradaki_ps_db_w                                            ;
+    //TCB icin durum sinyalleri
+    
+    reg                                      tcb_hazir_r      =0                                           ;
+    wire                                     tcb_bitti_w                                                 ;
+    wire         [31:0]                      tcb_sonuc_w                                                 ;
+    reg                                      tcb_mesgul_r         = 0                                ;
+    reg                                      tcb_mesgul_sonraki_r = 0  ;
+    //TBB icin durum ve sonuc sinyalleri
+    reg                                      tbb_hazir_r      =0                                         ;
+    wire                                     tbb_bitti_w                                                 ;
+    wire         [31:0]                      tbb_sonuc_w                                                 ;
+    reg                                      tbb_mesgul_r         = 0                                ;
+    reg                                      tbb_mesgul_sonraki_r = 0  ;
+    //BIB icin durum sinyalleri
+    wire         [31:0]                      oku_veri_bib_w                                              ;
+    wire                                     bib_bitti_w                                                 ;
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////*************************************Modul Cagirma********************************************////
+    aritmetik_mantik_birimi amb_unit (
+                 //Girisler
+                 .islev_kodu_g             (islev_kodu_w)      ,
+                 .islec1_g                 (is1_sec_r)         ,
+                 .islec2_g                 (is2_sec_r)         ,
+                 //Cikislar
+                 .sonuc_c                  (amb_sonuc_w)
+                 );
+                 
+    dallanma_birimi db(
+                 //Girisler                 
+                 .islev_kodu_g             (islev_kodu_w[7:0]) ,
+                 .ps_g                     (ps_w)              ,
+                 .islec1_g                 (is1_sec_r)         ,
+                 .islec2_g                 (is2_sec_r)         ,
+                 .anlik_g                  (anlik_deger_w)     ,
+                 //Cikislar
+                 .jal_sonuc_c              (jal_sonuc_w)       ,
+                 .dallanma_sonuc_c         (db_sonuc_w)        ,
+                 .ps_c                     (siradaki_ps_db_w)
+                 );
+
+   tamsayi_carpma_birimi tcb_unit (
+                //Girisler                
+                .clk_g                    (clk_g)             ,
+                .rst_g                    (rst_g)             ,
+                .islev_kodu_g             (islev_kodu_w[3:0]) ,
+                .islec1_g                 (is1_sec_r)         ,
+                .islec2_g                 (is2_sec_r)         ,
+                .hazir_g                  (tcb_hazir_r)       ,
+                //Cikislar
+                .bitti_c                  (tcb_bitti_w)       ,
+                .sonuc_c                  (tcb_sonuc_w)
+                );
+
+   tamsayi_bolme_birimi tbb_unit (
+                //Girisler                
+                .clk_g                    (clk_g)             ,
+                .rst_g                    (rst_g)             ,
+                .islev_kodu_g             (islev_kodu_w[3:0]) ,
+                .islec1_g                 (is1_sec_r)         ,
+                .islec2_g                 (is2_sec_r)         ,
+                .hazir_g                  (tbb_hazir_r)       ,
+                //Cikislar
+                .bitti_c                  (tbb_bitti_w)       ,
+                .sonuc_c                  (tbb_sonuc_w)
+                );
+
+    bellek_islem_birimi bib_unit (
+                 //Girisler
+                 .clk_g                     (clk_g)            ,  
+                 .rst_g                     (rst_g)            ,  
+                 .bellek_buyrugu            (bellek_buyrugu)   , 
+                 .islec1_g                  (is1_sec_r)        ,
+                 .islec2_g                  (is2_sec_r)        ,
+                 .anlik_g                   (anlik_deger_w)    ,
+                 .bellek_isaretli           (bellek_isaretli_w),
+                 .bellek_turu               (bellek_turu)      ,
+                 .bellek_hazir_g            (bellek_hazir_g)   ,
+                 .oku_veri_g                (oku_veri_g)       ,
+                 .oku_veri_gecerli_g        (oku_veri_gecerli_g)  ,
+                 //Cikislar
+                 .bitti_c                   (bib_bitti_w)      ,
+                 .oku_veri_c                (oku_veri_bib_w)   ,
+                 .adres_bib_c               (adres_c)          ,
+                 .oku_gecerli_bib_c         (oku_gecerli_c)    ,
+                 .yaz_gecerli_bib_c         (yaz_gecerli_c)    ,
+                 .yaz_veri_bib_c            (yaz_veri_c)       ,
+                 .yaz_veri_bib_maske_c      (yaz_veri_maske_c)
+                 );
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    assign                                   yoy_uis_c         = yoy_uis_r                               ;
+    // Atb: DDB'ye giden cikis sinyalleri
+    assign       ddy_oku_adres_c        =    ddy_adres_w                                                 ;                                                 
+    assign       ddy_oku_gecerli_c      =    ddy_oku_r                                                   ;                                                 
+        
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////*************************************Birlesik Devre*******************************************////
+    always@* begin
+        yoy_odd_adres_c         = 0             ; // TODO duzelt
+        tcb_mesgul_sonraki_r = tcb_mesgul_r;
+        tbb_mesgul_sonraki_r = tbb_mesgul_r;
+        siradaki_ps_c           = ps_w          ;
+        ddy_yaz_r               = `LOW          ;
+        yazmac_yaz_r            = `LOW          ;
+        yoy_odd_c               = `LOW          ;
+        //Yazmac obegine gonderilec ek kaynak yazmaclarinin adresleri
+        // 1.kaynak-yazmac adresinin yazmac obegine gonderilmesi
+        yo_ky1_adres_c          = ky1_w         ;
+        // 2.kaynak-yazmac adresinin yazmac obegine gonderilmesi
+        yo_ky2_adres_c          = ky2_w         ; 
+        
+        ddy_oku_r               = `LOW          ;
+        //yoy_uis_sonraki_r       = yoy_uis_r   ;
+        yoy_uis_sonraki_r       = gc_uis_g      ;
+
+        yoy_odd_ps_c            = ps_w          ;  
+
+        gc_duraklat_c           = `LOW          ;
+        gc_bosalt_c             = `LOW          ;
+        
+        // Inferred latchleri onlemek icin
+        // is2_sec_r               = 0             ;
+        // is1_sec_r               = 0             ;
+        yoy_odd_kod_c           = 0             ;
+        ddy_yaz_veri_r          = 0             ;
+        hy_deger_r              = 0             ;
+        tcb_hazir_r             = `LOW          ;
+        tbb_hazir_r             = `LOW          ;
+
+        if(gecerli_w) begin
+
+            //Islec1 Secimi
+            case(is1_sec) 
+                //Islec1 -> Kaynak Yazmaci 
+                `IS1_SEC_KY1: begin
+                //(bir onceki buyruktaki hedef yazmaci mi okunacak?)
+                    if((ky1_w == yoy_uis_c[`HY+:`HY_BIT]) 
+                            && yoy_uis_c[`GECERLI] && yoy_uis_c[`HY_YAZ] 
+                            && yoy_uis_c[`HY+:`HY_BIT] != 5'b0)
+                        is1_sec_r = yoy_uis_c[`HY_DEGER+:`HY_DEGER_BIT]       ;
+                    else 
+                        is1_sec_r = yo_ky1_veri_g                             ;
+                end
+                //Islec1 -> Program sayac
+                `IS1_SEC_PS : is1_sec_r    = ps_w                             ;
+                //Islec1 -> 
+                `IS1_SEC_0  : is1_sec_r    = 0                                ;
+                default     : is1_sec_r               = 0             ;
+            endcase
+            
+            // Islec2 Secimi
+            case(is2_sec) 
+                //Islec2 -> Kaynak Yazmaci 
+                `IS2_SEC_KY2: begin 
+                //(bir onceki buyruktaki hedef yazmaci mi okunacak?)
+                    if((ky2_w == yoy_uis_c[`HY+:`HY_BIT])
+                            && yoy_uis_c[`GECERLI] && yoy_uis_c[`HY_YAZ]
+                            && yoy_uis_c[`HY+:`HY_BIT] != 5'b0)
+                        is2_sec_r = yoy_uis_c[`HY_DEGER+:`HY_DEGER_BIT]       ;
+                    else 
+                        is2_sec_r = yo_ky2_veri_g                             ;      
+                 end
+                //Islec2 -> Anlik Deger
+                `IS2_SEC_AD    : is2_sec_r   = anlik_deger_w                  ;
+                //Islec2 ->
+                `IS2_SEC_4     : is2_sec_r   = 4                              ; 
+                //Islec2 ->
+                `IS2_SEC_0     : is2_sec_r   = 0                              ; 
+                //Islec2 -> CSR anlik dege
+                `IS2_SEC_CSR_AD: is2_sec_r   = 0                              ;
+                default: is2_sec_r               = 0             ;
+            endcase
+            // Yurutme asamasinda yapilacak islem secimi
+            case(yurut_kodu_w) 
+                // AMB islemi
+                `YURUT_KODU_AMB: begin 
+                    // Hedef yazmacina amb sonucu yazilacak deger
+                    hy_deger_r   = amb_sonuc_w;
+                    // Hedef yazmacina deger yazilacagini belirtmek icin 1'b1
+                    yazmac_yaz_r = 1'b1       ;
+                 end
+                 //DB islem
+                `YURUT_KODU_DB : begin 
+                    //Atlama buyruklari geldiyse
+                    if(islev_kodu_w == `JAL || islev_kodu_w == `JALR ) begin
+                        //Hedef yazmacina yazilacak deger
+                        hy_deger_r     = jal_sonuc_w     ;
+                        //Hedef yazmacina deger yazilacagini belirtmek icin 1'b1
+                        yazmac_yaz_r   = 1'b1            ;
+                        // Program sayaci guncelleme
+                        gc_bosalt_c    = 1'b1            ;
+                        if (siradaki_ps_db_w[1:0] != 2'b00)
+                        begin
+                            yoy_odd_ps_c        =   siradaki_ps_db_w;
+                            yoy_odd_c           =   `HIGH;
+                            yoy_odd_kod_c       =   `KDD_HBA; 
+                        end 
+                        else begin
+                            siradaki_ps_c  = siradaki_ps_db_w;
+                        end
+                    end
+                    //Dallanma buyruklari geldiyse
+                    else begin
+                        //Eger dallanma yanlis cozulduyse
+                        if(db_sonuc_w) begin
+                            //Boruhatiini bosaltma
+                            gc_bosalt_c                 =   1'b1            ;
+                            if (siradaki_ps_db_w[1:0] != 2'b00)
+                            begin
+                                yoy_odd_ps_c        =   siradaki_ps_db_w;
+                                yoy_odd_c           =   `HIGH;
+                                yoy_odd_kod_c       =   `KDD_HBA; 
+                            end 
+                            else begin
+                            // Program sayaci guncelleme
+                                siradaki_ps_c         = siradaki_ps_db_w;
+                            end
+                        end
+                    end
+                        
+                end    
+                // Bellek islemleri
+                `YURUT_KODU_BIB: begin 
+                    // Bellek islemleri bitene kadar boru hattini durdur
+                    gc_duraklat_c = ~bib_bitti_w; 
+                    case(bellek_buyrugu)
+                        `FENCE_b: begin
+                            //gc_bosalt_c = 1'b1;
+                        end
+                        `YUKLE_b: begin
+                            if(oku_veri_gecerli_g) begin
+                                hy_deger_r   = oku_veri_bib_w    ; 
+                                yazmac_yaz_r = 1'b1              ;
+                            end
+                            else gc_duraklat_c = `HIGH;
+   
+                        end
+                        `KAYDET_b: begin
+                            yazmac_yaz_r = 1'b0;
+                        end
+                    endcase
+                end
+                `YURUT_KODU_TCB: begin
+                    // Islem bitene kadar boruhattini durdur
+                    gc_duraklat_c = ~tcb_bitti_w;
+                     
+                     // Islem yapilmaya baslandiysa
+                    if(tcb_mesgul_r) begin 
+                        //Sadece tek cevrim 1'b1 degerini almali(bkz.tcb_unit)
+                        tcb_hazir_r = 1'b0;
+                    end
+                    else begin
+                        //Islem yapmaya baslamadiysa basla
+                        tcb_hazir_r              = 1'b1;
+                        //Yeni islem gonderilmesini engelle
+                        tcb_mesgul_sonraki_r = 1'b1;
+                    end
+                    // Islem tamamlandiysa
+                    if(tcb_bitti_w) begin
+                        //Hedef yazmacina islem sonucunu yaz
+                        hy_deger_r   = tcb_sonuc_w;
+                        yazmac_yaz_r = 1'b1       ;
+                        //Yeni islem almaya hazir hale getir
+                        tcb_mesgul_sonraki_r = 1'b0;
+                    end            
+                end
+                //TCB'nin aynisi
+                `YURUT_KODU_TBB: begin 
+                    gc_duraklat_c = ~tbb_bitti_w;
+                    if(tbb_mesgul_r) begin
+                        tbb_hazir_r = 1'b0;
+                    end
+                    else begin
+                        tbb_hazir_r               = 1'b1;
+                        tbb_mesgul_sonraki_r  = 1'b1;
+                    end
+                    if(tbb_bitti_w) begin
+                        hy_deger_r                = tbb_sonuc_w;
+                        yazmac_yaz_r              = 1'b1       ;
+                        tbb_mesgul_sonraki_r  = 1'b0       ;
+                    end            
+                end
+                `YURUT_KODU_CSR: begin
+                    gc_bosalt_c = 1'b1;
+                    siradaki_ps_c = ps_w + 32'd4;
+                    if (islev_kodu_w == `CSRRW || islev_kodu_w == `CSRRWI) begin
+                        ddy_yaz_r = 1'b1;
+                        ddy_yaz_veri_r = is1_sec_r;
+                        if(hy_w == 0) begin
+                            ddy_oku_r = 1'b0;
+                        end
+                        else begin
+                            ddy_oku_r = 1'b1;
+                            yazmac_yaz_r = 1'b1;
+                            hy_deger_r =  (islev_kodu_w == `CSRRW)  ?
+                                           ddy_oku_veri_g : ddy_anlik_w;              
+                        end
+                    end
+                    else if (islev_kodu_w == `CSRRS || islev_kodu_w == `CSRRSI) begin
+                        ddy_oku_r = 1'b1;
+                        yazmac_yaz_r = 1'b0;
+                        if(ky1_w != 'd0) begin
+                            ddy_yaz_r = 1'b1;
+                            ddy_yaz_veri_r =  (islev_kodu_w == `CSRRS) ?
+                                              (ddy_oku_veri_g == 32'b0 ? 32'b0 : is1_sec_r) :
+                                              (ddy_oku_veri_g == 32'b0 ? 32'b0 : ky1_w);
+                        end 
+                    end
+                    else if (islev_kodu_w == `CSRRC || islev_kodu_w == `CSRRCI) begin
+                         ddy_oku_r = 1'b1;
+                        yazmac_yaz_r = 1'b0;
+                        if (ddy_anlik_w != 'd0) begin
+                            ddy_yaz_r = 1'b1;
+                            ddy_yaz_veri_r = (islev_kodu_w == `CSRRC) ?
+                                               (ddy_oku_veri_g == 32'b0 ? 32'b0 : ~is1_sec_r) :
+                                               (ddy_oku_veri_g == 32'b0 ? 32'b0 : ~ky1_w);
+                        end
+                    end
+    
+                end // YURUT_KODU_CSR
+                `YURUT_KODU_SISTEM: begin
+                    gc_bosalt_c     =       `HIGH               ;
+                    if (islev_kodu_w == `MRET) begin
+                        yoy_odd_c               = `HIGH         ;
+                        yoy_odd_kod_c           = `KDD_MRET     ;
+                    end
+                    yazmac_yaz_r    =       `LOW                ;
+                    ddy_yaz_r       =       `LOW                ;
+                end
+            endcase
+            
+        yoy_uis_sonraki_r[`HY_YAZ]                      = yazmac_yaz_r;
+        yoy_uis_sonraki_r[`GECERLI]                     = ~gc_duraklat_c;
+        yoy_uis_sonraki_r[`DDY_YAZ]                     = ddy_yaz_r;
+        yoy_uis_sonraki_r[`HY_DEGER+:`HY_DEGER_BIT]     = hy_deger_r;  
+        yoy_uis_sonraki_r[`DDY_VERI+:`DDY_VERI_BIT]     = ddy_yaz_veri_r;
+        end // if gecerli  
+        else begin
+            is1_sec_r               = 0             ;
+            is2_sec_r               = 0             ;
+
+
+        end 
+    end
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+    
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////*************************************Sirali Devre*********************************************////
+
+    always@(posedge clk_g) begin
+        if (rst_g) begin
+            tbb_mesgul_r        <= `LOW;
+            tcb_mesgul_r        <= `LOW;
+            yoy_uis_r           <= 0;
+        end
+        else begin
+            tcb_mesgul_r <= tcb_mesgul_sonraki_r ;
+            tbb_mesgul_r <= tbb_mesgul_sonraki_r ;
+            yoy_uis_r    <= yoy_uis_sonraki_r    ;
+        end
+        
+    end
+    //////////////////////////////////////////////////////////////////////////////////////////////////////
+    
+endmodule
diff --git a/verilog/rtl/yazmac_yaz.v b/verilog/rtl/yazmac_yaz.v
new file mode 100644
index 0000000..11160dc
--- /dev/null
+++ b/verilog/rtl/yazmac_yaz.v
@@ -0,0 +1,69 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+// SPDX-License-Identifier: Apache-2.0
+`timescale 1ns / 1ps
+
+// mikroislem denetim 53. bit yazmaca_yaz
+// mikroislem denetim 21:52 hedef yazmacina yazilacak deger
+// mikroislem denetim 16:20 hedef yazmac tanimlayicisi
+
+//`define DEBUG_YAZMAC_YAZ
+`ifndef GL_RTL_SIM
+`include "sabitler.vh"
+`include "mikroislem.vh"
+`endif
+
+module yazmac_yaz(
+    `ifdef GL_RTL_SIM
+    output                  io_gecerli,
+    output [`PS_BIT-1:0]    io_ps,
+    `endif
+
+    input                                   clk_g                                                   ,
+    input         [`UIS_BIT - 1: 0]         yoy_uis_g                                               ,
+
+    output   reg                            yo_yaz_c                                                ,
+    output   reg  [`BUY_HY_BIT - 1: 0]      yo_yaz_hedef_c                                          ,
+    output   reg  [31: 0]                   yo_yaz_veri_c                                           ,
+    
+    output   reg                            ddy_yaz_c                                               ,
+    output   reg  [11: 0]                   ddy_yaz_hedef_c                                         ,
+    output   reg  [31: 0]                   ddy_yaz_veri_c      
+    );
+
+`ifdef DEBUG_YAZMAC_YAZ
+
+    wire                            gecerli        =    yoy_uis_g[`GECERLI]                                                         ;
+    wire        [`PS_BIT-1:0]       ps             =    yoy_uis_g[`PS +: `PS_BIT]                                                   ;
+    wire        [`HY_DEGER_BIT-1:0] hy_deger       =    yoy_uis_g[`HY_DEGER +: `HY_DEGER_BIT]                                       ;
+    wire        [`HY_BIT-1:0]       hy_adres       =    yoy_uis_g[`HY+:`HY_BIT];
+    wire                            hy_yaz         =    yoy_uis_g[`HY_YAZ];
+
+`endif
+
+`ifdef GL_RTL_SIM
+    assign io_gecerli        =    yoy_uis_g[`GECERLI]                                                         ;
+    assign io_ps             =    yoy_uis_g[`PS +: `PS_BIT]                                                   ;
+`endif
+
+    always @* begin
+        yo_yaz_c        =    yoy_uis_g[`GECERLI] && yoy_uis_g[`HY_YAZ] && (!yoy_uis_g[`HY+:`HY_BIT] == {`HY_BIT{1'b0}})   ;
+        yo_yaz_hedef_c  =    yoy_uis_g[`HY+:`HY_BIT]                                               ;
+        yo_yaz_veri_c   =    yoy_uis_g[`HY_DEGER+:`HY_DEGER_BIT]                                   ;
+
+        ddy_yaz_c       =    yoy_uis_g[`GECERLI] &&  yoy_uis_g[`DDY_YAZ]                                                   ;
+        ddy_yaz_hedef_c =    yoy_uis_g[`DDY_ADRES+:`DDY_ADRES_BIT]                                 ;
+        ddy_yaz_veri_c  =    yoy_uis_g[`DDY_VERI+:`DDY_VERI_BIT]                                    ;
+    end
+endmodule
\ No newline at end of file