// ================================================  
// Copyright 2013, Cypress Semiconductor Corporation.
//
// This software is owned by Cypress Semiconductor Corporation (Cypress)
// and is protected by United States copyright laws and international
// treaty provisions. Therefore, you must treat this software like any
// other copyrighted material (e.g., book, or musical recording), with
// the exception that one copy may be made for personal use or
// evaluation. Reproduction, modification, translation, compilation, or
// representation of this software in any other form (e.g., paper,
// magnetic, optical, silicon, etc.) is prohibited without the express
// written permission of Cypress.
//
// Disclaimer: Cypress makes no warranty of any kind, express or implied,
// with regard to this material, including, but not limited to, the
// implied warranties of merchantability and fitness for a particular
// purpose. Cypress reserves the right to make changes without further
// notice to the materials described herein. Cypress does not assume any
// liability arising out of the application or use of any product or
// circuit described herein. Cypress' products described herein are
// not authorized for use as components in life-support devices.
//
// This software is protected by and subject to worldwide patent
// coverage, including U.S. and foreign patents. Use may be limited by
// and subject to the Cypress Software License Agreement.
//
// ===============================================
// File     : $File: //depot/icm/proj/s8fmlt/icmrel/ipVault/opus/s8fmlt/s8fmlt_32k_sys/behavioral/verilog.v $
// Author   : Iustin Ignatescu (IXI)
// Date     : 09/2012
// $Revision: 1 $
// ===============================================
// Description:  this the system level behavioral model for the s8fmlt_32k_sys
//    flash macro. This is a stand alone model which models the entire system including
//    pump, iref, vdac logic previously modeled in separate blocks
//----------------------------------------------------------------------
`timescale 1ns/1ps


module s8fmlt_32k_sys ( amuxbusa, amuxbusb, dout, scan_out1, scan_out2, 
`ifdef USE_PG_PIN
    vpwri_fm,
`endif
    xy_out, axa, bdac, ca, cdac, clk, di, idac, iref, iso, mdac, mode, ndac,
    pa, pclk, pd1, pd2, pdac, pe, pnb, pw, ra, reset, scan_en, scan_in1, scan_in2,
    scan_mode, sdac, seq, sleep, tm, turbo_b, itimo_nvl, VPOS, VNEG, VMARG_AUX,
`ifdef USE_PG_PIN
    vccd, vgnd, vnb, vpb, vpb_sw,
`endif
    vref );

parameter  CODEFILE = "s8fmlt_32k.rom" ;

//----------------------------------------------------------------------------------------------------
// configuratioon parameters

localparam AADDR_BITS  = 1;             // special sector select bit - axa
localparam BADDR_BITS  = 0; // no ba address bits
localparam RADDR_BITS  = 8; // 512 rows in one sector one plane
localparam CADDR_BITS  = 4; // 16 columns
localparam DADDR_BITS  = 0; // Da bus not used in 64k lite
localparam PADDR_BITS  = 7; // 128x8bit latches
localparam SRADDR_BITS = 3; // number of bits required to address a special row in a special sector - 8 special rows
localparam SBADDR_BITS = 0; //number of ba bits required to address one special sector
localparam ADDR_BITS   = AADDR_BITS+BADDR_BITS+RADDR_BITS+CADDR_BITS; //ba is 0 for 64k lite
localparam PLADDR_BITS = 0; // Bits required to decode the plane. One plane in 64k lite
localparam TADDR_BITS  = 5; // new implementation of test mode select

localparam SEQ_SIZE   = 2; // sequence bus size
localparam MODE_SIZE  = 4; // mode bus size
localparam DI_SIZE    = 8;       // input size
localparam DO_SIZE    = 64;      // output size

localparam READ       = 4'b0000;  // read mode
localparam PREPRG     = 4'b0001;  // preprogram mode
localparam PWRALL     = 4'b0010;  // page write all
localparam PS_IDLE    = 4'b0011;  // Pseudo idle mode
localparam CLR_PAGE   = 4'b0100;  // clear page latches mode
localparam RSTHV      = 4'b0101;  // reset hv mode
localparam ERS_BK     = 4'b1001;  // erase bulk
localparam ERS_SC     = 4'b1010;  // erase sector mode; not used in 64k lite
localparam ERS_WL     = 4'b1011;  // erase sub-sector mode
localparam PRG_BK_ALL = 4'b1100;  // program bulk all rows
localparam PRG_BK     = 4'b1101;  // program bulk (odd or even rows)
localparam PRG_SC     = 4'b1110;  // program sector (odd or even rows); not used in 64k lite
localparam PRG_WL     = 4'b1111;  // program word line


localparam MEM_SIZE = 2**ADDR_BITS ; // memory size is 2 to the address size
localparam COLUMNS = 2**CADDR_BITS ; // number of "do's" on a row;
localparam PAGE_SIZE = 2**PADDR_BITS ; // number of page latces; also number of di's on a row
localparam SPEC_SECTOR_ROWS = 2**SRADDR_BITS;
localparam SECTOR_ROWS = 2**RADDR_BITS;
localparam SECTORS = 2**BADDR_BITS;
localparam SPEC_SECTORS = 2**SBADDR_BITS;
localparam PLANES = 2**PLADDR_BITS;

`ifdef functional
parameter S8FMLT_32K_TAA = 48; //AC 3.1
`endif
localparam DOH = 1; //Data out hold time AC 3.7
localparam S8FMLT_32K_TPWR = 1000; //AC 3.24
localparam S8FMLT_32K_TRST = 0;
localparam S8FMLT_32K_TAW = 6; //AC 3.5 width of clk pulse. Used to delay clk for all notifiers to settle
localparam ACLK_DELAY = S8FMLT_32K_TAW + 0.1;
localparam S8FMLT_32K_TCY = 51; //AC 3.2
localparam S8FMLT_32K_TS1 = 1000; // AC 3.9
localparam S8FMLT_32K_TS3 = 1000; // AC 3.16

//pump frequency parameter
localparam TPCLK_MIN = 19; //min cycle time for pclk OP.6
localparam TPCLK_MAX = 23; //max cycle time for pclk OP.6  


`ifdef S8FMLT_32K_SYS_DISABLE_IREF_STARTUP_DELAY
parameter PWRISA = 0; 
parameter PWRITIM= 0; 
parameter TTURBO = 100;  // turbo be should always be used,even when the start up delay is disabled
`else
parameter PWRISA = 5000; // 5us from power good or sleep to isao good
parameter PWRITIM= 5000; // 5us from power good or sleep to itim good
parameter TTURBO = 5000; // AC 1.25 5us required time for turbo_b to be 0 after iref trim settings
`endif

`ifdef S8FMLT_32K_SYS_DISABLE_MDAC_STARTUP_DELAY
parameter TTMD = 0; // power and active to output valid
parameter TTMD1= 0; // settle time for mdac change
parameter TTMD2= 0; // vdac off (inactive)
`else
parameter TTMD = 50000; // AC 3.17 power and active to output valid
parameter TTMD1= 25000; // AC 3.18 settle time for mdac change
parameter TTMD2= 15000; // AC 3.19 vdac off (inactive)
`endif


`ifdef USE_PG_PIN
`else
  supply1 vpb_sw;
  supply1 vpb;
  supply1 vccd;
  supply0 vnb;
  supply0 vgnd;
`endif


  input sleep;
  input  [3:0] bdac;
`ifdef USE_PG_PIN
  input vpb_sw;
  input vpb;
`endif
  input scan_in1;
`ifdef USE_PG_PIN
  input vccd;
`endif
  input  [3:0] mode;
  output  [63:0] dout;
  input pe;
  input  [7:0] di;
  input iso;
  input reset;
`ifdef USE_PG_PIN
  input vnb;
`endif
  input  [1:0] seq;
  input scan_en;
  input iref;
  input pw;
  input turbo_b;
  inout amuxbusb;
  input axa;
`ifdef USE_PG_PIN
  input vgnd;
`endif
  inout amuxbusa;
  output scan_out1;
  input  [2:0] sdac;
  input scan_in2;
  input pnb;
  input clk;
  input pd1;
  input pd2;
  input vref;
  output scan_out2;
  input pclk;
  input  [3:0] ca;
  input  [2:0] cdac;
  input  [3:0] pdac;
  input scan_mode;
  input  [6:0] pa;
  `ifdef USE_PG_PIN
  output vpwri_fm;
  `endif
  output xy_out;
  input  [4:0] tm;
  input  [7:0] ra;
  input  [4:0] idac;
  input  [7:0] mdac;
  input  [3:0] ndac;
  output VPOS, VNEG, VMARG_AUX;
  output itimo_nvl;

  reg [ADDR_BITS-1:0]           address;
  reg [MODE_SIZE-1:0]           mode_l,prev_mode;
  reg [SEQ_SIZE-1:0]            seq_l,prev_seq;
  
  reg [MEM_SIZE-1:0]            status;
  reg [MEM_SIZE-1:0]            re_program;
  reg [DO_SIZE-1:0]             memory [MEM_SIZE-1:0];
  reg [DI_SIZE-1:0]             page_latch [PAGE_SIZE-1:0];

//  reg                           prg,ers;
  reg                           busy; // flag that keeps trak of on going HV operations

//  wire [DO_SIZE-1:0]             dout;
  reg [DO_SIZE-1:0]             douti;

  reg                           preprg_flag;              
  reg                           pwrall_flag;
  reg                           page_clr_flag; 
  reg                           page_corrupt_flag;            
  reg                           reset_hv;
  reg                           sequence_good; // flag that tracks propper sequencing in the HV modes
  reg                           mode_good;

  reg [DO_SIZE-1:0]             fm_do_reg;
  
  reg [PADDR_BITS-1:0]          pa_l;
  reg [DI_SIZE-1:0]             di_l;
  reg                           pw_l;
  reg                           pnb_l;
  
  reg [TADDR_BITS-1:0]          tm_l;
  reg                           reset_x;

  // --- NOTIFIERS ---
  reg notifier_iso,notifier_rst,notifier_rstw, notifier_tbb, notifier_pd2, notifier_clk, notifier_pe, notifier_scan1, notifier_scan2, notifier_pa, notifier_pw, notifier_di, 
      notifier_addr, notifier_mode, notifier_tm, notifier_seq, notifier_pump,notifier_pnb;
  reg addr_timing_error,iso_timing_error,tbb_timing_error,pd2_timing_error,rst_timing_error,clk_timing_error,di_timing_error,pw_timing_error,pa_timing_error,
      pe_timing_error,mode_timing_error,seq_timing_error, pump_timing_error,tm_timing_error,pnb_timing_error;
  reg reset_notifier_errors;
  reg reset_pump_timing_error;
  reg                          ax_d ; //used to delay the inputs to solve any issues with 0 hold time
  //reg [BADDR_BITS-1:0]         ba_d ;
  reg [RADDR_BITS-1:0]         ra_d ;
  reg [CADDR_BITS-1:0]         ca_d ;
  reg [MODE_SIZE-1:0]          mode_d;
  reg [SEQ_SIZE-1:0]           seq_d;
  reg [DI_SIZE-1:0]            di_d;
  reg [PADDR_BITS-1:0]         pa_d;
  reg                          pw_d;
  reg [TADDR_BITS-1:0]         tm_d;
  reg                          pnb_d;
  reg [ADDR_BITS-1:0]          read_address;
  reg                          tm_enpos,tm_enneg; //driven in tm logic

  wire        dclk ;
  wire        dpe ;
  wire        dscan_in1, dscan_in2 ;
  wire [6:0]  dpa ;
  wire        dpw ;
  wire [7:0]  ddi ;
  wire [RADDR_BITS-1:0]  dra ;
  wire [1:0]  dseq ;
  wire [3:0]  dca ;
  wire [3:0]  dmode ;
  wire [3:0]  dpdac ;
  wire [3:0]  dndac ;
  wire        daxa ;
  wire [4:0]  dtm;
  wire        dpnb;
  wire        dsleep;
  wire        pd2orsleep;
  wire        dreset;
  wire        dturbo_b;

  
  //reg                           VMARG_AUX_ref;
  //  comment out; using virtual single plane architecture
  //reg [ADDR_BITS-1:0]           north_address;
  //reg [ADDR_BITS-1:0]           south_address;
  
  reg dis_err_msgs;
  wire print_enable;
  
  //wire [DO_SIZE-1:0] pa_128bit;
  wire gnd_good;
  wire power_lv;
  wire p_up;
`ifdef ATPG_SIM
  wire scan_out1;
  wire scan_out2;
  wire xy_out = 1'b0;
`else
  wire scan_out1 = 1'b0;
  wire scan_out2 = 1'b0;
`endif

  wire            hv_good;
  reg             pclk_toggle,pclk_pulse;
  reg             pclk_period_good;
  realtime        tpclk00,tpclk11,tpclk10;
  realtime        prev_seq_sample,seq_sample;
  wire            vref_internal;
  wire            vlim;
  wire            iref_isa;
  wire            iref_itim;
  wire            read_isa;
  wire            read_itim;
  wire            vmargi;
  wire            vbl;
  wire            sleep_isa_del;
  wire            sleep_isa_x;
  wire            power_isa_del;
  wire            power_isa_x;
  wire            sleep_itim_del;
  wire            sleep_itim_x;
  wire            power_itim_del;
  wire            power_itim_x;
  wire            mdac_on_del;
  wire            mdac_on_x;
  wire            mdac_off_del;
  wire            mdac_off_x;
  wire            power_good;
  wire            inhibit_pe;
  wire            tm_en;
  wire            VMARG_AUX_int;
    
  reg             tm_vmarg, tm_en_nvl;
  reg             tm_isa,tm_itim;
  reg             tm_en_vctat;
  reg             tm_rdhvpl;
  reg             amuxbusa_int;
  reg             amuxbusb_int;
  reg             tm_xydec;
  reg             tm_disrow;
  reg             tm_encol;
  reg             clk_int;
  reg             clk_delayed;
  reg [1:0]       power_state;
  reg             flag_pd2topd1_error; // flag to display error message only once after pd2 or pd1 are sampled
  reg             flag_pd2topwr_error; // flag to display error message only once after pd2 or pd1 are sampled
  reg             mdac_x;
  reg             pnb_mdac_x;
  reg             tm_en_ttmd2_flag; // keeps track of margin mode return to be after ttmd2 time
  reg             margin_exit_error;
  reg             enter_margin_mode;
  reg             ers_pe_in_seq2;
  reg             prg_pe_in_seq2;
  reg             ers_prg_hv_error;
  reg             sdac_or_idac_x;

  realtime        pwr_up_time;
  realtime        pd1_down_time;
  realtime        pd2_down_time;
  realtime        reset_down_time;
  
  event           read,run_mode;
  event           pwr_up_trigger;
  event           pd1_trigger;
  event           pd2_trigger;
  event           reset_trigger;
  event           mdac_trigger;
  event           pclk_event;
  event           sdac_or_idac_event;

  integer j;
  integer pwrisa,pwritim,tturbo; // used for current referecve powerup delay timing 
  integer ttmd, ttmd1, ttmd2;

  //dummy read in marginmode variables
  reg [RADDR_BITS+AADDR_BITS-1:0]         ra_l;
  reg ra_ttmd1;
  reg dummy_read_flag;
  reg reset_dummy_read_flag;
  event trigger_ra_monitor;
  event reset_dummy_read_event;

  assign pd1_int = 1'b0;
  assign pd2_int = 1'b0;
  assign pd2orsleep = pd2 || dsleep;


  assign vpwri_fm = (vpb_sw!==1'b1)?1'bx:
                 ((pd1_int===1'b0)||(pd2_int===1'b0))?vccd:
                 ((pd1_int===1'b1)&&(pd2_int===1'b1))?1'bz:1'bx; 

`ifdef ATPG_SIM
wire scanb_tm_dpg, scanb_mp_tm;
 s8fmlt_32k_top_atpg fm32k_top (.vpwr(vpwri_fm), .vpb(vpb), .vnb(vnb), .vgnd(vgnd),
  .iso(iso),.reset(reset),.clk(clk),
  .scan_en(scan_en),.scan_mode(scan_mode),.scanb_mp_tm(scanb_mp_tm),.scanb_tm_dpg(scanb_tm_dpg),
  .scan_in1(dscan_in1),.scan_out1(scan_out1),.scan_in2(dscan_in2),.scan_out2(scan_out2),
  .mode(mode),.seq(seq),.ca(ca),.ra({1'b0,ra}),.axa(axa),.di(di),.pa(pa),.pw(pw),
  .dout(dout)
  );

s8fmlt_analog_top_atpg analog_top(.vpwr(vpwri_fm), .vpb(vpb), .vnb(vnb), .vgnd(vgnd),
  .reset(reset),.clk(clk),.scan_mode(scan_mode),
  .scan_en(scan_en),.scanb_tm_dpg(scanb_tm_dpg),.scanb_mp_tm(scanb_mp_tm),
  .tm(tm),.pnb(pnb)
  );
`else // ATPG_SIM


//----------------------------------------------------------------------------------------------------
//power good signals for simple logic
  
  assign p_up = (vccd === 1'b1)&&(vpb===1'b1)&&(vpb_sw===1'b1)&&(vnb===1'b0)&&(vgnd===1'b0)&&(pd1_int===1'b0)&&(pd2_int===1'b0);   
  assign p_up_analog = (vccd === 1'b1)&&(vpb===1'b1)&&(vpb_sw===1'b1)&&(vnb===1'b0)&&(vgnd===1'b0)&&(pd1_int===1'b0); 
  assign power_down_analog = (vccd === 1'b1)&&(vpb_sw===1'b1)&&(vgnd===1'b0)&&(pd1_int===1'b1); //used as iso function for VPOS
  assign power_down_amux = (vccd === 1'b1)&&(vpb_sw===1'b1)&&(vgnd===1'b0); //used in iso function
  assign gnd_good = (vgnd === 1'b0)&&(vnb===1'b0);

//----------------------------------------------------------------------------------------------------
// vref internal logic to check on refsel 
  assign vref_internal = vref ;

//----------------------------------------------------------------------------------------------------
// vlim logic
  assign vlim = (p_up_analog !== 1'b1) ? 1'bx :           // if no power drivex
                (pd2orsleep === 1'b1) ? 1'b0 :         // if sleep and power drive 0
                (pd2orsleep !== 1'b0) ? 1'bx :         // if sleep is not valid drive x
                vref_internal;  // will propagate x from vref_internal

//--------------------------------------------------------------------------------------
// isa itim irefm logic
  assign iref_isa = (pd2orsleep === 1'b1) ? 1'bz : // needs review after final schematic
                  (^pd2orsleep === 1'bx) ? 1'bx :
                  (iref !== 1'b1) ? 1'bx :
                  (vlim !== 1'b1 ) ? 1'bx :
                  (sleep_isa_x !== 1'b0) ? 1'bx: // includes sleep recover timing
                  (power_isa_x !== 1'b0) ? 1'bx: // includes power recover timing
                  (sdac_or_idac_x !== 1'b0) ? 1'bx: // includes transition time at trim buss change
                  (^{sdac,idac} === 1'bx) ? 1'bx : 1'b1 ;
                  
  always @(sdac or idac)
    begin
    disable sdac_or_idac_trigger;
    #0;
    -> sdac_or_idac_event;
    end
  
  always @(sdac_or_idac_event)
    begin: sdac_or_idac_trigger
    sdac_or_idac_x = 1'b1;
    #(pwrisa);
    sdac_or_idac_x = 1'b0;
    end

  assign read_isa = tm_isa?amuxbusa:iref_isa; // isa used for read operations will be either iref or external supplied

  assign iref_itim = (pd2orsleep === 1'b1) ? 1'bz : // itim z when in sleep (per old s8tesd block)
                   (^pd2orsleep === 1'bx) ? 1'bx :  // sleep needs to be valid
                   (iref !== 1'b1) ? 1'bx :    // iref need to be 1
                   (sleep_itim_x !== 1'b0) ? 1'bx: // includes sleep recover timing
                   (power_itim_x !== 1'b0) ? 1'bx: // includes power recover timing
                   (sdac_or_idac_x !== 1'b0) ? 1'bx: // includes transition time at trim buss change
                   (^{sdac,idac} === 1'bx) ? 1'bx : 1'b1 ; // trim bits need to be valid

  assign read_itim = tm_itim?amuxbusb:iref_itim;// itim used for read operations will be either iref or external supplied

  assign itimo_nvl = ((p_up_analog !== 1'b1)||(^tm_itim === 1'bx)) ? 1'bx : ~read_itim ; //tm_itim dirty points to dirty tm buss
  
//----------------------------------------------------------------------------------------------------
// vctat logic

  assign vctat = (p_up_analog !== 1'b1) ? 1'bx : 
                 (^cdac === 1'bx)?1'bx:
                 (^{dpe===1'b1,tm_en===1'b1,tm_en_vctat,tm_enpos,tm_enneg}===1'bx)?1'bx:
                 (dpe===1'b1||tm_en===1'b1||tm_en_vctat||tm_enpos||tm_enneg)?vref_internal:1'b0; 

//----------------------------------------------------------------------------------------------------
// hv_good logic pumps; pe is not part of the logic being treated separatelly

  assign hv_common = ((pclk_toggle === 1'b1) &&        // checks pclk frequency
                   (pclk_pulse === 1'b1) &&          // checks pclk pulse width
                   (vref_internal === 1'b1) &&      // vref used for the neg pump
                   (pump_timing_error === 1'b0) &&  // ndac/pdac to pe timing error
                   (vctat === 1'b1) &&              // vctat used for the pos pump
                   (^{cdac}!== 1'bx));  // trim bits for the pumps need to be valid
                    
 assign hv_neg_good = (hv_common===1'b1) && (^dndac !== 1'bx); // separate check for VNEG
 assign hv_pos_good = (hv_common===1'b1) && (^dpdac !== 1'bx); // separate check for VPOS
 assign hv_good = hv_neg_good && hv_pos_good; //hv_good is good when both pumps are good


task hv_good_report ();
  begin
  $display("\t pclk frequency (must be 1) - %b",pclk_toggle);
  $display("\t pclk pulse width (must be 1) - %b",pclk_pulse);
  $display("\t vref must be 1 - %b",vref);
  $display("\t cdac must be valid - %b",cdac      );
  $display("\t pdac must be valid - %b",dpdac);
  $display("\t ndac must be valid - %b",dndac);
  $display("\t ndac/pdac timing to pe (must be 1) - %b",pump_timing_error);
  end
endtask
//----------------------------------------------------------------------------------------------------
// VPOS / VNEG drive
// Iso only isolates the negative pump; iso pin floating in VPOS

  assign (supply1, supply0) VPOS = (power_down_analog===1'b1)?1'b1: // when power_down VPOS is 1
                (p_up_analog !== 1'b1) ? 1'bx :                    //power for the analog block check
                (^{pe,tm_enpos} === 1'bx) ? 1'bx :                                    //pump enable check
                (pe === 1'b1 || tm_enpos === 1'b1) ? (hv_pos_good?1'b1:1'bx):1'b1;    // if the pump is enabled drive 1 if hv good else drive 1(noHV)
                
  assign (supply1, supply0) VNEG = (iso===1'b1)?(gnd_good?1'b0:1'bx): //if iso is 1 check check grounds to be good
                (^iso===1'bx)?1'bx:                                 // is iso is bad drive x
                (p_up_analog !== 1'b1) ? 1'bx :                    //power for the analog block check
                (^{pe,tm_enneg} === 1'bx) ? 1'bx :                             //pump enable check
                (pe === 1'b1 || tm_enneg === 1'b1) ? (hv_neg_good?1'b0:1'bx):1'b0; // if the pump is enabled drive 0 if hv good else drive 0(noHV)


//----------------------------------------------------------------------------------------------------
// vmargi logic; used in margin reads

  assign tm_en = tm_vmarg || tm_en_nvl; //tm_en is now activation the mdac block for margin reads or nvl margin mode 

  assign vmargi = (p_up_analog !== 1'b1) ? 1'bx:        // depends on pd1 only
                  (^tm_en === 1'bx) ? 1'bx:             // tm_en x happens when tm is not clean and will propagate on vmarg or vmarg_aux
                  (tm_en === 1'b0) ?  1'b0:             // active in margin mode test mode
                  (hv_good !== 1'b1) ? 1'bx:            // uses VPOS and VNEG to set the margin mode voltage
                  (^{mdac,pnb_l}=== 1'bx) ? 1'bx :      // pnb and mdac need to be clean
                  (mdac_on_x === 1'b1) ? 1'bx :         // mdac is charged after ttmd
                  (mdac_x === 1'b1) ? 1'bx :            // mdac transition time - ttmd1   
                  (pnb_mdac_x === 1'b1) ? 1'bx :        // pnb has to be constant when in margin mode
                  (tm_en_ttmd2_flag === 1'b1) ? 1'bx :  // tm_en needs to stay 0 while the mdac block is discharging
                                                1'b1; 
  //tm_en_nvl will be x when tm is not clean

  assign vmarg = (tm_en_nvl===1'b1) ? 1'bz :
                 (tm_en_nvl===1'b0) ?  vmargi: 1'bx;
                 
  assign VMARG_AUX_int = (tm_en_nvl===1'b1) ? ~vmargi : 
                         (tm_en_nvl===1'b0) ? 1'bz : 1'bx;
                  
  //monitor changes in ra for marginmode and dummy mode
  always @ (ra_l) //sampled ra address
   begin
   disable ra_monitor;
    #0;
    -> trigger_ra_monitor;
    end

  always @(trigger_ra_monitor)
    begin: ra_monitor
    ra_ttmd1 = 1'b1; //used in dummy read logic and read corrupt during margin mode
    #(ttmd1);
    ra_ttmd1 = 1'b0;
    end

  assign ra_margin_mode_dummy = ra_ttmd1 & tm_vmarg;

  always @(reset_dummy_read_event)
    begin
    reset_dummy_read_flag = 1'b1;
    #0.1;
    reset_dummy_read_flag = 1'b0;
    end

  always @(posedge reset or posedge ra_margin_mode_dummy or posedge mdac_on_x or posedge mdac_off_x or posedge reset_dummy_read_flag or posedge reset_hv)
    begin
    if (reset || reset_dummy_read_flag || reset_hv)
      begin
      dummy_read_flag = 1'b0;
      end
    else
      begin
      dummy_read_flag = 1'b1;
      end
    end

//----------------------------------------------------------------------------------------------------
// vbl logic
  assign vbl = (p_up_analog !== 1'b1) ? 1'bx: //depends on pd1 only
               (tm_rdhvpl === 1'b1) ? 1'bz:   //disabled during read plage latch test mode
               (^bdac === 1'bx) ? 1'bx:1'b1;  // bdac sets the vbl voltage and it need to be valid

//----------------------------------------------------------------------------------------------------
// iref timing
  
  //isa timing depending on sleep and power good
  assign #(0,pwrisa) sleep_isa_del = pd2orsleep;
  assign sleep_isa_x = (~pd2orsleep) && sleep_isa_del;
  assign #(pwrisa,0) power_isa_del = p_up_analog;
  assign power_isa_x = power_good && (!power_isa_del);

  //itim timing idependig on sleep and power good
  assign #(0,pwritim) sleep_itim_del = pd2orsleep;
  assign sleep_itim_x = (!pd2orsleep) && sleep_itim_del;
  assign #(pwritim,0) power_itim_del =  p_up_analog;
  assign power_itim_x = power_good && (!power_itim_del);

//----------------------------------------------------------------------------------------------------
// turbo_b timing check to resume read after current settup change
  reg wait_for_turbo_b;
  realtime turbo_required_detected_time;
  realtime negedge_turbo_b_time;
  // when trims change or getting out of sleep or getting out of power bad; record the time and set a flag to corrupt eventural read operations
  always @(negedge sleep or sdac or idac or posedge p_up)
    begin
    turbo_required_detected_time = $realtime;
    wait_for_turbo_b = 1'b1;
    end
  //record negedge turbo_b time
  always @(negedge turbo_b)
    begin
    negedge_turbo_b_time = $realtime;
    end
  //check turbo_b timing to resume correct read opearations
  always @(posedge turbo_b)
    begin
    if (($realtime - turbo_required_detected_time >= tturbo)&&
        ($realtime - negedge_turbo_b_time >= tturbo))
      begin
      wait_for_turbo_b = 1'b0;
      end
    end

//----------------------------------------------------------------------------------------------------
// vdac timing
  // ttmd timing -  mdac charge
  assign #(ttmd,0) mdac_on_del = tm_en;
  assign mdac_on_x = tm_en && (~mdac_on_del);
  
  // ttmd1 timing - mdac change
  always @(mdac)
    begin
    disable mdac_tr;
    #0;
    -> mdac_trigger;
    end
  
  always @(mdac_trigger)
    begin: mdac_tr
    mdac_x = 1'b1;
    #(ttmd1);
    mdac_x = 1'b0;
    end

  // ttmd2 timing - mdac discharge
  assign #(0,ttmd2) mdac_off_del = tm_en;
  assign mdac_off_x = (~tm_en) && mdac_off_del;

  wire #0 tm_en_glitch_free = tm_en;
  always @(pnb_l or negedge tm_en_glitch_free)
    begin
    if (tm_en === 1'b0)
      begin
      pnb_mdac_x = 1'b0;
      end
    else
      begin
      if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Pnb cannot change state in margin mode in %m @ %d",$time);
      pnb_mdac_x = 1'b1;
      end
    end  
  
  always @ (tm_en)
    begin
    if (tm_en === 1'b0)
      begin
      tm_en_ttmd2_flag = 1'b0;
      end
    else
      begin
      if (mdac_off_x === 1'b1)
        begin
        tm_en_ttmd2_flag = 1'b1;
        if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: tm_en is not 0 while mdac is dischargin for ttmd2 time in %m @ %d",$time);
        end
      end
    end

  always @(tm_vmarg)
    begin
    if (tm_vmarg === 1'b1)
      begin
      enter_margin_mode = 1'b1;
      end
    else
      begin
      if ((enter_margin_mode === 1'b1)&&(tm_vmarg === 1'b0))
        begin
        enter_margin_mode = 1'b0;
        margin_exit_error = 1'b1; // set the margin exit error flag when tm_vmarg is 0 after tm_vmarg was 1;
                                  // this flag will reset when reset hv mode is cloked in or if the workarounf s130 is detected
        end
      end
    end
//----------------------------------------------------------------------------------------------------
//  
  always @(hv_good or dpe or seq_l or dreset or reset_hv or posedge reset_x)
    begin
    #0; //eliminates race condition between setuphold delayed signals
    if ((reset_x === 1'b1)&&(dpe === 1'b1))
      begin
      ers_prg_hv_error = 1'b1;
      end
    else if ((dreset === 1'b1)||(reset_hv === 1'b1))
      begin
      ers_prg_hv_error = 1'b0;
      end
    else if ((hv_good !== 1'b1)&&(dpe === 1'b1))
      begin
      ers_prg_hv_error = 1'b1;
      end
    else if (seq_l === 2'd3)
      begin
      #1; // wait one ns for the HV operation to finish then reset the error flag
      ers_prg_hv_error = 1'b0;
      end
    end

//----------------------------------------------------------------------------------------------------
// initialize memory based on the CODEFILE 
initial 
  begin
  $readmemh(CODEFILE, memory);
  for(j = 0;j < MEM_SIZE;j = j + 1) 
    begin
    if (memory[j] === {DO_SIZE{1'b0}})
      status[j] = 0;
    else
      status[j] = 1;
    end
  end

//----------------------------------------------------------------------------------------------------
//disable error messages option

initial
  begin
  pwrisa  = PWRISA;
  pwritim = PWRITIM;
  tturbo = TTURBO;
  ttmd  = TTMD;
  ttmd1 = TTMD1;
  ttmd2 = TTMD2;
  dis_err_msgs = 1'b1;
`ifdef S8FMLT_32K_SYS_DIS_ERR_MSGS
`else
  #1;
  dis_err_msgs = 1'b0;
`endif
  end

//----------------------------------------------------------------------------------------------------
// print enable logic
  assign print_enable = (dis_err_msgs === 1'b0) && (scan_mode !== 1'b1);

//----------------------------------------------------------------------------------------------------
// data out drive logic; depends on reset and the read operation (douti)

always @(read or posedge dreset or douti or negedge power_good or posedge reset_x)
  begin
  if ((power_good !==1)||(reset_x===1'b1))
    begin
    fm_do_reg <= {DO_SIZE{1'bx}};
    end
  else
  begin
    if (dreset === 1'b1)
      begin
      fm_do_reg <= {DO_SIZE{1'b0}};
      end
    else if (dreset === 1'b0)
      begin
      `ifdef functional
      //add the delay when the functional macro is defind only
      #(S8FMLT_32K_TAA-ACLK_DELAY);
      `endif
      fm_do_reg <= douti;
      end
    else
      begin
      fm_do_reg <= {DO_SIZE{1'bx}};
      end
    end
  end
assign dout = (iso===1'b1)?(gnd_good?{DO_SIZE{1'b0}}:{DO_SIZE{1'bx}}):
              (^iso===1'bx)?{DO_SIZE{1'bx}}:
              (power_good===1'b0)?{DO_SIZE{1'bx}}:fm_do_reg;

//----------------------------------------------------------------------------------------------------
// power up sequence check for flash functionality

  localparam PWR_OFF  = 0;
  localparam PWR_EN   = 1;
  localparam PWR_UP   = 2;
  localparam PWR_GOOD = 3;


  wire power_up;
  assign power_up = (vccd === 1'b1)&&(vpb_sw === 1'b1)&&(vpb === 1'b1)&&(vnb === 1'b0)&&(vgnd === 1'b0);
  
  always @(power_up)
    begin
    if (power_up === 1'b1)
      begin
      pwr_up_time = $realtime;
      flag_pd2topwr_error = 1'b1;
      end
    ->pwr_up_trigger;
    end

  always @(pd1_int)
    begin
    if (pd1_int === 1'b0)
      begin
      pd1_down_time = $realtime;
      flag_pd2topd1_error = 1'b0;  // power-up sequence flag disabled due to pd1, pd2 repurpose
      end
    ->pd1_trigger;
    end

  always @(pd2_int)
    begin
    if (pd2_int === 1'b0)
      begin
      pd2_down_time = $realtime;
      flag_pd2topd1_error = 1'b0;  // power-up sequence flag disabled due to pd1, pd2 repurpose
      flag_pd2topwr_error = 1'b0;  // power-up sequence flag disabled due to pd1, pd2 repurpose
      end
    ->pd2_trigger;
    end

  always @(dreset)
    begin
    if (dreset === 1'b0)
      begin
      reset_down_time = $realtime;
      end
    ->reset_trigger;
    end
    
  always @(pwr_up_trigger or pd1_trigger or pd2_trigger or reset_trigger) // always @(*) not used;make sure the always triggers after the time is sampled
    begin
    casex ({power_up,pd1_int,pd2_int,dreset})
    4'b0xxx,4'b111x: 
      begin
      power_state = PWR_OFF;
      end
    4'b101x,4'b110x:
      begin
      power_state = PWR_EN;
      end
    4'b1001: 
      begin
      if (power_state != PWR_GOOD) // this could be a reset pulse during power good
        begin  
        power_state = PWR_UP;  
        if ((pd2_down_time - pd1_down_time < S8FMLT_32K_TPWR))
          begin
          if ((print_enable)&&$time>0 &&(flag_pd2topd1_error===1'b1))
            begin 
            $display ("===ERROR=== s8fmlt_32k_sys: Inrush current detected; pd2 to pd1 timing violated in %m @ %d",$time);
            flag_pd2topd1_error = 1'b0; //disable the error message until the next pd2, pd1, or pwr_up smaple
            end
          end
        if ((pd2_down_time - pwr_up_time< S8FMLT_32K_TPWR))
          begin
          if ((print_enable)&&$time>0 &&(flag_pd2topwr_error===1'b1))
            begin 
            $display ("===ERROR=== s8fmlt_32k_sys: Inrush current detected; pd2 to vccd timing violated in %m @ %d",$time);
            flag_pd2topwr_error = 1'b0; //disable the error message until the next pd2, pd1, or pwr_up smaple
            end
          end
        end
      end
    4'b1000: 
      begin  
      power_state = PWR_UP;  
      if ((pd2_down_time - pd1_down_time < S8FMLT_32K_TPWR))
        begin
        if ((print_enable)&&$time>0 &&(flag_pd2topd1_error===1'b1))
          begin 
          $display ("===ERROR=== s8fmlt_32k_sys: Inrush current detected; pd2 to pd1 timing violated in %m @ %d",$time);
          flag_pd2topd1_error = 1'b0; //disable the error message until the next pd2, pd1, or pwr_up smaple
          end
        end
      if ((pd2_down_time - pwr_up_time< S8FMLT_32K_TPWR))
        begin
        if ((print_enable)&&$time>0 &&(flag_pd2topwr_error===1'b1))
          begin 
          $display ("===ERROR=== s8fmlt_32k_sys: Inrush current detected; pd2 to vccd timing violated in %m @ %d",$time);
          flag_pd2topwr_error = 1'b0; //disable the error message until the next pd2, pd1, or pwr_up smaple
          end
        end
      if (((reset_down_time - pd2_down_time)>=S8FMLT_32K_TRST)&&((reset_down_time - pd1_down_time)>=S8FMLT_32K_TRST))
        begin
        power_state = PWR_GOOD;
        //r_clear_pages = 1; // create one page clear pulse.Does not affect external timing
			  //#1;
			  //r_clear_pages = 0;
        end
      end
    default:
      begin
      power_state = PWR_EN;
      end
    endcase
    end

  assign power_good = (power_state === PWR_GOOD);
  assign inhibit_pe = (power_state === PWR_OFF);
  assign power_lv = (power_state === PWR_GOOD)||(power_state === PWR_UP);

//----------------------------------------------------------------------------------------------------
//sample sync inputs - wait for 0 hold time

always @(*) begin ax_d <= #ACLK_DELAY daxa;	end
always @(*) begin ra_d <= #ACLK_DELAY dra;	end
always @(*) begin ca_d <= #ACLK_DELAY dca;	end
always @(*) begin mode_d <= #ACLK_DELAY dmode;	end
always @(*) begin seq_d <= #ACLK_DELAY dseq;	end
always @(*) begin di_d <= #ACLK_DELAY ddi;	end
always @(*) begin pa_d <= #ACLK_DELAY dpa;	end
always @(*) begin pw_d <= #ACLK_DELAY dpw;	end
always @(*) begin tm_d <= #ACLK_DELAY dtm;	end
always @(*) begin pnb_d <= #ACLK_DELAY dpnb;	end

//----------------------------------------------------------------------------------------------------
// sample sync inputs with clk

always @(*) begin clk_delayed <= #S8FMLT_32K_TAW dclk;end // delay aclk by 4ns to account for the pulse with timing check notifier
always @(clk_delayed)
  begin
  if (clk_timing_error)
    begin
    clk_int = 1'b0;
    if (print_enable)
      begin
      $display ("===ERROR=== s8fmlt_32k_sys: clk pulse width timing violation detected. This pulse will be ignored in %m @ %d",$time);  
      end
    end
  else
    begin
    clk_int = clk_delayed;
    end
  end	


always @(posedge clk_int or posedge dreset or posedge reset_hv or posedge reset_x)
  begin
  if (dreset === 1'b1)
    begin
    address <= {ADDR_BITS{1'b0}};
    read_address <= {ADDR_BITS{1'b0}};
    mode_l <= {MODE_SIZE{1'b0}};
    seq_l <= {SEQ_SIZE{1'b0}};
    prev_mode <= {MODE_SIZE{1'b0}};
    prev_seq <= {SEQ_SIZE{1'b0}};
    pa_l <= {PADDR_BITS{1'b0}};
    di_l <= {DI_SIZE{1'b0}};
    pw_l <= 1'b0;
    tm_l <= {TADDR_BITS{1'b0}};
    ra_l <= {(RADDR_BITS+AADDR_BITS){1'b0}};
    //reset flags and latches
    preprg_flag <= 1'b0;
    pwrall_flag <= 1'b0;
    page_clr_flag <= 1'b0;
    page_corrupt_flag <= 1'b0;
    margin_exit_error <= 1'b0;
    pnb_l <= 1'b0;
    end
  else if ((^dreset === 1'bx)||(reset_x===1'b1))
    begin
    address <= {ADDR_BITS{1'bx}};
    read_address <= {ADDR_BITS{1'bx}};
    mode_l <= {MODE_SIZE{1'bx}};
    seq_l <= {SEQ_SIZE{1'bx}};
    prev_mode <= {MODE_SIZE{1'bx}};
    prev_seq <= {SEQ_SIZE{1'bx}};
    pa_l <= {PADDR_BITS{1'bx}};
    di_l <= {DI_SIZE{1'bx}};
    pw_l <= 1'bx;
    tm_l <= {TADDR_BITS{1'bx}};
    ra_l <= {(RADDR_BITS+AADDR_BITS){1'bx}};
    //reset flags and latches
    preprg_flag <= 1'bx;
    pwrall_flag <= 1'bx;
    page_clr_flag <= 1'bx;
    page_corrupt_flag <= 1'bx;
    pnb_l <= 1'bx;
    end
  else if (reset_hv === 1'b1)
    begin
    prev_mode <= {MODE_SIZE{1'b0}};
    prev_seq <= {SEQ_SIZE{1'b0}};
    mode_l <= {MODE_SIZE{1'b0}};
    seq_l <= {SEQ_SIZE{1'b0}};
    end
  else 
    begin
    address <= {ax_d,ra_d,ca_d};
    prev_mode <= mode_l;
    prev_seq <= seq_l;
    mode_l <= mode_d;
    seq_l <= seq_d;
    pa_l <= pa_d;
    di_l <= di_d;
    pw_l <= pw_d;
    tm_l <= tm_d;
    ra_l <= {ax_d,ra_d};
    pnb_l <= pnb_d;
    #0.1;
    if (pd2orsleep === 1'b0)
      begin
      ->run_mode; // start executin operations only when not in sleep
      end
    end
  end

//----------------------------------------------------------------------------------------------------
// Reset based in seq 0
always @(*)
  begin
  if (seq_l === 2'b00)
    begin
    ers_pe_in_seq2 = 1'b0; // clear pe error at the end of erase
    prg_pe_in_seq2 = 1'b0; // clear pe error at the end of program
    reset_pump_timing_error = 1'b1; // create a reset pulse for the pump timing error
    #1;
    reset_pump_timing_error = 1'b0;
    end
  end

//----------------------------------------------------------------------------------------------------
// program mode detect

assign program_mode = (mode_l === PRG_WL)||(mode_l === PRG_SC)||(mode_l === PRG_BK)||(mode_l === PRG_BK_ALL);

//----------------------------------------------------------------------------------------------------
// Write data into page latches

  always @(run_mode or 
           posedge dreset or  
           page_clr_flag or 
           page_corrupt_flag or 
           negedge power_lv or
           posedge reset_x )
    begin
    //check for z in data in
    for (j=0;j<DI_SIZE;j=j+1)
      begin
      if (di_l[j] === 1'bz) 
        begin
        di_l[j] = 1'bx; 
        end
      end
    //Start page write 
    if ((power_lv !== 1'b1) || (page_corrupt_flag === 1'b1) || (reset_x === 1'b1))
      begin
      for(j=0;j<PAGE_SIZE;j=j+1)
        begin
        page_latch[j]={DI_SIZE{1'bx}};
        end
      end
    else // power good
      begin
      if (dreset === 1'b1)
        begin
        for(j=0;j<PAGE_SIZE;j=j+1)  
          begin
          page_latch[j]={DI_SIZE{1'b0}};
          end
        end
      else if (dreset === 1'b0)
        begin
        if (page_clr_flag === 1'b1)
          begin
          for(j=0;j<PAGE_SIZE;j=j+1) 
            begin
            page_latch[j]={DI_SIZE{1'b0}};
            end
          end
        else if (page_clr_flag === 1'b0)
          begin
          if (pw_l === 1'b1)
            begin
            if (pwrall_flag === 1'b1)
              begin
              for(j=0;j<PAGE_SIZE;j=j+1) 
                begin
                page_latch[j]=di_l;
                end
              end
            else if (pwrall_flag === 1'b0)
              begin
              if (^pa_l !== 1'bx)
                begin
                page_latch[pa_l] = di_l;
                end
              else // page address is valid
                begin
                for(j=0;j<PAGE_SIZE;j=j+1)
                  begin
                  page_latch[j]={DI_SIZE{1'bx}};
                  end
                end
              end
            else // pwrall_flag not valid
              begin
              for(j=0;j<PAGE_SIZE;j=j+1)
                begin
                page_latch[j]={DI_SIZE{1'bx}};
                end
              end
            end
          else if (^pw_l === 1'bx)
            begin
            for(j=0;j<PAGE_SIZE;j=j+1)
              begin
              page_latch[j]={DI_SIZE{1'bx}};
              end
            end
          end
        else // page_clr_flag latches not valid
          begin
          for(j=0;j<PAGE_SIZE;j=j+1)
            begin
            page_latch[j]={DI_SIZE{1'bx}};
            end
          end
        //check pw timing error
        if (pw_timing_error) 
          begin
          if ((!pa_timing_error)&&(!pwrall_flag))
            begin
            page_latch[pa_l] = {DI_SIZE{1'bx}};
            end
          else
            begin
            for(j=0;j<PAGE_SIZE;j=j+1)
              begin
              page_latch[j]={DI_SIZE{1'bx}};
              end
            end
          end
        
        if (di_timing_error && pw_l)
          begin
          if (pwrall_flag)
            begin
            for(j=0;j<PAGE_SIZE;j=j+1)  
              begin
              page_latch[j]={DI_SIZE{1'bx}};
              end
            end
          else  
            begin
            page_latch[pa_l] = {DI_SIZE{1'bx}};
            end
          end
        
        if (pa_timing_error && pw_l)
          begin
          for(j=0;j<PAGE_SIZE;j=j+1)
            begin
            page_latch[j]={DI_SIZE{1'bx}};
            end
          end
        
        end
      else // reset not valid
        begin
        for(j=0;j<PAGE_SIZE;j=j+1)
          begin
          page_latch[j]={DI_SIZE{1'bx}};
          end
        end
      end
    end


//-------------------------------------------------------------------------------------------
// mode decoding

always @(run_mode or pe) //or mode_l or seq_l
  begin
  page_clr_flag = 1'b0;
  page_corrupt_flag = 1'b0;
  if (dreset === 1'b0 && pd2orsleep === 1'b0 && scan_mode === 1'b0)
    begin
    if (mode_timing_error)
      begin
      if (print_enable) begin $display("===ERROR=== s8fmlt_32k_sys: mode ignored due to mode timing error in %m @ %d",$time); end 
      page_corrupt_flag = 1'b1; // trigger the write always block 
      read_memory; // call the read task to signal with x whent the mode is corrupted
      -> read; //start the read operation witn the corrupted memory output
      end
    else
      begin
      case (mode_l)
        READ:
          begin
          read_address = address;
          read_memory; //updates memory output (douti)
          -> read; //start the read operation with the new memroy output
          -> reset_dummy_read_event;
          end
        PREPRG:
          begin
          set_preprg_flag;
          end
        PWRALL:
          begin
          set_pwrall_flag;
          end
        PS_IDLE:
          begin
          // idle operation; No mode operation; Used for write only operations
          end
        RSTHV :
          begin
          gen_reset_hv;
          end
        CLR_PAGE:
          begin
          set_pageclr_flag;
          end
        ERS_WL:
          begin
          erase_wl(address);    
          end
        ERS_BK:
          begin
          erase_bk(address);
          end
        PRG_WL:
          begin
          program_wl(address);
          end
        PRG_BK:
          begin
          program_bk(address);
          end
        PRG_BK_ALL:
          begin
          program_bk_all(address);
          end
        default: // there are valid unused modes when the macro should do "nothing"
          begin
          if (^mode_l === 1'bx) 
            begin
            page_corrupt_flag = 1'b1; // trigger the write always block 
            read_memory; // call the read task to signal with x whent the mode is corrupted
            -> read; //start the read operation witn the corrupted memory output
            end
          end 
      endcase
      prev_seq_sample = seq_sample;
      end
    end
  end

//---------------------------------------------------------------------------------------
// Test mode decoding for tm[4:0]

assign amuxbusa = (iso===1'b1)?((power_down_amux===1'b1)?1'bz:1'bx):
                  (^iso===1'bx)?1'bx:
                  (power_good===1'b0)?1'bx:amuxbusa_int;

assign amuxbusb = (iso===1'b1)?((power_down_amux===1'b1)?1'bz:1'bx):
                  (^iso===1'bx)?1'bx:
                  (power_good===1'b0)?1'bx:amuxbusb_int;

assign VMARG_AUX = (p_up_analog === 1'b1)? VMARG_AUX_int:1'bx;


always @(*)
  begin
  amuxbusa_int = 1'bz;
  amuxbusb_int = 1'bz;
  tm_en_nvl = 1'b0;
  tm_vmarg = 1'b0;
  tm_enpos = 1'b0;
  tm_enneg = 1'b0;
  tm_rdhvpl = 1'b0;
  tm_xydec = 1'b0;
  tm_disrow = 1'b0;
  tm_encol = 1'b0;
  tm_isa = 1'b0;
  tm_itim = 1'b0;
  tm_en_vctat = 1'b0;
  if (^tm_l===1'bx || tm_timing_error === 1'b1 || ^scan_mode===1'bx)
    begin
    amuxbusa_int = 1'bx;
    amuxbusb_int = 1'bx;
    tm_en_nvl = 1'bx;
    tm_vmarg = 1'bx;
    tm_enpos = 1'bx;
    tm_enneg = 1'bx;
    tm_rdhvpl = 1'bx;
    tm_xydec = 1'bx;
    tm_disrow = 1'bx;
    tm_encol = 1'bx;
    tm_isa = 1'bx;
    tm_itim = 1'bx;
    tm_en_vctat = 1'bx;
    end
  else if (scan_mode === 1'b0)
    begin
    case (tm_l)
      5'd1:
        begin
        //tm_enpos = 1'b1;
        //tm_enneg = 1'b1;
        amuxbusa_int = VPOS;
        amuxbusb_int = ~VNEG;
        end
      5'd2:
        begin
        if (pnb_l === 1'b1)
          begin
          tm_enpos = 1'b1; // enable positive pump
          tm_vmarg = 1'b1; // enable mdac
          amuxbusa_int = vmarg;
          end
        else if (pnb_l === 1'b0)
          begin
          //do nothing let amuxbus pins floating
          end
        else //margin mode has been set correctly but pnb is not clean
          begin
          amuxbusa_int = 1'bx; 
          amuxbusb_int = 1'bx;
          end
        end
      5'd4:
        begin
        tm_vmarg = 1'b1; //enable mdac
        if (pnb_l === 1'b1)
          begin
          tm_enpos = 1'b1; // enable positive pump
          end
        else if (pnb_l === 1'b0)
          begin
          tm_enneg = 1'b1; // enable negative pump
          end
        else //pnb dirty
          begin
          tm_enpos = 1'bx;
          tm_enneg = 1'bx;
          end
        end
      5'd5:
        begin
        tm_vmarg = 1'b1;
        tm_isa = 1'b1;
        tm_itim = 1'b1;
        if (pnb_l === 1'b1)
          begin
          tm_enpos = 1'b1; // enable positive pump
          end
        else if (pnb_l === 1'b0)
          begin
          tm_enpos = 1'b1; // enable positive pump
          tm_enneg = 1'b1; // enable negative pump
          end
        else //pnb dirty
          begin
          tm_enpos = 1'bx;
          tm_enneg = 1'bx;
          end
        end
      5'd6:
        begin
        tm_vmarg = 1'b1; // enable mdac
        if (pnb_l === 1'b1)
          begin
          tm_enpos = 1'b1; // enable positive pump
          amuxbusa_int = VPOS;
          end
        else if (pnb_l === 1'b0)
          begin
          tm_enpos = 1'b1; // enable positive pump
          tm_enneg = 1'b1; // enable negative pump
          amuxbusb_int = ~VNEG;
          end
        else //pnb dirty
          begin
          tm_enpos = 1'bx;
          tm_enneg = 1'bx;
          amuxbusa_int = 1'bx; 
          amuxbusb_int = 1'bx;
          end
        end
      5'd7:
        begin
        tm_en_nvl = 1'b1;
        if (pnb_l === 1'b1)
          begin
          tm_enpos = 1'b1; // enable positive pump
          end
        else if (pnb_l === 1'b0)
          begin
          tm_enneg = 1'b1; // enable negative pump
          end
        else //pnb dirty
          begin
          tm_enpos = 1'bx;
          tm_enneg = 1'bx;
          end
        end
      5'd8:
        begin
        amuxbusa_int = 1'b1;//isamon 
        amuxbusb_int = 1'b1;//itimmon
        end
      5'd9:
        begin
        tm_isa = 1'b1;
        amuxbusb_int = 1'b1;//itimmon
        end
      5'd10:
        begin
        amuxbusa_int = 1'b1;//isamon 
        tm_itim = 1'b1;
        end
      5'd11:
        begin
        tm_isa = 1'b1;
        tm_itim = 1'b1;
        end
      5'd13:
        begin
        tm_enpos = 1'b1;
        amuxbusa_int = 1'b1;//isamon 
        amuxbusb_int = 1'b1;//itimmon
        end
      5'd16:
        begin
        tm_en_vctat = 1'b1; // enable vctat
        tm_enpos = 1'b0;
        amuxbusa_int = vref;//vref is an input, just pass it out does not depend on refsel
        amuxbusb_int = vctat;//vctat is an internal wire NOTE - need to implement logic for when valid
        end
      5'd17://regular reads
        begin
        tm_en_vctat = 1'b1; //enable vctat to generate v700 and v1400
        tm_enpos = 1'b1;
        amuxbusa_int = vctat;//v700 - same logic as vctat
        amuxbusb_int = vctat;//v1400 - same logic as vctat
        end
      5'd18://extreme timing reads - NOTE maybe need to add etrm_tim
        begin
        //amuxbusa_int = vbl;
        tm_enpos = 1'b1;
        amuxbusa_int = vlim;//v2 
        amuxbusb_int = vlim;
        end
      5'd19:
        begin
        tm_enpos = 1'b1;
        amuxbusa_int = vbl;
        end 
      5'd20:
        begin
        amuxbusa_int = iref;// is an input, just pass it out
        end
      5'd21:
        begin
        tm_enpos = 1'b1;
        amuxbusb_int = iref;// NOTE add logic from iref if needed
        end
      5'd22:
        begin
        amuxbusa_int = vbl; 
        end
      5'd24:
        begin
        tm_rdhvpl = 1'b1;
        tm_disrow = 1'b1;
        end
      5'd25:
        begin
        tm_xydec = 1'b1;
        end
      5'd26:
        begin
        tm_xydec = 1'b1;
        tm_disrow = 1'b1;
        end
      5'd27:
        begin
        tm_xydec = 1'b1;
        tm_encol = 1'b1;
        end
      default:
        begin
        end
      endcase
    end
  end


//--------------------------------------------------------------------------------------
// Read task      
task read_memory(); // implement display switch based on the error (e.g. if power is bad disable the rest of the error messages)

reg read_x;
  begin
  read_x = 1'b0;
  if (!power_good)
    begin
    if (print_enable && (dummy_read_flag!==1'b1)) $display("===ERROR=== s8fmlt_32k_sys: Design not powered during read in %m @ %d",$time);
    read_x=1'b1;
    end
  if (dummy_read_flag===1'b1)
    begin
    if (print_enable &&(power_good)) $display("===WARNING=== s8fmlt_32k_sys: Dummy Read in Margin Mode detected in %m @ %d",$time);
    end
  if (^mode_l === 1'bx)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Received corrupted mode data in %m @ %d",$time);
    read_x=1'b1;
    end
  if (read_isa !== 1'b1)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: isa not active in %m @ %d",$time);
    read_x=1'b1;
    end
  if (read_itim !== 1'b1)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: itim not active in %m @ %d",$time);
    read_x=1'b1;
    end
  if (seq_l !== 2'b00)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Read mode with sequence %d in %m @ %d",seq_l,$time);
    read_x=1'b1;
    end
  if (seq_timing_error === 1'b1)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence timing violation during read %d in %m @ %d",seq_l,$time);
    read_x=1'b1;
    end
  if (tm_vmarg===1'b1&&(^pnb_l === 1'bx))
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Margin mode read with pnb - %b in %m @ %d",pnb_l,$time);
    read_x=1'b1;
    end
  if (tm_vmarg===1'b1&&(pnb_timing_error === 1'bx))
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Pnb timing violation during margin mode - %b in %m @ %d",pnb_l,$time);
    read_x=1'b1;
    end
  if (tm_vmarg===1'b1&&(vmarg !== 1'b1))
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Margin mode read with VMARG. Check mdac bus - %b in %m @ %d",vmarg,$time);
    read_x=1'b1;
    end
  if (tm_vmarg===1'b1&&(ra_ttmd1 === 1'b1))
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: ttmd1 not expired after change in the row address in %m @ %d",vmarg,$time);
    read_x=1'b1;
    end
  if (mdac_off_x === 1'b1)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Read violating ttmd2 delay time after margin mode in %m @ %d",$time);
    read_x=1'b1;
    end
  if (^dturbo_b === 1'bx)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Invalid turbo_b during read in %m @ %d",$time);
    read_x=1'b1;
    end
//  if (wait_for_turbo_b !== 1'b0)
//    begin
//    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Turbo_b was not 0 for %d after idac/sdac trim change or return to active mode in %m @ %d", tturbo,$time);
//    read_x=1'b1;
//    end
  if (busy)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Mode changed to read during HV operation in %m @ %d",$time);
    read_x=1'b1;
    end
  if (tbb_timing_error)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: read error due to turbo_b timing violation in %m @ %d",$time);
    read_x=1'b1;
    end
  if (addr_timing_error)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: read error due to address timing violation in %m @ %d",$time);
    read_x=1'b1;
    end
  if (iso_timing_error)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: read error due to iso tactive2 timing violation in %m @ %d",$time);
    read_x=1'b1;
    end
  if (rst_timing_error)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: read error due to rst to clk timing violation in %m @ %d",$time);
    read_x=1'b1;
    end
  if (pd2_timing_error)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: read error due to pd2 tactive timing violation in %m @ %d",$time);
    read_x=1'b1;
    end
  if (^address===1'bx)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: read error due to invalid address in %m @ %d",$time);
    read_x=1'b1;
    end
  if ((^tm_l === 1'bx)||(tm_timing_error === 1'b1))
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: tm bus is not valid (%b) in %m @ %d",tm_l,$time);
    read_x = 1'b1;
    end
  if (margin_exit_error === 1'b1)
    begin
    if ((print_enable && (dummy_read_flag!==1'b1))&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: read corrupt due to incorrect margin mode exit in %m @ %d",$time);
    read_x = 1'b1;
    end
  if (pd2orsleep !== 1'b0)
    begin
    read_x = 1'b1;
    end
  
// check for special row address
  if(read_address[ADDR_BITS-1] === 1'b1)
    begin
    read_address[ADDR_BITS-2:CADDR_BITS+SRADDR_BITS] ={(ADDR_BITS-2-CADDR_BITS-SRADDR_BITS+1){1'b0}}; 
    end
     
  if(read_x)
    begin
    douti = {DO_SIZE{1'bx}};
    end
  else if (tm_rdhvpl)
    begin
    douti =~{page_latch[{address[CADDR_BITS-1:0],3'b111}],
             page_latch[{address[CADDR_BITS-1:0],3'b110}],
             page_latch[{address[CADDR_BITS-1:0],3'b101}],
             page_latch[{address[CADDR_BITS-1:0],3'b100}],
             page_latch[{address[CADDR_BITS-1:0],3'b011}],
             page_latch[{address[CADDR_BITS-1:0],3'b010}],
             page_latch[{address[CADDR_BITS-1:0],3'b001}],
             page_latch[{address[CADDR_BITS-1:0],3'b000}]};
    end  //read hvpl is asynchronous and uses the page address.
  else if (tm_disrow)
    begin
    douti = {DO_SIZE{1'b1}};
    end
  else
    begin
//    if (read_address [ADDR_BITS-3:ADDR_BITS-4] === 2'b11)
//      begin
//      douti = {DO_SIZE{1'b1}};
//      end
//    else
      begin
      douti = memory[read_address];
      end
    end
  end
endtask

// preprogram set task      
task set_preprg_flag();
reg preprg_x;
  begin
  preprg_x = 1'b0;
  if (!power_good)
    begin
    if (print_enable) $display("===ERROR=== s8fmlt_32k_sys: Design not powered during preprogram in %m @ %d",$time);
    preprg_x=1'b1;
    end
  if (busy)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Mode changed to preprogram during HV operation in %m @ %d",$time);
    preprg_x=1'b1;
    end
  if (seq_l != 2'b00)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Preprogram mode with sequence %d in %m @ %d",seq_l, $time);
    preprg_x=1'b1;
    end
  if (iso_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Preprogram error due to iso tactive2 timing violation in %m @ %d",$time);
    preprg_x=1'b1;
    end
  if (rst_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Preprogram error due to rst to clk timing violation in %m @ %d",$time);
    preprg_x=1'b1;
    end
  if (pd2_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Preprogram error due to pd2 tactive timing violation in %m @ %d",$time);
    preprg_x=1'b1;
    end
  if (seq_timing_error === 1'b1)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence timing violation during preprogram %d in %m @ %d",seq_l,$time);
    preprg_x=1'b1;
    end
  if (pd2orsleep)
    begin
    if ((print_enable)&&(power_good)) $display("===WARNING=== s8fmlt_32k_sys: Preprogram mode detected during sleep - ignored in %m @ %d",$time);
    preprg_x = 1'b1;
    end
//  if (clk_timing_error)
//    begin
//    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Pre-program error due to clk timing violation in %m @ %d",$time);
//    preprg_x=1'b1;
//    end
  if (preprg_x === 1'b0)
    begin
    preprg_flag = 1'b1;
    end
  else
    begin
    preprg_flag = 1'bx;
    end
  end
endtask
          
//page write all mode set task      
task set_pwrall_flag();
reg pwrall_x;
  begin
  pwrall_x = 1'b0;
  if (!power_good)
    begin
    if (print_enable) $display("===ERROR=== s8fmlt_32k_sys: Design not powered during page write all in %m @ %d",$time);
    pwrall_x=1'b1;
    end
  if (busy)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Mode changed to page write all during HV operation in %m @ %d",$time);
    pwrall_x=1'b1;
    end
  if (seq_l != 2'b00)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: page write all mode without sequence 0 in %m @ %d",$time);
    pwrall_x=1'b1;
    end
  if (iso_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys:  page write all error due to iso tactive2 timing violation in %m @ %d",$time);
    pwrall_x=1'b1;
    end
  if (rst_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys:  page write all error due to rst to clk timing violation in %m @ %d",$time);
    pwrall_x=1'b1;
    end
  if (pd2_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys:  page write all error due to pd2 tactive timing violation in %m @ %d",$time);
    pwrall_x=1'b1;
    end
  if (seq_timing_error === 1'b1)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence timing violation during set page write all %d in %m @ %d",seq_l,$time);
    pwrall_x=1'b1;
    end
  if (pd2orsleep)
    begin
    if ((print_enable)&&(power_good)) $display("===WARNING=== s8fmlt_32k_sys: Page write all mode detected during sleep - ignored in %m @ %d",$time);
    pwrall_x = 1'b1;
    end
//  if (clk_timing_error)
//    begin
//    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Page write all flag error due to clk timing violation in %m @ %d",$time);
//    pwrall_x=1'b1;
//    end
  if (pwrall_x === 1'b0)
    begin
    pwrall_flag = 1'b1;
    end
  else
    begin
    pwrall_flag = 1'bx;
    end
  end
endtask
      
//page clear mode set task
task set_pageclr_flag();
reg pageclr_x;
  begin
  pageclr_x = 1'b0;
  if (!power_good)
    begin
    if (print_enable) $display("===ERROR=== s8fmlt_32k_sys: Design not powered during clear page latches mode in %m @ %d",$time);
    pageclr_x=1'b1;
    end
  if (busy)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Mode changed to clear page latches during HV operation in %m @ %d",$time);
    pageclr_x=1'b1;
    end
  if (seq_l != 2'b00)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: clear page latches mode without sequence 0 in %m @ %d",$time);
    pageclr_x=1'b1;
    end
  if (iso_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: clear page latches mode error due to iso tactive2 timing violation in %m @ %d",$time);
    pageclr_x=1'b1;
    end
  if (rst_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: clear page latches mode error due to rst to clk timing violation in %m @ %d",$time);
    pageclr_x=1'b1;
    end
  if (pd2_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: clear page latches mode error due to pd2 tactive timing violation in %m @ %d",$time);
    pageclr_x=1'b1;
    end
  if (seq_timing_error === 1'b1)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence timing violation during page reset %d in %m @ %d",seq_l,$time);
    pageclr_x=1'b1;
    end
  if (pd2orsleep)
    begin
    if ((print_enable)&&(power_good)) $display("===WARNING=== s8fmlt_32k_sys: clear page latches mode detected during sleep - ignored in %m @ %d",$time);
    pageclr_x = 1'b1;
    end
//  if (clk_timing_error)
//    begin
//    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: clear page latches flag error due to clk timing violation in %m @ %d",$time);
//    pageclr_x=1'b1;
//    end
  
  if (pageclr_x === 1'b0)
    begin
    page_clr_flag = 1'b1;
    end
  else
    begin
    page_clr_flag = 1'bx;
    end
  end
endtask

//generate reset hv pulse
task gen_reset_hv();
reg reset_hv_x;
  begin
  reset_hv_x = 1'b0;
  if (!power_good)
    begin
    if (print_enable) $display("===ERROR=== s8fmlt_32k_sys: Design not powered during clear page latches mode in %m @ %d",$time);
    reset_hv_x=1'b1;
    end
  if (seq_l != 2'b00)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: reset hv mode without sequence 0 in %m @ %d",$time);
    reset_hv_x=1'b1;
    end
  if (iso_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: reset hv mode error due to iso tactive2 timing violation in %m @ %d",$time);
    reset_hv_x=1'b1;
    end
  if (rst_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: reset hv mode error due to rst to clk timing violation in %m @ %d",$time);
    reset_hv_x=1'b1;
    end
  if (pd2_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: reset hv mode error due to pd2 tactive timing violation in %m @ %d",$time);
    reset_hv_x=1'b1;
    end
  if (seq_timing_error === 1'b1)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence timing violation during page reset %d in %m @ %d",seq_l,$time);
    reset_hv_x=1'b1;
    end
  if (pd2orsleep)
    begin
    if ((print_enable)&&(power_good)) $display("===WARNING=== s8fmlt_32k_sys: clear page latches mode detected during sleep - ignored in %m @ %d",$time);
    reset_hv_x = 1'b1;
    end

  if (reset_hv_x === 1'b0)
    begin
    margin_exit_error = 1'b0;
    reset_hv = 1'b1;
    #1;
    reset_hv = 1'b0;
    end
  else
    begin
    reset_hv = 1'bx;
    end
  end
endtask

// check sequence task; called duting hv operations
task check_sequence ();

  begin
  sequence_good = 1'b0;
  case (seq_l)
    2'd0:
      begin
      if ((prev_seq === 2'd0)||(prev_seq === 2'd3))
        begin
        sequence_good = 1'b1;
        end
      end
    2'd1:
      begin
      busy = 1'b1;
      if ((prev_seq === 2'd1)||(prev_seq === 2'd0))
        begin
        sequence_good = 1'b1;
        end
      end
    2'd2:
      begin
      if ((prev_seq === 2'd2)||(prev_seq === 2'd1))
        begin
        sequence_good = 1'b1;
        end
      end
    2'd3:
      begin
      busy = 1'b0;
      if (program_mode === 1'b1)
        begin
        preprg_flag = 1'b0;
        pwrall_flag = 1'b0;
        end
      if (margin_exit_error === 1'b1)
        begin
        if ((prev_seq === 2'd3)||(prev_seq === 2'd1))
          begin
          sequence_good = 1'b1;
          end
        margin_exit_error = 1'b0;
        reset_hv = 1'b1;
        #1;
        reset_hv = 1'b0;
        end
      if ((prev_seq === 2'd3)||(prev_seq === 2'd2))
        begin
        sequence_good = 1'b1;
        end
      end  
    default:
      begin
      sequence_good = 1'b0;
      end    
  endcase

  if (prev_seq !== seq_l)
    begin //different sequence clocked in
    seq_sample =  $realtime; 
    case (prev_seq)
    2'd0:
      begin
      if ((seq_sample - prev_seq_sample) < S8FMLT_32K_TCY-0.1)
        begin
        sequence_good = 1'b0;
        if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence 0 lasted for %d; less than TCY (%d) in %m @ %d",$realtime - prev_seq_sample,S8FMLT_32K_TCY,$time); 
        end
      end
    2'd1:
      begin
     if ((seq_sample - prev_seq_sample) < S8FMLT_32K_TS1-0.1)
        begin
        sequence_good = 1'b0;
        if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence 1 lasted for %d; less than TS1 (%d) in %m @ %d",$realtime - prev_seq_sample,S8FMLT_32K_TS1,$time); 
        end
      end
    2'd2:
      begin
      //covered in specify block;includes timings to pe as well
      end
    2'd3:
      begin
     if ((seq_sample - prev_seq_sample) < S8FMLT_32K_TS3-0.15)
        begin
        sequence_good = 1'b0;
        if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence 3 lasted for %d; less than TS3 (%d) in %m @ %d",$realtime - prev_seq_sample,S8FMLT_32K_TS3,$time); 
        end
      end
    default:
      begin
      end
    endcase

  end

  if (seq_l > 1)
    begin
    if (mode_l === prev_mode)
      begin
      mode_good = 1'b1;
      end
    else
      begin
      mode_good = 1'b0;
      end
    end
  end
endtask

task erase_wl;
//parameter ADDR_BITS = 14;
input [ADDR_BITS-1:0] addr;
reg   [ADDR_BITS-1:0] erase_addr;
//reg   [ADDR_BITS-1:0] i;
integer i;
reg   erase_wl_x;
reg   erase_x_all;
//reg   ers_pe_in_seq2;

begin
  //verify the running conditions
  check_sequence; // updates the sequence good flag
  if(seq_l === 2'b01) //reset the error bit in seq1 - begining of the erase operation
    begin
    erase_wl_x = 1'b0;
    pe_timing_error = 1'b0;
    erase_x_all = 1'b0;
    end
  if(!power_good && !inhibit_pe)
    begin
    if (print_enable) $display("===ERROR=== s8fmlt_32k_sys: model not powered during erase in %m @ %d",$time);
    erase_wl_x = 1'b1;
    end
  if (!sequence_good)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence %d after Sequence %d, in erase mode in %m @ %d",seq_l,prev_seq,$time);
    erase_wl_x = 1'b1;
    end
  if (seq_timing_error === 1'b1)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence timing violation during erase %d in %m @ %d",seq_l,$time);
    erase_wl_x=1'b1;
    end
  if (!mode_good)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Mode change during erase operation - %h -> %h in %m @ %d",prev_mode,mode_l,$time);
    erase_wl_x = 1'b1;
    end
  if (preprg_flag)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Erase with preprogram flag set in %m @ %d",$time);
    erase_wl_x = 1'b1;
    end
  if (pd2orsleep)
    begin
    if ((print_enable)&&(power_good)) $display("===WARNING=== s8fmlt_32k_sys: Erase mode during sleep in %m @ %d",$time);
    end
//  if (clk_timing_error)
//    begin
//    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Erase error due to clk timing violation in %m @ %d",$time);
//    erase_wl_x=1'b1;
//    end
  if (addr_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Erase error due to ADDRESS timing violation in %m @ %d",$time);
    erase_x_all=1'b1;
    end
  if (iso_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Erase error due to iso tactive1 timing violation in %m @ %d",$time);
    erase_x_all=1'b1;
    end
  if (rst_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Erase error due to rst to aclkt timing violation in %m @ %d",$time);
    erase_x_all=1'b1;
    end
  if (pd2_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Erase error due to pd2 tactive timing violation in %m @ %d",$time);
    erase_x_all=1'b1;
    end
  if (^addr === 1'bx)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Erase with invalid address in %m @ %d",$time);
    erase_x_all=1'b1;
    end
  if (margin_exit_error === 1'b1 && seq_l === 2'b10)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Erase corrupt due to incorrect margin mode exit in %m @ %d",$time);
    erase_wl_x = 1'b1;
    end
  if (ers_prg_hv_error)
    begin
    if ((print_enable)&&(power_good)) 
      begin
      $display("===ERROR=== s8fmlt_32k_sys: HV voltages are not clean during the entire erase operation in %m @ %d",$time);
      hv_good_report;
      end
    erase_wl_x = 1'b1;
    end 
     
  erase_addr = {ADDR_BITS{1'b0}};
  erase_addr[ADDR_BITS-1:CADDR_BITS]=addr[ADDR_BITS-1:CADDR_BITS];//trim the input address to ignore CA address
  if(erase_addr[ADDR_BITS-1] === 1'b1)
    begin
    erase_addr[ADDR_BITS-2:CADDR_BITS+SRADDR_BITS] ={(BADDR_BITS-PLADDR_BITS+RADDR_BITS-SRADDR_BITS){1'b0}}; 
    end

  if ((!pd2orsleep) && (!inhibit_pe) && (erase_x_all === 1'b0))
    begin
    case ({pe,seq_l})
    3'b000://sequece 0 pe 0
      begin
      ers_pe_in_seq2 = 1'b0; 
      end
    3'b001://sequence 1 pe 0
      begin
      end
    3'b010://sequence 2 pe 0
      begin
      end
    3'b110://sequence 2 pe 1
      begin // erase cicle - set to x at the begining of erase
      ers_pe_in_seq2 = 1'b1;
      for(i=0;i<COLUMNS;i=i+1)
        begin
        memory[erase_addr+i]= {DO_SIZE{1'bx}};
        status[erase_addr+i]= 1'b1;
        end
      end  
    3'b011://sequence 3 pe 0
      begin
      if (ers_pe_in_seq2 === 1'b1)
        begin
        if(pe_timing_error === 1'b0)
          begin
          for(i=0;i<COLUMNS;i=i+1)
            begin
            if(erase_wl_x === 1'b0) 
              begin
              memory[erase_addr+i]= {DO_SIZE{1'b0}};
              status[erase_addr+i]= 1'b0;
              end
            else
              begin
              memory[erase_addr+i]= {DO_SIZE{1'bx}};
              status[erase_addr+i]= 1'b1; // memory location still requires a clean program
              end
            end
          end
        else
          begin //timing error; corrupt hv operation
          $display("===ERROR=== s8fmlt_32k_sys: Memory location corrupted due to pe timing violation in %m @ %d",pe,seq_l,$time);
          for(i=0;i<COLUMNS;i=i+1)
            begin
            memory[erase_addr+i]= {DO_SIZE{1'bx}};
            status[erase_addr+i]= 1'b1;
            end 
          end
        end
      //ers_pe_in_seq2 = 1'b0;
      end
    default:
      begin
      if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Pe is %b in sequence %d in %m @ %d",pe,seq_l,$time);
      end
    endcase
    end     
  
  if (erase_x_all === 1'b1)
    begin
    $display("===ERROR=== s8fmlt_32k_sys: Corrupting entire memory due to invalid address in %m @ %d",$time);
    for(j = 0;j < MEM_SIZE;j = j + 1) 
      begin
      memory[j] = {DO_SIZE{1'bx}};
      status[j] = 1;
      end
    end
  end
endtask

// program row task
task program_wl;
//parameter ADDR_BITS = 16;
input [ADDR_BITS-1:0] addr;
reg   [ADDR_BITS-1:0] program_addr;
integer i;
reg   program_wl_x;
reg   [CADDR_BITS-1:0] page_addr;
reg   [COLUMNS-1:0] status_error;
reg   prg_x_all;
//reg   prg_pe_in_seq2;
reg   program_ones;
  begin
  //verify the running conditions
  check_sequence; // updates the sequence good flag
  if(seq_l === 2'b01) //reset the error bit in seq1 - begining of the program operation
    begin
    program_wl_x = 1'b0;
    pe_timing_error = 1'b0;
    prg_x_all=1'b0;
    end
  if(!power_good && !inhibit_pe)
    begin
    if (print_enable) $display("===ERROR=== s8fmlt_32k_sys: model not powered during program in %m @ %d",$time);
    program_wl_x = 1'b1;
    end
  if (!sequence_good)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence %d after Sequence %d, in program mode @%d",seq_l,prev_seq,$time);
    program_wl_x = 1'b1;
    end
  if (seq_timing_error === 1'b1)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Sequence timing violation during program %d in %m @ %d",seq_l,$time);
    program_wl_x=1'b1;
    end
  if (!mode_good)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Mode change during program operation - %h -> %h in %m @ %d",prev_mode,mode_l, $time);
    program_wl_x = 1'b1;
    end
  if (vbl !== 1'b1)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Vbl voltage not active during program operation. Check bdac in %m @ %d",$time,);
    program_wl_x = 1'b1;
    end
  if (pd2orsleep)
    begin
    if ((print_enable)&&(power_good)) $display("===WARNING=== s8fmlt_32k_sys: Program mode during sleep in %m @ %d",$time);
    end
//  if (clk_timing_error)
//    begin
//    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Program error due to clk timing violation in %m @ %d",$time);
//    program_wl_x=1'b1;
//    end
  if (addr_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Program error due to address timing violation in %m @ %d",$time);
    prg_x_all=1'b1;
    end
  if (iso_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Program error due to iso tactive1 timing violation in %m @ %d",$time);
    prg_x_all=1'b1;
    end
  if (rst_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Program error due to rst to aclk timing violation in %m @ %d",$time);
    prg_x_all=1'b1;
    end
  if (pd2_timing_error)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Program error due to pd2 tactive timing violation in %m @ %d",$time);
    prg_x_all=1'b1;
    end
  if (^addr === 1'bx)
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Erase with invalid address in %m @ %d",$time);
    prg_x_all=1'b1;
    end
  if (margin_exit_error === 1'b1 && seq_l === 2'b10 )
    begin
    if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: Program corrupt due to incorrect margin mode exit in %m @ %d",$time);
    program_wl_x = 1'b1;
    end
  if (ers_prg_hv_error)
    begin
    if ((print_enable)&&(power_good)) 
      begin
      $display("===ERROR=== s8fmlt_32k_sys: Incorrect VPOS/VNEG drive during program in %m @ %d",$time);
      hv_good_report;
      end
    program_wl_x = 1'b1;
    end 
     
  program_addr = {ADDR_BITS{1'b0}};
  program_addr[ADDR_BITS-1:CADDR_BITS]=addr[ADDR_BITS-1:CADDR_BITS];//trim the input address to ignore CA address

  if(program_addr[ADDR_BITS-1] === 1'b1)
    begin
    program_addr[ADDR_BITS-2:CADDR_BITS+SRADDR_BITS] = {(BADDR_BITS-PLADDR_BITS+RADDR_BITS-SRADDR_BITS){1'b0}}; 
    end

  
  if ((!pd2orsleep) && (!inhibit_pe)&&(prg_x_all===1'b0))
    begin
    case ({pe,seq_l})
    3'b000://sequece 0 pe 0
      begin
      prg_pe_in_seq2 = 1'b0; 
      end
    3'b001://sequence 1 pe 0
      begin
      end
    3'b010://sequence 2 pe 0
      begin
      end
    3'b110://sequence 2 pe 1
      begin
      program_ones = preprg_flag;
      prg_pe_in_seq2 = 1'b1;
      for(i=0;i<COLUMNS;i=i+1)
        begin
        if (status[program_addr+i] === 1'b1 && preprg_flag === 1'b0)
          begin
          if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: program on un-erased memory location %h in %m @ %d",program_addr+i,$time);
          re_program[program_addr+i]= 1'b1;
          end
        memory[program_addr+i]= {DO_SIZE{1'bx}};
        //#0.01;
        status[program_addr+i]= 1'b1;
        end
      end  
    3'b011://sequence 3 pe 0
      begin
      if (prg_pe_in_seq2 === 1'b1)
        begin
        if(pe_timing_error === 1'b0)
          begin
          for(i=0;i<COLUMNS;i=i+1)
            begin
            if(program_wl_x === 1'b0) 
              begin
              if (program_ones === 1'b1)
                begin // do preprogram
                memory[program_addr+i]= {DO_SIZE{1'b1}};
                status[program_addr+i]= 1'b1;
                end
              else if (program_ones === 1'b0)
                begin
                if (re_program[program_addr+i]!== 1'b1)
                  begin
                  page_addr = i;
                  memory[program_addr+i]= {page_latch[{page_addr,3'b111}],
                                          page_latch[{page_addr,3'b110}],
                                          page_latch[{page_addr,3'b101}],
                                          page_latch[{page_addr,3'b100}],
                                          page_latch[{page_addr,3'b011}],
                                          page_latch[{page_addr,3'b010}],
                                          page_latch[{page_addr,3'b001}],
                                          page_latch[{page_addr,3'b000}]};
                  end
                end
              else
                begin
                memory[program_addr+i]= {DO_SIZE{1'bx}};
                status[program_addr+i]= 1'b1;
                end
              end
            else
              begin
              memory[program_addr+i]= {DO_SIZE{1'bx}};
              status[program_addr+i]= 1'b1; // memory location still requires a clean program
              end
            end
          end
        else
          begin //timing error; corrupt hv operation
          $display("===ERROR=== s8fmlt_32k_sys: Memory location corrupted due to pe timing violation in %m @ %d",pe,seq_l,$time);
          for(i=0;i<COLUMNS;i=i+1)
            begin
            memory[program_addr+i]= {DO_SIZE{1'bx}};
            status[program_addr+i]= 1'b1;
            end 
          end
        end
      //prg_pe_in_seq2 = 1'b0;
      end
    default:
      begin
      if ((print_enable)&&(power_good)) $display("===ERROR=== s8fmlt_32k_sys: pe is %b in sequence %d in %m @ %d",pe,seq_l,$time);
      end
    endcase
    end     

  if (prg_x_all === 1'b1)
    begin
    $display("===ERROR=== s8fmlt_32k_sys: Corrupting entire memory due to invalid address in %m @ %d",$time);
    for(j = 0;j < MEM_SIZE;j = j + 1) 
      begin
      memory[j] = {DO_SIZE{1'bx}};
      status[j] = 1;
      end
    end
  end
endtask


task erase_sc;
//parameter ADDR_BITS = 16;
input [ADDR_BITS-1:0] addr;
reg   [ADDR_BITS-1:0] erase_sc_addr;
integer k;
  begin
  erase_sc_addr = {ADDR_BITS{1'b0}};
  erase_sc_addr[ADDR_BITS-1:CADDR_BITS+RADDR_BITS]=addr[ADDR_BITS-1:CADDR_BITS+RADDR_BITS];
  if (erase_sc_addr[ADDR_BITS-1] === 1'b0)
    begin
    for(k=0;k<SECTOR_ROWS;k=k+1)
      begin
      erase_wl(erase_sc_addr);
      erase_sc_addr[RADDR_BITS+CADDR_BITS-1:CADDR_BITS]=erase_sc_addr[RADDR_BITS+CADDR_BITS-1:CADDR_BITS]+1;
      end
    end
  else if (erase_sc_addr[ADDR_BITS-1] === 1'b1)
    begin
    if ((print_enable)) 
      begin
      $display("===WARNING=== s8fmlt_32k_sys: Erase Sector in special rows is not allowed. Executing Erase WL in %m @ %d",$time);
      end
    //call erase wl for the input address when ax = 1
    erase_wl(addr);
    end
  end
endtask

task erase_bk;
//parameter ADDR_BITS = 16;
input [ADDR_BITS-1:0] addr;
reg [ADDR_BITS-1:0] erase_bk_addr;
integer k;
  begin
  erase_bk_addr = {ADDR_BITS{1'b0}};
  erase_bk_addr[ADDR_BITS-1]=addr[ADDR_BITS-1];
  
  if (erase_bk_addr[ADDR_BITS-1] === 1'b0)
    begin
    erase_sc(erase_bk_addr);
/*
    for(k=0;k<SECTORS;k=k+1)
      begin
      erase_sc(erase_bk_addr);
      erase_bk_addr[BADDR_BITS+RADDR_BITS+CADDR_BITS-1:RADDR_BITS+CADDR_BITS]=erase_bk_addr[BADDR_BITS+RADDR_BITS+CADDR_BITS-1:RADDR_BITS+CADDR_BITS]+1;
      end
*/
    end
  else if (erase_bk_addr[ADDR_BITS-1] === 1'b1)
    begin
    if ((print_enable))
      begin
      $display("===WARNING=== s8fmlt_32k_sys: Erase Bulk in special rows is not allowed. Executing Erase WL in %m @ %d",$time);
      end
    //call erase wl for the input address when ax = 1
    erase_wl(addr); 
    end
  end
endtask

task program_sc;
//parameter ADDR_BITS = 16;
input [ADDR_BITS-1:0] addr;
reg [ADDR_BITS-1:0] program_sc_addr;
integer k;
  begin
  program_sc_addr = {ADDR_BITS{1'b0}};
  program_sc_addr[ADDR_BITS-1:CADDR_BITS+RADDR_BITS]= addr[ADDR_BITS-1:CADDR_BITS+RADDR_BITS];
  program_sc_addr[CADDR_BITS]=addr[CADDR_BITS]; //keep Ra0 for odd even selection
  
  if (program_sc_addr[ADDR_BITS-1] === 1'b0)
    begin
    for(k=0;k<SECTOR_ROWS;k=k+2)
      begin
      program_wl(program_sc_addr);
      program_sc_addr[RADDR_BITS+CADDR_BITS-1:CADDR_BITS]=program_sc_addr[RADDR_BITS+CADDR_BITS-1:CADDR_BITS]+2;
      end
    end
  else if (program_sc_addr[ADDR_BITS-1] === 1'b1)
    begin
    if ((print_enable)) 
      begin
      $display("===WARNING=== s8fmlt_32k_sys: Program Sector in special rows is not allowed. Executing Program WL in %m @ %d",$time);
      end
    //call program wl when ax is i
    program_wl(addr);
    end
  end
endtask  

task program_sc_all;  
//parameter ADDR_BITS = 16;
input [ADDR_BITS-1:0] addr;
reg   [ADDR_BITS-1:0] program_sc_all_addr;
integer k;
  begin
  program_sc_all_addr = {ADDR_BITS{1'b0}};
  program_sc_all_addr[ADDR_BITS-1:CADDR_BITS+RADDR_BITS]=addr[ADDR_BITS-1:CADDR_BITS+RADDR_BITS];

  if (program_sc_all_addr[ADDR_BITS-1] === 1'b0)
    begin
    for(k=0;k<SECTOR_ROWS;k=k+1)
      begin
      program_wl(program_sc_all_addr);
      program_sc_all_addr[RADDR_BITS+CADDR_BITS-1:CADDR_BITS]=program_sc_all_addr[RADDR_BITS+CADDR_BITS-1:CADDR_BITS]+1;
      end
    end
  else if (program_sc_all_addr[ADDR_BITS-1] === 1'b1)
    begin
    if ((print_enable)) 
      begin
      $display("===WARNING=== s8fmlt_32k_sys: Program Sector All in special rows is not allowed. Executing Program WL in %m @ %d",$time);
      end
    //call program wl when ax is i
    program_wl(addr);
    end
  end
endtask

task program_bk;
//parameter ADDR_BITS = 16;
input [ADDR_BITS-1:0] addr;
reg [ADDR_BITS-1:0] program_bk_addr;
integer k;
  begin
  program_bk_addr = {ADDR_BITS{1'b0}};
  program_bk_addr[ADDR_BITS-1]=addr[ADDR_BITS-1];
  program_bk_addr[CADDR_BITS]=addr[CADDR_BITS];//keep Ra0 for odd even program
  if (program_bk_addr[ADDR_BITS-1] === 1'b0)
    begin
    program_sc(program_bk_addr); // one sector, just pass address
/*
    for(k=0;k<SECTORS;k=k+1)
      begin
//      if ((k != 3) && (k != 7)) // skip the 4 sector in each plane (48k instead of 64k)
        begin
        program_bk_addr[BADDR_BITS+RADDR_BITS+CADDR_BITS-1:RADDR_BITS+CADDR_BITS] = k;
        program_sc(program_bk_addr);
        end
      end
*/
    end
  else if (program_bk_addr[ADDR_BITS-1] === 1'b1)
    begin
    if ((print_enable))
      begin
      $display("===WARNING=== s8fmlt_32k_sys: Program Bulk in special rows is not allowed. Executing Program WL in %m @ %d",$time);
      end
    //call program word-line when ax is 1
    program_wl(addr);
    end 
  end
endtask

task program_bk_all;
//parameter ADDR_BITS = 16;
input [ADDR_BITS-1:0] addr;
reg [ADDR_BITS-1:0] program_bk_all_addr;
integer k;
  begin
  program_bk_all_addr = {ADDR_BITS{1'b0}};
  program_bk_all_addr[ADDR_BITS-1]=addr[ADDR_BITS-1];
  if (program_bk_all_addr[ADDR_BITS-1] === 1'b0)
    begin
    program_sc_all(program_bk_all_addr); // one sector; just pass the address
/*
    for(k=0;k<SECTORS;k=k+1)
      begin
//      if ((k != 3) && (k != 7)) // skip the 4 sector in each plane (48k instead of 64k)
        begin
        program_bk_all_addr[BADDR_BITS+RADDR_BITS+CADDR_BITS-1:RADDR_BITS+CADDR_BITS] = k;
        program_sc_all(program_bk_all_addr);
        end
      end
*/    
    end
  else if (program_bk_all_addr[ADDR_BITS-1] === 1'b1)
    begin
    if ((print_enable)) 
      begin
      $display("===WARNING=== s8fmlt_32k_sys: Program Bulk All in special rows is not allowed. Executing Program WL in %m @ %d",$time);
      end
    //call program word-line when ax is 1
    program_wl(addr);
    end 
  end
endtask

// ----- corrupt memory engine----

event corrupt_mem;
reg [ADDR_BITS-1:0] corrupt_address;
always @(corrupt_mem)
  begin
  memory[corrupt_address] = ~memory[corrupt_address];
  end

  assign xy_out_iso= (p_up===1'b0)?1'bx:
                     (^tm_xydec===1'bx)?1'bx:
                     (tm_xydec===1'b0)?1'b0:
                     (iref!==1'b1)?1'bx:
                     ((~tm_disrow)&&(~tm_encol));

	assign xy_out =(iso===1'b1)?(gnd_good?1'b0:1'bx):
                 (iso===1'b0)?xy_out_iso:1'bx;

//---
  initial
    begin
    tpclk00 = 0;
    tpclk11 = 0;
    tpclk10 = 0.0;
    prev_seq_sample = 0.0;
    pclk_toggle = 0;
    pclk_period_good = 1'b0;
    pump_timing_error = 1'b0;
    end

/*
  always @(posedge pclk or negedge p_up_analog) 
    begin
    if (p_up_analog === 1'b1)
      begin
      tpclk00 = tpclk11;
      tpclk11 = $realtime;
      if(tpclk00 > 0) // tpclk 0 means firt ed
        begin
	      if(((tpclk11 - tpclk00) <= TPCLK_MAX) && 
	        ((tpclk11 - tpclk00) >= TPCLK_MIN))
          begin
          pclk_toggle = 1;
          end
	      else
          begin
          pclk_toggle = 0;
          end
        end
      end
    else // power is bad - reset all the time variables and switch pclk_toggle off
      begin
      pclk_toggle = 0;
      tpclk00 = 0;
      tpclk11 = 0;
      end
    end
*/
  always @(negedge pclk or negedge p_up_analog)
    begin
    if (p_up_analog === 1'b1)
      begin
      if (pclk === 1'b0)
        begin
        tpclk10 = $realtime;
        if(((tpclk10 - tpclk11) >= 0.4*(tpclk11 - tpclk00))&&
          ((tpclk10 - tpclk11) <= 0.6*(tpclk11 - tpclk00)))
          begin
          pclk_pulse = 1;
          end
        else
          begin
          pclk_pulse = 0;
          end
        end
      else
        begin
        pclk_pulse = 0;
        tpclk10 = 0.0;
        end
      end
    else
      begin
      pclk_pulse = 0;
      tpclk10 = 0.0;
      end
    end

  always @(posedge pclk or negedge p_up_analog)
    begin
    if (p_up_analog === 1'b1)
      begin
      if(pclk === 1'b1)
        begin
        tpclk00 = tpclk11;
        tpclk11 = $realtime;
        if ((tpclk00 > 0) && ((tpclk11 - tpclk00) < TPCLK_MIN))
          begin
          pclk_period_good = 1'b0;
          end
        else
          begin
          pclk_period_good = 1'b1;
          end
        end
      else
        begin
        pclk_period_good = 1'b0;
        end
      end
    else
      begin
      pclk_period_good = 1'b0;
      tpclk00 = 0;
      tpclk11 = 0;
      end
    disable pclk_toggle_gen;
    #0;
    -> pclk_event;
    end
  
  always @(pclk_event)
    begin:pclk_toggle_gen
    if (pclk_period_good === 1'b1)
      begin
      pclk_toggle = 1'b1;
      #TPCLK_MAX;
      end
    pclk_toggle = 1'b0;
    end
`endif //ATPG_SIM
//---
assign tchk_and_not_scan_mode = power_good && ~scan_mode;
assign not_scan_en = ~scan_en;
assign not_pe = !pe;
assign pe_and_not_scan_mode = pe && ~scan_mode;
assign not_scan_mode = ~scan_mode;


`ifdef functional
assign dclk = clk;
assign dpe = pe;
assign dscan_in1 = scan_in1;
assign dscan_in2 = scan_in2;
assign dpa = pa;
assign dpw = pw;
assign ddi = di;
assign dra = ra;
assign dseq = seq;
//assign dba = ba;
assign dca = ca;
assign dmode = mode;
assign daxa = axa;
assign dpdac = pdac;
assign dndac = ndac;
assign dpnb = pnb;
assign dtm = tm;
assign dreset = reset;
assign dturbo_b = turbo_b;
assign dsleep = sleep;
`else     
	specify

specparam S8FMLT_32K_SYS_TCY		      = 51; //AC 3.2	 
specparam S8FMLT_32K_SYS_TCY_S		      = 18; //AC 3.2	 
specparam S8FMLT_32K_SYS_TAWH		    = 6;  //AC 3.5
specparam S8FMLT_32K_SYS_TAWL 	      = 6;  //AC 3.6
specparam S8FMLT_32K_SYS_TAS		      = 3.5;//AC 3.3
specparam S8FMLT_32K_SYS_TAH		      =	0;  //AC 3.4
specparam S8FMLT_32K_SYS_TPE_PRG_MIN = 1000;
specparam S8FMLT_32K_SYS_TSW			    = 20;  //AC 3.23
specparam S8FMLT_32K_SYS_TS2P        = 10000; //AC 3.10
specparam S8FMLT_32K_SYS_TPS3        = 50000; //AC 3.15
specparam S8FMLT_32K_SYS_TRW1        = 20;     //AC 3.21
specparam S8FMLT_32K_SYS_TRW2        = 7000;   //AC 3.22
specparam S8FMLT_32K_SYS_CLK_REC_PE = S8FMLT_32K_SYS_TPE_PRG_MIN+S8FMLT_32K_SYS_TPS3;
specparam S8FMLT_32K_SYS_TAA         = 48;// 50 ns data out access time AC 3.1
specparam S8FMLT_32K_SYS_PUMPS       = 3.5;// setup time; ndac/pdac - posedge pe //AC 3.3
specparam S8FMLT_32K_SYS_PUMPH       = 0;// hold time; ndac/pdac - posedge pe    //AC 3.4
specparam S8FMLT_32K_SYS_TAA_S       = 10;//AC 3.28
specparam S8FMLT_32K_SYS_TRCS        = 20;//AC 3.20
specparam S8FMLT_32K_SYS_TIDS        = 10;//AC 3.27
specparam S8FMLT_32K_SYS_TACTIVE     = 5000;//AC3.26
specparam S8FMLT_32K_SYS_TACTIVE1    = 80;//AC3.TBD
specparam S8FMLT_32K_SYS_TTURBO      = 5000; //AC3.25
specparam S8FMLT_32K_SYS_TISO        = 200; //AC2.TBD
	//------------------------------------------------------------
	// The specify block is imported form the S8FMLT_32K_SYS_top
	// All parameters are defined in the header file (s8fm_h_32.v)
	//------------------------------------------------------------
	$period(posedge clk &&& not_scan_mode,S8FMLT_32K_SYS_TCY,notifier_clk );
	$period(posedge clk &&& scan_mode,S8FMLT_32K_SYS_TCY_S,notifier_clk );
	$width (posedge clk &&& power_good,S8FMLT_32K_SYS_TAWH,,notifier_clk );
	$width (negedge clk &&& power_good,S8FMLT_32K_SYS_TAWL,,notifier_clk );
	//$recovery(negedge pe,posedge clk &&& tchk_and_not_scan_mode,S8FMLT_32K_SYS_TPS3) ;
  $recrem(negedge pe,posedge clk ,S8FMLT_32K_SYS_TPS3,0,notifier_pe,tchk_and_not_scan_mode,power_good,dpe,dclk) ;
	//$recovery(posedge pe,posedge clk &&& tchk_and_not_scan_mode,S8FMLT_32K_SYS_CLK_REC_PE) ;
	//$recovery(negedge reset,posedge clk &&& tchk,0) ;
	$recrem(negedge reset &&& power_good,posedge clk ,S8FMLT_32K_SYS_TRCS,0,notifier_rst,,,dreset,dclk) ;
	$recrem(negedge iso &&& power_good,posedge clk ,S8FMLT_32K_SYS_TACTIVE1,0,notifier_iso,,,diso,dclk) ;
	$recrem(negedge pd2 &&& power_good,posedge clk ,S8FMLT_32K_SYS_TACTIVE,0,notifier_pd2,,,dpd2,dclk) ;
	//$recovery(posedge turbo_b,posedge clk &&& tchk,0);
	$recrem(posedge turbo_b &&& power_good,posedge clk,S8FMLT_32K_SYS_TIDS,0,notifier_tbb,,,dturbo_b,dclk);
  $setuphold (posedge clk ,posedge pe,0,S8FMLT_32K_SYS_TS2P ,notifier_pe,tchk_and_not_scan_mode,power_good, dclk, dpe);
	$width( posedge pe &&& tchk_and_not_scan_mode,S8FMLT_32K_SYS_TPE_PRG_MIN,,notifier_pe );
	$width( posedge sleep,S8FMLT_32K_SYS_TSW );
	//$recovery(negedge sleep,posedge turbo_b,0);
	$recrem(negedge sleep,posedge turbo_b,S8FMLT_32K_SYS_TTURBO,0,,,,dsleep,dturbo_b); // this is sleep to clk and it is already used in iref timing
  $width(posedge reset &&& not_pe,S8FMLT_32K_SYS_TRW1,,notifier_rstw);
  $width(posedge reset &&& pe_and_not_scan_mode ,S8FMLT_32K_SYS_TRW2,,notifier_rstw);
	$width(posedge pclk,S8FMLT_32K_SYS_TAWH);
  $width(negedge pclk,S8FMLT_32K_SYS_TAWL);
	//$setup(posedge scan_in &&& tchk, posedge clk &&& scan_mode, S8FMLT_32K_SYS_TAS,notifier_scan); 
	//$setup(negedge scan_in &&& tchk, posedge clk &&& scan_mode, S8FMLT_32K_SYS_TAS,notifier_scan); 
  $setuphold(posedge clk, posedge scan_in1, S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_scan1,scan_mode,power_good,dclk,dscan_in1);
	$setuphold(posedge clk, negedge scan_in1, S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_scan1,scan_mode,power_good,dclk,dscan_in1);
  $setuphold(posedge clk, posedge scan_in2, S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_scan2,scan_mode,power_good,dclk,dscan_in2);
	$setuphold(posedge clk, negedge scan_in2, S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_scan2,scan_mode,power_good,dclk,dscan_in2);
	
	if (not_scan_mode)(posedge clk => (xy_out : clk ) ) = (0:0:0,0:0:0);
  // Might require to go back to (0:0:0,0:0:0) format after sdf verification
	if(not_scan_mode)(posedge clk => (dout[0] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[0] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[1] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[1] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[2] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[2] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[3] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[3] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[4] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[4] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[5] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[5] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[6] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[6] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[7] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[7] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[8] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[8] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[9] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[9] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[10] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[10] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[11] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[11] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[12] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[12] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[13] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[13] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[14] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[14] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[15] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[15] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[16] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[16] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[17] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[17] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[18] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[18] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[19] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[19] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[20] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[20] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[21] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[21] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[22] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[22] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[23] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[23] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[24] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[24] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[25] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[25] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[26] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[26] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[27] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[27] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[28] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[28] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[29] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[29] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[30] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[30] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[31] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[31] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[32] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[32] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[33] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[33] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[34] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[34] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[35] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[35] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[36] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[36] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[37] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[37] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[38] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[38] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[39] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[39] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[40] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[40] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[41] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[41] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[42] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[42] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[43] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[43] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[44] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[44] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[45] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[45] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[46] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[46] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[47] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[47] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[48] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[48] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[49] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[49] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[50] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[50] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[51] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[51] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[52] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[52] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[53] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[53] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[54] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[54] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[55] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[55] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[56] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[56] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[57] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[57] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[58] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[58] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[59] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[59] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[60] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[60] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[61] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[61] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[62] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[62] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	if(not_scan_mode)(posedge clk => (dout[63] : clk ) ) = S8FMLT_32K_SYS_TAA;
	if(scan_mode)(posedge clk => (dout[63] : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	(posedge clk => (scan_out1 : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	(posedge clk => (scan_out2 : clk ) ) = S8FMLT_32K_SYS_TAA_S;
	
	(iso => (dout[0] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[1] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[2] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[3] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[4] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[5] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[6] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[7] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[8] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[9] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[10] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[11] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[12] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[13] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[14] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[15] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[16] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[17] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[18] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[19] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[20] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[21] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[22] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[23] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[24] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[25] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[26] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[27] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[28] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[29] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[30] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[31] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[32] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[33] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[34] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[35] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[36] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[37] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[38] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[39] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[40] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[41] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[42] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[43] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[44] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[45] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[46] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[47] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[48] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[49] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[50] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[51] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[52] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[53] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[54] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[55] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[56] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[57] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[58] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[59] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[60] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[61] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[62] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (dout[63] : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (scan_out1 : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (scan_out2 : iso ) ) = S8FMLT_32K_SYS_TISO;
	(iso => (xy_out : iso ) ) = S8FMLT_32K_SYS_TISO;


	$setuphold(posedge clk, posedge pa[6], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[6]);
	$setuphold(posedge clk, negedge pa[6], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[6]);
	$setuphold(posedge clk, posedge pa[5], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[5]);
	$setuphold(posedge clk, negedge pa[5], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[5]);
	$setuphold(posedge clk, posedge pa[4], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[4]);
	$setuphold(posedge clk, negedge pa[4], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[4]);
	$setuphold(posedge clk, posedge pa[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[3]);
	$setuphold(posedge clk, negedge pa[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[3]);
	$setuphold(posedge clk, posedge pa[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[2]);
	$setuphold(posedge clk, negedge pa[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[2]);
	$setuphold(posedge clk, posedge pa[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[1]);
	$setuphold(posedge clk, negedge pa[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[1]);
	$setuphold(posedge clk, posedge pa[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[0]);
	$setuphold(posedge clk, negedge pa[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pa ,not_scan_en,power_good, dclk, dpa[0]);
	
	$setuphold(posedge clk, posedge pw, S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pw ,not_scan_en,power_good, dclk, dpw);
	$setuphold(posedge clk, negedge pw, S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pw ,not_scan_en,power_good, dclk, dpw);

	$setuphold(posedge clk,posedge di[7], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[7] );
	$setuphold(posedge clk,negedge di[7], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[7] );
	$setuphold(posedge clk,posedge di[6], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[6] );
	$setuphold(posedge clk,negedge di[6], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[6] );
	$setuphold(posedge clk,posedge di[5], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[5] );
	$setuphold(posedge clk,negedge di[5], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[5] );
	$setuphold(posedge clk,posedge di[4], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[4] );
	$setuphold(posedge clk,negedge di[4], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[4] );
	$setuphold(posedge clk,posedge di[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[3] );
	$setuphold(posedge clk,negedge di[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[3] );
	$setuphold(posedge clk,posedge di[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[2] );
	$setuphold(posedge clk,negedge di[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[2] );
	$setuphold(posedge clk,posedge di[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[1] );
	$setuphold(posedge clk,negedge di[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[1] );
	$setuphold(posedge clk,posedge di[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[0] );
	$setuphold(posedge clk,negedge di[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_di ,not_scan_en,power_good, dclk, ddi[0] );
	
	$setuphold(posedge clk,posedge ra[7], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[7] );
	$setuphold(posedge clk,negedge ra[7], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[7] );
	$setuphold(posedge clk,posedge ra[6], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[6] );
	$setuphold(posedge clk,negedge ra[6], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[6] );
	$setuphold(posedge clk,posedge ra[5], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[5] );
	$setuphold(posedge clk,negedge ra[5], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[5] );
	$setuphold(posedge clk,posedge ra[4], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[4] );
	$setuphold(posedge clk,negedge ra[4], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[4] );
	$setuphold(posedge clk,posedge ra[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[3] );
	$setuphold(posedge clk,negedge ra[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[3] );
	$setuphold(posedge clk,posedge ra[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[2] );
	$setuphold(posedge clk,negedge ra[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[2] );
	$setuphold(posedge clk,posedge ra[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[1] );
	$setuphold(posedge clk,negedge ra[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[1] );
	$setuphold(posedge clk,posedge ra[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[0] );
	$setuphold(posedge clk,negedge ra[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dra[0] );
	$setuphold(posedge clk,posedge seq[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_seq ,not_scan_en,power_good, dclk, dseq[1] );
	$setuphold(posedge clk,negedge seq[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_seq ,not_scan_en,power_good, dclk, dseq[1] );
	$setuphold(posedge clk,posedge seq[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_seq ,not_scan_en,power_good, dclk, dseq[0] );
	$setuphold(posedge clk,negedge seq[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_seq ,not_scan_en,power_good, dclk, dseq[0] );
	$setuphold(posedge clk,posedge ca[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dca[3] );
	$setuphold(posedge clk,negedge ca[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dca[3] );
	$setuphold(posedge clk,posedge ca[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dca[2] );
	$setuphold(posedge clk,negedge ca[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dca[2] );
	$setuphold(posedge clk,posedge ca[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dca[1] );
	$setuphold(posedge clk,negedge ca[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dca[1] );
	$setuphold(posedge clk,posedge ca[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dca[0] );
	$setuphold(posedge clk,negedge ca[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, dca[0] );
	$setuphold(posedge clk,posedge mode[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_mode ,not_scan_en,power_good, dclk, dmode[3] );
	$setuphold(posedge clk,negedge mode[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_mode ,not_scan_en,power_good, dclk, dmode[3] );
	$setuphold(posedge clk,posedge mode[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_mode ,not_scan_en,power_good, dclk, dmode[2] );
	$setuphold(posedge clk,negedge mode[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_mode ,not_scan_en,power_good, dclk, dmode[2] );
	$setuphold(posedge clk,posedge mode[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_mode ,not_scan_en,power_good, dclk, dmode[1] );
	$setuphold(posedge clk,negedge mode[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_mode ,not_scan_en,power_good, dclk, dmode[1] );
	$setuphold(posedge clk,posedge mode[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_mode ,not_scan_en,power_good, dclk, dmode[0] );
	$setuphold(posedge clk,negedge mode[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_mode ,not_scan_en,power_good, dclk, dmode[0] );
	$setuphold(posedge clk,posedge axa, S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, daxa );    
	$setuphold(posedge clk,negedge axa, S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_addr ,not_scan_en,power_good, dclk, daxa );

	$setuphold(posedge clk,posedge tm[4], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_tm ,not_scan_en,power_good, dclk, dtm[4] );
	$setuphold(posedge clk,negedge tm[4], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_tm ,not_scan_en,power_good, dclk, dtm[4] );
	$setuphold(posedge clk,posedge tm[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_tm ,not_scan_en,power_good, dclk, dtm[3] );
	$setuphold(posedge clk,negedge tm[3], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_tm ,not_scan_en,power_good, dclk, dtm[3] );
	$setuphold(posedge clk,posedge tm[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_tm ,not_scan_en,power_good, dclk, dtm[2] );
	$setuphold(posedge clk,negedge tm[2], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_tm ,not_scan_en,power_good, dclk, dtm[2] );
	$setuphold(posedge clk,posedge tm[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_tm ,not_scan_en,power_good, dclk, dtm[1] );
	$setuphold(posedge clk,negedge tm[1], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_tm ,not_scan_en,power_good, dclk, dtm[1] );
	$setuphold(posedge clk,posedge tm[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_tm ,not_scan_en,power_good, dclk, dtm[0] );
	$setuphold(posedge clk,negedge tm[0], S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_tm ,not_scan_en,power_good, dclk, dtm[0] );

	$setuphold(posedge clk,posedge pnb, S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pnb ,not_scan_en,power_good, dclk, dpnb );
	$setuphold(posedge clk,negedge pnb, S8FMLT_32K_SYS_TAS, S8FMLT_32K_SYS_TAH, notifier_pnb ,not_scan_en,power_good, dclk, dpnb );

	$setuphold(posedge pe,posedge ndac[3], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dndac[3] );
	$setuphold(posedge pe,negedge ndac[3], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dndac[3] );
	$setuphold(posedge pe,posedge ndac[2], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dndac[2] );
	$setuphold(posedge pe,negedge ndac[2], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dndac[2] );
	$setuphold(posedge pe,posedge ndac[1], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dndac[1] );
	$setuphold(posedge pe,negedge ndac[1], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dndac[1] );
	$setuphold(posedge pe,posedge ndac[0], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dndac[0] );
	$setuphold(posedge pe,negedge ndac[0], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dndac[0] );

	$setuphold(posedge pe,posedge pdac[3], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dpdac[3] );
	$setuphold(posedge pe,negedge pdac[3], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dpdac[3] );
	$setuphold(posedge pe,posedge pdac[2], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dpdac[2] );
	$setuphold(posedge pe,negedge pdac[2], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dpdac[2] );
	$setuphold(posedge pe,posedge pdac[1], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dpdac[1] );
	$setuphold(posedge pe,negedge pdac[1], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dpdac[1] );
	$setuphold(posedge pe,posedge pdac[0], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dpdac[0] );
	$setuphold(posedge pe,negedge pdac[0], S8FMLT_32K_SYS_PUMPS, S8FMLT_32K_SYS_PUMPH, notifier_pump ,not_scan_mode,power_good, dpe, dpdac[0] );

	endspecify
`endif

`ifdef ATPG_SIM
`else
always @(posedge dclk)
  begin
  #(S8FMLT_32K_TAW + 2);
  reset_notifier_errors = 1'b1;
  #1;
  reset_notifier_errors = 1'b0;
  end


always @(notifier_rstw)
  begin //generate an internal reset pulse that will reset to x not 0
  reset_x = 1'b1;
  #1;
  reset_x = 1'b0;
  end

always @(notifier_rst or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    rst_timing_error = 1'b0;
    end
  else
    begin
    rst_timing_error = 1'b1;
    end
  end
always @(notifier_pd2 or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    pd2_timing_error = 1'b0;
    end
  else
    begin
    pd2_timing_error = 1'b1;
    end
  end

always @(notifier_tbb or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    tbb_timing_error = 1'b0;
    end
  else
    begin
    tbb_timing_error = 1'b1;
    end
  end

always @(notifier_iso or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    iso_timing_error = 1'b0;
    end
  else
    begin
    iso_timing_error = 1'b1;
    end
  end

always @(notifier_addr or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    addr_timing_error = 1'b0;
    end
  else
    begin
    addr_timing_error = 1'b1;
    end
  end

always @(notifier_seq or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    seq_timing_error = 1'b0;
    end
  else
    begin
    seq_timing_error = 1'b1;
    end
  end

always @(notifier_mode or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    mode_timing_error = 1'b0;
    end
  else
    begin
    mode_timing_error = 1'b1;
    end
  end

always @(notifier_clk or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    clk_timing_error = 1'b0;
    end
  else
    begin
    clk_timing_error = 1'b1;
    end
  end

always @(notifier_di or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    di_timing_error = 1'b0;
    end
  else
    begin
    di_timing_error = 1'b1;
    end
  end

always @(notifier_pw or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    pw_timing_error = 1'b0;
    end
  else
    begin
    pw_timing_error = 1'b1;
    end
  end

always @(notifier_pnb or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    pnb_timing_error = 1'b0;
    end
  else
    begin
    pnb_timing_error = 1'b1;
    end
  end

always @(notifier_pa or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    pa_timing_error = 1'b0;
    end
  else
    begin
    pa_timing_error = 1'b1;
    end
  end

always @(notifier_tm or posedge reset_notifier_errors or posedge dreset)
  begin
  if ((reset_notifier_errors===1'b1)||(dreset === 1'b1))
    begin
    tm_timing_error = 1'b0;
    end
  else
    begin
    tm_timing_error = 1'b1;
    end
  end

always @(notifier_pe or posedge dreset)
  begin
  if (dreset === 1'b1)
    begin
    pe_timing_error = 1'b0;
    end
  else
    begin
    pe_timing_error = 1'b1;
    end
  end

always @(notifier_pump or posedge reset_pump_timing_error or posedge dreset)
  begin
  if ((reset_pump_timing_error)||(dreset === 1'b1))
    begin
    pump_timing_error = 1'b0;
    end
  else
    begin
    pump_timing_error = 1'b1;
    end
  end
`endif // ATPG_SIM

`ifdef ATPG_SIM
always @(notifier_addr)
  begin
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_10_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_9_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_8_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_7_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_6_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_5_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_4_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_3_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_2_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_1_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_0_.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat5.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat4.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat3.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat2.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat1.nfr <= notifier_addr;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat0.nfr <= notifier_addr;
  end
always @(notifier_seq)
  begin
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_seq_reg_1_.nfr <= notifier_seq;
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_seq_reg_0_.nfr <= notifier_seq;
  end
always @(notifier_mode)
  begin
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_mode_reg_3_.nfr <= notifier_mode;
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_mode_reg_2_.nfr <= notifier_mode;
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_mode_reg_1_.nfr <= notifier_mode;
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_mode_reg_0_.nfr <= notifier_mode;
  end
always @(notifier_scan1)
  begin
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_mode_reg_0_.nfr <= notifier_scan1;
  end
always @(notifier_scan2)
  begin
  fm32k_top.fm32k_nsw.spine16x64.sa64.sa8_fm_0_.saout_fm_0_.dout_scan.scan_ff.nfr <= notifier_scan2;
  end
always @(notifier_di)
  begin
  fm32k_top.fm32k_nsw.dinpg.dilat_7_.nfr <= notifier_di;
  fm32k_top.fm32k_nsw.dinpg.dilat_6_.nfr <= notifier_di;
  fm32k_top.fm32k_nsw.dinpg.dilat_5_.nfr <= notifier_di;
  fm32k_top.fm32k_nsw.dinpg.dilat_4_.nfr <= notifier_di;
  fm32k_top.fm32k_nsw.dinpg.dilat_3_.nfr <= notifier_di;
  fm32k_top.fm32k_nsw.dinpg.dilat_2_.nfr <= notifier_di;
  fm32k_top.fm32k_nsw.dinpg.dilat_1_.nfr <= notifier_di;
  fm32k_top.fm32k_nsw.dinpg.dilat_0_.nfr <= notifier_di;
  end
always @(notifier_pa)
  begin
  fm32k_top.fm32k_nsw.dinpg.palat_6_.nfr <= notifier_pa;
  fm32k_top.fm32k_nsw.dinpg.palat_5_.nfr <= notifier_pa;
  fm32k_top.fm32k_nsw.dinpg.palat_4_.nfr <= notifier_pa;
  fm32k_top.fm32k_nsw.dinpg.palat_3_.nfr <= notifier_pa;
  fm32k_top.fm32k_nsw.dinpg.palat_2_.nfr <= notifier_pa;
  fm32k_top.fm32k_nsw.dinpg.palat_1_.nfr <= notifier_pa;
  fm32k_top.fm32k_nsw.dinpg.palat_0_.nfr <= notifier_pa;
  end
always @(notifier_pw)
  begin
  fm32k_top.fm32k_nsw.dinpg.pwlat.nfr <= notifier_pw;
  end
always @(notifier_pnb)
  begin
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.pnblat.nfr <= notifier_pnb;
  end
always @(notifier_tm)
  begin
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.tmlat_4_.nfr <= notifier_tm;
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.tmlat_3_.nfr <= notifier_tm;
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.tmlat_2_.nfr <= notifier_tm;
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.tmlat_1_.nfr <= notifier_tm;
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.tmlat_0_.nfr <= notifier_tm;
  end
//clk
always @(notifier_clk)
  begin
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_10_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_9_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_8_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_7_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_6_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_5_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_4_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_3_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_2_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_1_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.rpre.raddlat_0_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat5.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat4.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat3.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat2.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat1.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.predec.cpren.cadlat0.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_seq_reg_1_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_seq_reg_0_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_mode_reg_3_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_mode_reg_2_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_mode_reg_1_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.mpcont.mpcon_top.mpcon.fi_mode_reg_0_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.dilat_7_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.dilat_6_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.dilat_5_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.dilat_4_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.dilat_3_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.dilat_2_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.dilat_1_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.dilat_0_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.palat_6_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.palat_5_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.palat_4_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.palat_3_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.palat_2_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.palat_1_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.palat_0_.nfr <= notifier_clk;
  fm32k_top.fm32k_nsw.dinpg.pwlat.nfr <= notifier_clk;
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.pnblat.nfr <= notifier_clk;
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.tmlat_4_.nfr <= notifier_clk;
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.tmlat_3_.nfr <= notifier_clk;
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.tmlat_2_.nfr <= notifier_clk;
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.tmlat_1_.nfr <= notifier_clk;
  analog_top.tmcont.tmcont_nsw.tmcont_logic.tmcont_in.tmlat_0_.nfr <= notifier_clk;
  end

`endif //ATPG_SIM notifier pass to scan chain

endmodule
