//+FHDR-------------------------------------------------------------------------------------------------------- // Company: //----------------------------------------------------------------------------------------------------------------- // File Name : qbmcu_datalatch.v // Department : // Author : PWY // Author's Tel : //----------------------------------------------------------------------------------------------------------------- // Relese History // Version Date Author Description // 0.1 2024-03-13 PWY The operation of latch and hold, eliminating invalid toggling to // reduce dynamic power consumption. //----------------------------------------------------------------------------------------------------------------- // Keywords : // //----------------------------------------------------------------------------------------------------------------- // Parameter // //----------------------------------------------------------------------------------------------------------------- // Purpose : // //----------------------------------------------------------------------------------------------------------------- // Target Device: // Tool versions: //----------------------------------------------------------------------------------------------------------------- // Reuse Issues // Reset Strategy: // Clock Domains: // Critical Timing: // Asynchronous I/F: // Synthesizable (y/n): // Other: //-FHDR-------------------------------------------------------------------------------------------------------- `include "qbmcu_defines.v" module qbmcu_datalatch #( parameter DECINFO_GRP_OP = `QBMCU_DECINFO_GRP_AGU ) ( input [`QBMCU_XLEN-1 :0] i_rs1 ,input [`QBMCU_XLEN-1 :0] i_rs2 ,input [`QBMCU_XLEN-1 :0] i_imm ,input [`QBMCU_DECINFO_WIDTH-1 :0] i_info ,input [`QBMCU_PC_SIZE-1 :0] i_pc ,input i_ilegl ,output [`QBMCU_XLEN-1 :0] o_rs1 ,output [`QBMCU_XLEN-1 :0] o_rs2 ,output [`QBMCU_XLEN-1 :0] o_imm ,output [`QBMCU_DECINFO_WIDTH-1 :0] o_info ,output [`QBMCU_PC_SIZE-1 :0] o_pc ,output o_op ); wire op = (~i_ilegl) & (i_info[`QBMCU_DECINFO_GRP] == DECINFO_GRP_OP); assign o_rs1 = {`QBMCU_XLEN {op}} & i_rs1 ; assign o_rs2 = {`QBMCU_XLEN {op}} & i_rs2 ; assign o_imm = {`QBMCU_XLEN {op}} & i_imm ; assign o_info = {`QBMCU_DECINFO_WIDTH{op}} & i_info ; assign o_pc = {`QBMCU_PC_SIZE {op}} & i_pc ; assign o_op = op; endmodule `include "qbmcu_undefines.v"