You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			1133 lines
		
	
	
		
			39 KiB
		
	
	
	
		
			Verilog
		
	
			
		
		
	
	
			1133 lines
		
	
	
		
			39 KiB
		
	
	
	
		
			Verilog
		
	
// © IBM Corp. 2020
 | 
						|
// Licensed under the Apache License, Version 2.0 (the "License"), as modified by
 | 
						|
// the terms below; you may not use the files in this repository except in
 | 
						|
// compliance with the License as modified.
 | 
						|
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
//
 | 
						|
// Modified Terms:
 | 
						|
//
 | 
						|
//    1) For the purpose of the patent license granted to you in Section 3 of the
 | 
						|
//    License, the "Work" hereby includes implementations of the work of authorship
 | 
						|
//    in physical form.
 | 
						|
//
 | 
						|
//    2) Notwithstanding any terms to the contrary in the License, any licenses
 | 
						|
//    necessary for implementation of the Work that are available from OpenPOWER
 | 
						|
//    via the Power ISA End User License Agreement (EULA) are explicitly excluded
 | 
						|
//    hereunder, and may be obtained from OpenPOWER under the terms and conditions
 | 
						|
//    of the EULA.
 | 
						|
//
 | 
						|
// Unless required by applicable law or agreed to in writing, the reference design
 | 
						|
// 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.
 | 
						|
//
 | 
						|
// Additional rights, including the ability to physically implement a softcore that
 | 
						|
// is compliant with the required sections of the Power ISA Specification, are
 | 
						|
// available at no cost under the terms of the OpenPOWER Power ISA EULA, which can be
 | 
						|
// obtained (along with the Power ISA) here: https://openpowerfoundation.org.
 | 
						|
 | 
						|
`timescale 1 ns / 1 ns
 | 
						|
 | 
						|
//  Description:  Register File Array
 | 
						|
//
 | 
						|
//*****************************************************************************
 | 
						|
 | 
						|
`include "tri_a2o.vh"
 | 
						|
 | 
						|
module xu_rf
 | 
						|
#(
 | 
						|
   parameter             PAR_WIDTH = 1,
 | 
						|
   parameter             WIDTH = 8,
 | 
						|
   parameter             POOL_ENC = 5,
 | 
						|
   parameter             POOL = 24,
 | 
						|
   parameter             RD_PORTS = 1,
 | 
						|
   parameter             WR_PORTS = 1,
 | 
						|
   parameter             BYPASS = 1
 | 
						|
)
 | 
						|
(
 | 
						|
   //-------------------------------------------------------------------
 | 
						|
   // Clocks & Power
 | 
						|
   //-------------------------------------------------------------------
 | 
						|
   (* pin_data="PIN_FUNCTION=/G_CLK/CAP_LIMIT=/99999/" *) // nclk
 | 
						|
   input [0:`NCLK_WIDTH-1] nclk,
 | 
						|
   inout                  vdd,
 | 
						|
   inout                  gnd,
 | 
						|
 | 
						|
   //-------------------------------------------------------------------
 | 
						|
   // Pervasive
 | 
						|
   //-------------------------------------------------------------------
 | 
						|
   input                 d_mode_dc,
 | 
						|
   input                 delay_lclkr_dc,
 | 
						|
   input                 mpw1_dc_b,
 | 
						|
   input                 mpw2_dc_b,
 | 
						|
   input                 func_sl_force,
 | 
						|
   input                 func_sl_thold_0_b,
 | 
						|
   input                 func_nsl_force,
 | 
						|
   input                 func_nsl_thold_0_b,
 | 
						|
   input                 sg_0,
 | 
						|
   input                 scan_in,
 | 
						|
   output                scan_out,
 | 
						|
 | 
						|
   //-------------------------------------------------------------------
 | 
						|
   // Read Ports
 | 
						|
   //-------------------------------------------------------------------
 | 
						|
   input                 r0e_e,
 | 
						|
   input                 r0e,
 | 
						|
   input [0:POOL_ENC-1]  r0a,
 | 
						|
   output [0:WIDTH-1]    r0d,
 | 
						|
 | 
						|
   input                 r1e_e,
 | 
						|
   input                 r1e,
 | 
						|
   input [0:POOL_ENC-1]  r1a,
 | 
						|
   output [0:WIDTH-1]    r1d,
 | 
						|
 | 
						|
   input                 r2e_e,
 | 
						|
   input                 r2e,
 | 
						|
   input [0:POOL_ENC-1]  r2a,
 | 
						|
   output [0:WIDTH-1]    r2d,
 | 
						|
 | 
						|
   input                 r3e_e,
 | 
						|
   input                 r3e,
 | 
						|
   input [0:POOL_ENC-1]  r3a,
 | 
						|
   output [0:WIDTH-1]    r3d,
 | 
						|
 | 
						|
   input                 r4e_e,
 | 
						|
   input                 r4e,
 | 
						|
   input [0:POOL_ENC-1]  r4a,
 | 
						|
   output [0:WIDTH-1]    r4d,
 | 
						|
 | 
						|
   //-------------------------------------------------------------------
 | 
						|
   // Write ports
 | 
						|
   //-------------------------------------------------------------------
 | 
						|
   input                 w0e_e,
 | 
						|
   input                 w0e,
 | 
						|
   input [0:POOL_ENC-1]  w0a,
 | 
						|
   input [0:WIDTH-1]     w0d,
 | 
						|
 | 
						|
   input                 w1e_e,
 | 
						|
   input                 w1e,
 | 
						|
   input [0:POOL_ENC-1]  w1a,
 | 
						|
   input [0:WIDTH-1]     w1d,
 | 
						|
 | 
						|
   input                 w2e_e,
 | 
						|
   input                 w2e,
 | 
						|
   input [0:POOL_ENC-1]  w2a,
 | 
						|
   input [0:WIDTH-1]     w2d,
 | 
						|
 | 
						|
   input                 w3e_e,
 | 
						|
   input                 w3e,
 | 
						|
   input [0:POOL_ENC-1]  w3a,
 | 
						|
   input [0:WIDTH-1]     w3d,
 | 
						|
 | 
						|
   input                 w4e_e,
 | 
						|
   input                 w4e,
 | 
						|
   input [0:POOL_ENC-1]  w4a,
 | 
						|
 | 
						|
   input [0:WIDTH-1]     w4d
 | 
						|
);
 | 
						|
 | 
						|
   localparam             USE_R0 = {31'b0,(RD_PORTS > 0)};
 | 
						|
   localparam             USE_R1 = {31'b0,(RD_PORTS > 1)};
 | 
						|
   localparam             USE_R2 = {31'b0,(RD_PORTS > 2)};
 | 
						|
   localparam             USE_R3 = {31'b0,(RD_PORTS > 3)};
 | 
						|
   localparam             USE_R4 = {31'b0,(RD_PORTS > 4)};
 | 
						|
   localparam             USE_W0 = {31'b0,(WR_PORTS > 0)};
 | 
						|
   localparam             USE_W1 = {31'b0,(WR_PORTS > 1)};
 | 
						|
   localparam             USE_W2 = {31'b0,(WR_PORTS > 2)};
 | 
						|
   localparam             USE_W3 = {31'b0,(WR_PORTS > 3)};
 | 
						|
   localparam             USE_W4 = {31'b0,(WR_PORTS > 4)};
 | 
						|
 | 
						|
   wire [0:WIDTH-1]              reg_q[0:POOL-1];
 | 
						|
 | 
						|
   reg [0:WIDTH-1]               reg_d[0:POOL-1]                                       ; // input=>par_d[r]   ,act=>reg_act[r]
 | 
						|
	wire                          r0e_q                                                 ; //  input=>r0e     ,act=>1'b1
 | 
						|
	wire [0:POOL_ENC-1]           r0a_q                                                 ; //  input=>r0a     ,act=>r0e_e
 | 
						|
	wire [0:WIDTH-1]              r0d_q,                     r0d_d                      ; //  input=>r0d     ,act=>r0e_q
 | 
						|
	wire                          r1e_q                                                 ; //  input=>r1e     ,act=>1'b1
 | 
						|
	wire [0:POOL_ENC-1]           r1a_q                                                 ; //  input=>r1a     ,act=>r1e_e
 | 
						|
	wire [0:WIDTH-1]              r1d_q,                     r1d_d                      ; //  input=>r1d     ,act=>r1e_q
 | 
						|
	wire                          r2e_q                                                 ; //  input=>r2e     ,act=>1'b1
 | 
						|
	wire [0:POOL_ENC-1]           r2a_q                                                 ; //  input=>r2a     ,act=>r2e_e
 | 
						|
	wire [0:WIDTH-1]              r2d_q,                     r2d_d                      ; //  input=>r2d     ,act=>r2e_q
 | 
						|
	wire                          r3e_q                                                 ; //  input=>r3e     ,act=>1'b1
 | 
						|
	wire [0:POOL_ENC-1]           r3a_q                                                 ; //  input=>r3a     ,act=>r3e_e
 | 
						|
	wire [0:WIDTH-1]              r3d_q,                     r3d_d                      ; //  input=>r3d     ,act=>r3e_q
 | 
						|
	wire                          r4e_q                                                 ; //  input=>r4e     ,act=>1'b1
 | 
						|
	wire [0:POOL_ENC-1]           r4a_q                                                 ; //  input=>r4a     ,act=>r4e_e
 | 
						|
	wire [0:WIDTH-1]              r4d_q,                     r4d_d                      ; //  input=>r4d     ,act=>r4e_q
 | 
						|
	wire                          w0e_q                                                 ; //  input=>w0e     ,act=>1'b1
 | 
						|
	wire [0:POOL_ENC-1]           w0a_q                                                 ; //  input=>w0a     ,act=>w0e_e
 | 
						|
	wire [0:WIDTH-1]              w0d_q                                                 ; //  input=>w0d     ,act=>w0e_e
 | 
						|
	wire                          w1e_q                                                 ; //  input=>w1e     ,act=>1'b1
 | 
						|
	wire [0:POOL_ENC-1]           w1a_q                                                 ; //  input=>w1a     ,act=>w1e_e
 | 
						|
	wire [0:WIDTH-1]              w1d_q                                                 ; //  input=>w1d     ,act=>w1e_e
 | 
						|
	wire                          w2e_q                                                 ; //  input=>w2e     ,act=>1'b1
 | 
						|
	wire [0:POOL_ENC-1]           w2a_q                                                 ; //  input=>w2a     ,act=>w2e_e
 | 
						|
	wire [0:WIDTH-1]              w2d_q                                                 ; //  input=>w2d     ,act=>w2e_e
 | 
						|
	wire                          w3e_q                                                 ; //  input=>w3e     ,act=>1'b1
 | 
						|
	wire [0:POOL_ENC-1]           w3a_q                                                 ; //  input=>w3a     ,act=>w3e_e
 | 
						|
	wire [0:WIDTH-1]              w3d_q                                                 ; //  input=>w3d     ,act=>w3e_e
 | 
						|
	wire                          w4e_q                                                 ; //  input=>w4e     ,act=>1'b1
 | 
						|
	wire [0:POOL_ENC-1]           w4a_q                                                 ; //  input=>w4a     ,act=>w4e_e
 | 
						|
	wire [0:WIDTH-1]              w4d_q                                                 ; //  input=>w4d     ,act=>w4e_e
 | 
						|
   // Scanchain
 | 
						|
   localparam             reg_offset = 0;
 | 
						|
   localparam             r0e_offset = reg_offset + WIDTH*POOL;
 | 
						|
   localparam             r0a_offset = r0e_offset + 1 * USE_R0;
 | 
						|
   localparam             r0d_offset = r0a_offset + POOL_ENC * USE_R0;
 | 
						|
   localparam             r1e_offset = r0d_offset + WIDTH * USE_R0;
 | 
						|
   localparam             r1a_offset = r1e_offset + 1 * USE_R1;
 | 
						|
   localparam             r1d_offset = r1a_offset + POOL_ENC * USE_R1;
 | 
						|
   localparam             r2e_offset = r1d_offset + WIDTH * USE_R1;
 | 
						|
   localparam             r2a_offset = r2e_offset + 1 * USE_R2;
 | 
						|
   localparam             r2d_offset = r2a_offset + POOL_ENC * USE_R2;
 | 
						|
   localparam             r3e_offset = r2d_offset + WIDTH * USE_R2;
 | 
						|
   localparam             r3a_offset = r3e_offset + 1 * USE_R3;
 | 
						|
   localparam             r3d_offset = r3a_offset + POOL_ENC * USE_R3;
 | 
						|
   localparam             r4e_offset = r3d_offset + WIDTH * USE_R3;
 | 
						|
   localparam             r4a_offset = r4e_offset + 1 * USE_R4;
 | 
						|
   localparam             r4d_offset = r4a_offset + POOL_ENC * USE_R4;
 | 
						|
   localparam             w0e_offset = r4d_offset + WIDTH * USE_R4;
 | 
						|
   localparam             w0a_offset = w0e_offset + 1 * USE_W0;
 | 
						|
   localparam             w0d_offset = w0a_offset + POOL_ENC * USE_W0;
 | 
						|
   localparam             w1e_offset = w0d_offset + WIDTH * USE_W0;
 | 
						|
   localparam             w1a_offset = w1e_offset + 1 * USE_W1;
 | 
						|
   localparam             w1d_offset = w1a_offset + POOL_ENC * USE_W1;
 | 
						|
   localparam             w2e_offset = w1d_offset + WIDTH * USE_W1;
 | 
						|
   localparam             w2a_offset = w2e_offset + 1 * USE_W2;
 | 
						|
   localparam             w2d_offset = w2a_offset + POOL_ENC * USE_W2;
 | 
						|
   localparam             w3e_offset = w2d_offset + WIDTH * USE_W2;
 | 
						|
   localparam             w3a_offset = w3e_offset + 1 * USE_W3;
 | 
						|
   localparam             w3d_offset = w3a_offset + POOL_ENC * USE_W3;
 | 
						|
   localparam             w4e_offset = w3d_offset + WIDTH * USE_W3;
 | 
						|
   localparam             w4a_offset = w4e_offset + 1 * USE_W4;
 | 
						|
   localparam             w4d_offset = w4a_offset + POOL_ENC * USE_W4;
 | 
						|
   localparam             scan_right = w4d_offset + WIDTH * USE_W4;
 | 
						|
   wire [0:scan_right-1] siv;
 | 
						|
   wire [0:scan_right-1] sov;
 | 
						|
   // Signals
 | 
						|
   reg [0:POOL-1]        reg_act;
 | 
						|
   reg [0:WIDTH-1]       r0d_array;
 | 
						|
   reg [0:WIDTH-1]       r1d_array;
 | 
						|
   reg [0:WIDTH-1]       r2d_array;
 | 
						|
   reg [0:WIDTH-1]       r3d_array;
 | 
						|
   reg [0:WIDTH-1]       r4d_array;
 | 
						|
 | 
						|
   (* analysis_not_assigned="true" *)
 | 
						|
   (* analysis_not_referenced="true" *)
 | 
						|
   wire [0:7] unused;
 | 
						|
 | 
						|
   //!! Bugspray Include: xu_rf;
 | 
						|
 | 
						|
always @*
 | 
						|
begin: write
 | 
						|
   integer               i;
 | 
						|
   reg_act  = 0;
 | 
						|
 | 
						|
   for (i=0;i<=POOL-1;i=i+1)
 | 
						|
   begin
 | 
						|
      reg_d[i]       = reg_q[i];
 | 
						|
 | 
						|
      if (w0e_q == 1'b1 & {{32-POOL_ENC{1'b0}},w0a_q} == i)
 | 
						|
      begin
 | 
						|
         reg_act[i]  = 1'b1;
 | 
						|
         reg_d[i]    = w0d_q;
 | 
						|
      end
 | 
						|
 | 
						|
      if (w1e_q == 1'b1 & {{32-POOL_ENC{1'b0}},w1a_q} == i)
 | 
						|
      begin
 | 
						|
         reg_act[i]  = 1'b1;
 | 
						|
         reg_d[i]    = w1d_q;
 | 
						|
      end
 | 
						|
 | 
						|
      if (w2e_q == 1'b1 & {{32-POOL_ENC{1'b0}},w2a_q} == i)
 | 
						|
      begin
 | 
						|
         reg_act[i]  = 1'b1;
 | 
						|
         reg_d[i]    = w2d_q;
 | 
						|
      end
 | 
						|
 | 
						|
      if (w3e_q == 1'b1 & {{32-POOL_ENC{1'b0}},w3a_q} == i)
 | 
						|
      begin
 | 
						|
         reg_act[i]  = 1'b1;
 | 
						|
         reg_d[i]    = w3d_q;
 | 
						|
      end
 | 
						|
 | 
						|
      if (w4e_q == 1'b1 & {{32-POOL_ENC{1'b0}},w4a_q} == i)
 | 
						|
      begin
 | 
						|
         reg_act[i]  = 1'b1;
 | 
						|
         reg_d[i]    = w4d_q;
 | 
						|
      end
 | 
						|
   end
 | 
						|
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
always @*
 | 
						|
begin: read
 | 
						|
   integer               i;
 | 
						|
   r0d_array = 0;
 | 
						|
   r1d_array = 0;
 | 
						|
   r2d_array = 0;
 | 
						|
   r3d_array = 0;
 | 
						|
   r4d_array = 0;
 | 
						|
 | 
						|
   for (i=0;i<=POOL-1;i=i+1)
 | 
						|
   begin
 | 
						|
      if (USE_R0 == 1 & {{32-POOL_ENC{1'b0}},r0a_q} == i)
 | 
						|
      begin
 | 
						|
         r0d_array = reg_q[i];
 | 
						|
      end
 | 
						|
      if (USE_R1 == 1 & {{32-POOL_ENC{1'b0}},r1a_q} == i)
 | 
						|
      begin
 | 
						|
         r1d_array = reg_q[i];
 | 
						|
      end
 | 
						|
      if (USE_R2 == 1 & {{32-POOL_ENC{1'b0}},r2a_q} == i)
 | 
						|
      begin
 | 
						|
         r2d_array = reg_q[i];
 | 
						|
      end
 | 
						|
      if (USE_R3 == 1 & {{32-POOL_ENC{1'b0}},r3a_q} == i)
 | 
						|
      begin
 | 
						|
         r3d_array = reg_q[i];
 | 
						|
      end
 | 
						|
      if (USE_R4 == 1 & {{32-POOL_ENC{1'b0}},r4a_q} == i)
 | 
						|
      begin
 | 
						|
         r4d_array = reg_q[i];
 | 
						|
      end
 | 
						|
   end
 | 
						|
end
 | 
						|
 | 
						|
// BYPASS
 | 
						|
 | 
						|
generate
 | 
						|
   if (BYPASS == 1)
 | 
						|
   begin : read_bypass
 | 
						|
      wire [0:10]            r0_byp_sel /*verilator split_var*/;
 | 
						|
      wire [0:10]            r1_byp_sel /*verilator split_var*/;
 | 
						|
      wire [0:10]            r2_byp_sel /*verilator split_var*/;
 | 
						|
      wire [0:10]            r3_byp_sel /*verilator split_var*/;
 | 
						|
      wire [0:10]            r4_byp_sel /*verilator split_var*/;
 | 
						|
      assign r0_byp_sel[0] = w0e_q & (w0a_q == r0a_q);
 | 
						|
      assign r0_byp_sel[1] = w1e_q & (w1a_q == r0a_q);
 | 
						|
      assign r0_byp_sel[2] = w2e_q & (w2a_q == r0a_q);
 | 
						|
      assign r0_byp_sel[3] = w3e_q & (w3a_q == r0a_q);
 | 
						|
      assign r0_byp_sel[4] = w4e_q & (w4a_q == r0a_q);
 | 
						|
      assign r0_byp_sel[5] = w0e & (w0a == r0a_q);
 | 
						|
      assign r0_byp_sel[6] = w1e & (w1a == r0a_q);
 | 
						|
      assign r0_byp_sel[7] = w2e & (w2a == r0a_q);
 | 
						|
      assign r0_byp_sel[8] = w3e & (w3a == r0a_q);
 | 
						|
      assign r0_byp_sel[9] = w4e & (w4a == r0a_q);
 | 
						|
      assign r0_byp_sel[10] = (~|(r0_byp_sel[0:9]));
 | 
						|
 | 
						|
      assign r0d_d = (w0d_q      & {WIDTH{r0_byp_sel[0]}}) |
 | 
						|
                     (w1d_q      & {WIDTH{r0_byp_sel[1]}}) |
 | 
						|
                     (w2d_q      & {WIDTH{r0_byp_sel[2]}}) |
 | 
						|
                     (w3d_q      & {WIDTH{r0_byp_sel[3]}}) |
 | 
						|
                     (w4d_q      & {WIDTH{r0_byp_sel[4]}}) |
 | 
						|
                     (w0d        & {WIDTH{r0_byp_sel[5]}}) |
 | 
						|
                     (w1d        & {WIDTH{r0_byp_sel[6]}}) |
 | 
						|
                     (w2d        & {WIDTH{r0_byp_sel[7]}}) |
 | 
						|
                     (w3d        & {WIDTH{r0_byp_sel[8]}}) |
 | 
						|
                     (w4d        & {WIDTH{r0_byp_sel[9]}}) |
 | 
						|
                     (r0d_array  & {WIDTH{r0_byp_sel[10]}});
 | 
						|
 | 
						|
      assign r1_byp_sel[0] = w0e_q & (w0a_q == r1a_q);
 | 
						|
      assign r1_byp_sel[1] = w1e_q & (w1a_q == r1a_q);
 | 
						|
      assign r1_byp_sel[2] = w2e_q & (w2a_q == r1a_q);
 | 
						|
      assign r1_byp_sel[3] = w3e_q & (w3a_q == r1a_q);
 | 
						|
      assign r1_byp_sel[4] = w4e_q & (w4a_q == r1a_q);
 | 
						|
      assign r1_byp_sel[5] = w0e & (w0a == r1a_q);
 | 
						|
      assign r1_byp_sel[6] = w1e & (w1a == r1a_q);
 | 
						|
      assign r1_byp_sel[7] = w2e & (w2a == r1a_q);
 | 
						|
      assign r1_byp_sel[8] = w3e & (w3a == r1a_q);
 | 
						|
      assign r1_byp_sel[9] = w4e & (w4a == r1a_q);
 | 
						|
      assign r1_byp_sel[10] = (~|(r1_byp_sel[0:9]));
 | 
						|
 | 
						|
      assign r1d_d = (w0d_q      & {WIDTH{r1_byp_sel[0]}}) |
 | 
						|
                     (w1d_q      & {WIDTH{r1_byp_sel[1]}}) |
 | 
						|
                     (w2d_q      & {WIDTH{r1_byp_sel[2]}}) |
 | 
						|
                     (w3d_q      & {WIDTH{r1_byp_sel[3]}}) |
 | 
						|
                     (w4d_q      & {WIDTH{r1_byp_sel[4]}}) |
 | 
						|
                     (w0d        & {WIDTH{r1_byp_sel[5]}}) |
 | 
						|
                     (w1d        & {WIDTH{r1_byp_sel[6]}}) |
 | 
						|
                     (w2d        & {WIDTH{r1_byp_sel[7]}}) |
 | 
						|
                     (w3d        & {WIDTH{r1_byp_sel[8]}}) |
 | 
						|
                     (w4d        & {WIDTH{r1_byp_sel[9]}}) |
 | 
						|
                     (r1d_array  & {WIDTH{r1_byp_sel[10]}});
 | 
						|
 | 
						|
      assign r2_byp_sel[0] = w0e_q & (w0a_q == r2a_q);
 | 
						|
      assign r2_byp_sel[1] = w1e_q & (w1a_q == r2a_q);
 | 
						|
      assign r2_byp_sel[2] = w2e_q & (w2a_q == r2a_q);
 | 
						|
      assign r2_byp_sel[3] = w3e_q & (w3a_q == r2a_q);
 | 
						|
      assign r2_byp_sel[4] = w4e_q & (w4a_q == r2a_q);
 | 
						|
      assign r2_byp_sel[5] = w0e & (w0a == r2a_q);
 | 
						|
      assign r2_byp_sel[6] = w1e & (w1a == r2a_q);
 | 
						|
      assign r2_byp_sel[7] = w2e & (w2a == r2a_q);
 | 
						|
      assign r2_byp_sel[8] = w3e & (w3a == r2a_q);
 | 
						|
      assign r2_byp_sel[9] = w4e & (w4a == r2a_q);
 | 
						|
      assign r2_byp_sel[10] = (~|(r2_byp_sel[0:9]));
 | 
						|
 | 
						|
      assign r2d_d = (w0d_q      & {WIDTH{r2_byp_sel[0]}}) |
 | 
						|
                     (w1d_q      & {WIDTH{r2_byp_sel[1]}}) |
 | 
						|
                     (w2d_q      & {WIDTH{r2_byp_sel[2]}}) |
 | 
						|
                     (w3d_q      & {WIDTH{r2_byp_sel[3]}}) |
 | 
						|
                     (w4d_q      & {WIDTH{r2_byp_sel[4]}}) |
 | 
						|
                     (w0d        & {WIDTH{r2_byp_sel[5]}}) |
 | 
						|
                     (w1d        & {WIDTH{r2_byp_sel[6]}}) |
 | 
						|
                     (w2d        & {WIDTH{r2_byp_sel[7]}}) |
 | 
						|
                     (w3d        & {WIDTH{r2_byp_sel[8]}}) |
 | 
						|
                     (w4d        & {WIDTH{r2_byp_sel[9]}}) |
 | 
						|
                     (r2d_array  & {WIDTH{r2_byp_sel[10]}});
 | 
						|
 | 
						|
      assign r3_byp_sel[0] = w0e_q & (w0a_q == r3a_q);
 | 
						|
      assign r3_byp_sel[1] = w1e_q & (w1a_q == r3a_q);
 | 
						|
      assign r3_byp_sel[2] = w2e_q & (w2a_q == r3a_q);
 | 
						|
      assign r3_byp_sel[3] = w3e_q & (w3a_q == r3a_q);
 | 
						|
      assign r3_byp_sel[4] = w4e_q & (w4a_q == r3a_q);
 | 
						|
      assign r3_byp_sel[5] = w0e & (w0a == r3a_q);
 | 
						|
      assign r3_byp_sel[6] = w1e & (w1a == r3a_q);
 | 
						|
      assign r3_byp_sel[7] = w2e & (w2a == r3a_q);
 | 
						|
      assign r3_byp_sel[8] = w3e & (w3a == r3a_q);
 | 
						|
      assign r3_byp_sel[9] = w4e & (w4a == r3a_q);
 | 
						|
      assign r3_byp_sel[10] = (~|(r3_byp_sel[0:9]));
 | 
						|
 | 
						|
      assign r3d_d = (w0d_q      & {WIDTH{r3_byp_sel[0]}}) |
 | 
						|
                     (w1d_q      & {WIDTH{r3_byp_sel[1]}}) |
 | 
						|
                     (w2d_q      & {WIDTH{r3_byp_sel[2]}}) |
 | 
						|
                     (w3d_q      & {WIDTH{r3_byp_sel[3]}}) |
 | 
						|
                     (w4d_q      & {WIDTH{r3_byp_sel[4]}}) |
 | 
						|
                     (w0d        & {WIDTH{r3_byp_sel[5]}}) |
 | 
						|
                     (w1d        & {WIDTH{r3_byp_sel[6]}}) |
 | 
						|
                     (w2d        & {WIDTH{r3_byp_sel[7]}}) |
 | 
						|
                     (w3d        & {WIDTH{r3_byp_sel[8]}}) |
 | 
						|
                     (w4d        & {WIDTH{r3_byp_sel[9]}}) |
 | 
						|
                     (r3d_array  & {WIDTH{r3_byp_sel[10]}});
 | 
						|
 | 
						|
      assign r4_byp_sel[0] = w0e_q & (w0a_q == r4a_q);
 | 
						|
      assign r4_byp_sel[1] = w1e_q & (w1a_q == r4a_q);
 | 
						|
      assign r4_byp_sel[2] = w2e_q & (w2a_q == r4a_q);
 | 
						|
      assign r4_byp_sel[3] = w3e_q & (w3a_q == r4a_q);
 | 
						|
      assign r4_byp_sel[4] = w4e_q & (w4a_q == r4a_q);
 | 
						|
      assign r4_byp_sel[5] = w0e & (w0a == r4a_q);
 | 
						|
      assign r4_byp_sel[6] = w1e & (w1a == r4a_q);
 | 
						|
      assign r4_byp_sel[7] = w2e & (w2a == r4a_q);
 | 
						|
      assign r4_byp_sel[8] = w3e & (w3a == r4a_q);
 | 
						|
      assign r4_byp_sel[9] = w4e & (w4a == r4a_q);
 | 
						|
      assign r4_byp_sel[10] = (~|(r4_byp_sel[0:9]));
 | 
						|
 | 
						|
      assign r4d_d = (w0d_q      & {WIDTH{r4_byp_sel[0]}}) |
 | 
						|
                     (w1d_q      & {WIDTH{r4_byp_sel[1]}}) |
 | 
						|
                     (w2d_q      & {WIDTH{r4_byp_sel[2]}}) |
 | 
						|
                     (w3d_q      & {WIDTH{r4_byp_sel[3]}}) |
 | 
						|
                     (w4d_q      & {WIDTH{r4_byp_sel[4]}}) |
 | 
						|
                     (w0d        & {WIDTH{r4_byp_sel[5]}}) |
 | 
						|
                     (w1d        & {WIDTH{r4_byp_sel[6]}}) |
 | 
						|
                     (w2d        & {WIDTH{r4_byp_sel[7]}}) |
 | 
						|
                     (w3d        & {WIDTH{r4_byp_sel[8]}}) |
 | 
						|
                     (w4d        & {WIDTH{r4_byp_sel[9]}}) |
 | 
						|
                     (r4d_array  & {WIDTH{r4_byp_sel[10]}});
 | 
						|
 | 
						|
   end
 | 
						|
endgenerate
 | 
						|
 | 
						|
generate
 | 
						|
   if (BYPASS == 0)
 | 
						|
   begin : read_nobypass
 | 
						|
      assign r0d_d = r0d_array;
 | 
						|
      assign r1d_d = r1d_array;
 | 
						|
      assign r2d_d = r2d_array;
 | 
						|
      assign r3d_d = r3d_array;
 | 
						|
      assign r4d_d = r4d_array;
 | 
						|
   end
 | 
						|
endgenerate
 | 
						|
 | 
						|
assign r0d = r0d_q;
 | 
						|
assign r1d = r1d_q;
 | 
						|
assign r2d = r2d_q;
 | 
						|
assign r3d = r3d_q;
 | 
						|
assign r4d = r4d_q;
 | 
						|
 | 
						|
generate
 | 
						|
   genvar                r;
 | 
						|
   for (r=0;r<=POOL-1;r=r+1)
 | 
						|
   begin : entry
 | 
						|
      tri_regk #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) reg_latch(
 | 
						|
         .nclk(nclk),
 | 
						|
         .vd(vdd),
 | 
						|
         .gd(gnd),
 | 
						|
         .act(reg_act[r]),
 | 
						|
         .force_t(func_nsl_force),
 | 
						|
         .d_mode(d_mode_dc),
 | 
						|
         .delay_lclkr(delay_lclkr_dc),
 | 
						|
         .mpw1_b(mpw1_dc_b),
 | 
						|
         .mpw2_b(mpw2_dc_b),
 | 
						|
         .thold_b(func_nsl_thold_0_b),
 | 
						|
         .sg(sg_0),
 | 
						|
         .scin(siv[reg_offset+r*WIDTH:reg_offset+(r+1)*WIDTH-1]),
 | 
						|
         .scout(sov[reg_offset+r*WIDTH:reg_offset+(r+1)*WIDTH-1]),
 | 
						|
         .din(reg_d[r]),
 | 
						|
         .dout(reg_q[r])
 | 
						|
      );
 | 
						|
   end
 | 
						|
endgenerate
 | 
						|
 | 
						|
 | 
						|
   tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) r0e_latch(
 | 
						|
      .nclk(nclk),
 | 
						|
      .vd(vdd),
 | 
						|
      .gd(gnd),
 | 
						|
      .act(1'b1),
 | 
						|
      .force_t(func_sl_force),
 | 
						|
      .d_mode(d_mode_dc),
 | 
						|
      .delay_lclkr(delay_lclkr_dc),
 | 
						|
      .mpw1_b(mpw1_dc_b),
 | 
						|
      .mpw2_b(mpw2_dc_b),
 | 
						|
      .thold_b(func_sl_thold_0_b),
 | 
						|
      .sg(sg_0),
 | 
						|
      .scin(siv[r0e_offset]),
 | 
						|
      .scout(sov[r0e_offset]),
 | 
						|
      .din(r0e),
 | 
						|
      .dout(r0e_q)
 | 
						|
   );
 | 
						|
 | 
						|
   tri_rlmreg_p #(.WIDTH(POOL_ENC), .INIT(0), .NEEDS_SRESET(1)) r0a_latch(
 | 
						|
      .nclk(nclk),
 | 
						|
      .vd(vdd),
 | 
						|
      .gd(gnd),
 | 
						|
      .act(r0e_e),
 | 
						|
      .force_t(func_sl_force),
 | 
						|
      .d_mode(d_mode_dc),
 | 
						|
      .delay_lclkr(delay_lclkr_dc),
 | 
						|
      .mpw1_b(mpw1_dc_b),
 | 
						|
      .mpw2_b(mpw2_dc_b),
 | 
						|
      .thold_b(func_sl_thold_0_b),
 | 
						|
      .sg(sg_0),
 | 
						|
      .scin(siv[r0a_offset:r0a_offset + POOL_ENC - 1]),
 | 
						|
      .scout(sov[r0a_offset:r0a_offset + POOL_ENC - 1]),
 | 
						|
      .din(r0a),
 | 
						|
      .dout(r0a_q)
 | 
						|
   );
 | 
						|
 | 
						|
   tri_rlmreg_p #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) r0d_latch(
 | 
						|
      .nclk(nclk),
 | 
						|
      .vd(vdd),
 | 
						|
      .gd(gnd),
 | 
						|
      .act(r0e_q),
 | 
						|
      .force_t(func_sl_force),
 | 
						|
      .d_mode(d_mode_dc),
 | 
						|
      .delay_lclkr(delay_lclkr_dc),
 | 
						|
      .mpw1_b(mpw1_dc_b),
 | 
						|
      .mpw2_b(mpw2_dc_b),
 | 
						|
      .thold_b(func_sl_thold_0_b),
 | 
						|
      .sg(sg_0),
 | 
						|
      .scin(siv[r0d_offset:r0d_offset + WIDTH - 1]),
 | 
						|
      .scout(sov[r0d_offset:r0d_offset + WIDTH - 1]),
 | 
						|
      .din(r0d_d),
 | 
						|
      .dout(r0d_q)
 | 
						|
   );
 | 
						|
 | 
						|
   generate
 | 
						|
      if (RD_PORTS > 1)
 | 
						|
      begin : r1_gen1
 | 
						|
 | 
						|
         tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) r1e_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(1'b1),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r1e_offset]),
 | 
						|
            .scout(sov[r1e_offset]),
 | 
						|
            .din(r1e),
 | 
						|
            .dout(r1e_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(POOL_ENC), .INIT(0), .NEEDS_SRESET(1)) r1a_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(r1e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r1a_offset:r1a_offset + POOL_ENC - 1]),
 | 
						|
            .scout(sov[r1a_offset:r1a_offset + POOL_ENC - 1]),
 | 
						|
            .din(r1a),
 | 
						|
            .dout(r1a_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) r1d_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(r1e_q),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r1d_offset:r1d_offset + WIDTH - 1]),
 | 
						|
            .scout(sov[r1d_offset:r1d_offset + WIDTH - 1]),
 | 
						|
            .din(r1d_d),
 | 
						|
            .dout(r1d_q)
 | 
						|
         );
 | 
						|
      end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (RD_PORTS > 2)
 | 
						|
      begin : r2_gen1
 | 
						|
 | 
						|
         tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) r2e_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(1'b1),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r2e_offset]),
 | 
						|
            .scout(sov[r2e_offset]),
 | 
						|
            .din(r2e),
 | 
						|
            .dout(r2e_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(POOL_ENC), .INIT(0), .NEEDS_SRESET(1)) r2a_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(r2e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r2a_offset:r2a_offset + POOL_ENC - 1]),
 | 
						|
            .scout(sov[r2a_offset:r2a_offset + POOL_ENC - 1]),
 | 
						|
            .din(r2a),
 | 
						|
            .dout(r2a_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) r2d_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(r2e_q),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r2d_offset:r2d_offset + WIDTH - 1]),
 | 
						|
            .scout(sov[r2d_offset:r2d_offset + WIDTH - 1]),
 | 
						|
            .din(r2d_d),
 | 
						|
            .dout(r2d_q)
 | 
						|
         );
 | 
						|
      end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (RD_PORTS > 3)
 | 
						|
      begin : r3_gen1
 | 
						|
 | 
						|
         tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) r3e_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(1'b1),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r3e_offset]),
 | 
						|
            .scout(sov[r3e_offset]),
 | 
						|
            .din(r3e),
 | 
						|
            .dout(r3e_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(POOL_ENC), .INIT(0), .NEEDS_SRESET(1)) r3a_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(r3e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r3a_offset:r3a_offset + POOL_ENC - 1]),
 | 
						|
            .scout(sov[r3a_offset:r3a_offset + POOL_ENC - 1]),
 | 
						|
            .din(r3a),
 | 
						|
            .dout(r3a_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) r3d_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(r3e_q),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r3d_offset:r3d_offset + WIDTH - 1]),
 | 
						|
            .scout(sov[r3d_offset:r3d_offset + WIDTH - 1]),
 | 
						|
            .din(r3d_d),
 | 
						|
            .dout(r3d_q)
 | 
						|
         );
 | 
						|
      end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (RD_PORTS > 4)
 | 
						|
      begin : r4_gen1
 | 
						|
 | 
						|
         tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) r4e_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(1'b1),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r4e_offset]),
 | 
						|
            .scout(sov[r4e_offset]),
 | 
						|
            .din(r4e),
 | 
						|
            .dout(r4e_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(POOL_ENC), .INIT(0), .NEEDS_SRESET(1)) r4a_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(r4e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r4a_offset:r4a_offset + POOL_ENC - 1]),
 | 
						|
            .scout(sov[r4a_offset:r4a_offset + POOL_ENC - 1]),
 | 
						|
            .din(r4a),
 | 
						|
            .dout(r4a_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) r4d_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(r4e_q),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[r4d_offset:r4d_offset + WIDTH - 1]),
 | 
						|
            .scout(sov[r4d_offset:r4d_offset + WIDTH - 1]),
 | 
						|
            .din(r4d_d),
 | 
						|
            .dout(r4d_q)
 | 
						|
         );
 | 
						|
      end
 | 
						|
   endgenerate
 | 
						|
 | 
						|
   tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) w0e_latch(
 | 
						|
      .nclk(nclk),
 | 
						|
      .vd(vdd),
 | 
						|
      .gd(gnd),
 | 
						|
      .act(1'b1),
 | 
						|
      .force_t(func_sl_force),
 | 
						|
      .d_mode(d_mode_dc),
 | 
						|
      .delay_lclkr(delay_lclkr_dc),
 | 
						|
      .mpw1_b(mpw1_dc_b),
 | 
						|
      .mpw2_b(mpw2_dc_b),
 | 
						|
      .thold_b(func_sl_thold_0_b),
 | 
						|
      .sg(sg_0),
 | 
						|
      .scin(siv[w0e_offset]),
 | 
						|
      .scout(sov[w0e_offset]),
 | 
						|
      .din(w0e),
 | 
						|
      .dout(w0e_q)
 | 
						|
   );
 | 
						|
 | 
						|
   tri_rlmreg_p #(.WIDTH(POOL_ENC), .INIT(0), .NEEDS_SRESET(1)) w0a_latch(
 | 
						|
      .nclk(nclk),
 | 
						|
      .vd(vdd),
 | 
						|
      .gd(gnd),
 | 
						|
      .act(w0e_e),
 | 
						|
      .force_t(func_sl_force),
 | 
						|
      .d_mode(d_mode_dc),
 | 
						|
      .delay_lclkr(delay_lclkr_dc),
 | 
						|
      .mpw1_b(mpw1_dc_b),
 | 
						|
      .mpw2_b(mpw2_dc_b),
 | 
						|
      .thold_b(func_sl_thold_0_b),
 | 
						|
      .sg(sg_0),
 | 
						|
      .scin(siv[w0a_offset:w0a_offset + POOL_ENC - 1]),
 | 
						|
      .scout(sov[w0a_offset:w0a_offset + POOL_ENC - 1]),
 | 
						|
      .din(w0a),
 | 
						|
      .dout(w0a_q)
 | 
						|
   );
 | 
						|
 | 
						|
   tri_rlmreg_p #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) w0d_latch(
 | 
						|
      .nclk(nclk),
 | 
						|
      .vd(vdd),
 | 
						|
      .gd(gnd),
 | 
						|
      .act(w0e_e),
 | 
						|
      .force_t(func_sl_force),
 | 
						|
      .d_mode(d_mode_dc),
 | 
						|
      .delay_lclkr(delay_lclkr_dc),
 | 
						|
      .mpw1_b(mpw1_dc_b),
 | 
						|
      .mpw2_b(mpw2_dc_b),
 | 
						|
      .thold_b(func_sl_thold_0_b),
 | 
						|
      .sg(sg_0),
 | 
						|
      .scin(siv[w0d_offset:w0d_offset + WIDTH - 1]),
 | 
						|
      .scout(sov[w0d_offset:w0d_offset + WIDTH - 1]),
 | 
						|
      .din(w0d),
 | 
						|
      .dout(w0d_q)
 | 
						|
   );
 | 
						|
   generate
 | 
						|
      if (WR_PORTS > 1)
 | 
						|
      begin : w1_gen1
 | 
						|
 | 
						|
         tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) w1e_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(1'b1),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w1e_offset]),
 | 
						|
            .scout(sov[w1e_offset]),
 | 
						|
            .din(w1e),
 | 
						|
            .dout(w1e_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(POOL_ENC), .INIT(0), .NEEDS_SRESET(1)) w1a_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(w1e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w1a_offset:w1a_offset + POOL_ENC - 1]),
 | 
						|
            .scout(sov[w1a_offset:w1a_offset + POOL_ENC - 1]),
 | 
						|
            .din(w1a),
 | 
						|
            .dout(w1a_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) w1d_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(w1e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w1d_offset:w1d_offset + WIDTH - 1]),
 | 
						|
            .scout(sov[w1d_offset:w1d_offset + WIDTH - 1]),
 | 
						|
            .din(w1d),
 | 
						|
            .dout(w1d_q)
 | 
						|
         );
 | 
						|
      end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (WR_PORTS > 2)
 | 
						|
      begin : w2_gen1
 | 
						|
 | 
						|
         tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) w2e_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(1'b1),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w2e_offset]),
 | 
						|
            .scout(sov[w2e_offset]),
 | 
						|
            .din(w2e),
 | 
						|
            .dout(w2e_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(POOL_ENC), .INIT(0), .NEEDS_SRESET(1)) w2a_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(w2e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w2a_offset:w2a_offset + POOL_ENC - 1]),
 | 
						|
            .scout(sov[w2a_offset:w2a_offset + POOL_ENC - 1]),
 | 
						|
            .din(w2a),
 | 
						|
            .dout(w2a_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) w2d_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(w2e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w2d_offset:w2d_offset + WIDTH - 1]),
 | 
						|
            .scout(sov[w2d_offset:w2d_offset + WIDTH - 1]),
 | 
						|
            .din(w2d),
 | 
						|
            .dout(w2d_q)
 | 
						|
         );
 | 
						|
      end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (WR_PORTS > 3)
 | 
						|
      begin : w3_gen1
 | 
						|
 | 
						|
         tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) w3e_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(1'b1),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w3e_offset]),
 | 
						|
            .scout(sov[w3e_offset]),
 | 
						|
            .din(w3e),
 | 
						|
            .dout(w3e_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(POOL_ENC), .INIT(0), .NEEDS_SRESET(1)) w3a_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(w3e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w3a_offset:w3a_offset + POOL_ENC - 1]),
 | 
						|
            .scout(sov[w3a_offset:w3a_offset + POOL_ENC - 1]),
 | 
						|
            .din(w3a),
 | 
						|
            .dout(w3a_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) w3d_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(w3e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w3d_offset:w3d_offset + WIDTH - 1]),
 | 
						|
            .scout(sov[w3d_offset:w3d_offset + WIDTH - 1]),
 | 
						|
            .din(w3d),
 | 
						|
            .dout(w3d_q)
 | 
						|
         );
 | 
						|
      end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (WR_PORTS > 4)
 | 
						|
      begin : w4_gen1
 | 
						|
 | 
						|
         tri_rlmlatch_p #(.INIT(0), .NEEDS_SRESET(1)) w4e_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(1'b1),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w4e_offset]),
 | 
						|
            .scout(sov[w4e_offset]),
 | 
						|
            .din(w4e),
 | 
						|
            .dout(w4e_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(POOL_ENC), .INIT(0), .NEEDS_SRESET(1)) w4a_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(w4e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w4a_offset:w4a_offset + POOL_ENC - 1]),
 | 
						|
            .scout(sov[w4a_offset:w4a_offset + POOL_ENC - 1]),
 | 
						|
            .din(w4a),
 | 
						|
            .dout(w4a_q)
 | 
						|
         );
 | 
						|
 | 
						|
         tri_rlmreg_p #(.WIDTH(WIDTH), .INIT(0), .NEEDS_SRESET(1)) w4d_latch(
 | 
						|
            .nclk(nclk),
 | 
						|
            .vd(vdd),
 | 
						|
            .gd(gnd),
 | 
						|
            .act(w4e_e),
 | 
						|
            .force_t(func_sl_force),
 | 
						|
            .d_mode(d_mode_dc),
 | 
						|
            .delay_lclkr(delay_lclkr_dc),
 | 
						|
            .mpw1_b(mpw1_dc_b),
 | 
						|
            .mpw2_b(mpw2_dc_b),
 | 
						|
            .thold_b(func_sl_thold_0_b),
 | 
						|
            .sg(sg_0),
 | 
						|
            .scin(siv[w4d_offset:w4d_offset + WIDTH - 1]),
 | 
						|
            .scout(sov[w4d_offset:w4d_offset + WIDTH - 1]),
 | 
						|
            .din(w4d),
 | 
						|
            .dout(w4d_q)
 | 
						|
         );
 | 
						|
      end
 | 
						|
   endgenerate
 | 
						|
 | 
						|
   generate
 | 
						|
      if (RD_PORTS <= 1)
 | 
						|
      begin : r1_gen0
 | 
						|
         assign r1e_q = 0;
 | 
						|
         assign r1a_q = 0;
 | 
						|
         assign r1d_q = 0;
 | 
						|
         assign unused[0] = (|r1d_d) | (|r1e) | (|r1a) | (|r1e_e) | (|r1e_q);
 | 
						|
         end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (RD_PORTS <= 2)
 | 
						|
      begin : r2_gen0
 | 
						|
         assign r2e_q = 0;
 | 
						|
         assign r2a_q = 0;
 | 
						|
         assign r2d_q = 0;
 | 
						|
         assign unused[1] = (|r2d_d) | (|r2e) | (|r2a) | (|r2e_e) | (|r2e_q);
 | 
						|
         end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (RD_PORTS <= 3)
 | 
						|
      begin : r3_gen0
 | 
						|
         assign r3e_q = 0;
 | 
						|
         assign r3a_q = 0;
 | 
						|
         assign r3d_q = 0;
 | 
						|
         assign unused[2] = (|r3d_d) | (|r3e) | (|r3a) | (|r3e_e) | (|r3e_q);
 | 
						|
         end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (RD_PORTS <= 4)
 | 
						|
      begin : r4_gen0
 | 
						|
         assign r4e_q = 0;
 | 
						|
         assign r4a_q = 0;
 | 
						|
         assign r4d_q = 0;
 | 
						|
         assign unused[3] = (|r4d_d) | (|r4e) | (|r4a) | (|r4e_e) | (|r4e_q);
 | 
						|
         end
 | 
						|
      endgenerate
 | 
						|
 | 
						|
   generate
 | 
						|
      if (WR_PORTS <= 1)
 | 
						|
      begin : w1_gen0
 | 
						|
         assign w1e_q = 0;
 | 
						|
         assign w1a_q = 0;
 | 
						|
         assign w1d_q = 0;
 | 
						|
         assign unused[4]  = |w1e_e;
 | 
						|
         end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (WR_PORTS <= 2)
 | 
						|
      begin : w2_gen0
 | 
						|
         assign w2e_q = 0;
 | 
						|
         assign w2a_q = 0;
 | 
						|
         assign w2d_q = 0;
 | 
						|
         assign unused[5]  = |w2e_e;
 | 
						|
         end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (WR_PORTS <= 3)
 | 
						|
      begin : w3_gen0
 | 
						|
         assign w3e_q = 0;
 | 
						|
         assign w3a_q = 0;
 | 
						|
         assign w3d_q = 0;
 | 
						|
         assign unused[6]  = |w3e_e;
 | 
						|
         end
 | 
						|
   endgenerate
 | 
						|
   generate
 | 
						|
      if (WR_PORTS <= 4)
 | 
						|
      begin : w4_gen0
 | 
						|
         assign w4e_q = 0;
 | 
						|
         assign w4a_q = 0;
 | 
						|
         assign w4d_q = 0;
 | 
						|
         assign unused[7]  = |w4e_e;
 | 
						|
         end
 | 
						|
   endgenerate
 | 
						|
 | 
						|
assign siv[0:scan_right-1] = {sov[1:scan_right-1], scan_in};
 | 
						|
assign scan_out = sov[0];
 | 
						|
 | 
						|
endmodule
 |