// SPDX-License-Identifier: Apache-2.0 // Copyright 2019 Western Digital Corporation or its affiliates. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. module dec_gpr_ctl #(parameter GPR_BANKS = 1, GPR_BANKS_LOG2 = 1) ( input logic active_clk, input logic [4:0] raddr0, // logical read addresses input logic [4:0] raddr1, input logic [4:0] raddr2, input logic [4:0] raddr3, input logic rden0, // read enables input logic rden1, input logic rden2, input logic rden3, input logic [4:0] waddr0, // logical write addresses input logic [4:0] waddr1, input logic [4:0] waddr2, input logic wen0, // write enables input logic wen1, input logic wen2, input logic [31:0] wd0, // write data input logic [31:0] wd1, input logic [31:0] wd2, input logic wen_bank_id, // write enable for banks input logic [GPR_BANKS_LOG2-1:0] wr_bank_id, // read enable for banks input logic clk, input logic rst_l, output logic [31:0] rd0, // read data output logic [31:0] rd1, output logic [31:0] rd2, output logic [31:0] rd3, input logic scan_mode ); logic [GPR_BANKS-1:0][31:1] [31:0] gpr_out; // 31 x 32 bit GPRs logic [31:1] [31:0] gpr_in; logic [31:1] w0v,w1v,w2v; logic [31:1] gpr_wr_en; logic [GPR_BANKS-1:0][31:1] gpr_bank_wr_en; logic [GPR_BANKS_LOG2-1:0] gpr_bank_id; //assign gpr_bank_id[GPR_BANKS_LOG2-1:0] = '0; rvdffs #(GPR_BANKS_LOG2) bankid_ff (.*, .clk(active_clk), .en(wen_bank_id), .din(wr_bank_id[GPR_BANKS_LOG2-1:0]), .dout(gpr_bank_id[GPR_BANKS_LOG2-1:0])); // GPR Write Enables for power savings assign gpr_wr_en[31:1] = (w0v[31:1] | w1v[31:1] | w2v[31:1]); for (genvar i=0; i