/*
    Copyright (c) 2022 SMIC
    Filename:      RAM1024.v
    IP code :      S018RF2P
    Version:       0.2.b
    CreateDate:    Sep 11, 2022

    Verilog Model for 2-PORT Register File
    SMIC 0.18um G Logic Process

    Configuration: -instname RAM1024 -rows 256 -bits 24 -mux 4 
    Redundancy: Off
    Bit-Write: Off
*/

/* DISCLAIMER                                                                      */
/*                                                                                 */  
/*   SMIC hereby provides the quality information to you but makes no claims,      */
/* promises or guarantees about the accuracy, completeness, or adequacy of the     */
/* information herein. The information contained herein is provided on an "AS IS"  */
/* basis without any warranty, and SMIC assumes no obligation to provide support   */
/* of any kind or otherwise maintain the information.                              */  
/*   SMIC disclaims any representation that the information does not infringe any  */
/* intellectual property rights or proprietary rights of any third parties. SMIC   */
/* makes no other warranty, whether express, implied or statutory as to any        */
/* matter whatsoever, including but not limited to the accuracy or sufficiency of  */
/* any information or the merchantability and fitness for a particular purpose.    */
/* Neither SMIC nor any of its representatives shall be liable for any cause of    */
/* action incurred to connect to this service.                                     */  
/*                                                                                 */
/* STATEMENT OF USE AND CONFIDENTIALITY                                            */  
/*                                                                                 */  
/*   The following/attached material contains confidential and proprietary         */  
/* information of SMIC. This material is based upon information which SMIC         */  
/* considers reliable, but SMIC neither represents nor warrants that such          */
/* information is accurate or complete, and it must not be relied upon as such.    */
/* This information was prepared for informational purposes and is for the use     */
/* by SMIC's customer only. SMIC reserves the right to make changes in the         */  
/* information at any time without notice.                                         */  
/*   No part of this information may be reproduced, transmitted, transcribed,      */  
/* stored in a retrieval system, or translated into any human or computer          */ 
/* language, in any form or by any means, electronic, mechanical, magnetic,        */  
/* optical, chemical, manual, or otherwise, without the prior written consent of   */
/* SMIC. Any unauthorized use or disclosure of this material is strictly           */  
/* prohibited and may be unlawful. By accepting this material, the receiving       */  
/* party shall be deemed to have acknowledged, accepted, and agreed to be bound    */
/* by the foregoing limitations and restrictions. Thank you.                       */  
/*                                                                                 */  

`timescale 1ns/1ps
`celldefine

module RAM1024 (
                          QA,
			  CLKA,
			  CLKB,
			  CENA,
			  CENB,
			  AA,
			  AB,
			  DB);

  parameter	Bits = 24;
  parameter	Word_Depth = 1024;
  parameter	Add_Width = 10;

  `ifdef MEM_CHECK_OFF
  parameter disable_display = 1'b1;
 `else
  parameter disable_display = 1'b0;
 `endif



  output [Bits-1:0]     QA;
  input                 CLKA;
  input                 CLKB;
  input                 CENA;
  input                 CENB;
  input	[Add_Width-1:0] AA;
  input	[Add_Width-1:0] AB;
  input	[Bits-1:0]      DB;

  wire [Bits-1:0]      QA_int;
  wire [Add_Width-1:0] AA_int;
  wire [Add_Width-1:0] AB_int;
  wire                 CLKA_int;
  wire                 CLKB_int;
  wire                 CENA_int;
  wire                 CENB_int;
  wire [Bits-1:0]      DB_int;

  reg  [Bits-1:0]       QA_latched;
  reg  [Add_Width-1:0]  AA_latched;
  reg  [Add_Width-1:0]  AB_latched;
  reg  [Bits-1:0]       DB_latched;
  reg                   CENA_latched;
  reg                   CENB_latched;
  reg                   LAST_CLKA;
  reg                   LAST_CLKB;
  reg 			AA0_flag;
  reg 			AA1_flag;
  reg 			AA2_flag;
  reg 			AA3_flag;
  reg 			AA4_flag;
  reg 			AA5_flag;
  reg 			AA6_flag;
  reg 			AA7_flag;
  reg 			AA8_flag;
  reg 			AA9_flag;
  reg 			AB0_flag;
  reg 			AB1_flag;
  reg 			AB2_flag;
  reg 			AB3_flag;
  reg 			AB4_flag;
  reg 			AB5_flag;
  reg 			AB6_flag;
  reg 			AB7_flag;
  reg 			AB8_flag;
  reg 			AB9_flag;
  reg                     CENA_flag;
  reg                     CENB_flag;
  reg                     CLKA_CYC_flag;
  reg                     CLKB_CYC_flag;
  reg                     CLKA_H_flag;
  reg                     CLKB_H_flag;
  reg                     CLKA_L_flag;
  reg                     CLKB_L_flag;
  reg                     DB0_flag;
  reg                     DB1_flag;
  reg                     DB2_flag;
  reg                     DB3_flag;
  reg                     DB4_flag;
  reg                     DB5_flag;
  reg                     DB6_flag;
  reg                     DB7_flag;
  reg                     DB8_flag;
  reg                     DB9_flag;
  reg                     DB10_flag;
  reg                     DB11_flag;
  reg                     DB12_flag;
  reg                     DB13_flag;
  reg                     DB14_flag;
  reg                     DB15_flag;
  reg                     DB16_flag;
  reg                     DB17_flag;
  reg                     DB18_flag;
  reg                     DB19_flag;
  reg                     DB20_flag;
  reg                     DB21_flag;
  reg                     DB22_flag;
  reg                     DB23_flag;

  reg			  A_flag;
  reg			  B_flag;
  reg                     VIOA_flag;
  reg                     VIOB_flag;
  reg                     LAST_VIOA_flag;
  reg                     LAST_VIOB_flag;


  reg [Add_Width-1:0]     AA_flag;
  reg [Add_Width-1:0]     AB_flag;
  reg [Bits-1:0]          DB_flag;
  reg                     LAST_CENA_flag;
  reg                     LAST_CENB_flag;
  reg [Add_Width-1:0]     LAST_AA_flag;
  reg [Add_Width-1:0]     LAST_AB_flag;
  reg [Bits-1:0]          LAST_DB_flag;

  reg                      LAST_CLKA_CYC_flag;
  reg                      LAST_CLKB_CYC_flag;
  reg                      LAST_CLKA_H_flag;
  reg                      LAST_CLKB_H_flag;
  reg                      LAST_CLKA_L_flag;
  reg                      LAST_CLKB_L_flag;

  wire                    CEA_flag;
  wire                    CEB_flag;
  wire	 		  clkconfA_flag;
  wire			  clkconfB_flag;
  wire			  clkconf_flag;

  reg    [Bits-1:0] mem_array[Word_Depth-1:0];

  integer      i;
  integer      n;

  buf dout_buf[Bits-1:0] (QA, QA_int);
  buf (CLKA_int, CLKA);
  buf (CLKB_int, CLKB);
  buf (CENA_int, CENA);
  buf (CENB_int, CENB);
  buf aa_buf[Add_Width-1:0] (AA_int, AA);
  buf ab_buf[Add_Width-1:0] (AB_int, AB);
  buf din_buf[Bits-1:0] (DB_int, DB);   

  assign QA_int=QA_latched;
  assign CEA_flag=(CENA_int !== 1'b1);
  assign CEB_flag=(CENB_int !== 1'b1);
  assign clkconfA_flag=((AA_int===AB_latched) || (^AA_int === 1'bx) || (^AB_latched === 1'bx) || CLKA_int === 1'bx || CLKB_int === 1'bx) && (CENA_int!==1'b1) && (CENB_latched!==1'b1); 

  assign clkconfB_flag=((AB_int===AA_latched) || (^AA_latched === 1'bx) || (^AB_int === 1'bx) || CLKA_int === 1'bx || CLKB_int === 1'bx) && (CENB_int!==1'b1) && (CENA_latched!==1'b1);

  assign clkconf_flag=((AA_int===AB_int)|| (^AA_int === 1'bx) || (^AB_int === 1'bx) || CLKA_int === 1'bx || CLKB_int === 1'bx) && (CENA_int!==1'b1) && (CENB_int!==1'b1);
  always @(CLKA_int)
    begin
      casez({LAST_CLKA, CLKA_int})
        2'b01: begin
          CENA_latched = CENA_int;
          AA_latched = AA_int;
          rw_memA;
        end
        2'b10,
        2'bx?,
        2'b00,
        2'b11: ;
        2'b?x: begin
	  for(i=0;i<Word_Depth;i=i+1)
    	    mem_array[i]={Bits{1'bx}};
    	  QA_latched={Bits{1'bx}};
          rw_memA;
          end
      endcase
    LAST_CLKA=CLKA_int;
   end

  always @(CLKB_int)
    begin
      casez({LAST_CLKB, CLKB_int})
        2'b01: begin
          CENB_latched = CENB_int;
          AB_latched = AB_int;
          DB_latched = DB_int;
          rw_memB;
        end
        2'b10,
        2'bx?,
        2'b00,
        2'b11: ;
        2'b?x: begin
          for(i=0;i<Word_Depth;i=i+1)
            mem_array[i]={Bits{1'bx}};
          rw_memA;
          end
      endcase
    LAST_CLKB=CLKB_int;
   end


  always @(CENA_flag
           or AA0_flag
           or AA1_flag
           or AA2_flag
           or AA3_flag
           or AA4_flag
           or AA5_flag
           or AA6_flag
           or AA7_flag
           or AA8_flag
           or AA9_flag
           or VIOA_flag)
    begin
      update_flag_busA;
      CENA_latched = (CENA_flag!==LAST_CENA_flag) ? 1'bx : CENA_latched ;
      for (n=0; n<Add_Width; n=n+1)
      AA_latched[n] = (AA_flag[n]!==LAST_AA_flag[n]) ? 1'bx : AA_latched[n] ;
      LAST_CENA_flag = CENA_flag;
      LAST_AA_flag = AA_flag;
      if(VIOA_flag!==LAST_VIOA_flag)
        begin
	 if(disable_display == 0) $display("**MEM_Error Timing Violation between posedge CLKB and posedge CLKA, in %m at %0t", $time);
         if(CLKA === 1'bx || CLKB=== 1'bx) begin
	     x_mem;
             QA_latched={Bits{1'bx}};
	  end
	  else begin
            if(B_flag===1'b0)
            QA_latched={Bits{1'bx}};
          
        end
	LAST_VIOA_flag=VIOA_flag;
	end
      else
        rw_memA;
   end
   
   always @( CLKA_CYC_flag
           	or CLKA_H_flag
           	or CLKA_L_flag)
  begin
      if(LAST_CLKA_CYC_flag !== CLKA_CYC_flag) begin
         x_mem;
	 QA_latched={Bits{1'bx}};
	 LAST_CLKA_CYC_flag = CLKA_CYC_flag;
      end
      if(LAST_CLKA_H_flag !== CLKA_H_flag) begin
         x_mem;
	 QA_latched={Bits{1'bx}};
	 LAST_CLKA_H_flag = CLKA_H_flag;
      end
      if(LAST_CLKA_L_flag !== CLKA_L_flag) begin
         x_mem;
	 QA_latched={Bits{1'bx}};
	 LAST_CLKA_L_flag = CLKA_L_flag;
      end
  end
  always @( CLKB_CYC_flag
           	or CLKB_H_flag
           	or CLKB_L_flag)
  begin
      if(LAST_CLKB_CYC_flag !== CLKB_CYC_flag) begin
         x_mem;
	 QA_latched={Bits{1'bx}};
	 LAST_CLKB_CYC_flag = CLKB_CYC_flag;
      end
      if(LAST_CLKB_H_flag !== CLKB_H_flag) begin
         x_mem;
	 QA_latched={Bits{1'bx}};
	 LAST_CLKB_H_flag = CLKB_H_flag;
      end
      if(LAST_CLKB_L_flag !== CLKB_L_flag) begin
         x_mem;
	 QA_latched={Bits{1'bx}};
	 LAST_CLKB_L_flag = CLKB_L_flag;
      end
  end




  always @(CENB_flag
           or AB0_flag
           or AB1_flag
           or AB2_flag
           or AB3_flag
           or AB4_flag
           or AB5_flag
           or AB6_flag
           or AB7_flag
           or AB8_flag
           or AB9_flag
           or DB0_flag
           or DB1_flag
           or DB2_flag
           or DB3_flag
           or DB4_flag
           or DB5_flag
           or DB6_flag
           or DB7_flag
           or DB8_flag
           or DB9_flag
           or DB10_flag
           or DB11_flag
           or DB12_flag
           or DB13_flag
           or DB14_flag
           or DB15_flag
           or DB16_flag
           or DB17_flag
           or DB18_flag
           or DB19_flag
           or DB20_flag
           or DB21_flag
           or DB22_flag
           or DB23_flag
           or VIOB_flag)
    begin
      update_flag_busB;
      CENB_latched = (CENB_flag!==LAST_CENB_flag) ? 1'bx : CENB_latched ;
      for (n=0; n<Add_Width; n=n+1)
      AB_latched[n] = (AB_flag[n]!==LAST_AB_flag[n]) ? 1'bx : AB_latched[n] ;
      for (n=0; n<Bits; n=n+1)
      DB_latched[n] = (DB_flag[n]!==LAST_DB_flag[n]) ? 1'bx : DB_latched[n] ;
      LAST_CENB_flag = CENB_flag;
      LAST_AB_flag = AB_flag;
      LAST_DB_flag = DB_flag;
      if(VIOB_flag!==LAST_VIOB_flag)
        begin
	 if(disable_display == 0) $display("**MEM_Error Timing Violation between posedge CLKA and posedge CLKB, in %m at %0t", $time);
          if(CLKA === 1'bx || CLKB=== 1'bx) begin //if
	     x_mem;
             QA_latched={Bits{1'bx}};
	  end // if end
	  else begin
            if(A_flag===1'b1)
            QA_latched={Bits{1'bx}};
          end
	LAST_VIOB_flag=VIOB_flag;
       end
      else
        rw_memB;
   end

  task rw_memA;
    begin
      A_flag=1'bx;
     if(CLKA !== 1'bx && CLKB!== 1'bx) begin
      if(CENA_latched===1'b0)
        begin
          A_flag=1;
          if(^(AA_latched)===1'bx)
            QA_latched={Bits{1'bx}};
          else
	    QA_latched=mem_array[AA_latched];
        end
      else if(CENA_latched===1'bx)
        begin
          A_flag=1;
   	  QA_latched={Bits{1'bx}};
        end
     end  // clk = x 
    else  begin
       x_mem;
       QA_latched={Bits{1'bx}};
    end 	
    end
  endtask
      
  task rw_memB;
    begin
      B_flag=1'bx;
     if(CLKB !== 1'bx && CLKA !== 1'bx) begin 
      if(CENB_latched===1'b0)
        begin
          B_flag=0;
   	  if(^(AB_latched)===1'bx)
            x_mem;
   	  else
   	    mem_array[AB_latched]=DB_latched;
        end
      else if(CENB_latched===1'bx)
        begin
          B_flag=0;
          if(^(AB_latched)===1'bx)
            x_mem;
          else
	   mem_array[AB_latched]={Bits{1'bx}};
        end
      end  // clk = x 
      else  begin
       x_mem;
       QA_latched={Bits{1'bx}};
      end 	
    end
  endtask

   task x_mem;
   begin
     for(i=0;i<Word_Depth;i=i+1)
     mem_array[i]={Bits{1'bx}};
   end
   endtask

  task update_flag_busA;
  begin
    AA_flag = {
             AA9_flag,
             AA8_flag,
             AA7_flag,
             AA6_flag,
             AA5_flag,
             AA4_flag,
             AA3_flag,
             AA2_flag,
             AA1_flag,
             AA0_flag};
   end
   endtask

  task update_flag_busB;
  begin
    AB_flag = {
             AB9_flag,
             AB8_flag,
             AB7_flag,
             AB6_flag,
             AB5_flag,
             AB4_flag,
             AB3_flag,
             AB2_flag,
             AB1_flag,
             AB0_flag};
    DB_flag = {
             DB23_flag,
             DB22_flag,
             DB21_flag,
             DB20_flag,
             DB19_flag,
             DB18_flag,
             DB17_flag,
             DB16_flag,
             DB15_flag,
             DB14_flag,
             DB13_flag,
             DB12_flag,
             DB11_flag,
             DB10_flag,
             DB9_flag,
             DB8_flag,
             DB7_flag,
             DB6_flag,
             DB5_flag,
             DB4_flag,
             DB3_flag,
             DB2_flag,
             DB1_flag,
             DB0_flag};
   end
   endtask


//   specify
//     (posedge CLKA => (QA[0] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[1] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[2] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[3] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[4] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[5] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[6] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[7] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[8] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[9] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[10] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[11] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[12] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[13] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[14] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[15] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[16] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[17] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[18] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[19] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[20] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[21] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[22] : 1'bx))=(1.000,1.000);
//     (posedge CLKA => (QA[23] : 1'bx))=(1.000,1.000);

//     $setuphold(posedge CLKA &&& CEA_flag,posedge AA[0],0.500,0.250,AA0_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,negedge AA[0],0.500,0.250,AA0_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,posedge AA[1],0.500,0.250,AA1_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,negedge AA[1],0.500,0.250,AA1_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,posedge AA[2],0.500,0.250,AA2_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,negedge AA[2],0.500,0.250,AA2_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,posedge AA[3],0.500,0.250,AA3_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,negedge AA[3],0.500,0.250,AA3_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,posedge AA[4],0.500,0.250,AA4_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,negedge AA[4],0.500,0.250,AA4_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,posedge AA[5],0.500,0.250,AA5_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,negedge AA[5],0.500,0.250,AA5_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,posedge AA[6],0.500,0.250,AA6_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,negedge AA[6],0.500,0.250,AA6_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,posedge AA[7],0.500,0.250,AA7_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,negedge AA[7],0.500,0.250,AA7_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,posedge AA[8],0.500,0.250,AA8_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,negedge AA[8],0.500,0.250,AA8_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,posedge AA[9],0.500,0.250,AA9_flag);
//     $setuphold(posedge CLKA &&& CEA_flag,negedge AA[9],0.500,0.250,AA9_flag);

//     $setuphold(posedge CLKB &&& CEB_flag,posedge AB[0],0.500,0.250,AB0_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge AB[0],0.500,0.250,AB0_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge AB[1],0.500,0.250,AB1_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge AB[1],0.500,0.250,AB1_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge AB[2],0.500,0.250,AB2_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge AB[2],0.500,0.250,AB2_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge AB[3],0.500,0.250,AB3_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge AB[3],0.500,0.250,AB3_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge AB[4],0.500,0.250,AB4_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge AB[4],0.500,0.250,AB4_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge AB[5],0.500,0.250,AB5_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge AB[5],0.500,0.250,AB5_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge AB[6],0.500,0.250,AB6_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge AB[6],0.500,0.250,AB6_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge AB[7],0.500,0.250,AB7_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge AB[7],0.500,0.250,AB7_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge AB[8],0.500,0.250,AB8_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge AB[8],0.500,0.250,AB8_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge AB[9],0.500,0.250,AB9_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge AB[9],0.500,0.250,AB9_flag);

//     $setuphold(posedge CLKA,posedge CENA,0.500,0.250,CENA_flag);
//     $setuphold(posedge CLKA,negedge CENA,0.500,0.250,CENA_flag);
//     $period(posedge CLKA,3.329,CLKA_CYC_flag);
//     $width(posedge CLKA,0.999,0,CLKA_H_flag);
//     $width(negedge CLKA,0.999,0,CLKA_L_flag);

//     $setuphold(posedge CLKB,posedge CENB,0.500,0.250,CENB_flag);
//     $setuphold(posedge CLKB,negedge CENB,0.500,0.250,CENB_flag);
//     $period(posedge CLKB,3.329,CLKB_CYC_flag);
//     $width(posedge CLKB,0.999,0,CLKB_H_flag);
//     $width(negedge CLKB,0.999,0,CLKB_L_flag);

//     $setup(posedge CLKA,posedge CLKB &&& clkconfB_flag,1.000,VIOB_flag);
//     $hold(posedge CLKA,posedge CLKB &&& clkconf_flag,0.010,VIOB_flag);
//     $setup(posedge CLKB,posedge CLKA &&& clkconfA_flag,1.000,VIOA_flag);
//     $hold(posedge CLKB,posedge CLKA &&& clkconf_flag,0.010,VIOA_flag);

//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[0],0.500,0.250,DB0_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[0],0.500,0.250,DB0_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[1],0.500,0.250,DB1_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[1],0.500,0.250,DB1_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[2],0.500,0.250,DB2_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[2],0.500,0.250,DB2_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[3],0.500,0.250,DB3_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[3],0.500,0.250,DB3_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[4],0.500,0.250,DB4_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[4],0.500,0.250,DB4_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[5],0.500,0.250,DB5_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[5],0.500,0.250,DB5_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[6],0.500,0.250,DB6_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[6],0.500,0.250,DB6_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[7],0.500,0.250,DB7_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[7],0.500,0.250,DB7_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[8],0.500,0.250,DB8_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[8],0.500,0.250,DB8_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[9],0.500,0.250,DB9_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[9],0.500,0.250,DB9_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[10],0.500,0.250,DB10_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[10],0.500,0.250,DB10_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[11],0.500,0.250,DB11_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[11],0.500,0.250,DB11_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[12],0.500,0.250,DB12_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[12],0.500,0.250,DB12_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[13],0.500,0.250,DB13_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[13],0.500,0.250,DB13_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[14],0.500,0.250,DB14_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[14],0.500,0.250,DB14_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[15],0.500,0.250,DB15_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[15],0.500,0.250,DB15_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[16],0.500,0.250,DB16_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[16],0.500,0.250,DB16_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[17],0.500,0.250,DB17_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[17],0.500,0.250,DB17_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[18],0.500,0.250,DB18_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[18],0.500,0.250,DB18_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[19],0.500,0.250,DB19_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[19],0.500,0.250,DB19_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[20],0.500,0.250,DB20_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[20],0.500,0.250,DB20_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[21],0.500,0.250,DB21_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[21],0.500,0.250,DB21_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[22],0.500,0.250,DB22_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[22],0.500,0.250,DB22_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,posedge DB[23],0.500,0.250,DB23_flag);
//     $setuphold(posedge CLKB &&& CEB_flag,negedge DB[23],0.500,0.250,DB23_flag);
//   endspecify

endmodule

`endcelldefine
