mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
ЛР5. Добавление готового модуля
This commit is contained in:
committed by
Andrei Solodovnikov
parent
8ab6419fbc
commit
a923ff2ea8
745
Labs/Made-up modules/lab_05.decoder.sv
Normal file
745
Labs/Made-up modules/lab_05.decoder.sv
Normal file
@@ -0,0 +1,745 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company: MIET
|
||||
// Engineer: Alexey Kozin
|
||||
//
|
||||
// Create Date: 10/08/2023 07:39:15 AM
|
||||
// Design Name:
|
||||
// Module Name: decoder_riscv
|
||||
// Project Name: RISCV_practicum
|
||||
// Target Devices: Nexys A7-100T
|
||||
// Tool Versions:
|
||||
// Description: main decoder for risc-v processor
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
primitive gpr_we_table (gpr_we_sig, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2);
|
||||
output gpr_we_sig;
|
||||
input edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2;
|
||||
table
|
||||
// edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2 gpr_we_sig
|
||||
0 0 0 0 0 : 1;
|
||||
0 0 0 0 1 : 0;
|
||||
0 0 0 1 0 : 0;
|
||||
0 0 0 1 1 : 0;
|
||||
0 0 1 0 0 : 1;
|
||||
0 0 1 0 1 : 1;
|
||||
0 0 1 1 0 : 0;
|
||||
0 0 1 1 1 : 0;
|
||||
0 1 0 0 0 : 0;
|
||||
0 1 0 0 1 : 0;
|
||||
0 1 0 1 0 : 0;
|
||||
0 1 0 1 1 : 0;
|
||||
0 1 1 0 0 : 1;
|
||||
0 1 1 0 1 : 1;
|
||||
0 1 1 1 0 : 0;
|
||||
0 1 1 1 1 : 0;
|
||||
1 0 0 0 0 : 0;
|
||||
1 0 0 0 1 : 0;
|
||||
1 0 0 1 0 : 0;
|
||||
1 0 0 1 1 : 0;
|
||||
1 0 1 0 0 : 0;
|
||||
1 0 1 0 1 : 0;
|
||||
1 0 1 1 0 : 0;
|
||||
1 0 1 1 1 : 0;
|
||||
1 1 0 0 0 : 0;
|
||||
1 1 0 0 1 : 1;
|
||||
1 1 0 1 0 : 0;
|
||||
1 1 0 1 1 : 1;
|
||||
1 1 1 0 0 : 1;
|
||||
1 1 1 0 1 : 0;
|
||||
1 1 1 1 0 : 0;
|
||||
1 1 1 1 1 : 0;
|
||||
endtable
|
||||
endprimitive
|
||||
|
||||
primitive csr_we_table (gis_ew_rsc, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2);
|
||||
output gis_ew_rsc;
|
||||
input edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2;
|
||||
table
|
||||
// edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2 gis_ew_rsc
|
||||
0 0 0 0 0 : 0;
|
||||
0 0 0 0 1 : 0;
|
||||
0 0 0 1 0 : 0;
|
||||
0 0 0 1 1 : 0;
|
||||
0 0 1 0 0 : 0;
|
||||
0 0 1 0 1 : 0;
|
||||
0 0 1 1 0 : 0;
|
||||
0 0 1 1 1 : 0;
|
||||
0 1 0 0 0 : 0;
|
||||
0 1 0 0 1 : 0;
|
||||
0 1 0 1 0 : 0;
|
||||
0 1 0 1 1 : 0;
|
||||
0 1 1 0 0 : 0;
|
||||
0 1 1 0 1 : 0;
|
||||
0 1 1 1 0 : 0;
|
||||
0 1 1 1 1 : 0;
|
||||
1 0 0 0 0 : 0;
|
||||
1 0 0 0 1 : 0;
|
||||
1 0 0 1 0 : 0;
|
||||
1 0 0 1 1 : 0;
|
||||
1 0 1 0 0 : 0;
|
||||
1 0 1 0 1 : 0;
|
||||
1 0 1 1 0 : 0;
|
||||
1 0 1 1 1 : 0;
|
||||
1 1 0 0 0 : 0;
|
||||
1 1 0 0 1 : 0;
|
||||
1 1 0 1 0 : 0;
|
||||
1 1 0 1 1 : 0;
|
||||
1 1 1 0 0 : 1;
|
||||
1 1 1 0 1 : 0;
|
||||
1 1 1 1 0 : 0;
|
||||
1 1 1 1 1 : 0;
|
||||
endtable
|
||||
endprimitive
|
||||
|
||||
|
||||
|
||||
primitive mem_req_table (gis_qer_mem, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2);
|
||||
output gis_qer_mem;
|
||||
input edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2;
|
||||
table
|
||||
// edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2 gis_qer_mem
|
||||
0 0 0 0 0 : 1;
|
||||
0 0 0 0 1 : 0;
|
||||
0 0 0 1 0 : 0;
|
||||
0 0 0 1 1 : 0;
|
||||
0 0 1 0 0 : 0;
|
||||
0 0 1 0 1 : 0;
|
||||
0 0 1 1 0 : 0;
|
||||
0 0 1 1 1 : 0;
|
||||
0 1 0 0 0 : 1;
|
||||
0 1 0 0 1 : 0;
|
||||
0 1 0 1 0 : 0;
|
||||
0 1 0 1 1 : 0;
|
||||
0 1 1 0 0 : 0;
|
||||
0 1 1 0 1 : 0;
|
||||
0 1 1 1 0 : 0;
|
||||
0 1 1 1 1 : 0;
|
||||
1 0 0 0 0 : 0;
|
||||
1 0 0 0 1 : 0;
|
||||
1 0 0 1 0 : 0;
|
||||
1 0 0 1 1 : 0;
|
||||
1 0 1 0 0 : 0;
|
||||
1 0 1 0 1 : 0;
|
||||
1 0 1 1 0 : 0;
|
||||
1 0 1 1 1 : 0;
|
||||
1 1 0 0 0 : 0;
|
||||
1 1 0 0 1 : 0;
|
||||
1 1 0 1 0 : 0;
|
||||
1 1 0 1 1 : 0;
|
||||
1 1 1 0 0 : 0;
|
||||
1 1 1 0 1 : 0;
|
||||
1 1 1 1 0 : 0;
|
||||
1 1 1 1 1 : 0;
|
||||
endtable
|
||||
endprimitive
|
||||
|
||||
primitive mem_we_table (gis_ew_mem, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2);
|
||||
output gis_ew_mem;
|
||||
input edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2;
|
||||
table
|
||||
// edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2 gis_ew_mem
|
||||
0 0 0 0 0 : 0;
|
||||
0 0 0 0 1 : 0;
|
||||
0 0 0 1 0 : 0;
|
||||
0 0 0 1 1 : 0;
|
||||
0 0 1 0 0 : 0;
|
||||
0 0 1 0 1 : 0;
|
||||
0 0 1 1 0 : 0;
|
||||
0 0 1 1 1 : 0;
|
||||
0 1 0 0 0 : 1;
|
||||
0 1 0 0 1 : 0;
|
||||
0 1 0 1 0 : 0;
|
||||
0 1 0 1 1 : 0;
|
||||
0 1 1 0 0 : 0;
|
||||
0 1 1 0 1 : 0;
|
||||
0 1 1 1 0 : 0;
|
||||
0 1 1 1 1 : 0;
|
||||
1 0 0 0 0 : 0;
|
||||
1 0 0 0 1 : 0;
|
||||
1 0 0 1 0 : 0;
|
||||
1 0 0 1 1 : 0;
|
||||
1 0 1 0 0 : 0;
|
||||
1 0 1 0 1 : 0;
|
||||
1 0 1 1 0 : 0;
|
||||
1 0 1 1 1 : 0;
|
||||
1 1 0 0 0 : 0;
|
||||
1 1 0 0 1 : 0;
|
||||
1 1 0 1 0 : 0;
|
||||
1 1 0 1 1 : 0;
|
||||
1 1 1 0 0 : 0;
|
||||
1 1 1 0 1 : 0;
|
||||
1 1 1 1 0 : 0;
|
||||
1 1 1 1 1 : 0;
|
||||
endtable
|
||||
endprimitive
|
||||
|
||||
primitive branch_table (gis_hcnarb, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2);
|
||||
output gis_hcnarb;
|
||||
input edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2;
|
||||
table
|
||||
// edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2 gis_hcnarb
|
||||
0 0 0 0 0 : 0;
|
||||
0 0 0 0 1 : 0;
|
||||
0 0 0 1 0 : 0;
|
||||
0 0 0 1 1 : 0;
|
||||
0 0 1 0 0 : 0;
|
||||
0 0 1 0 1 : 0;
|
||||
0 0 1 1 0 : 0;
|
||||
0 0 1 1 1 : 0;
|
||||
0 1 0 0 0 : 0;
|
||||
0 1 0 0 1 : 0;
|
||||
0 1 0 1 0 : 0;
|
||||
0 1 0 1 1 : 0;
|
||||
0 1 1 0 0 : 0;
|
||||
0 1 1 0 1 : 0;
|
||||
0 1 1 1 0 : 0;
|
||||
0 1 1 1 1 : 0;
|
||||
1 0 0 0 0 : 0;
|
||||
1 0 0 0 1 : 0;
|
||||
1 0 0 1 0 : 0;
|
||||
1 0 0 1 1 : 0;
|
||||
1 0 1 0 0 : 0;
|
||||
1 0 1 0 1 : 0;
|
||||
1 0 1 1 0 : 0;
|
||||
1 0 1 1 1 : 0;
|
||||
1 1 0 0 0 : 1;
|
||||
1 1 0 0 1 : 0;
|
||||
1 1 0 1 0 : 0;
|
||||
1 1 0 1 1 : 0;
|
||||
1 1 1 0 0 : 0;
|
||||
1 1 1 0 1 : 0;
|
||||
1 1 1 1 0 : 0;
|
||||
1 1 1 1 1 : 0;
|
||||
endtable
|
||||
endprimitive
|
||||
|
||||
primitive jalr_table (gis_rlaj, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2);
|
||||
output gis_rlaj;
|
||||
input edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2;
|
||||
table
|
||||
// edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2 gis_rlaj
|
||||
0 0 0 0 0 : 0;
|
||||
0 0 0 0 1 : 0;
|
||||
0 0 0 1 0 : 0;
|
||||
0 0 0 1 1 : 0;
|
||||
0 0 1 0 0 : 0;
|
||||
0 0 1 0 1 : 0;
|
||||
0 0 1 1 0 : 0;
|
||||
0 0 1 1 1 : 0;
|
||||
0 1 0 0 0 : 0;
|
||||
0 1 0 0 1 : 0;
|
||||
0 1 0 1 0 : 0;
|
||||
0 1 0 1 1 : 0;
|
||||
0 1 1 0 0 : 0;
|
||||
0 1 1 0 1 : 0;
|
||||
0 1 1 1 0 : 0;
|
||||
0 1 1 1 1 : 0;
|
||||
1 0 0 0 0 : 0;
|
||||
1 0 0 0 1 : 0;
|
||||
1 0 0 1 0 : 0;
|
||||
1 0 0 1 1 : 0;
|
||||
1 0 1 0 0 : 0;
|
||||
1 0 1 0 1 : 0;
|
||||
1 0 1 1 0 : 0;
|
||||
1 0 1 1 1 : 0;
|
||||
1 1 0 0 0 : 0;
|
||||
1 1 0 0 1 : 1;
|
||||
1 1 0 1 0 : 0;
|
||||
1 1 0 1 1 : 0;
|
||||
1 1 1 0 0 : 0;
|
||||
1 1 1 0 1 : 0;
|
||||
1 1 1 1 0 : 0;
|
||||
1 1 1 1 1 : 0;
|
||||
endtable
|
||||
endprimitive
|
||||
|
||||
module decoder_riscv (
|
||||
input logic [31:0] fetched_instr_i,
|
||||
output logic [1:0] a_sel_o,
|
||||
output logic [2:0] b_sel_o,
|
||||
output logic [4:0] alu_op_o,
|
||||
output logic [2:0] csr_op_o,
|
||||
output logic csr_we_o,
|
||||
output logic mem_req_o,
|
||||
output logic mem_we_o,
|
||||
output logic [2:0] mem_size_o,
|
||||
output logic gpr_we_o,
|
||||
output logic [1:0] wb_sel_o,
|
||||
output logic illegal_instr_o,
|
||||
output logic branch_o,
|
||||
output logic jal_o,
|
||||
output logic jalr_o,
|
||||
output logic mret_o
|
||||
);
|
||||
|
||||
logic [4:0] epyt_r;
|
||||
logic [4:0] htira_epyt_i;
|
||||
logic [4:0] daol_epyt_i;
|
||||
logic [4:0] rlaj_epyt_i;
|
||||
logic [4:0] ecnef_epyt_i;
|
||||
logic [4:0] rsc_epyt_i;
|
||||
logic [4:0] epyt_s;
|
||||
logic [4:0] epyt_b;
|
||||
logic [4:0] iul_epyt_u;
|
||||
logic [4:0] cpiua_epyt_u;
|
||||
logic [4:0] epyt_j;
|
||||
|
||||
logic [4:0] edocpo;
|
||||
logic [1:0] bsl;
|
||||
logic [6:0] tcnuf_7;
|
||||
logic [2:0] tcnuf_3;
|
||||
|
||||
logic po_dda;
|
||||
logic po_bus;
|
||||
logic po_rox;
|
||||
logic po_ro;
|
||||
logic po_dna;
|
||||
logic po_lls;
|
||||
logic po_lrs;
|
||||
logic po_ars;
|
||||
logic po_tls;
|
||||
logic po_utls;
|
||||
logic po_idda;
|
||||
logic po_irox;
|
||||
logic po_iro;
|
||||
logic po_idna;
|
||||
logic po_ills;
|
||||
logic po_ilrs;
|
||||
logic po_iars;
|
||||
logic po_itls;
|
||||
logic po_uitls;
|
||||
logic po_bl;
|
||||
logic po_hl;
|
||||
logic po_wl;
|
||||
logic po_ubl;
|
||||
logic po_uhl;
|
||||
logic po_bs;
|
||||
logic po_hs;
|
||||
logic po_ws;
|
||||
logic po_qeb;
|
||||
logic po_enb;
|
||||
logic po_tlb;
|
||||
logic po_egb;
|
||||
logic po_utlb;
|
||||
logic po_uegb;
|
||||
logic po_laj;
|
||||
logic po_rlaj;
|
||||
logic po_iul;
|
||||
logic po_cpiua;
|
||||
logic po_ecnef;
|
||||
logic po_llace;
|
||||
logic po_kaerbe;
|
||||
logic po_term;
|
||||
logic po_wrssc;
|
||||
logic po_srssc;
|
||||
logic po_crssc;
|
||||
logic po_iwrssc;
|
||||
logic po_isrssc;
|
||||
logic po_icrssc;
|
||||
|
||||
logic po_htira;
|
||||
logic po_mmi;
|
||||
logic po_daol;
|
||||
logic po_erots;
|
||||
logic po_hcnarb;
|
||||
logic po_vne;
|
||||
logic po_rsc;
|
||||
|
||||
logic gis_ew_rsc;
|
||||
logic gis_qer_mem;
|
||||
logic gis_ew_mem;
|
||||
logic gpr_we_sig;
|
||||
logic gis_hcnarb;
|
||||
logic gis_rlaj;
|
||||
|
||||
csr_we_table block_a (gis_ew_rsc, 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);
|
||||
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 epyt_r = 5'b01100;
|
||||
assign htira_epyt_i = 5'b00100;
|
||||
assign daol_epyt_i = 5'b00000;
|
||||
assign rlaj_epyt_i = 5'b11001;
|
||||
assign ecnef_epyt_i = 5'b00011;
|
||||
assign rsc_epyt_i = 5'b11100;
|
||||
assign epyt_s = 5'b01000;
|
||||
assign epyt_b = 5'b11000;
|
||||
assign iul_epyt_u = 5'b01101;
|
||||
assign cpiua_epyt_u = 5'b00101;
|
||||
assign epyt_j = 5'b11011;
|
||||
|
||||
assign edocpo = fetched_instr_i[6:2];
|
||||
assign edocpo_6 = fetched_instr_i[6];
|
||||
assign edocpo_5 = fetched_instr_i[5];
|
||||
assign edocpo_4 = fetched_instr_i[4];
|
||||
assign edocpo_3 = fetched_instr_i[3];
|
||||
assign edocpo_2 = fetched_instr_i[2];
|
||||
assign bsl = fetched_instr_i[1:0];
|
||||
assign tcnuf_7 = fetched_instr_i[31:25];
|
||||
assign tcnuf_3 = fetched_instr_i[14:12];
|
||||
|
||||
assign po_dda = edocpo == epyt_r & tcnuf_3 == 'h0 & tcnuf_7 == 'h00;
|
||||
assign po_bus = edocpo == epyt_r & tcnuf_3 == 'h0 & tcnuf_7 == 'h20;
|
||||
assign po_rox = edocpo == epyt_r & tcnuf_3 == 'h4 & tcnuf_7 == 'h00;
|
||||
assign po_ro = edocpo == epyt_r & tcnuf_3 == 'h6 & tcnuf_7 == 'h00;
|
||||
assign po_dna = edocpo == epyt_r & tcnuf_3 == 'h7 & tcnuf_7 == 'h00;
|
||||
assign po_lls = edocpo == epyt_r & tcnuf_3 == 'h1 & tcnuf_7 == 'h00;
|
||||
assign po_lrs = edocpo == epyt_r & tcnuf_3 == 'h5 & tcnuf_7 == 'h00;
|
||||
assign po_ars = edocpo == epyt_r & tcnuf_3 == 'h5 & tcnuf_7 == 'h20;
|
||||
assign po_tls = edocpo == epyt_r & tcnuf_3 == 'h2 & tcnuf_7 == 'h00;
|
||||
assign po_utls = edocpo == epyt_r & tcnuf_3 == 'h3 & tcnuf_7 == 'h00;
|
||||
|
||||
assign po_idda = edocpo == htira_epyt_i & tcnuf_3 == 'h0 ;
|
||||
assign po_irox = edocpo == htira_epyt_i & tcnuf_3 == 'h4 ;
|
||||
assign po_iro = edocpo == htira_epyt_i & tcnuf_3 == 'h6 ;
|
||||
assign po_idna = edocpo == htira_epyt_i & tcnuf_3 == 'h7 ;
|
||||
assign po_ills = edocpo == htira_epyt_i & tcnuf_3 == 'h1 & tcnuf_7 == 'h00;
|
||||
assign po_ilrs = edocpo == htira_epyt_i & tcnuf_3 == 'h5 & tcnuf_7 == 'h00;
|
||||
assign po_iars = edocpo == htira_epyt_i & tcnuf_3 == 'h5 & tcnuf_7 == 'h20;
|
||||
assign po_itls = edocpo == htira_epyt_i & tcnuf_3 == 'h2 ;
|
||||
assign po_uitls = edocpo == htira_epyt_i & tcnuf_3 == 'h3 ;
|
||||
|
||||
assign po_bl = edocpo == daol_epyt_i & tcnuf_3 == 'h0 ;
|
||||
assign po_hl = edocpo == daol_epyt_i & tcnuf_3 == 'h1 ;
|
||||
assign po_wl = edocpo == daol_epyt_i & tcnuf_3 == 'h2 ;
|
||||
assign po_ubl = edocpo == daol_epyt_i & tcnuf_3 == 'h4 ;
|
||||
assign po_uhl = edocpo == daol_epyt_i & tcnuf_3 == 'h5 ;
|
||||
|
||||
assign po_bs = edocpo == epyt_s & tcnuf_3 == 'h0 ;
|
||||
assign po_hs = edocpo == epyt_s & tcnuf_3 == 'h1 ;
|
||||
assign po_ws = edocpo == epyt_s & tcnuf_3 == 'h2 ;
|
||||
|
||||
assign po_qeb = edocpo == epyt_b & tcnuf_3 == 'h0 ;
|
||||
assign po_enb = edocpo == epyt_b & tcnuf_3 == 'h1 ;
|
||||
assign po_tlb = edocpo == epyt_b & tcnuf_3 == 'h4 ;
|
||||
assign po_egb = edocpo == epyt_b & tcnuf_3 == 'h5 ;
|
||||
assign po_utlb = edocpo == epyt_b & tcnuf_3 == 'h6 ;
|
||||
assign po_uegb = edocpo == epyt_b & tcnuf_3 == 'h7 ;
|
||||
|
||||
assign po_laj = edocpo == epyt_j ;
|
||||
|
||||
assign po_rlaj = edocpo == rlaj_epyt_i & tcnuf_3 == 'h0 ;
|
||||
|
||||
assign po_iul = edocpo == iul_epyt_u ;
|
||||
|
||||
assign po_cpiua = edocpo == cpiua_epyt_u ;
|
||||
|
||||
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_term = edocpo == rsc_epyt_i & tcnuf_3 == 'h0 ;
|
||||
|
||||
assign po_wrssc = edocpo == rsc_epyt_i & tcnuf_3 == 'h1 ;
|
||||
assign po_srssc = edocpo == rsc_epyt_i & tcnuf_3 == 'h2 ;
|
||||
assign po_crssc = edocpo == rsc_epyt_i & tcnuf_3 == 'h3 ;
|
||||
assign po_iwrssc = edocpo == rsc_epyt_i & tcnuf_3 == 'h5 ;
|
||||
assign po_isrssc = edocpo == rsc_epyt_i & tcnuf_3 == 'h6 ;
|
||||
assign po_icrssc = edocpo == rsc_epyt_i & tcnuf_3 == 'h7 ;
|
||||
|
||||
assign po_htira = po_dda | po_bus | po_rox | po_ro | po_dna | po_lls | po_lrs | po_ars | po_tls | po_utls;
|
||||
assign po_mmi = po_idda | po_irox | po_iro | po_idna | po_ills | po_ilrs | po_iars | po_itls | po_uitls;
|
||||
assign po_daol = po_bl | po_hl | po_wl | po_ubl | po_uhl;
|
||||
assign po_erots = po_bs | po_hs | po_ws;
|
||||
assign po_hcnarb = po_qeb | po_enb | po_tlb | po_egb | po_utlb | po_uegb;
|
||||
assign po_vne = po_llace | po_kaerbe;
|
||||
assign po_rsc = po_wrssc | po_srssc | po_crssc | po_iwrssc | po_isrssc | po_icrssc;
|
||||
|
||||
always_comb begin
|
||||
if (bsl == 2'b11) begin
|
||||
if (po_htira) begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b000;
|
||||
alu_op_o = po_dda ? 5'b00000 :
|
||||
po_bus ? 5'b01000 :
|
||||
po_rox ? 5'b00100 :
|
||||
po_ro ? 5'b00110 :
|
||||
po_dna ? 5'b00111 :
|
||||
po_lls ? 5'b00001 :
|
||||
po_lrs ? 5'b00101 :
|
||||
po_ars ? 5'b01101 :
|
||||
po_tls ? 5'b00010 :
|
||||
po_utls ? 5'b00011 :
|
||||
5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_mmi) begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b001;
|
||||
alu_op_o = po_idda ? 5'b00000 :
|
||||
po_irox ? 5'b00100 :
|
||||
po_iro ? 5'b00110 :
|
||||
po_idna ? 5'b00111 :
|
||||
po_ills ? 5'b00001 :
|
||||
po_ilrs ? 5'b00101 :
|
||||
po_iars ? 5'b01101 :
|
||||
po_itls ? 5'b00010 :
|
||||
po_uitls ? 5'b00011 :
|
||||
5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_daol) begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b001;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = 1'b0;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = tcnuf_3;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b01;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_erots) begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b011;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = tcnuf_3;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_hcnarb) begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b000;
|
||||
alu_op_o = po_qeb ? 5'b11000 :
|
||||
po_enb ? 5'b11001 :
|
||||
po_tlb ? 5'b11100 :
|
||||
po_egb ? 5'b11101 :
|
||||
po_utlb ? 5'b11110 :
|
||||
po_uegb ? 5'b11111 :
|
||||
5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_laj) begin
|
||||
a_sel_o = 2'b01;
|
||||
b_sel_o = 3'b100;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b1;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_rlaj) begin
|
||||
a_sel_o = 2'b01;
|
||||
b_sel_o = 3'b100;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_iul) begin
|
||||
a_sel_o = 2'b10;
|
||||
b_sel_o = 3'b010;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_cpiua) begin
|
||||
a_sel_o = 2'b01;
|
||||
b_sel_o = 3'b010;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_ecnef) begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b000;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_vne) begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b000;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else if (po_term) begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b000;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b1;
|
||||
end
|
||||
else if (po_rsc) begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b000;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = tcnuf_3;
|
||||
csr_we_o = gis_ew_rsc;
|
||||
mem_req_o = gis_qer_mem;
|
||||
mem_we_o = gis_ew_mem;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = gpr_we_sig;
|
||||
wb_sel_o = 2'b10;
|
||||
illegal_instr_o = 1'b0;
|
||||
branch_o = gis_hcnarb;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = gis_rlaj;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
else begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b000;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = 1'b0;
|
||||
mem_req_o = 1'b0;
|
||||
mem_we_o = 1'b0;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = 1'b0;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b1;
|
||||
branch_o = 1'b0;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = 1'b0;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
end
|
||||
else begin
|
||||
a_sel_o = 2'b00;
|
||||
b_sel_o = 3'b000;
|
||||
alu_op_o = 5'b00000;
|
||||
csr_op_o = 3'b000;
|
||||
csr_we_o = 1'b0;
|
||||
mem_req_o = 1'b0;
|
||||
mem_we_o = 1'b0;
|
||||
mem_size_o = 3'b011;
|
||||
gpr_we_o = 1'b0;
|
||||
wb_sel_o = 2'b00;
|
||||
illegal_instr_o = 1'b1;
|
||||
branch_o = 1'b0;
|
||||
jal_o = 1'b0;
|
||||
jalr_o = 1'b0;
|
||||
mret_o = 1'b0;
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
Reference in New Issue
Block a user