SPI_Test/rtl/qubitmcu/qbmcu_datalock.v

69 lines
2.9 KiB
Verilog

//+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"