//+FHDR-------------------------------------------------------------------------------------------------------- // Company: //----------------------------------------------------------------------------------------------------------------- // File Name : qbmcu.v // Department : // Author : PWY // Author's Tel : //----------------------------------------------------------------------------------------------------------------- // Relese History // Version Date Author Description // 0.1 2024-03-13 PWY The files to include all the macro defines //----------------------------------------------------------------------------------------------------------------- // Keywords : // //----------------------------------------------------------------------------------------------------------------- // Parameter // //----------------------------------------------------------------------------------------------------------------- // Purpose : // //----------------------------------------------------------------------------------------------------------------- // Target Device: // Tool versions: //----------------------------------------------------------------------------------------------------------------- // Reuse Issues // Reset Strategy: // Clock Domains: // Critical Timing: // Asynchronous I/F: // Synthesizable (y/n): // Other: //-FHDR-------------------------------------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// /////// ISA relevant macro // //system address width `define QBMCU_ADDR_SIZE 32 //PC width `define QBMCU_PC_SIZE 32 //system data width `define QBMCU_XLEN 32 //system instruction width `define QBMCU_INSTR_SIZE 32 //register array index bit width `define QBMCU_RFIDX_WIDTH 5 //number of register arrays `define QBMCU_RFREG_NUM 32 //base address of instruction memory //initial value of the program counter (PC) -> 0x0000_0000 `define QBMCU_ITCM_ADDR_BASE 32'h0000_0000 //base address of data memory `define QBMCU_DTCM_ADDR_BASE 32'h0010_0000 //data memory address width `define QBMCU_DTCM_ADDR_SIZE 15 //instruction memory address width `define QBMCU_ITCM_ADDR_SIZE 15 //BUS memory address width `define QBMCU_BUS_ADDR_SIZE 25 ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// /////// ALU relevant macro // `define QBMCU_ALU_ADDER_WIDTH (`QBMCU_XLEN+1) ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// /////// Decode relevant macro // `define QBMCU_DECINFO_GRP_WIDTH 3 `define QBMCU_DECINFO_GRP_ALU `QBMCU_DECINFO_GRP_WIDTH'd0 `define QBMCU_DECINFO_GRP_AGU `QBMCU_DECINFO_GRP_WIDTH'd1 `define QBMCU_DECINFO_GRP_BJP `QBMCU_DECINFO_GRP_WIDTH'd2 `define QBMCU_DECINFO_GRP_EXT `QBMCU_DECINFO_GRP_WIDTH'd3 `define QBMCU_DECINFO_GRP_LSB 0 `define QBMCU_DECINFO_GRP_MSB (`QBMCU_DECINFO_GRP_LSB+`QBMCU_DECINFO_GRP_WIDTH-1) `define QBMCU_DECINFO_GRP `QBMCU_DECINFO_GRP_MSB:`QBMCU_DECINFO_GRP_LSB `define QBMCU_DECINFO_RV32_LSB (`QBMCU_DECINFO_GRP_MSB+1) `define QBMCU_DECINFO_RV32_MSB (`QBMCU_DECINFO_RV32_LSB+1-1) `define QBMCU_DECINFO_RV32 `QBMCU_DECINFO_RV32_MSB:`QBMCU_DECINFO_RV32_LSB `define QBMCU_DECINFO_SUBDECINFO_LSB (`QBMCU_DECINFO_RV32_MSB+1) // ALU group `define QBMCU_DECINFO_ALU_ADD_LSB `QBMCU_DECINFO_SUBDECINFO_LSB `define QBMCU_DECINFO_ALU_ADD_MSB (`QBMCU_DECINFO_ALU_ADD_LSB+1-1) `define QBMCU_DECINFO_ALU_ADD `QBMCU_DECINFO_ALU_ADD_MSB :`QBMCU_DECINFO_ALU_ADD_LSB `define QBMCU_DECINFO_ALU_SUB_LSB (`QBMCU_DECINFO_ALU_ADD_MSB+1) `define QBMCU_DECINFO_ALU_SUB_MSB (`QBMCU_DECINFO_ALU_SUB_LSB+1-1) `define QBMCU_DECINFO_ALU_SUB `QBMCU_DECINFO_ALU_SUB_MSB :`QBMCU_DECINFO_ALU_SUB_LSB `define QBMCU_DECINFO_ALU_XOR_LSB (`QBMCU_DECINFO_ALU_SUB_MSB+1) `define QBMCU_DECINFO_ALU_XOR_MSB (`QBMCU_DECINFO_ALU_XOR_LSB+1-1) `define QBMCU_DECINFO_ALU_XOR `QBMCU_DECINFO_ALU_XOR_MSB :`QBMCU_DECINFO_ALU_XOR_LSB `define QBMCU_DECINFO_ALU_SLL_LSB (`QBMCU_DECINFO_ALU_XOR_MSB+1) `define QBMCU_DECINFO_ALU_SLL_MSB (`QBMCU_DECINFO_ALU_SLL_LSB+1-1) `define QBMCU_DECINFO_ALU_SLL `QBMCU_DECINFO_ALU_SLL_MSB :`QBMCU_DECINFO_ALU_SLL_LSB `define QBMCU_DECINFO_ALU_SRL_LSB (`QBMCU_DECINFO_ALU_SLL_MSB+1) `define QBMCU_DECINFO_ALU_SRL_MSB (`QBMCU_DECINFO_ALU_SRL_LSB+1-1) `define QBMCU_DECINFO_ALU_SRL `QBMCU_DECINFO_ALU_SRL_MSB :`QBMCU_DECINFO_ALU_SRL_LSB `define QBMCU_DECINFO_ALU_SRA_LSB (`QBMCU_DECINFO_ALU_SRL_MSB+1) `define QBMCU_DECINFO_ALU_SRA_MSB (`QBMCU_DECINFO_ALU_SRA_LSB+1-1) `define QBMCU_DECINFO_ALU_SRA `QBMCU_DECINFO_ALU_SRA_MSB :`QBMCU_DECINFO_ALU_SRA_LSB `define QBMCU_DECINFO_ALU_OR_LSB (`QBMCU_DECINFO_ALU_SRA_MSB+1) `define QBMCU_DECINFO_ALU_OR_MSB (`QBMCU_DECINFO_ALU_OR_LSB+1-1) `define QBMCU_DECINFO_ALU_OR `QBMCU_DECINFO_ALU_OR_MSB :`QBMCU_DECINFO_ALU_OR_LSB `define QBMCU_DECINFO_ALU_AND_LSB (`QBMCU_DECINFO_ALU_OR_MSB+1) `define QBMCU_DECINFO_ALU_AND_MSB (`QBMCU_DECINFO_ALU_AND_LSB+1-1) `define QBMCU_DECINFO_ALU_AND `QBMCU_DECINFO_ALU_AND_MSB :`QBMCU_DECINFO_ALU_AND_LSB `define QBMCU_DECINFO_ALU_SLT_LSB (`QBMCU_DECINFO_ALU_AND_MSB+1) `define QBMCU_DECINFO_ALU_SLT_MSB (`QBMCU_DECINFO_ALU_SLT_LSB+1-1) `define QBMCU_DECINFO_ALU_SLT `QBMCU_DECINFO_ALU_SLT_MSB :`QBMCU_DECINFO_ALU_SLT_LSB `define QBMCU_DECINFO_ALU_SLTU_LSB (`QBMCU_DECINFO_ALU_SLT_MSB+1) `define QBMCU_DECINFO_ALU_SLTU_MSB (`QBMCU_DECINFO_ALU_SLTU_LSB+1-1) `define QBMCU_DECINFO_ALU_SLTU `QBMCU_DECINFO_ALU_SLTU_MSB:`QBMCU_DECINFO_ALU_SLTU_LSB `define QBMCU_DECINFO_ALU_LUI_LSB (`QBMCU_DECINFO_ALU_SLTU_MSB+1) `define QBMCU_DECINFO_ALU_LUI_MSB (`QBMCU_DECINFO_ALU_LUI_LSB+1-1) `define QBMCU_DECINFO_ALU_LUI `QBMCU_DECINFO_ALU_LUI_MSB :`QBMCU_DECINFO_ALU_LUI_LSB `define QBMCU_DECINFO_ALU_OP2IMM_LSB (`QBMCU_DECINFO_ALU_LUI_MSB+1) `define QBMCU_DECINFO_ALU_OP2IMM_MSB (`QBMCU_DECINFO_ALU_OP2IMM_LSB+1-1) `define QBMCU_DECINFO_ALU_OP2IMM `QBMCU_DECINFO_ALU_OP2IMM_MSB :`QBMCU_DECINFO_ALU_OP2IMM_LSB `define QBMCU_DECINFO_ALU_OP1PC_LSB (`QBMCU_DECINFO_ALU_OP2IMM_MSB+1) `define QBMCU_DECINFO_ALU_OP1PC_MSB (`QBMCU_DECINFO_ALU_OP1PC_LSB+1-1) `define QBMCU_DECINFO_ALU_OP1PC `QBMCU_DECINFO_ALU_OP1PC_MSB :`QBMCU_DECINFO_ALU_OP1PC_LSB `define QBMCU_DECINFO_ALU_NOP_LSB (`QBMCU_DECINFO_ALU_OP1PC_MSB+1) `define QBMCU_DECINFO_ALU_NOP_MSB (`QBMCU_DECINFO_ALU_NOP_LSB+1-1) `define QBMCU_DECINFO_ALU_NOP `QBMCU_DECINFO_ALU_NOP_MSB :`QBMCU_DECINFO_ALU_NOP_LSB `define QBMCU_DECINFO_ALU_WIDTH (`QBMCU_DECINFO_ALU_NOP_MSB+1) //AGU group `define QBMCU_DECINFO_AGU_LOAD_LSB `QBMCU_DECINFO_SUBDECINFO_LSB `define QBMCU_DECINFO_AGU_LOAD_MSB (`QBMCU_DECINFO_AGU_LOAD_LSB+1-1) `define QBMCU_DECINFO_AGU_LOAD `QBMCU_DECINFO_AGU_LOAD_MSB :`QBMCU_DECINFO_AGU_LOAD_LSB `define QBMCU_DECINFO_AGU_STORE_LSB (`QBMCU_DECINFO_AGU_LOAD_MSB+1) `define QBMCU_DECINFO_AGU_STORE_MSB (`QBMCU_DECINFO_AGU_STORE_LSB+1-1) `define QBMCU_DECINFO_AGU_STORE `QBMCU_DECINFO_AGU_STORE_MSB :`QBMCU_DECINFO_AGU_STORE_LSB `define QBMCU_DECINFO_AGU_SIZE_LSB (`QBMCU_DECINFO_AGU_STORE_MSB+1) `define QBMCU_DECINFO_AGU_SIZE_MSB (`QBMCU_DECINFO_AGU_SIZE_LSB+2-1) `define QBMCU_DECINFO_AGU_SIZE `QBMCU_DECINFO_AGU_SIZE_MSB :`QBMCU_DECINFO_AGU_SIZE_LSB `define QBMCU_DECINFO_AGU_USIGN_LSB (`QBMCU_DECINFO_AGU_SIZE_MSB+1) `define QBMCU_DECINFO_AGU_USIGN_MSB (`QBMCU_DECINFO_AGU_USIGN_LSB+1-1) `define QBMCU_DECINFO_AGU_USIGN `QBMCU_DECINFO_AGU_USIGN_MSB :`QBMCU_DECINFO_AGU_USIGN_LSB `define QBMCU_DECINFO_AGU_OP2IMM_LSB (`QBMCU_DECINFO_AGU_USIGN_MSB+1) `define QBMCU_DECINFO_AGU_OP2IMM_MSB (`QBMCU_DECINFO_AGU_OP2IMM_LSB+1-1) `define QBMCU_DECINFO_AGU_OP2IMM `QBMCU_DECINFO_AGU_OP2IMM_MSB:`QBMCU_DECINFO_AGU_OP2IMM_LSB `define QBMCU_DECINFO_AGU_WIDTH (`QBMCU_DECINFO_AGU_OP2IMM_MSB+1) // Bxx group `define QBMCU_DECINFO_BJP_JUMP_LSB `QBMCU_DECINFO_SUBDECINFO_LSB `define QBMCU_DECINFO_BJP_JUMP_MSB (`QBMCU_DECINFO_BJP_JUMP_LSB+1-1) `define QBMCU_DECINFO_BJP_JUMP `QBMCU_DECINFO_BJP_JUMP_MSB :`QBMCU_DECINFO_BJP_JUMP_LSB `define QBMCU_DECINFO_BJP_BPRDT_LSB (`QBMCU_DECINFO_BJP_JUMP_MSB+1) `define QBMCU_DECINFO_BJP_BPRDT_MSB (`QBMCU_DECINFO_BJP_BPRDT_LSB+1-1) `define QBMCU_DECINFO_BJP_JALR `QBMCU_DECINFO_BJP_BPRDT_MSB:`QBMCU_DECINFO_BJP_BPRDT_LSB `define QBMCU_DECINFO_BJP_BEQ_LSB (`QBMCU_DECINFO_BJP_BPRDT_MSB+1) `define QBMCU_DECINFO_BJP_BEQ_MSB (`QBMCU_DECINFO_BJP_BEQ_LSB+1-1) `define QBMCU_DECINFO_BJP_BEQ `QBMCU_DECINFO_BJP_BEQ_MSB :`QBMCU_DECINFO_BJP_BEQ_LSB `define QBMCU_DECINFO_BJP_BNE_LSB (`QBMCU_DECINFO_BJP_BEQ_MSB+1) `define QBMCU_DECINFO_BJP_BNE_MSB (`QBMCU_DECINFO_BJP_BNE_LSB+1-1) `define QBMCU_DECINFO_BJP_BNE `QBMCU_DECINFO_BJP_BNE_MSB :`QBMCU_DECINFO_BJP_BNE_LSB `define QBMCU_DECINFO_BJP_BLT_LSB (`QBMCU_DECINFO_BJP_BNE_MSB+1) `define QBMCU_DECINFO_BJP_BLT_MSB (`QBMCU_DECINFO_BJP_BLT_LSB+1-1) `define QBMCU_DECINFO_BJP_BLT `QBMCU_DECINFO_BJP_BLT_MSB :`QBMCU_DECINFO_BJP_BLT_LSB `define QBMCU_DECINFO_BJP_BGT_LSB (`QBMCU_DECINFO_BJP_BLT_MSB+1) `define QBMCU_DECINFO_BJP_BGT_MSB (`QBMCU_DECINFO_BJP_BGT_LSB+1-1) `define QBMCU_DECINFO_BJP_BGT `QBMCU_DECINFO_BJP_BGT_MSB :`QBMCU_DECINFO_BJP_BGT_LSB `define QBMCU_DECINFO_BJP_BLTU_LSB (`QBMCU_DECINFO_BJP_BGT_MSB+1) `define QBMCU_DECINFO_BJP_BLTU_MSB (`QBMCU_DECINFO_BJP_BLTU_LSB+1-1) `define QBMCU_DECINFO_BJP_BLTU `QBMCU_DECINFO_BJP_BLTU_MSB :`QBMCU_DECINFO_BJP_BLTU_LSB `define QBMCU_DECINFO_BJP_BGTU_LSB (`QBMCU_DECINFO_BJP_BLTU_MSB+1) `define QBMCU_DECINFO_BJP_BGTU_MSB (`QBMCU_DECINFO_BJP_BGTU_LSB+1-1) `define QBMCU_DECINFO_BJP_BGTU `QBMCU_DECINFO_BJP_BGTU_MSB :`QBMCU_DECINFO_BJP_BGTU_LSB `define QBMCU_DECINFO_BJP_BXX_LSB (`QBMCU_DECINFO_BJP_BGTU_MSB+1) `define QBMCU_DECINFO_BJP_BXX_MSB (`QBMCU_DECINFO_BJP_BXX_LSB+1-1) `define QBMCU_DECINFO_BJP_BXX `QBMCU_DECINFO_BJP_BXX_MSB :`QBMCU_DECINFO_BJP_BXX_LSB `define QBMCU_DECINFO_BJP_WIDTH (`QBMCU_DECINFO_BJP_BXX_MSB+1) // EXT group `define QBMCU_DECINFO_EXT_WAIT_LSB `QBMCU_DECINFO_SUBDECINFO_LSB `define QBMCU_DECINFO_EXT_WAIT_MSB (`QBMCU_DECINFO_EXT_WAIT_LSB+1-1) `define QBMCU_DECINFO_EXT_WAIT `QBMCU_DECINFO_EXT_WAIT_MSB:`QBMCU_DECINFO_EXT_WAIT_LSB `define QBMCU_DECINFO_EXT_SEND_LSB (`QBMCU_DECINFO_EXT_WAIT_MSB+1) `define QBMCU_DECINFO_EXT_SEND_MSB (`QBMCU_DECINFO_EXT_SEND_LSB+1-1) `define QBMCU_DECINFO_EXT_SEND `QBMCU_DECINFO_EXT_SEND_MSB:`QBMCU_DECINFO_EXT_SEND_LSB `define QBMCU_DECINFO_EXT_SENDC_LSB (`QBMCU_DECINFO_EXT_SEND_MSB+1) `define QBMCU_DECINFO_EXT_SENDC_MSB (`QBMCU_DECINFO_EXT_SENDC_LSB+1-1) `define QBMCU_DECINFO_EXT_SENDC `QBMCU_DECINFO_EXT_SENDC_MSB:`QBMCU_DECINFO_EXT_SENDC_LSB `define QBMCU_DECINFO_EXT_EXIT_LSB (`QBMCU_DECINFO_EXT_SENDC_MSB+1) `define QBMCU_DECINFO_EXT_EXIT_MSB (`QBMCU_DECINFO_EXT_EXIT_LSB+1-1) `define QBMCU_DECINFO_EXT_EXIT `QBMCU_DECINFO_EXT_EXIT_MSB:`QBMCU_DECINFO_EXT_EXIT_LSB `define QBMCU_DECINFO_EXT_EXITI_LSB (`QBMCU_DECINFO_EXT_EXIT_MSB+1) `define QBMCU_DECINFO_EXT_EXITI_MSB (`QBMCU_DECINFO_EXT_EXITI_LSB+1-1) `define QBMCU_DECINFO_EXT_EXITI `QBMCU_DECINFO_EXT_EXITI_MSB:`QBMCU_DECINFO_EXT_EXITI_LSB `define QBMCU_DECINFO_EXT_OP2IMM_LSB (`QBMCU_DECINFO_EXT_EXITI_MSB+1) `define QBMCU_DECINFO_EXT_OP2IMM_MSB (`QBMCU_DECINFO_EXT_OP2IMM_LSB+1-1) `define QBMCU_DECINFO_EXT_OP2IMM `QBMCU_DECINFO_EXT_OP2IMM_MSB:`QBMCU_DECINFO_EXT_OP2IMM_LSB `define QBMCU_DECINFO_EXT_WIDTH (`QBMCU_DECINFO_EXT_OP2IMM_MSB+1) // Choose the longest group as the final DEC info width `define QBMCU_DECINFO_WIDTH (`QBMCU_DECINFO_ALU_WIDTH+1)