3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-02-07 06:44:18 +00:00
Brooklyn/arch/arm/mm/ID_Reg.v
2022-04-02 18:08:56 +05:00

82 lines
2.5 KiB
Verilog

`include "settings.h"
module ID_Reg
(
input clk,
input rst,
input flush,
input [`WORD_WIDTH-1:0] pc_in,
input [`WORD_WIDTH-1:0] instruction_in,
input [`REG_FILE_DEPTH-1:0] reg_file_dst_in,
input [`WORD_WIDTH-1:0] val_Rn_in, val_Rm_in,
input [`SIGNED_IMM_WIDTH-1:0] signed_immediate_in,
input [`SHIFTER_OPERAND_WIDTH-1:0] shifter_operand_in,
input [3:0] EX_command_in,
input [3:0] status_register_in,
input mem_read_in, mem_write_in,
WB_en_in,
Imm_in,
B_in,
SR_update_in,
input [`REG_FILE_DEPTH-1:0] reg_file_src1_in,
input [`REG_FILE_DEPTH-1:0] reg_file_src2_in,
output reg [`WORD_WIDTH-1:0] pc,
output reg [`WORD_WIDTH-1:0] instruction,
output reg [`REG_FILE_DEPTH-1:0] reg_file_dst_out,
output reg [`WORD_WIDTH-1:0] val_Rn_out, val_Rm_out,
output reg [`SIGNED_IMM_WIDTH-1:0] signed_immediate_out,
output reg [`SHIFTER_OPERAND_WIDTH-1:0] shifter_operand_out,
output reg [3:0] EX_command_out,
output reg [3:0] status_register_out,
output reg mem_read_out, mem_write_out,
WB_en_out,
Imm_out,
B_out,
SR_update_out,
output reg [`REG_FILE_DEPTH-1:0] reg_file_src1_out,
output reg [`REG_FILE_DEPTH-1:0] reg_file_src2_out
);
always @(posedge clk, posedge rst) begin
if (rst || flush) begin
pc <= 0;
instruction <= 0;
reg_file_dst_out <= 0;
val_Rn_out <= 0;
val_Rm_out <=0;
signed_immediate_out <= 0;
shifter_operand_out <= 0;
EX_command_out <= 0;
status_register_out <= 0;
mem_read_out <= 0;
mem_write_out <= 0;
WB_en_out <= 0;
Imm_out <= 0;
B_out <= 0;
SR_update_out <= 0;
reg_file_src1_out <= 0;
reg_file_src2_out <= 0;
end
else begin
pc <= pc_in;
instruction <= instruction_in;
reg_file_dst_out <= reg_file_dst_in;
val_Rn_out <= val_Rn_in;
val_Rm_out <= val_Rm_in;
signed_immediate_out <= signed_immediate_in;
shifter_operand_out <= shifter_operand_in;
EX_command_out <= EX_command_in;
status_register_out <= status_register_in;
mem_read_out <= mem_read_in;
mem_write_out <= mem_write_in;
WB_en_out <= WB_en_in;
Imm_out <= Imm_in;
B_out <= B_in;
SR_update_out <= SR_update_in;
reg_file_src1_out <= reg_file_src1_in;
reg_file_src2_out <= reg_file_src2_in;
end
end
endmodule