From 8d5e4687e8e3b224fcb71148fd9cbc3d1ead33f8 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Wed, 18 Oct 2023 17:39:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=B0=D0=B3=D0=BE=D0=B2=20=D0=B2=20?= =?UTF-8?q?=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BE=D0=BC=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D0=B5=20=D0=B4=D0=B5=D0=BA=D0=BE=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/Made-up modules/lab_05.decoder.sv | 114 +++++++++++++------------ 1 file changed, 59 insertions(+), 55 deletions(-) diff --git a/Labs/Made-up modules/lab_05.decoder.sv b/Labs/Made-up modules/lab_05.decoder.sv index 12357ec..d69d26e 100644 --- a/Labs/Made-up modules/lab_05.decoder.sv +++ b/Labs/Made-up modules/lab_05.decoder.sv @@ -1,4 +1,3 @@ -`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: MIET // Engineer: Alexey Kozin @@ -19,43 +18,43 @@ // ////////////////////////////////////////////////////////////////////////////////// -module gpr_we_table (gpr_we_sig, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); - output logic gpr_we_sig; +module gpr_we_table (gis_ew_rpg, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); + output logic gis_ew_rpg; input edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2; always_comb case({edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2}) - 5'b00000: gpr_we_sig = 1'b1; - 5'b00001: gpr_we_sig = 1'b0; - 5'b00010: gpr_we_sig = 1'b0; - 5'b00011: gpr_we_sig = 1'b0; - 5'b00100: gpr_we_sig = 1'b1; - 5'b00101: gpr_we_sig = 1'b1; - 5'b00110: gpr_we_sig = 1'b0; - 5'b00111: gpr_we_sig = 1'b0; - 5'b01000: gpr_we_sig = 1'b0; - 5'b01001: gpr_we_sig = 1'b0; - 5'b01010: gpr_we_sig = 1'b0; - 5'b01011: gpr_we_sig = 1'b0; - 5'b01100: gpr_we_sig = 1'b1; - 5'b01101: gpr_we_sig = 1'b1; - 5'b01110: gpr_we_sig = 1'b0; - 5'b01111: gpr_we_sig = 1'b0; - 5'b10000: gpr_we_sig = 1'b0; - 5'b10001: gpr_we_sig = 1'b0; - 5'b10010: gpr_we_sig = 1'b0; - 5'b10011: gpr_we_sig = 1'b0; - 5'b10100: gpr_we_sig = 1'b0; - 5'b10101: gpr_we_sig = 1'b0; - 5'b10110: gpr_we_sig = 1'b0; - 5'b10111: gpr_we_sig = 1'b0; - 5'b11000: gpr_we_sig = 1'b0; - 5'b11001: gpr_we_sig = 1'b1; - 5'b11010: gpr_we_sig = 1'b0; - 5'b11011: gpr_we_sig = 1'b1; - 5'b11100: gpr_we_sig = 1'b1; - 5'b11101: gpr_we_sig = 1'b0; - 5'b11110: gpr_we_sig = 1'b0; - 5'b11111: gpr_we_sig = 1'b0; + 5'b00000: gis_ew_rpg = 1'b1; + 5'b00001: gis_ew_rpg = 1'b0; + 5'b00010: gis_ew_rpg = 1'b0; + 5'b00011: gis_ew_rpg = 1'b0; + 5'b00100: gis_ew_rpg = 1'b1; + 5'b00101: gis_ew_rpg = 1'b1; + 5'b00110: gis_ew_rpg = 1'b0; + 5'b00111: gis_ew_rpg = 1'b0; + 5'b01000: gis_ew_rpg = 1'b0; + 5'b01001: gis_ew_rpg = 1'b0; + 5'b01010: gis_ew_rpg = 1'b0; + 5'b01011: gis_ew_rpg = 1'b0; + 5'b01100: gis_ew_rpg = 1'b1; + 5'b01101: gis_ew_rpg = 1'b1; + 5'b01110: gis_ew_rpg = 1'b0; + 5'b01111: gis_ew_rpg = 1'b0; + 5'b10000: gis_ew_rpg = 1'b0; + 5'b10001: gis_ew_rpg = 1'b0; + 5'b10010: gis_ew_rpg = 1'b0; + 5'b10011: gis_ew_rpg = 1'b0; + 5'b10100: gis_ew_rpg = 1'b0; + 5'b10101: gis_ew_rpg = 1'b0; + 5'b10110: gis_ew_rpg = 1'b0; + 5'b10111: gis_ew_rpg = 1'b0; + 5'b11000: gis_ew_rpg = 1'b0; + 5'b11001: gis_ew_rpg = 1'b1; + 5'b11010: gis_ew_rpg = 1'b0; + 5'b11011: gis_ew_rpg = 1'b1; + 5'b11100: gis_ew_rpg = 1'b1; + 5'b11101: gis_ew_rpg = 1'b0; + 5'b11110: gis_ew_rpg = 1'b0; + 5'b11111: gis_ew_rpg = 1'b0; endcase endmodule @@ -354,19 +353,24 @@ module decoder_riscv ( logic po_rsc; logic gis_ew_rsc; + logic gis_ew_rsc_erp; logic gis_qer_mem; logic gis_ew_mem; - logic gpr_we_sig; + logic gis_ew_rpg; + logic gis_ew_rpg_erp; logic gis_hcnarb; logic gis_rlaj; - csr_we_table block_a (gis_ew_rsc, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); + csr_we_table block_a (gis_ew_rsc_erp, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); mem_req_table block_b (gis_qer_mem, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); mem_we_table block_c (gis_ew_mem, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); - gpr_we_table block_d (gpr_we_sig, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); + gpr_we_table block_d (gis_ew_rpg_erp, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); branch_table block_e (gis_hcnarb, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); jalr_table block_f (gis_rlaj, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); + assign gis_ew_rsc = gis_ew_rsc_erp & !illegal_instr_o & !po_term; + assign gis_ew_rpg = gis_ew_rpg_erp & !illegal_instr_o & !po_term; + assign epyt_r = 5'b01100; assign htira_epyt_i = 5'b00100; assign daol_epyt_i = 5'b00000; @@ -437,10 +441,10 @@ module decoder_riscv ( assign po_ecnef = edocpo == ecnef_epyt_i & tcnuf_3 == 'h0 ; - assign po_llace = edocpo == rsc_epyt_i & tcnuf_3 == 'h0 & tcnuf_7 == 'h00; - assign po_kaerbe = edocpo == rsc_epyt_i & tcnuf_3 == 'h0 & tcnuf_7 == 'h01; + assign po_llace = fetched_instr_i == 32'h00000073; + assign po_kaerbe = fetched_instr_i == 32'h00100073; - assign po_term = edocpo == rsc_epyt_i & tcnuf_3 == 'h0 ; + assign po_term = fetched_instr_i == 32'h30200073; assign po_wrssc = edocpo == rsc_epyt_i & tcnuf_3 == 'h1 ; assign po_srssc = edocpo == rsc_epyt_i & tcnuf_3 == 'h2 ; @@ -478,7 +482,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -504,7 +508,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -521,7 +525,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = tcnuf_3; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b01; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -538,7 +542,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = tcnuf_3; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -561,7 +565,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -578,7 +582,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -595,7 +599,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -612,7 +616,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -629,7 +633,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -646,7 +650,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -663,9 +667,9 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; - illegal_instr_o = 1'b0; + illegal_instr_o = 1'b1; branch_o = gis_hcnarb; jal_o = 1'b0; jalr_o = gis_rlaj; @@ -680,7 +684,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b00; illegal_instr_o = 1'b0; branch_o = gis_hcnarb; @@ -697,7 +701,7 @@ module decoder_riscv ( mem_req_o = gis_qer_mem; mem_we_o = gis_ew_mem; mem_size_o = 3'b011; - gpr_we_o = gpr_we_sig; + gpr_we_o = gis_ew_rpg; wb_sel_o = 2'b10; illegal_instr_o = 1'b0; branch_o = gis_hcnarb;