| // Copyright (C) 2020-2021  The SymbiFlow Authors. | 
 | // | 
 | // Use of this source code is governed by a ISC-style | 
 | // license that can be found in the LICENSE file or at | 
 | // https://opensource.org/licenses/ISC | 
 | // | 
 | // SPDX-License-Identifier:ISC | 
 |  | 
 | `timescale 1ns / 10ps | 
 | module fifo_controller_model ( | 
 |     Rst_n, | 
 |     Push_Clk, | 
 |     Pop_Clk, | 
 |  | 
 |     Fifo_Push, | 
 |     Fifo_Push_Flush, | 
 |     Fifo_Full, | 
 |     Fifo_Full_Usr, | 
 |  | 
 |     Fifo_Pop, | 
 |     Fifo_Pop_Flush, | 
 |     Fifo_Empty, | 
 |     Fifo_Empty_Usr, | 
 |  | 
 |     Write_Addr, | 
 |  | 
 |     Read_Addr, | 
 |  | 
 |     //	 Static Control Signals | 
 |     Fifo_Ram_Mode, | 
 |     Fifo_Sync_Mode, | 
 |     Fifo_Push_Width, | 
 |     Fifo_Pop_Width | 
 | ); | 
 |  | 
 |  | 
 |  | 
 |   //************* PPII 4K Parameters **************************// | 
 |  | 
 |   parameter MAX_PTR_WIDTH = 12; | 
 |  | 
 |   parameter DEPTH1 = (1 << (MAX_PTR_WIDTH - 3)); | 
 |   parameter DEPTH2 = (1 << (MAX_PTR_WIDTH - 2)); | 
 |   parameter DEPTH3 = (1 << (MAX_PTR_WIDTH - 1)); | 
 |  | 
 |   parameter D1_QTR_A = MAX_PTR_WIDTH - 5; | 
 |   parameter D2_QTR_A = MAX_PTR_WIDTH - 4; | 
 |   parameter D3_QTR_A = MAX_PTR_WIDTH - 3; | 
 |  | 
 |   input Rst_n; | 
 |   input Push_Clk; | 
 |   input Pop_Clk; | 
 |  | 
 |   input Fifo_Push; | 
 |   input Fifo_Push_Flush; | 
 |   output Fifo_Full; | 
 |   output [3:0] Fifo_Full_Usr; | 
 |  | 
 |   input Fifo_Pop; | 
 |   input Fifo_Pop_Flush; | 
 |   output Fifo_Empty; | 
 |   output [3:0] Fifo_Empty_Usr; | 
 |  | 
 |   output [MAX_PTR_WIDTH-2:0] Write_Addr; | 
 |  | 
 |   output [MAX_PTR_WIDTH-2:0] Read_Addr; | 
 |  | 
 |   input Fifo_Ram_Mode; | 
 |   input Fifo_Sync_Mode; | 
 |   input [1:0] Fifo_Push_Width; | 
 |   input [1:0] Fifo_Pop_Width; | 
 |  | 
 |   reg    flush_pop_clk_tf; | 
 |   reg    flush_pop2push_clk1; | 
 |   reg    flush_push_clk_tf; | 
 |   reg    flush_push2pop_clk1; | 
 |   reg    pop_local_flush_mask; | 
 |   reg    push_flush_tf_pop_clk; | 
 |   reg    pop2push_ack1; | 
 |   reg    pop2push_ack2; | 
 |   reg    push_local_flush_mask; | 
 |   reg    pop_flush_tf_push_clk; | 
 |   reg    push2pop_ack1; | 
 |   reg    push2pop_ack2; | 
 |  | 
 |   reg    fifo_full_flag_f; | 
 |   reg    [3:0]  Fifo_Full_Usr; | 
 |  | 
 |   reg    fifo_empty_flag_f; | 
 |   reg    [3:0]  Fifo_Empty_Usr; | 
 |  | 
 |   reg    [MAX_PTR_WIDTH-1:0]  push_ptr_push_clk; | 
 |   reg    [MAX_PTR_WIDTH-1:0]  pop_ptr_push_clk; | 
 |   reg    [MAX_PTR_WIDTH-1:0]  pop_ptr_async; | 
 |   reg    [MAX_PTR_WIDTH-1:0]  pop_ptr_pop_clk ; | 
 |   reg    [MAX_PTR_WIDTH-1:0]  push_ptr_pop_clk; | 
 |   reg    [MAX_PTR_WIDTH-1:0]  push_ptr_async; | 
 |  | 
 |   reg    [1:0]  push_ptr_push_clk_mask; | 
 |   reg    [1:0]  pop_ptr_pop_clk_mask; | 
 |  | 
 |   reg    [MAX_PTR_WIDTH-1:0]  pop_ptr_push_clk_mux; | 
 |   reg    [MAX_PTR_WIDTH-1:0]  push_ptr_pop_clk_mux; | 
 |  | 
 |   reg    match_room4none; | 
 |   reg    match_room4one; | 
 |   reg    match_room4half; | 
 |   reg    match_room4quart; | 
 |  | 
 |   reg    match_all_left; | 
 |   reg    match_half_left; | 
 |   reg    match_quart_left; | 
 |  | 
 |   reg   [MAX_PTR_WIDTH-1:0]   depth1_reg; | 
 |   reg   [MAX_PTR_WIDTH-1:0]   depth2_reg; | 
 |   reg   [MAX_PTR_WIDTH-1:0]   depth3_reg; | 
 |  | 
 |  | 
 |   wire	push_clk_rst; | 
 |   wire	push_clk_rst_mux; | 
 |   wire	push_flush_done; | 
 |   wire	pop_clk_rst; | 
 |   wire	pop_clk_rst_mux; | 
 |   wire	pop_flush_done; | 
 |  | 
 |   wire	push_flush_gated; | 
 |   wire	pop_flush_gated; | 
 |  | 
 |   wire	[MAX_PTR_WIDTH-2:0] Write_Addr; | 
 |   wire	[MAX_PTR_WIDTH-2:0] Read_Addr; | 
 |  | 
 |   wire	[MAX_PTR_WIDTH-1:0] push_ptr_push_clk_plus1; | 
 |   wire	[MAX_PTR_WIDTH-1:0] next_push_ptr_push_clk; | 
 |   wire	[MAX_PTR_WIDTH-1:0] pop_ptr_pop_clk_plus1; | 
 |   wire	[MAX_PTR_WIDTH-1:0] next_pop_ptr_pop_clk; | 
 |   wire	[MAX_PTR_WIDTH-1:0] next_push_ptr_push_clk_mask; | 
 |   wire	[MAX_PTR_WIDTH-1:0] next_pop_ptr_pop_clk_mask; | 
 |  | 
 |   wire	[MAX_PTR_WIDTH-1:0] pop_ptr_push_clk_l_shift1; | 
 |   wire	[MAX_PTR_WIDTH-1:0] pop_ptr_push_clk_l_shift2; | 
 |   wire	[MAX_PTR_WIDTH-1:0] pop_ptr_push_clk_r_shift1; | 
 |   wire	[MAX_PTR_WIDTH-1:0] pop_ptr_push_clk_r_shift2; | 
 |  | 
 |   wire	[MAX_PTR_WIDTH-1:0] push_ptr_pop_clk_l_shift1; | 
 |   wire	[MAX_PTR_WIDTH-1:0] push_ptr_pop_clk_l_shift2; | 
 |   wire	[MAX_PTR_WIDTH-1:0] push_ptr_pop_clk_r_shift1; | 
 |   wire	[MAX_PTR_WIDTH-1:0] push_ptr_pop_clk_r_shift2; | 
 |  | 
 |   wire	[MAX_PTR_WIDTH-1:0] push_diff; | 
 |   wire	[MAX_PTR_WIDTH-1:0] push_diff_plus_1; | 
 |   wire	[MAX_PTR_WIDTH-1:0] pop_diff; | 
 |  | 
 |   wire	match_room4all; | 
 |   wire	match_room4eight; | 
 |  | 
 |   wire	match_one_left; | 
 |   wire	match_one2eight_left; | 
 |  | 
 |   integer	depth_sel_push; | 
 |   integer depth_sel_pop; | 
 |  | 
 |   initial begin | 
 |     depth1_reg = DEPTH1; | 
 |     depth2_reg = DEPTH2; | 
 |     depth3_reg = DEPTH3; | 
 |   end | 
 |  | 
 |   initial begin | 
 |     flush_pop_clk_tf      <= 1'b0; | 
 |     push2pop_ack1         <= 1'b0; | 
 |     push2pop_ack2         <= 1'b0; | 
 |     pop_local_flush_mask  <= 1'b0; | 
 |     flush_push2pop_clk1   <= 1'b0; | 
 |     push_flush_tf_pop_clk <= 1'b0; | 
 |     flush_push_clk_tf     <= 1'b0; | 
 |     pop2push_ack1         <= 1'b0; | 
 |     pop2push_ack2         <= 1'b0; | 
 |     push_local_flush_mask <= 1'b0; | 
 |     flush_pop2push_clk1   <= 1'b0; | 
 |     pop_flush_tf_push_clk <= 1'b0; | 
 |     push_ptr_push_clk     <= 0; | 
 |     pop_ptr_push_clk      <= 0; | 
 |     pop_ptr_async         <= 0; | 
 |     fifo_full_flag_f      <= 0; | 
 |     pop_ptr_pop_clk       <= 0; | 
 |     push_ptr_pop_clk      <= 0; | 
 |     push_ptr_async        <= 0; | 
 |     fifo_empty_flag_f     <= 1; | 
 |     Fifo_Full_Usr         <= 4'b0001; | 
 |     Fifo_Empty_Usr        <= 4'b0000; | 
 |   end | 
 |  | 
 |   assign Fifo_Full = fifo_full_flag_f; | 
 |   assign Fifo_Empty = fifo_empty_flag_f; | 
 |  | 
 |   assign Write_Addr = push_ptr_push_clk[MAX_PTR_WIDTH-2:0]; | 
 |   assign Read_Addr = next_pop_ptr_pop_clk[MAX_PTR_WIDTH-2:0]; | 
 |  | 
 |   assign push_ptr_push_clk_plus1 = push_ptr_push_clk + 1; | 
 |   assign next_push_ptr_push_clk = (Fifo_Push) ? push_ptr_push_clk_plus1 : push_ptr_push_clk; | 
 |   assign next_push_ptr_push_clk_mask = { | 
 |     (push_ptr_push_clk_mask & next_push_ptr_push_clk[MAX_PTR_WIDTH-1:MAX_PTR_WIDTH-2]), | 
 |     next_push_ptr_push_clk[MAX_PTR_WIDTH-3:0] | 
 |   }; | 
 |  | 
 |   assign pop_ptr_pop_clk_plus1 = pop_ptr_pop_clk + 1; | 
 |   assign next_pop_ptr_pop_clk = (Fifo_Pop) ? pop_ptr_pop_clk_plus1 : pop_ptr_pop_clk; | 
 |   assign next_pop_ptr_pop_clk_mask = { | 
 |     (pop_ptr_pop_clk_mask & next_pop_ptr_pop_clk[MAX_PTR_WIDTH-1:MAX_PTR_WIDTH-2]), | 
 |     next_pop_ptr_pop_clk[MAX_PTR_WIDTH-3:0] | 
 |   }; | 
 |  | 
 |   assign pop_ptr_push_clk_l_shift1 = {pop_ptr_push_clk[MAX_PTR_WIDTH-2:0], 1'b0}; | 
 |   assign pop_ptr_push_clk_l_shift2 = {pop_ptr_push_clk[MAX_PTR_WIDTH-3:0], 2'b0}; | 
 |   assign pop_ptr_push_clk_r_shift1 = {1'b0, pop_ptr_push_clk[MAX_PTR_WIDTH-1:1]}; | 
 |   assign pop_ptr_push_clk_r_shift2 = {2'b0, pop_ptr_push_clk[MAX_PTR_WIDTH-1:2]}; | 
 |  | 
 |   assign push_ptr_pop_clk_l_shift1 = {push_ptr_pop_clk[MAX_PTR_WIDTH-2:0], 1'b0}; | 
 |   assign push_ptr_pop_clk_l_shift2 = {push_ptr_pop_clk[MAX_PTR_WIDTH-3:0], 2'b0}; | 
 |   assign push_ptr_pop_clk_r_shift1 = {1'b0, push_ptr_pop_clk[MAX_PTR_WIDTH-1:1]}; | 
 |   assign push_ptr_pop_clk_r_shift2 = {2'b0, push_ptr_pop_clk[MAX_PTR_WIDTH-1:2]}; | 
 |  | 
 |   assign push_diff = next_push_ptr_push_clk_mask - pop_ptr_push_clk_mux; | 
 |   assign push_diff_plus_1 = push_diff + 1; | 
 |   assign pop_diff = push_ptr_pop_clk_mux - next_pop_ptr_pop_clk_mask; | 
 |  | 
 |   assign match_room4all = ~|push_diff; | 
 |   assign	match_room4eight	= ( depth_sel_push == 3 ) ? ( push_diff >= DEPTH3-8 ) : ( depth_sel_push == 2 ) ? ( push_diff >= DEPTH2-8 ) : ( push_diff >= DEPTH1-8 ); | 
 |  | 
 |   assign match_one_left = (pop_diff == 1); | 
 |   assign match_one2eight_left = (pop_diff < 8); | 
 |  | 
 |   assign push_flush_gated = Fifo_Push_Flush & ~push_local_flush_mask; | 
 |   assign pop_flush_gated = Fifo_Pop_Flush & ~pop_local_flush_mask; | 
 |  | 
 |   assign push_clk_rst = flush_pop2push_clk1 ^ pop_flush_tf_push_clk; | 
 |   assign pop_clk_rst = flush_push2pop_clk1 ^ push_flush_tf_pop_clk; | 
 |  | 
 |   assign pop_flush_done = push2pop_ack1 ^ push2pop_ack2; | 
 |   assign push_flush_done = pop2push_ack1 ^ pop2push_ack2; | 
 |  | 
 |   assign	push_clk_rst_mux	= ( Fifo_Sync_Mode ) ? ( Fifo_Push_Flush | Fifo_Pop_Flush ) : ( push_flush_gated | push_clk_rst ); | 
 |   assign	pop_clk_rst_mux		= ( Fifo_Sync_Mode ) ? ( Fifo_Push_Flush | Fifo_Pop_Flush ) : ( pop_flush_gated | ( pop_local_flush_mask & ~pop_flush_done ) | pop_clk_rst ); | 
 |  | 
 |  | 
 |   reg match_room_at_most63, match_at_most63_left; | 
 |  | 
 |   always@( push_diff or push_diff_plus_1 or depth_sel_push or match_room4none or match_room4one ) | 
 | 	begin | 
 |     if (depth_sel_push == 1) begin | 
 |       match_room4none		<= ( push_diff[D1_QTR_A+2:0] == depth1_reg[D1_QTR_A+2:0] ); | 
 |       // syao 2/12/2013 | 
 |       match_room4one		<= ( push_diff_plus_1[D1_QTR_A+2:0] == depth1_reg ) | match_room4none; | 
 |  | 
 |       match_room4half		<= ( push_diff[D1_QTR_A+1] == 1'b1 ); | 
 |       match_room4quart	<= ( push_diff[D1_QTR_A] == 1'b1 ); | 
 |  | 
 |       match_room_at_most63    <=  push_diff[6]; | 
 |     end else if (depth_sel_push == 2) begin | 
 |       match_room4none		<= ( push_diff[D2_QTR_A+2:0] == depth2_reg[D2_QTR_A+2:0] ); | 
 |       // syao 2/12/2013 | 
 |       match_room4one		<= ( push_diff_plus_1[D2_QTR_A+2:0] == depth2_reg ) | match_room4none; | 
 |  | 
 |       match_room4half		<= ( push_diff[D2_QTR_A+1] == 1'b1 ); | 
 |       match_room4quart	<= ( push_diff[D2_QTR_A] == 1'b1 ); | 
 |  | 
 |       // syao 2/12/2013 | 
 |       //			match_room_at_most63    <=  push_diff[6]; | 
 |       match_room_at_most63    <=  &push_diff[7:6]; | 
 |     end else begin | 
 |       match_room4none <= (push_diff == depth3_reg); | 
 |       match_room4one <= (push_diff_plus_1 == depth3_reg) | match_room4none; | 
 |  | 
 |       match_room4half <= (push_diff[D3_QTR_A+1] == 1'b1); | 
 |       match_room4quart <= (push_diff[D3_QTR_A] == 1'b1); | 
 |  | 
 |       // syao 2/12/2013 | 
 |       //			match_room_at_most63	<= &push_diff[7:6]; | 
 |       match_room_at_most63 <= &push_diff[8:6]; | 
 |     end | 
 |   end | 
 |  | 
 |  | 
 |  | 
 |   assign room4_32s = ~push_diff[5]; | 
 |   assign room4_16s = ~push_diff[4]; | 
 |   assign room4_8s  = ~push_diff[3]; | 
 |   assign room4_4s  = ~push_diff[2]; | 
 |   assign room4_2s  = ~push_diff[1]; | 
 |   assign room4_1s  = &push_diff[1:0]; | 
 |  | 
 |   always @(depth_sel_pop or pop_diff) begin | 
 |     if (depth_sel_pop == 1) begin | 
 |       match_all_left <= (pop_diff[D1_QTR_A+2:0] == depth1_reg[D1_QTR_A+2:0]); | 
 |  | 
 |       match_half_left <= (pop_diff[D1_QTR_A+1] == 1'b1); | 
 |       match_quart_left <= (pop_diff[D1_QTR_A] == 1'b1); | 
 |  | 
 |       match_at_most63_left <= ~pop_diff[6]; | 
 |     end else if (depth_sel_pop == 2) begin | 
 |       match_all_left <= (pop_diff[D2_QTR_A+2:0] == depth2_reg[D2_QTR_A+2:0]); | 
 |  | 
 |       match_half_left <= (pop_diff[D2_QTR_A+1] == 1'b1); | 
 |       match_quart_left <= (pop_diff[D2_QTR_A] == 1'b1); | 
 |  | 
 |       // syao 2/12/2013 | 
 |       //			match_at_most63_left	<= ~pop_diff[6];			 | 
 |       match_at_most63_left <= ~|pop_diff[7:6]; | 
 |     end else begin | 
 |       match_all_left <= (pop_diff == depth3_reg); | 
 |  | 
 |       match_half_left <= (pop_diff[D3_QTR_A+1] == 1'b1); | 
 |       match_quart_left <= (pop_diff[D3_QTR_A] == 1'b1); | 
 |  | 
 |       // syao 2/12/2013 | 
 |       //			match_at_most63_left	<= ~|pop_diff[7:6];			 | 
 |       match_at_most63_left <= ~|pop_diff[8:6]; | 
 |     end | 
 |   end | 
 |  | 
 |  | 
 |  | 
 |   assign at_least_32 = pop_diff[5]; | 
 |   assign at_least_16 = pop_diff[4]; | 
 |   assign at_least_8 = pop_diff[3]; | 
 |   assign at_least_4 = pop_diff[2]; | 
 |   assign at_least_2 = pop_diff[1]; | 
 |   assign one_left = pop_diff[0]; | 
 |  | 
 |  | 
 |   always @(posedge Pop_Clk or negedge Rst_n) begin | 
 |     if (~Rst_n) begin | 
 |       push2pop_ack1 <= 1'b0; | 
 |       push2pop_ack2 <= 1'b0; | 
 |       flush_pop_clk_tf <= 1'b0; | 
 |       pop_local_flush_mask <= 1'b0; | 
 |       flush_push2pop_clk1 <= 1'b0; | 
 |       push_flush_tf_pop_clk <= 1'b0; | 
 |     end else begin | 
 |       push2pop_ack1 <= pop_flush_tf_push_clk; | 
 |       push2pop_ack2 <= push2pop_ack1; | 
 |       flush_push2pop_clk1 <= flush_push_clk_tf; | 
 |       if (pop_flush_gated) begin | 
 |         flush_pop_clk_tf <= ~flush_pop_clk_tf; | 
 |       end | 
 |  | 
 |       if (pop_flush_gated & ~Fifo_Sync_Mode) begin | 
 |         pop_local_flush_mask <= 1'b1; | 
 |       end else if (pop_flush_done) begin | 
 |         pop_local_flush_mask <= 1'b0; | 
 |       end | 
 |  | 
 |       if (pop_clk_rst) begin | 
 |         push_flush_tf_pop_clk <= ~push_flush_tf_pop_clk; | 
 |       end | 
 |     end | 
 |   end | 
 |  | 
 |   always @(posedge Push_Clk or negedge Rst_n) begin | 
 |     if (~Rst_n) begin | 
 |       pop2push_ack1 <= 1'b0; | 
 |       pop2push_ack2 <= 1'b0; | 
 |       flush_push_clk_tf <= 1'b0; | 
 |       push_local_flush_mask <= 1'b0; | 
 |       flush_pop2push_clk1 <= 1'b0; | 
 |       pop_flush_tf_push_clk <= 1'b0; | 
 |     end else begin | 
 |       pop2push_ack1				<= push_flush_tf_pop_clk; | 
 |       pop2push_ack2				<= pop2push_ack1; | 
 |       flush_pop2push_clk1	<= flush_pop_clk_tf; | 
 |       if (push_flush_gated) begin | 
 |         flush_push_clk_tf <= ~flush_push_clk_tf; | 
 |       end | 
 |  | 
 |       if (push_flush_gated & ~Fifo_Sync_Mode) begin | 
 |         push_local_flush_mask <= 1'b1; | 
 |       end else if (push_flush_done) begin | 
 |         push_local_flush_mask <= 1'b0; | 
 |       end | 
 |  | 
 |       if (push_clk_rst) begin | 
 |         pop_flush_tf_push_clk <= ~pop_flush_tf_push_clk; | 
 |       end | 
 |     end | 
 |   end | 
 |  | 
 |   always@( Fifo_Push_Width or Fifo_Pop_Width or pop_ptr_push_clk_l_shift1 or pop_ptr_push_clk_l_shift2 or pop_ptr_push_clk_r_shift1 or | 
 | 						pop_ptr_push_clk_r_shift2 or push_ptr_pop_clk_l_shift1 or push_ptr_pop_clk_l_shift2 or push_ptr_pop_clk_r_shift1 or push_ptr_pop_clk_r_shift2 or | 
 | 						pop_ptr_push_clk or push_ptr_pop_clk ) | 
 | 	begin | 
 |     case ({ | 
 |       Fifo_Push_Width, Fifo_Pop_Width | 
 |     }) | 
 |       4'b0001:	//	byte push halfword pop | 
 |       begin | 
 |         push_ptr_push_clk_mask <= 2'b11; | 
 |         pop_ptr_pop_clk_mask   <= 2'b01; | 
 |         pop_ptr_push_clk_mux   <= pop_ptr_push_clk_l_shift1; | 
 |         push_ptr_pop_clk_mux   <= push_ptr_pop_clk_r_shift1; | 
 |       end | 
 |       4'b0010:	//	byte push word pop | 
 |       begin | 
 |         push_ptr_push_clk_mask <= 2'b11; | 
 |         pop_ptr_pop_clk_mask   <= 2'b00; | 
 |         pop_ptr_push_clk_mux   <= pop_ptr_push_clk_l_shift2; | 
 |         push_ptr_pop_clk_mux   <= push_ptr_pop_clk_r_shift2; | 
 |       end | 
 |       4'b0100:	//	halfword push byte pop | 
 |       begin | 
 |         push_ptr_push_clk_mask <= 2'b01; | 
 |         pop_ptr_pop_clk_mask   <= 2'b11; | 
 |         pop_ptr_push_clk_mux   <= pop_ptr_push_clk_r_shift1; | 
 |         push_ptr_pop_clk_mux   <= push_ptr_pop_clk_l_shift1; | 
 |       end | 
 |       4'b0110:	//	halfword push word pop | 
 |       begin | 
 |         push_ptr_push_clk_mask <= 2'b11; | 
 |         pop_ptr_pop_clk_mask   <= 2'b01; | 
 |         pop_ptr_push_clk_mux   <= pop_ptr_push_clk_l_shift1; | 
 |         push_ptr_pop_clk_mux   <= push_ptr_pop_clk_r_shift1; | 
 |       end | 
 |       4'b1000:	//	word push byte pop | 
 |       begin | 
 |         push_ptr_push_clk_mask <= 2'b00; | 
 |         pop_ptr_pop_clk_mask   <= 2'b11; | 
 |         pop_ptr_push_clk_mux   <= pop_ptr_push_clk_r_shift2; | 
 |         push_ptr_pop_clk_mux   <= push_ptr_pop_clk_l_shift2; | 
 |       end | 
 |       4'b1001:	//	word push halfword pop | 
 |       begin | 
 |         push_ptr_push_clk_mask <= 2'b01; | 
 |         pop_ptr_pop_clk_mask   <= 2'b11; | 
 |         pop_ptr_push_clk_mux   <= pop_ptr_push_clk_r_shift1; | 
 |         push_ptr_pop_clk_mux   <= push_ptr_pop_clk_l_shift1; | 
 |       end | 
 |       default:	//	no conversion | 
 |       begin | 
 |         push_ptr_push_clk_mask <= 2'b11; | 
 |         pop_ptr_pop_clk_mask   <= 2'b11; | 
 |         pop_ptr_push_clk_mux   <= pop_ptr_push_clk; | 
 |         push_ptr_pop_clk_mux   <= push_ptr_pop_clk; | 
 |       end | 
 |     endcase | 
 |   end | 
 |  | 
 |   always @(Fifo_Ram_Mode or Fifo_Push_Width) begin | 
 |     if (Fifo_Ram_Mode == Fifo_Push_Width[0]) begin | 
 |       depth_sel_push <= 2; | 
 |     end else if (Fifo_Ram_Mode == Fifo_Push_Width[1]) begin | 
 |       depth_sel_push <= 1; | 
 |     end else begin | 
 |       depth_sel_push <= 3; | 
 |     end | 
 |   end | 
 |  | 
 |   always @(Fifo_Ram_Mode or Fifo_Pop_Width) begin | 
 |     if (Fifo_Ram_Mode == Fifo_Pop_Width[0]) begin | 
 |       depth_sel_pop <= 2; | 
 |     end else if (Fifo_Ram_Mode == Fifo_Pop_Width[1]) begin | 
 |       depth_sel_pop <= 1; | 
 |     end else begin | 
 |       depth_sel_pop <= 3; | 
 |     end | 
 |   end | 
 |  | 
 |   always @(posedge Push_Clk or negedge Rst_n) begin | 
 |     if (~Rst_n) begin | 
 |       push_ptr_push_clk <= 0; | 
 |       pop_ptr_push_clk <= 0; | 
 |       pop_ptr_async <= 0; | 
 |       fifo_full_flag_f <= 0; | 
 |     end else begin | 
 |       if (push_clk_rst_mux) begin | 
 |         push_ptr_push_clk <= 0; | 
 |         pop_ptr_push_clk <= 0; | 
 |         pop_ptr_async <= 0; | 
 |         fifo_full_flag_f <= 0; | 
 |       end else begin | 
 |         push_ptr_push_clk <= next_push_ptr_push_clk; | 
 |         pop_ptr_push_clk <= (Fifo_Sync_Mode) ? next_pop_ptr_pop_clk : pop_ptr_async; | 
 |         pop_ptr_async <= pop_ptr_pop_clk; | 
 |         fifo_full_flag_f <= match_room4one | match_room4none; | 
 |       end | 
 |     end | 
 |   end | 
 |  | 
 |   always @(posedge Pop_Clk or negedge Rst_n) begin | 
 |     if (~Rst_n) begin | 
 |       pop_ptr_pop_clk <= 0; | 
 |       push_ptr_pop_clk <= 0; | 
 |       push_ptr_async <= 0; | 
 |       fifo_empty_flag_f <= 1; | 
 |     end else begin | 
 |       if (pop_clk_rst_mux) begin | 
 |         pop_ptr_pop_clk <= 0; | 
 |         push_ptr_pop_clk <= 0; | 
 |         push_ptr_async <= 0; | 
 |         fifo_empty_flag_f <= 1; | 
 |       end else begin | 
 |         pop_ptr_pop_clk <= next_pop_ptr_pop_clk; | 
 |         push_ptr_pop_clk <= (Fifo_Sync_Mode) ? next_push_ptr_push_clk : push_ptr_async; | 
 |         push_ptr_async <= push_ptr_push_clk; | 
 |         fifo_empty_flag_f <= (pop_diff == 1) | (pop_diff == 0); | 
 |       end | 
 |     end | 
 |   end | 
 |  | 
 |   always @(posedge Push_Clk or negedge Rst_n) begin | 
 |     if (~Rst_n) begin | 
 |  | 
 |       //based on rtl, this should be full after reset		 | 
 |       //			Fifo_Full_Usr	<= 4'b1000; | 
 |       Fifo_Full_Usr <= 4'b0001; | 
 |     end else begin | 
 |       if (match_room4none) begin | 
 |         Fifo_Full_Usr <= 4'b0000; | 
 |       end else if (match_room4all) begin | 
 |         Fifo_Full_Usr <= 4'b0001; | 
 |       end else if (~match_room4half) begin | 
 |         Fifo_Full_Usr <= 4'b0010; | 
 |       end else if (~match_room4quart) begin | 
 |         Fifo_Full_Usr <= 4'b0011; | 
 |       end else begin | 
 |         if (match_room_at_most63) begin | 
 |           if (room4_32s) Fifo_Full_Usr <= 4'b1010; | 
 |           else if (room4_16s) Fifo_Full_Usr <= 4'b1011; | 
 |           else if (room4_8s) Fifo_Full_Usr <= 4'b1100; | 
 |           else if (room4_4s) Fifo_Full_Usr <= 4'b1101; | 
 |           else if (room4_2s) Fifo_Full_Usr <= 4'b1110; | 
 |           else if (room4_1s) Fifo_Full_Usr <= 4'b1111; | 
 |           else Fifo_Full_Usr <= 4'b1110; | 
 |         end else Fifo_Full_Usr <= 4'b0100; | 
 |       end | 
 |     end | 
 |   end | 
 |  | 
 |   always @(posedge Pop_Clk or negedge Rst_n) begin | 
 |     if (~Rst_n) begin | 
 |       Fifo_Empty_Usr <= 4'b0000; | 
 |     end else begin | 
 |       if (Fifo_Pop_Flush | (pop_local_flush_mask & ~pop_flush_done) | pop_clk_rst) begin | 
 |         Fifo_Empty_Usr <= 4'b0000; | 
 |       end else if (match_all_left) begin | 
 |         Fifo_Empty_Usr <= 4'b1111; | 
 |       end else if (match_half_left) begin | 
 |         Fifo_Empty_Usr <= 4'b1110; | 
 |       end else if (match_quart_left) begin | 
 |         Fifo_Empty_Usr <= 4'b1101; | 
 |       end else begin | 
 |         if (match_at_most63_left) begin | 
 |           if (at_least_32) Fifo_Empty_Usr <= 4'b0110; | 
 |           else if (at_least_16) Fifo_Empty_Usr <= 4'b0101; | 
 |           else if (at_least_8) Fifo_Empty_Usr <= 4'b0100; | 
 |           else if (at_least_4) Fifo_Empty_Usr <= 4'b0011; | 
 |           else if (at_least_2) Fifo_Empty_Usr <= 4'b0010; | 
 |           else if (one_left) Fifo_Empty_Usr <= 4'b0001; | 
 |           else Fifo_Empty_Usr <= 4'b0000; | 
 |         end else Fifo_Empty_Usr <= 4'b1000; | 
 |       end | 
 |     end | 
 |   end | 
 | endmodule | 
 |  | 
 | `timescale 10 ps / 1 ps | 
 |  | 
 | //`define ADDRWID 8 | 
 | `define DATAWID 18  | 
 | `define WEWID 2 | 
 | //`define DEPTH 256 | 
 |  | 
 | module ram ( | 
 |     AA, | 
 |     AB, | 
 |     CLKA, | 
 |     CLKB, | 
 |     WENA, | 
 |     WENB, | 
 |     CENA, | 
 |     CENB, | 
 |     WENBA, | 
 |     WENBB, | 
 |     DA, | 
 |     QA, | 
 |     DB, | 
 |     QB | 
 | ); | 
 |  | 
 |  | 
 |   parameter ADDRWID = 8; | 
 |   parameter DEPTH = (1 << ADDRWID); | 
 |  | 
 |   parameter [9215:0] INIT = 9216'bx; | 
 |   parameter INIT_FILE = "init.mem"; | 
 |   parameter init_ad = 0; | 
 |  | 
 |   parameter data_width_int = 16; | 
 |   parameter data_depth_int = 1024; | 
 |  | 
 |   output [`DATAWID-1:0] QA; | 
 |   input CLKA; | 
 |   input CENA; | 
 |   input WENA; | 
 |   input [`WEWID-1:0] WENBA; | 
 |   input [ADDRWID-1:0] AA; | 
 |   input [`DATAWID-1:0] DA; | 
 |   output [`DATAWID-1:0] QB; | 
 |  | 
 |   input CLKB; | 
 |   input CENB; | 
 |   input WENB; | 
 |   input [`WEWID-1:0] WENBB; | 
 |   input [ADDRWID-1:0] AB; | 
 |   input [`DATAWID-1:0] DB; | 
 |  | 
 |   integer i, j, k, l, m, n, o; | 
 |  | 
 |   wire                CEN1; | 
 |   wire                OEN1; | 
 |   wire                WEN1; | 
 |   wire [  `WEWID-1:0] WENB1; | 
 |   wire [ ADDRWID-1:0] A1; | 
 |  | 
 |   reg  [ ADDRWID-1:0] AddrOut1; | 
 |   wire [`DATAWID-1:0] I1; | 
 |  | 
 |   wire                CEN2; | 
 |   wire                OEN2; | 
 |   wire                WEN2; | 
 |   wire [  `WEWID-1:0] WENB2; | 
 |   wire [ ADDRWID-1:0] A2; | 
 |  | 
 |   reg  [ ADDRWID-1:0] AddrOut2; | 
 |   wire [`DATAWID-1:0] I2; | 
 |  | 
 |   reg [`DATAWID-1:0] O1, QAreg; | 
 |   reg [`DATAWID-1:0] O2, QBreg; | 
 |  | 
 |   reg                 WEN1_f; | 
 |   reg                 WEN2_f; | 
 |   reg  [ ADDRWID-1:0] A2_f; | 
 |   reg  [ ADDRWID-1:0] A1_f; | 
 |  | 
 |   wire                CEN1_SEL; | 
 |   wire                WEN1_SEL; | 
 |   wire [ ADDRWID-1:0] A1_SEL; | 
 |   wire [`DATAWID-1:0] I1_SEL; | 
 |   wire [  `WEWID-1:0] WENB1_SEL; | 
 |  | 
 |   wire                CEN2_SEL; | 
 |   wire                WEN2_SEL; | 
 |   wire [ ADDRWID-1:0] A2_SEL; | 
 |   wire [`DATAWID-1:0] I2_SEL; | 
 |   wire [  `WEWID-1:0] WENB2_SEL; | 
 |   wire                overlap; | 
 |  | 
 |   wire CLKA_d, CLKB_d, CEN1_d, CEN2_d; | 
 |  | 
 |   assign	A1_SEL    = AA; | 
 |   assign	I1_SEL    = DA; | 
 |   assign	CEN1_SEL  = CENA; | 
 |   assign	WEN1_SEL  = WENA; | 
 |   assign	WENB1_SEL = WENBA; | 
 |  | 
 |   assign	A2_SEL    = AB; | 
 |   assign	I2_SEL    = DB; | 
 |   assign	CEN2_SEL  = CENB; | 
 |   assign	WEN2_SEL  = WENB; | 
 |   assign	WENB2_SEL = WENBB; | 
 |  | 
 |   assign	CEN1	= CEN1_SEL; | 
 |   assign	OEN1	= 1'b0; | 
 |   assign	WEN1	= WEN1_SEL; | 
 |   assign	WENB1	= WENB1_SEL; | 
 |   assign	A1		= A1_SEL; | 
 |   assign	I1		= I1_SEL; | 
 |  | 
 |   assign	CEN2	= CEN2_SEL; | 
 |   assign	OEN2	= 1'b0; | 
 |   assign	WEN2	= WEN2_SEL; | 
 |   assign	WENB2	= WENB2_SEL; | 
 |   assign	A2		= A2_SEL; | 
 |   assign	I2		= I2_SEL; | 
 |  | 
 |   //assign	QA	= O1; | 
 |   //assign	QB	= O2; | 
 |  | 
 |   reg [`DATAWID-1:0] ram[DEPTH-1:0]; | 
 |   reg [data_width_int-1 : 0] ram_dum[data_depth_int-1:0]; | 
 |   reg [`DATAWID-1:0] wrData1; | 
 |   reg [`DATAWID-1:0] wrData2; | 
 |   wire [`DATAWID-1:0] tmpData1; | 
 |   wire [`DATAWID-1:0] tmpData2; | 
 |  | 
 |   reg CENreg1, CENreg2; | 
 |  | 
 |   assign #1 CLKA_d = CLKA; | 
 |   assign #1 CLKB_d = CLKB; | 
 |   // updated by sya 20130523 | 
 |   assign #2 CEN1_d = CEN1; | 
 |   assign #2 CEN2_d = CEN2; | 
 |  | 
 |   assign QA = QAreg | O1; | 
 |   assign QB = QBreg | O2; | 
 |  | 
 |   assign tmpData1 = ram[A1]; | 
 |   assign tmpData2 = ram[A2]; | 
 |  | 
 |   assign overlap = (A1_f == A2_f) & WEN1_f & WEN2_f; | 
 |  | 
 |   initial begin | 
 | `ifndef YOSYS | 
 |     $readmemh(INIT_FILE, ram_dum); | 
 | `endif | 
 |     #10 n = 0; | 
 |     o = 0; | 
 |     for (i = 0; i < DEPTH; i = i + 1) begin | 
 |       if (data_width_int > 16) | 
 |         ram[i] <= { | 
 |           1'b0, | 
 |           ram_dum[i][((16*init_ad)+16)-1:((16*init_ad)+8)], | 
 |           1'b0, | 
 |           ram_dum[i][((16*init_ad)+8)-1:(16*init_ad)] | 
 |         }; | 
 |       else if (data_width_int <= 8 && data_depth_int <= 1024) | 
 |         ram[i] <= { | 
 |           1'b0, ram_dum[i+n+1+(1024*init_ad)][7:0], 1'b0, ram_dum[i+n+(1024*init_ad)][7:0] | 
 |         }; | 
 |       else if (data_width_int <= 8 && data_depth_int > 1024) | 
 |         ram[i] <= {1'b0, ram_dum[i+o+init_ad+1][7:0], 1'b0, ram_dum[i+o+init_ad][7:0]}; | 
 |       else if (data_width_int > 8 && data_width_int <= 16 && data_depth_int > 512) | 
 |         ram[i] <= {1'b0, ram_dum[i+n+init_ad][15:8], 1'b0, ram_dum[i+n+init_ad][7:0]}; | 
 |       else ram[i] <= {1'b0, ram_dum[i+(512*init_ad)][15:8], 1'b0, ram_dum[i+(512*init_ad)][7:0]}; | 
 |  | 
 |       n = n + 1; | 
 |       o = o + 3; | 
 |     end | 
 |   end | 
 |  | 
 |   always @(WENB1 or I1 or tmpData1) begin | 
 |     for (j = 0; j < 9; j = j + 1) begin | 
 |       wrData1[j] <= (WENB1[0]) ? tmpData1[j] : I1[j]; | 
 |     end | 
 |     for (l = 9; l < 19; l = l + 1) begin | 
 |       wrData1[l] <= (WENB1[1]) ? tmpData1[l] : I1[l]; | 
 |     end | 
 |   end | 
 |  | 
 |   always @(posedge CLKA) begin | 
 |     if (~WEN1 & ~CEN1) begin | 
 |       ram[A1] <= wrData1[`DATAWID-1:0]; | 
 |     end | 
 |   end | 
 |  | 
 |   //pre-charging to 1 every clock cycle | 
 |   always @(posedge CLKA_d) | 
 |     if (~CEN1_d) begin | 
 |       O1 = 18'h3ffff; | 
 |       #100; | 
 |       O1 = 18'h00000; | 
 |     end | 
 |  | 
 |  | 
 |   always @(posedge CLKA) | 
 |     if (~CEN1) begin | 
 |       AddrOut1 <= A1; | 
 |     end | 
 |  | 
 |   always @(posedge CLKA_d) | 
 |     if (~CEN1_d) begin | 
 |       QAreg <= ram[AddrOut1]; | 
 |     end | 
 |  | 
 |  | 
 |   always @(posedge CLKA) begin | 
 |     WEN1_f <= ~WEN1 & ~CEN1; | 
 |     A1_f   <= A1; | 
 |  | 
 |   end | 
 |  | 
 |   always @(WENB2 or I2 or tmpData2) begin | 
 |     for (k = 0; k < 9; k = k + 1) begin | 
 |       wrData2[k] <= (WENB2[0]) ? tmpData2[k] : I2[k]; | 
 |     end | 
 |     for (m = 9; m < 19; m = m + 1) begin | 
 |       wrData2[m] <= (WENB2[1]) ? tmpData2[m] : I2[m]; | 
 |     end | 
 |   end | 
 |  | 
 |   always @(posedge CLKB) begin | 
 |     if (~WEN2 & ~CEN2) begin | 
 |       ram[A2] <= wrData2[`DATAWID-1:0]; | 
 |     end | 
 |   end | 
 |  | 
 |   //pre-charging to 1 every clock cycle | 
 |   always @(posedge CLKB_d) | 
 |     if (~CEN2_d) begin | 
 |       O2 = 18'h3ffff; | 
 |       #100; | 
 |       O2 = 18'h00000; | 
 |     end | 
 |  | 
 |   always @(posedge CLKB) | 
 |     if (~CEN2) begin | 
 |       AddrOut2 <= A2; | 
 |     end | 
 |  | 
 |   always @(posedge CLKB_d) | 
 |     if (~CEN2_d) begin | 
 |       QBreg <= ram[AddrOut2]; | 
 |     end | 
 |  | 
 |   always @(posedge CLKB) begin | 
 |     WEN2_f <= ~WEN2 & ~CEN2; | 
 |     A2_f   <= A2; | 
 |  | 
 |   end | 
 |  | 
 |   always @(A1_f or A2_f or overlap) begin | 
 |     if (overlap) begin | 
 |       ram[A1_f] <= 18'bxxxxxxxxxxxxxxxxxx; | 
 |     end | 
 |   end | 
 |  | 
 | endmodule | 
 |  | 
 | `timescale 1 ns / 10 ps | 
 | //`define ADDRWID 10 | 
 | `define DATAWID 18 | 
 | `define WEWID 2 | 
 |  | 
 | module x2_model ( | 
 |     Concat_En, | 
 |  | 
 |     ram0_WIDTH_SELA, | 
 |     ram0_WIDTH_SELB, | 
 |     ram0_PLRD, | 
 |  | 
 |     ram0_CEA, | 
 |     ram0_CEB, | 
 |     ram0_I, | 
 |     ram0_O, | 
 |     ram0_AA, | 
 |     ram0_AB, | 
 |     ram0_CSBA, | 
 |     ram0_CSBB, | 
 |     ram0_WENBA, | 
 |  | 
 |     ram1_WIDTH_SELA, | 
 |     ram1_WIDTH_SELB, | 
 |     ram1_PLRD, | 
 |  | 
 |     ram1_CEA, | 
 |     ram1_CEB, | 
 |     ram1_I, | 
 |     ram1_O, | 
 |     ram1_AA, | 
 |     ram1_AB, | 
 |     ram1_CSBA, | 
 |     ram1_CSBB, | 
 |     ram1_WENBA | 
 | ); | 
 |  | 
 |   parameter ADDRWID = 10; | 
 |   parameter [18431:0] INIT = 18432'bx; | 
 |   parameter INIT_FILE = "init.mem"; | 
 |   parameter data_width_int = 16; | 
 |   parameter data_depth_int = 1024; | 
 |   parameter init_ad1 = 0; | 
 |   parameter init_ad2 = (data_depth_int > 1024) ? 2 : 1; | 
 |  | 
 |  | 
 |   input Concat_En; | 
 |  | 
 |   input [1:0] ram0_WIDTH_SELA; | 
 |   input [1:0] ram0_WIDTH_SELB; | 
 |   input ram0_PLRD; | 
 |   input ram0_CEA; | 
 |   input ram0_CEB; | 
 |   input [`DATAWID-1:0] ram0_I; | 
 |   output [`DATAWID-1:0] ram0_O; | 
 |   input [ADDRWID-1:0] ram0_AA; | 
 |   input [ADDRWID-1:0] ram0_AB; | 
 |   input ram0_CSBA; | 
 |   input ram0_CSBB; | 
 |   input [`WEWID-1:0] ram0_WENBA; | 
 |  | 
 |   input [1:0] ram1_WIDTH_SELA; | 
 |   input [1:0] ram1_WIDTH_SELB; | 
 |   input ram1_PLRD; | 
 |   input ram1_CEA; | 
 |   input ram1_CEB; | 
 |   input [`DATAWID-1:0] ram1_I; | 
 |   output [`DATAWID-1:0] ram1_O; | 
 |   input [ADDRWID-1:0] ram1_AA; | 
 |   input [ADDRWID-1:0] ram1_AB; | 
 |   input ram1_CSBA; | 
 |   input ram1_CSBB; | 
 |   input [`WEWID-1:0] ram1_WENBA; | 
 |  | 
 |   reg                 ram0_PLRDA_SEL; | 
 |   reg                 ram0_PLRDB_SEL; | 
 |   reg                 ram1_PLRDA_SEL; | 
 |   reg                 ram1_PLRDB_SEL; | 
 |   reg                 ram_AA_ram_SEL; | 
 |   reg                 ram_AB_ram_SEL; | 
 |  | 
 |   reg  [  `WEWID-1:0] ram0_WENBA_SEL; | 
 |   reg  [  `WEWID-1:0] ram0_WENBB_SEL; | 
 |   reg  [  `WEWID-1:0] ram1_WENBA_SEL; | 
 |   reg  [  `WEWID-1:0] ram1_WENBB_SEL; | 
 |  | 
 |   reg                 ram0_A_x9_SEL; | 
 |   reg                 ram0_B_x9_SEL; | 
 |   reg                 ram1_A_x9_SEL; | 
 |   reg                 ram1_B_x9_SEL; | 
 |  | 
 |   reg  [ ADDRWID-3:0] ram0_AA_SEL; | 
 |   reg  [ ADDRWID-3:0] ram0_AB_SEL; | 
 |   reg  [ ADDRWID-3:0] ram1_AA_SEL; | 
 |   reg  [ ADDRWID-3:0] ram1_AB_SEL; | 
 |  | 
 |   reg                 ram0_AA_byte_SEL; | 
 |   reg                 ram0_AB_byte_SEL; | 
 |   reg                 ram1_AA_byte_SEL; | 
 |   reg                 ram1_AB_byte_SEL; | 
 |  | 
 |   reg                 ram0_AA_byte_SEL_Q; | 
 |   reg                 ram0_AB_byte_SEL_Q; | 
 |   reg                 ram1_AA_byte_SEL_Q; | 
 |   reg                 ram1_AB_byte_SEL_Q; | 
 |   reg                 ram0_A_mux_ctl_Q; | 
 |   reg                 ram0_B_mux_ctl_Q; | 
 |   reg                 ram1_A_mux_ctl_Q; | 
 |   reg                 ram1_B_mux_ctl_Q; | 
 |  | 
 |   reg                 ram0_O_mux_ctrl_Q; | 
 |   reg                 ram1_O_mux_ctrl_Q; | 
 |  | 
 |   reg                 ram_AA_ram_SEL_Q; | 
 |   reg                 ram_AB_ram_SEL_Q; | 
 |  | 
 |   wire [`DATAWID-1:0] QA_1_SEL3; | 
 |   wire [`DATAWID-1:0] QB_0_SEL2; | 
 |   wire [`DATAWID-1:0] QB_1_SEL2; | 
 |  | 
 |   reg  [`DATAWID-1:0] QA_0_Q; | 
 |   reg  [`DATAWID-1:0] QB_0_Q; | 
 |   reg  [`DATAWID-1:0] QA_1_Q; | 
 |   reg  [`DATAWID-1:0] QB_1_Q; | 
 |  | 
 |   wire [`DATAWID-1:0] QA_0; | 
 |   wire [`DATAWID-1:0] QB_0; | 
 |   wire [`DATAWID-1:0] QA_1; | 
 |   wire [`DATAWID-1:0] QB_1; | 
 |  | 
 |   wire                ram0_CSBA_SEL; | 
 |   wire                ram0_CSBB_SEL; | 
 |   wire                ram1_CSBA_SEL; | 
 |   wire                ram1_CSBB_SEL; | 
 |  | 
 |   wire [`DATAWID-1:0] ram0_I_SEL1; | 
 |   wire [`DATAWID-1:0] ram1_I_SEL1; | 
 |  | 
 |   wire                dual_port; | 
 |  | 
 |   wire                ram0_WEBA_SEL; | 
 |   wire                ram0_WEBB_SEL; | 
 |   wire                ram1_WEBA_SEL; | 
 |   wire                ram1_WEBB_SEL; | 
 |  | 
 |   wire [`DATAWID-1:0] ram1_I_SEL2; | 
 |  | 
 |   wire [`DATAWID-1:0] QA_1_SEL2; | 
 |   wire [`DATAWID-1:0] QA_0_SEL1; | 
 |   wire [`DATAWID-1:0] QB_0_SEL1; | 
 |   wire [`DATAWID-1:0] QA_1_SEL1; | 
 |   wire [`DATAWID-1:0] QB_1_SEL1; | 
 |  | 
 |   wire [`DATAWID-1:0] QB_0_SEL3; | 
 |   wire [`DATAWID-1:0] QA_0_SEL2; | 
 |  | 
 |   initial begin | 
 |     QA_0_Q             <= 0; | 
 |     QB_0_Q             <= 0; | 
 |     QA_1_Q             <= 0; | 
 |     QB_1_Q             <= 0; | 
 |     ram0_AA_byte_SEL_Q <= 0; | 
 |     ram0_A_mux_ctl_Q   <= 0; | 
 |     ram0_AB_byte_SEL_Q <= 0; | 
 |     ram0_B_mux_ctl_Q   <= 0; | 
 |     ram1_AA_byte_SEL_Q <= 0; | 
 |     ram1_A_mux_ctl_Q   <= 0; | 
 |     ram1_AB_byte_SEL_Q <= 0; | 
 |     ram1_B_mux_ctl_Q   <= 0; | 
 |     ram_AA_ram_SEL_Q   <= 0; | 
 |     ram1_O_mux_ctrl_Q  <= 0; | 
 |     ram_AB_ram_SEL_Q   <= 0; | 
 |     ram0_O_mux_ctrl_Q  <= 0; | 
 |   end | 
 |  | 
 |   assign dual_port = Concat_En & ~(ram0_WIDTH_SELA[1] | ram0_WIDTH_SELB[1]); | 
 |  | 
 |   assign ram0_CSBA_SEL = ram0_CSBA; | 
 |   assign ram0_CSBB_SEL = ram0_CSBB; | 
 |   assign ram1_CSBA_SEL = Concat_En ? ram0_CSBA : ram1_CSBA; | 
 |   assign ram1_CSBB_SEL = Concat_En ? ram0_CSBB : ram1_CSBB; | 
 |  | 
 |   assign ram0_O = QB_0_SEL3; | 
 |   assign ram1_O = dual_port ? QA_1_SEL3 : QB_1_SEL2; | 
 |  | 
 |   assign ram0_I_SEL1[8:0] = ram0_I[8:0]; | 
 |   assign ram1_I_SEL1[8:0] = ram1_I[8:0]; | 
 |   assign ram0_I_SEL1[17:9] = ram0_AA_byte_SEL ? ram0_I[8:0] : ram0_I[17:9]; | 
 |   assign ram1_I_SEL1[17:9]	= ( ( ~Concat_En & ram1_AA_byte_SEL ) | ( dual_port & ram0_AB_byte_SEL ) ) ? ram1_I[8:0] : ram1_I[17:9]; | 
 |  | 
 |   assign ram1_I_SEL2 = (Concat_En & ~ram0_WIDTH_SELA[1]) ? ram0_I_SEL1 : ram1_I_SEL1; | 
 |  | 
 |   assign ram0_WEBA_SEL = &ram0_WENBA_SEL; | 
 |   assign ram0_WEBB_SEL = &ram0_WENBB_SEL; | 
 |   assign ram1_WEBA_SEL = &ram1_WENBA_SEL; | 
 |   assign ram1_WEBB_SEL = &ram1_WENBB_SEL; | 
 |  | 
 |   assign QA_0_SEL1 = (ram0_PLRDA_SEL) ? QA_0_Q : QA_0; | 
 |   assign QB_0_SEL1 = (ram0_PLRDB_SEL) ? QB_0_Q : QB_0; | 
 |   assign QA_1_SEL1 = (ram1_PLRDA_SEL) ? QA_1_Q : QA_1; | 
 |   assign QB_1_SEL1 = (ram1_PLRDB_SEL) ? QB_1_Q : QB_1; | 
 |  | 
 |   assign QA_1_SEL3 = ram1_O_mux_ctrl_Q ? QA_1_SEL2 : QA_0_SEL2; | 
 |  | 
 |   assign QA_0_SEL2[8:0] = ram0_A_mux_ctl_Q ? QA_0_SEL1[17:9] : QA_0_SEL1[8:0]; | 
 |   assign QB_0_SEL2[8:0] = ram0_B_mux_ctl_Q ? QB_0_SEL1[17:9] : QB_0_SEL1[8:0]; | 
 |   assign QA_1_SEL2[8:0] = ram1_A_mux_ctl_Q ? QA_1_SEL1[17:9] : QA_1_SEL1[8:0]; | 
 |   assign QB_1_SEL2[8:0] = ram1_B_mux_ctl_Q ? QB_1_SEL1[17:9] : QB_1_SEL1[8:0]; | 
 |  | 
 |   assign QA_0_SEL2[17:9] = QA_0_SEL1[17:9]; | 
 |   assign QB_0_SEL2[17:9] = QB_0_SEL1[17:9]; | 
 |   assign QA_1_SEL2[17:9] = QA_1_SEL1[17:9]; | 
 |   assign QB_1_SEL2[17:9] = QB_1_SEL1[17:9]; | 
 |  | 
 |   assign QB_0_SEL3 = ram0_O_mux_ctrl_Q ? QB_1_SEL2 : QB_0_SEL2; | 
 |  | 
 |   always @(posedge ram0_CEA) begin | 
 |     QA_0_Q <= QA_0; | 
 |   end | 
 |   always @(posedge ram0_CEB) begin | 
 |     QB_0_Q <= QB_0; | 
 |   end | 
 |   always @(posedge ram1_CEA) begin | 
 |     QA_1_Q <= QA_1; | 
 |   end | 
 |   always @(posedge ram1_CEB) begin | 
 |     QB_1_Q <= QB_1; | 
 |   end | 
 |  | 
 |   always @(posedge ram0_CEA) begin | 
 |     if (ram0_CSBA_SEL == 0) ram0_AA_byte_SEL_Q <= ram0_AA_byte_SEL; | 
 |     if (ram0_PLRDA_SEL || (ram0_CSBA_SEL == 0)) | 
 |       ram0_A_mux_ctl_Q <= ram0_A_x9_SEL & (ram0_PLRDA_SEL ? ram0_AA_byte_SEL_Q : ram0_AA_byte_SEL); | 
 |   end | 
 |  | 
 |   always @(posedge ram0_CEB) begin | 
 |     if (ram0_CSBB_SEL == 0) ram0_AB_byte_SEL_Q <= ram0_AB_byte_SEL; | 
 |     if (ram0_PLRDB_SEL || (ram0_CSBB_SEL == 0)) | 
 |       ram0_B_mux_ctl_Q <= ram0_B_x9_SEL & (ram0_PLRDB_SEL ? ram0_AB_byte_SEL_Q : ram0_AB_byte_SEL); | 
 |   end | 
 |  | 
 |   always @(posedge ram1_CEA) begin | 
 |     if (ram1_CSBA_SEL == 0) ram1_AA_byte_SEL_Q <= ram1_AA_byte_SEL; | 
 |     if (ram1_PLRDA_SEL || (ram1_CSBA_SEL == 0)) | 
 |       ram1_A_mux_ctl_Q <= ram1_A_x9_SEL & (ram1_PLRDA_SEL ? ram1_AA_byte_SEL_Q : ram1_AA_byte_SEL); | 
 |   end | 
 |  | 
 |   always @(posedge ram1_CEB) begin | 
 |     if (ram1_CSBB_SEL == 0) ram1_AB_byte_SEL_Q <= ram1_AB_byte_SEL; | 
 |     if (ram1_PLRDB_SEL || (ram1_CSBB_SEL == 0)) | 
 |       ram1_B_mux_ctl_Q <= ram1_B_x9_SEL & (ram1_PLRDB_SEL ? ram1_AB_byte_SEL_Q : ram1_AB_byte_SEL); | 
 |   end | 
 |  | 
 |   always @(posedge ram0_CEA) begin | 
 |     ram_AA_ram_SEL_Q  <= ram_AA_ram_SEL; | 
 |     ram1_O_mux_ctrl_Q <= (ram0_PLRDA_SEL ? ram_AA_ram_SEL_Q : ram_AA_ram_SEL); | 
 |   end | 
 |  | 
 |   always @(posedge ram0_CEB) begin | 
 |     ram_AB_ram_SEL_Q  <= ram_AB_ram_SEL; | 
 |     ram0_O_mux_ctrl_Q <= (ram0_PLRDB_SEL ? ram_AB_ram_SEL_Q : ram_AB_ram_SEL); | 
 |   end | 
 |  | 
 |   always@( Concat_En or ram0_WIDTH_SELA or ram0_WIDTH_SELB or ram0_AA or ram0_AB or ram0_WENBA or  | 
 | 	         ram1_AA or ram1_AB or ram1_WENBA or ram0_PLRD or ram1_PLRD or ram1_WIDTH_SELA or ram1_WIDTH_SELB )  | 
 | 	begin | 
 |     ram0_A_x9_SEL <= (~|ram0_WIDTH_SELA); | 
 |     ram1_A_x9_SEL <= (~|ram0_WIDTH_SELA); | 
 |     ram0_B_x9_SEL <= (~|ram0_WIDTH_SELB); | 
 |     ram0_AA_byte_SEL <= ram0_AA[0] & (~|ram0_WIDTH_SELA); | 
 |     ram0_AB_byte_SEL <= ram0_AB[0] & (~|ram0_WIDTH_SELB); | 
 |     if (~Concat_En) begin | 
 |       ram_AA_ram_SEL	<= 1'b0; | 
 |       ram_AB_ram_SEL	<= 1'b0; | 
 |       ram1_B_x9_SEL		<= ( ~|ram1_WIDTH_SELB ); | 
 |  | 
 |       ram0_PLRDA_SEL	<= ram0_PLRD; | 
 |       ram0_PLRDB_SEL	<= ram0_PLRD; | 
 |       ram1_PLRDA_SEL	<= ram1_PLRD; | 
 |       ram1_PLRDB_SEL	<= ram1_PLRD; | 
 |       ram0_WENBB_SEL	<= {`WEWID{1'b1}}; | 
 |       ram1_WENBB_SEL	<= {`WEWID{1'b1}}; | 
 |  | 
 |       ram0_AA_SEL				<= ram0_AA >> ( ~|ram0_WIDTH_SELA ); | 
 |       ram0_WENBA_SEL[0]	<= ( ram0_AA[0] & ( ~|ram0_WIDTH_SELA ) ) | ram0_WENBA[0]; | 
 |       ram0_WENBA_SEL[1]	<= ( ~ram0_AA[0] & ( ~|ram0_WIDTH_SELA ) ) | ram0_WENBA[( |ram0_WIDTH_SELA )]; | 
 |       ram0_AB_SEL				<= ram0_AB >> ( ~|ram0_WIDTH_SELB ); | 
 |  | 
 |       ram1_AA_SEL				<= ram1_AA >> ( ~|ram1_WIDTH_SELA ); | 
 |       ram1_AA_byte_SEL	<= ram1_AA[0] & ( ~|ram1_WIDTH_SELA ); | 
 |       ram1_WENBA_SEL[0]	<= ( ram1_AA[0] & ( ~|ram1_WIDTH_SELA ) ) | ram1_WENBA[0]; | 
 |       ram1_WENBA_SEL[1]	<= ( ~ram1_AA[0] & ( ~|ram1_WIDTH_SELA ) ) | ram1_WENBA[( |ram1_WIDTH_SELA )]; | 
 |       ram1_AB_SEL				<= ram1_AB >> ( ~|ram1_WIDTH_SELB ); | 
 |       ram1_AB_byte_SEL	<= ram1_AB[0] & ( ~|ram1_WIDTH_SELB ); | 
 |     end else begin | 
 |       ram_AA_ram_SEL <= ~ram0_WIDTH_SELA[1] & ram0_AA[~ram0_WIDTH_SELA[0]]; | 
 |       ram_AB_ram_SEL <= ~ram0_WIDTH_SELB[1] & ram0_AB[~ram0_WIDTH_SELB[0]]; | 
 |       ram1_B_x9_SEL <= (~|ram0_WIDTH_SELB); | 
 |  | 
 |       ram0_PLRDA_SEL <= ram1_PLRD; | 
 |       ram1_PLRDA_SEL <= ram1_PLRD; | 
 |       ram0_PLRDB_SEL <= ram0_PLRD; | 
 |       ram1_PLRDB_SEL <= ram0_PLRD; | 
 |  | 
 |       ram0_AA_SEL <= ram0_AA >> { | 
 |         ~ram0_WIDTH_SELA[1] & ~(ram0_WIDTH_SELA[1] ^ ram0_WIDTH_SELA[0]), | 
 |         ~ram0_WIDTH_SELA[1] & ram0_WIDTH_SELA[0] | 
 |       }; | 
 |       ram1_AA_SEL <= ram0_AA >> { | 
 |         ~ram0_WIDTH_SELA[1] & ~(ram0_WIDTH_SELA[1] ^ ram0_WIDTH_SELA[0]), | 
 |         ~ram0_WIDTH_SELA[1] & ram0_WIDTH_SELA[0] | 
 |       }; | 
 |       ram1_AA_byte_SEL <= ram0_AA[0] & (~|ram0_WIDTH_SELA); | 
 |       ram0_WENBA_SEL[0]	<= ram0_WENBA[0] | ( ~ram0_WIDTH_SELA[1] & ( ram0_AA[0] | ( ~ram0_WIDTH_SELA[0] & ram0_AA[1] ) ) ); | 
 |       ram0_WENBA_SEL[1]	<= ( ( ~|ram0_WIDTH_SELA & ram0_WENBA[0] ) | ( |ram0_WIDTH_SELA & ram0_WENBA[1] ) ) | ( ~ram0_WIDTH_SELA[1] & ( ( ram0_WIDTH_SELA[0] & ram0_AA[0] ) | ( ~ram0_WIDTH_SELA[0] & ~ram0_AA[0] ) | ( ~ram0_WIDTH_SELA[0] & ram0_AA[1] ) ) ); | 
 |  | 
 |       ram1_WENBA_SEL[0]	<= ( ( ~ram0_WIDTH_SELA[1] & ram0_WENBA[0] ) | ( ram0_WIDTH_SELA[1] & ram1_WENBA[0] ) ) | ( ~ram0_WIDTH_SELA[1] & ( ( ram0_WIDTH_SELA[0] & ~ram0_AA[0] ) | ( ~ram0_WIDTH_SELA[0] & ram0_AA[0] ) | ( ~ram0_WIDTH_SELA[0] & ~ram0_AA[1] ) ) ); | 
 |       ram1_WENBA_SEL[1]	<= ( ( ( ram0_WIDTH_SELA == 2'b00 ) & ram0_WENBA[0] ) | ( ( ram0_WIDTH_SELA[1] == 1'b1 ) & ram1_WENBA[1] ) | ( ( ram0_WIDTH_SELA == 2'b01 ) & ram0_WENBA[1] ) ) | ( ~ram0_WIDTH_SELA[1] & ( ~ram0_AA[0] | ( ~ram0_WIDTH_SELA[0] & ~ram0_AA[1] ) ) ); | 
 |  | 
 |       ram0_AB_SEL <= ram0_AB >> { | 
 |         ~ram0_WIDTH_SELB[1] & ~(ram0_WIDTH_SELB[1] ^ ram0_WIDTH_SELB[0]), | 
 |         ~ram0_WIDTH_SELB[1] & ram0_WIDTH_SELB[0] | 
 |       }; | 
 |       ram1_AB_SEL <= ram0_AB >> { | 
 |         ~ram0_WIDTH_SELB[1] & ~(ram0_WIDTH_SELB[1] ^ ram0_WIDTH_SELB[0]), | 
 |         ~ram0_WIDTH_SELB[1] & ram0_WIDTH_SELB[0] | 
 |       }; | 
 |       ram1_AB_byte_SEL <= ram0_AB[0] & (~|ram0_WIDTH_SELB); | 
 |       ram0_WENBB_SEL[0]	<= ram0_WIDTH_SELB[1] | ( ram0_WIDTH_SELA[1] | ram1_WENBA[0] | ( ram0_AB[0] | ( ~ram0_WIDTH_SELB[0] & ram0_AB[1] ) ) ); | 
 |       ram0_WENBB_SEL[1]	<= ram0_WIDTH_SELB[1] | ( ram0_WIDTH_SELA[1] | ( ( ~|ram0_WIDTH_SELB & ram1_WENBA[0] ) | ( |ram0_WIDTH_SELB & ram1_WENBA[1] ) ) | ( ( ram0_WIDTH_SELB[0] & ram0_AB[0] ) | ( ~ram0_WIDTH_SELB[0] & ~ram0_AB[0] ) | ( ~ram0_WIDTH_SELB[0] & ram0_AB[1] ) ) ); | 
 |       ram1_WENBB_SEL[0]	<= ram0_WIDTH_SELB[1] | ( ram0_WIDTH_SELA[1] | ram1_WENBA[0] | ( ( ram0_WIDTH_SELB[0] & ~ram0_AB[0] ) | ( ~ram0_WIDTH_SELB[0] & ram0_AB[0] ) | ( ~ram0_WIDTH_SELB[0] & ~ram0_AB[1] ) ) ); | 
 |       ram1_WENBB_SEL[1]	<= ram0_WIDTH_SELB[1] | ( ram0_WIDTH_SELA[1] | ( ( ~|ram0_WIDTH_SELB & ram1_WENBA[0] ) | ( |ram0_WIDTH_SELB & ram1_WENBA[1] ) ) | ( ~ram0_AB[0] | ( ~ram0_WIDTH_SELB[0] & ~ram0_AB[1] ) ) ); | 
 |     end | 
 |   end | 
 |  | 
 |   ram #( | 
 |       .ADDRWID(ADDRWID - 2), | 
 |       .INIT(INIT[0*9216+:9216]), | 
 |       .INIT_FILE(INIT_FILE), | 
 |       .data_width_int(data_width_int), | 
 |       .data_depth_int(data_depth_int), | 
 |       .init_ad(init_ad1) | 
 |   ) ram0_inst ( | 
 |       .AA(ram0_AA_SEL), | 
 |       .AB(ram0_AB_SEL), | 
 |       .CLKA(ram0_CEA), | 
 |       .CLKB(ram0_CEB), | 
 |       .WENA(ram0_WEBA_SEL), | 
 |       .WENB(ram0_WEBB_SEL), | 
 |       .CENA(ram0_CSBA_SEL), | 
 |       .CENB(ram0_CSBB_SEL), | 
 |       .WENBA(ram0_WENBA_SEL), | 
 |       .WENBB(ram0_WENBB_SEL), | 
 |       .DA(ram0_I_SEL1), | 
 |       .QA(QA_0), | 
 |       .DB(ram1_I_SEL1), | 
 |       .QB(QB_0) | 
 |   ); | 
 |  | 
 |   ram #( | 
 |       .ADDRWID(ADDRWID - 2), | 
 |       .INIT(INIT[1*9216+:9216]), | 
 |       .INIT_FILE(INIT_FILE), | 
 |       .data_width_int(data_width_int), | 
 |       .data_depth_int(data_depth_int), | 
 |       .init_ad(init_ad2) | 
 |   ) ram1_inst ( | 
 |       .AA(ram1_AA_SEL), | 
 |       .AB(ram1_AB_SEL), | 
 |       .CLKA(ram1_CEA), | 
 |       .CLKB(ram1_CEB), | 
 |       .WENA(ram1_WEBA_SEL), | 
 |       .WENB(ram1_WEBB_SEL), | 
 |       .CENA(ram1_CSBA_SEL), | 
 |       .CENB(ram1_CSBB_SEL), | 
 |       .WENBA(ram1_WENBA_SEL), | 
 |       .WENBB(ram1_WENBB_SEL), | 
 |       .DA(ram1_I_SEL2), | 
 |       .QA(QA_1), | 
 |       .DB(ram1_I_SEL1), | 
 |       .QB(QB_1) | 
 |   ); | 
 |  | 
 | endmodule | 
 |  | 
 | `timescale 1 ns / 10 ps | 
 | `define ADDRWID 11 | 
 | `define DATAWID 18 | 
 | `define WEWID 2 | 
 |  | 
 | module ram_block_8K ( | 
 |     CLK1_0, | 
 |     CLK2_0, | 
 |     WD_0, | 
 |     RD_0, | 
 |     A1_0, | 
 |     A2_0, | 
 |     CS1_0, | 
 |     CS2_0, | 
 |     WEN1_0, | 
 |     POP_0, | 
 |     Almost_Full_0, | 
 |     Almost_Empty_0, | 
 |     PUSH_FLAG_0, | 
 |     POP_FLAG_0, | 
 |  | 
 |     FIFO_EN_0, | 
 |     SYNC_FIFO_0, | 
 |     PIPELINE_RD_0, | 
 |     WIDTH_SELECT1_0, | 
 |     WIDTH_SELECT2_0, | 
 |  | 
 |     CLK1_1, | 
 |     CLK2_1, | 
 |     WD_1, | 
 |     RD_1, | 
 |     A1_1, | 
 |     A2_1, | 
 |     CS1_1, | 
 |     CS2_1, | 
 |     WEN1_1, | 
 |     POP_1, | 
 |     Almost_Empty_1, | 
 |     Almost_Full_1, | 
 |     PUSH_FLAG_1, | 
 |     POP_FLAG_1, | 
 |  | 
 |     FIFO_EN_1, | 
 |     SYNC_FIFO_1, | 
 |     PIPELINE_RD_1, | 
 |     WIDTH_SELECT1_1, | 
 |     WIDTH_SELECT2_1, | 
 |  | 
 |     CONCAT_EN_0, | 
 |     CONCAT_EN_1, | 
 |  | 
 |     PUSH_0, | 
 |     PUSH_1, | 
 |     aFlushN_0, | 
 |     aFlushN_1 | 
 | ); | 
 |  | 
 |   parameter [18431:0] INIT = 18432'bx; | 
 |   parameter INIT_FILE = "init.mem"; | 
 |   parameter data_width_int = 16; | 
 |   parameter data_depth_int = 1024; | 
 |  | 
 |   input CLK1_0; | 
 |   input CLK2_0; | 
 |   input [`DATAWID-1:0] WD_0; | 
 |   output [`DATAWID-1:0] RD_0; | 
 |   input [`ADDRWID-1:0] A1_0;  //chnge | 
 |   input [`ADDRWID-1:0] A2_0;  //chnge | 
 |   input CS1_0; | 
 |   input CS2_0; | 
 |   input [`WEWID-1:0] WEN1_0; | 
 |   input POP_0; | 
 |   output Almost_Full_0; | 
 |   output Almost_Empty_0; | 
 |   output [3:0] PUSH_FLAG_0; | 
 |   output [3:0] POP_FLAG_0; | 
 |   input FIFO_EN_0; | 
 |   input SYNC_FIFO_0; | 
 |   input PIPELINE_RD_0; | 
 |   input [1:0] WIDTH_SELECT1_0; | 
 |   input [1:0] WIDTH_SELECT2_0; | 
 |  | 
 |   input CLK1_1; | 
 |   input CLK2_1; | 
 |   input [`DATAWID-1:0] WD_1; | 
 |   output [`DATAWID-1:0] RD_1; | 
 |   input [`ADDRWID-1:0] A1_1;  //chnge | 
 |   input [`ADDRWID-1:0] A2_1;  //chnge | 
 |   input CS1_1; | 
 |   input CS2_1; | 
 |   input [`WEWID-1:0] WEN1_1; | 
 |   input POP_1; | 
 |   output Almost_Full_1; | 
 |   output Almost_Empty_1; | 
 |   output [3:0] PUSH_FLAG_1; | 
 |   output [3:0] POP_FLAG_1; | 
 |   input FIFO_EN_1; | 
 |   input SYNC_FIFO_1; | 
 |   input PIPELINE_RD_1; | 
 |   input [1:0] WIDTH_SELECT1_1; | 
 |   input [1:0] WIDTH_SELECT2_1; | 
 |  | 
 |   input CONCAT_EN_0; | 
 |   input CONCAT_EN_1; | 
 |  | 
 |  | 
 |   input PUSH_0; | 
 |   input PUSH_1; | 
 |   input aFlushN_0; | 
 |   input aFlushN_1; | 
 |  | 
 |   reg                 rstn; | 
 |  | 
 |   wire [  `WEWID-1:0] RAM0_WENb1_SEL; | 
 |   wire [  `WEWID-1:0] RAM1_WENb1_SEL; | 
 |  | 
 |   wire                RAM0_CS1_SEL; | 
 |   wire                RAM0_CS2_SEL; | 
 |   wire                RAM1_CS1_SEL; | 
 |   wire                RAM1_CS2_SEL; | 
 |  | 
 |   wire [`ADDRWID-1:0] Fifo0_Write_Addr; | 
 |   wire [`ADDRWID-1:0] Fifo0_Read_Addr; | 
 |  | 
 |   wire [`ADDRWID-1:0] Fifo1_Write_Addr; | 
 |   wire [`ADDRWID-1:0] Fifo1_Read_Addr; | 
 |  | 
 |   wire [`ADDRWID-1:0] RAM0_AA_SEL; | 
 |   wire [`ADDRWID-1:0] RAM0_AB_SEL; | 
 |   wire [`ADDRWID-1:0] RAM1_AA_SEL; | 
 |   wire [`ADDRWID-1:0] RAM1_AB_SEL; | 
 |  | 
 |   wire                Concat_En_SEL; | 
 |  | 
 |   //  To simulate POR | 
 |   initial begin | 
 |     rstn = 1'b0; | 
 |     #30 rstn = 1'b1; | 
 |   end | 
 |  | 
 |   assign fifo0_rstn = rstn & aFlushN_0; | 
 |   assign fifo1_rstn = rstn & aFlushN_1; | 
 |  | 
 |   assign Concat_En_SEL = (CONCAT_EN_0 | WIDTH_SELECT1_0[1] | WIDTH_SELECT2_0[1]) ? 1'b1 : 1'b0; | 
 |  | 
 |   assign RAM0_AA_SEL = FIFO_EN_0 ? Fifo0_Write_Addr : A1_0[`ADDRWID-1:0]; | 
 |   assign RAM0_AB_SEL = FIFO_EN_0 ? Fifo0_Read_Addr : A2_0[`ADDRWID-1:0]; | 
 |   assign RAM1_AA_SEL = FIFO_EN_1 ? Fifo1_Write_Addr : A1_1[`ADDRWID-1:0]; | 
 |   assign RAM1_AB_SEL = FIFO_EN_1 ? Fifo1_Read_Addr : A2_1[`ADDRWID-1:0]; | 
 |  | 
 |   assign RAM0_WENb1_SEL = FIFO_EN_0 ? {`WEWID{~PUSH_0}} : ~WEN1_0; | 
 |   assign RAM1_WENb1_SEL = ( FIFO_EN_1 & ~Concat_En_SEL ) ? { `WEWID{ ~PUSH_1 } } : | 
 |                           ( ( FIFO_EN_0 &  Concat_En_SEL ) ? ( WIDTH_SELECT1_0[1] ? { `WEWID{ ~PUSH_0 } } : { `WEWID{ 1'b1 } } ) : ~WEN1_1 ); | 
 |  | 
 |   assign RAM0_CS1_SEL = (FIFO_EN_0 ? CS1_0 : ~CS1_0); | 
 |   assign RAM0_CS2_SEL = (FIFO_EN_0 ? CS2_0 : ~CS2_0); | 
 |   assign RAM1_CS1_SEL = (FIFO_EN_1 ? CS1_1 : ~CS1_1); | 
 |   assign RAM1_CS2_SEL = (FIFO_EN_1 ? CS2_1 : ~CS2_1); | 
 |  | 
 |   x2_model #( | 
 |       .ADDRWID(`ADDRWID), | 
 |       .INIT(INIT), | 
 |       .INIT_FILE(INIT_FILE), | 
 |       .data_width_int(data_width_int), | 
 |       .data_depth_int(data_depth_int) | 
 |   ) x2_8K_model_inst ( | 
 |       .Concat_En(Concat_En_SEL), | 
 |  | 
 |       .ram0_WIDTH_SELA(WIDTH_SELECT1_0), | 
 |       .ram0_WIDTH_SELB(WIDTH_SELECT2_0), | 
 |       .ram0_PLRD(PIPELINE_RD_0), | 
 |  | 
 |       .ram0_CEA(CLK1_0), | 
 |       .ram0_CEB(CLK2_0), | 
 |       .ram0_I(WD_0), | 
 |       .ram0_O(RD_0), | 
 |       .ram0_AA(RAM0_AA_SEL), | 
 |       .ram0_AB(RAM0_AB_SEL), | 
 |       .ram0_CSBA(RAM0_CS1_SEL), | 
 |       .ram0_CSBB(RAM0_CS2_SEL), | 
 |       .ram0_WENBA(RAM0_WENb1_SEL), | 
 |  | 
 |       .ram1_WIDTH_SELA(WIDTH_SELECT1_1), | 
 |       .ram1_WIDTH_SELB(WIDTH_SELECT2_1), | 
 |       .ram1_PLRD(PIPELINE_RD_1), | 
 |  | 
 |       .ram1_CEA(CLK1_1), | 
 |       .ram1_CEB(CLK2_1), | 
 |       .ram1_I(WD_1), | 
 |       .ram1_O(RD_1), | 
 |       .ram1_AA(RAM1_AA_SEL), | 
 |       .ram1_AB(RAM1_AB_SEL), | 
 |       .ram1_CSBA(RAM1_CS1_SEL), | 
 |       .ram1_CSBB(RAM1_CS2_SEL), | 
 |       .ram1_WENBA(RAM1_WENb1_SEL) | 
 |   ); | 
 |  | 
 |   fifo_controller_model #( | 
 |       .MAX_PTR_WIDTH(`ADDRWID + 1) | 
 |   ) fifo_controller0_inst ( | 
 |       .Push_Clk(CLK1_0), | 
 |       .Pop_Clk (CLK2_0), | 
 |  | 
 |       .Fifo_Push(PUSH_0), | 
 |       .Fifo_Push_Flush(CS1_0), | 
 |       .Fifo_Full(Almost_Full_0), | 
 |       .Fifo_Full_Usr(PUSH_FLAG_0), | 
 |  | 
 |       .Fifo_Pop(POP_0), | 
 |       .Fifo_Pop_Flush(CS2_0), | 
 |       .Fifo_Empty(Almost_Empty_0), | 
 |       .Fifo_Empty_Usr(POP_FLAG_0), | 
 |  | 
 |       .Write_Addr(Fifo0_Write_Addr), | 
 |  | 
 |       .Read_Addr(Fifo0_Read_Addr), | 
 |  | 
 |       .Fifo_Ram_Mode(Concat_En_SEL), | 
 |       .Fifo_Sync_Mode(SYNC_FIFO_0), | 
 |       .Fifo_Push_Width(WIDTH_SELECT1_0), | 
 |       .Fifo_Pop_Width(WIDTH_SELECT2_0), | 
 |       .Rst_n(fifo0_rstn) | 
 |   ); | 
 |  | 
 |   fifo_controller_model #( | 
 |       .MAX_PTR_WIDTH(`ADDRWID + 1) | 
 |   ) fifo_controller1_inst ( | 
 |       .Push_Clk(CLK1_1), | 
 |       .Pop_Clk (CLK2_1), | 
 |  | 
 |       .Fifo_Push(PUSH_1), | 
 |       .Fifo_Push_Flush(CS1_1), | 
 |       .Fifo_Full(Almost_Full_1), | 
 |       .Fifo_Full_Usr(PUSH_FLAG_1), | 
 |  | 
 |       .Fifo_Pop(POP_1), | 
 |       .Fifo_Pop_Flush(CS2_1), | 
 |       .Fifo_Empty(Almost_Empty_1), | 
 |       .Fifo_Empty_Usr(POP_FLAG_1), | 
 |  | 
 |       .Write_Addr(Fifo1_Write_Addr), | 
 |  | 
 |       .Read_Addr(Fifo1_Read_Addr), | 
 |  | 
 |       .Fifo_Ram_Mode(1'b0), | 
 |       .Fifo_Sync_Mode(SYNC_FIFO_1), | 
 |       .Fifo_Push_Width({1'b0, WIDTH_SELECT1_1[0]}), | 
 |       .Fifo_Pop_Width({1'b0, WIDTH_SELECT2_1[0]}), | 
 |       .Rst_n(fifo1_rstn) | 
 |   ); | 
 |  | 
 | endmodule | 
 |  | 
 | module sw_mux ( | 
 |     port_out, | 
 |     default_port, | 
 |     alt_port, | 
 |     switch | 
 | ); | 
 |  | 
 |   output port_out; | 
 |   input default_port; | 
 |   input alt_port; | 
 |   input switch; | 
 |  | 
 |   assign port_out = switch ? alt_port : default_port; | 
 |  | 
 | endmodule | 
 |  | 
 |  | 
 | `define ADDRWID_8k2 11 | 
 | `define DATAWID 18 | 
 | `define WEWID 2 | 
 |  | 
 | module ram8k_2x1_cell ( | 
 |     CLK1_0, | 
 |     CLK2_0, | 
 |     CLK1S_0, | 
 |     CLK2S_0, | 
 |     WD_0, | 
 |     RD_0, | 
 |     A1_0, | 
 |     A2_0, | 
 |     CS1_0, | 
 |     CS2_0, | 
 |     WEN1_0, | 
 |     CLK1EN_0, | 
 |     CLK2EN_0, | 
 |     P1_0, | 
 |     P2_0, | 
 |     Almost_Full_0, | 
 |     Almost_Empty_0, | 
 |     PUSH_FLAG_0, | 
 |     POP_FLAG_0, | 
 |  | 
 |     FIFO_EN_0, | 
 |     SYNC_FIFO_0, | 
 |     PIPELINE_RD_0, | 
 |     WIDTH_SELECT1_0, | 
 |     WIDTH_SELECT2_0, | 
 |     DIR_0, | 
 |     ASYNC_FLUSH_0, | 
 |     ASYNC_FLUSH_S0, | 
 |  | 
 |     CLK1_1, | 
 |     CLK2_1, | 
 |     CLK1S_1, | 
 |     CLK2S_1, | 
 |     WD_1, | 
 |     RD_1, | 
 |     A1_1, | 
 |     A2_1, | 
 |     CS1_1, | 
 |     CS2_1, | 
 |     WEN1_1, | 
 |     CLK1EN_1, | 
 |     CLK2EN_1, | 
 |     P1_1, | 
 |     P2_1, | 
 |     Almost_Empty_1, | 
 |     Almost_Full_1, | 
 |     PUSH_FLAG_1, | 
 |     POP_FLAG_1, | 
 |  | 
 |     FIFO_EN_1, | 
 |     SYNC_FIFO_1, | 
 |     PIPELINE_RD_1, | 
 |     WIDTH_SELECT1_1, | 
 |     WIDTH_SELECT2_1, | 
 |     DIR_1, | 
 |     ASYNC_FLUSH_1, | 
 |     ASYNC_FLUSH_S1, | 
 |  | 
 |     CONCAT_EN_0, | 
 |     CONCAT_EN_1 | 
 | ); | 
 |  | 
 |   parameter [18431:0] INIT = 18432'bx; | 
 |   parameter INIT_FILE = "init.mem"; | 
 |   parameter data_width_int = 16; | 
 |   parameter data_depth_int = 1024; | 
 |  | 
 |   input CLK1_0; | 
 |   input CLK2_0; | 
 |   input CLK1S_0; | 
 |   input CLK2S_0; | 
 |   input [`DATAWID-1:0] WD_0; | 
 |   output [`DATAWID-1:0] RD_0; | 
 |   input [`ADDRWID_8k2-1:0] A1_0; | 
 |   input [`ADDRWID_8k2-1:0] A2_0; | 
 |   input CS1_0; | 
 |   input CS2_0; | 
 |   input [`WEWID-1:0] WEN1_0; | 
 |   input CLK1EN_0; | 
 |   input CLK2EN_0; | 
 |   input P1_0; | 
 |   input P2_0; | 
 |   output Almost_Full_0; | 
 |   output Almost_Empty_0; | 
 |   output [3:0] PUSH_FLAG_0; | 
 |   output [3:0] POP_FLAG_0; | 
 |   input FIFO_EN_0; | 
 |   input SYNC_FIFO_0; | 
 |   input DIR_0; | 
 |   input ASYNC_FLUSH_0; | 
 |   input ASYNC_FLUSH_S0; | 
 |   input PIPELINE_RD_0; | 
 |   input [1:0] WIDTH_SELECT1_0; | 
 |   input [1:0] WIDTH_SELECT2_0; | 
 |  | 
 |   input CLK1_1; | 
 |   input CLK2_1; | 
 |   input CLK1S_1; | 
 |   input CLK2S_1; | 
 |   input [`DATAWID-1:0] WD_1; | 
 |   output [`DATAWID-1:0] RD_1; | 
 |   input [`ADDRWID_8k2-1:0] A1_1; | 
 |   input [`ADDRWID_8k2-1:0] A2_1; | 
 |   input CS1_1; | 
 |   input CS2_1; | 
 |   input [`WEWID-1:0] WEN1_1; | 
 |   input CLK1EN_1; | 
 |   input CLK2EN_1; | 
 |   input P1_1; | 
 |   input P2_1; | 
 |   output Almost_Full_1; | 
 |   output Almost_Empty_1; | 
 |   output [3:0] PUSH_FLAG_1; | 
 |   output [3:0] POP_FLAG_1; | 
 |   input FIFO_EN_1; | 
 |   input SYNC_FIFO_1; | 
 |   input DIR_1; | 
 |   input ASYNC_FLUSH_1; | 
 |   input ASYNC_FLUSH_S1; | 
 |   input PIPELINE_RD_1; | 
 |   input [1:0] WIDTH_SELECT1_1; | 
 |   input [1:0] WIDTH_SELECT2_1; | 
 |  | 
 |   input CONCAT_EN_0; | 
 |   input CONCAT_EN_1; | 
 |  | 
 |   //CODE here | 
 |   reg RAM0_domain_sw; | 
 |   reg RAM1_domain_sw; | 
 |  | 
 |   wire CLK1P_0, CLK1P_1, CLK2P_0, CLK2P_1, ASYNC_FLUSHP_1, ASYNC_FLUSHP_0; | 
 |  | 
 |   assign WidSel1_1 = WIDTH_SELECT1_0[1]; | 
 |   assign WidSel2_1 = WIDTH_SELECT2_0[1]; | 
 |  | 
 |   assign CLK1P_0 = CLK1S_0 ? ~CLK1_0 : CLK1_0; | 
 |   assign CLK1P_1 = CLK1S_1 ? ~CLK1_1 : CLK1_1; | 
 |   assign CLK2P_0 = CLK2S_0 ? ~CLK2_0 : CLK2_0; | 
 |   assign CLK2P_1 = CLK2S_1 ? ~CLK2_1 : CLK2_1; | 
 |   assign ASYNC_FLUSHP_0 = ASYNC_FLUSH_S0 ? ~ASYNC_FLUSH_0 : ASYNC_FLUSH_0; | 
 |   assign ASYNC_FLUSHP_1 = ASYNC_FLUSH_S1 ? ~ASYNC_FLUSH_1 : ASYNC_FLUSH_1; | 
 |  | 
 |  | 
 |   /* FIFO mode-only switching */ | 
 |   always @(CONCAT_EN_0 or FIFO_EN_0 or FIFO_EN_1 or WidSel1_1 or WidSel2_1 or DIR_0 or DIR_1) begin | 
 |     if (CONCAT_EN_0)                                               //CONCAT enabled, only RAM0 ports are checked | 
 | 		begin | 
 |       if (~FIFO_EN_0)                                              //RAM MODE (no switching) | 
 | 			begin | 
 |         RAM0_domain_sw = 1'b0;  //Both Switches are on default during RAM mode | 
 |         RAM1_domain_sw = 1'b0; | 
 |       end | 
 | 		else                                                               //FIFO Mode | 
 | 			begin | 
 |         RAM0_domain_sw = DIR_0;  //Both Switches will get DIR_0 (primary port) during concat | 
 |         RAM1_domain_sw = DIR_0; | 
 |       end | 
 |     end | 
 | 	else                                                                 //CONCAT disabled, RAM0 and RAM1 ports are be checked | 
 | 		begin | 
 |       if (WidSel1_1 || WidSel2_1)        //AUTO-CONCAT FIFO/RAM Mode Horizontal Concatenation | 
 | 				begin | 
 |         if (~FIFO_EN_0)                                          //RAM MODE (no switching) | 
 | 					begin | 
 |           RAM0_domain_sw = 1'b0;  //Both Switches are on default during RAM mode | 
 |           RAM1_domain_sw = 1'b0; | 
 |         end | 
 | 				else                                                           //FIFO Mode | 
 | 					begin | 
 |           RAM0_domain_sw = DIR_0;  //Both Switches will get DIR_0 (primary port) during concat | 
 |           RAM1_domain_sw = DIR_0; | 
 |         end | 
 |       end | 
 | 			else                                                             //FIFO/RAM Individual Mode | 
 | 				begin | 
 |         if (~FIFO_EN_0)  //RAM0 Mode | 
 |           RAM0_domain_sw = 1'b0; | 
 |         else  //FIFO0 Mode | 
 |           RAM0_domain_sw = DIR_0; | 
 |         if (~FIFO_EN_1)  //RAM1 Mode | 
 |           RAM1_domain_sw = 1'b0; | 
 |         else  //FIFO1 Mode | 
 |           RAM1_domain_sw = DIR_1; | 
 |       end | 
 |     end | 
 |   end | 
 |  | 
 |   assign RAM0_Clk1_gated = CLK1EN_0 & CLK1P_0; | 
 |   assign RAM0_Clk2_gated = CLK2EN_0 & CLK2P_0; | 
 |   assign RAM1_Clk1_gated = CLK1EN_1 & CLK1P_1; | 
 |   assign RAM1_Clk2_gated = CLK2EN_1 & CLK2P_1; | 
 |  | 
 |   //PORT1 of RAMs is designated to PUSH circuitry, while PORT2 gets POP circuitry | 
 |   sw_mux RAM0_clk_sw_port1 ( | 
 |       .port_out(RAM0_clk_port1), | 
 |       .default_port(RAM0_Clk1_gated), | 
 |       .alt_port(RAM0_Clk2_gated), | 
 |       .switch(RAM0_domain_sw) | 
 |   ); | 
 |   sw_mux RAM0_P_sw_port1 ( | 
 |       .port_out(RAM0_push_port1), | 
 |       .default_port(P1_0), | 
 |       .alt_port(P2_0), | 
 |       .switch(RAM0_domain_sw) | 
 |   ); | 
 |   sw_mux RAM0_Flush_sw_port1 ( | 
 |       .port_out(RAM0CS_Sync_Flush_port1), | 
 |       .default_port(CS1_0), | 
 |       .alt_port(CS2_0), | 
 |       .switch(RAM0_domain_sw) | 
 |   ); | 
 |   sw_mux RAM0_WidSel0_port1 ( | 
 |       .port_out(RAM0_Wid_Sel0_port1), | 
 |       .default_port(WIDTH_SELECT1_0[0]), | 
 |       .alt_port(WIDTH_SELECT2_0[0]), | 
 |       .switch(RAM0_domain_sw) | 
 |   ); | 
 |   sw_mux RAM0_WidSel1_port1 ( | 
 |       .port_out(RAM0_Wid_Sel1_port1), | 
 |       .default_port(WIDTH_SELECT1_0[1]), | 
 |       .alt_port(WIDTH_SELECT2_0[1]), | 
 |       .switch(RAM0_domain_sw) | 
 |   ); | 
 |  | 
 |   sw_mux RAM0_clk_sw_port2 ( | 
 |       .port_out(RAM0_clk_port2), | 
 |       .default_port(RAM0_Clk2_gated), | 
 |       .alt_port(RAM0_Clk1_gated), | 
 |       .switch(RAM0_domain_sw) | 
 |   ); | 
 |   sw_mux RAM0_P_sw_port2 ( | 
 |       .port_out(RAM0_pop_port2), | 
 |       .default_port(P2_0), | 
 |       .alt_port(P1_0), | 
 |       .switch(RAM0_domain_sw) | 
 |   ); | 
 |   sw_mux RAM0_Flush_sw_port2 ( | 
 |       .port_out(RAM0CS_Sync_Flush_port2), | 
 |       .default_port(CS2_0), | 
 |       .alt_port(CS1_0), | 
 |       .switch(RAM0_domain_sw) | 
 |   ); | 
 |   sw_mux RAM0_WidSel0_port2 ( | 
 |       .port_out(RAM0_Wid_Sel0_port2), | 
 |       .default_port(WIDTH_SELECT2_0[0]), | 
 |       .alt_port(WIDTH_SELECT1_0[0]), | 
 |       .switch(RAM0_domain_sw) | 
 |   ); | 
 |   sw_mux RAM0_WidSel1_port2 ( | 
 |       .port_out(RAM0_Wid_Sel1_port2), | 
 |       .default_port(WIDTH_SELECT2_0[1]), | 
 |       .alt_port(WIDTH_SELECT1_0[1]), | 
 |       .switch(RAM0_domain_sw) | 
 |   ); | 
 |  | 
 |   sw_mux RAM1_clk_sw_port1 ( | 
 |       .port_out(RAM1_clk_port1), | 
 |       .default_port(RAM1_Clk1_gated), | 
 |       .alt_port(RAM1_Clk2_gated), | 
 |       .switch(RAM1_domain_sw) | 
 |   ); | 
 |   sw_mux RAM1_P_sw_port1 ( | 
 |       .port_out(RAM1_push_port1), | 
 |       .default_port(P1_1), | 
 |       .alt_port(P2_1), | 
 |       .switch(RAM1_domain_sw) | 
 |   ); | 
 |   sw_mux RAM1_Flush_sw_port1 ( | 
 |       .port_out(RAM1CS_Sync_Flush_port1), | 
 |       .default_port(CS1_1), | 
 |       .alt_port(CS2_1), | 
 |       .switch(RAM1_domain_sw) | 
 |   ); | 
 |   sw_mux RAM1_WidSel0_port1 ( | 
 |       .port_out(RAM1_Wid_Sel0_port1), | 
 |       .default_port(WIDTH_SELECT1_1[0]), | 
 |       .alt_port(WIDTH_SELECT2_1[0]), | 
 |       .switch(RAM1_domain_sw) | 
 |   ); | 
 |   sw_mux RAM1_WidSel1_port1 ( | 
 |       .port_out(RAM1_Wid_Sel1_port1), | 
 |       .default_port(WIDTH_SELECT1_1[1]), | 
 |       .alt_port(WIDTH_SELECT2_1[1]), | 
 |       .switch(RAM1_domain_sw) | 
 |   ); | 
 |  | 
 |  | 
 |   sw_mux RAM1_clk_sw_port2 ( | 
 |       .port_out(RAM1_clk_port2), | 
 |       .default_port(RAM1_Clk2_gated), | 
 |       .alt_port(RAM1_Clk1_gated), | 
 |       .switch(RAM1_domain_sw) | 
 |   ); | 
 |   sw_mux RAM1_P_sw_port2 ( | 
 |       .port_out(RAM1_pop_port2), | 
 |       .default_port(P2_1), | 
 |       .alt_port(P1_1), | 
 |       .switch(RAM1_domain_sw) | 
 |   ); | 
 |   sw_mux RAM1_Flush_sw_port2 ( | 
 |       .port_out(RAM1CS_Sync_Flush_port2), | 
 |       .default_port(CS2_1), | 
 |       .alt_port(CS1_1), | 
 |       .switch(RAM1_domain_sw) | 
 |   ); | 
 |   sw_mux RAM1_WidSel0_port2 ( | 
 |       .port_out(RAM1_Wid_Sel0_port2), | 
 |       .default_port(WIDTH_SELECT2_1[0]), | 
 |       .alt_port(WIDTH_SELECT1_1[0]), | 
 |       .switch(RAM1_domain_sw) | 
 |   ); | 
 |   sw_mux RAM1_WidSel1_port2 ( | 
 |       .port_out(RAM1_Wid_Sel1_port2), | 
 |       .default_port(WIDTH_SELECT2_1[1]), | 
 |       .alt_port(WIDTH_SELECT1_1[1]), | 
 |       .switch(RAM1_domain_sw) | 
 |   ); | 
 |  | 
 |   ram_block_8K #( | 
 |       .INIT(INIT), | 
 |       .INIT_FILE(INIT_FILE), | 
 |       .data_width_int(data_width_int), | 
 |       .data_depth_int(data_depth_int) | 
 |   ) ram_block_8K_inst ( | 
 |       .CLK1_0(RAM0_clk_port1), | 
 |       .CLK2_0(RAM0_clk_port2), | 
 |       .WD_0(WD_0), | 
 |       .RD_0(RD_0), | 
 |       .A1_0(A1_0), | 
 |       .A2_0(A2_0), | 
 |       .CS1_0(RAM0CS_Sync_Flush_port1), | 
 |       .CS2_0(RAM0CS_Sync_Flush_port2), | 
 |       .WEN1_0(WEN1_0), | 
 |       .POP_0(RAM0_pop_port2), | 
 |       .Almost_Full_0(Almost_Full_0), | 
 |       .Almost_Empty_0(Almost_Empty_0), | 
 |       .PUSH_FLAG_0(PUSH_FLAG_0), | 
 |       .POP_FLAG_0(POP_FLAG_0), | 
 |  | 
 |       .FIFO_EN_0(FIFO_EN_0), | 
 |       .SYNC_FIFO_0(SYNC_FIFO_0), | 
 |       .PIPELINE_RD_0(PIPELINE_RD_0), | 
 |       .WIDTH_SELECT1_0({RAM0_Wid_Sel1_port1, RAM0_Wid_Sel0_port1}), | 
 |       .WIDTH_SELECT2_0({RAM0_Wid_Sel1_port2, RAM0_Wid_Sel0_port2}), | 
 |  | 
 |       .CLK1_1(RAM1_clk_port1), | 
 |       .CLK2_1(RAM1_clk_port2), | 
 |       .WD_1(WD_1), | 
 |       .RD_1(RD_1), | 
 |       .A1_1(A1_1), | 
 |       .A2_1(A2_1), | 
 |       .CS1_1(RAM1CS_Sync_Flush_port1), | 
 |       .CS2_1(RAM1CS_Sync_Flush_port2), | 
 |       .WEN1_1(WEN1_1), | 
 |       .POP_1(RAM1_pop_port2), | 
 |       .Almost_Empty_1(Almost_Empty_1), | 
 |       .Almost_Full_1(Almost_Full_1), | 
 |       .PUSH_FLAG_1(PUSH_FLAG_1), | 
 |       .POP_FLAG_1(POP_FLAG_1), | 
 |  | 
 |       .FIFO_EN_1(FIFO_EN_1), | 
 |       .SYNC_FIFO_1(SYNC_FIFO_1), | 
 |       .PIPELINE_RD_1(PIPELINE_RD_1), | 
 |       .WIDTH_SELECT1_1({RAM1_Wid_Sel1_port1, RAM1_Wid_Sel0_port1}), | 
 |       .WIDTH_SELECT2_1({RAM1_Wid_Sel1_port2, RAM1_Wid_Sel0_port2}), | 
 |  | 
 |       .CONCAT_EN_0(CONCAT_EN_0), | 
 |       .CONCAT_EN_1(CONCAT_EN_1), | 
 |  | 
 |       .PUSH_0(RAM0_push_port1), | 
 |       .PUSH_1(RAM1_push_port1), | 
 |       .aFlushN_0(~ASYNC_FLUSHP_0), | 
 |       .aFlushN_1(~ASYNC_FLUSHP_1) | 
 |   ); | 
 |  | 
 | endmodule | 
 |  | 
 | module ram8k_2x1_cell_macro #( | 
 |     parameter [18431:0] INIT = 18432'bx, | 
 |     parameter INIT_FILE = "init.mem", | 
 |     parameter data_width_int = 16, | 
 |     parameter data_depth_int = 1024 | 
 | ) ( | 
 |     input [10:0] A1_0, | 
 |     input [10:0] A1_1, | 
 |     input [10:0] A2_0, | 
 |     input [10:0] A2_1, | 
 |     (* clkbuf_sink *) | 
 |     input CLK1_0, | 
 |     (* clkbuf_sink *) | 
 |     input CLK1_1, | 
 |     (* clkbuf_sink *) | 
 |     input CLK2_0, | 
 |     (* clkbuf_sink *) | 
 |     input CLK2_1, | 
 |     output Almost_Empty_0, | 
 |     Almost_Empty_1, | 
 |     Almost_Full_0, | 
 |     Almost_Full_1, | 
 |     input ASYNC_FLUSH_0, | 
 |     ASYNC_FLUSH_1, | 
 |     ASYNC_FLUSH_S0, | 
 |     ASYNC_FLUSH_S1, | 
 |     CLK1EN_0, | 
 |     CLK1EN_1, | 
 |     CLK1S_0, | 
 |     CLK1S_1, | 
 |     CLK2EN_0, | 
 |     CLK2EN_1, | 
 |     CLK2S_0, | 
 |     CLK2S_1, | 
 |     CONCAT_EN_0, | 
 |     CONCAT_EN_1, | 
 |     CS1_0, | 
 |     CS1_1, | 
 |     CS2_0, | 
 |     CS2_1, | 
 |     DIR_0, | 
 |     DIR_1, | 
 |     FIFO_EN_0, | 
 |     FIFO_EN_1, | 
 |     P1_0, | 
 |     P1_1, | 
 |     P2_0, | 
 |     P2_1, | 
 |     PIPELINE_RD_0, | 
 |     PIPELINE_RD_1, | 
 |     output [3:0] POP_FLAG_0, | 
 |     output [3:0] POP_FLAG_1, | 
 |     output [3:0] PUSH_FLAG_0, | 
 |     output [3:0] PUSH_FLAG_1, | 
 |     output [17:0] RD_0, | 
 |     output [17:0] RD_1, | 
 |     input SYNC_FIFO_0, | 
 |     SYNC_FIFO_1, | 
 |     input [17:0] WD_0, | 
 |     input [17:0] WD_1, | 
 |     input [1:0] WEN1_0, | 
 |     input [1:0] WEN1_1, | 
 |     input [1:0] WIDTH_SELECT1_0, | 
 |     input [1:0] WIDTH_SELECT1_1, | 
 |     input [1:0] WIDTH_SELECT2_0, | 
 |     input [1:0] WIDTH_SELECT2_1, | 
 |     input SD, | 
 |     DS, | 
 |     LS, | 
 |     SD_RB1, | 
 |     LS_RB1, | 
 |     DS_RB1, | 
 |     RMEA, | 
 |     RMEB, | 
 |     TEST1A, | 
 |     TEST1B, | 
 |     input [3:0] RMA, | 
 |     input [3:0] RMB | 
 | ); | 
 |  | 
 |  | 
 |   ram8k_2x1_cell #( | 
 |       .INIT(INIT), | 
 |       .INIT_FILE(INIT_FILE), | 
 |       .data_width_int(data_width_int), | 
 |       .data_depth_int(data_depth_int) | 
 |   ) I1 ( | 
 |       .A1_0({A1_0[10:0]}), | 
 |       .A1_1({A1_1[10:0]}), | 
 |       .A2_0({A2_0[10:0]}), | 
 |       .A2_1({A2_1[10:0]}), | 
 |       .Almost_Empty_0(Almost_Empty_0), | 
 |       .Almost_Empty_1(Almost_Empty_1), | 
 |       .Almost_Full_0(Almost_Full_0), | 
 |       .Almost_Full_1(Almost_Full_1), | 
 |       .ASYNC_FLUSH_0(ASYNC_FLUSH_0), | 
 |       .ASYNC_FLUSH_1(ASYNC_FLUSH_1), | 
 |       .ASYNC_FLUSH_S0(ASYNC_FLUSH_S0), | 
 |       .ASYNC_FLUSH_S1(ASYNC_FLUSH_S1), | 
 |       .CLK1_0(CLK1_0), | 
 |       .CLK1_1(CLK1_1), | 
 |       .CLK1EN_0(CLK1EN_0), | 
 |       .CLK1EN_1(CLK1EN_1), | 
 |       .CLK1S_0(CLK1S_0), | 
 |       .CLK1S_1(CLK1S_1), | 
 |       .CLK2_0(CLK2_0), | 
 |       .CLK2_1(CLK2_1), | 
 |       .CLK2EN_0(CLK2EN_0), | 
 |       .CLK2EN_1(CLK2EN_1), | 
 |       .CLK2S_0(CLK2S_0), | 
 |       .CLK2S_1(CLK2S_1), | 
 |       .CONCAT_EN_0(CONCAT_EN_0), | 
 |       .CONCAT_EN_1(CONCAT_EN_1), | 
 |       .CS1_0(CS1_0), | 
 |       .CS1_1(CS1_1), | 
 |       .CS2_0(CS2_0), | 
 |       .CS2_1(CS2_1), | 
 |       .DIR_0(DIR_0), | 
 |       .DIR_1(DIR_1), | 
 |       .FIFO_EN_0(FIFO_EN_0), | 
 |       .FIFO_EN_1(FIFO_EN_1), | 
 |       .P1_0(P1_0), | 
 |       .P1_1(P1_1), | 
 |       .P2_0(P2_0), | 
 |       .P2_1(P2_1), | 
 |       .PIPELINE_RD_0(PIPELINE_RD_0), | 
 |       .PIPELINE_RD_1(PIPELINE_RD_1), | 
 |       .POP_FLAG_0({POP_FLAG_0[3:0]}), | 
 |       .POP_FLAG_1({POP_FLAG_1[3:0]}), | 
 |       .PUSH_FLAG_0({PUSH_FLAG_0[3:0]}), | 
 |       .PUSH_FLAG_1({PUSH_FLAG_1[3:0]}), | 
 |       .RD_0({RD_0[17:0]}), | 
 |       .RD_1({RD_1[17:0]}), | 
 |       .SYNC_FIFO_0(SYNC_FIFO_0), | 
 |       .SYNC_FIFO_1(SYNC_FIFO_1), | 
 |       .WD_0({WD_0[17:0]}), | 
 |       .WD_1({WD_1[17:0]}), | 
 |       .WEN1_0({WEN1_0[1:0]}), | 
 |       .WEN1_1({WEN1_1[1:0]}), | 
 |       .WIDTH_SELECT1_0({WIDTH_SELECT1_0[1:0]}), | 
 |       .WIDTH_SELECT1_1({WIDTH_SELECT1_1[1:0]}), | 
 |       .WIDTH_SELECT2_0({WIDTH_SELECT2_0[1:0]}), | 
 |       .WIDTH_SELECT2_1({WIDTH_SELECT2_1[1:0]}) | 
 |   ); | 
 |  | 
 | endmodule  /* ram8k_2x1_cell_macro */ | 
 |  | 
 | module RAM_8K_BLK ( | 
 |     WA, | 
 |     RA, | 
 |     WD, | 
 |     WClk, | 
 |     RClk, | 
 |     WClk_En, | 
 |     RClk_En, | 
 |     WEN, | 
 |     RD | 
 | ); | 
 |  | 
 |   parameter addr_int 	= 9, | 
 |           data_depth_int = 512, | 
 |           data_width_int = 18, | 
 |           wr_enable_int 	= 2, | 
 |           reg_rd_int 	= 0; | 
 |  | 
 |   parameter [8191:0] INIT = 8192'bx; | 
 |   parameter INIT_FILE = "init.mem"; | 
 |  | 
 |   input [addr_int-1:0] WA; | 
 |   input [addr_int-1:0] RA; | 
 |   input WClk, RClk; | 
 |   input WClk_En, RClk_En; | 
 |   input [wr_enable_int-1:0] WEN; | 
 |   input [data_width_int-1:0] WD; | 
 |   output [data_width_int-1:0] RD; | 
 |  | 
 |   wire VCC, GND; | 
 |   wire WClk0_Sel, RClk0_Sel; | 
 |   wire WClk1_Sel, RClk1_Sel; | 
 |  | 
 |   wire reg_rd0; | 
 |   wire reg_rd1; | 
 |   wire [10:0] addr_wr0, addr_rd0, addr_wr1, addr_rd1; | 
 |  | 
 |   wire [17:0] in_reg0; | 
 |  | 
 |   wire [ 2:0] wen_reg0; | 
 |  | 
 |   wire [15:0] out_reg0; | 
 |  | 
 |   wire [ 1:0] out_par0; | 
 |  | 
 |   wire [1:0] WS1_0, WS2_0; | 
 |   wire [1:0] WS_GND; | 
 |  | 
 |   wire LS, DS, SD, LS_RB1, DS_RB1, SD_RB1; | 
 |  | 
 |   wire WD0_SEL, RD0_SEL; | 
 |   wire WD1_SEL, RD1_SEL; | 
 |  | 
 |   assign VCC = 1'b1; | 
 |   assign GND = 1'b0; | 
 |  | 
 |   assign WD0_SEL = 1'b1; | 
 |   assign RD0_SEL = 1'b1; | 
 |   assign WD1_SEL = 1'b0; | 
 |   assign RD1_SEL = 1'b0; | 
 |  | 
 |   assign WClk0_Sel = 1'b0; | 
 |   assign RClk0_Sel = 1'b0; | 
 |  | 
 |   assign WClk1_Sel = 1'b0; | 
 |   assign RClk1_Sel = 1'b0; | 
 |  | 
 |   assign LS = 1'b0; | 
 |   assign DS = 1'b0; | 
 |   assign SD = 1'b0; | 
 |   assign LS_RB1 = 1'b0; | 
 |   assign DS_RB1 = 1'b0; | 
 |   assign SD_RB1 = 1'b0; | 
 |  | 
 |   assign reg_rd0 = reg_rd_int; | 
 |   assign WS_GND = 2'b00; | 
 |  | 
 |   assign reg_rd1 = 1'b0; | 
 |  | 
 |   assign wen_reg0[2:wr_enable_int] = 0; | 
 |   assign wen_reg0[wr_enable_int-1:0] = WEN; | 
 |  | 
 |   assign addr_wr1 = 11'b0000000000; | 
 |   assign addr_rd1 = 11'b0000000000; | 
 |  | 
 |   generate | 
 |  | 
 |     if (addr_int == 11) begin | 
 |       assign addr_wr0[10:0] = WA; | 
 |       assign addr_rd0[10:0] = RA; | 
 |     end else begin | 
 |       assign addr_wr0[10:addr_int]  = 0; | 
 |       assign addr_wr0[addr_int-1:0] = WA; | 
 |       assign addr_rd0[10:addr_int]  = 0; | 
 |       assign addr_rd0[addr_int-1:0] = RA; | 
 |     end | 
 |  | 
 |     if (data_width_int == 16) begin | 
 |       assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0]; | 
 |     end else if (data_width_int > 8 && data_width_int < 16) begin | 
 |       assign in_reg0[15:data_width_int]  = 0; | 
 |       assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0]; | 
 |     end else if (data_width_int <= 8) begin | 
 |       assign in_reg0[15:data_width_int]  = 0; | 
 |       assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0]; | 
 |     end | 
 |  | 
 |     if (data_width_int <= 8) begin | 
 |       assign WS1_0 = 2'b00; | 
 |       assign WS2_0 = 2'b00; | 
 |     end else if (data_width_int > 8 && data_width_int <= 16) begin | 
 |       assign WS1_0 = 2'b01; | 
 |       assign WS2_0 = 2'b01; | 
 |     end else if (data_width_int > 16) begin | 
 |       assign WS1_0 = 2'b10; | 
 |       assign WS2_0 = 2'b10; | 
 |     end | 
 |  | 
 |   endgenerate | 
 |  | 
 |   ram8k_2x1_cell_macro #( | 
 |       `include "bram_init_8_16.vh" | 
 |       .INIT_FILE(INIT_FILE), | 
 |       .data_width_int(data_width_int), | 
 |       .data_depth_int(data_depth_int) | 
 |   ) U1 ( | 
 |       .A1_0(addr_wr0), | 
 |       .A1_1(addr_wr1), | 
 |       .A2_0(addr_rd0), | 
 |       .A2_1(addr_rd1), | 
 |       .ASYNC_FLUSH_0(GND),  //chk | 
 |       .ASYNC_FLUSH_1(GND),  //chk | 
 |       .ASYNC_FLUSH_S0(GND), | 
 |       .ASYNC_FLUSH_S1(GND), | 
 |       .CLK1_0(WClk), | 
 |       .CLK1_1(GND), | 
 |       .CLK1S_0(WClk0_Sel), | 
 |       .CLK1S_1(WClk1_Sel), | 
 |       .CLK1EN_0(WClk_En), | 
 |       .CLK1EN_1(GND), | 
 |       .CLK2_0(RClk), | 
 |       .CLK2_1(GND), | 
 |       .CLK2S_0(RClk0_Sel), | 
 |       .CLK2S_1(RClk1_Sel), | 
 |       .CLK2EN_0(RClk_En), | 
 |       .CLK2EN_1(GND), | 
 |       .CONCAT_EN_0(GND), | 
 |       .CONCAT_EN_1(GND), | 
 |       .CS1_0(WD0_SEL), | 
 |       .CS1_1(WD1_SEL), | 
 |       .CS2_0(RD0_SEL), | 
 |       .CS2_1(RD1_SEL), | 
 |       .DIR_0(GND), | 
 |       .DIR_1(GND), | 
 |       .FIFO_EN_0(GND), | 
 |       .FIFO_EN_1(GND), | 
 |       .P1_0(GND),  //P1_0 | 
 |       .P1_1(GND),  //P1_1 | 
 |       .P2_0(GND),  // | 
 |       .P2_1(GND),  // | 
 |       .PIPELINE_RD_0(reg_rd0), | 
 |       .PIPELINE_RD_1(reg_rd1), | 
 |       .SYNC_FIFO_0(GND), | 
 |       .SYNC_FIFO_1(GND), | 
 |       .WD_1({18{GND}}), | 
 |       .WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}), | 
 |       .WIDTH_SELECT1_0(WS1_0), | 
 |       .WIDTH_SELECT1_1(WS_GND), | 
 |       .WIDTH_SELECT2_0(WS2_0), | 
 |       .WIDTH_SELECT2_1(WS_GND), | 
 |       .WEN1_0(wen_reg0[1:0]), | 
 |       .WEN1_1({2{GND}}), | 
 |       .Almost_Empty_0(), | 
 |       .Almost_Empty_1(), | 
 |       .Almost_Full_0(), | 
 |       .Almost_Full_1(), | 
 |       .POP_FLAG_0(), | 
 |       .POP_FLAG_1(), | 
 |       .PUSH_FLAG_0(), | 
 |       .PUSH_FLAG_1(), | 
 |       .RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}), | 
 |       .RD_1(), | 
 |       .SD(SD), | 
 |       .SD_RB1(SD_RB1), | 
 |       .LS(LS), | 
 |       .LS_RB1(LS_RB1), | 
 |       .DS(DS), | 
 |       .DS_RB1(DS_RB1), | 
 |       .TEST1A(GND), | 
 |       .TEST1B(GND), | 
 |       .RMA(4'd0), | 
 |       .RMB(4'd0), | 
 |       .RMEA(GND), | 
 |       .RMEB(GND) | 
 |   ); | 
 |  | 
 |   assign RD[data_width_int-1 : 0] = out_reg0[data_width_int-1 : 0]; | 
 |  | 
 |  | 
 | endmodule | 
 |  | 
 |  | 
 | module RAM_16K_BLK ( | 
 |     WA, | 
 |     RA, | 
 |     WD, | 
 |     WClk, | 
 |     RClk, | 
 |     WClk_En, | 
 |     RClk_En, | 
 |     WEN, | 
 |     RD | 
 | ); | 
 |  | 
 |   parameter addr_int 	= 9, | 
 |           data_depth_int = 512, | 
 | 	  		  data_width_int = 36, | 
 |           wr_enable_int 	= 4, | 
 | 	  		  reg_rd_int 	= 0; | 
 |  | 
 |   parameter [16383:0] INIT = 16384'bx; | 
 |   parameter INIT_FILE = "init.mem"; | 
 |  | 
 |   input [addr_int-1:0] WA; | 
 |   input [addr_int-1:0] RA; | 
 |   input WClk, RClk; | 
 |   input WClk_En, RClk_En; | 
 |   input [wr_enable_int-1:0] WEN; | 
 |   input [data_width_int-1:0] WD; | 
 |   output [data_width_int-1:0] RD; | 
 |  | 
 |   wire VCC, GND; | 
 |  | 
 |   wire WClk0_Sel, RClk0_Sel; | 
 |   wire WClk1_Sel, RClk1_Sel; | 
 |  | 
 |   wire reg_rd0; | 
 |   wire reg_rd1; | 
 |   wire [10:0] addr_wr0, addr_rd0, addr_wr1, addr_rd1; | 
 |  | 
 |   wire [31:0] in_reg0; | 
 |  | 
 |   wire [ 4:0] wen_reg0; | 
 |  | 
 |   wire [31:0] out_reg0; | 
 |  | 
 |   wire [ 3:0] out_par0; | 
 |  | 
 |   wire [1:0] WS1_0, WS2_0; | 
 |   wire [1:0] WS_GND; | 
 |  | 
 |   wire LS, DS, SD, LS_RB1, DS_RB1, SD_RB1; | 
 |  | 
 |   wire WD0_SEL, RD0_SEL; | 
 |   wire WD1_SEL, RD1_SEL; | 
 |  | 
 |   assign VCC = 1'b1; | 
 |   assign GND = 1'b0; | 
 |  | 
 |   assign WD0_SEL = 1'b1; | 
 |   assign RD0_SEL = 1'b1; | 
 |   assign WD1_SEL = 1'b1; | 
 |   assign RD1_SEL = 1'b1; | 
 |  | 
 |   assign WClk0_Sel = 1'b0; | 
 |   assign RClk0_Sel = 1'b0; | 
 |  | 
 |   assign WClk1_Sel = 1'b0; | 
 |   assign RClk1_Sel = 1'b0; | 
 |  | 
 |   assign LS = 1'b0; | 
 |   assign DS = 1'b0; | 
 |   assign SD = 1'b0; | 
 |   assign LS_RB1 = 1'b0; | 
 |   assign DS_RB1 = 1'b0; | 
 |   assign SD_RB1 = 1'b0; | 
 |  | 
 |   assign reg_rd0 = reg_rd_int; | 
 |   assign WS_GND = 2'b00; | 
 |  | 
 |   assign reg_rd1 = 1'b0; | 
 |  | 
 |   assign wen_reg0[4:wr_enable_int] = 0; | 
 |   assign wen_reg0[wr_enable_int-1:0] = WEN; | 
 |  | 
 |   assign addr_wr1 = 11'b0000000000; | 
 |   assign addr_rd1 = 11'b0000000000; | 
 |  | 
 |   generate | 
 |  | 
 |     if (addr_int == 11) begin | 
 |       assign addr_wr0[10:0] = WA; | 
 |       assign addr_rd0[10:0] = RA; | 
 |     end else begin | 
 |       assign addr_wr0[10:addr_int]  = 0; | 
 |       assign addr_wr0[addr_int-1:0] = WA; | 
 |       assign addr_rd0[10:addr_int]  = 0; | 
 |       assign addr_rd0[addr_int-1:0] = RA; | 
 |     end | 
 |  | 
 |     if (data_width_int == 32) begin | 
 |       assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0]; | 
 |     end else if (data_width_int > 8 && data_width_int < 32) begin | 
 |       assign in_reg0[31:data_width_int]  = 0; | 
 |       assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0]; | 
 |     end else if (data_width_int <= 8) begin | 
 |       assign in_reg0[31:data_width_int]  = 0; | 
 |       assign in_reg0[data_width_int-1:0] = WD[data_width_int-1:0]; | 
 |     end | 
 |  | 
 |     if (data_width_int <= 8) begin | 
 |       assign WS1_0 = 2'b00; | 
 |       assign WS2_0 = 2'b00; | 
 |     end else if (data_width_int > 8 && data_width_int <= 16) begin | 
 |       assign WS1_0 = 2'b01; | 
 |       assign WS2_0 = 2'b01; | 
 |     end else if (data_width_int > 16) begin | 
 |       assign WS1_0 = 2'b10; | 
 |       assign WS2_0 = 2'b10; | 
 |     end | 
 |  | 
 |     if (data_width_int <= 16) begin | 
 |  | 
 |       ram8k_2x1_cell_macro #( | 
 |           `include "bram_init_8_16.vh" | 
 |           .INIT_FILE(INIT_FILE), | 
 |           .data_width_int(data_width_int), | 
 |           .data_depth_int(data_depth_int) | 
 |       ) U1 ( | 
 |           .A1_0(addr_wr0), | 
 |           .A1_1(addr_wr1), | 
 |           .A2_0(addr_rd0), | 
 |           .A2_1(addr_rd1), | 
 |           .ASYNC_FLUSH_0(GND), | 
 |           .ASYNC_FLUSH_1(GND), | 
 |           .ASYNC_FLUSH_S0(GND), | 
 |           .ASYNC_FLUSH_S1(GND), | 
 |           .CLK1_0(WClk), | 
 |           .CLK1_1(WClk), | 
 |           .CLK1S_0(WClk0_Sel), | 
 |           .CLK1S_1(WClk0_Sel), | 
 |           .CLK1EN_0(WClk_En), | 
 |           .CLK1EN_1(WClk_En), | 
 |           .CLK2_0(RClk), | 
 |           .CLK2_1(RClk), | 
 |           .CLK2S_0(RClk0_Sel), | 
 |           .CLK2S_1(RClk0_Sel), | 
 |           .CLK2EN_0(RClk_En), | 
 |           .CLK2EN_1(RClk_En), | 
 |           .CONCAT_EN_0(VCC), | 
 |           .CONCAT_EN_1(GND), | 
 |           .CS1_0(WD0_SEL), | 
 |           .CS1_1(GND), | 
 |           .CS2_0(RD0_SEL), | 
 |           .CS2_1(GND), | 
 |           .DIR_0(GND), | 
 |           .DIR_1(GND), | 
 |           .FIFO_EN_0(GND), | 
 |           .FIFO_EN_1(GND), | 
 |           .P1_0(GND), | 
 |           .P1_1(GND), | 
 |           .P2_0(GND), | 
 |           .P2_1(GND), | 
 |           .PIPELINE_RD_0(reg_rd0), | 
 |           .PIPELINE_RD_1(GND), | 
 |           .SYNC_FIFO_0(GND), | 
 |           .SYNC_FIFO_1(GND), | 
 |           .WD_1({18{GND}}), | 
 |           .WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}), | 
 |           .WIDTH_SELECT1_0(WS1_0), | 
 |           .WIDTH_SELECT1_1(WS_GND), | 
 |           .WIDTH_SELECT2_0(WS2_0), | 
 |           .WIDTH_SELECT2_1(WS_GND), | 
 |           .WEN1_0(wen_reg0[1:0]), | 
 |           .WEN1_1(wen_reg0[3:2]), | 
 |           .Almost_Empty_0(), | 
 |           .Almost_Empty_1(), | 
 |           .Almost_Full_0(), | 
 |           .Almost_Full_1(), | 
 |           .POP_FLAG_0(), | 
 |           .POP_FLAG_1(), | 
 |           .PUSH_FLAG_0(), | 
 |           .PUSH_FLAG_1(), | 
 |           .RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}), | 
 |           .RD_1(), | 
 |           .SD(SD), | 
 |           .SD_RB1(SD_RB1), | 
 |           .LS(LS), | 
 |           .LS_RB1(LS_RB1), | 
 |           .DS(DS), | 
 |           .DS_RB1(DS_RB1), | 
 |           .TEST1A(GND), | 
 |           .TEST1B(GND), | 
 |           .RMA(4'd0), | 
 |           .RMB(4'd0), | 
 |           .RMEA(GND), | 
 |           .RMEB(GND) | 
 |       ); | 
 |     end else if (data_width_int > 16) begin | 
 |  | 
 |       ram8k_2x1_cell_macro #( | 
 |           `include "bram_init_32.vh" | 
 |           .INIT_FILE(INIT_FILE), | 
 |           .data_width_int(data_width_int), | 
 |           .data_depth_int(data_depth_int) | 
 |       ) U2 ( | 
 |           .A1_0(addr_wr0), | 
 |           .A1_1(addr_wr1), | 
 |           .A2_0(addr_rd0), | 
 |           .A2_1(addr_rd1), | 
 |           .ASYNC_FLUSH_0(GND), | 
 |           .ASYNC_FLUSH_1(GND), | 
 |           .ASYNC_FLUSH_S0(GND), | 
 |           .ASYNC_FLUSH_S1(GND), | 
 |           .CLK1_0(WClk), | 
 |           .CLK1_1(WClk), | 
 |           .CLK1S_0(WClk0_Sel), | 
 |           .CLK1S_1(WClk0_Sel), | 
 |           .CLK1EN_0(WClk_En), | 
 |           .CLK1EN_1(WClk_En), | 
 |           .CLK2_0(RClk), | 
 |           .CLK2_1(RClk), | 
 |           .CLK2S_0(RClk0_Sel), | 
 |           .CLK2S_1(RClk0_Sel), | 
 |           .CLK2EN_0(RClk_En), | 
 |           .CLK2EN_1(RClk_En), | 
 |           .CONCAT_EN_0(VCC), | 
 |           .CONCAT_EN_1(GND), | 
 |           .CS1_0(WD0_SEL), | 
 |           .CS1_1(GND), | 
 |           .CS2_0(RD0_SEL), | 
 |           .CS2_1(GND), | 
 |           .DIR_0(GND), | 
 |           .DIR_1(GND), | 
 |           .FIFO_EN_0(GND), | 
 |           .FIFO_EN_1(GND), | 
 |           .P1_0(GND), | 
 |           .P1_1(GND), | 
 |           .P2_0(GND), | 
 |           .P2_1(GND), | 
 |           .PIPELINE_RD_0(reg_rd0), | 
 |           .PIPELINE_RD_1(GND), | 
 |           .SYNC_FIFO_0(GND), | 
 |           .SYNC_FIFO_1(GND), | 
 |           .WD_1({1'b0, in_reg0[31:24], 1'b0, in_reg0[23:16]}), | 
 |           .WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}), | 
 |           .WIDTH_SELECT1_0(WS1_0), | 
 |           .WIDTH_SELECT1_1(WS_GND), | 
 |           .WIDTH_SELECT2_0(WS2_0), | 
 |           .WIDTH_SELECT2_1(WS_GND), | 
 |           .WEN1_0(wen_reg0[1:0]), | 
 |           .WEN1_1(wen_reg0[3:2]), | 
 |           .Almost_Empty_0(), | 
 |           .Almost_Empty_1(), | 
 |           .Almost_Full_0(), | 
 |           .Almost_Full_1(), | 
 |           .POP_FLAG_0(), | 
 |           .POP_FLAG_1(), | 
 |           .PUSH_FLAG_0(), | 
 |           .PUSH_FLAG_1(), | 
 |           .RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}), | 
 |           .RD_1({out_par0[3], out_reg0[31:24], out_par0[2], out_reg0[23:16]}), | 
 |           .SD(SD), | 
 |           .SD_RB1(SD_RB1), | 
 |           .LS(LS), | 
 |           .LS_RB1(LS_RB1), | 
 |           .DS(DS), | 
 |           .DS_RB1(DS_RB1), | 
 |           .TEST1A(GND), | 
 |           .TEST1B(GND), | 
 |           .RMA(4'd0), | 
 |           .RMB(4'd0), | 
 |           .RMEA(GND), | 
 |           .RMEB(GND) | 
 |       ); | 
 |     end | 
 |  | 
 |   endgenerate | 
 |  | 
 |   assign RD[data_width_int-1 : 0] = out_reg0[data_width_int-1 : 0]; | 
 |  | 
 | endmodule | 
 |  | 
 |  | 
 | module FIFO_8K_BLK ( | 
 |     DIN, | 
 |     Fifo_Push_Flush, | 
 |     Fifo_Pop_Flush, | 
 |     PUSH, | 
 |     POP, | 
 |     Push_Clk, | 
 |     Pop_Clk, | 
 |     Push_Clk_En, | 
 |     Pop_Clk_En, | 
 |     Fifo_Dir, | 
 |     Async_Flush, | 
 |     Almost_Full, | 
 |     Almost_Empty, | 
 |     PUSH_FLAG, | 
 |     POP_FLAG, | 
 |     DOUT | 
 | ); | 
 |  | 
 |   parameter data_depth_int = 512, data_width_int = 36, reg_rd_int = 0, sync_fifo_int = 0; | 
 |  | 
 |   input Fifo_Push_Flush, Fifo_Pop_Flush; | 
 |   input Push_Clk, Pop_Clk; | 
 |   input PUSH, POP; | 
 |   input [data_width_int-1:0] DIN; | 
 |   input Push_Clk_En, Pop_Clk_En, Fifo_Dir, Async_Flush; | 
 |   output [data_width_int-1:0] DOUT; | 
 |   output [3:0] PUSH_FLAG, POP_FLAG; | 
 |   output Almost_Full, Almost_Empty; | 
 |  | 
 |   wire LS, DS, SD, LS_RB1, DS_RB1, SD_RB1; | 
 |   wire VCC, GND; | 
 |  | 
 |   wire [10:0] addr_wr, addr_rd; | 
 |   wire clk1_sig0, clk2_sig0, clk1_sig_en0, clk2_sig_en0, fifo_clk1_flush_sig0, fifo_clk2_flush_sig0, p1_sig0, p2_sig0,clk1_sig_sel0,clk2_sig_sel0; | 
 |   wire reg_rd0, sync_fifo0; | 
 |   wire [15:0] in_reg0; | 
 |   wire [15:0] out_reg0; | 
 |   wire [ 1:0] WS1_0; | 
 |   wire [ 1:0] WS2_0; | 
 |   wire Push_Clk0_Sel, Pop_Clk0_Sel; | 
 |   wire Async_Flush_Sel0; | 
 |  | 
 |   wire [1:0] out_par0; | 
 |  | 
 |   assign LS = 1'b0; | 
 |   assign DS = 1'b0; | 
 |   assign SD = 1'b0; | 
 |   assign LS_RB1 = 1'b0; | 
 |   assign DS_RB1 = 1'b0; | 
 |   assign SD_RB1 = 1'b0; | 
 |  | 
 |   assign VCC = 1'b1; | 
 |   assign GND = 1'b0; | 
 |  | 
 |   assign Push_Clk0_Sel  	= 1'b0; | 
 |   assign Pop_Clk0_Sel   	= 1'b0; | 
 |   assign Async_Flush_Sel0 = 1'b0; | 
 |  | 
 |   assign reg_rd0 = reg_rd_int; | 
 |   assign sync_fifo0 = sync_fifo_int; | 
 |  | 
 |   assign addr_wr=11'b00000000000; | 
 |   assign addr_rd=11'b00000000000; | 
 |  | 
 |   assign clk1_sig0 = Fifo_Dir ? Pop_Clk : Push_Clk; | 
 |   assign clk2_sig0 = Fifo_Dir ? Push_Clk : Pop_Clk ; | 
 |   assign clk1_sig_en0 = Fifo_Dir ? Pop_Clk_En : Push_Clk_En; | 
 |   assign clk2_sig_en0 = Fifo_Dir ? Push_Clk_En : Pop_Clk_En ; | 
 |   assign clk1_sig_sel0 =  Push_Clk0_Sel; | 
 |   assign clk2_sig_sel0 =  Pop_Clk0_Sel ; | 
 |   assign fifo_clk1_flush_sig0 = Fifo_Dir ? Fifo_Pop_Flush : Fifo_Push_Flush; | 
 |   assign fifo_clk2_flush_sig0 = Fifo_Dir ? Fifo_Push_Flush : Fifo_Pop_Flush ; | 
 |   assign p1_sig0 = Fifo_Dir ? POP : PUSH; | 
 |   assign p2_sig0 = Fifo_Dir ? PUSH : POP ; | 
 |  | 
 |   generate | 
 |  | 
 |     if (data_width_int == 16) begin | 
 |       assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0]; | 
 |     end else if (data_width_int > 8 && data_width_int < 16) begin | 
 |       assign in_reg0[15:data_width_int]  = 0; | 
 |       assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0]; | 
 |     end else if (data_width_int <= 8) begin | 
 |       assign in_reg0[15:data_width_int]  = 0; | 
 |       assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0]; | 
 |     end | 
 |  | 
 |     if (data_width_int <= 8) begin | 
 |       assign WS1_0 = 2'b00; | 
 |       assign WS2_0 = 2'b00; | 
 |     end else if (data_width_int > 8 && data_width_int <= 16) begin | 
 |       assign WS1_0 = 2'b01; | 
 |       assign WS2_0 = 2'b01; | 
 |     end else if (data_width_int > 16) begin | 
 |       assign WS1_0 = 2'b10; | 
 |       assign WS2_0 = 2'b10; | 
 |     end | 
 |  | 
 |   endgenerate | 
 |  | 
 |   ram8k_2x1_cell_macro #( | 
 |       .data_width_int(data_width_int), | 
 |       .data_depth_int(data_depth_int) | 
 |   ) U1 ( | 
 |       .A1_0(addr_wr), | 
 |       .A1_1(addr_wr), | 
 |       .A2_0(addr_rd), | 
 |       .A2_1(addr_rd), | 
 |       .ASYNC_FLUSH_0(Async_Flush), | 
 |       .ASYNC_FLUSH_1(GND), | 
 |       .ASYNC_FLUSH_S0(Async_Flush_Sel0), | 
 |       .ASYNC_FLUSH_S1(GND), | 
 |       .CLK1_0(clk1_sig0), | 
 |       .CLK1_1(GND), | 
 |       .CLK1EN_0(clk1_sig_en0), | 
 |       .CLK1EN_1(GND), | 
 |       .CLK2_0(clk2_sig0), | 
 |       .CLK2_1(GND), | 
 |       .CLK1S_0(clk1_sig_sel0), | 
 |       .CLK1S_1(GND), | 
 |       .CLK2S_0(clk2_sig_sel0), | 
 |       .CLK2S_1(GND), | 
 |       .CLK2EN_0(clk2_sig_en0), | 
 |       .CLK2EN_1(GND), | 
 |       .CONCAT_EN_0(GND), | 
 |       .CONCAT_EN_1(GND), | 
 |       .CS1_0(fifo_clk1_flush_sig0), | 
 |       .CS1_1(GND), | 
 |       .CS2_0(fifo_clk2_flush_sig0), | 
 |       .CS2_1(GND), | 
 |       .DIR_0(Fifo_Dir), | 
 |       .DIR_1(GND), | 
 |       .FIFO_EN_0(VCC), | 
 |       .FIFO_EN_1(GND), | 
 |       .P1_0(p1_sig0), | 
 |       .P1_1(GND), | 
 |       .P2_0(p2_sig0), | 
 |       .P2_1(GND), | 
 |       .PIPELINE_RD_0(reg_rd0), | 
 |       .PIPELINE_RD_1(GND), | 
 |       .SYNC_FIFO_0(sync_fifo0), | 
 |       .SYNC_FIFO_1(GND), | 
 |       .WD_1({18{GND}}), | 
 |       .WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}), | 
 |       .WIDTH_SELECT1_0(WS1_0), | 
 |       .WIDTH_SELECT1_1({GND, GND}), | 
 |       .WIDTH_SELECT2_0(WS2_0), | 
 |       .WIDTH_SELECT2_1({GND, GND}), | 
 |       .WEN1_0({GND, GND}), | 
 |       .WEN1_1({GND, GND}), | 
 |       .Almost_Empty_0(Almost_Empty), | 
 |       .Almost_Empty_1(), | 
 |       .Almost_Full_0(Almost_Full), | 
 |       .Almost_Full_1(), | 
 |       .POP_FLAG_0(POP_FLAG), | 
 |       .POP_FLAG_1(), | 
 |       .PUSH_FLAG_0(PUSH_FLAG), | 
 |       .PUSH_FLAG_1(), | 
 |       .RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}), | 
 |       .RD_1(), | 
 |       .SD(SD), | 
 |       .SD_RB1(SD_RB1), | 
 |       .LS(LS), | 
 |       .LS_RB1(LS_RB1), | 
 |       .DS(DS), | 
 |       .DS_RB1(DS_RB1), | 
 |       .TEST1A(GND), | 
 |       .TEST1B(GND), | 
 |       .RMA(4'd0), | 
 |       .RMB(4'd0), | 
 |       .RMEA(GND), | 
 |       .RMEB(GND) | 
 |   ); | 
 |  | 
 |   assign DOUT[data_width_int-1 : 0] = out_reg0[data_width_int-1 : 0]; | 
 |  | 
 | endmodule | 
 |  | 
 |  | 
 | module FIFO_16K_BLK ( | 
 |     DIN, | 
 |     Fifo_Push_Flush, | 
 |     Fifo_Pop_Flush, | 
 |     PUSH, | 
 |     POP, | 
 |     Push_Clk, | 
 |     Pop_Clk, | 
 |     Push_Clk_En, | 
 |     Pop_Clk_En, | 
 |     Fifo_Dir, | 
 |     Async_Flush, | 
 |     Almost_Full, | 
 |     Almost_Empty, | 
 |     PUSH_FLAG, | 
 |     POP_FLAG, | 
 |     DOUT | 
 | ); | 
 |  | 
 |   parameter data_depth_int = 512, data_width_int = 36, reg_rd_int = 0, sync_fifo_int = 0; | 
 |  | 
 |   input Fifo_Push_Flush, Fifo_Pop_Flush; | 
 |   input Push_Clk, Pop_Clk; | 
 |   input PUSH, POP; | 
 |   input [data_width_int-1:0] DIN; | 
 |   input Push_Clk_En, Pop_Clk_En, Fifo_Dir, Async_Flush; | 
 |   output [data_width_int-1:0] DOUT; | 
 |   output [3:0] PUSH_FLAG, POP_FLAG; | 
 |   output Almost_Full, Almost_Empty; | 
 |  | 
 |   wire LS, DS, SD, LS_RB1, DS_RB1, SD_RB1; | 
 |   wire VCC, GND; | 
 |  | 
 |   wire [10:0] addr_wr, addr_rd; | 
 |   wire clk1_sig0, clk2_sig0, clk1_sig_en0, clk2_sig_en0, fifo_clk1_flush_sig0, fifo_clk2_flush_sig0, p1_sig0, p2_sig0,clk1_sig_sel0,clk2_sig_sel0; | 
 |   wire reg_rd0, sync_fifo0; | 
 |   wire [31:0] in_reg0; | 
 |   wire [31:0] out_reg0; | 
 |   wire [ 1:0] WS1_0; | 
 |   wire [ 1:0] WS2_0; | 
 |   wire Push_Clk0_Sel, Pop_Clk0_Sel; | 
 |   wire Async_Flush_Sel0; | 
 |  | 
 |   wire [3:0] out_par0; | 
 |   wire [1:0] out_par1; | 
 |  | 
 |   assign LS = 1'b0; | 
 |   assign DS = 1'b0; | 
 |   assign SD = 1'b0; | 
 |   assign LS_RB1 = 1'b0; | 
 |   assign DS_RB1 = 1'b0; | 
 |   assign SD_RB1 = 1'b0; | 
 |  | 
 |   assign VCC = 1'b1; | 
 |   assign GND = 1'b0; | 
 |  | 
 |   assign Push_Clk0_Sel  	= 1'b0; | 
 |   assign Pop_Clk0_Sel   	= 1'b0; | 
 |   assign Async_Flush_Sel0 = 1'b0; | 
 |  | 
 |   assign reg_rd0 = reg_rd_int; | 
 |   assign sync_fifo0 = sync_fifo_int; | 
 |  | 
 |   assign addr_wr=11'b00000000000; | 
 |   assign addr_rd=11'b00000000000; | 
 |  | 
 |   assign clk1_sig0 = Fifo_Dir ? Pop_Clk : Push_Clk; | 
 |   assign clk2_sig0 = Fifo_Dir ? Push_Clk : Pop_Clk ; | 
 |   assign clk1_sig_en0 = Fifo_Dir ? Pop_Clk_En : Push_Clk_En; | 
 |   assign clk2_sig_en0 = Fifo_Dir ? Push_Clk_En : Pop_Clk_En ; | 
 |   assign clk1_sig_sel0 =  Push_Clk0_Sel; | 
 |   assign clk2_sig_sel0 =  Pop_Clk0_Sel ; | 
 |   assign fifo_clk1_flush_sig0 = Fifo_Dir ? Fifo_Pop_Flush : Fifo_Push_Flush; | 
 |   assign fifo_clk2_flush_sig0 = Fifo_Dir ? Fifo_Push_Flush : Fifo_Pop_Flush ; | 
 |   assign p1_sig0 = Fifo_Dir ? POP : PUSH; | 
 |   assign p2_sig0 = Fifo_Dir ? PUSH : POP ; | 
 |  | 
 |   generate | 
 |     if (data_width_int == 32) begin | 
 |       assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0]; | 
 |     end else if (data_width_int > 8 && data_width_int < 32) begin | 
 |       assign in_reg0[31:data_width_int]  = 0; | 
 |       assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0]; | 
 |     end else if (data_width_int <= 8) begin | 
 |       assign in_reg0[31:data_width_int]  = 0; | 
 |       assign in_reg0[data_width_int-1:0] = DIN[data_width_int-1:0]; | 
 |     end | 
 |  | 
 |     if (data_width_int <= 8) begin | 
 |       assign WS1_0 = 2'b00; | 
 |       assign WS2_0 = 2'b00; | 
 |     end else if (data_width_int > 8 && data_width_int <= 16) begin | 
 |       assign WS1_0 = 2'b01; | 
 |       assign WS2_0 = 2'b01; | 
 |     end else if (data_width_int > 16) begin | 
 |       assign WS1_0 = 2'b10; | 
 |       assign WS2_0 = 2'b10; | 
 |     end | 
 |  | 
 |     if (data_width_int <= 16) begin | 
 |  | 
 |       ram8k_2x1_cell_macro #( | 
 |           .data_width_int(data_width_int), | 
 |           .data_depth_int(data_depth_int) | 
 |       ) U1 ( | 
 |           .A1_0(addr_wr), | 
 |           .A1_1(addr_wr), | 
 |           .A2_0(addr_rd), | 
 |           .A2_1(addr_rd), | 
 |           .ASYNC_FLUSH_0(Async_Flush), | 
 |           .ASYNC_FLUSH_1(GND), | 
 |           .ASYNC_FLUSH_S0(Async_Flush_Sel0), | 
 |           .ASYNC_FLUSH_S1(Async_Flush_Sel0), | 
 |           .CLK1_0(clk1_sig0), | 
 |           .CLK1_1(clk1_sig0), | 
 |           .CLK1EN_0(clk1_sig_en0), | 
 |           .CLK1EN_1(clk1_sig_en0), | 
 |           .CLK2_0(clk2_sig0), | 
 |           .CLK2_1(clk2_sig0), | 
 |           .CLK1S_0(clk1_sig_sel0), | 
 |           .CLK1S_1(clk1_sig_sel0), | 
 |           .CLK2S_0(clk2_sig_sel0), | 
 |           .CLK2S_1(clk2_sig_sel0), | 
 |           .CLK2EN_0(clk2_sig_en0), | 
 |           .CLK2EN_1(clk2_sig_en0), | 
 |           .CONCAT_EN_0(VCC), | 
 |           .CONCAT_EN_1(GND), | 
 |           .CS1_0(fifo_clk1_flush_sig0), | 
 |           .CS1_1(GND), | 
 |           .CS2_0(fifo_clk2_flush_sig0), | 
 |           .CS2_1(GND), | 
 |           .DIR_0(Fifo_Dir), | 
 |           .DIR_1(GND), | 
 |           .FIFO_EN_0(VCC), | 
 |           .FIFO_EN_1(GND), | 
 |           .P1_0(p1_sig0), | 
 |           .P1_1(GND), | 
 |           .P2_0(p2_sig0), | 
 |           .P2_1(GND), | 
 |           .PIPELINE_RD_0(reg_rd0), | 
 |           .PIPELINE_RD_1(GND), | 
 |           .SYNC_FIFO_0(sync_fifo0), | 
 |           .SYNC_FIFO_1(GND), | 
 |           .WD_1({18{GND}}), | 
 |           .WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}), | 
 |           .WIDTH_SELECT1_0(WS1_0), | 
 |           .WIDTH_SELECT1_1({GND, GND}), | 
 |           .WIDTH_SELECT2_0(WS2_0), | 
 |           .WIDTH_SELECT2_1({GND, GND}), | 
 |           .WEN1_0({GND, GND}), | 
 |           .WEN1_1({GND, GND}), | 
 |           .Almost_Empty_0(Almost_Empty), | 
 |           .Almost_Empty_1(), | 
 |           .Almost_Full_0(Almost_Full), | 
 |           .Almost_Full_1(), | 
 |           .POP_FLAG_0(POP_FLAG), | 
 |           .POP_FLAG_1(), | 
 |           .PUSH_FLAG_0(PUSH_FLAG), | 
 |           .PUSH_FLAG_1(), | 
 |           .RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}), | 
 |           .RD_1(), | 
 |           .SD(SD), | 
 |           .SD_RB1(SD_RB1), | 
 |           .LS(LS), | 
 |           .LS_RB1(LS_RB1), | 
 |           .DS(DS), | 
 |           .DS_RB1(DS_RB1), | 
 |           .TEST1A(GND), | 
 |           .TEST1B(GND), | 
 |           .RMA(4'd0), | 
 |           .RMB(4'd0), | 
 |           .RMEA(GND), | 
 |           .RMEB(GND) | 
 |       ); | 
 |  | 
 |     end else if (data_width_int > 16) begin | 
 |  | 
 |       ram8k_2x1_cell_macro #( | 
 |           .data_width_int(data_width_int), | 
 |           .data_depth_int(data_depth_int) | 
 |       ) U2 ( | 
 |           .A1_0(addr_wr), | 
 |           .A1_1(addr_wr), | 
 |           .A2_0(addr_rd), | 
 |           .A2_1(addr_rd), | 
 |           .ASYNC_FLUSH_0(Async_Flush), | 
 |           .ASYNC_FLUSH_1(GND), | 
 |           .ASYNC_FLUSH_S0(Async_Flush_Sel0), | 
 |           .ASYNC_FLUSH_S1(Async_Flush_Sel0), | 
 |           .CLK1_0(clk1_sig0), | 
 |           .CLK1_1(clk1_sig0), | 
 |           .CLK1EN_0(clk1_sig_en0), | 
 |           .CLK1EN_1(clk1_sig_en0), | 
 |           .CLK2_0(clk2_sig0), | 
 |           .CLK2_1(clk2_sig0), | 
 |           .CLK1S_0(clk1_sig_sel0), | 
 |           .CLK1S_1(clk1_sig_sel0), | 
 |           .CLK2S_0(clk2_sig_sel0), | 
 |           .CLK2S_1(clk2_sig_sel0), | 
 |           .CLK2EN_0(clk2_sig_en0), | 
 |           .CLK2EN_1(clk2_sig_en0), | 
 |           .CONCAT_EN_0(VCC), | 
 |           .CONCAT_EN_1(GND), | 
 |           .CS1_0(fifo_clk1_flush_sig0), | 
 |           .CS1_1(GND), | 
 |           .CS2_0(fifo_clk2_flush_sig0), | 
 |           .CS2_1(GND), | 
 |           .DIR_0(Fifo_Dir), | 
 |           .DIR_1(GND), | 
 |           .FIFO_EN_0(VCC), | 
 |           .FIFO_EN_1(GND), | 
 |           .P1_0(p1_sig0), | 
 |           .P1_1(GND), | 
 |           .P2_0(p2_sig0), | 
 |           .P2_1(GND), | 
 |           .PIPELINE_RD_0(reg_rd0), | 
 |           .PIPELINE_RD_1(GND), | 
 |           .SYNC_FIFO_0(sync_fifo0), | 
 |           .SYNC_FIFO_1(GND), | 
 |           .WD_1({1'b0, in_reg0[31:24], 1'b0, in_reg0[23:16]}), | 
 |           .WD_0({1'b0, in_reg0[15:8], 1'b0, in_reg0[7:0]}), | 
 |           .WIDTH_SELECT1_0(WS1_0), | 
 |           .WIDTH_SELECT1_1({GND, GND}), | 
 |           .WIDTH_SELECT2_0(WS2_0), | 
 |           .WIDTH_SELECT2_1({GND, GND}), | 
 |           .WEN1_0({GND, GND}), | 
 |           .WEN1_1({GND, GND}), | 
 |           .Almost_Empty_0(Almost_Empty), | 
 |           .Almost_Empty_1(), | 
 |           .Almost_Full_0(Almost_Full), | 
 |           .Almost_Full_1(), | 
 |           .POP_FLAG_0(POP_FLAG), | 
 |           .POP_FLAG_1(), | 
 |           .PUSH_FLAG_0(PUSH_FLAG), | 
 |           .PUSH_FLAG_1(), | 
 |           .RD_0({out_par0[1], out_reg0[15:8], out_par0[0], out_reg0[7:0]}), | 
 |           .RD_1({out_par0[3], out_reg0[31:24], out_par0[2], out_reg0[23:16]}), | 
 |           .SD(SD), | 
 |           .SD_RB1(SD_RB1), | 
 |           .LS(LS), | 
 |           .LS_RB1(LS_RB1), | 
 |           .DS(DS), | 
 |           .DS_RB1(DS_RB1), | 
 |           .TEST1A(GND), | 
 |           .TEST1B(GND), | 
 |           .RMA(4'd0), | 
 |           .RMB(4'd0), | 
 |           .RMEA(GND), | 
 |           .RMEB(GND) | 
 |       ); | 
 |     end | 
 |  | 
 |   endgenerate | 
 |  | 
 |   assign DOUT[data_width_int-1 : 0] = out_reg0[data_width_int-1 : 0]; | 
 |  | 
 | endmodule | 
 |  |