|  | // Copyright 2020-2022 F4PGA Authors | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  | // | 
|  | // SPDX-License-Identifier: Apache-2.0 | 
|  |  | 
|  | `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 | 
|  |  |