From 983919d9dffc84e33e1575c2c3d3331b8ed3883c Mon Sep 17 00:00:00 2001 From: AngeloJacobo Date: Sun, 16 Jul 2023 08:52:10 +0800 Subject: [PATCH] removed unneeded .* files --- .gitignore.swp | Bin 12288 -> 0 bytes .vivado_sim.sh.swp | Bin 12288 -> 0 bytes README.txt | 83 - out | 5576 ------------------------------------ rtl/.ddr3_controller.v.swo | Bin 217088 -> 0 bytes rtl/.ddr3_controller.v.swp | Bin 217088 -> 0 bytes rtl/.ddr3_phy.v.swp | Bin 61440 -> 0 bytes rtl/.ddr3_top.v.swp | Bin 24576 -> 0 bytes rtl/ddr3_controller.v~ | 3419 ---------------------- 9 files changed, 9078 deletions(-) delete mode 100644 .gitignore.swp delete mode 100644 .vivado_sim.sh.swp delete mode 100644 README.txt delete mode 100755 out delete mode 100644 rtl/.ddr3_controller.v.swo delete mode 100644 rtl/.ddr3_controller.v.swp delete mode 100644 rtl/.ddr3_phy.v.swp delete mode 100644 rtl/.ddr3_top.v.swp delete mode 100644 rtl/ddr3_controller.v~ diff --git a/.gitignore.swp b/.gitignore.swp deleted file mode 100644 index 586d71e2ed7e0f1202469ec8cdac23101f5d8c11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI&y-LJD5Ww*{twqt&=G0EO>z3qte06p{^qq;+u_bcsKdYxxN3va!C{Nl>-K zy0xZQ-uuusx&dj1@7!@ zpMFt-s8Ap9kM^KP4f6 z00IagfB*srAb1k>5aNaH-N}HrDPrrV%mj(anK*<0A diff --git a/.vivado_sim.sh.swp b/.vivado_sim.sh.swp deleted file mode 100644 index 694615c1a2987452f19fe5dd4c218d59f2c809f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI&u}*_P9LMp0-Hk?H0Cg@DSvqx*K?fI;c9hT_r9|KeoYgq!1f*TC6^2L{~gKyvk`7Sn%&%5W80N_9E(`rAL{+ymg^UhFpr~DH-*1Pn;WXAdN8`! zoPBMBj^75I>M1dcRj@4L(DD5{FSydVDRr7grL#`fq0&K>WOlXM{7NbaAh3rWnXu-OEAOPrnYj=YHLhc4-3v z1Q0*~0R#|0009ILKmdWg6bO~b=aI-)J)8gk{rCS*zqgkvG>rfP2q1s}0tg_000Iag rfWUtinAy&AeP!NJs`LVtWLc0Ui&E#^J$h?0vFdVQqRO~-s$-E~nkYX! diff --git a/README.txt b/README.txt deleted file mode 100644 index b8b8563..0000000 --- a/README.txt +++ /dev/null @@ -1,83 +0,0 @@ -################################################################################ -# Vivado (TM) v2021.2 (64-bit) -# -# README.txt: Please read the sections below to understand the steps required -# to simulate the design for a simulator, the directory structure -# and the generated exported files. -# -################################################################################ - -1. Simulate Design - -To simulate design, cd to the simulator directory and execute the script. - -For example:- - -% cd questa -% ./top.sh - -The export simulation flow requires the Xilinx pre-compiled simulation library -components for the target simulator. These components are referred using the -'-lib_map_path' switch. If this switch is specified, then the export simulation -will automatically set this library path in the generated script and update, -copy the simulator setup file(s) in the exported directory. - -If '-lib_map_path' is not specified, then the pre-compiled simulation library -information will not be included in the exported scripts and that may cause -simulation errors when running this script. Alternatively, you can provide the -library information using this switch while executing the generated script. - -For example:- - -% ./top.sh -lib_map_path /design/questa/clibs - -Please refer to the generated script header 'Prerequisite' section for more details. - -2. Directory Structure - -By default, if the -directory switch is not specified, export_simulation will -create the following directory structure:- - -/export_sim/ - -For example, if the current working directory is /tmp/test, export_simulation -will create the following directory path:- - -/tmp/test/export_sim/questa - -If -directory switch is specified, export_simulation will create a simulator -sub-directory under the specified directory path. - -For example, 'export_simulation -directory /tmp/test/my_test_area/func_sim' -command will create the following directory:- - -/tmp/test/my_test_area/func_sim/questa - -By default, if -simulator is not specified, export_simulation will create a -simulator sub-directory for each simulator and export the files for each simulator -in this sub-directory respectively. - -IMPORTANT: Please note that the simulation library path must be specified manually -in the generated script for the respective simulator. Please refer to the generated -script header 'Prerequisite' section for more details. - -3. Exported script and files - -Export simulation will create the driver shell script, setup files and copy the -design sources in the output directory path. - -By default, when the -script_name switch is not specified, export_simulation will -create the following script name:- - -.sh (Unix) -When exporting the files for an IP using the -of_objects switch, export_simulation -will create the following script name:- - -.sh (Unix) -Export simulation will create the setup files for the target simulator specified -with the -simulator switch. - -For example, if the target simulator is "xcelium", export_simulation will create the -'cds.lib', 'hdl.var' and design library diectories and mappings in the 'cds.lib' -file. - diff --git a/out b/out deleted file mode 100755 index c61ba43..0000000 --- a/out +++ /dev/null @@ -1,5576 +0,0 @@ -#! /home/angelo/oss-cad-suite/bin/vvp -:ivl_version "12.0 (devel)" "(s20150603-1319-g027c4828e)"; -:ivl_delay_selection "TYPICAL"; -:vpi_time_precision + 0; -:vpi_module "/home/angelo/oss-cad-suite/lib/ivl/system.vpi"; -:vpi_module "/home/angelo/oss-cad-suite/lib/ivl/vhdl_sys.vpi"; -:vpi_module "/home/angelo/oss-cad-suite/lib/ivl/vhdl_textio.vpi"; -:vpi_module "/home/angelo/oss-cad-suite/lib/ivl/v2005_math.vpi"; -:vpi_module "/home/angelo/oss-cad-suite/lib/ivl/va_math.vpi"; -S_0x555555cfe490 .scope module, "ddr3_controller" "ddr3_controller" 2 37; - .timescale 0 0; - .port_info 0 /INPUT 1 "i_controller_clk"; - .port_info 1 /INPUT 1 "i_rst_n"; - .port_info 2 /INPUT 1 "i_wb_cyc"; - .port_info 3 /INPUT 1 "i_wb_stb"; - .port_info 4 /INPUT 1 "i_wb_we"; - .port_info 5 /INPUT 26 "i_wb_addr"; - .port_info 6 /INPUT 512 "i_wb_data"; - .port_info 7 /INPUT 64 "i_wb_sel"; - .port_info 8 /INPUT 16 "i_aux"; - .port_info 9 /OUTPUT 1 "o_wb_stall"; - .port_info 10 /OUTPUT 1 "o_wb_ack"; - .port_info 11 /OUTPUT 512 "o_wb_data"; - .port_info 12 /OUTPUT 16 "o_aux"; - .port_info 13 /INPUT 1 "i_wb2_cyc"; - .port_info 14 /INPUT 1 "i_wb2_stb"; - .port_info 15 /INPUT 1 "i_wb2_we"; - .port_info 16 /INPUT 32 "i_wb2_addr"; - .port_info 17 /INPUT 4 "i_wb2_sel"; - .port_info 18 /INPUT 32 "i_wb2_data"; - .port_info 19 /OUTPUT 1 "o_wb2_stall"; - .port_info 20 /OUTPUT 1 "o_wb2_ack"; - .port_info 21 /OUTPUT 32 "o_wb2_data"; - .port_info 22 /INPUT 512 "i_phy_iserdes_data"; - .port_info 23 /INPUT 64 "i_phy_iserdes_dqs"; - .port_info 24 /INPUT 64 "i_phy_iserdes_bitslip_reference"; - .port_info 25 /INPUT 1 "i_phy_idelayctrl_rdy"; - .port_info 26 /OUTPUT 104 "o_phy_cmd"; - .port_info 27 /OUTPUT 1 "o_phy_dqs_tri_control"; - .port_info 28 /OUTPUT 1 "o_phy_dq_tri_control"; - .port_info 29 /OUTPUT 1 "o_phy_toggle_dqs"; - .port_info 30 /OUTPUT 512 "o_phy_data"; - .port_info 31 /OUTPUT 64 "o_phy_dm"; - .port_info 32 /OUTPUT 5 "o_phy_odelay_data_cntvaluein"; - .port_info 33 /OUTPUT 5 "o_phy_odelay_dqs_cntvaluein"; - .port_info 34 /OUTPUT 5 "o_phy_idelay_data_cntvaluein"; - .port_info 35 /OUTPUT 5 "o_phy_idelay_dqs_cntvaluein"; - .port_info 36 /OUTPUT 8 "o_phy_odelay_data_ld"; - .port_info 37 /OUTPUT 8 "o_phy_odelay_dqs_ld"; - .port_info 38 /OUTPUT 8 "o_phy_idelay_data_ld"; - .port_info 39 /OUTPUT 8 "o_phy_idelay_dqs_ld"; - .port_info 40 /OUTPUT 8 "o_phy_bitslip"; -P_0x555555d8d2e0 .param/l "A10_CONTROL" 1 2 122, +C4<00000000000000000000000000011001>; -P_0x555555d8d320 .param/l "ACTIVATE_SLOT" 1 2 142, C4<00>; -P_0x555555d8d360 .param/l "ACTIVATE_TO_PRECHARGE_DELAY" 1 2 215, C4<0011>; -P_0x555555d8d3a0 .param/l "ACTIVATE_TO_READ_DELAY" 1 2 217, C4<0000>; -P_0x555555d8d3e0 .param/l "ACTIVATE_TO_WRITE_DELAY" 1 2 216, C4<0000>; -P_0x555555d8d420 .param/l "AL" 1 2 296, C4<00>; -P_0x555555d8d460 .param/l "ANALYZE_DATA" 1 2 263, +C4<00000000000000000000000000001101>; -P_0x555555d8d4a0 .param/l "ANALYZE_DQS" 1 2 254, +C4<00000000000000000000000000000100>; -P_0x555555d8d4e0 .param/l "ASR" 1 2 275, C4<1>; -P_0x555555d8d520 .param/l "AUX_WIDTH" 0 2 45, C4<00000000000000000000000000010000>; -P_0x555555d8d560 .param/l "BA_BITS" 0 2 42, C4<00000000000000000000000000000011>; -P_0x555555d8d5a0 .param/l "BITSLIP_DQS_TRAIN_1" 1 2 251, +C4<00000000000000000000000000000001>; -P_0x555555d8d5e0 .param/l "BITSLIP_DQS_TRAIN_2" 1 2 256, +C4<00000000000000000000000000000110>; -P_0x555555d8d620 .param/l "BL" 1 2 306, C4<00>; -P_0x555555d8d660 .param/l "CALIBRATE_DQS" 1 2 255, +C4<00000000000000000000000000000101>; -P_0x555555d8d6a0 .param/l "CALIBRATION_DELAY" 1 2 202, +C4<00000000000000000000000000000010>; -P_0x555555d8d6e0 .param/l "CL" 1 2 307, C4<0100>; -P_0x555555d8d720 .param/l "CLOCK_EN" 1 2 123, +C4<00000000000000000000000000011000>; -P_0x555555d8d760 .param/l "CL_nCK" 1 2 198, +C4<00000000000000000000000000000110>; -P_0x555555d8d7a0 .param/l "CMD_ACT" 1 2 112, C4<0011>; -P_0x555555d8d7e0 .param/l "CMD_ADDRESS_START" 1 2 138, C4<000000000000000000000000000001111>; -P_0x555555d8d820 .param/l "CMD_BANK_START" 1 2 137, C4<0000000000000000000000000000010010>; -P_0x555555d8d860 .param/l "CMD_CAS_N" 1 2 132, C4<000000000000000000000000000000010111>; -P_0x555555d8d8a0 .param/l "CMD_CKE" 1 2 135, C4<000000000000000000000000000000010100>; -P_0x555555d8d8e0 .param/l "CMD_CS_N" 1 2 130, C4<000000000000000000000000000000011001>; -P_0x555555d8d920 .param/l "CMD_DES" 1 2 116, C4<1000>; -P_0x555555d8d960 .param/l "CMD_MRS" 1 2 109, C4<0000>; -P_0x555555d8d9a0 .param/l "CMD_NOP" 1 2 115, C4<0111>; -P_0x555555d8d9e0 .param/l "CMD_ODT" 1 2 134, C4<000000000000000000000000000000010101>; -P_0x555555d8da20 .param/l "CMD_PRE" 1 2 111, C4<0010>; -P_0x555555d8da60 .param/l "CMD_RAS_N" 1 2 131, C4<000000000000000000000000000000011000>; -P_0x555555d8daa0 .param/l "CMD_RD" 1 2 114, C4<0101>; -P_0x555555d8dae0 .param/l "CMD_REF" 1 2 110, C4<0001>; -P_0x555555d8db20 .param/l "CMD_RESET_N" 1 2 136, C4<000000000000000000000000000000010011>; -P_0x555555d8db60 .param/l "CMD_WE_N" 1 2 133, C4<000000000000000000000000000000010110>; -P_0x555555d8dba0 .param/l "CMD_WR" 1 2 113, C4<0100>; -P_0x555555d8dbe0 .param/l "CMD_ZQC" 1 2 117, C4<0110>; -P_0x555555d8dc20 .param/l "COLLECT_DQS" 1 2 253, +C4<00000000000000000000000000000011>; -P_0x555555d8dc60 .param/l "COL_BITS" 0 2 41, C4<00000000000000000000000000001010>; -P_0x555555d8dca0 .param/real "CONTROLLER_CLK_PERIOD" 0 2 38, Cr; value=10.0000 -P_0x555555d8dce0 .param/l "CWL" 1 2 274, C4<000>; -P_0x555555d8dd20 .param/l "CWL_nCK" 1 2 199, +C4<00000000000000000000000000000101>; -P_0x555555d8dd60 .param/l "DATA_INITIAL_IDELAY_TAP" 1 2 158, +C4<00000000000000000000000000000000>; -P_0x555555d8dda0 .param/l "DATA_INITIAL_ODELAY_TAP" 1 2 147, +C4<00000000000000000000000000000000>; -P_0x555555d8dde0 .param/real "DDR3_CLK_PERIOD" 0 2 39, Cr; value=2.50000 -P_0x555555d8de20 .param/l "DDR3_CMD_END" 1 2 126, +C4<00000000000000000000000000010011>; -P_0x555555d8de60 .param/l "DDR3_CMD_START" 1 2 125, +C4<00000000000000000000000000010110>; -P_0x555555d8dea0 .param/l "DELAY_BEFORE_WRITE_LEVEL_FEEDBACK" 1 2 244, C4<00000000000000000000000000000000001101>; -P_0x555555d8dee0 .param/l "DELAY_COUNTER_WIDTH" 1 2 201, +C4<00000000000000000000000000010000>; -P_0x555555d8df20 .param/l "DELAY_MAX_VALUE" 1 2 200, C4<0001100001101010000>; -P_0x555555d8df60 .param/l "DELAY_SLOT_WIDTH" 1 2 164, +C4<00000000000000000000000000010011>; -P_0x555555d8dfa0 .param/l "DIC" 1 2 292, C4<00>; -P_0x555555d8dfe0 .param/l "DLL_EN" 1 2 291, C4<0>; -P_0x555555d8e020 .param/l "DLL_RST" 1 2 309, C4<1>; -P_0x555555d8e060 .param/l "DONE_CALIBRATE" 1 2 264, +C4<00000000000000000000000000001110>; -P_0x555555d8e0a0 .param/l "DQS_INITIAL_IDELAY_TAP" 1 2 159, +C4<00000000000000000000000000001000>; -P_0x555555d8e0e0 .param/l "DQS_INITIAL_ODELAY_TAP" 1 2 155, +C4<00000000000000000000000000001000>; -P_0x555555d8e120 .param/l "DQ_BITS" 0 2 43, C4<00000000000000000000000000001000>; -P_0x555555d8e160 .param/l "IDLE" 1 2 250, +C4<00000000000000000000000000000000>; -P_0x555555d8e1a0 .param/l "INITIAL_CKE_LOW" 1 2 166, +C4<00000000000001111010000100100000>; -P_0x555555d8e1e0 .param/l "INITIAL_RESET_INSTRUCTION" 1 2 317, C4<0100001110000000000000000101>; -P_0x555555d8e220 .param/l "ISSUE_READ" 1 2 261, +C4<00000000000000000000000000001011>; -P_0x555555d8e260 .param/l "ISSUE_WRITE_1" 1 2 259, +C4<00000000000000000000000000001001>; -P_0x555555d8e2a0 .param/l "ISSUE_WRITE_2" 1 2 260, +C4<00000000000000000000000000001010>; -P_0x555555d8e2e0 .param/l "LANES" 0 2 44, C4<00000000000000000000000000001000>; -P_0x555555d8e320 .param/l "MARGIN_BEFORE_ANTICIPATE" 1 2 231, C4<000101>; -P_0x555555d8e360 .param/l "MAX_ADDED_READ_ACK_DELAY" 1 2 242, +C4<00000000000000000000000000010000>; -P_0x555555d8e3a0 .param/l "MPR_DIS" 1 2 284, C4<0>; -P_0x555555d8e3e0 .param/l "MPR_EN" 1 2 283, C4<1>; -P_0x555555d8e420 .param/l "MPR_LOC" 1 2 282, C4<00>; -P_0x555555d8e460 .param/l "MPR_READ" 1 2 252, +C4<00000000000000000000000000000010>; -P_0x555555d8e4a0 .param/l "MR0" 1 2 315, C4<0000000011100100000>; -P_0x555555d8e4e0 .param/l "MR0_SEL" 1 2 314, C4<000>; -P_0x555555d8e520 .param/l "MR1_SEL" 1 2 301, C4<001>; -P_0x555555d8e560 .param/l "MR1_WL_DIS" 1 2 303, C4<0010000100001000100>; -P_0x555555d8e5a0 .param/l "MR1_WL_EN" 1 2 302, C4<0010000100011000100>; -P_0x555555d8e5e0 .param/l "MR2" 1 2 279, C4<0100000000001000000>; -P_0x555555d8e620 .param/l "MR2_SEL" 1 2 278, C4<010>; -P_0x555555d8e660 .param/l "MR3_MPR_DIS" 1 2 287, C4<0110000000000000000>; -P_0x555555d8e6a0 .param/l "MR3_MPR_EN" 1 2 286, C4<0110000000000000100>; -P_0x555555d8e6e0 .param/l "MR3_RD_ADDR" 1 2 288, C4<0000000000000000000>; -P_0x555555d8e720 .param/l "MR3_SEL" 1 2 285, C4<011>; -P_0x555555d8e760 .param/l "MRS_BANK_START" 1 2 127, +C4<00000000000000000000000000010010>; -P_0x555555d8e7a0 .param/l "OPT_BUS_ABORT" 0 2 49, C4<1>; -P_0x555555d8e7e0 .param/l "OPT_LOWPOWER" 0 2 48, C4<1>; -P_0x555555d8e820 .param/l "PASR" 1 2 273, C4<000>; -P_0x555555d8e860 .param/l "POWER_ON_RESET_HIGH" 1 2 165, +C4<00000000000000110000110101000000>; -P_0x555555d8e8a0 .param/l "PPD" 1 2 313, C4<0>; -P_0x555555d8e8e0 .param/l "PRECHARGE_SLOT" 1 2 143, C4<01>; -P_0x555555d8e920 .param/l "PRECHARGE_TO_ACTIVATE_DELAY" 1 2 214, C4<0001>; -P_0x555555d8e960 .param/l "PRE_REFRESH_DELAY" 1 2 203, C4<000000000000000000000000000000101>; -P_0x555555d8e9a0 .param/l "QOFF" 1 2 300, C4<0>; -P_0x555555d8e9e0 .param/l "RBT" 1 2 308, C4<0>; -P_0x555555d8ea20 .param/l "READ_ACK_PIPE_WIDTH" 1 2 241, +C4<000000000000000000000000000000000110>; -P_0x555555d8ea60 .param/l "READ_DATA" 1 2 262, +C4<00000000000000000000000000001100>; -P_0x555555d8eaa0 .param/l "READ_DELAY" 1 2 240, +C4<00000000000000000000000000000001>; -P_0x555555d8eae0 .param/l "READ_SLOT" 1 2 140, C4<10>; -P_0x555555d8eb20 .param/l "READ_TO_PRECHARGE_DELAY" 1 2 220, C4<0001>; -P_0x555555d8eb60 .param/l "READ_TO_READ_DELAY" 1 2 219, C4<0000>; -P_0x555555d8eba0 .param/l "READ_TO_WRITE_DELAY" 1 2 218, C4<0001>; -P_0x555555d8ebe0 .param/l "REF_IDLE" 1 2 120, +C4<00000000000000000000000000011011>; -P_0x555555d8ec20 .param/l "REPEAT_DQS_ANALYZE" 1 2 266, +C4<00000000000000000000000000000001>; -P_0x555555d8ec60 .param/l "RESET_N" 1 2 124, +C4<00000000000000000000000000010111>; -P_0x555555d8eca0 .param/l "ROW_BITS" 0 2 40, C4<00000000000000000000000000010000>; -P_0x555555d8ece0 .param/l "RST_DONE" 1 2 119, +C4<00000000000000000000000000011011>; -P_0x555555d8ed20 .param/l "RTT_NOM" 1 2 293, C4<011>; -P_0x555555d8ed60 .param/l "RTT_WR" 1 2 277, C4<00>; -P_0x555555d8eda0 .param/l "SRT" 1 2 276, C4<0>; -P_0x555555d8ede0 .param/l "STAGE2_DATA_DEPTH" 1 2 232, C4<000000000000000000000000000000000010>; -P_0x555555d8ee20 .param/l "START_WRITE_LEVEL" 1 2 257, +C4<00000000000000000000000000000111>; -P_0x555555d8ee60 .param/l "STORED_DQS_SIZE" 1 2 265, +C4<00000000000000000000000000000101>; -P_0x555555d8eea0 .param/l "TDQS" 1 2 297, C4<1>; -P_0x555555d8eee0 .param/l "USE_TIMER" 1 2 121, +C4<00000000000000000000000000011010>; -P_0x555555d8ef20 .param/l "WAIT_FOR_FEEDBACK" 1 2 258, +C4<00000000000000000000000000001000>; -P_0x555555d8ef60 .param/l "WB2_ADDR_BITS" 0 2 46, C4<00000000000000000000000000100000>; -P_0x555555d8efa0 .param/l "WB2_DATA_BITS" 0 2 47, C4<00000000000000000000000000100000>; -P_0x555555d8efe0 .param/l "WL_DIS" 1 2 295, C4<0>; -P_0x555555d8f020 .param/l "WL_EN" 1 2 294, C4<1>; -P_0x555555d8f060 .param/l "WR" 1 2 311, C4<011>; -P_0x555555d8f0a0 .param/l "WRITE_SLOT" 1 2 141, C4<11>; -P_0x555555d8f0e0 .param/l "WRITE_TO_PRECHARGE_DELAY" 1 2 223, C4<0100>; -P_0x555555d8f120 .param/l "WRITE_TO_READ_DELAY" 1 2 222, C4<0011>; -P_0x555555d8f160 .param/l "WRITE_TO_WRITE_DELAY" 1 2 221, C4<0000>; -P_0x555555d8f1a0 .param/l "cmd_len" 0 2 58, C4<00000000000000000000000000000011010>; -P_0x555555d8f1e0 .param/l "serdes_ratio" 0 2 52, +C4<00000000000000000000000000000100>; -P_0x555555d8f220 .param/l "tCCD" 1 2 193, +C4<00000000000000000000000000000100>; -P_0x555555d8f260 .param/l "tMOD" 1 2 195, C4<0000000000000000011>; -P_0x555555d8f2a0 .param/l "tMRD" 1 2 185, +C4<00000000000000000000000000000100>; -P_0x555555d8f2e0 .param/l "tRAS" 1 2 170, +C4<00000000000000000000000000100011>; -P_0x555555d8f320 .param/real "tRCD" 1 2 168, Cr; value=13.7500 -P_0x555555d8f360 .param/l "tREFI" 1 2 182, +C4<00000000000000000001111001111000>; -P_0x555555d8f3a0 .param/real "tRFC" 1 2 180, Cr; value=350.000 -P_0x555555d8f3e0 .param/real "tRP" 1 2 169, Cr; value=13.7500 -P_0x555555d8f420 .param/l "tRTP" 1 2 191, +C4<00000000000000000000000000001010>; -P_0x555555d8f460 .param/l "tWLMRD" 1 2 188, C4<0000000000000001010>; -P_0x555555d8f4a0 .param/real "tWLO" 1 2 189, Cr; value=7.50000 -P_0x555555d8f4e0 .param/l "tWLOE" 1 2 190, +C4<00000000000000000000000000000010>; -P_0x555555d8f520 .param/real "tWR" 1 2 186, Cr; value=15.0000 -P_0x555555d8f560 .param/l "tWTR" 1 2 187, +C4<00000000000000000000000000001010>; -P_0x555555d8f5a0 .param/l "tXPR" 1 2 184, +C4<00000000000000000000000101101000>; -P_0x555555d8f5e0 .param/l "tZQinit" 1 2 196, C4<0000000000010000000>; -P_0x555555d8f620 .param/l "wb2_sel_bits" 0 2 56, C4<00000000000000000000000000000100>; -P_0x555555d8f660 .param/l "wb_addr_bits" 0 2 53, C4<00000000000000000000000000000011010>; -P_0x555555d8f6a0 .param/l "wb_data_bits" 0 2 54, C4<00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000>; -P_0x555555d8f6e0 .param/l "wb_sel_bits" 0 2 55, C4<00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000>; -v0x555555db2260_1 .array/port v0x555555db2260, 1; -L_0x555555d13d90 .functor BUFZ 512, v0x555555db2260_1, C4<00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>, C4<00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>, C4<00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>; -v0x555555db2460_1 .array/port v0x555555db2460, 1; -L_0x555555d211c0 .functor BUFZ 64, v0x555555db2460_1, C4<0000000000000000000000000000000000000000000000000000000000000000>, C4<0000000000000000000000000000000000000000000000000000000000000000>, C4<0000000000000000000000000000000000000000000000000000000000000000>; -L_0x555555d539f0 .functor AND 1, L_0x555555db62a0, L_0x555555dc6540, C4<1>, C4<1>; -L_0x555555d61dc0 .functor BUFZ 512, L_0x555555dc6880, C4<00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>, C4<00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>, C4<00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>; -L_0x555555dc6f20 .functor BUFZ 5, L_0x555555dc72e0, C4<00000>, C4<00000>, C4<00000>; -L_0x555555d6eaf0 .functor BUFZ 5, L_0x555555dc7600, C4<00000>, C4<00000>, C4<00000>; -L_0x555555dc7c20 .functor BUFZ 5, L_0x555555dc7990, C4<00000>, C4<00000>, C4<00000>; -L_0x555555dc7e40 .functor BUFZ 5, L_0x555555dc7810, C4<00000>, C4<00000>, C4<00000>; -v0x555555da9120_0 .net *"_ivl_15", 0 0, L_0x555555db62a0; 1 drivers -v0x555555da9220_0 .net *"_ivl_16", 31 0, L_0x555555db63a0; 1 drivers -L_0x7eff80b5c018 .functor BUFT 1, C4<000000000000000000000000000>, C4<0>, C4<0>, C4<0>; -v0x555555da9300_0 .net *"_ivl_19", 26 0, L_0x7eff80b5c018; 1 drivers -L_0x7eff80b5c060 .functor BUFT 1, C4<00000000000000000000000000001110>, C4<0>, C4<0>, C4<0>; -v0x555555da93c0_0 .net/2u *"_ivl_20", 31 0, L_0x7eff80b5c060; 1 drivers -v0x555555da94a0_0 .net *"_ivl_22", 0 0, L_0x555555dc6540; 1 drivers -v0x555555da95b0_0 .net *"_ivl_29", 511 0, L_0x555555dc6880; 1 drivers -v0x555555da9690_0 .net *"_ivl_31", 2 0, L_0x555555dc6920; 1 drivers -L_0x7eff80b5c0a8 .functor BUFT 1, C4<00>, C4<0>, C4<0>, C4<0>; -v0x555555da9770_0 .net *"_ivl_34", 1 0, L_0x7eff80b5c0a8; 1 drivers -v0x555555da9850_0 .net *"_ivl_38", 0 0, L_0x555555dc6b30; 1 drivers -v0x555555da99c0_0 .net *"_ivl_42", 0 0, L_0x555555dc6d80; 1 drivers -v0x555555da9aa0_0 .net *"_ivl_45", 31 0, L_0x555555dc6f90; 1 drivers -L_0x7eff80b5c0f0 .functor BUFT 1, C4<000000000000000000000000000>, C4<0>, C4<0>, C4<0>; -v0x555555da9b80_0 .net *"_ivl_48", 26 0, L_0x7eff80b5c0f0; 1 drivers -L_0x7eff80b5c138 .functor BUFT 1, C4<00000000000000000000000000000010>, C4<0>, C4<0>, C4<0>; -v0x555555da9c60_0 .net/2u *"_ivl_49", 31 0, L_0x7eff80b5c138; 1 drivers -v0x555555da9d40_0 .net *"_ivl_55", 4 0, L_0x555555dc72e0; 1 drivers -v0x555555da9e20_0 .net *"_ivl_57", 4 0, L_0x555555dc73b0; 1 drivers -L_0x7eff80b5c1c8 .functor BUFT 1, C4<00>, C4<0>, C4<0>, C4<0>; -v0x555555da9f00_0 .net *"_ivl_60", 1 0, L_0x7eff80b5c1c8; 1 drivers -v0x555555da9fe0_0 .net *"_ivl_63", 4 0, L_0x555555dc7600; 1 drivers -v0x555555daa0c0_0 .net *"_ivl_65", 4 0, L_0x555555dc76d0; 1 drivers -L_0x7eff80b5c210 .functor BUFT 1, C4<00>, C4<0>, C4<0>, C4<0>; -v0x555555daa1a0_0 .net *"_ivl_68", 1 0, L_0x7eff80b5c210; 1 drivers -v0x555555daa280_0 .net *"_ivl_71", 4 0, L_0x555555dc7990; 1 drivers -v0x555555daa360_0 .net *"_ivl_73", 4 0, L_0x555555dc7a30; 1 drivers -L_0x7eff80b5c258 .functor BUFT 1, C4<00>, C4<0>, C4<0>, C4<0>; -v0x555555daa440_0 .net *"_ivl_76", 1 0, L_0x7eff80b5c258; 1 drivers -v0x555555daa520_0 .net *"_ivl_79", 4 0, L_0x555555dc7810; 1 drivers -v0x555555daa600_0 .net *"_ivl_81", 4 0, L_0x555555dc7c90; 1 drivers -L_0x7eff80b5c2a0 .functor BUFT 1, C4<00>, C4<0>, C4<0>, C4<0>; -v0x555555daa6e0_0 .net *"_ivl_84", 1 0, L_0x7eff80b5c2a0; 1 drivers -v0x555555daa7c0_0 .net *"_ivl_88", 0 0, L_0x555555dc7f50; 1 drivers -L_0x7eff80b5c2e8 .functor BUFT 1, C4<000010>, C4<0>, C4<0>, C4<0>; -v0x555555daa8a0_0 .net/2u *"_ivl_89", 5 0, L_0x7eff80b5c2e8; 1 drivers -v0x555555daa980_0 .net *"_ivl_91", 5 0, L_0x555555dc8050; 1 drivers -L_0x7eff80b5c330 .functor BUFT 1, C4<000001>, C4<0>, C4<0>, C4<0>; -v0x555555daaa60_0 .net/2u *"_ivl_93", 5 0, L_0x7eff80b5c330; 1 drivers -v0x555555daab40_0 .net *"_ivl_95", 5 0, L_0x555555dc8300; 1 drivers -v0x555555daac20_0 .var "activate_slot_busy", 0 0; -v0x555555daace0 .array "added_read_pipe", 0 7, 3 0; -v0x555555daada0_0 .var "added_read_pipe_max", 3 0; -v0x555555daae80 .array "bank_active_row_d", 0 7, 15 0; -v0x555555dab040 .array "bank_active_row_q", 0 7, 15 0; -v0x555555dab250_0 .var "bank_status_d", 7 0; -v0x555555dab330_0 .var "bank_status_q", 7 0; -v0x555555dab410_0 .var "cmd_ck_en", 0 0; -v0x555555dab4d0 .array "cmd_d", 0 3, 25 0; -v0x555555dab610_0 .var "cmd_odt", 0 0; -v0x555555dab6d0_0 .var "cmd_odt_q", 0 0; -v0x555555dab790 .array "cmd_q", 0 3, 25 0; -v0x555555dab850_0 .var "cmd_reset_n", 0 0; -v0x555555dab910 .array "data_start_index", 0 7, 6 0; -v0x555555dab9d0 .array "delay_before_activate_counter_d", 0 7, 3 0; -v0x555555daba90 .array "delay_before_activate_counter_q", 0 7, 3 0; -v0x555555dabca0 .array "delay_before_precharge_counter_d", 0 7, 3 0; -v0x555555dabd60 .array "delay_before_precharge_counter_q", 0 7, 3 0; -v0x555555dabf70 .array "delay_before_read_counter_d", 0 7, 3 0; -v0x555555dac180 .array "delay_before_read_counter_q", 0 7, 3 0; -v0x555555dac390_0 .var "delay_before_read_data", 3 0; -v0x555555dac470 .array "delay_before_write_counter_d", 0 7, 3 0; -v0x555555dac680 .array "delay_before_write_counter_q", 0 7, 3 0; -v0x555555dac890_0 .var "delay_before_write_level_feedback", 4 0; -v0x555555dac970_0 .var "delay_counter", 15 0; -v0x555555daca50_0 .var "delay_counter_is_zero", 0 0; -v0x555555dacb10 .array "delay_read_pipe", 0 1, 15 0; -v0x555555dacbd0_0 .var "dq_target_index", 5 0; -v0x555555daccb0_0 .var "dqs_bitslip_arrangement", 15 0; -v0x555555dacd90_0 .var "dqs_count_repeat", 3 0; -v0x555555dace70_0 .var "dqs_start_index", 5 0; -v0x555555dacf50_0 .var "dqs_start_index_repeat", 0 0; -v0x555555dad030_0 .var "dqs_start_index_stored", 5 0; -v0x555555dad110_0 .var "dqs_store", 39 0; -v0x555555dad1f0_0 .var "dqs_target_index", 5 0; -v0x555555dad2d0_0 .var "dqs_target_index_orig", 5 0; -v0x555555dad3b0_0 .net "dqs_target_index_value", 5 0, L_0x555555dc83f0; 1 drivers -o0x7eff80ba6c38 .functor BUFZ 16, C4; HiZ drive -v0x555555dad490_0 .net "i_aux", 15 0, o0x7eff80ba6c38; 0 drivers -o0x7eff80ba6c68 .functor BUFZ 1, C4; HiZ drive -v0x555555dad570_0 .net "i_controller_clk", 0 0, o0x7eff80ba6c68; 0 drivers -o0x7eff80ba6c98 .functor BUFZ 1, C4; HiZ drive -v0x555555dad630_0 .net "i_phy_idelayctrl_rdy", 0 0, o0x7eff80ba6c98; 0 drivers -o0x7eff80ba6cc8 .functor BUFZ 64, C4; HiZ drive -v0x555555dad6f0_0 .net "i_phy_iserdes_bitslip_reference", 63 0, o0x7eff80ba6cc8; 0 drivers -o0x7eff80ba6cf8 .functor BUFZ 512, C4; HiZ drive -v0x555555dad7d0_0 .net "i_phy_iserdes_data", 511 0, o0x7eff80ba6cf8; 0 drivers -o0x7eff80ba6d28 .functor BUFZ 64, C4; HiZ drive -v0x555555dad8b0_0 .net "i_phy_iserdes_dqs", 63 0, o0x7eff80ba6d28; 0 drivers -o0x7eff80ba6d58 .functor BUFZ 1, C4; HiZ drive -v0x555555dad990_0 .net "i_rst_n", 0 0, o0x7eff80ba6d58; 0 drivers -o0x7eff80ba6d88 .functor BUFZ 32, C4; HiZ drive -v0x555555dada50_0 .net "i_wb2_addr", 31 0, o0x7eff80ba6d88; 0 drivers -o0x7eff80ba6db8 .functor BUFZ 1, C4; HiZ drive -v0x555555dadb30_0 .net "i_wb2_cyc", 0 0, o0x7eff80ba6db8; 0 drivers -o0x7eff80ba6de8 .functor BUFZ 32, C4; HiZ drive -v0x555555dadbf0_0 .net "i_wb2_data", 31 0, o0x7eff80ba6de8; 0 drivers -o0x7eff80ba6e18 .functor BUFZ 4, C4; HiZ drive -v0x555555dadcd0_0 .net "i_wb2_sel", 3 0, o0x7eff80ba6e18; 0 drivers -o0x7eff80ba6e48 .functor BUFZ 1, C4; HiZ drive -v0x555555daddb0_0 .net "i_wb2_stb", 0 0, o0x7eff80ba6e48; 0 drivers -o0x7eff80ba6e78 .functor BUFZ 1, C4; HiZ drive -v0x555555dade70_0 .net "i_wb2_we", 0 0, o0x7eff80ba6e78; 0 drivers -o0x7eff80ba6ea8 .functor BUFZ 26, C4; HiZ drive -v0x555555dadf30_0 .net "i_wb_addr", 25 0, o0x7eff80ba6ea8; 0 drivers -o0x7eff80ba6ed8 .functor BUFZ 1, C4; HiZ drive -v0x555555dae010_0 .net "i_wb_cyc", 0 0, o0x7eff80ba6ed8; 0 drivers -o0x7eff80ba6f08 .functor BUFZ 512, C4; HiZ drive -v0x555555dae0d0_0 .net "i_wb_data", 511 0, o0x7eff80ba6f08; 0 drivers -o0x7eff80ba6f38 .functor BUFZ 64, C4; HiZ drive -v0x555555dae1b0_0 .net "i_wb_sel", 63 0, o0x7eff80ba6f38; 0 drivers -o0x7eff80ba6f68 .functor BUFZ 1, C4; HiZ drive -v0x555555dae290_0 .net "i_wb_stb", 0 0, o0x7eff80ba6f68; 0 drivers -o0x7eff80ba6f98 .functor BUFZ 1, C4; HiZ drive -v0x555555dae350_0 .net "i_wb_we", 0 0, o0x7eff80ba6f98; 0 drivers -v0x555555dae410 .array "idelay_data_cntvaluein", 0 7, 4 0; -v0x555555dae4d0_0 .var "idelay_data_cntvaluein_prev", 4 0; -v0x555555dae5b0 .array "idelay_dqs_cntvaluein", 0 7, 4 0; -v0x555555dae670_0 .var/i "index", 31 0; -v0x555555dae750_0 .var "index_read_pipe", 0 0; -v0x555555dae810_0 .var "index_wb_data", 0 0; -v0x555555dae8d0_0 .var "initial_dqs", 0 0; -v0x555555dae990_0 .var "instruction", 27 0; -v0x555555daea70_0 .var "instruction_address", 4 0; -v0x555555daeb50_0 .net "issue_read_command", 0 0, L_0x555555dc7120; 1 drivers -L_0x7eff80b5c180 .functor BUFT 1, C4<0>, C4<0>, C4<0>, C4<0>; -v0x555555daec10_0 .net "issue_write_command", 0 0, L_0x7eff80b5c180; 1 drivers -v0x555555daecd0_0 .var "lane", 2 0; -v0x555555daedb0_0 .net "o_aux", 15 0, L_0x555555dc6750; 1 drivers -v0x555555daee90_0 .var "o_phy_bitslip", 7 0; -v0x555555daef70_0 .net "o_phy_cmd", 103 0, L_0x555555db60e0; 1 drivers -v0x555555daf050_0 .net "o_phy_data", 511 0, L_0x555555d13d90; 1 drivers -v0x555555daf130_0 .net "o_phy_dm", 63 0, L_0x555555d211c0; 1 drivers -v0x555555daf210_0 .net "o_phy_dq_tri_control", 0 0, L_0x555555dc6e50; 1 drivers -v0x555555daf2d0_0 .net "o_phy_dqs_tri_control", 0 0, L_0x555555dc6c00; 1 drivers -v0x555555daf390_0 .net "o_phy_idelay_data_cntvaluein", 4 0, L_0x555555dc7c20; 1 drivers -v0x555555daf470_0 .var "o_phy_idelay_data_ld", 7 0; -v0x555555daf550_0 .net "o_phy_idelay_dqs_cntvaluein", 4 0, L_0x555555dc7e40; 1 drivers -v0x555555daf630_0 .var "o_phy_idelay_dqs_ld", 7 0; -v0x555555daf710_0 .net "o_phy_odelay_data_cntvaluein", 4 0, L_0x555555dc6f20; 1 drivers -v0x555555daf7f0_0 .var "o_phy_odelay_data_ld", 7 0; -v0x555555daf8d0_0 .net "o_phy_odelay_dqs_cntvaluein", 4 0, L_0x555555d6eaf0; 1 drivers -v0x555555daf9b0_0 .var "o_phy_odelay_dqs_ld", 7 0; -v0x555555dafa90_0 .net "o_phy_toggle_dqs", 0 0, L_0x555555db5f50; 1 drivers -v0x555555dafb50_0 .var "o_wb2_ack", 0 0; -v0x555555dafc10_0 .var "o_wb2_data", 31 0; -v0x555555dafcf0_0 .var "o_wb2_stall", 0 0; -v0x555555dafdb0_0 .net "o_wb_ack", 0 0, L_0x555555d539f0; 1 drivers -v0x555555dafe70 .array "o_wb_ack_read_q", 0 15, 16 0; -v0x555555db0130_0 .net "o_wb_data", 511 0, L_0x555555d61dc0; 1 drivers -v0x555555db0210 .array "o_wb_data_q", 0 1, 511 0; -v0x555555db02d0_0 .var "o_wb_stall", 0 0; -v0x555555db0390_0 .var "o_wb_stall_d", 0 0; -v0x555555db0450_0 .var "o_wb_stall_q", 0 0; -v0x555555db0510 .array "odelay_data_cntvaluein", 0 7, 4 0; -v0x555555db05d0 .array "odelay_dqs_cntvaluein", 0 7, 4 0; -v0x555555db0690_0 .var "pause_counter", 0 0; -v0x555555db0750_0 .var "precharge_slot_busy", 0 0; -v0x555555db0810_0 .var "prev_write_level_feedback", 0 0; -v0x555555db10e0_0 .var "read_data_store", 511 0; -v0x555555db11c0_0 .var "reset_done", 0 0; -v0x555555db1280 .array "shift_reg_read_pipe_d", 0 5, 16 0; -v0x555555db1340 .array "shift_reg_read_pipe_q", 0 5, 16 0; -v0x555555db14c0_0 .var "stage1_aux", 15 0; -v0x555555db15a0_0 .var "stage1_bank", 2 0; -v0x555555db1680_0 .var "stage1_col", 9 0; -v0x555555db1760_0 .var "stage1_data", 511 0; -v0x555555db1840_0 .var "stage1_dm", 63 0; -v0x555555db1920_0 .var "stage1_issue_command", 0 0; -v0x555555db1a00_0 .var "stage1_next_bank", 2 0; -v0x555555db1ae0_0 .var "stage1_next_col", 9 0; -v0x555555db1bc0_0 .var "stage1_next_row", 15 0; -v0x555555db1ca0_0 .var "stage1_pending", 0 0; -v0x555555db1d60_0 .var "stage1_row", 15 0; -v0x555555db1e40_0 .var "stage1_stall", 0 0; -v0x555555db1f00_0 .var "stage1_we", 0 0; -v0x555555db1fc0_0 .var "stage2_aux", 15 0; -v0x555555db20a0_0 .var "stage2_bank", 2 0; -v0x555555db2180_0 .var "stage2_col", 9 0; -v0x555555db2260 .array "stage2_data", 0 1, 511 0; -v0x555555db2380_0 .var "stage2_data_unaligned", 511 0; -v0x555555db2460 .array "stage2_dm", 0 1, 63 0; -v0x555555db2580_0 .var "stage2_dm_unaligned", 63 0; -v0x555555db2660_0 .var "stage2_issue_command", 0 0; -v0x555555db2740_0 .var "stage2_pending", 0 0; -v0x555555db2800_0 .var "stage2_row", 15 0; -v0x555555db28e0_0 .var "stage2_stall", 0 0; -v0x555555db29a0_0 .var "stage2_update", 0 0; -v0x555555db2a60_0 .var "stage2_we", 0 0; -v0x555555db2b20_0 .var "state_calibrate", 4 0; -v0x555555db2c00_0 .var "train_delay", 1 0; -v0x555555db2ce0 .array "unaligned_data", 0 7, 63 0; -v0x555555db2da0 .array "unaligned_dm", 0 7, 7 0; -v0x555555db2e60_0 .var "wb2_addr", 31 0; -v0x555555db2f40_0 .var "wb2_data", 31 0; -v0x555555db3020_0 .var "wb2_phy_idelay_data_cntvaluein", 4 0; -v0x555555db3100_0 .var "wb2_phy_idelay_data_ld", 7 0; -v0x555555db31e0_0 .var "wb2_phy_idelay_dqs_cntvaluein", 4 0; -v0x555555db32c0_0 .var "wb2_phy_idelay_dqs_ld", 7 0; -v0x555555db33a0_0 .var "wb2_phy_odelay_data_cntvaluein", 4 0; -v0x555555db3480_0 .var "wb2_phy_odelay_data_ld", 7 0; -v0x555555db3560_0 .var "wb2_phy_odelay_dqs_cntvaluein", 4 0; -v0x555555db3640_0 .var "wb2_phy_odelay_dqs_ld", 7 0; -v0x555555db3720_0 .var "wb2_sel", 3 0; -v0x555555db3800_0 .var "wb2_stb", 0 0; -v0x555555db38c0_0 .var "wb2_update", 0 0; -v0x555555db3980_0 .var "wb2_we", 0 0; -v0x555555db3a40_0 .var "wb2_write_lane", 2 0; -v0x555555db3b20_0 .var "write_calib_aux", 15 0; -v0x555555db3c00_0 .var "write_calib_col", 9 0; -v0x555555db3ce0_0 .var "write_calib_data", 511 0; -v0x555555db3dc0_0 .var "write_calib_dq", 0 0; -v0x555555db3e80_0 .var "write_calib_dqs", 0 0; -v0x555555db3f40_0 .var "write_calib_odt", 0 0; -v0x555555db4000_0 .var "write_calib_stb", 0 0; -v0x555555db40c0_0 .var "write_calib_we", 0 0; -v0x555555db4180_0 .var "write_dq", 3 0; -v0x555555db4260_0 .var "write_dq_d", 0 0; -v0x555555db4320_0 .var "write_dq_q", 0 0; -v0x555555db43e0_0 .var "write_dqs", 2 0; -v0x555555db44c0_0 .var "write_dqs_d", 0 0; -v0x555555db4580_0 .var "write_dqs_q", 1 0; -v0x555555db4660_0 .var "write_dqs_val", 2 0; -v0x555555db4740_0 .var "write_pattern", 127 0; -E_0x555555cb9a50/0 .event negedge, v0x555555dad990_0; -E_0x555555cb9a50/1 .event posedge, v0x555555dad570_0; -E_0x555555cb9a50 .event/or E_0x555555cb9a50/0, E_0x555555cb9a50/1; -E_0x555555ba4230/0 .event anyedge, v0x555555dab6d0_0, v0x555555db3f40_0, v0x555555dae990_0, v0x555555db3e80_0; -v0x555555dab040_0 .array/port v0x555555dab040, 0; -v0x555555dab040_1 .array/port v0x555555dab040, 1; -E_0x555555ba4230/1 .event anyedge, v0x555555db3dc0_0, v0x555555dab330_0, v0x555555dab040_0, v0x555555dab040_1; -v0x555555dab040_2 .array/port v0x555555dab040, 2; -v0x555555dab040_3 .array/port v0x555555dab040, 3; -v0x555555dab040_4 .array/port v0x555555dab040, 4; -v0x555555dab040_5 .array/port v0x555555dab040, 5; -E_0x555555ba4230/2 .event anyedge, v0x555555dab040_2, v0x555555dab040_3, v0x555555dab040_4, v0x555555dab040_5; -v0x555555dab040_6 .array/port v0x555555dab040, 6; -v0x555555dab040_7 .array/port v0x555555dab040, 7; -E_0x555555ba4230/3 .event anyedge, v0x555555dab040_6, v0x555555dab040_7, v0x555555daca50_0, v0x555555dab610_0; -E_0x555555ba4230/4 .event anyedge, v0x555555daeb50_0, v0x555555dab410_0, v0x555555dab850_0, v0x555555daec10_0; -v0x555555dabd60_0 .array/port v0x555555dabd60, 0; -v0x555555dabd60_1 .array/port v0x555555dabd60, 1; -v0x555555dabd60_2 .array/port v0x555555dabd60, 2; -v0x555555dabd60_3 .array/port v0x555555dabd60, 3; -E_0x555555ba4230/5 .event anyedge, v0x555555dabd60_0, v0x555555dabd60_1, v0x555555dabd60_2, v0x555555dabd60_3; -v0x555555dabd60_4 .array/port v0x555555dabd60, 4; -v0x555555dabd60_5 .array/port v0x555555dabd60, 5; -v0x555555dabd60_6 .array/port v0x555555dabd60, 6; -v0x555555dabd60_7 .array/port v0x555555dabd60, 7; -E_0x555555ba4230/6 .event anyedge, v0x555555dabd60_4, v0x555555dabd60_5, v0x555555dabd60_6, v0x555555dabd60_7; -v0x555555daba90_0 .array/port v0x555555daba90, 0; -v0x555555daba90_1 .array/port v0x555555daba90, 1; -v0x555555daba90_2 .array/port v0x555555daba90, 2; -v0x555555daba90_3 .array/port v0x555555daba90, 3; -E_0x555555ba4230/7 .event anyedge, v0x555555daba90_0, v0x555555daba90_1, v0x555555daba90_2, v0x555555daba90_3; -v0x555555daba90_4 .array/port v0x555555daba90, 4; -v0x555555daba90_5 .array/port v0x555555daba90, 5; -v0x555555daba90_6 .array/port v0x555555daba90, 6; -v0x555555daba90_7 .array/port v0x555555daba90, 7; -E_0x555555ba4230/8 .event anyedge, v0x555555daba90_4, v0x555555daba90_5, v0x555555daba90_6, v0x555555daba90_7; -v0x555555dac680_0 .array/port v0x555555dac680, 0; -v0x555555dac680_1 .array/port v0x555555dac680, 1; -v0x555555dac680_2 .array/port v0x555555dac680, 2; -v0x555555dac680_3 .array/port v0x555555dac680, 3; -E_0x555555ba4230/9 .event anyedge, v0x555555dac680_0, v0x555555dac680_1, v0x555555dac680_2, v0x555555dac680_3; -v0x555555dac680_4 .array/port v0x555555dac680, 4; -v0x555555dac680_5 .array/port v0x555555dac680, 5; -v0x555555dac680_6 .array/port v0x555555dac680, 6; -v0x555555dac680_7 .array/port v0x555555dac680, 7; -E_0x555555ba4230/10 .event anyedge, v0x555555dac680_4, v0x555555dac680_5, v0x555555dac680_6, v0x555555dac680_7; -v0x555555dac180_0 .array/port v0x555555dac180, 0; -v0x555555dac180_1 .array/port v0x555555dac180, 1; -v0x555555dac180_2 .array/port v0x555555dac180, 2; -v0x555555dac180_3 .array/port v0x555555dac180, 3; -E_0x555555ba4230/11 .event anyedge, v0x555555dac180_0, v0x555555dac180_1, v0x555555dac180_2, v0x555555dac180_3; -v0x555555dac180_4 .array/port v0x555555dac180, 4; -v0x555555dac180_5 .array/port v0x555555dac180, 5; -v0x555555dac180_6 .array/port v0x555555dac180, 6; -v0x555555dac180_7 .array/port v0x555555dac180, 7; -E_0x555555ba4230/12 .event anyedge, v0x555555dac180_4, v0x555555dac180_5, v0x555555dac180_6, v0x555555dac180_7; -v0x555555db1340_0 .array/port v0x555555db1340, 0; -v0x555555db1340_1 .array/port v0x555555db1340, 1; -v0x555555db1340_2 .array/port v0x555555db1340, 2; -v0x555555db1340_3 .array/port v0x555555db1340, 3; -E_0x555555ba4230/13 .event anyedge, v0x555555db1340_0, v0x555555db1340_1, v0x555555db1340_2, v0x555555db1340_3; -v0x555555db1340_4 .array/port v0x555555db1340, 4; -v0x555555db1340_5 .array/port v0x555555db1340, 5; -E_0x555555ba4230/14 .event anyedge, v0x555555db1340_4, v0x555555db1340_5, v0x555555db2740_0, v0x555555db20a0_0; -E_0x555555ba4230/15 .event anyedge, v0x555555db2800_0, v0x555555db2a60_0, v0x555555db1fc0_0, v0x555555db2180_0; -E_0x555555ba4230/16 .event anyedge, v0x555555db1ca0_0, v0x555555db1a00_0, v0x555555db1bc0_0, v0x555555db0750_0; -v0x555555dabf70_0 .array/port v0x555555dabf70, 0; -v0x555555dabf70_1 .array/port v0x555555dabf70, 1; -v0x555555dabf70_2 .array/port v0x555555dabf70, 2; -E_0x555555ba4230/17 .event anyedge, v0x555555daac20_0, v0x555555dabf70_0, v0x555555dabf70_1, v0x555555dabf70_2; -v0x555555dabf70_3 .array/port v0x555555dabf70, 3; -v0x555555dabf70_4 .array/port v0x555555dabf70, 4; -v0x555555dabf70_5 .array/port v0x555555dabf70, 5; -v0x555555dabf70_6 .array/port v0x555555dabf70, 6; -E_0x555555ba4230/18 .event anyedge, v0x555555dabf70_3, v0x555555dabf70_4, v0x555555dabf70_5, v0x555555dabf70_6; -v0x555555dabf70_7 .array/port v0x555555dabf70, 7; -v0x555555daae80_0 .array/port v0x555555daae80, 0; -E_0x555555ba4230/19 .event anyedge, v0x555555dabf70_7, v0x555555db15a0_0, v0x555555dab250_0, v0x555555daae80_0; -v0x555555daae80_1 .array/port v0x555555daae80, 1; -v0x555555daae80_2 .array/port v0x555555daae80, 2; -v0x555555daae80_3 .array/port v0x555555daae80, 3; -v0x555555daae80_4 .array/port v0x555555daae80, 4; -E_0x555555ba4230/20 .event anyedge, v0x555555daae80_1, v0x555555daae80_2, v0x555555daae80_3, v0x555555daae80_4; -v0x555555daae80_5 .array/port v0x555555daae80, 5; -v0x555555daae80_6 .array/port v0x555555daae80, 6; -v0x555555daae80_7 .array/port v0x555555daae80, 7; -E_0x555555ba4230/21 .event anyedge, v0x555555daae80_5, v0x555555daae80_6, v0x555555daae80_7, v0x555555db1d60_0; -v0x555555dac470_0 .array/port v0x555555dac470, 0; -v0x555555dac470_1 .array/port v0x555555dac470, 1; -v0x555555dac470_2 .array/port v0x555555dac470, 2; -E_0x555555ba4230/22 .event anyedge, v0x555555db1f00_0, v0x555555dac470_0, v0x555555dac470_1, v0x555555dac470_2; -v0x555555dac470_3 .array/port v0x555555dac470, 3; -v0x555555dac470_4 .array/port v0x555555dac470, 4; -v0x555555dac470_5 .array/port v0x555555dac470, 5; -v0x555555dac470_6 .array/port v0x555555dac470, 6; -E_0x555555ba4230/23 .event anyedge, v0x555555dac470_3, v0x555555dac470_4, v0x555555dac470_5, v0x555555dac470_6; -v0x555555dac470_7 .array/port v0x555555dac470, 7; -E_0x555555ba4230/24 .event anyedge, v0x555555dac470_7, v0x555555db0450_0, v0x555555db28e0_0, v0x555555dae290_0; -E_0x555555ba4230/25 .event anyedge, v0x555555db1e40_0, v0x555555dae010_0; -E_0x555555ba4230 .event/or E_0x555555ba4230/0, E_0x555555ba4230/1, E_0x555555ba4230/2, E_0x555555ba4230/3, E_0x555555ba4230/4, E_0x555555ba4230/5, E_0x555555ba4230/6, E_0x555555ba4230/7, E_0x555555ba4230/8, E_0x555555ba4230/9, E_0x555555ba4230/10, E_0x555555ba4230/11, E_0x555555ba4230/12, E_0x555555ba4230/13, E_0x555555ba4230/14, E_0x555555ba4230/15, E_0x555555ba4230/16, E_0x555555ba4230/17, E_0x555555ba4230/18, E_0x555555ba4230/19, E_0x555555ba4230/20, E_0x555555ba4230/21, E_0x555555ba4230/22, E_0x555555ba4230/23, E_0x555555ba4230/24, E_0x555555ba4230/25; -L_0x555555db5f50 .part v0x555555db4660_0, 0, 1; -v0x555555dab4d0_0 .array/port v0x555555dab4d0, 0; -v0x555555dab4d0_1 .array/port v0x555555dab4d0, 1; -v0x555555dab4d0_2 .array/port v0x555555dab4d0, 2; -v0x555555dab4d0_3 .array/port v0x555555dab4d0, 3; -L_0x555555db60e0 .concat [ 26 26 26 26], v0x555555dab4d0_0, v0x555555dab4d0_1, v0x555555dab4d0_2, v0x555555dab4d0_3; -v0x555555dafe70_0 .array/port v0x555555dafe70, 0; -L_0x555555db62a0 .part v0x555555dafe70_0, 0, 1; -L_0x555555db63a0 .concat [ 5 27 0 0], v0x555555db2b20_0, L_0x7eff80b5c018; -L_0x555555dc6540 .cmp/eq 32, L_0x555555db63a0, L_0x7eff80b5c060; -L_0x555555dc6750 .part v0x555555dafe70_0, 1, 16; -L_0x555555dc6880 .array/port v0x555555db0210, L_0x555555dc6920; -L_0x555555dc6920 .concat [ 1 2 0 0], v0x555555dae810_0, L_0x7eff80b5c0a8; -L_0x555555dc6b30 .part v0x555555db43e0_0, 2, 1; -L_0x555555dc6c00 .reduce/nor L_0x555555dc6b30; -L_0x555555dc6d80 .part v0x555555db4180_0, 3, 1; -L_0x555555dc6e50 .reduce/nor L_0x555555dc6d80; -L_0x555555dc6f90 .concat [ 5 27 0 0], v0x555555db2b20_0, L_0x7eff80b5c0f0; -L_0x555555dc7120 .cmp/eq 32, L_0x555555dc6f90, L_0x7eff80b5c138; -L_0x555555dc72e0 .array/port v0x555555db0510, L_0x555555dc73b0; -L_0x555555dc73b0 .concat [ 3 2 0 0], v0x555555daecd0_0, L_0x7eff80b5c1c8; -L_0x555555dc7600 .array/port v0x555555db05d0, L_0x555555dc76d0; -L_0x555555dc76d0 .concat [ 3 2 0 0], v0x555555daecd0_0, L_0x7eff80b5c210; -L_0x555555dc7990 .array/port v0x555555dae410, L_0x555555dc7a30; -L_0x555555dc7a30 .concat [ 3 2 0 0], v0x555555daecd0_0, L_0x7eff80b5c258; -L_0x555555dc7810 .array/port v0x555555dae5b0, L_0x555555dc7c90; -L_0x555555dc7c90 .concat [ 3 2 0 0], v0x555555daecd0_0, L_0x7eff80b5c2a0; -L_0x555555dc7f50 .part v0x555555dad030_0, 0, 1; -L_0x555555dc8050 .arith/sum 6, v0x555555dad030_0, L_0x7eff80b5c2e8; -L_0x555555dc8300 .arith/sum 6, v0x555555dad030_0, L_0x7eff80b5c330; -L_0x555555dc83f0 .functor MUXZ 6, L_0x555555dc8300, L_0x555555dc8050, L_0x555555dc7f50, C4<>; -S_0x555555d03780 .scope function.vec4.s3, "WRA_mode_register_value" "WRA_mode_register_value" 2 1690, 2 1690 0, S_0x555555cfe490; - .timescale 0 0; -v0x555555d2a0b0_0 .var/i "WRA", 31 0; -; Variable WRA_mode_register_value is vec4 return value of scope S_0x555555d03780 -TD_ddr3_controller.WRA_mode_register_value ; - %load/vec4 v0x555555d2a0b0_0; - %addi 1, 0, 32; - %dup/vec4; - %pushi/vec4 1, 0, 32; - %cmp/u; - %jmp/1 T_0.0, 6; - %dup/vec4; - %pushi/vec4 2, 0, 32; - %cmp/u; - %jmp/1 T_0.1, 6; - %dup/vec4; - %pushi/vec4 3, 0, 32; - %cmp/u; - %jmp/1 T_0.2, 6; - %dup/vec4; - %pushi/vec4 4, 0, 32; - %cmp/u; - %jmp/1 T_0.3, 6; - %dup/vec4; - %pushi/vec4 5, 0, 32; - %cmp/u; - %jmp/1 T_0.4, 6; - %dup/vec4; - %pushi/vec4 6, 0, 32; - %cmp/u; - %jmp/1 T_0.5, 6; - %dup/vec4; - %pushi/vec4 7, 0, 32; - %cmp/u; - %jmp/1 T_0.6, 6; - %dup/vec4; - %pushi/vec4 8, 0, 32; - %cmp/u; - %jmp/1 T_0.7, 6; - %dup/vec4; - %pushi/vec4 9, 0, 32; - %cmp/u; - %jmp/1 T_0.8, 6; - %dup/vec4; - %pushi/vec4 10, 0, 32; - %cmp/u; - %jmp/1 T_0.9, 6; - %dup/vec4; - %pushi/vec4 11, 0, 32; - %cmp/u; - %jmp/1 T_0.10, 6; - %dup/vec4; - %pushi/vec4 12, 0, 32; - %cmp/u; - %jmp/1 T_0.11, 6; - %dup/vec4; - %pushi/vec4 13, 0, 32; - %cmp/u; - %jmp/1 T_0.12, 6; - %dup/vec4; - %pushi/vec4 14, 0, 32; - %cmp/u; - %jmp/1 T_0.13, 6; - %dup/vec4; - %pushi/vec4 15, 0, 32; - %cmp/u; - %jmp/1 T_0.14, 6; - %dup/vec4; - %pushi/vec4 16, 0, 32; - %cmp/u; - %jmp/1 T_0.15, 6; - %pushi/vec4 0, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.0 ; - %pushi/vec4 1, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.1 ; - %pushi/vec4 1, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.2 ; - %pushi/vec4 1, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.3 ; - %pushi/vec4 1, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.4 ; - %pushi/vec4 1, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.5 ; - %pushi/vec4 2, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.6 ; - %pushi/vec4 3, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.7 ; - %pushi/vec4 4, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.8 ; - %pushi/vec4 5, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.9 ; - %pushi/vec4 5, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.10 ; - %pushi/vec4 6, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.11 ; - %pushi/vec4 6, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.12 ; - %pushi/vec4 7, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.13 ; - %pushi/vec4 7, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.14 ; - %pushi/vec4 0, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.15 ; - %pushi/vec4 0, 0, 3; - %ret/vec4 0, 0, 3; Assign to WRA_mode_register_value (store_vec4_to_lval) - %jmp T_0.17; -T_0.17 ; - %pop/vec4 1; - %end; -S_0x555555da6970 .scope function.vec4.s4, "find_delay" "find_delay" 2 1767, 2 1767 0, S_0x555555cfe490; - .timescale 0 0; -v0x555555d472f0_0 .var/i "delay_nCK", 31 0; -v0x555555d474d0_0 .var "end_slot", 1 0; -; Variable find_delay is vec4 return value of scope S_0x555555da6970 -v0x555555d64a10_0 .var/i "k", 31 0; -v0x555555d64ab0_0 .var "start_slot", 1 0; -TD_ddr3_controller.find_delay ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555d64a10_0, 0, 32; -T_1.18 ; - %pushi/vec4 4, 0, 32; - %load/vec4 v0x555555d64ab0_0; - %pad/u 32; - %sub; - %load/vec4 v0x555555d474d0_0; - %pad/u 32; - %add; - %load/vec4 v0x555555d64a10_0; - %muli 4, 0, 32; - %add; - %load/vec4 v0x555555d472f0_0; - %cmp/u; - %jmp/0xz T_1.19, 5; - %load/vec4 v0x555555d64a10_0; - %addi 1, 0, 32; - %store/vec4 v0x555555d64a10_0, 0, 32; - %jmp T_1.18; -T_1.19 ; - %load/vec4 v0x555555d64a10_0; - %parti/s 4, 0, 2; - %ret/vec4 0, 0, 4; Assign to find_delay (store_vec4_to_lval) - %end; -S_0x555555da6ce0 .scope generate, "genblk1" "genblk1" 2 1233, 2 1233 0, S_0x555555cfe490; - .timescale 0 0; -S_0x555555da6ec0 .scope function.vec4.s2, "get_slot" "get_slot" 2 1708, 2 1708 0, S_0x555555cfe490; - .timescale 0 0; -v0x555555da70a0_0 .var "anticipate_activate_slot", 1 0; -v0x555555da7180_0 .var "anticipate_precharge_slot", 1 0; -v0x555555da7260_0 .var "cmd", 3 0; -v0x555555da7320_0 .var/i "delay", 31 0; -; Variable get_slot is vec4 return value of scope S_0x555555da6ec0 -v0x555555da7530_0 .var "read_slot", 1 0; -v0x555555da7610_0 .var "slot_number", 1 0; -v0x555555da76f0_0 .var "write_slot", 1 0; -TD_ddr3_controller.get_slot ; - %pushi/vec4 6, 0, 32; - %store/vec4 v0x555555da7320_0, 0, 32; - %pushi/vec4 0, 0, 2; - %store/vec4 v0x555555da7610_0, 0, 2; -T_2.20 ; - %load/vec4 v0x555555da7320_0; - %cmpi/ne 0, 0, 32; - %jmp/0xz T_2.21, 4; - %load/vec4 v0x555555da7610_0; - %subi 1, 0, 2; - %store/vec4 v0x555555da7610_0, 0, 2; - %load/vec4 v0x555555da7320_0; - %subi 1, 0, 32; - %store/vec4 v0x555555da7320_0, 0, 32; - %jmp T_2.20; -T_2.21 ; - %load/vec4 v0x555555da7610_0; - %store/vec4 v0x555555da7530_0, 0, 2; - %pushi/vec4 5, 0, 32; - %store/vec4 v0x555555da7320_0, 0, 32; - %pushi/vec4 0, 0, 2; - %store/vec4 v0x555555da7610_0, 0, 2; -T_2.22 ; - %load/vec4 v0x555555da7320_0; - %cmpi/ne 0, 0, 32; - %jmp/0xz T_2.23, 4; - %load/vec4 v0x555555da7610_0; - %subi 1, 0, 2; - %store/vec4 v0x555555da7610_0, 0, 2; - %load/vec4 v0x555555da7320_0; - %subi 1, 0, 32; - %store/vec4 v0x555555da7320_0, 0, 32; - %jmp T_2.22; -T_2.23 ; - %load/vec4 v0x555555da7610_0; - %store/vec4 v0x555555da76f0_0, 0, 2; - %load/vec4 v0x555555da7530_0; - %store/vec4 v0x555555da7610_0, 0, 2; - %pushi/vec4 13, 0, 32; - %store/vec4 v0x555555da8bd0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_nCK, S_0x555555da8960; - %store/vec4 v0x555555da7320_0, 0, 32; - %load/vec4 v0x555555da7610_0; - %store/vec4 v0x555555da7610_0, 0, 2; -T_2.24 ; - %load/vec4 v0x555555da7320_0; - %cmpi/ne 0, 0, 32; - %jmp/0xz T_2.25, 4; - %load/vec4 v0x555555da7610_0; - %subi 1, 0, 2; - %store/vec4 v0x555555da7610_0, 0, 2; - %load/vec4 v0x555555da7320_0; - %subi 1, 0, 32; - %store/vec4 v0x555555da7320_0, 0, 32; - %jmp T_2.24; -T_2.25 ; - %load/vec4 v0x555555da7610_0; - %store/vec4 v0x555555da70a0_0, 0, 2; -T_2.26 ; - %load/vec4 v0x555555da70a0_0; - %load/vec4 v0x555555da76f0_0; - %cmp/e; - %jmp/1 T_2.28, 4; - %flag_mov 8, 4; - %load/vec4 v0x555555da70a0_0; - %load/vec4 v0x555555da7530_0; - %cmp/e; - %flag_or 4, 8; -T_2.28; - %jmp/0xz T_2.27, 4; - %load/vec4 v0x555555da70a0_0; - %subi 1, 0, 2; - %store/vec4 v0x555555da70a0_0, 0, 2; - %jmp T_2.26; -T_2.27 ; - %pushi/vec4 0, 0, 2; - %store/vec4 v0x555555da7180_0, 0, 2; -T_2.29 ; - %load/vec4 v0x555555da7180_0; - %load/vec4 v0x555555da76f0_0; - %cmp/e; - %jmp/1 T_2.32, 4; - %flag_mov 8, 4; - %load/vec4 v0x555555da7180_0; - %load/vec4 v0x555555da7530_0; - %cmp/e; - %flag_or 4, 8; -T_2.32; - %jmp/1 T_2.31, 4; - %flag_mov 8, 4; - %load/vec4 v0x555555da7180_0; - %load/vec4 v0x555555da70a0_0; - %cmp/e; - %flag_or 4, 8; -T_2.31; - %jmp/0xz T_2.30, 4; - %load/vec4 v0x555555da7180_0; - %subi 1, 0, 2; - %store/vec4 v0x555555da7180_0, 0, 2; - %jmp T_2.29; -T_2.30 ; - %load/vec4 v0x555555da7260_0; - %dup/vec4; - %pushi/vec4 5, 0, 4; - %cmp/u; - %jmp/1 T_2.33, 6; - %dup/vec4; - %pushi/vec4 4, 0, 4; - %cmp/u; - %jmp/1 T_2.34, 6; - %dup/vec4; - %pushi/vec4 3, 0, 4; - %cmp/u; - %jmp/1 T_2.35, 6; - %dup/vec4; - %pushi/vec4 2, 0, 4; - %cmp/u; - %jmp/1 T_2.36, 6; - %jmp T_2.38; -T_2.33 ; - %load/vec4 v0x555555da7530_0; - %ret/vec4 0, 0, 2; Assign to get_slot (store_vec4_to_lval) - %jmp T_2.38; -T_2.34 ; - %load/vec4 v0x555555da76f0_0; - %ret/vec4 0, 0, 2; Assign to get_slot (store_vec4_to_lval) - %jmp T_2.38; -T_2.35 ; - %load/vec4 v0x555555da70a0_0; - %ret/vec4 0, 0, 2; Assign to get_slot (store_vec4_to_lval) - %jmp T_2.38; -T_2.36 ; - %load/vec4 v0x555555da7180_0; - %ret/vec4 0, 0, 2; Assign to get_slot (store_vec4_to_lval) - %jmp T_2.38; -T_2.38 ; - %pop/vec4 1; - %end; -S_0x555555da77d0 .scope function.vec4.u32, "max" "max" 2 1683, 2 1683 0, S_0x555555cfe490; - .timescale 0 0; -v0x555555da7a00_0 .var/i "a", 31 0; -v0x555555da7b00_0 .var/i "b", 31 0; -; Variable max is vec4 return value of scope S_0x555555da77d0 -TD_ddr3_controller.max ; - %load/vec4 v0x555555da7b00_0; - %load/vec4 v0x555555da7a00_0; - %cmp/s; - %flag_or 5, 4; - %jmp/0xz T_3.39, 5; - %load/vec4 v0x555555da7a00_0; - %ret/vec4 0, 0, 32; Assign to max (store_vec4_to_lval) - %jmp T_3.40; -T_3.39 ; - %load/vec4 v0x555555da7b00_0; - %ret/vec4 0, 0, 32; Assign to max (store_vec4_to_lval) -T_3.40 ; - %end; -S_0x555555da7ca0 .scope function.vec4.s19, "nCK_to_cycles" "nCK_to_cycles" 2 1655, 2 1655 0, S_0x555555cfe490; - .timescale 0 0; -v0x555555da7e80_0 .var/i "nCK", 31 0; -; Variable nCK_to_cycles is vec4 return value of scope S_0x555555da7ca0 -v0x555555da8060_0 .var/i "result", 31 0; -TD_ddr3_controller.nCK_to_cycles ; - %load/vec4 v0x555555da7e80_0; - %cvt/rv/s; - %pushi/real 1073741824, 4066; load=1.00000 - %mul/wr; - %pushi/vec4 4, 0, 32; - %cvt/rv/s; - %div/wr; - %vpi_func/r 2 1658 "$ceil", W<0,r> {0 1 0}; - %vpi_func 2 1658 "$rtoi" 32, W<0,r> {0 1 0}; - %store/vec4 v0x555555da8060_0, 0, 32; - %load/vec4 v0x555555da8060_0; - %parti/s 19, 0, 2; - %ret/vec4 0, 0, 19; Assign to nCK_to_cycles (store_vec4_to_lval) - %end; -S_0x555555da8120 .scope function.vec4.u32, "nCK_to_ns" "nCK_to_ns" 2 1674, 2 1674 0, S_0x555555cfe490; - .timescale 0 0; -v0x555555da8300_0 .var/i "nCK", 31 0; -; Variable nCK_to_ns is vec4 return value of scope S_0x555555da8120 -TD_ddr3_controller.nCK_to_ns ; - %load/vec4 v0x555555da8300_0; - %cvt/rv/s; - %pushi/real 1073741824, 4066; load=1.00000 - %mul/wr; - %pushi/real 1342177280, 4067; load=2.50000 - %mul/wr; - %vpi_func/r 2 1675 "$ceil", W<0,r> {0 1 0}; - %vpi_func 2 1675 "$rtoi" 32, W<0,r> {0 1 0}; - %ret/vec4 0, 0, 32; Assign to nCK_to_ns (store_vec4_to_lval) - %end; -S_0x555555da84e0 .scope function.vec4.s19, "ns_to_cycles" "ns_to_cycles" 2 1646, 2 1646 0, S_0x555555cfe490; - .timescale 0 0; -v0x555555da86c0_0 .var/i "ns", 31 0; -; Variable ns_to_cycles is vec4 return value of scope S_0x555555da84e0 -v0x555555da88a0_0 .var/i "result", 31 0; -TD_ddr3_controller.ns_to_cycles ; - %load/vec4 v0x555555da86c0_0; - %cvt/rv/s; - %pushi/real 1073741824, 4066; load=1.00000 - %mul/wr; - %pushi/real 1342177280, 4069; load=10.0000 - %div/wr; - %vpi_func/r 2 1649 "$ceil", W<0,r> {0 1 0}; - %vpi_func 2 1649 "$rtoi" 32, W<0,r> {0 1 0}; - %store/vec4 v0x555555da88a0_0, 0, 32; - %load/vec4 v0x555555da88a0_0; - %parti/s 19, 0, 2; - %ret/vec4 0, 0, 19; Assign to ns_to_cycles (store_vec4_to_lval) - %end; -S_0x555555da8960 .scope function.vec4.u32, "ns_to_nCK" "ns_to_nCK" 2 1665, 2 1665 0, S_0x555555cfe490; - .timescale 0 0; -v0x555555da8bd0_0 .var/i "ns", 31 0; -; Variable ns_to_nCK is vec4 return value of scope S_0x555555da8960 -TD_ddr3_controller.ns_to_nCK ; - %load/vec4 v0x555555da8bd0_0; - %cvt/rv/s; - %pushi/real 1073741824, 4066; load=1.00000 - %mul/wr; - %pushi/real 1342177280, 4067; load=2.50000 - %div/wr; - %vpi_func/r 2 1666 "$ceil", W<0,r> {0 1 0}; - %vpi_func 2 1666 "$rtoi" 32, W<0,r> {0 1 0}; - %ret/vec4 0, 0, 32; Assign to ns_to_nCK (store_vec4_to_lval) - %end; -S_0x555555da8db0 .scope function.vec4.s28, "read_rom_instruction" "read_rom_instruction" 2 508, 2 508 0, S_0x555555cfe490; - .timescale 0 0; -v0x555555da8f40_0 .var "instruction_address", 4 0; -; Variable read_rom_instruction is vec4 return value of scope S_0x555555da8db0 -TD_ddr3_controller.read_rom_instruction ; - %load/vec4 v0x555555da8f40_0; - %dup/vec4; - %pushi/vec4 0, 0, 5; - %cmp/u; - %jmp/1 T_8.41, 6; - %dup/vec4; - %pushi/vec4 1, 0, 5; - %cmp/u; - %jmp/1 T_8.42, 6; - %dup/vec4; - %pushi/vec4 2, 0, 5; - %cmp/u; - %jmp/1 T_8.43, 6; - %dup/vec4; - %pushi/vec4 3, 0, 5; - %cmp/u; - %jmp/1 T_8.44, 6; - %dup/vec4; - %pushi/vec4 4, 0, 5; - %cmp/u; - %jmp/1 T_8.45, 6; - %dup/vec4; - %pushi/vec4 5, 0, 5; - %cmp/u; - %jmp/1 T_8.46, 6; - %dup/vec4; - %pushi/vec4 6, 0, 5; - %cmp/u; - %jmp/1 T_8.47, 6; - %dup/vec4; - %pushi/vec4 7, 0, 5; - %cmp/u; - %jmp/1 T_8.48, 6; - %dup/vec4; - %pushi/vec4 8, 0, 5; - %cmp/u; - %jmp/1 T_8.49, 6; - %dup/vec4; - %pushi/vec4 9, 0, 5; - %cmp/u; - %jmp/1 T_8.50, 6; - %dup/vec4; - %pushi/vec4 10, 0, 5; - %cmp/u; - %jmp/1 T_8.51, 6; - %dup/vec4; - %pushi/vec4 11, 0, 5; - %cmp/u; - %jmp/1 T_8.52, 6; - %dup/vec4; - %pushi/vec4 12, 0, 5; - %cmp/u; - %jmp/1 T_8.53, 6; - %dup/vec4; - %pushi/vec4 13, 0, 5; - %cmp/u; - %jmp/1 T_8.54, 6; - %dup/vec4; - %pushi/vec4 14, 0, 5; - %cmp/u; - %jmp/1 T_8.55, 6; - %dup/vec4; - %pushi/vec4 15, 0, 5; - %cmp/u; - %jmp/1 T_8.56, 6; - %dup/vec4; - %pushi/vec4 16, 0, 5; - %cmp/u; - %jmp/1 T_8.57, 6; - %dup/vec4; - %pushi/vec4 17, 0, 5; - %cmp/u; - %jmp/1 T_8.58, 6; - %dup/vec4; - %pushi/vec4 18, 0, 5; - %cmp/u; - %jmp/1 T_8.59, 6; - %dup/vec4; - %pushi/vec4 19, 0, 5; - %cmp/u; - %jmp/1 T_8.60, 6; - %dup/vec4; - %pushi/vec4 20, 0, 5; - %cmp/u; - %jmp/1 T_8.61, 6; - %dup/vec4; - %pushi/vec4 21, 0, 5; - %cmp/u; - %jmp/1 T_8.62, 6; - %dup/vec4; - %pushi/vec4 22, 0, 5; - %cmp/u; - %jmp/1 T_8.63, 6; - %pushi/vec4 28835840, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.41 ; - %pushi/vec4 8, 0, 5; - %concati/vec4 7, 0, 4; - %pushi/vec4 200, 0, 32; - %store/vec4 v0x555555da86c0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_cycles, S_0x555555da84e0; - %concat/vec4; draw_concat_vec4 - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.42 ; - %pushi/vec4 9, 0, 5; - %concati/vec4 7, 0, 4; - %pushi/vec4 500, 0, 32; - %store/vec4 v0x555555da86c0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_cycles, S_0x555555da84e0; - %concat/vec4; draw_concat_vec4 - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.43 ; - %pushi/vec4 11, 0, 5; - %concati/vec4 7, 0, 4; - %pushi/vec4 360, 0, 32; - %store/vec4 v0x555555da86c0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_cycles, S_0x555555da84e0; - %concat/vec4; draw_concat_vec4 - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.44 ; - %pushi/vec4 25296960, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.45 ; - %pushi/vec4 25362432, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.46 ; - %pushi/vec4 25233476, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.47 ; - %pushi/vec4 58722080, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.48 ; - %pushi/vec4 95944707, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.49 ; - %pushi/vec4 128974976, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.50 ; - %pushi/vec4 15, 0, 5; - %concati/vec4 2, 0, 4; - %pushi/vec4 14, 0, 32; - %store/vec4 v0x555555da86c0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_cycles, S_0x555555da84e0; - %concat/vec4; draw_concat_vec4 - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.51 ; - %pushi/vec4 25362436, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.52 ; - %pushi/vec4 95944707, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.53 ; - %pushi/vec4 95944706, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.54 ; - %pushi/vec4 25362432, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.55 ; - %pushi/vec4 25233604, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.56 ; - %pushi/vec4 95944714, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.57 ; - %pushi/vec4 95944706, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.58 ; - %pushi/vec4 25233476, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.59 ; - %pushi/vec4 95944707, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.60 ; - %pushi/vec4 15, 0, 5; - %concati/vec4 2, 0, 4; - %pushi/vec4 14, 0, 32; - %store/vec4 v0x555555da86c0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_cycles, S_0x555555da84e0; - %concat/vec4; draw_concat_vec4 - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.61 ; - %pushi/vec4 11, 0, 5; - %concati/vec4 1, 0, 4; - %pushi/vec4 350, 0, 32; - %store/vec4 v0x555555da86c0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_cycles, S_0x555555da84e0; - %concat/vec4; draw_concat_vec4 - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.62 ; - %pushi/vec4 27, 0, 5; - %concati/vec4 7, 0, 4; - %pushi/vec4 7800, 0, 32; - %store/vec4 v0x555555da86c0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_cycles, S_0x555555da84e0; - %concat/vec4; draw_concat_vec4 - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.63 ; - %pushi/vec4 95944709, 0, 28; - %ret/vec4 0, 0, 28; Assign to read_rom_instruction (store_vec4_to_lval) - %jmp T_8.65; -T_8.65 ; - %pop/vec4 1; - %end; -S_0x555555d02bb0 .scope module, "mini_fifo" "mini_fifo" 2 3346; - .timescale 0 0; - .port_info 0 /INPUT 1 "i_clk"; - .port_info 1 /INPUT 1 "i_rst_n"; - .port_info 2 /INPUT 1 "read_fifo"; - .port_info 3 /INPUT 1 "write_fifo"; - .port_info 4 /OUTPUT 1 "empty"; - .port_info 5 /OUTPUT 1 "full"; - .port_info 6 /INPUT 8 "write_data"; - .port_info 7 /OUTPUT 8 "read_data"; - .port_info 8 /OUTPUT 8 "read_data_next"; -P_0x555555b810b0 .param/l "DATA_WIDTH" 0 2 3348, +C4<00000000000000000000000000001000>; -P_0x555555b810f0 .param/l "FIFO_WIDTH" 0 2 3347, +C4<00000000000000000000000000000001>; -L_0x555555dc80f0 .functor BUFZ 8, L_0x555555dc8660, C4<00000000>, C4<00000000>, C4<00000000>; -L_0x555555dc8c40 .functor BUFZ 8, L_0x555555dc8890, C4<00000000>, C4<00000000>, C4<00000000>; -v0x555555db4d80_0 .net *"_ivl_0", 7 0, L_0x555555dc8660; 1 drivers -v0x555555db4e80_0 .net *"_ivl_11", 0 0, L_0x555555dc8960; 1 drivers -v0x555555db4f40_0 .net *"_ivl_12", 2 0, L_0x555555dc8ab0; 1 drivers -L_0x7eff80b5c3c0 .functor BUFT 1, C4<00>, C4<0>, C4<0>, C4<0>; -v0x555555db5030_0 .net *"_ivl_15", 1 0, L_0x7eff80b5c3c0; 1 drivers -v0x555555db5110_0 .net *"_ivl_2", 2 0, L_0x555555dc8700; 1 drivers -L_0x7eff80b5c378 .functor BUFT 1, C4<00>, C4<0>, C4<0>, C4<0>; -v0x555555db5240_0 .net *"_ivl_5", 1 0, L_0x7eff80b5c378; 1 drivers -v0x555555db5320_0 .net *"_ivl_8", 7 0, L_0x555555dc8890; 1 drivers -v0x555555db5400_0 .var "empty", 0 0; -v0x555555db54c0 .array "fifo_reg", 0 1, 7 0; -v0x555555db5610_0 .var "full", 0 0; -o0x7eff80ba9008 .functor BUFZ 1, C4; HiZ drive -v0x555555db56d0_0 .net "i_clk", 0 0, o0x7eff80ba9008; 0 drivers -o0x7eff80ba9038 .functor BUFZ 1, C4; HiZ drive -v0x555555db5790_0 .net "i_rst_n", 0 0, o0x7eff80ba9038; 0 drivers -v0x555555db5850_0 .net "read_data", 7 0, L_0x555555dc80f0; 1 drivers -v0x555555db5930_0 .net "read_data_next", 7 0, L_0x555555dc8c40; 1 drivers -o0x7eff80ba90c8 .functor BUFZ 1, C4; HiZ drive -v0x555555db5a10_0 .net "read_fifo", 0 0, o0x7eff80ba90c8; 0 drivers -v0x555555db5ad0_0 .var "read_pointer", 0 0; -o0x7eff80ba9128 .functor BUFZ 8, C4; HiZ drive -v0x555555db5bb0_0 .net "write_data", 7 0, o0x7eff80ba9128; 0 drivers -o0x7eff80ba9158 .functor BUFZ 1, C4; HiZ drive -v0x555555db5c90_0 .net "write_fifo", 0 0, o0x7eff80ba9158; 0 drivers -v0x555555db5d50_0 .var "write_pointer", 0 0; -E_0x555555d8c690/0 .event negedge, v0x555555db5790_0; -E_0x555555d8c690/1 .event posedge, v0x555555db56d0_0; -E_0x555555d8c690 .event/or E_0x555555d8c690/0, E_0x555555d8c690/1; -L_0x555555dc8660 .array/port v0x555555db54c0, L_0x555555dc8700; -L_0x555555dc8700 .concat [ 1 2 0 0], v0x555555db5ad0_0, L_0x7eff80b5c378; -L_0x555555dc8890 .array/port v0x555555db54c0, L_0x555555dc8ab0; -L_0x555555dc8960 .reduce/nor v0x555555db5ad0_0; -L_0x555555dc8ab0 .concat [ 1 2 0 0], L_0x555555dc8960, L_0x7eff80b5c3c0; - .scope S_0x555555cfe490; -T_9 ; - %pushi/vec4 0, 0, 5; - %store/vec4 v0x555555daea70_0, 0, 5; - %pushi/vec4 70778885, 0, 28; - %store/vec4 v0x555555dae990_0, 0, 28; - %pushi/vec4 5, 0, 16; - %store/vec4 v0x555555dac970_0, 0, 16; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555daca50_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db11c0_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db0690_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db1ca0_0, 0, 1; - %pushi/vec4 0, 0, 16; - %store/vec4 v0x555555db14c0_0, 0, 16; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db1f00_0, 0, 1; - %pushi/vec4 0, 0, 512; - %store/vec4 v0x555555db1760_0, 0, 512; - %pushi/vec4 0, 0, 64; - %store/vec4 v0x555555db1840_0, 0, 64; - %pushi/vec4 0, 0, 10; - %store/vec4 v0x555555db1680_0, 0, 10; - %pushi/vec4 0, 0, 3; - %store/vec4 v0x555555db15a0_0, 0, 3; - %pushi/vec4 0, 0, 16; - %store/vec4 v0x555555db1d60_0, 0, 16; - %pushi/vec4 0, 0, 10; - %store/vec4 v0x555555db1ae0_0, 0, 10; - %pushi/vec4 0, 0, 3; - %store/vec4 v0x555555db1a00_0, 0, 3; - %pushi/vec4 0, 0, 16; - %store/vec4 v0x555555db1bc0_0, 0, 16; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db2740_0, 0, 1; - %pushi/vec4 0, 0, 16; - %store/vec4 v0x555555db1fc0_0, 0, 16; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db2a60_0, 0, 1; - %pushi/vec4 0, 0, 64; - %store/vec4 v0x555555db2580_0, 0, 64; - %pushi/vec4 0, 0, 512; - %store/vec4 v0x555555db2380_0, 0, 512; - %pushi/vec4 0, 0, 10; - %store/vec4 v0x555555db2180_0, 0, 10; - %pushi/vec4 0, 0, 3; - %store/vec4 v0x555555db20a0_0, 0, 3; - %pushi/vec4 0, 0, 16; - %store/vec4 v0x555555db2800_0, 0, 16; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555dab6d0_0, 0, 1; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db0450_0, 0, 1; - %pushi/vec4 0, 0, 40; - %store/vec4 v0x555555dad110_0, 0, 40; - %pushi/vec4 0, 0, 4; - %store/vec4 v0x555555dacd90_0, 0, 4; - %pushi/vec4 0, 0, 6; - %store/vec4 v0x555555dace70_0, 0, 6; - %pushi/vec4 0, 0, 6; - %store/vec4 v0x555555dad030_0, 0, 6; - %pushi/vec4 0, 0, 6; - %store/vec4 v0x555555dad1f0_0, 0, 6; - %pushi/vec4 0, 0, 6; - %store/vec4 v0x555555dad2d0_0, 0, 6; - %pushi/vec4 0, 0, 6; - %store/vec4 v0x555555dacbd0_0, 0, 6; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555dacf50_0, 0, 1; - %pushi/vec4 0, 0, 4; - %store/vec4 v0x555555dac390_0, 0, 4; - %pushi/vec4 0, 0, 5; - %store/vec4 v0x555555dac890_0, 0, 5; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555dae8d0_0, 0, 1; - %pushi/vec4 0, 0, 3; - %store/vec4 v0x555555daecd0_0, 0, 3; - %pushi/vec4 0, 0, 16; - %store/vec4 v0x555555daccb0_0, 0, 16; - %pushi/vec4 0, 0, 4; - %store/vec4 v0x555555daada0_0, 0, 4; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db4000_0, 0, 1; - %pushi/vec4 0, 0, 16; - %store/vec4 v0x555555db3b20_0, 0, 16; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db40c0_0, 0, 1; - %pushi/vec4 0, 0, 10; - %store/vec4 v0x555555db3c00_0, 0, 10; - %pushi/vec4 0, 0, 512; - %store/vec4 v0x555555db3ce0_0, 0, 512; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db3f40_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db3e80_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db3dc0_0, 0, 1; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db0810_0, 0, 1; - %pushi/vec4 0, 0, 512; - %store/vec4 v0x555555db10e0_0, 0, 512; - %pushi/vec4 0, 0, 128; - %store/vec4 v0x555555db4740_0, 0, 128; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db3800_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db38c0_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db3980_0, 0, 1; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555db2e60_0, 0, 32; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555db2f40_0, 0, 32; - %pushi/vec4 0, 0, 4; - %store/vec4 v0x555555db3720_0, 0, 4; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db29a0_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db28e0_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db1e40_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db1920_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db2660_0, 0, 1; - %end; - .thread T_9; - .scope S_0x555555cfe490; -T_10 ; - %pushi/vec4 0, 0, 8; - %store/vec4 v0x555555daee90_0, 0, 8; - %end; - .thread T_10; - .scope S_0x555555cfe490; -T_11 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_11.0 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 8, 0, 32; - %jmp/0xz T_11.1, 5; - %pushi/vec4 0, 0, 1; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4 v0x555555dab330_0, 4, 1; - %pushi/vec4 0, 0, 1; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4 v0x555555dab250_0, 4, 1; - %pushi/vec4 0, 0, 16; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dab040, 4, 0; - %pushi/vec4 0, 0, 16; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555daae80, 4, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_11.0; -T_11.1 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_11.2 ; - %load/vec4 v0x555555dae670_0; - %pad/u 36; - %cmpi/u 2, 0, 36; - %jmp/0xz T_11.3, 5; - %pushi/vec4 0, 0, 512; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555db2260, 4, 0; - %pushi/vec4 0, 0, 64; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555db2460, 4, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_11.2; -T_11.3 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_11.4 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 8, 0, 32; - %jmp/0xz T_11.5, 5; - %pushi/vec4 0, 0, 4; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dabd60, 4, 0; - %pushi/vec4 0, 0, 4; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555daba90, 4, 0; - %pushi/vec4 0, 0, 4; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dac680, 4, 0; - %pushi/vec4 0, 0, 4; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dac180, 4, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_11.4; -T_11.5 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_11.6 ; - %load/vec4 v0x555555dae670_0; - %pad/s 36; - %cmpi/s 6, 0, 36; - %jmp/0xz T_11.7, 5; - %pushi/vec4 0, 0, 17; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555db1340, 4, 0; - %pushi/vec4 0, 0, 17; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555db1280, 4, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_11.6; -T_11.7 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_11.8 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 4, 0, 32; - %jmp/0xz T_11.9, 5; - %pushi/vec4 67108863, 0, 26; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dab790, 4, 0; - %pushi/vec4 67108863, 0, 26; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dab4d0, 4, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_11.8; -T_11.9 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_11.10 ; - %load/vec4 v0x555555dae670_0; - %cmpi/u 8, 0, 32; - %jmp/0xz T_11.11, 5; - %pushi/vec4 0, 0, 5; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555db0510, 4, 0; - %pushi/vec4 8, 0, 5; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555db05d0, 4, 0; - %pushi/vec4 0, 0, 5; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dae410, 4, 0; - %pushi/vec4 8, 0, 5; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dae5b0, 4, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_11.10; -T_11.11 ; - %end; - .thread T_11; - .scope S_0x555555cfe490; -T_12 ; - %wait E_0x555555cb9a50; - %load/vec4 v0x555555dad990_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_12.0, 8; - %pushi/vec4 0, 0, 5; - %assign/vec4 v0x555555daea70_0, 0; - %pushi/vec4 70778885, 0, 28; - %assign/vec4 v0x555555dae990_0, 0; - %pushi/vec4 5, 0, 16; - %assign/vec4 v0x555555dac970_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555daca50_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db11c0_0, 0; - %jmp T_12.1; -T_12.0 ; - %load/vec4 v0x555555daca50_0; - %flag_set/vec4 8; - %jmp/0xz T_12.2, 8; - %load/vec4 v0x555555dae990_0; - %parti/s 16, 0, 2; - %assign/vec4 v0x555555dac970_0, 0; - %jmp T_12.3; -T_12.2 ; - %load/vec4 v0x555555dae990_0; - %parti/s 1, 26, 6; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_12.6, 9; - %load/vec4 v0x555555db0690_0; - %nor/r; - %and; -T_12.6; - %flag_set/vec4 8; - %jmp/0xz T_12.4, 8; - %load/vec4 v0x555555dac970_0; - %subi 1, 0, 16; - %assign/vec4 v0x555555dac970_0, 0; -T_12.4 ; -T_12.3 ; - %load/vec4 v0x555555dac970_0; - %pad/u 32; - %cmpi/e 1, 0, 32; - %jmp/1 T_12.9, 4; - %flag_mov 8, 4; - %load/vec4 v0x555555dae990_0; - %parti/s 1, 26, 6; - %nor/r; - %flag_set/vec4 9; - %flag_or 9, 8; - %flag_mov 4, 9; -T_12.9; - %jmp/0xz T_12.7, 4; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555daca50_0, 0; - %load/vec4 v0x555555daea70_0; - %store/vec4 v0x555555da8f40_0, 0, 5; - %callf/vec4 TD_ddr3_controller.read_rom_instruction, S_0x555555da8db0; - %assign/vec4 v0x555555dae990_0, 0; - %load/vec4 v0x555555daea70_0; - %cmpi/e 22, 0, 5; - %flag_mov 8, 4; - %jmp/0 T_12.10, 8; - %pushi/vec4 19, 0, 5; - %jmp/1 T_12.11, 8; -T_12.10 ; End of true expr. - %load/vec4 v0x555555daea70_0; - %addi 1, 0, 5; - %jmp/0 T_12.11, 8; - ; End of false expr. - %blend; -T_12.11; - %assign/vec4 v0x555555daea70_0, 0; - %jmp T_12.8; -T_12.7 ; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555daca50_0, 0; -T_12.8 ; - %load/vec4 v0x555555dae990_0; - %parti/s 1, 27, 6; - %flag_set/vec4 8; - %jmp/0 T_12.12, 8; - %pushi/vec4 1, 0, 1; - %jmp/1 T_12.13, 8; -T_12.12 ; End of true expr. - %load/vec4 v0x555555db11c0_0; - %jmp/0 T_12.13, 8; - ; End of false expr. - %blend; -T_12.13; - %assign/vec4 v0x555555db11c0_0, 0; -T_12.1 ; - %jmp T_12; - .thread T_12; - .scope S_0x555555cfe490; -T_13 ; - %wait E_0x555555cb9a50; - %load/vec4 v0x555555dad990_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_13.0, 8; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db02d0_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db0450_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db1ca0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db1f00_0, 0; - %pushi/vec4 0, 0, 10; - %assign/vec4 v0x555555db1680_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555db15a0_0, 0; - %pushi/vec4 0, 0, 16; - %assign/vec4 v0x555555db1d60_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555db1a00_0, 0; - %pushi/vec4 0, 0, 16; - %assign/vec4 v0x555555db1bc0_0, 0; - %pushi/vec4 0, 0, 10; - %assign/vec4 v0x555555db1ae0_0, 0; - %pushi/vec4 0, 0, 512; - %assign/vec4 v0x555555db1760_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db2740_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db2a60_0, 0; - %pushi/vec4 0, 0, 10; - %assign/vec4 v0x555555db2180_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555db20a0_0, 0; - %pushi/vec4 0, 0, 16; - %assign/vec4 v0x555555db2800_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555dab6d0_0, 0; - %pushi/vec4 0, 0, 512; - %assign/vec4 v0x555555db2380_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x555555db2580_0, 0; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_13.2 ; - %load/vec4 v0x555555dae670_0; - %cmpi/u 8, 0, 32; - %jmp/0xz T_13.3, 5; - %pushi/vec4 0, 0, 64; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db2ce0, 0, 4; - %pushi/vec4 0, 0, 8; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db2da0, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_13.2; -T_13.3 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_13.4 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 8, 0, 32; - %jmp/0xz T_13.5, 5; - %pushi/vec4 0, 0, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dabd60, 0, 4; - %pushi/vec4 0, 0, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555daba90, 0, 4; - %pushi/vec4 0, 0, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dac680, 0, 4; - %pushi/vec4 0, 0, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dac180, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_13.4; -T_13.5 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_13.6 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 8, 0, 32; - %jmp/0xz T_13.7, 5; - %pushi/vec4 0, 0, 1; - %ix/load 5, 0, 0; - %ix/getv/s 4, v0x555555dae670_0; - %assign/vec4/off/d v0x555555dab330_0, 4, 5; - %pushi/vec4 0, 0, 16; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dab040, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_13.6; -T_13.7 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_13.8 ; - %load/vec4 v0x555555dae670_0; - %pad/u 36; - %cmpi/u 2, 0, 36; - %jmp/0xz T_13.9, 5; - %pushi/vec4 0, 0, 512; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db2260, 0, 4; - %pushi/vec4 0, 0, 64; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db2460, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_13.8; -T_13.9 ; - %jmp T_13.1; -T_13.0 ; - %load/vec4 v0x555555db11c0_0; - %flag_set/vec4 8; - %jmp/0xz T_13.10, 8; - %load/vec4 v0x555555db0390_0; - %flag_set/vec4 8; - %flag_get/vec4 8; - %jmp/1 T_13.12, 8; - %load/vec4 v0x555555db2b20_0; - %pad/u 32; - %pushi/vec4 14, 0, 32; - %cmp/ne; - %flag_get/vec4 4; - %or; -T_13.12; - %assign/vec4 v0x555555db02d0_0, 0; - %load/vec4 v0x555555db0390_0; - %assign/vec4 v0x555555db0450_0, 0; - %load/vec4 v0x555555dab610_0; - %assign/vec4 v0x555555dab6d0_0, 0; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_13.13 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 8, 0, 32; - %jmp/0xz T_13.14, 5; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dabca0, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dabd60, 0, 4; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dab9d0, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555daba90, 0, 4; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dac470, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dac680, 0, 4; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dabf70, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dac180, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_13.13; -T_13.14 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_13.15 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 4, 0, 32; - %jmp/0xz T_13.16, 5; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dab4d0, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dab790, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_13.15; -T_13.16 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_13.17 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 8, 0, 32; - %jmp/0xz T_13.18, 5; - %load/vec4 v0x555555dab250_0; - %load/vec4 v0x555555dae670_0; - %part/s 1; - %ix/load 5, 0, 0; - %ix/getv/s 4, v0x555555dae670_0; - %assign/vec4/off/d v0x555555dab330_0, 4, 5; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555daae80, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dab040, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_13.17; -T_13.18 ; - %load/vec4 v0x555555daea70_0; - %pad/u 32; - %cmpi/e 20, 0, 32; - %jmp/0xz T_13.19, 4; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555dab6d0_0, 0; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_13.21 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 8, 0, 32; - %jmp/0xz T_13.22, 5; - %pushi/vec4 0, 0, 1; - %ix/load 5, 0, 0; - %ix/getv/s 4, v0x555555dae670_0; - %assign/vec4/off/d v0x555555dab330_0, 4, 5; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_13.21; -T_13.22 ; -T_13.19 ; - %load/vec4 v0x555555dae990_0; - %parti/s 1, 27, 6; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_13.23, 8; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db02d0_0, 0; -T_13.23 ; - %load/vec4 v0x555555db0450_0; - %nor/r; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_13.27, 9; - %load/vec4 v0x555555db29a0_0; - %and; -T_13.27; - %flag_set/vec4 8; - %jmp/0xz T_13.25, 8; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db1ca0_0, 0; - %load/vec4 v0x555555db1ca0_0; - %assign/vec4 v0x555555db2740_0, 0; - %load/vec4 v0x555555db14c0_0; - %assign/vec4 v0x555555db1fc0_0, 0; - %load/vec4 v0x555555db1f00_0; - %assign/vec4 v0x555555db2a60_0, 0; - %load/vec4 v0x555555db1840_0; - %inv; - %assign/vec4 v0x555555db2580_0, 0; - %load/vec4 v0x555555db1680_0; - %assign/vec4 v0x555555db2180_0, 0; - %load/vec4 v0x555555db15a0_0; - %assign/vec4 v0x555555db20a0_0, 0; - %load/vec4 v0x555555db1d60_0; - %assign/vec4 v0x555555db2800_0, 0; - %load/vec4 v0x555555db1760_0; - %assign/vec4 v0x555555db2380_0, 0; -T_13.25 ; - %load/vec4 v0x555555dae010_0; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_13.30, 9; - %load/vec4 v0x555555db02d0_0; - %nor/r; - %and; -T_13.30; - %flag_set/vec4 8; - %jmp/0xz T_13.28, 8; - %load/vec4 v0x555555dae290_0; - %assign/vec4 v0x555555db1ca0_0, 0; - %load/vec4 v0x555555dad490_0; - %assign/vec4 v0x555555db14c0_0, 0; - %load/vec4 v0x555555dae350_0; - %assign/vec4 v0x555555db1f00_0, 0; - %load/vec4 v0x555555dae1b0_0; - %assign/vec4 v0x555555db1840_0, 0; - %load/vec4 v0x555555dadf30_0; - %parti/s 7, 0, 2; - %concati/vec4 0, 0, 3; - %assign/vec4 v0x555555db1680_0, 0; - %load/vec4 v0x555555dadf30_0; - %parti/s 3, 7, 4; - %assign/vec4 v0x555555db15a0_0, 0; - %load/vec4 v0x555555dadf30_0; - %parti/s 16, 10, 5; - %assign/vec4 v0x555555db1d60_0, 0; - %load/vec4 v0x555555dadf30_0; - %addi 5, 0, 26; - %split/vec4 7; - %ix/load 4, 3, 0; - %ix/load 5, 0, 0; - %flag_set/imm 4, 0; - %assign/vec4/off/d v0x555555db1ae0_0, 4, 5; - %split/vec4 3; - %assign/vec4 v0x555555db1a00_0, 0; - %assign/vec4 v0x555555db1bc0_0, 0; - %load/vec4 v0x555555dae0d0_0; - %assign/vec4 v0x555555db1760_0, 0; - %jmp T_13.29; -T_13.28 ; - %load/vec4 v0x555555db2b20_0; - %pad/u 32; - %cmpi/ne 14, 0, 32; - %jmp/0xz T_13.31, 4; - %load/vec4 v0x555555db4000_0; - %assign/vec4 v0x555555db1ca0_0, 0; - %load/vec4 v0x555555db40c0_0; - %assign/vec4 v0x555555db1f00_0, 0; - %pushi/vec4 0, 0, 64; - %assign/vec4 v0x555555db1840_0, 0; - %load/vec4 v0x555555db3b20_0; - %assign/vec4 v0x555555db14c0_0, 0; - %load/vec4 v0x555555db3c00_0; - %assign/vec4 v0x555555db1680_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555db15a0_0, 0; - %pushi/vec4 0, 0, 16; - %assign/vec4 v0x555555db1d60_0, 0; - %pushi/vec4 0, 0, 26; - %split/vec4 7; - %ix/load 4, 3, 0; - %ix/load 5, 0, 0; - %flag_set/imm 4, 0; - %assign/vec4/off/d v0x555555db1ae0_0, 4, 5; - %split/vec4 3; - %assign/vec4 v0x555555db1a00_0, 0; - %assign/vec4 v0x555555db1bc0_0, 0; - %load/vec4 v0x555555db3ce0_0; - %assign/vec4 v0x555555db1760_0, 0; -T_13.31 ; -T_13.29 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_13.33 ; - %load/vec4 v0x555555dae670_0; - %cmpi/u 8, 0, 32; - %jmp/0xz T_13.34, 5; - %load/vec4 v0x555555db2380_0; - %pushi/vec4 448, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %load/vec4 v0x555555db2380_0; - %pushi/vec4 384, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2380_0; - %pushi/vec4 320, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2380_0; - %pushi/vec4 256, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2380_0; - %pushi/vec4 192, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2380_0; - %pushi/vec4 128, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2380_0; - %pushi/vec4 64, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2380_0; - %pushi/vec4 0, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %pad/u 128; - %ix/getv/s 5, v0x555555dae670_0; - %load/vec4a v0x555555dab910, 5; - %ix/vec4 4; - %shiftl 4; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555db2ce0, 4; - %pad/u 128; - %or; - %split/vec4 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 0, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2260, 5, 6; - %split/vec4 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 64, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2260, 5, 6; - %split/vec4 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 128, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2260, 5, 6; - %split/vec4 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 192, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2260, 5, 6; - %split/vec4 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 256, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2260, 5, 6; - %split/vec4 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 320, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2260, 5, 6; - %split/vec4 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 384, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2260, 5, 6; - %split/vec4 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 448, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2260, 5, 6; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db2ce0, 0, 4; - %load/vec4 v0x555555db2580_0; - %pushi/vec4 56, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %part/u 1; - %load/vec4 v0x555555db2580_0; - %pushi/vec4 48, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %part/u 1; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2580_0; - %pushi/vec4 40, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %part/u 1; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2580_0; - %pushi/vec4 32, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %part/u 1; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2580_0; - %pushi/vec4 24, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %part/u 1; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2580_0; - %pushi/vec4 16, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %part/u 1; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2580_0; - %pushi/vec4 8, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %part/u 1; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2580_0; - %pushi/vec4 0, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %part/u 1; - %concat/vec4; draw_concat_vec4 - %pad/u 16; - %ix/getv/s 5, v0x555555dae670_0; - %load/vec4a v0x555555dab910, 5; - %ix/load 5, 3, 0; - %flag_set/imm 4, 0; - %shiftr 5; - %ix/vec4 4; - %shiftl 4; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555db2da0, 4; - %pad/u 16; - %or; - %split/vec4 1; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 0, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2460, 5, 6; - %split/vec4 1; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 8, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2460, 5, 6; - %split/vec4 1; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 16, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2460, 5, 6; - %split/vec4 1; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 24, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2460, 5, 6; - %split/vec4 1; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 32, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2460, 5, 6; - %split/vec4 1; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 40, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2460, 5, 6; - %split/vec4 1; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 48, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2460, 5, 6; - %split/vec4 1; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 56, 0, 32; - %load/vec4 v0x555555dae670_0; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db2460, 5, 6; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db2da0, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_13.33; -T_13.34 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_13.35 ; - %load/vec4 v0x555555dae670_0; - %pad/u 36; - %cmpi/u 1, 0, 36; - %jmp/0xz T_13.36, 5; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555db2260, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %ix/vec4/s 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db2260, 0, 4; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555db2460, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %ix/vec4/s 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db2460, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_13.35; -T_13.36 ; - %load/vec4 v0x555555dae010_0; - %nor/r; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_13.39, 9; - %load/vec4 v0x555555db2b20_0; - %pad/u 32; - %pushi/vec4 14, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_13.39; - %flag_set/vec4 8; - %jmp/0xz T_13.37, 8; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db2740_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db1ca0_0, 0; -T_13.37 ; -T_13.10 ; -T_13.1 ; - %jmp T_13; - .thread T_13; - .scope S_0x555555cfe490; -T_14 ; - %wait E_0x555555ba4230; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db1920_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db2660_0, 0, 1; - %load/vec4 v0x555555dab6d0_0; - %flag_set/vec4 8; - %flag_get/vec4 8; - %jmp/1 T_14.0, 8; - %load/vec4 v0x555555db3f40_0; - %or; -T_14.0; - %store/vec4 v0x555555dab610_0, 0, 1; - %load/vec4 v0x555555dae990_0; - %parti/s 1, 24, 6; - %store/vec4 v0x555555dab410_0, 0, 1; - %load/vec4 v0x555555dae990_0; - %parti/s 1, 23, 6; - %store/vec4 v0x555555dab850_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db1e40_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db28e0_0, 0, 1; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db29a0_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db0390_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db0750_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555daac20_0, 0, 1; - %load/vec4 v0x555555db3e80_0; - %store/vec4 v0x555555db44c0_0, 0, 1; - %load/vec4 v0x555555db3dc0_0; - %store/vec4 v0x555555db4260_0, 0, 1; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_14.1 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 8, 0, 32; - %jmp/0xz T_14.2, 5; - %load/vec4 v0x555555dab330_0; - %load/vec4 v0x555555dae670_0; - %part/s 1; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4 v0x555555dab250_0, 4, 1; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dab040, 4; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555daae80, 4, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_14.1; -T_14.2 ; - %load/vec4 v0x555555daca50_0; - %nor/r; - %load/vec4 v0x555555dae990_0; - %parti/s 3, 19, 6; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab610_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dae990_0; - %parti/s 1, 24, 6; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dae990_0; - %parti/s 1, 23, 6; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dae990_0; - %parti/s 3, 16, 6; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dae990_0; - %parti/s 16, 0, 2; - %concat/vec4; draw_concat_vec4 - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555dab4d0, 4, 0; - %load/vec4 v0x555555dae990_0; - %parti/s 1, 25, 6; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %ix/load 5, 10, 0; - %flag_set/imm 4, 0; - %flag_or 4, 8; - %store/vec4a v0x555555dab4d0, 4, 5; - %load/vec4 v0x555555daeb50_0; - %nor/r; - %concati/vec4 5, 0, 3; - %load/vec4 v0x555555dab610_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab410_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab850_0; - %concat/vec4; draw_concat_vec4 - %concati/vec4 0, 0, 19; - %ix/load 4, 2, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555dab4d0, 4, 0; - %load/vec4 v0x555555daec10_0; - %nor/r; - %concati/vec4 4, 0, 3; - %load/vec4 v0x555555dab610_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab410_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab850_0; - %concat/vec4; draw_concat_vec4 - %concati/vec4 0, 0, 19; - %ix/load 4, 3, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555dab4d0, 4, 0; - %pushi/vec4 1, 0, 1; - %concati/vec4 3, 0, 3; - %load/vec4 v0x555555dab610_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab410_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab850_0; - %concat/vec4; draw_concat_vec4 - %concati/vec4 0, 0, 19; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555dab4d0, 4, 0; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_14.3 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 8, 0, 32; - %jmp/0xz T_14.4, 5; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dabd60, 4; - %pad/u 32; - %cmpi/e 0, 0, 32; - %flag_mov 8, 4; - %jmp/0 T_14.5, 8; - %pushi/vec4 0, 0, 4; - %jmp/1 T_14.6, 8; -T_14.5 ; End of true expr. - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dabd60, 4; - %subi 1, 0, 4; - %jmp/0 T_14.6, 8; - ; End of false expr. - %blend; -T_14.6; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dabca0, 4, 0; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555daba90, 4; - %pad/u 32; - %cmpi/e 0, 0, 32; - %flag_mov 8, 4; - %jmp/0 T_14.7, 8; - %pushi/vec4 0, 0, 4; - %jmp/1 T_14.8, 8; -T_14.7 ; End of true expr. - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555daba90, 4; - %subi 1, 0, 4; - %jmp/0 T_14.8, 8; - ; End of false expr. - %blend; -T_14.8; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dab9d0, 4, 0; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dac680, 4; - %pad/u 32; - %cmpi/e 0, 0, 32; - %flag_mov 8, 4; - %jmp/0 T_14.9, 8; - %pushi/vec4 0, 0, 4; - %jmp/1 T_14.10, 8; -T_14.9 ; End of true expr. - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dac680, 4; - %subi 1, 0, 4; - %jmp/0 T_14.10, 8; - ; End of false expr. - %blend; -T_14.10; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dac470, 4, 0; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dac180, 4; - %pad/u 32; - %cmpi/e 0, 0, 32; - %flag_mov 8, 4; - %jmp/0 T_14.11, 8; - %pushi/vec4 0, 0, 4; - %jmp/1 T_14.12, 8; -T_14.11 ; End of true expr. - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dac180, 4; - %subi 1, 0, 4; - %jmp/0 T_14.12, 8; - ; End of false expr. - %blend; -T_14.12; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dabf70, 4, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_14.3; -T_14.4 ; - %pushi/vec4 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_14.13 ; - %load/vec4 v0x555555dae670_0; - %pad/s 36; - %cmpi/s 6, 0, 36; - %jmp/0xz T_14.14, 5; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555db1340, 4; - %load/vec4 v0x555555dae670_0; - %subi 1, 0, 32; - %ix/vec4/s 4; - %store/vec4a v0x555555db1280, 4, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_14.13; -T_14.14 ; - %pushi/vec4 0, 0, 17; - %ix/load 4, 5, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555db1280, 4, 0; - %load/vec4 v0x555555db2740_0; - %flag_set/vec4 8; - %jmp/0xz T_14.15, 8; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db28e0_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db29a0_0, 0, 1; - %load/vec4 v0x555555dab330_0; - %load/vec4 v0x555555db20a0_0; - %part/u 1; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.19, 9; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dab040, 4; - %load/vec4 v0x555555db2800_0; - %cmp/e; - %flag_get/vec4 4; - %and; -T_14.19; - %flag_set/vec4 8; - %jmp/0xz T_14.17, 8; - %load/vec4 v0x555555db2a60_0; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.22, 9; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dac680, 4; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_14.22; - %flag_set/vec4 8; - %jmp/0xz T_14.20, 8; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db28e0_0, 0, 1; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db29a0_0, 0, 1; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555dab610_0, 0, 1; - %load/vec4 v0x555555db1fc0_0; - %concati/vec4 1, 0, 1; - %ix/load 4, 5, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555db1280, 4, 0; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dabd60, 4; - %cmpi/u 4, 0, 4; - %flag_or 5, 4; - %jmp/0xz T_14.23, 5; - %pushi/vec4 4, 0, 4; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dabca0, 4, 0; -T_14.23 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_14.25 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 8, 0, 32; - %jmp/0xz T_14.26, 5; - %pushi/vec4 3, 0, 4; - %ix/getv/s 4, v0x555555dae670_0; - %store/vec4a v0x555555dabf70, 4, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_14.25; -T_14.26 ; - %pushi/vec4 3, 0, 4; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dabf70, 4, 0; - %pushi/vec4 0, 0, 4; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dac470, 4, 0; - %pushi/vec4 0, 0, 1; - %concati/vec4 4, 0, 3; - %load/vec4 v0x555555dab610_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab410_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab850_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db20a0_0; - %concat/vec4; draw_concat_vec4 - %concati/vec4 0, 0, 5; - %concati/vec4 0, 0, 1; - %load/vec4 v0x555555db2180_0; - %concat/vec4; draw_concat_vec4 - %ix/load 4, 3, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555dab4d0, 4, 0; - %load/vec4 v0x555555dab610_0; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %ix/load 5, 21, 0; - %flag_set/imm 4, 0; - %flag_or 4, 8; - %store/vec4a v0x555555dab4d0, 4, 5; - %load/vec4 v0x555555dab610_0; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %ix/load 5, 21, 0; - %flag_set/imm 4, 0; - %flag_or 4, 8; - %store/vec4a v0x555555dab4d0, 4, 5; - %load/vec4 v0x555555dab610_0; - %ix/load 4, 2, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %ix/load 5, 21, 0; - %flag_set/imm 4, 0; - %flag_or 4, 8; - %store/vec4a v0x555555dab4d0, 4, 5; - %load/vec4 v0x555555dab610_0; - %ix/load 4, 3, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %ix/load 5, 21, 0; - %flag_set/imm 4, 0; - %flag_or 4, 8; - %store/vec4a v0x555555dab4d0, 4, 5; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db44c0_0, 0, 1; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db4260_0, 0, 1; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db2660_0, 0, 1; - %jmp T_14.21; -T_14.20 ; - %load/vec4 v0x555555db2a60_0; - %nor/r; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.29, 9; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dac180, 4; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_14.29; - %flag_set/vec4 8; - %jmp/0xz T_14.27, 8; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db28e0_0, 0, 1; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db29a0_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555dab610_0, 0, 1; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dabd60, 4; - %cmpi/u 1, 0, 4; - %flag_or 5, 4; - %jmp/0xz T_14.30, 5; - %pushi/vec4 1, 0, 4; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dabca0, 4, 0; -T_14.30 ; - %pushi/vec4 0, 0, 4; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dabf70, 4, 0; - %pushi/vec4 1, 0, 4; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dac470, 4, 0; - %load/vec4 v0x555555db1fc0_0; - %concati/vec4 1, 0, 1; - %ix/load 4, 5, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555db1280, 4, 0; - %pushi/vec4 0, 0, 1; - %concati/vec4 5, 0, 3; - %load/vec4 v0x555555dab610_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab410_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab850_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db20a0_0; - %concat/vec4; draw_concat_vec4 - %concati/vec4 0, 0, 5; - %concati/vec4 0, 0, 1; - %load/vec4 v0x555555db2180_0; - %concat/vec4; draw_concat_vec4 - %ix/load 4, 2, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555dab4d0, 4, 0; - %load/vec4 v0x555555dab610_0; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %ix/load 5, 21, 0; - %flag_set/imm 4, 0; - %flag_or 4, 8; - %store/vec4a v0x555555dab4d0, 4, 5; - %load/vec4 v0x555555dab610_0; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %ix/load 5, 21, 0; - %flag_set/imm 4, 0; - %flag_or 4, 8; - %store/vec4a v0x555555dab4d0, 4, 5; - %load/vec4 v0x555555dab610_0; - %ix/load 4, 2, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %ix/load 5, 21, 0; - %flag_set/imm 4, 0; - %flag_or 4, 8; - %store/vec4a v0x555555dab4d0, 4, 5; - %load/vec4 v0x555555dab610_0; - %ix/load 4, 3, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %ix/load 5, 21, 0; - %flag_set/imm 4, 0; - %flag_or 4, 8; - %store/vec4a v0x555555dab4d0, 4, 5; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db2660_0, 0, 1; -T_14.27 ; -T_14.21 ; - %jmp T_14.18; -T_14.17 ; - %load/vec4 v0x555555dab330_0; - %load/vec4 v0x555555db20a0_0; - %part/u 1; - %nor/r; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.34, 9; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555daba90, 4; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_14.34; - %flag_set/vec4 8; - %jmp/0xz T_14.32, 8; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555daac20_0, 0, 1; - %pushi/vec4 3, 0, 4; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dabca0, 4, 0; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dac180, 4; - %cmpi/u 0, 0, 4; - %flag_or 5, 4; - %jmp/0xz T_14.35, 5; - %pushi/vec4 0, 0, 4; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dabf70, 4, 0; -T_14.35 ; - %pushi/vec4 0, 0, 4; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dac470, 4, 0; - %pushi/vec4 0, 0, 1; - %concati/vec4 3, 0, 3; - %load/vec4 v0x555555dab610_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab410_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab850_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db20a0_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db2800_0; - %concat/vec4; draw_concat_vec4 - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555dab4d0, 4, 0; - %pushi/vec4 1, 0, 1; - %ix/getv 4, v0x555555db20a0_0; - %store/vec4 v0x555555dab250_0, 4, 1; - %load/vec4 v0x555555db2800_0; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555daae80, 4, 0; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db2660_0, 0, 1; - %jmp T_14.33; -T_14.32 ; - %load/vec4 v0x555555dab330_0; - %load/vec4 v0x555555db20a0_0; - %part/u 1; - %flag_set/vec4 10; - %flag_get/vec4 10; - %jmp/0 T_14.40, 10; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dab040, 4; - %load/vec4 v0x555555db2800_0; - %cmp/ne; - %flag_get/vec4 4; - %and; -T_14.40; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.39, 9; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dabd60, 4; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_14.39; - %flag_set/vec4 8; - %jmp/0xz T_14.37, 8; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db0750_0, 0, 1; - %pushi/vec4 1, 0, 4; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dab9d0, 4, 0; - %pushi/vec4 0, 0, 1; - %concati/vec4 2, 0, 3; - %load/vec4 v0x555555dab610_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab410_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab850_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db20a0_0; - %concat/vec4; draw_concat_vec4 - %pushi/vec4 0, 0, 5; - %concati/vec4 0, 0, 1; - %load/vec4 v0x555555db2800_0; - %parti/s 10, 0, 2; - %concat/vec4; draw_concat_vec4 - %concat/vec4; draw_concat_vec4 - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555dab4d0, 4, 0; - %pushi/vec4 0, 0, 1; - %ix/getv 4, v0x555555db20a0_0; - %store/vec4 v0x555555dab250_0, 4, 1; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db2660_0, 0, 1; -T_14.37 ; -T_14.33 ; -T_14.18 ; -T_14.15 ; - %load/vec4 v0x555555db1ca0_0; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.43, 9; - %load/vec4 v0x555555db1a00_0; - %load/vec4 v0x555555db20a0_0; - %cmp/e; - %flag_get/vec4 4; - %jmp/0 T_14.44, 4; - %load/vec4 v0x555555db2740_0; - %and; -T_14.44; - %nor/r; - %and; -T_14.43; - %flag_set/vec4 8; - %jmp/0xz T_14.41, 8; - %load/vec4 v0x555555dab330_0; - %load/vec4 v0x555555db1a00_0; - %part/u 1; - %flag_set/vec4 11; - %flag_get/vec4 11; - %jmp/0 T_14.49, 11; - %load/vec4 v0x555555db1a00_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dab040, 4; - %load/vec4 v0x555555db1bc0_0; - %cmp/ne; - %flag_get/vec4 4; - %and; -T_14.49; - %flag_set/vec4 10; - %flag_get/vec4 10; - %jmp/0 T_14.48, 10; - %load/vec4 v0x555555db1a00_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dabd60, 4; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_14.48; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.47, 9; - %load/vec4 v0x555555db0750_0; - %nor/r; - %and; -T_14.47; - %flag_set/vec4 8; - %jmp/0xz T_14.45, 8; - %pushi/vec4 1, 0, 4; - %load/vec4 v0x555555db1a00_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dab9d0, 4, 0; - %pushi/vec4 0, 0, 1; - %concati/vec4 2, 0, 3; - %load/vec4 v0x555555dab610_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab410_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab850_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db1a00_0; - %concat/vec4; draw_concat_vec4 - %pushi/vec4 0, 0, 5; - %concati/vec4 0, 0, 1; - %load/vec4 v0x555555db1bc0_0; - %parti/s 10, 0, 2; - %concat/vec4; draw_concat_vec4 - %concat/vec4; draw_concat_vec4 - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555dab4d0, 4, 0; - %pushi/vec4 0, 0, 1; - %ix/getv 4, v0x555555db1a00_0; - %store/vec4 v0x555555dab250_0, 4, 1; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db1920_0, 0, 1; - %jmp T_14.46; -T_14.45 ; - %load/vec4 v0x555555dab330_0; - %load/vec4 v0x555555db1a00_0; - %part/u 1; - %nor/r; - %flag_set/vec4 10; - %flag_get/vec4 10; - %jmp/0 T_14.53, 10; - %load/vec4 v0x555555db1a00_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555daba90, 4; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_14.53; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.52, 9; - %load/vec4 v0x555555daac20_0; - %nor/r; - %and; -T_14.52; - %flag_set/vec4 8; - %jmp/0xz T_14.50, 8; - %pushi/vec4 3, 0, 4; - %load/vec4 v0x555555db1a00_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dabca0, 4, 0; - %load/vec4 v0x555555db1a00_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dabf70, 4; - %cmpi/u 0, 0, 4; - %flag_or 5, 4; - %jmp/0xz T_14.54, 5; - %pushi/vec4 0, 0, 4; - %load/vec4 v0x555555db1a00_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dabf70, 4, 0; -T_14.54 ; - %pushi/vec4 0, 0, 4; - %load/vec4 v0x555555db1a00_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555dac470, 4, 0; - %pushi/vec4 0, 0, 1; - %concati/vec4 3, 0, 3; - %load/vec4 v0x555555dab610_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab410_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555dab850_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db1a00_0; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db1bc0_0; - %concat/vec4; draw_concat_vec4 - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %store/vec4a v0x555555dab4d0, 4, 0; - %pushi/vec4 1, 0, 1; - %ix/getv 4, v0x555555db1a00_0; - %store/vec4 v0x555555dab250_0, 4, 1; - %load/vec4 v0x555555db1bc0_0; - %load/vec4 v0x555555db1a00_0; - %pad/u 5; - %ix/vec4 4; - %store/vec4a v0x555555daae80, 4, 0; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db1920_0, 0, 1; -T_14.50 ; -T_14.46 ; -T_14.41 ; - %load/vec4 v0x555555db1ca0_0; - %flag_set/vec4 8; - %jmp/0xz T_14.56, 8; - %load/vec4 v0x555555dab250_0; - %load/vec4 v0x555555db15a0_0; - %part/u 1; - %nor/r; - %flag_set/vec4 8; - %jmp/1 T_14.60, 8; - %load/vec4 v0x555555dab250_0; - %load/vec4 v0x555555db15a0_0; - %part/u 1; - %flag_set/vec4 10; - %flag_get/vec4 10; - %jmp/0 T_14.61, 10; - %load/vec4 v0x555555db15a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555daae80, 4; - %load/vec4 v0x555555db1d60_0; - %cmp/ne; - %flag_get/vec4 4; - %and; -T_14.61; - %flag_set/vec4 9; - %flag_or 8, 9; -T_14.60; - %jmp/0xz T_14.58, 8; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db1e40_0, 0, 1; - %jmp T_14.59; -T_14.58 ; - %load/vec4 v0x555555db1f00_0; - %nor/r; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.64, 9; - %load/vec4 v0x555555db15a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dabf70, 4; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/ne; - %flag_get/vec4 4; - %and; -T_14.64; - %flag_set/vec4 8; - %jmp/0xz T_14.62, 8; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db1e40_0, 0, 1; - %jmp T_14.63; -T_14.62 ; - %load/vec4 v0x555555db1f00_0; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.67, 9; - %load/vec4 v0x555555db15a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dac470, 4; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/ne; - %flag_get/vec4 4; - %and; -T_14.67; - %flag_set/vec4 8; - %jmp/0xz T_14.65, 8; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db1e40_0, 0, 1; -T_14.65 ; -T_14.63 ; -T_14.59 ; -T_14.56 ; - %load/vec4 v0x555555db2740_0; - %flag_set/vec4 8; - %jmp/0xz T_14.68, 8; - %load/vec4 v0x555555dab250_0; - %load/vec4 v0x555555db20a0_0; - %part/u 1; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.72, 9; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555daae80, 4; - %load/vec4 v0x555555db2800_0; - %cmp/e; - %flag_get/vec4 4; - %and; -T_14.72; - %flag_set/vec4 8; - %jmp/0xz T_14.70, 8; - %load/vec4 v0x555555db2a60_0; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.75, 9; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dac470, 4; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_14.75; - %flag_set/vec4 8; - %jmp/0xz T_14.73, 8; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db28e0_0, 0, 1; - %jmp T_14.74; -T_14.73 ; - %load/vec4 v0x555555db2a60_0; - %nor/r; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_14.78, 9; - %load/vec4 v0x555555db20a0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dabf70, 4; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_14.78; - %flag_set/vec4 8; - %jmp/0xz T_14.76, 8; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db28e0_0, 0, 1; -T_14.76 ; -T_14.74 ; -T_14.70 ; -T_14.68 ; - %load/vec4 v0x555555db0450_0; - %flag_set/vec4 8; - %jmp/0xz T_14.79, 8; - %load/vec4 v0x555555db28e0_0; - %store/vec4 v0x555555db0390_0, 0, 1; - %jmp T_14.80; -T_14.79 ; - %load/vec4 v0x555555dae290_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_14.81, 8; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db0390_0, 0, 1; - %jmp T_14.82; -T_14.81 ; - %load/vec4 v0x555555db1ca0_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_14.83, 8; - %load/vec4 v0x555555db28e0_0; - %store/vec4 v0x555555db0390_0, 0, 1; - %jmp T_14.84; -T_14.83 ; - %load/vec4 v0x555555db1e40_0; - %store/vec4 v0x555555db0390_0, 0, 1; -T_14.84 ; -T_14.82 ; -T_14.80 ; - %load/vec4 v0x555555dae010_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_14.85, 8; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db0390_0, 0, 1; -T_14.85 ; - %jmp T_14; - .thread T_14, $push; - .scope S_0x555555cfe490; -T_15 ; - %wait E_0x555555cb9a50; - %load/vec4 v0x555555dad990_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_15.0, 8; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555dae750_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555dae810_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555db4660_0, 0; - %pushi/vec4 0, 0, 2; - %assign/vec4 v0x555555db4580_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555db43e0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db4320_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x555555db4180_0, 0; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.2 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 2, 0, 32; - %jmp/0xz T_15.3, 5; - %pushi/vec4 0, 0, 16; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dacb10, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.2; -T_15.3 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.4 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 2, 0, 32; - %jmp/0xz T_15.5, 5; - %pushi/vec4 0, 0, 512; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db0210, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.4; -T_15.5 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.6 ; - %load/vec4 v0x555555dae670_0; - %pad/s 36; - %cmpi/s 6, 0, 36; - %jmp/0xz T_15.7, 5; - %pushi/vec4 0, 0, 17; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db1340, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.6; -T_15.7 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.8 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 16, 0, 32; - %jmp/0xz T_15.9, 5; - %pushi/vec4 0, 0, 17; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dafe70, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.8; -T_15.9 ; - %jmp T_15.1; -T_15.0 ; - %load/vec4 v0x555555db44c0_0; - %flag_set/vec4 8; - %flag_get/vec4 8; - %jmp/1 T_15.10, 8; - %load/vec4 v0x555555db4580_0; - %parti/s 1, 0, 2; - %or; -T_15.10; - %ix/load 4, 0, 0; - %ix/load 5, 0, 0; - %flag_set/imm 4, 0; - %assign/vec4/off/d v0x555555db4660_0, 4, 5; - %load/vec4 v0x555555db44c0_0; - %ix/load 4, 0, 0; - %ix/load 5, 0, 0; - %flag_set/imm 4, 0; - %assign/vec4/off/d v0x555555db4580_0, 4, 5; - %load/vec4 v0x555555db4580_0; - %parti/s 1, 0, 2; - %ix/load 4, 1, 0; - %ix/load 5, 0, 0; - %flag_set/imm 4, 0; - %assign/vec4/off/d v0x555555db4580_0, 4, 5; - %load/vec4 v0x555555db44c0_0; - %flag_set/vec4 8; - %jmp/1 T_15.12, 8; - %load/vec4 v0x555555db4580_0; - %parti/s 1, 1, 2; - %flag_set/vec4 9; - %flag_or 8, 9; -T_15.12; - %flag_get/vec4 8; - %jmp/1 T_15.11, 8; - %load/vec4 v0x555555db4580_0; - %parti/s 1, 0, 2; - %or; -T_15.11; - %ix/load 4, 0, 0; - %ix/load 5, 0, 0; - %flag_set/imm 4, 0; - %assign/vec4/off/d v0x555555db43e0_0, 4, 5; - %load/vec4 v0x555555db4260_0; - %assign/vec4 v0x555555db4320_0, 0; - %load/vec4 v0x555555db4260_0; - %flag_set/vec4 8; - %flag_get/vec4 8; - %jmp/1 T_15.13, 8; - %load/vec4 v0x555555db4320_0; - %or; -T_15.13; - %ix/load 4, 0, 0; - %ix/load 5, 0, 0; - %flag_set/imm 4, 0; - %assign/vec4/off/d v0x555555db4180_0, 4, 5; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.14 ; - %load/vec4 v0x555555dae670_0; - %pad/u 36; - %cmpi/u 2, 0, 36; - %jmp/0xz T_15.15, 5; - %load/vec4 v0x555555db43e0_0; - %load/vec4 v0x555555dae670_0; - %part/s 1; - %ix/load 5, 0, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %ix/vec4/s 4; - %assign/vec4/off/d v0x555555db43e0_0, 4, 5; - %load/vec4 v0x555555db4660_0; - %load/vec4 v0x555555dae670_0; - %part/s 1; - %ix/load 5, 0, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %ix/vec4/s 4; - %assign/vec4/off/d v0x555555db4660_0, 4, 5; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.14; -T_15.15 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.16 ; - %load/vec4 v0x555555dae670_0; - %pad/u 36; - %cmpi/u 3, 0, 36; - %jmp/0xz T_15.17, 5; - %load/vec4 v0x555555db4180_0; - %load/vec4 v0x555555dae670_0; - %part/s 1; - %ix/load 5, 0, 0; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %ix/vec4/s 4; - %assign/vec4/off/d v0x555555db4180_0, 4, 5; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.16; -T_15.17 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.18 ; - %load/vec4 v0x555555dae670_0; - %pad/s 36; - %cmpi/s 6, 0, 36; - %jmp/0xz T_15.19, 5; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555db1280, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db1340, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.18; -T_15.19 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.20 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 2, 0, 32; - %jmp/0xz T_15.21, 5; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dacb10, 4; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %shiftr 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dacb10, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.20; -T_15.21 ; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %load/vec4a v0x555555db1340, 4; - %parti/s 1, 0, 2; - %flag_set/vec4 8; - %jmp/0xz T_15.22, 8; - %load/vec4 v0x555555dae750_0; - %nor/r; - %assign/vec4 v0x555555dae750_0, 0; - %pushi/vec4 1, 0, 1; - %load/vec4 v0x555555dae750_0; - %pad/u 3; - %ix/vec4 4; - %flag_mov 8, 4; - %ix/getv 5, v0x555555daada0_0; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555dacb10, 5, 6; -T_15.22 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.24 ; - %load/vec4 v0x555555dae670_0; - %cmpi/u 8, 0, 32; - %jmp/0xz T_15.25, 5; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %load/vec4a v0x555555dacb10, 4; - %pushi/vec4 0, 0, 3; - %load/vec4 v0x555555daada0_0; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555daace0, 4; - %cmp/ne; - %flag_get/vec4 4; - %concat/vec4; draw_concat_vec4 - %part/u 1; - %flag_set/vec4 8; - %jmp/0xz T_15.26, 8; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 0, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 0, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 64, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 64, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 128, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 128, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 192, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 192, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 256, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 256, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 320, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 320, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 384, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 384, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 448, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 448, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; -T_15.26 ; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %load/vec4a v0x555555dacb10, 4; - %pushi/vec4 0, 0, 3; - %load/vec4 v0x555555daada0_0; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555daace0, 4; - %cmp/ne; - %flag_get/vec4 4; - %concat/vec4; draw_concat_vec4 - %part/u 1; - %flag_set/vec4 8; - %jmp/0xz T_15.28, 8; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 0, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 0, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 64, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 64, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 128, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 128, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 192, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 192, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 256, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 256, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 320, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 320, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 384, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 384, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; - %load/vec4 v0x555555dad7d0_0; - %pushi/vec4 448, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %part/u 8; - %ix/load 4, 1, 0; - %flag_set/imm 4, 0; - %flag_mov 8, 4; - %pushi/vec4 448, 0, 32; - %load/vec4 v0x555555dae670_0; - %muli 8, 0, 32; - %add; - %ix/vec4 5; - %flag_or 8, 4; - %ix/load 6, 0, 0; Constant delay - %ix/mov 3, 4; - %flag_mov 4, 8; - %assign/vec4/a/d v0x555555db0210, 5, 6; -T_15.28 ; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.24; -T_15.25 ; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %load/vec4a v0x555555dafe70, 4; - %parti/s 1, 0, 2; - %flag_set/vec4 8; - %jmp/0xz T_15.30, 8; - %load/vec4 v0x555555dae810_0; - %nor/r; - %assign/vec4 v0x555555dae810_0, 0; -T_15.30 ; - %pushi/vec4 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.32 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 16, 0, 32; - %jmp/0xz T_15.33, 5; - %ix/getv/s 4, v0x555555dae670_0; - %load/vec4a v0x555555dafe70, 4; - %load/vec4 v0x555555dae670_0; - %subi 1, 0, 32; - %ix/vec4/s 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dafe70, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.32; -T_15.33 ; - %pushi/vec4 0, 0, 17; - %ix/load 3, 15, 0; - %flag_set/imm 4, 0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dafe70, 0, 4; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %load/vec4a v0x555555db1340, 4; - %load/vec4 v0x555555daada0_0; - %pad/u 6; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dafe70, 0, 4; - %load/vec4 v0x555555dae010_0; - %nor/r; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_15.36, 9; - %load/vec4 v0x555555db2b20_0; - %pad/u 32; - %pushi/vec4 14, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_15.36; - %flag_set/vec4 8; - %jmp/0xz T_15.34, 8; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.37 ; - %load/vec4 v0x555555dae670_0; - %cmpi/s 16, 0, 32; - %jmp/0xz T_15.38, 5; - %pushi/vec4 0, 0, 17; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dafe70, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.37; -T_15.38 ; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_15.39 ; - %load/vec4 v0x555555dae670_0; - %pad/s 36; - %cmpi/s 6, 0, 36; - %jmp/0xz T_15.40, 5; - %pushi/vec4 0, 0, 17; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db1340, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_15.39; -T_15.40 ; -T_15.34 ; -T_15.1 ; - %jmp T_15; - .thread T_15; - .scope S_0x555555cfe490; -T_16 ; - %wait E_0x555555cb9a50; - %load/vec4 v0x555555dad990_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_16.0, 8; - %pushi/vec4 0, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %pushi/vec4 0, 0, 2; - %assign/vec4 v0x555555db2c00_0, 0; - %pushi/vec4 0, 0, 40; - %assign/vec4 v0x555555dad110_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x555555dacd90_0, 0; - %pushi/vec4 0, 0, 6; - %assign/vec4 v0x555555dace70_0, 0; - %pushi/vec4 0, 0, 6; - %assign/vec4 v0x555555dad1f0_0, 0; - %pushi/vec4 0, 0, 6; - %assign/vec4 v0x555555dad2d0_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555daee90_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555dae8d0_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555daecd0_0, 0; - %pushi/vec4 0, 0, 16; - %assign/vec4 v0x555555daccb0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db3e80_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db3dc0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db3f40_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db0810_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db4000_0, 0; - %pushi/vec4 0, 0, 16; - %assign/vec4 v0x555555db3b20_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db40c0_0, 0; - %pushi/vec4 0, 0, 10; - %assign/vec4 v0x555555db3c00_0, 0; - %pushi/vec4 0, 0, 512; - %assign/vec4 v0x555555db3ce0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db0690_0, 0; - %pushi/vec4 0, 0, 512; - %assign/vec4 v0x555555db10e0_0, 0; - %pushi/vec4 0, 0, 128; - %assign/vec4 v0x555555db4740_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x555555daada0_0, 0; - %pushi/vec4 0, 0, 6; - %assign/vec4 v0x555555dad030_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555dacf50_0, 0; - %pushi/vec4 0, 0, 5; - %assign/vec4 v0x555555dac890_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x555555dac390_0, 0; - %pushi/vec4 0, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; -T_16.2 ; - %load/vec4 v0x555555dae670_0; - %cmpi/u 8, 0, 32; - %jmp/0xz T_16.3, 5; - %pushi/vec4 0, 0, 4; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555daace0, 0, 4; - %pushi/vec4 0, 0, 7; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dab910, 0, 4; - %pushi/vec4 0, 0, 5; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db0510, 0, 4; - %pushi/vec4 8, 0, 5; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db05d0, 0, 4; - %pushi/vec4 0, 0, 5; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dae410, 0, 4; - %pushi/vec4 8, 0, 5; - %ix/getv/s 3, v0x555555dae670_0; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dae5b0, 0, 4; - %load/vec4 v0x555555dae670_0; - %addi 1, 0, 32; - %store/vec4 v0x555555dae670_0, 0, 32; - %jmp T_16.2; -T_16.3 ; - %jmp T_16.1; -T_16.0 ; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db4000_0, 0; - %pushi/vec4 0, 0, 16; - %assign/vec4 v0x555555db3b20_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db40c0_0, 0; - %pushi/vec4 0, 0, 10; - %assign/vec4 v0x555555db3c00_0, 0; - %pushi/vec4 0, 0, 512; - %assign/vec4 v0x555555db3ce0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db3e80_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db3dc0_0, 0; - %load/vec4 v0x555555db2c00_0; - %pad/u 32; - %cmpi/e 0, 0, 32; - %flag_mov 8, 4; - %jmp/0 T_16.4, 8; - %pushi/vec4 0, 0, 2; - %jmp/1 T_16.5, 8; -T_16.4 ; End of true expr. - %load/vec4 v0x555555db2c00_0; - %subi 1, 0, 2; - %jmp/0 T_16.5, 8; - ; End of false expr. - %blend; -T_16.5; - %assign/vec4 v0x555555db2c00_0, 0; - %load/vec4 v0x555555dac390_0; - %pad/u 32; - %cmpi/e 0, 0, 32; - %flag_mov 8, 4; - %jmp/0 T_16.6, 8; - %pushi/vec4 0, 0, 4; - %jmp/1 T_16.7, 8; -T_16.6 ; End of true expr. - %load/vec4 v0x555555dac390_0; - %subi 1, 0, 4; - %jmp/0 T_16.7, 8; - ; End of false expr. - %blend; -T_16.7; - %assign/vec4 v0x555555dac390_0, 0; - %load/vec4 v0x555555dac890_0; - %pad/u 32; - %cmpi/e 0, 0, 32; - %flag_mov 8, 4; - %jmp/0 T_16.8, 8; - %pushi/vec4 0, 0, 5; - %jmp/1 T_16.9, 8; -T_16.8 ; End of true expr. - %load/vec4 v0x555555dac890_0; - %subi 1, 0, 5; - %jmp/0 T_16.9, 8; - ; End of false expr. - %blend; -T_16.9; - %assign/vec4 v0x555555dac890_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555daee90_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555daf7f0_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555daf9b0_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555daf470_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555daf630_0, 0; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae410, 4; - %assign/vec4 v0x555555dae4d0_0, 0; - %load/vec4 v0x555555db38c0_0; - %flag_set/vec4 8; - %jmp/0xz T_16.10, 8; - %load/vec4 v0x555555db3480_0; - %load/vec4 v0x555555db3a40_0; - %part/u 1; - %flag_set/vec4 8; - %jmp/0 T_16.12, 8; - %load/vec4 v0x555555db33a0_0; - %jmp/1 T_16.13, 8; -T_16.12 ; End of true expr. - %load/vec4 v0x555555db3a40_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555db0510, 4; - %jmp/0 T_16.13, 8; - ; End of false expr. - %blend; -T_16.13; - %load/vec4 v0x555555db3a40_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db0510, 0, 4; - %load/vec4 v0x555555db3640_0; - %load/vec4 v0x555555db3a40_0; - %part/u 1; - %flag_set/vec4 8; - %jmp/0 T_16.14, 8; - %load/vec4 v0x555555db3560_0; - %jmp/1 T_16.15, 8; -T_16.14 ; End of true expr. - %load/vec4 v0x555555db3a40_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555db05d0, 4; - %jmp/0 T_16.15, 8; - ; End of false expr. - %blend; -T_16.15; - %load/vec4 v0x555555db3a40_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db05d0, 0, 4; - %load/vec4 v0x555555db3100_0; - %load/vec4 v0x555555db3a40_0; - %part/u 1; - %flag_set/vec4 8; - %jmp/0 T_16.16, 8; - %load/vec4 v0x555555db3020_0; - %jmp/1 T_16.17, 8; -T_16.16 ; End of true expr. - %load/vec4 v0x555555db3a40_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae410, 4; - %jmp/0 T_16.17, 8; - ; End of false expr. - %blend; -T_16.17; - %load/vec4 v0x555555db3a40_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dae410, 0, 4; - %load/vec4 v0x555555db32c0_0; - %load/vec4 v0x555555db3a40_0; - %part/u 1; - %flag_set/vec4 8; - %jmp/0 T_16.18, 8; - %load/vec4 v0x555555db31e0_0; - %jmp/1 T_16.19, 8; -T_16.18 ; End of true expr. - %load/vec4 v0x555555db3a40_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae5b0, 4; - %jmp/0 T_16.19, 8; - ; End of false expr. - %blend; -T_16.19; - %load/vec4 v0x555555db3a40_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dae5b0, 0, 4; - %load/vec4 v0x555555db3480_0; - %assign/vec4 v0x555555daf7f0_0, 0; - %load/vec4 v0x555555db3640_0; - %assign/vec4 v0x555555daf9b0_0, 0; - %load/vec4 v0x555555db3100_0; - %assign/vec4 v0x555555daf470_0, 0; - %load/vec4 v0x555555db32c0_0; - %assign/vec4 v0x555555daf630_0, 0; - %load/vec4 v0x555555db3a40_0; - %assign/vec4 v0x555555daecd0_0, 0; - %jmp T_16.11; -T_16.10 ; - %load/vec4 v0x555555db2b20_0; - %pad/u 32; - %cmpi/ne 14, 0, 32; - %jmp/0xz T_16.20, 4; - %load/vec4 v0x555555daf7f0_0; - %load/vec4 v0x555555daecd0_0; - %part/u 1; - %flag_set/vec4 8; - %jmp/0 T_16.22, 8; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555db0510, 4; - %addi 1, 0, 5; - %jmp/1 T_16.23, 8; -T_16.22 ; End of true expr. - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555db0510, 4; - %jmp/0 T_16.23, 8; - ; End of false expr. - %blend; -T_16.23; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db0510, 0, 4; - %load/vec4 v0x555555daf9b0_0; - %load/vec4 v0x555555daecd0_0; - %part/u 1; - %flag_set/vec4 8; - %jmp/0 T_16.24, 8; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555db05d0, 4; - %addi 1, 0, 5; - %jmp/1 T_16.25, 8; -T_16.24 ; End of true expr. - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555db05d0, 4; - %jmp/0 T_16.25, 8; - ; End of false expr. - %blend; -T_16.25; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db05d0, 0, 4; - %load/vec4 v0x555555daf470_0; - %load/vec4 v0x555555daecd0_0; - %part/u 1; - %flag_set/vec4 8; - %jmp/0 T_16.26, 8; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae410, 4; - %addi 1, 0, 5; - %jmp/1 T_16.27, 8; -T_16.26 ; End of true expr. - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae410, 4; - %jmp/0 T_16.27, 8; - ; End of false expr. - %blend; -T_16.27; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dae410, 0, 4; - %load/vec4 v0x555555daf630_0; - %load/vec4 v0x555555daecd0_0; - %part/u 1; - %flag_set/vec4 8; - %jmp/0 T_16.28, 8; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae5b0, 4; - %addi 1, 0, 5; - %jmp/1 T_16.29, 8; -T_16.28 ; End of true expr. - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae5b0, 4; - %jmp/0 T_16.29, 8; - ; End of false expr. - %blend; -T_16.29; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dae5b0, 0, 4; -T_16.20 ; -T_16.11 ; - %load/vec4 v0x555555dae8d0_0; - %flag_set/vec4 8; - %jmp/0xz T_16.30, 8; - %load/vec4 v0x555555dad3b0_0; - %assign/vec4 v0x555555dad1f0_0, 0; - %load/vec4 v0x555555dad3b0_0; - %assign/vec4 v0x555555dacbd0_0, 0; - %load/vec4 v0x555555dad3b0_0; - %assign/vec4 v0x555555dad2d0_0, 0; -T_16.30 ; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae5b0, 4; - %pad/u 32; - %cmpi/e 0, 0, 32; - %jmp/0xz T_16.32, 4; - %load/vec4 v0x555555dad2d0_0; - %subi 2, 0, 6; - %assign/vec4 v0x555555dad1f0_0, 0; -T_16.32 ; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae410, 4; - %pad/u 32; - %cmpi/e 0, 0, 32; - %flag_get/vec4 4; - %jmp/0 T_16.36, 4; - %load/vec4 v0x555555dae4d0_0; - %pad/u 32; - %pushi/vec4 31, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_16.36; - %flag_set/vec4 8; - %jmp/0xz T_16.34, 8; - %load/vec4 v0x555555dad2d0_0; - %subi 2, 0, 6; - %assign/vec4 v0x555555dacbd0_0, 0; -T_16.34 ; - %load/vec4 v0x555555db2b20_0; - %dup/vec4; - %pushi/vec4 0, 0, 5; - %cmp/u; - %jmp/1 T_16.37, 6; - %dup/vec4; - %pushi/vec4 1, 0, 5; - %cmp/u; - %jmp/1 T_16.38, 6; - %dup/vec4; - %pushi/vec4 2, 0, 5; - %cmp/u; - %jmp/1 T_16.39, 6; - %dup/vec4; - %pushi/vec4 3, 0, 5; - %cmp/u; - %jmp/1 T_16.40, 6; - %dup/vec4; - %pushi/vec4 4, 0, 5; - %cmp/u; - %jmp/1 T_16.41, 6; - %dup/vec4; - %pushi/vec4 5, 0, 5; - %cmp/u; - %jmp/1 T_16.42, 6; - %dup/vec4; - %pushi/vec4 6, 0, 5; - %cmp/u; - %jmp/1 T_16.43, 6; - %dup/vec4; - %pushi/vec4 7, 0, 5; - %cmp/u; - %jmp/1 T_16.44, 6; - %dup/vec4; - %pushi/vec4 8, 0, 5; - %cmp/u; - %jmp/1 T_16.45, 6; - %dup/vec4; - %pushi/vec4 9, 0, 5; - %cmp/u; - %jmp/1 T_16.46, 6; - %dup/vec4; - %pushi/vec4 10, 0, 5; - %cmp/u; - %jmp/1 T_16.47, 6; - %dup/vec4; - %pushi/vec4 11, 0, 5; - %cmp/u; - %jmp/1 T_16.48, 6; - %dup/vec4; - %pushi/vec4 12, 0, 5; - %cmp/u; - %jmp/1 T_16.49, 6; - %dup/vec4; - %pushi/vec4 13, 0, 5; - %cmp/u; - %jmp/1 T_16.50, 6; - %dup/vec4; - %pushi/vec4 14, 0, 5; - %cmp/u; - %jmp/1 T_16.51, 6; - %jmp T_16.52; -T_16.37 ; - %load/vec4 v0x555555dad630_0; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_16.55, 9; - %load/vec4 v0x555555daea70_0; - %pad/u 32; - %pushi/vec4 13, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_16.55; - %flag_set/vec4 8; - %jmp/0xz T_16.53, 8; - %pushi/vec4 1, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555daecd0_0, 0; - %pushi/vec4 255, 0, 8; - %assign/vec4 v0x555555daf7f0_0, 0; - %pushi/vec4 255, 0, 8; - %assign/vec4 v0x555555daf9b0_0, 0; - %pushi/vec4 255, 0, 8; - %assign/vec4 v0x555555daf470_0, 0; - %pushi/vec4 255, 0, 8; - %assign/vec4 v0x555555daf630_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db0690_0, 0; - %jmp T_16.54; -T_16.53 ; - %load/vec4 v0x555555daea70_0; - %pad/u 32; - %cmpi/e 13, 0, 32; - %jmp/0xz T_16.56, 4; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db0690_0, 0; -T_16.56 ; -T_16.54 ; - %jmp T_16.52; -T_16.38 ; - %load/vec4 v0x555555db2c00_0; - %pad/u 32; - %cmpi/e 0, 0, 32; - %jmp/0xz T_16.58, 4; - %load/vec4 v0x555555dad6f0_0; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %part/u 8; - %cmpi/e 120, 0, 8; - %jmp/0xz T_16.60, 4; - %pushi/vec4 2, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555dae8d0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555dacf50_0, 0; - %pushi/vec4 0, 0, 6; - %assign/vec4 v0x555555dad030_0, 0; - %jmp T_16.61; -T_16.60 ; - %pushi/vec4 1, 0, 1; - %ix/load 5, 0, 0; - %ix/getv 4, v0x555555daecd0_0; - %assign/vec4/off/d v0x555555daee90_0, 4, 5; - %pushi/vec4 3, 0, 2; - %assign/vec4 v0x555555db2c00_0, 0; -T_16.61 ; -T_16.58 ; - %jmp T_16.52; -T_16.39 ; - %pushi/vec4 5, 0, 4; - %assign/vec4 v0x555555dac390_0, 0; - %pushi/vec4 3, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x555555dacd90_0, 0; - %jmp T_16.52; -T_16.40 ; - %load/vec4 v0x555555dac390_0; - %pad/u 32; - %cmpi/e 0, 0, 32; - %jmp/0xz T_16.62, 4; - %load/vec4 v0x555555dad8b0_0; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %part/u 8; - %load/vec4 v0x555555dad110_0; - %parti/s 32, 8, 5; - %concat/vec4; draw_concat_vec4 - %assign/vec4 v0x555555dad110_0, 0; - %load/vec4 v0x555555dacd90_0; - %addi 1, 0, 4; - %assign/vec4 v0x555555dacd90_0, 0; - %load/vec4 v0x555555dacd90_0; - %pad/u 32; - %cmpi/e 5, 0, 32; - %jmp/0xz T_16.64, 4; - %pushi/vec4 4, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %load/vec4 v0x555555dace70_0; - %assign/vec4 v0x555555dad030_0, 0; - %pushi/vec4 0, 0, 6; - %assign/vec4 v0x555555dace70_0, 0; -T_16.64 ; -T_16.62 ; - %jmp T_16.52; -T_16.41 ; - %load/vec4 v0x555555dad110_0; - %load/vec4 v0x555555dace70_0; - %part/u 10; - %cmpi/e 340, 0, 10; - %jmp/0xz T_16.66, 4; - %load/vec4 v0x555555dace70_0; - %load/vec4 v0x555555dad030_0; - %cmp/e; - %flag_mov 8, 4; - %jmp/0 T_16.68, 8; - %load/vec4 v0x555555dacf50_0; - %pad/u 2; - %addi 1, 0, 2; - %jmp/1 T_16.69, 8; -T_16.68 ; End of true expr. - %pushi/vec4 0, 0, 2; - %jmp/0 T_16.69, 8; - ; End of false expr. - %blend; -T_16.69; - %pad/u 1; - %assign/vec4 v0x555555dacf50_0, 0; - %load/vec4 v0x555555dacf50_0; - %pad/u 32; - %cmpi/e 1, 0, 32; - %jmp/0xz T_16.70, 4; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555dae8d0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555dacf50_0, 0; - %pushi/vec4 5, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %jmp T_16.71; -T_16.70 ; - %pushi/vec4 2, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; -T_16.71 ; - %jmp T_16.67; -T_16.66 ; - %load/vec4 v0x555555dace70_0; - %addi 1, 0, 6; - %assign/vec4 v0x555555dace70_0, 0; -T_16.67 ; - %jmp T_16.52; -T_16.42 ; - %load/vec4 v0x555555dad030_0; - %load/vec4 v0x555555dad1f0_0; - %cmp/e; - %jmp/0xz T_16.72, 4; - %load/vec4 v0x555555dacbd0_0; - %parti/s 3, 3, 3; - %pad/u 4; - %pushi/vec4 0, 0, 3; - %pushi/vec4 5, 0, 32; - %load/vec4 v0x555555dacbd0_0; - %parti/s 3, 0, 2; - %pad/u 32; - %cmp/u; - %flag_get/vec4 4; - %flag_get/vec4 5; - %or; - %concat/vec4; draw_concat_vec4 - %add; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555daace0, 0, 4; - %pushi/vec4 15420, 0, 16; - %load/vec4 v0x555555dacbd0_0; - %parti/s 3, 0, 2; - %ix/vec4 4; - %shiftr 4; - %assign/vec4 v0x555555daccb0_0, 0; - %pushi/vec4 6, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %jmp T_16.73; -T_16.72 ; - %pushi/vec4 1, 0, 1; - %ix/load 5, 0, 0; - %ix/getv 4, v0x555555daecd0_0; - %assign/vec4/off/d v0x555555daf470_0, 4, 5; - %pushi/vec4 1, 0, 1; - %ix/load 5, 0, 0; - %ix/getv 4, v0x555555daecd0_0; - %assign/vec4/off/d v0x555555daf630_0, 4, 5; - %pushi/vec4 2, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; -T_16.73 ; - %jmp T_16.52; -T_16.43 ; - %load/vec4 v0x555555db2c00_0; - %pad/u 32; - %cmpi/e 0, 0, 32; - %jmp/0xz T_16.74, 4; - %load/vec4 v0x555555dad6f0_0; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %part/u 8; - %load/vec4 v0x555555daccb0_0; - %parti/s 8, 0, 2; - %cmp/e; - %jmp/0xz T_16.76, 4; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %cmpi/e 4294967295, 0, 32; - %jmp/0xz T_16.78, 4; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db0690_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555daecd0_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db0810_0, 0; - %pushi/vec4 7, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %jmp T_16.79; -T_16.78 ; - %load/vec4 v0x555555daecd0_0; - %addi 1, 0, 3; - %assign/vec4 v0x555555daecd0_0, 0; - %pushi/vec4 1, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; -T_16.79 ; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555daace0, 4; - %load/vec4 v0x555555daada0_0; - %cmp/u; - %flag_mov 8, 5; - %jmp/0 T_16.80, 8; - %load/vec4 v0x555555daada0_0; - %jmp/1 T_16.81, 8; -T_16.80 ; End of true expr. - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555daace0, 4; - %jmp/0 T_16.81, 8; - ; End of false expr. - %blend; -T_16.81; - %assign/vec4 v0x555555daada0_0, 0; - %jmp T_16.77; -T_16.76 ; - %pushi/vec4 1, 0, 1; - %ix/load 5, 0, 0; - %ix/getv 4, v0x555555daecd0_0; - %assign/vec4/off/d v0x555555daee90_0, 4, 5; - %pushi/vec4 3, 0, 2; - %assign/vec4 v0x555555db2c00_0, 0; -T_16.77 ; -T_16.74 ; - %jmp T_16.52; -T_16.44 ; - %load/vec4 v0x555555daea70_0; - %pad/u 32; - %cmpi/e 17, 0, 32; - %jmp/0xz T_16.82, 4; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db3e80_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db3f40_0, 0; - %pushi/vec4 13, 0, 5; - %assign/vec4 v0x555555dac890_0, 0; - %pushi/vec4 8, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db0690_0, 0; -T_16.82 ; - %jmp T_16.52; -T_16.45 ; - %load/vec4 v0x555555dac890_0; - %pad/u 32; - %cmpi/e 0, 0, 32; - %jmp/0xz T_16.84, 4; - %load/vec4 v0x555555dad7d0_0; - %parti/s 1, 0, 2; - %assign/vec4 v0x555555db0810_0, 0; - %load/vec4 v0x555555db0810_0; - %load/vec4 v0x555555dad7d0_0; - %parti/s 1, 0, 2; - %concat/vec4; draw_concat_vec4 - %cmpi/e 1, 0, 2; - %jmp/0xz T_16.86, 4; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %cmpi/e 4294967295, 0, 32; - %jmp/0xz T_16.88, 4; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db3f40_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db0690_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555daecd0_0, 0; - %pushi/vec4 9, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %jmp T_16.89; -T_16.88 ; - %load/vec4 v0x555555daecd0_0; - %addi 1, 0, 3; - %assign/vec4 v0x555555daecd0_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db0810_0, 0; - %pushi/vec4 7, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; -T_16.89 ; - %jmp T_16.87; -T_16.86 ; - %pushi/vec4 1, 0, 1; - %ix/load 5, 0, 0; - %ix/getv 4, v0x555555daecd0_0; - %assign/vec4/off/d v0x555555daf7f0_0, 4, 5; - %pushi/vec4 1, 0, 1; - %ix/load 5, 0, 0; - %ix/getv 4, v0x555555daecd0_0; - %assign/vec4/off/d v0x555555daf9b0_0, 4, 5; - %pushi/vec4 7, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; -T_16.87 ; -T_16.84 ; - %jmp T_16.52; -T_16.46 ; - %load/vec4 v0x555555daea70_0; - %pad/u 32; - %cmpi/e 22, 0, 32; - %flag_get/vec4 4; - %jmp/0 T_16.92, 4; - %load/vec4 v0x555555db0450_0; - %nor/r; - %and; -T_16.92; - %flag_set/vec4 8; - %jmp/0xz T_16.90, 8; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db4000_0, 0; - %pushi/vec4 1, 0, 16; - %assign/vec4 v0x555555db3b20_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db40c0_0, 0; - %pushi/vec4 0, 0, 10; - %assign/vec4 v0x555555db3c00_0, 0; - %pushi/vec4 2442236305, 0, 32; - %concati/vec4 2442236305, 0, 32; - %concati/vec4 4008636142, 0, 33; - %concati/vec4 4008636142, 0, 32; - %concati/vec4 2762253476, 0, 33; - %concati/vec4 2762253478, 0, 32; - %concati/vec4 3368601800, 0, 34; - %concati/vec4 3368601805, 0, 32; - %concati/vec4 3503345872, 0, 36; - %concati/vec4 3503345837, 0, 32; - %concati/vec4 2913840557, 0, 32; - %concati/vec4 2913840465, 0, 32; - %concati/vec4 2728567458, 0, 33; - %concati/vec4 2728567683, 0, 32; - %concati/vec4 2206434179, 0, 32; - %concati/vec4 4309441, 0, 23; - %assign/vec4 v0x555555db3ce0_0, 0; - %pushi/vec4 10, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; -T_16.90 ; - %jmp T_16.52; -T_16.47 ; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db4000_0, 0; - %pushi/vec4 1, 0, 16; - %assign/vec4 v0x555555db3b20_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db40c0_0, 0; - %pushi/vec4 8, 0, 10; - %assign/vec4 v0x555555db3c00_0, 0; - %pushi/vec4 2155905152, 0, 32; - %concati/vec4 2155905152, 0, 32; - %concati/vec4 3688618971, 0, 32; - %concati/vec4 3688618971, 0, 32; - %concati/vec4 3486502863, 0, 32; - %concati/vec4 3486502863, 0, 32; - %concati/vec4 3537031890, 0, 32; - %concati/vec4 3537031890, 0, 32; - %concati/vec4 3941264106, 0, 33; - %concati/vec4 3941264107, 0, 32; - %concati/vec4 3823363043, 0, 32; - %concati/vec4 3823363042, 0, 32; - %concati/vec4 2964369584, 0, 33; - %concati/vec4 2964369584, 0, 32; - %concati/vec4 4109694196, 0, 32; - %concati/vec4 1027423549, 0, 30; - %assign/vec4 v0x555555db3ce0_0, 0; - %pushi/vec4 11, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %jmp T_16.52; -T_16.48 ; - %load/vec4 v0x555555db0450_0; - %nor/r; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_16.95, 9; - %load/vec4 v0x555555db4000_0; - %pad/u 32; - %pushi/vec4 0, 0, 32; - %cmp/e; - %flag_get/vec4 4; - %and; -T_16.95; - %flag_set/vec4 8; - %jmp/0xz T_16.93, 8; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db4000_0, 0; - %pushi/vec4 0, 0, 16; - %assign/vec4 v0x555555db3b20_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db40c0_0, 0; - %pushi/vec4 12, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; -T_16.93 ; - %jmp T_16.52; -T_16.49 ; - %ix/load 4, 0, 0; - %flag_set/imm 4, 0; - %load/vec4a v0x555555dafe70, 4; - %cmpi/e 1, 0, 17; - %jmp/0xz T_16.96, 4; - %load/vec4 v0x555555db0130_0; - %assign/vec4 v0x555555db10e0_0, 0; - %pushi/vec4 13, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %pushi/vec4 0, 0, 7; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dab910, 0, 4; - %pushi/vec4 2161889234, 0, 32; - %concati/vec4 3957479547, 0, 33; - %concati/vec4 2344176742, 0, 34; - %concati/vec4 279794113, 0, 29; - %assign/vec4 v0x555555db4740_0, 0; -T_16.96 ; - %jmp T_16.52; -T_16.50 ; - %load/vec4 v0x555555db4740_0; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dab910, 4; - %part/u 64; - %load/vec4 v0x555555db10e0_0; - %pushi/vec4 448, 0, 32; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %add; - %part/u 8; - %load/vec4 v0x555555db10e0_0; - %pushi/vec4 384, 0, 32; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db10e0_0; - %pushi/vec4 320, 0, 32; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db10e0_0; - %pushi/vec4 256, 0, 32; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db10e0_0; - %pushi/vec4 192, 0, 32; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db10e0_0; - %pushi/vec4 128, 0, 32; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db10e0_0; - %pushi/vec4 64, 0, 32; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %load/vec4 v0x555555db10e0_0; - %pushi/vec4 0, 0, 32; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %muli 8, 0, 32; - %add; - %part/u 8; - %concat/vec4; draw_concat_vec4 - %cmp/e; - %jmp/0xz T_16.98, 4; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %cmpi/e 4294967295, 0, 32; - %jmp/0xz T_16.100, 4; - %pushi/vec4 14, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %jmp T_16.101; -T_16.100 ; - %load/vec4 v0x555555daecd0_0; - %addi 1, 0, 3; - %assign/vec4 v0x555555daecd0_0, 0; - %pushi/vec4 0, 0, 7; - %load/vec4 v0x555555daecd0_0; - %pad/u 32; - %addi 1, 0, 32; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dab910, 0, 4; -T_16.101 ; - %jmp T_16.99; -T_16.98 ; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dab910, 4; - %addi 8, 0, 7; - %load/vec4 v0x555555daecd0_0; - %pad/u 5; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555dab910, 0, 4; -T_16.99 ; - %jmp T_16.52; -T_16.51 ; - %pushi/vec4 14, 0, 5; - %assign/vec4 v0x555555db2b20_0, 0; - %load/vec4 v0x555555daea70_0; - %pad/u 32; - %cmpi/e 19, 0, 32; - %jmp/0xz T_16.102, 4; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db0690_0, 0; - %load/vec4 v0x555555db1ca0_0; - %nor/r; - %flag_set/vec4 10; - %flag_get/vec4 10; - %jmp/0 T_16.107, 10; - %load/vec4 v0x555555db2740_0; - %nor/r; - %and; -T_16.107; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_16.106, 9; - %load/vec4 v0x555555db02d0_0; - %and; -T_16.106; - %flag_set/vec4 8; - %jmp/0xz T_16.104, 8; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db0690_0, 0; -T_16.104 ; -T_16.102 ; - %jmp T_16.52; -T_16.52 ; - %pop/vec4 1; -T_16.1 ; - %jmp T_16; - .thread T_16; - .scope S_0x555555cfe490; -T_17 ; - %wait E_0x555555cb9a50; - %load/vec4 v0x555555dad990_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_17.0, 8; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db3800_0, 0; - %jmp T_17.1; -T_17.0 ; - %load/vec4 v0x555555dadb30_0; - %flag_set/vec4 9; - %flag_get/vec4 9; - %jmp/0 T_17.4, 9; - %load/vec4 v0x555555dafcf0_0; - %nor/r; - %and; -T_17.4; - %flag_set/vec4 8; - %jmp/0xz T_17.2, 8; - %load/vec4 v0x555555daddb0_0; - %assign/vec4 v0x555555db3800_0, 0; - %load/vec4 v0x555555dade70_0; - %assign/vec4 v0x555555db3980_0, 0; - %load/vec4 v0x555555dada50_0; - %assign/vec4 v0x555555db2e60_0, 0; - %load/vec4 v0x555555dadbf0_0; - %assign/vec4 v0x555555db2f40_0, 0; - %load/vec4 v0x555555dadcd0_0; - %assign/vec4 v0x555555db3720_0, 0; - %jmp T_17.3; -T_17.2 ; - %load/vec4 v0x555555dafcf0_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_17.5, 8; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db3800_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db3980_0, 0; - %pushi/vec4 0, 0, 32; - %assign/vec4 v0x555555db2e60_0, 0; - %pushi/vec4 0, 0, 32; - %assign/vec4 v0x555555db2f40_0, 0; - %pushi/vec4 0, 0, 4; - %assign/vec4 v0x555555db3720_0, 0; -T_17.5 ; -T_17.3 ; -T_17.1 ; - %jmp T_17; - .thread T_17; - .scope S_0x555555cfe490; -T_18 ; - %wait E_0x555555cb9a50; - %load/vec4 v0x555555dad990_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_18.0, 8; - %pushi/vec4 0, 0, 5; - %assign/vec4 v0x555555db33a0_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555db3480_0, 0; - %pushi/vec4 0, 0, 5; - %assign/vec4 v0x555555db3560_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555db3640_0, 0; - %pushi/vec4 0, 0, 5; - %assign/vec4 v0x555555db3020_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555db3100_0, 0; - %pushi/vec4 0, 0, 5; - %assign/vec4 v0x555555db31e0_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555db32c0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db38c0_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555db3a40_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555dafb50_0, 0; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555dafcf0_0, 0; - %jmp T_18.1; -T_18.0 ; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555db3480_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555db3640_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555db3100_0, 0; - %pushi/vec4 0, 0, 8; - %assign/vec4 v0x555555db32c0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db38c0_0, 0; - %pushi/vec4 0, 0, 3; - %assign/vec4 v0x555555db3a40_0, 0; - %load/vec4 v0x555555db3800_0; - %flag_set/vec4 8; - %flag_get/vec4 8; - %jmp/0 T_18.2, 8; - %load/vec4 v0x555555dadb30_0; - %and; -T_18.2; - %assign/vec4 v0x555555dafb50_0, 0; - %load/vec4 v0x555555db2b20_0; - %pad/u 32; - %pushi/vec4 14, 0, 32; - %cmp/ne; - %flag_get/vec4 4; - %assign/vec4 v0x555555dafcf0_0, 0; - %load/vec4 v0x555555db3800_0; - %flag_set/vec4 8; - %jmp/0xz T_18.3, 8; - %load/vec4 v0x555555db2e60_0; - %parti/s 4, 0, 2; - %dup/vec4; - %pushi/vec4 0, 0, 4; - %cmp/u; - %jmp/1 T_18.5, 6; - %dup/vec4; - %pushi/vec4 1, 0, 4; - %cmp/u; - %jmp/1 T_18.6, 6; - %dup/vec4; - %pushi/vec4 2, 0, 4; - %cmp/u; - %jmp/1 T_18.7, 6; - %dup/vec4; - %pushi/vec4 3, 0, 4; - %cmp/u; - %jmp/1 T_18.8, 6; - %load/vec4 v0x555555db3980_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_18.11, 8; - %pushi/vec4 2863311530, 0, 32; - %assign/vec4 v0x555555dafc10_0, 0; -T_18.11 ; - %jmp T_18.10; -T_18.5 ; - %load/vec4 v0x555555db3980_0; - %flag_set/vec4 8; - %jmp/0xz T_18.13, 8; - %load/vec4 v0x555555db2f40_0; - %parti/s 5, 0, 2; - %assign/vec4 v0x555555db33a0_0, 0; - %pushi/vec4 1, 0, 8; - %load/vec4 v0x555555db2f40_0; - %parti/s 3, 5, 4; - %ix/vec4 4; - %shiftl 4; - %assign/vec4 v0x555555db3480_0, 0; - %load/vec4 v0x555555db3720_0; - %parti/s 1, 0, 2; - %assign/vec4 v0x555555db38c0_0, 0; - %jmp T_18.14; -T_18.13 ; - %pushi/vec4 0, 0, 27; - %load/vec4 v0x555555db2e60_0; - %parti/s 3, 4, 4; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555db0510, 4; - %concat/vec4; draw_concat_vec4 - %assign/vec4 v0x555555dafc10_0, 0; -T_18.14 ; - %jmp T_18.10; -T_18.6 ; - %load/vec4 v0x555555db3980_0; - %flag_set/vec4 8; - %jmp/0xz T_18.15, 8; - %load/vec4 v0x555555db2f40_0; - %parti/s 5, 0, 2; - %assign/vec4 v0x555555db3560_0, 0; - %pushi/vec4 1, 0, 8; - %load/vec4 v0x555555db2f40_0; - %parti/s 3, 5, 4; - %ix/vec4 4; - %shiftl 4; - %assign/vec4 v0x555555db3640_0, 0; - %load/vec4 v0x555555db3720_0; - %parti/s 1, 0, 2; - %assign/vec4 v0x555555db38c0_0, 0; - %jmp T_18.16; -T_18.15 ; - %pushi/vec4 0, 0, 27; - %load/vec4 v0x555555db2e60_0; - %parti/s 3, 4, 4; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555db05d0, 4; - %concat/vec4; draw_concat_vec4 - %assign/vec4 v0x555555dafc10_0, 0; -T_18.16 ; - %jmp T_18.10; -T_18.7 ; - %load/vec4 v0x555555db3980_0; - %flag_set/vec4 8; - %jmp/0xz T_18.17, 8; - %load/vec4 v0x555555db2f40_0; - %parti/s 5, 0, 2; - %assign/vec4 v0x555555db3020_0, 0; - %pushi/vec4 1, 0, 8; - %load/vec4 v0x555555db2f40_0; - %parti/s 3, 5, 4; - %ix/vec4 4; - %shiftl 4; - %assign/vec4 v0x555555db3100_0, 0; - %load/vec4 v0x555555db3720_0; - %parti/s 1, 0, 2; - %assign/vec4 v0x555555db38c0_0, 0; - %jmp T_18.18; -T_18.17 ; - %pushi/vec4 0, 0, 27; - %load/vec4 v0x555555db2e60_0; - %parti/s 3, 4, 4; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae410, 4; - %concat/vec4; draw_concat_vec4 - %assign/vec4 v0x555555dafc10_0, 0; -T_18.18 ; - %jmp T_18.10; -T_18.8 ; - %load/vec4 v0x555555db3980_0; - %flag_set/vec4 8; - %jmp/0xz T_18.19, 8; - %load/vec4 v0x555555db2f40_0; - %parti/s 5, 0, 2; - %assign/vec4 v0x555555db31e0_0, 0; - %pushi/vec4 1, 0, 8; - %load/vec4 v0x555555db2f40_0; - %parti/s 3, 5, 4; - %ix/vec4 4; - %shiftl 4; - %assign/vec4 v0x555555db32c0_0, 0; - %load/vec4 v0x555555db3720_0; - %parti/s 1, 0, 2; - %assign/vec4 v0x555555db38c0_0, 0; - %jmp T_18.20; -T_18.19 ; - %pushi/vec4 0, 0, 27; - %load/vec4 v0x555555db2e60_0; - %parti/s 3, 4, 4; - %pad/u 5; - %ix/vec4 4; - %load/vec4a v0x555555dae5b0, 4; - %concat/vec4; draw_concat_vec4 - %assign/vec4 v0x555555dafc10_0, 0; -T_18.20 ; - %jmp T_18.10; -T_18.10 ; - %pop/vec4 1; - %load/vec4 v0x555555db2f40_0; - %parti/s 3, 5, 4; - %assign/vec4 v0x555555db3a40_0, 0; -T_18.3 ; -T_18.1 ; - %jmp T_18; - .thread T_18; - .scope S_0x555555cfe490; -T_19 ; - %vpi_call 2 1786 "$display", "TEST FUNCTIONS\012-----------------------------\012" {0 0 0}; - %vpi_call 2 1787 "$display", "Test ns_to_cycles() function:" {0 0 0}; - %pushi/vec4 15, 0, 32; - %store/vec4 v0x555555da86c0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_cycles, S_0x555555da84e0; - %vpi_call 2 1788 "$display", "\011ns_to_cycles(15) = %0d [exact]", S<0,vec4,u19> {1 0 0}; - %pushi/vec4 15, 0, 32; - %store/vec4 v0x555555da86c0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_cycles, S_0x555555da84e0; - %vpi_call 2 1789 "$display", "\011ns_to_cycles(14.5) = %0d [round-off]", S<0,vec4,u19> {1 0 0}; - %pushi/vec4 11, 0, 32; - %store/vec4 v0x555555da86c0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_cycles, S_0x555555da84e0; - %vpi_call 2 1790 "$display", "\011ns_to_cycles(11) = %0d [round-up]\012", S<0,vec4,u19> {1 0 0}; - %vpi_call 2 1792 "$display", "Test nCK_to_cycles() function:" {0 0 0}; - %pushi/vec4 16, 0, 32; - %store/vec4 v0x555555da7e80_0, 0, 32; - %callf/vec4 TD_ddr3_controller.nCK_to_cycles, S_0x555555da7ca0; - %vpi_call 2 1793 "$display", "\011ns_to_cycles(16) = %0d [exact]", S<0,vec4,u19> {1 0 0}; - %pushi/vec4 15, 0, 32; - %store/vec4 v0x555555da7e80_0, 0, 32; - %callf/vec4 TD_ddr3_controller.nCK_to_cycles, S_0x555555da7ca0; - %vpi_call 2 1794 "$display", "\011ns_to_cycles(15) = %0d [round-off]", S<0,vec4,u19> {1 0 0}; - %pushi/vec4 13, 0, 32; - %store/vec4 v0x555555da7e80_0, 0, 32; - %callf/vec4 TD_ddr3_controller.nCK_to_cycles, S_0x555555da7ca0; - %vpi_call 2 1795 "$display", "\011ns_to_cycles(13) = %0d [round-up]\012", S<0,vec4,u19> {1 0 0}; - %vpi_call 2 1797 "$display", "Test ns_to_nCK() function:" {0 0 0}; - %pushi/vec4 15, 0, 32; - %store/vec4 v0x555555da8bd0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_nCK, S_0x555555da8960; - %vpi_call 2 1798 "$display", "\011ns_to_cycles(15) = %0d [exact]", S<0,vec4,s32> {1 0 0}; - %pushi/vec4 15, 0, 32; - %store/vec4 v0x555555da8bd0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_nCK, S_0x555555da8960; - %vpi_call 2 1799 "$display", "\011ns_to_cycles(14.875) = %0d [round-off]", S<0,vec4,s32> {1 0 0}; - %pushi/vec4 14, 0, 32; - %store/vec4 v0x555555da8bd0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_nCK, S_0x555555da8960; - %vpi_call 2 1800 "$display", "\011ns_to_cycles(13.875) = %0d [round-up] \012", S<0,vec4,s32> {1 0 0}; - %vpi_call 2 1802 "$display", "Test nCK_to_ns() function:" {0 0 0}; - %pushi/vec4 4, 0, 32; - %store/vec4 v0x555555da8300_0, 0, 32; - %callf/vec4 TD_ddr3_controller.nCK_to_ns, S_0x555555da8120; - %vpi_call 2 1803 "$display", "\011ns_to_cycles(4) = %0d [exact]", S<0,vec4,s32> {1 0 0}; - %pushi/vec4 3, 0, 32; - %store/vec4 v0x555555da8300_0, 0, 32; - %callf/vec4 TD_ddr3_controller.nCK_to_ns, S_0x555555da8120; - %vpi_call 2 1804 "$display", "\011ns_to_cycles(14.875) = %0d [round-off]", S<0,vec4,s32> {1 0 0}; - %pushi/vec4 5, 0, 32; - %store/vec4 v0x555555da8300_0, 0, 32; - %callf/vec4 TD_ddr3_controller.nCK_to_ns, S_0x555555da8120; - %vpi_call 2 1805 "$display", "\011ns_to_cycles(13.875) = %0d [round-up]\012", S<0,vec4,s32> {1 0 0}; - %vpi_call 2 1807 "$display", "Test nCK_to_ns() function:" {0 0 0}; - %pushi/vec4 4, 0, 32; - %store/vec4 v0x555555da8300_0, 0, 32; - %callf/vec4 TD_ddr3_controller.nCK_to_ns, S_0x555555da8120; - %vpi_call 2 1808 "$display", "\011ns_to_cycles(4) = %0d [exact]", S<0,vec4,s32> {1 0 0}; - %pushi/vec4 3, 0, 32; - %store/vec4 v0x555555da8300_0, 0, 32; - %callf/vec4 TD_ddr3_controller.nCK_to_ns, S_0x555555da8120; - %vpi_call 2 1809 "$display", "\011ns_to_cycles(14.875) = %0d [round-off]", S<0,vec4,s32> {1 0 0}; - %pushi/vec4 5, 0, 32; - %store/vec4 v0x555555da8300_0, 0, 32; - %callf/vec4 TD_ddr3_controller.nCK_to_ns, S_0x555555da8120; - %vpi_call 2 1810 "$display", "\011ns_to_cycles(13.875) = %0d [round-up]\012", S<0,vec4,s32> {1 0 0}; - %vpi_call 2 1812 "$display", "Test $floor() function:" {0 0 0}; - %pushi/real 1073741824, 4067; load=2.00000 - %vpi_call 2 1813 "$display", "\011$floor(5/2) = %0d", W<0,r> {0 1 0}; - %pushi/real 1073741824, 4067; load=2.00000 - %vpi_call 2 1814 "$display", "\011$floor(9/4) = %0d", W<0,r> {0 1 0}; - %pushi/real 1073741824, 4067; load=2.00000 - %vpi_call 2 1815 "$display", "\011$floor(9/4) = %0d", W<0,r> {0 1 0}; - %pushi/real 1073741824, 4066; load=1.00000 - %vpi_call 2 1816 "$display", "\011$floor(9/5) = %0d\012", W<0,r> {0 1 0}; - %vpi_call 2 1818 "$display", "\012DISPLAY CONTROLLER PARAMETERS\012-----------------------------\012" {0 0 0}; - %vpi_call 2 1819 "$display", "DELAY_COUNTER_WIDTH = %0d", P_0x555555d8dee0 {0 0 0}; - %vpi_call 2 1820 "$display", "DELAY_SLOT_WIDTH = %0d", P_0x555555d8df60 {0 0 0}; - %vpi_call 2 1823 "$display", "serdes_ratio = %0d", P_0x555555d8f1e0 {0 0 0}; - %vpi_call 2 1824 "$display", "wb_addr_bits = %0d", P_0x555555d8f660 {0 0 0}; - %vpi_call 2 1825 "$display", "wb_data_bits = %0d", P_0x555555d8f6a0 {0 0 0}; - %vpi_call 2 1826 "$display", "wb_sel_bits = %0d\012\012", P_0x555555d8f6e0 {0 0 0}; - %vpi_call 2 1831 "$display", "READ_SLOT = %0d", P_0x555555d8eae0 {0 0 0}; - %vpi_call 2 1832 "$display", "WRITE_SLOT = %0d", P_0x555555d8f0a0 {0 0 0}; - %vpi_call 2 1833 "$display", "ACTIVATE_SLOT = %0d", P_0x555555d8d320 {0 0 0}; - %vpi_call 2 1834 "$display", "PRECHARGE_SLOT = %0d", P_0x555555d8e8e0 {0 0 0}; - %vpi_call 2 1836 "$display", "\012\012DELAYS:" {0 0 0}; - %pushi/vec4 14, 0, 32; - %store/vec4 v0x555555da8bd0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_nCK, S_0x555555da8960; - %vpi_call 2 1837 "$display", "\011ns_to_nCK(tRCD): %0d", S<0,vec4,s32> {1 0 0}; - %pushi/vec4 14, 0, 32; - %store/vec4 v0x555555da8bd0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_nCK, S_0x555555da8960; - %vpi_call 2 1838 "$display", "\011ns_to_nCK(tRP): %0d", S<0,vec4,s32> {1 0 0}; - %pushi/vec4 10, 0, 32; - %store/vec4 v0x555555da8bd0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_nCK, S_0x555555da8960; - %vpi_call 2 1839 "$display", "\011ns_to_nCK(tRTP): %0d", S<0,vec4,s32> {1 0 0}; - %vpi_call 2 1840 "$display", "\011tCCD: %0d", P_0x555555d8f220 {0 0 0}; - %vpi_call 2 1841 "$display", "\011(CL_nCK + tCCD + 2 - CWL_nCK): %0d", 32'sb00000000000000000000000000000111 {0 0 0}; - %pushi/vec4 9, 0, 32; - %pushi/vec4 15, 0, 32; - %store/vec4 v0x555555da8bd0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_nCK, S_0x555555da8960; - %add; - %vpi_call 2 1842 "$display", "\011(CWL_nCK + 4 + ns_to_nCK(tWR)): %0d", S<0,vec4,s32> {1 0 0}; - %pushi/vec4 9, 0, 32; - %pushi/vec4 10, 0, 32; - %store/vec4 v0x555555da8bd0_0, 0, 32; - %callf/vec4 TD_ddr3_controller.ns_to_nCK, S_0x555555da8960; - %add; - %vpi_call 2 1843 "$display", "\011(CWL_nCK + 4 + ns_to_nCK(tWTR)): %0d", S<0,vec4,s32> {1 0 0}; - %vpi_call 2 1845 "$display", "\012\012PRECHARGE_TO_ACTIVATE_DELAY = %0d", P_0x555555d8e920 {0 0 0}; - %vpi_call 2 1846 "$display", "ACTIVATE_TO_WRITE_DELAY = %0d", P_0x555555d8d3e0 {0 0 0}; - %vpi_call 2 1847 "$display", "ACTIVATE_TO_READ_DELAY = %0d", P_0x555555d8d3a0 {0 0 0}; - %vpi_call 2 1848 "$display", "READ_TO_WRITE_DELAY = %0d", P_0x555555d8eba0 {0 0 0}; - %vpi_call 2 1849 "$display", "READ_TO_READ_DELAY = %0d", P_0x555555d8eb60 {0 0 0}; - %vpi_call 2 1850 "$display", "READ_TO_PRECHARGE_DELAY = %0d", P_0x555555d8eb20 {0 0 0}; - %vpi_call 2 1851 "$display", "WRITE_TO_WRITE_DELAY = %0d", P_0x555555d8f160 {0 0 0}; - %vpi_call 2 1852 "$display", "WRITE_TO_READ_DELAY = %0d", P_0x555555d8f120 {0 0 0}; - %vpi_call 2 1853 "$display", "WRITE_TO_PRECHARGE_DELAY = %0d", P_0x555555d8f0e0 {0 0 0}; - %vpi_call 2 1854 "$display", "STAGE2_DATA_DEPTH = %0d", P_0x555555d8ede0 {0 0 0}; - %vpi_call 2 1855 "$display", "READ_ACK_PIPE_WIDTH = %0d", P_0x555555d8ea20 {0 0 0}; - %end; - .thread T_19; - .scope S_0x555555d02bb0; -T_20 ; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db5d50_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db5ad0_0, 0, 1; - %end; - .thread T_20; - .scope S_0x555555d02bb0; -T_21 ; - %pushi/vec4 1, 0, 1; - %store/vec4 v0x555555db5400_0, 0, 1; - %pushi/vec4 0, 0, 1; - %store/vec4 v0x555555db5610_0, 0, 1; - %end; - .thread T_21; - .scope S_0x555555d02bb0; -T_22 ; - %wait E_0x555555d8c690; - %load/vec4 v0x555555db5790_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_22.0, 8; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db5400_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db5610_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db5ad0_0, 0; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db5d50_0, 0; - %jmp T_22.1; -T_22.0 ; - %load/vec4 v0x555555db5a10_0; - %flag_set/vec4 8; - %jmp/0xz T_22.2, 8; - %load/vec4 v0x555555db5c90_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_22.4, 8; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db5610_0, 0; -T_22.4 ; - %load/vec4 v0x555555db5ad0_0; - %pad/u 2; - %addi 1, 0, 2; - %pad/u 1; - %assign/vec4 v0x555555db5ad0_0, 0; - %load/vec4 v0x555555db5ad0_0; - %addi 1, 0, 1; - %load/vec4 v0x555555db5d50_0; - %cmp/e; - %flag_get/vec4 4; - %jmp/0 T_22.8, 4; - %load/vec4 v0x555555db5c90_0; - %nor/r; - %and; -T_22.8; - %flag_set/vec4 8; - %jmp/0xz T_22.6, 8; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db5400_0, 0; -T_22.6 ; -T_22.2 ; - %load/vec4 v0x555555db5c90_0; - %flag_set/vec4 8; - %jmp/0xz T_22.9, 8; - %load/vec4 v0x555555db5a10_0; - %nor/r; - %flag_set/vec4 8; - %jmp/0xz T_22.11, 8; - %pushi/vec4 0, 0, 1; - %assign/vec4 v0x555555db5400_0, 0; -T_22.11 ; - %load/vec4 v0x555555db5bb0_0; - %load/vec4 v0x555555db5d50_0; - %pad/u 3; - %ix/vec4 3; - %ix/load 4, 0, 0; Constant delay - %assign/vec4/a/d v0x555555db54c0, 0, 4; - %load/vec4 v0x555555db5d50_0; - %pad/u 2; - %addi 1, 0, 2; - %pad/u 1; - %assign/vec4 v0x555555db5d50_0, 0; - %load/vec4 v0x555555db5d50_0; - %addi 1, 0, 1; - %load/vec4 v0x555555db5ad0_0; - %cmp/e; - %flag_get/vec4 4; - %jmp/0 T_22.15, 4; - %load/vec4 v0x555555db5a10_0; - %nor/r; - %and; -T_22.15; - %flag_set/vec4 8; - %jmp/0xz T_22.13, 8; - %pushi/vec4 1, 0, 1; - %assign/vec4 v0x555555db5610_0, 0; -T_22.13 ; -T_22.9 ; -T_22.1 ; - %jmp T_22; - .thread T_22; -# The file index is used to find the file name in the following table. -:file_names 3; - "N/A"; - ""; - "rtl/ddr3_controller.v"; diff --git a/rtl/.ddr3_controller.v.swo b/rtl/.ddr3_controller.v.swo deleted file mode 100644 index 33b8e118f725b87de3e478cb137fbbcbb3ae9cd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217088 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

XCE0 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≺TxO;WYvScnckT`2O(nox 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 diff --git a/rtl/.ddr3_controller.v.swp b/rtl/.ddr3_controller.v.swp deleted file mode 100644 index 67fdd59f59bef1371051659cd893f9c33a9db793..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217088 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≥4=?GXLL#n?N1h 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%0AB9t+8EpT#e&pU93o$7S19? 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 Reva-W0%o^iljy><{x6c!pb-E7 diff --git a/rtl/.ddr3_phy.v.swp b/rtl/.ddr3_phy.v.swp deleted file mode 100644 index 0f388ebdb169d7c9cb43bc83f1b11f7aa7489fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61440 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 PRECHARGE_TO_ACTIVATE_DELAY -> ACTIVATE -> ACTIVATE_TO_WRITE_DELAY -> WRITE -> WRITE_TO_PRECHARGE_DELAY -> - //PRECHARGE -> PRECHARGE_TO_ACTIVATE_DELAY -> ACTIVATE -> ACTIVATE_TO_WRITE_DELAY -> WRITE -> WRITE_TO_PRECHARGE_DELAY - - /*********************************************************************************************************************************************/ - - - /********************************************************** Computed Delay Parameters **********************************************************/ - /* verilator lint_off REALCVT */ - localparam[3:0] PRECHARGE_TO_ACTIVATE_DELAY = find_delay(ns_to_nCK(tRP), PRECHARGE_SLOT, ACTIVATE_SLOT); //3 - localparam[3:0] ACTIVATE_TO_PRECHARGE_DELAY = find_delay(ns_to_nCK(tRAS), ACTIVATE_SLOT, PRECHARGE_SLOT); - localparam[3:0] ACTIVATE_TO_WRITE_DELAY = find_delay(ns_to_nCK(tRCD), ACTIVATE_SLOT, WRITE_SLOT); //3 - localparam[3:0] ACTIVATE_TO_READ_DELAY = find_delay(ns_to_nCK(tRCD), ACTIVATE_SLOT, READ_SLOT); //2 - localparam[3:0] READ_TO_WRITE_DELAY = find_delay((CL_nCK + tCCD + 2 - CWL_nCK), READ_SLOT, WRITE_SLOT); //2 - localparam[3:0] READ_TO_READ_DELAY = 0; - localparam[3:0] READ_TO_PRECHARGE_DELAY = find_delay(ns_to_nCK(tRTP), READ_SLOT, PRECHARGE_SLOT); //1 - localparam[3:0] WRITE_TO_WRITE_DELAY = 0; - localparam[3:0] WRITE_TO_READ_DELAY = find_delay((CWL_nCK + 4 + ns_to_nCK(tWTR)), WRITE_SLOT, READ_SLOT); //4 - localparam[3:0] WRITE_TO_PRECHARGE_DELAY = find_delay((CWL_nCK + 4 + ns_to_nCK(tWR)), WRITE_SLOT, PRECHARGE_SLOT); //5 - /* verilator lint_on REALCVT */ - //MARGIN_BEFORE_ANTICIPATE is the number of columns before the column - //end when the anticipate can start - //the worst case scenario is when the anticipated bank needs to be precharged - //thus the margin must satisfy tRP (for precharge) and tRCD (for activate). - //Also, worscase is when the anticipated bank still has the leftover of the - //WRITE_TO_PRECHARGE_DELAY thus consider also this. - localparam MARGIN_BEFORE_ANTICIPATE = PRECHARGE_TO_ACTIVATE_DELAY + ACTIVATE_TO_WRITE_DELAY + WRITE_TO_PRECHARGE_DELAY; - localparam STAGE2_DATA_DEPTH = (CWL_nCK - (3 - WRITE_SLOT + 1))/4 + 1; //this is always >= 1 (5 - (3 - 3 + 1))/4.0 -> floor(1) + 1 = floor(4 - `ifdef FORMAL - wire stage2_data_depth; - assign stage2_data_depth = STAGE2_DATA_DEPTH; - always @* begin - assert(STAGE2_DATA_DEPTH-2 >= 0); - end - `endif - localparam READ_DELAY = $rtoi($floor((CL_nCK - (3 - READ_SLOT + 1))/4.0 )); - localparam READ_ACK_PIPE_WIDTH = READ_DELAY + 1 + 2 + 1 + 1; - localparam MAX_ADDED_READ_ACK_DELAY = 16; - /* verilator lint_off REALCVT */ - localparam DELAY_BEFORE_WRITE_LEVEL_FEEDBACK = STAGE2_DATA_DEPTH + ns_to_cycles(tWLO+tWLOE) + 10; //plus 10 controller clocks for possible bus latency and - /* verilator lint_on REALCVT */ //the delay for receiving feedback DQ from IOBUF -> IDELAY -> ISERDES - /*********************************************************************************************************************************************/ - - - /********************************************************** Read/Write Calibration Parameters **********************************************************/ - localparam IDLE = 0, - BITSLIP_DQS_TRAIN_1 = 1, - MPR_READ = 2, - COLLECT_DQS = 3, - ANALYZE_DQS = 4, - CALIBRATE_DQS = 5, - BITSLIP_DQS_TRAIN_2 = 6, - START_WRITE_LEVEL = 7, - WAIT_FOR_FEEDBACK = 8, - ISSUE_WRITE_1 = 9, - ISSUE_WRITE_2 = 10, - ISSUE_READ = 11, - READ_DATA = 12, - ANALYZE_DATA = 13, - DONE_CALIBRATE = 14; - localparam STORED_DQS_SIZE = 5, //must be >= 2 - REPEAT_DQS_ANALYZE = 1; // repeat DQS read to find the accurate starting position of DQS - - /*********************************************************************************************************************************************/ - - - /************************************************************* Set Mode Registers Parameters *************************************************************/ - // MR2 (JEDEC DDR3 doc pg. 30) - localparam[2:0] PASR = 3'b000; //Partial Array Self-Refresh: Full Array - localparam[2:0] CWL = 3'b000; //CAS write Latency: 8 (1.5 ns > tCK(avg) >= 1.25 ns) CREATE A FUNCTION FOR THIS - localparam[0:0] ASR = 1'b1; //Auto Self-Refresh: on - localparam[0:0] SRT = 1'b0; //Self-Refresh Temperature Range:0 (If ASR = 1, SRT bit must be set to 0) - localparam[1:0] RTT_WR = 2'b00; //Dynamic ODT: off - localparam[2:0] MR2_SEL = 3'b010; //Selected Mode Register - localparam[18:0] MR2 = {MR2_SEL, 5'b00000, RTT_WR, 1'b0, SRT, ASR, CWL, PASR}; - - // MR3 (JEDEC DDR3 doc pg. 32) - localparam[1:0] MPR_LOC = 2'b00; //Data location for MPR Reads: Predefined Pattern 0_1_0_1_0_1_0_1 - localparam[0:0] MPR_EN = 1'b1; //MPR Enable: Enable MPR reads and calibration during initialization - localparam[0:0] MPR_DIS = 1'b0; //MPR Enable: Enable MPR reads and calibration during initialization - localparam[2:0] MR3_SEL = 3'b011; //MPR Selected - localparam[18:0] MR3_MPR_EN = {MR3_SEL, 13'b0_0000_0000_0000, MPR_EN, MPR_LOC}; - localparam[18:0] MR3_MPR_DIS = {MR3_SEL, 13'b0_0000_0000_0000, MPR_DIS, MPR_LOC}; - localparam[ROW_BITS+BA_BITS-1:0] MR3_RD_ADDR = 0; - - // MR1 (JEDEC DDR3 doc pg. 27) - localparam DLL_EN = 1'b0; //DLL Enable/Disable: Enabled(0) - localparam[1:0] DIC = 2'b00; //Output Driver Impedance Control (IS THIS THE SAME WITH RTT_NOM???????????? Search later) - localparam[2:0] RTT_NOM = 3'b011; //RTT Nominal: 40ohms (RQZ/6) is the impedance of the PCB trace - localparam[0:0] WL_EN = 1'b1; //Write Leveling Enable: Disabled - localparam[0:0] WL_DIS = 1'b0; //Write Leveling Enable: Disabled - localparam[1:0] AL = 2'b00; //Additive Latency: Disabled - localparam[0:0] TDQS = 1'b1; //Termination Data Strobe: Disabled (provides additional termination resistance outputs. - //When the TDQS function is disabled, the DM function is provided (vice-versa).TDQS function is only - //available for X8 DRAM and must be disabled for X4 and X16. - localparam[0:0] QOFF = 1'b0; //Output Buffer Control: Enabled - localparam[2:0] MR1_SEL = 3'b001; //Selected Mode Register - localparam[18:0] MR1_WL_EN = {MR1_SEL, 3'b000, QOFF, TDQS, 1'b0, RTT_NOM[2], 1'b0, WL_EN, RTT_NOM[1], DIC[1], AL, RTT_NOM[0], DIC[0], DLL_EN}; - localparam[18:0] MR1_WL_DIS = {MR1_SEL, 3'b000, QOFF, TDQS, 1'b0, RTT_NOM[2], 1'b0, WL_DIS, RTT_NOM[1], DIC[1], AL, RTT_NOM[0], DIC[0], DLL_EN}; - - //MR0 (JEDEC DDR3 doc pg. 24) - localparam[1:0] BL = 2'b00; //Burst Length: 8 (Fixed) - localparam[3:0] CL = 4'b0100; //CAS Read Latency: 10, can support DDR-1600 speedbin 8-8-8, 9-9-9, and 10-10-10 (Check JEDEC DDR doc pg. 162) CREATE A FUNCTION FOR THIS - localparam[0:0] RBT = 1'b0; //Read Burst Type: Nibble Sequential - localparam[0:0] DLL_RST = 1'b1; //DLL Reset: Yes (this is self-clearing and must be applied after DLL enable) - /* verilator lint_off REALCVT */ - localparam[2:0] WR = WRA_mode_register_value($ceil(tWR/DDR3_CLK_PERIOD)); //Write recovery for autoprecharge ( - /* verilator lint_on REALCVT */ - localparam[0:0] PPD = 1'b0; //DLL Control for Precharge PD: Slow exit (DLL off) - localparam[2:0] MR0_SEL = 3'b000; - localparam[18:0] MR0 = {MR0_SEL, 3'b000, PPD, WR, DLL_RST, 1'b0, CL[3:1], RBT, CL[0], BL}; - /*********************************************************************************************************************************************/ - localparam INITIAL_RESET_INSTRUCTION = {5'b01000 , CMD_NOP , { {(DELAY_SLOT_WIDTH-3){1'b0}} , 3'd5} }; - - /************************************************************* Registers and Wires *************************************************************/ - integer index; - reg[4:0] instruction_address = 0; //address for accessing rom instruction - reg[27:0] instruction = INITIAL_RESET_INSTRUCTION; //instruction retrieved from reset instruction rom - reg[ DELAY_COUNTER_WIDTH - 1:0] delay_counter = INITIAL_RESET_INSTRUCTION[DELAY_COUNTER_WIDTH - 1:0]; //counter used for delays - reg delay_counter_is_zero = (INITIAL_RESET_INSTRUCTION[DELAY_COUNTER_WIDTH - 1:0] == 0); //counter is now zero so retrieve next delay - reg reset_done = 0; //high if reset has already finished - reg pause_counter = 0; - wire issue_read_command; - wire issue_write_command; - reg[(1< `COVER_DELAY) delay_counter <= `COVER_DELAY; - else delay_counter <= instruction[DELAY_COUNTER_WIDTH - 1:0] ; //use delay from rom if that is smaller than the COVER_DELAY macro - `else - delay_counter <= instruction[DELAY_COUNTER_WIDTH - 1:0]; //retrieve delay value of current instruction, we count to zero thus minus 1 - `endif - end - - //else: decrement delay counter when current instruction needs delay - //don't decrement (has infinite time) when last bit of - //delay_counter is 1 (for r/w calibration and prestall delay) - //address will only move forward for these kinds of delay only - //when skip_reset_seq_delay is toggled - else if(instruction[USE_TIMER] /*&& delay_counter != {(DELAY_COUNTER_WIDTH){1'b1}}*/ && !pause_counter) delay_counter <= delay_counter - 1; - - //delay_counter of 1 means we will need to update the delay_counter next clock cycle (delay_counter of zero) so we need to retrieve - //now the next instruction. The same thing needs to be done when current instruction does not need the timer delay. - if(delay_counter == 1 || !instruction[USE_TIMER]/* || skip_reset_seq_delay*/) begin - delay_counter_is_zero <= 1; - instruction <= read_rom_instruction(instruction_address); - instruction_address <= (instruction_address == 5'd22)? 5'd19:instruction_address+1; //wrap back of address to repeat refresh sequence - end - //we are now on the middle of a delay - else delay_counter_is_zero <=0; - //instruction[RST_DONE] is non-persistent thus we need to register it once it goes high - reset_done <= instruction[RST_DONE]? 1'b1:reset_done; - end - end - /*********************************************************************************************************************************************/ - - - /******************************************************* Track Bank Status and Issue Command *******************************************************/ - //process request transaction - always @(posedge i_controller_clk, negedge i_rst_n) begin - if(!i_rst_n ) begin - o_wb_stall <= 1'b1; - o_wb_stall_q <= 1'b1; - //set stage 1 to 0 - stage1_pending <= 0; - stage1_we <= 0; - stage1_col <= 0; - stage1_bank <= 0; - stage1_row <= 0; - stage1_next_bank <= 0; - stage1_next_row <= 0; - stage1_next_col <= 0; - stage1_data <= 0; - //set stage2 to 0 - stage2_pending <= 0; - stage2_we <= 0; - stage2_col <= 0; - stage2_bank <= 0; - stage2_row <= 0; - cmd_odt_q <= 0; - stage2_data_unaligned <= 0; - stage2_dm_unaligned <= 0; - for(index=0; index shiftreg(CWL) -> OSERDES(DDR) -> ODELAY -> RAM - end - - // when not in refresh, transaction can only be processed when i_wb_cyc is high and not stall - if(i_wb_cyc && !o_wb_stall) begin - //stage1 will not do the request (pending low) when the - //request is on the same bank as the current request. This - //will ensure stage1 bank will be different from stage2 bank - stage1_pending <= i_wb_stb;//actual request flag - stage1_aux <= i_aux; //aux ID for AXI compatibility - stage1_we <= i_wb_we; //write-enable - stage1_dm <= i_wb_sel; //byte selection - stage1_col <= { i_wb_addr[(COL_BITS- $clog2(serdes_ratio*2)-1):0], {{$clog2(serdes_ratio*2)}{1'b0}} }; //column address (n-burst word-aligned) - stage1_bank <= i_wb_addr[(BA_BITS + COL_BITS- $clog2(serdes_ratio*2) - 1) : (COL_BITS- $clog2(serdes_ratio*2))]; //bank_address - stage1_row <= i_wb_addr[ (ROW_BITS + BA_BITS + COL_BITS- $clog2(serdes_ratio*2) - 1) : (BA_BITS + COL_BITS- $clog2(serdes_ratio*2)) ]; //row_address - //stage1_next_bank will not increment unless stage1_next_col - //overwraps due to MARGIN_BEFORE_ANTICIPATE. Thus, anticipated - //precharge and activate will happen only at the end of the - //current column with a margin dictated by - //MARGIN_BEFORE_ANTICIPATE - /* verilator lint_off WIDTH */ - {stage1_next_row , stage1_next_bank, stage1_next_col[COL_BITS-1:$clog2(serdes_ratio*2)] } <= i_wb_addr + MARGIN_BEFORE_ANTICIPATE; //anticipated next row and bank to be accessed - /* verilator lint_on WIDTH */ - stage1_data <= i_wb_data; - end - else if(state_calibrate != DONE_CALIBRATE) begin - stage1_pending <= write_calib_stb;//actual request flag - stage1_we <= write_calib_we; //write-enable - stage1_dm <= 0; - stage1_aux <= write_calib_aux; //aux ID for AXI compatibility - stage1_col <= write_calib_col; //column address (n-burst word-aligned) - stage1_bank <= 0; //bank_address - stage1_row <= 0; //row_address - {stage1_next_row , stage1_next_bank, stage1_next_col[COL_BITS-1:$clog2(serdes_ratio*2)] } <= 0; //anticipated next row and bank to be accessed - stage1_data <= write_calib_data; - end - - for(index = 0; index < LANES; index = index + 1) begin - /* verilator lint_off WIDTH */ - {unaligned_data[index], { - stage2_data[0][((DQ_BITS*LANES)*7 + 8*index) +: 8], stage2_data[0][((DQ_BITS*LANES)*6 + 8*index) +: 8], - stage2_data[0][((DQ_BITS*LANES)*5 + 8*index) +: 8], stage2_data[0][((DQ_BITS*LANES)*4 + 8*index) +: 8], - stage2_data[0][((DQ_BITS*LANES)*3 + 8*index) +: 8], stage2_data[0][((DQ_BITS*LANES)*2 + 8*index) +: 8], - stage2_data[0][((DQ_BITS*LANES)*1 + 8*index) +: 8], stage2_data[0][((DQ_BITS*LANES)*0 + 8*index) +: 8] }} - <= ( { stage2_data_unaligned[((DQ_BITS*LANES)*7 + 8*index) +: 8], stage2_data_unaligned[((DQ_BITS*LANES)*6 + 8*index) +: 8], - stage2_data_unaligned[((DQ_BITS*LANES)*5 + 8*index) +: 8], stage2_data_unaligned[((DQ_BITS*LANES)*4 + 8*index) +: 8], - stage2_data_unaligned[((DQ_BITS*LANES)*3 + 8*index) +: 8], stage2_data_unaligned[((DQ_BITS*LANES)*2 + 8*index) +: 8], - stage2_data_unaligned[((DQ_BITS*LANES)*1 + 8*index) +: 8], stage2_data_unaligned[((DQ_BITS*LANES)*0 + 8*index) +: 8] } - << data_start_index[index]) | unaligned_data[index]; - - {unaligned_dm[index], { - stage2_dm[0][LANES*7 + index], stage2_dm[0][LANES*6 + index], - stage2_dm[0][LANES*5 + index], stage2_dm[0][LANES*4 + index], - stage2_dm[0][LANES*3 + index], stage2_dm[0][LANES*2 + index], - stage2_dm[0][LANES*1 + index], stage2_dm[0][LANES*0 + index] }} - <= ( { stage2_dm_unaligned[LANES*7 + index], stage2_dm_unaligned[LANES*6 + index], - stage2_dm_unaligned[LANES*5 + index], stage2_dm_unaligned[LANES*4 + index], - stage2_dm_unaligned[LANES*3 + index], stage2_dm_unaligned[LANES*2 + index], - stage2_dm_unaligned[LANES*1 + index], stage2_dm_unaligned[LANES*0 + index] } - << (data_start_index[index]>>3)) | unaligned_dm[index]; - /* verilator lint_on WIDTH */ - end - for(index = 0; index < STAGE2_DATA_DEPTH-1; index = index+1) begin - stage2_data[index+1] <= stage2_data[index]; - stage2_dm[index+1] <= stage2_dm[index]; - end - - //abort any outgoing ack when cyc is low - if(!i_wb_cyc && state_calibrate == DONE_CALIBRATE) begin - stage2_pending <= 0; - stage1_pending <= 0; - end - end - end - assign o_phy_data = stage2_data[STAGE2_DATA_DEPTH-1]; - assign o_phy_dm = stage2_dm[STAGE2_DATA_DEPTH-1]; - // DIAGRAM FOR ALL RELEVANT TIMING PARAMETERS: - // - // tRTP - // ------------------------------------------------------------- - // | tCCD | - // | -----> Read ---------> Read - // v | ^ | - // Precharge ------> Activate -------->| | tWTR | tRTW - // ^ tRP tRCD | | v - // | ------> Write -------> Write - // | tCCD | - // ------------------------------------------------------------- - // tWR (after data burst) - //note: all delays after write counts only after the data burst (except for write-to-write tCCD) - // - //Pipeline Stages: - // wishbone inputs --> stage1 --> stage2 --> cmd - reg stage2_update = 1; - reg stage2_stall = 0; - reg stage1_stall = 0; - (*keep*) reg stage1_issue_command = 0; - (*keep*) reg stage2_issue_command = 0; - always @* begin - stage1_issue_command = 0; - stage2_issue_command = 0; - cmd_odt = cmd_odt_q || write_calib_odt; - cmd_ck_en = instruction[CLOCK_EN]; - cmd_reset_n = instruction[RESET_N]; - stage1_stall = 1'b0; - stage2_stall = 1'b0; - stage2_update = 1'b1; //always update stage 2 UNLESS it has a pending request (stage2_pending high) - o_wb_stall_d = 1'b0; //wb_stall going high is determined on stage 1 (higher priority), wb_stall going low is determined at stage2 (lower priority) - precharge_slot_busy = 0; //flag that determines if stage 2 is issuing precharge (thus stage 1 cannot issue precharge) - activate_slot_busy = 0; //flag that determines if stage 2 is issuing activate (thus stage 1 cannot issue activate) - write_dqs_d = write_calib_dqs; - write_dq_d = write_calib_dq; - for(index=0; index < (1<> 1); - end - if(shift_reg_read_pipe_q[1][0]) begin //delay is over and data is now starting to release from iserdes BUT NOT YET ALIGNED - index_read_pipe <= !index_read_pipe; //control which delay_read_pipe would get updated (we have 3 pipe to store read data)ss - delay_read_pipe[index_read_pipe][added_read_pipe_max] <= 1'b1; //update delay_read_pipe - end - for(index = 0; index < LANES; index = index + 1) begin - if(delay_read_pipe[0][{3'd0, added_read_pipe_max != added_read_pipe[index]}]) begin //same lane - o_wb_data_q[0][((DQ_BITS*LANES)*0 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*0 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[0][((DQ_BITS*LANES)*1 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*1 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[0][((DQ_BITS*LANES)*2 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*2 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[0][((DQ_BITS*LANES)*3 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*3 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[0][((DQ_BITS*LANES)*4 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*4 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[0][((DQ_BITS*LANES)*5 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*5 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[0][((DQ_BITS*LANES)*6 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*6 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[0][((DQ_BITS*LANES)*7 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*7 + 8*index) +: 8]; //update each lane of the burst - end - if(delay_read_pipe[1][{3'd0, added_read_pipe_max != added_read_pipe[index]}]) begin - o_wb_data_q[1][((DQ_BITS*LANES)*0 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*0 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[1][((DQ_BITS*LANES)*1 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*1 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[1][((DQ_BITS*LANES)*2 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*2 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[1][((DQ_BITS*LANES)*3 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*3 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[1][((DQ_BITS*LANES)*4 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*4 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[1][((DQ_BITS*LANES)*5 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*5 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[1][((DQ_BITS*LANES)*6 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*6 + 8*index) +: 8]; //update each lane of the burst - o_wb_data_q[1][((DQ_BITS*LANES)*7 + 8*index) +: 8] <= i_phy_iserdes_data[((DQ_BITS*LANES)*7 + 8*index) +: 8]; //update each lane of the burst - end - end - if(o_wb_ack_read_q[0][0]) begin - index_wb_data <= !index_wb_data; - end - for(index = 1; index < MAX_ADDED_READ_ACK_DELAY; index = index + 1) begin - o_wb_ack_read_q[index-1] <= o_wb_ack_read_q[index]; - end - o_wb_ack_read_q[MAX_ADDED_READ_ACK_DELAY-1] <= 0; - o_wb_ack_read_q[added_read_pipe_max] <= shift_reg_read_pipe_q[0]; - - //abort any outgoing ack when cyc is low - if(!i_wb_cyc && state_calibrate == DONE_CALIBRATE) begin - for(index = 0; index < MAX_ADDED_READ_ACK_DELAY; index = index + 1) begin - o_wb_ack_read_q[index] <= 0; - end - for(index = 0; index < READ_ACK_PIPE_WIDTH; index = index + 1) begin - shift_reg_read_pipe_q[index] <= 0; - end - end - end - end - assign o_wb_ack = o_wb_ack_read_q[0][0] && state_calibrate == DONE_CALIBRATE; - //o_wb_ack_read_q[0][0] is needed internally for write calibration but it must not go outside (since it is not an actual user wb request unless we are in DONE_CALIBRATE) - assign o_aux = o_wb_ack_read_q[0][AUX_WIDTH:1]; - assign o_wb_data = o_wb_data_q[index_wb_data]; - assign o_phy_dqs_tri_control = !write_dqs[STAGE2_DATA_DEPTH]; - assign o_phy_dq_tri_control = !write_dq[STAGE2_DATA_DEPTH+1]; - generate - if(STAGE2_DATA_DEPTH - 2 >= 0) - assign o_phy_toggle_dqs = write_dqs_val[STAGE2_DATA_DEPTH-2]; - else - assign o_phy_toggle_dqs = write_dqs_d || write_dqs_q[0]; - endgenerate - /*********************************************************************************************************************************************/ - - - /******************************************************* Read/Write Calibration Sequence *******************************************************/ - always @(posedge i_controller_clk, negedge i_rst_n) begin - if(!i_rst_n) begin - state_calibrate <= IDLE; - train_delay <= 0; - dqs_store <= 0; - dqs_count_repeat <= 0; - dqs_start_index <= 0; - dqs_target_index <= 0; - dqs_target_index_orig <= 0; - o_phy_bitslip <= 0; - initial_dqs <= 1; - lane <= 0; - dqs_bitslip_arrangement <= 0; - write_calib_dqs <= 0; - write_calib_dq <= 0; - write_calib_odt <= 0; - prev_write_level_feedback <= 1; - write_calib_stb <= 0;//actual request flag - write_calib_aux <= 0; //AUX ID - write_calib_we <= 0; //write-enable - write_calib_col <= 0; - write_calib_data <= 0; - pause_counter <= 0; - read_data_store <= 0; - write_pattern <= 0; - added_read_pipe_max <= 0; - dqs_start_index_stored <= 0; - dqs_start_index_repeat <= 0; - delay_before_write_level_feedback <= 0; - delay_before_read_data <= 0; - for(index = 0; index < LANES; index = index + 1) begin - added_read_pipe[index] <= 0; - data_start_index[index] <= 0; - odelay_data_cntvaluein[index] <= DATA_INITIAL_ODELAY_TAP[4:0]; - odelay_dqs_cntvaluein[index] <= DQS_INITIAL_ODELAY_TAP[4:0]; - idelay_data_cntvaluein[index] <= DATA_INITIAL_IDELAY_TAP[4:0]; - idelay_dqs_cntvaluein[index] <= DQS_INITIAL_IDELAY_TAP[4:0]; - end - end - else begin - write_calib_stb <= 0;//actual request flag - write_calib_aux <= 0; //AUX ID - write_calib_we <= 0; //write-enable - write_calib_col <= 0; - write_calib_data <= 0; - write_calib_dqs <= 0; - write_calib_dq <= 0; - train_delay <= (train_delay==0)? 0:(train_delay - 1); - delay_before_read_data <= (delay_before_read_data == 0)? 0: delay_before_read_data - 1; - delay_before_write_level_feedback <= (delay_before_write_level_feedback == 0)? 0: delay_before_write_level_feedback - 1; - o_phy_bitslip <= 0; - o_phy_odelay_data_ld <= 0; - o_phy_odelay_dqs_ld <= 0; - o_phy_idelay_data_ld <= 0; - o_phy_idelay_dqs_ld <= 0; - idelay_data_cntvaluein_prev <= idelay_data_cntvaluein[lane]; - - if(wb2_update) begin - odelay_data_cntvaluein[wb2_write_lane] <= wb2_phy_odelay_data_ld[wb2_write_lane]? wb2_phy_odelay_data_cntvaluein : odelay_data_cntvaluein[wb2_write_lane]; - odelay_dqs_cntvaluein[wb2_write_lane] <= wb2_phy_odelay_dqs_ld[wb2_write_lane]? wb2_phy_odelay_dqs_cntvaluein : odelay_dqs_cntvaluein[wb2_write_lane]; - idelay_data_cntvaluein[wb2_write_lane] <= wb2_phy_idelay_data_ld[wb2_write_lane]? wb2_phy_idelay_data_cntvaluein : idelay_data_cntvaluein[wb2_write_lane]; - idelay_dqs_cntvaluein[wb2_write_lane] <= wb2_phy_idelay_dqs_ld[wb2_write_lane]? wb2_phy_idelay_dqs_cntvaluein : idelay_dqs_cntvaluein[wb2_write_lane]; - o_phy_odelay_data_ld <= wb2_phy_odelay_data_ld; - o_phy_odelay_dqs_ld <= wb2_phy_odelay_dqs_ld; - o_phy_idelay_data_ld <= wb2_phy_idelay_data_ld; - o_phy_idelay_dqs_ld <= wb2_phy_idelay_dqs_ld; - lane <= wb2_write_lane; - end - else if(state_calibrate != DONE_CALIBRATE) begin - // increase cntvalue every load to prepare for possible next load - odelay_data_cntvaluein[lane] <= o_phy_odelay_data_ld[lane]? odelay_data_cntvaluein[lane] + 1: odelay_data_cntvaluein[lane]; - odelay_dqs_cntvaluein[lane] <= o_phy_odelay_dqs_ld[lane]? odelay_dqs_cntvaluein[lane] + 1: odelay_dqs_cntvaluein[lane]; - idelay_data_cntvaluein[lane] <= o_phy_idelay_data_ld[lane]? idelay_data_cntvaluein[lane] + 1: idelay_data_cntvaluein[lane]; - idelay_dqs_cntvaluein[lane] <= o_phy_idelay_dqs_ld[lane]? idelay_dqs_cntvaluein[lane] + 1: idelay_dqs_cntvaluein[lane]; - end - if(initial_dqs) begin - dqs_target_index <= dqs_target_index_value; - dq_target_index <= dqs_target_index_value; - dqs_target_index_orig <= dqs_target_index_value; - end - if(idelay_dqs_cntvaluein[lane] == 0) begin //go back to previous odd - dqs_target_index <= dqs_target_index_orig - 2; - end - if(idelay_data_cntvaluein[lane] == 0 && idelay_data_cntvaluein_prev == 31) begin - dq_target_index <= dqs_target_index_orig - 2; - end - - // FSM - case(state_calibrate) - IDLE: if(i_phy_idelayctrl_rdy && instruction_address == 13) begin //we are now inside instruction 15 with maximum delay - state_calibrate <= BITSLIP_DQS_TRAIN_1; - lane <= 0; - o_phy_odelay_data_ld <= {LANES{1'b1}}; - o_phy_odelay_dqs_ld <= {LANES{1'b1}}; - o_phy_idelay_data_ld <= {LANES{1'b1}}; - o_phy_idelay_dqs_ld <= {LANES{1'b1}}; - pause_counter <= 1; //pause instruction address @13 until read calibration finishes - end - else if(instruction_address == 13) begin - pause_counter <= 1; //pause instruction address @13 until read calibration finishes - end - BITSLIP_DQS_TRAIN_1: if(train_delay == 0) begin - /* Bitslip cannot be asserted for two consecutive CLKDIV cycles; Bitslip must be - deasserted for at least one CLKDIV cycle between two Bitslip assertions.The user - logic should wait for at least two CLKDIV cycles in SDR mode or three CLKDIV cycles - in DDR mode, before analyzing the received data pattern and potentially issuing - another Bitslip command. If the ISERDESE2 is reset, the Bitslip logic is also reset - and returns back to its initial state. - */ - if(i_phy_iserdes_bitslip_reference[lane*LANES +: 8] == 8'b0111_1000) begin //initial arrangement - state_calibrate <= MPR_READ; - initial_dqs <= 1; - dqs_start_index_repeat <= 0; - dqs_start_index_stored <= 0; - end - else begin - o_phy_bitslip[lane] <= 1; - train_delay <= 3; - end - end - - MPR_READ: begin //align the incoming DQS during reads to the controller clock - //issue_read_command = 1; - /* verilator lint_off WIDTH */ - delay_before_read_data <= READ_DELAY + 1 + 2 + 1; ///1=issue command delay (OSERDES delay), 2 = ISERDES delay - /* verilator lint_on WIDTH */ - state_calibrate <= COLLECT_DQS; - dqs_count_repeat <= 0; - end - - COLLECT_DQS: if(delay_before_read_data == 0) begin - dqs_store <= {i_phy_iserdes_dqs[LANES*lane +: 8], dqs_store[(STORED_DQS_SIZE*8-1):8]}; - dqs_count_repeat <= dqs_count_repeat + 1; - if(dqs_count_repeat == STORED_DQS_SIZE - 1) begin - state_calibrate <= ANALYZE_DQS; - dqs_start_index_stored <= dqs_start_index; - dqs_start_index <= 0; - end - end - - ANALYZE_DQS: if(dqs_store[dqs_start_index +: 10] == 10'b01_01_01_01_00) begin - dqs_start_index_repeat <= (dqs_start_index == dqs_start_index_stored)? dqs_start_index_repeat + 1: 0; //increase dqs_start_index_repeat when index is the same as before - if(dqs_start_index_repeat == REPEAT_DQS_ANALYZE) begin //the same index appeared REPEAT_DQS_ANALYZE times in a row, thus can proceed to CALIBRATE_DQS - initial_dqs <= 0; - dqs_start_index_repeat <= 0; - - state_calibrate <= CALIBRATE_DQS; - end - else begin - state_calibrate <= MPR_READ; - end - end - else begin - dqs_start_index <= dqs_start_index + 1; - end - - CALIBRATE_DQS: if(dqs_start_index_stored == dqs_target_index) begin - added_read_pipe[lane] <= dq_target_index[$clog2(STORED_DQS_SIZE*8)-1:3] + { {($clog2(STORED_DQS_SIZE*8)-3){1'b0}} , (dq_target_index[2:0] >= 5)}; - dqs_bitslip_arrangement <= 16'b0011_1100_0011_1100 >> dq_target_index[2:0]; - state_calibrate <= BITSLIP_DQS_TRAIN_2; - end - else begin - o_phy_idelay_data_ld[lane] <= 1; - o_phy_idelay_dqs_ld[lane] <= 1; - state_calibrate <= MPR_READ; - end - - BITSLIP_DQS_TRAIN_2: if(train_delay == 0) begin //train again the ISERDES to capture the DQ correctly - if(i_phy_iserdes_bitslip_reference[lane*LANES +: 8] == dqs_bitslip_arrangement[7:0]) begin - /* verilator lint_off WIDTH */ - if(lane == LANES - 1) begin - /* verilator lint_on WIDTH */ - pause_counter <= 0; //read calibration now complete so continue the reset instruction sequence - lane <= 0; - prev_write_level_feedback <= 1'b1; - state_calibrate <= START_WRITE_LEVEL; - end - else begin - lane <= lane + 1; - state_calibrate <= BITSLIP_DQS_TRAIN_1; - end - added_read_pipe_max <= added_read_pipe_max > added_read_pipe[lane]? added_read_pipe_max:added_read_pipe[lane]; - end - else begin - o_phy_bitslip[lane] <= 1; - train_delay <= 3; - end - end - - START_WRITE_LEVEL: if(instruction_address == 17) begin - write_calib_dqs <= 1'b1; - write_calib_odt <= 1'b1; - delay_before_write_level_feedback <= DELAY_BEFORE_WRITE_LEVEL_FEEDBACK[$clog2(DELAY_BEFORE_WRITE_LEVEL_FEEDBACK):0]; - state_calibrate <= WAIT_FOR_FEEDBACK; - pause_counter <= 1; // pause instruction address @17 until write calibration finishes - end - - WAIT_FOR_FEEDBACK: if(delay_before_write_level_feedback == 0) begin - /* verilator lint_off WIDTH */ //_verilator warning: Bit extraction of var[511:0] requires 9 bit index, not 3 bits (but [lane<<3] is much simpler and cleaner) - prev_write_level_feedback <= i_phy_iserdes_data[lane<<3]; - if({prev_write_level_feedback, i_phy_iserdes_data[lane<<3]} == 2'b01) begin - /* verilator lint_on WIDTH */ - /* verilator lint_off WIDTH */ - if(lane == LANES - 1) begin - /* verilator lint_on WIDTH */ - write_calib_odt <= 0; - pause_counter <= 0; //write calibration now complete so continue the reset instruction sequence - lane <= 0; - state_calibrate <= ISSUE_WRITE_1; - end - else begin - lane <= lane + 1; - prev_write_level_feedback <= 1'b1; - state_calibrate <= START_WRITE_LEVEL; - end - end - else begin - o_phy_odelay_data_ld[lane] <= 1; - o_phy_odelay_dqs_ld[lane] <= 1; - state_calibrate <= START_WRITE_LEVEL; - end - end - ISSUE_WRITE_1: if(instruction_address == 22 && !o_wb_stall_q) begin - write_calib_stb <= 1;//actual request flag - write_calib_aux <= 1; //AUX ID to determine later if ACK is for read or write - write_calib_we <= 1; //write-enable - write_calib_col <= 0; - write_calib_data <= { {LANES{8'h91}}, {LANES{8'h77}}, {LANES{8'h29}}, {LANES{8'h8c}}, {LANES{8'hd0}}, {LANES{8'had}}, {LANES{8'h51}}, {LANES{8'hc1}} }; - state_calibrate <= ISSUE_WRITE_2; - end - ISSUE_WRITE_2: begin - write_calib_stb <= 1;//actual request flag - write_calib_aux <= 1; //AUX ID to determine later if ACK is for read or write - write_calib_we <= 1; //write-enable - write_calib_col <= 8; - write_calib_data <= { {LANES{8'h80}}, {LANES{8'hdb}}, {LANES{8'hcf}}, {LANES{8'hd2}}, {LANES{8'h75}}, {LANES{8'hf1}}, {LANES{8'h2c}}, {LANES{8'h3d}} }; - state_calibrate <= ISSUE_READ; - end - ISSUE_READ: if(!o_wb_stall_q && write_calib_stb == 0) begin - write_calib_stb <= 1;//actual request flag - write_calib_aux <= 0; //AUX ID to determine later if ACK is for read or write - write_calib_we <= 0; //write-enable - state_calibrate <= READ_DATA; - end - - READ_DATA: if(o_wb_ack_read_q[0] == {{(AUX_WIDTH){1'b0}}, 1'b1}) begin //wait for the read ack (which has UAX ID of 0} - read_data_store <= o_wb_data; - state_calibrate <= ANALYZE_DATA; - data_start_index[lane] <= 0; - // Possible Patterns (strong autocorrel stat) - //0x80dbcfd275f12c3d - //0x9177298cd0ad51c1 - //0x01b79fa4ebe2587b - //0x22ee5319a15aa382 - write_pattern <= 128'h80dbcfd275f12c3d_9177298cd0ad51c1; - end - - //ANALYZE_DATA: if(write_pattern[data_start_index[lane] +: 64] == read_data_store[lane*DQ_BITS*8 +: DQ_BITS*8]) begin - ANALYZE_DATA: if(write_pattern[data_start_index[lane] +: 64] == {read_data_store[((DQ_BITS*LANES)*7 + 8*lane) +: 8], read_data_store[((DQ_BITS*LANES)*6 + 8*lane) +: 8], - read_data_store[((DQ_BITS*LANES)*5 + 8*lane) +: 8], read_data_store[((DQ_BITS*LANES)*4 + 8*lane) +: 8], read_data_store[((DQ_BITS*LANES)*3 + 8*lane) +: 8], - read_data_store[((DQ_BITS*LANES)*2 + 8*lane) +: 8],read_data_store[((DQ_BITS*LANES)*1 + 8*lane) +: 8],read_data_store[((DQ_BITS*LANES)*0 + 8*lane) +: 8] }) begin - /* verilator lint_off WIDTH */ - if(lane == LANES - 1) begin - /* verilator lint_on WIDTH */ - state_calibrate <= DONE_CALIBRATE; - end - else begin - lane <= lane + 1; - data_start_index[lane+1] <= 0; - end - end - else begin - data_start_index[lane] <= data_start_index[lane] + 8; - end - DONE_CALIBRATE: begin - state_calibrate <= DONE_CALIBRATE; - if(instruction_address == 19) begin //pre-stall delay to finish all remaining requests - pause_counter <= 1; // pause instruction address until pre-stall delay before refresh sequence finishes - //skip to instruction address 20 (precharge all before refresh) when no pending requests anymore - //toggle it for 1 clk cycle only - if(!stage1_pending && !stage2_pending && o_wb_stall) begin - pause_counter <= 0; // pre-stall delay done since all remaining requests are completed - end - end - end - - endcase - `ifdef FORMAL_COVER - state_calibrate <= DONE_CALIBRATE; - `endif - end - end - assign issue_read_command = (state_calibrate == MPR_READ); - assign issue_write_command = 0; - assign o_phy_odelay_data_cntvaluein = odelay_data_cntvaluein[lane]; - assign o_phy_odelay_dqs_cntvaluein = odelay_dqs_cntvaluein[lane]; - assign o_phy_idelay_data_cntvaluein = idelay_data_cntvaluein[lane]; - assign o_phy_idelay_dqs_cntvaluein = idelay_dqs_cntvaluein[lane]; - assign dqs_target_index_value = dqs_start_index_stored[0]? dqs_start_index_stored + 2: dqs_start_index_stored + 1; - - /*********************************************************************************************************************************************/ - - - /******************************************************* Wishbone 2 (PHY) Interface *******************************************************/ - - always @(posedge i_controller_clk, negedge i_rst_n) begin - if(!i_rst_n) begin - wb2_stb <= 0; - end - else begin - if(i_wb2_cyc && !o_wb2_stall) begin - wb2_stb <= i_wb2_stb; - wb2_we <= i_wb2_we; //data to be written which must have high i_wb2_sel are: {LANE_NUMBER, CNTVALUEIN} - wb2_addr <= i_wb2_addr; - wb2_data <= i_wb2_data; - wb2_sel <= i_wb2_sel; - end - else if(!o_wb2_stall) begin - wb2_stb <= 0; - wb2_we <= 0; - wb2_addr <= 0; - wb2_data <= 0; - wb2_sel <= 0; - end - end - end - - always @(posedge i_controller_clk, negedge i_rst_n) begin - if(!i_rst_n) begin - wb2_phy_odelay_data_cntvaluein <= 0; - wb2_phy_odelay_data_ld <= 0; - wb2_phy_odelay_dqs_cntvaluein <= 0; - wb2_phy_odelay_dqs_ld <= 0; - wb2_phy_idelay_data_cntvaluein <= 0; - wb2_phy_idelay_data_ld <= 0; - wb2_phy_idelay_dqs_cntvaluein <= 0; - wb2_phy_idelay_dqs_ld <= 0; - wb2_update <= 0; - wb2_write_lane <= 0; - o_wb2_ack <= 0; - o_wb2_stall <= 1; - end - else begin - wb2_phy_odelay_data_ld <= 0; - wb2_phy_odelay_dqs_ld <= 0; - wb2_phy_idelay_data_ld <= 0; - wb2_phy_idelay_dqs_ld <= 0; - wb2_update <= 0; - wb2_write_lane <= 0; - o_wb2_ack <= wb2_stb && i_wb2_cyc; //always ack right after request - o_wb2_stall <= state_calibrate != DONE_CALIBRATE; //low stall only after calibration - if(wb2_stb) begin - case(wb2_addr[3:0]) - //read/write odelay cntvalue for DQ line - 0: if(wb2_we) begin - wb2_phy_odelay_data_cntvaluein <= wb2_data[4:0]; //save first 5 bits as CNTVALUEIN for the ODELAYE2 for DQ - wb2_phy_odelay_data_ld <= 1 << (wb2_data[5 +: $clog2(LANES)]); //raise the lane to be loaded with new cntvaluein - wb2_update <= wb2_sel[$rtoi($ceil( ($clog2(LANES) + 5)/8 )) - 1:0]; //only update when sel bit is high (data is valid) - end - else begin - o_wb2_data <= { {(WB2_DATA_BITS-5){1'b0}} , odelay_data_cntvaluein[wb2_addr[4 +: $clog2(LANES)]] };//use next bits of address as lane number to be read - end - - //read/write odelay cntvalue for DQS line - 1: if(wb2_we) begin - wb2_phy_odelay_dqs_cntvaluein <= wb2_data[4:0]; //save first 5 bits as CNTVALUEIN for the ODELAYE2 for DQS - wb2_phy_odelay_dqs_ld <= 1 << (wb2_data[5 +: $clog2(LANES)]); //raise the lane to be loaded with new cntvaluein - wb2_update <= wb2_sel[$rtoi($ceil( ($clog2(LANES) + 5)/8 )) - 1:0]; //only update when sel bit is high (data is valid) - end - else begin - o_wb2_data <= { {(WB2_DATA_BITS-5){1'b0}} , odelay_dqs_cntvaluein[wb2_addr[4 +: $clog2(LANES)]] };//use next bits of address as lane number to be read - end - - //read/write idelay cntvalue for DQ line - 2: if(wb2_we) begin - wb2_phy_idelay_data_cntvaluein <= wb2_data[4:0]; //save first 5 bits as CNTVALUEIN for the IDELAYE2 for DQ - wb2_phy_idelay_data_ld <= 1 << (wb2_data[5 +: $clog2(LANES)]); //save next 5 bits for lane number to be loaded with new delay - wb2_update <= wb2_sel[$rtoi($ceil( ($clog2(LANES) + 5)/8 )) - 1:0]; //only update when sel bit is high (data is valid) - end - else begin - o_wb2_data <= { {(WB2_DATA_BITS-5){1'b0}} , idelay_data_cntvaluein[wb2_addr[4 +: $clog2(LANES)]] }; //use next bits of address as lane number to be read - end - - //read/write idelay cntvalue for DQS line - 3: if(wb2_we) begin - wb2_phy_idelay_dqs_cntvaluein <= wb2_data[4:0]; //save first 5 bits as CNTVALUEIN for the IDELAYE2 for DQS - wb2_phy_idelay_dqs_ld <= 1 << (wb2_data[5 +: $clog2(LANES)]); //save next 5 bits for lane number to be loaded with new delay - wb2_update <= wb2_sel[$rtoi($ceil( ($clog2(LANES) + 5)/8 )) - 1:0]; //only update when sel bit is high (data is valid) - end - else begin - o_wb2_data <= { {(WB2_DATA_BITS-5){1'b0}} , idelay_dqs_cntvaluein[wb2_addr[4 +: $clog2(LANES)]] }; //use next bits of address as lane number to be read - end - - default: if(!wb2_we) begin //read - o_wb2_data <= {(WB2_DATA_BITS/2){2'b10}}; //return alternating 1s and 0s when address to be read is invalid - end - endcase - - wb2_write_lane <= wb2_data[5 +: $clog2(LANES)]; //save next 5 bits for lane number to be loaded with new delay - end //end of if(wb2_stb) - end//end of else - end//end of always - - /*********************************************************************************************************************************************/ - - - /******************************************************* Functions *******************************************************/ - //`define SUPPORT_REAL - //convert nanoseconds time input to number of controller clock cycles (referenced to CONTROLLER_CLK_PERIOD) - //output is set at same length as a MRS command (19 bits) to maximize the time slot - function [DELAY_SLOT_WIDTH - 1:0] ns_to_cycles (`ifdef SUPPORT_REAL input real ns `else input integer ns `endif); - integer result; - begin - result = $rtoi($ceil(ns*1.0/CONTROLLER_CLK_PERIOD)); //Without $rtoi: YOSYS ERROR: Non-constant expression in constant function - ns_to_cycles = result[DELAY_SLOT_WIDTH - 1:0]; - end - endfunction - - //convert nCK input (number of DDR3 clock cycles) to number of controller clock cycles (referenced to serdes_ratio) - function [DELAY_SLOT_WIDTH - 1:0] nCK_to_cycles (`ifdef SUPPORT_REAL input real nCK `else input integer nCK `endif); - integer result; - begin - result = $rtoi($ceil(nCK*1.0/serdes_ratio)); - nCK_to_cycles = result[DELAY_SLOT_WIDTH - 1:0]; - end - endfunction - - - //convert nanoseconds time input to number of DDR clock cycles (referenced to DDR3_CLK_PERIOD) - function integer ns_to_nCK (`ifdef SUPPORT_REAL input real ns `else input integer ns `endif); - ns_to_nCK = $rtoi($ceil(ns*1.0/DDR3_CLK_PERIOD)); - endfunction - - //convert DDR clock cycles to nanoseconds (referenced to DDR3_CLK_PERIOD) - `ifdef SUPPORT_REAL - function real nCK_to_ns (input real nCK); - nCK_to_ns = $ceil(nCK*1.0*DDR3_CLK_PERIOD); - `else - function integer nCK_to_ns (input integer nCK); - nCK_to_ns = $rtoi($ceil(nCK*1.0*DDR3_CLK_PERIOD)); - `endif - endfunction - - // functions used to infer some localparam values - `ifdef SUPPORT_REAL - function real max(input real a, input real b); - `else - function integer max(input integer a, input integer b); - `endif - if(a >= b) max = a; - else max = b; - endfunction - - //Find the 3-bit value for the Mode Register 0 WR (Write recovery for auto-precharge) - function[2:0] WRA_mode_register_value(input integer WRA); - //WR_min (write recovery for autoprecharge) in clock cycles is calculated by dividing tWR(in ns) by tCK(in ns) and rounding up to the next integer. - //The WR value in the mode register must be programmed to be equal or larger than WRmin. - case(WRA+1) - 1,2,3,4,5: WRA_mode_register_value = 3'b001; - 6: WRA_mode_register_value = 3'b010; - 7: WRA_mode_register_value = 3'b011; - 8: WRA_mode_register_value = 3'b100; - 9,10: WRA_mode_register_value = 3'b101; - 11,12: WRA_mode_register_value = 3'b110; - 13,14: WRA_mode_register_value = 3'b111; - 15,16: WRA_mode_register_value = 3'b000; - default: begin - WRA_mode_register_value = 3'b000; //defaulting to largest write recovery cycles: 16 cycles - end - endcase - endfunction - - function[1:0] get_slot (input[3:0] cmd); //cmd can either be CMD_PRE,CMD_ACT, CMD_WR, CMD_RD - integer delay; - reg[1:0] slot_number, read_slot, write_slot, anticipate_activate_slot, anticipate_precharge_slot; - begin - // find read command slot number - delay = CL_nCK; - for(slot_number = 0 ; delay != 0 ; delay = delay - 1) begin - slot_number = slot_number - 1'b1; - end - read_slot = slot_number; - - // find write command slot number - delay = CWL_nCK; - for(slot_number = 0 ; delay != 0; delay = delay - 1) begin - slot_number = slot_number - 1'b1; - end - write_slot = slot_number; - - // find anticipate activate command slot number - if(CL_nCK > CWL_nCK) slot_number = read_slot; - else slot_number = write_slot; - `ifdef SUPPORT_REAL - delay = ns_to_nCK(tRCD); - `else - delay = ns_to_nCK($rtoi(tRCD)); - `endif - for(slot_number = slot_number; delay != 0; delay = delay - 1) begin - slot_number = slot_number - 1'b1; - end - anticipate_activate_slot = slot_number; - // if computed anticipate_activate_slot is same with either write_slot or read_slot, decrement slot number until - while(anticipate_activate_slot == write_slot || anticipate_activate_slot == read_slot) begin - anticipate_activate_slot = anticipate_activate_slot - 1'b1; - end - - //the remaining slot will be for precharge command - anticipate_precharge_slot = 0; - while(anticipate_precharge_slot == write_slot || anticipate_precharge_slot == read_slot || anticipate_precharge_slot == anticipate_activate_slot) begin - anticipate_precharge_slot = anticipate_precharge_slot - 1'b1; - end - case(cmd) - CMD_RD: get_slot = read_slot; - CMD_WR: get_slot = write_slot; - CMD_ACT: get_slot = anticipate_activate_slot; - CMD_PRE: get_slot = anticipate_precharge_slot; - default: begin - `ifdef FORMAL - assert(0); //force FORMAL to fail if this is ever reached - `endif - end - endcase - end - endfunction - - //find the delay to be used by delay_before_xxxx_counter. - // - delay_nCK = delay required between the two commands in DDR3 clock cycles - // - start_slot = slot number of the first command - // - end_slot = slot number of the second command - // returns the number of controller clock cycles to satisfy the delay required between the two commands - function [3:0] find_delay(input integer delay_nCK, input reg[1:0] start_slot, input reg[1:0] end_slot); - integer k; //error: variable declaration assignments are only allowed at the module level - begin - k = 0; - /* verilator lint_off WIDTH */ - while( ((4 - start_slot) + end_slot + 4*k) < delay_nCK) begin - /* verilator lint_on WIDTH */ - k = k + 1; - end - find_delay = k[3:0]; - end - endfunction - /*********************************************************************************************************************************************/ - - -`ifndef YOSYS - ///YOSYS: System task `$display' called with invalid/unsupported format specifier - initial begin - /* verilator lint_off REALCVT */ - $display("TEST FUNCTIONS\n-----------------------------\n"); - $display("Test ns_to_cycles() function:"); - $display("\tns_to_cycles(15) = %0d [exact]", ns_to_cycles(15) ); - $display("\tns_to_cycles(14.5) = %0d [round-off]", ns_to_cycles(14.5) ); - $display("\tns_to_cycles(11) = %0d [round-up]\n", ns_to_cycles(11) ); - - $display("Test nCK_to_cycles() function:"); - $display("\tns_to_cycles(16) = %0d [exact]", nCK_to_cycles(16) ); - $display("\tns_to_cycles(15) = %0d [round-off]", nCK_to_cycles(15) ); - $display("\tns_to_cycles(13) = %0d [round-up]\n", nCK_to_cycles(13) ); - - $display("Test ns_to_nCK() function:"); - $display("\tns_to_cycles(15) = %0d [exact]", ns_to_nCK(15) ); - $display("\tns_to_cycles(14.875) = %0d [round-off]", ns_to_nCK(14.875) ); - $display("\tns_to_cycles(13.875) = %0d [round-up] \n", ns_to_nCK(13.875) ); - - $display("Test nCK_to_ns() function:"); - $display("\tns_to_cycles(4) = %0d [exact]", nCK_to_ns(4) ); - $display("\tns_to_cycles(14.875) = %0d [round-off]", nCK_to_ns(3) ); - $display("\tns_to_cycles(13.875) = %0d [round-up]\n", nCK_to_ns(5) ); - - $display("Test nCK_to_ns() function:"); - $display("\tns_to_cycles(4) = %0d [exact]", nCK_to_ns(4) ); - $display("\tns_to_cycles(14.875) = %0d [round-off]", nCK_to_ns(3) ); - $display("\tns_to_cycles(13.875) = %0d [round-up]\n", nCK_to_ns(5) ); - - $display("Test $floor() function:"); - $display("\t$floor(5/2) = %0d", $floor(5/2) ); - $display("\t$floor(9/4) = %0d", $floor(9/4) ); - $display("\t$floor(9/4) = %0d", $floor(8/4) ); - $display("\t$floor(9/5) = %0d\n", $floor(9/5) ); - - $display("\nDISPLAY CONTROLLER PARAMETERS\n-----------------------------\n"); - $display("DELAY_COUNTER_WIDTH = %0d", DELAY_COUNTER_WIDTH); - $display("DELAY_SLOT_WIDTH = %0d", DELAY_SLOT_WIDTH); - - //$display("$bits(instruction):%0d - $bits(CMD_MRS):%0d - $bits(MR0):%0d = 5 = %0d", $bits(instruction), $bits(CMD_MRS) , $bits(MR0), ($bits(instruction) - $bits(CMD_MRS) - $bits(MR0))); - $display("serdes_ratio = %0d",serdes_ratio); - $display("wb_addr_bits = %0d",wb_addr_bits); - $display("wb_data_bits = %0d",wb_data_bits); - $display("wb_sel_bits = %0d\n\n",wb_sel_bits); - //$display("request_row_width = %0d = %0d", ROW_BITS, $bits(i_wb_addr[ (ROW_BITS + BA_BITS + COL_BITS- $clog2(serdes_ratio*2) - 1) : (BA_BITS + COL_BITS- $clog2(serdes_ratio*2)) ])); - //$display("request_col_width = %0d = %0d", COL_BITS, $bits({ i_wb_addr[(COL_BITS- $clog2(serdes_ratio*2)-1):0], {{$clog2(serdes_ratio*2)}{1'b0}} })); - //$display("request_bank_width = %0d = %0d", BA_BITS, $bits(i_wb_addr[(BA_BITS + COL_BITS- $clog2(serdes_ratio*2) - 1) : (COL_BITS- $clog2(serdes_ratio*2))])); - - $display("READ_SLOT = %0d", READ_SLOT); - $display("WRITE_SLOT = %0d", WRITE_SLOT); - $display("ACTIVATE_SLOT = %0d", ACTIVATE_SLOT); - $display("PRECHARGE_SLOT = %0d", PRECHARGE_SLOT); - - $display("\n\nDELAYS:"); - $display("\tns_to_nCK(tRCD): %0d", ns_to_nCK(tRCD)); - $display("\tns_to_nCK(tRP): %0d", ns_to_nCK(tRP)); - $display("\tns_to_nCK(tRTP): %0d", ns_to_nCK(tRTP)); - $display("\ttCCD: %0d", tCCD); - $display("\t(CL_nCK + tCCD + 2 - CWL_nCK): %0d", (CL_nCK + tCCD + 2 - CWL_nCK)); - $display("\t(CWL_nCK + 4 + ns_to_nCK(tWR)): %0d", (CWL_nCK + 4 + ns_to_nCK(tWR))); - $display("\t(CWL_nCK + 4 + ns_to_nCK(tWTR)): %0d", (CWL_nCK + 4 + ns_to_nCK(tWTR))); - - $display("\n\nPRECHARGE_TO_ACTIVATE_DELAY = %0d", PRECHARGE_TO_ACTIVATE_DELAY); - $display("ACTIVATE_TO_WRITE_DELAY = %0d", ACTIVATE_TO_WRITE_DELAY); - $display("ACTIVATE_TO_READ_DELAY = %0d", ACTIVATE_TO_READ_DELAY); - $display("READ_TO_WRITE_DELAY = %0d", READ_TO_WRITE_DELAY); - $display("READ_TO_READ_DELAY = %0d", READ_TO_READ_DELAY); - $display("READ_TO_PRECHARGE_DELAY = %0d", READ_TO_PRECHARGE_DELAY); - $display("WRITE_TO_WRITE_DELAY = %0d", WRITE_TO_WRITE_DELAY); - $display("WRITE_TO_READ_DELAY = %0d", WRITE_TO_READ_DELAY); - $display("WRITE_TO_PRECHARGE_DELAY = %0d", WRITE_TO_PRECHARGE_DELAY); - $display("STAGE2_DATA_DEPTH = %0d", STAGE2_DATA_DEPTH); - $display("READ_ACK_PIPE_WIDTH = %0d", READ_ACK_PIPE_WIDTH); - /* verilator lint_on REALCVT */ - end -`endif - - -`ifdef FORMAL - `define TEST_CONTROLLER_PIPELINE - - `ifdef FORMAL_COVER - initial assume(!i_rst_n); - reg[24:0] f_wb_inputs[31:0]; - reg[9:0] f_reset_counter = 0; - reg[4:0] f_index = 0; - reg f_past_valid = 0; - initial begin - /* - // Sequential read to row 0 then jump to row 2 - f_wb_inputs[0] = {1'b0, {14'd0,3'd1, 7'd0}}; //read - f_wb_inputs[1] = {1'b0, {14'd0,3'd1, 7'd1}}; //read on same bank (tCCD) - f_wb_inputs[2] = {1'b0, {14'd0,3'd1, 7'd2}}; //write on same bank (tRTW) - f_wb_inputs[3] = {1'b0, {14'd0,3'd1, 7'd3}}; //write on same bank (tCCD) - f_wb_inputs[4] = {1'b0, {14'd0,3'd1, 7'd4}}; //read on different bank - f_wb_inputs[5] = {1'b0, {14'd0,3'd1, 7'd5}}; //write on same bank (tRTW) - f_wb_inputs[6] = {1'b0, {14'd2,3'd1, 7'd6}}; //write on different bank (already activated) - f_wb_inputs[7] = {1'b0, {14'd2,3'd1, 7'd7}}; //write (tCCD) - f_wb_inputs[8] = {1'b0, {14'd2,3'd1, 7'd8}}; //write on different bank (already activated but wrong row) - f_wb_inputs[9] = {1'b0, {14'd2,3'd1, 7'd9}}; //write (tCCD) - f_wb_inputs[10] = {1'b0, {14'd3,3'd1, 7'd10}}; //write (tCCD) - f_wb_inputs[11] = {1'b0, {14'd3,3'd1, 7'd11}}; //read (same bank but wrong row so precharge first) - f_wb_inputs[12] = {1'b0, {14'd3,3'd1, 7'd12}}; //read (tCCD) - f_wb_inputs[13] = {1'b0, {14'd3,3'd1, 7'd13}}; //read (tCCD) - */ - - f_wb_inputs[0] = {1'b0, {14'd0,3'd1, 7'd0}}; //read - f_wb_inputs[1] = {1'b0, {14'd0,3'd1, 7'd1}}; //read on same bank (tCCD) - f_wb_inputs[2] = {1'b1, {14'd0,3'd1, 7'd2}}; //write on same bank (tRTW) - f_wb_inputs[3] = {1'b1, {14'd0,3'd1, 7'd3}}; //write on same bank (tCCD) - f_wb_inputs[4] = {1'b0, {14'd0,3'd2, 7'd0}}; //read on different bank - f_wb_inputs[5] = {1'b1, {14'd0,3'd2, 7'd1}}; //write on same bank (tRTW) - f_wb_inputs[6] = {1'b1, {14'd0,3'd1, 7'd4}}; //write on different bank (already activated) - f_wb_inputs[7] = {1'b1, {14'd0,3'd1, 7'd5}}; //write (tCCD) - f_wb_inputs[8] = {1'b1, {14'd1,3'd2, 7'd0}}; //write on different bank (already activated but wrong row) - f_wb_inputs[9] = {1'b1, {14'd1,3'd2, 7'd1}}; //write (tCCD) - f_wb_inputs[10] = {1'b1, {14'd1,3'd2, 7'd2}}; //write (tCCD) - f_wb_inputs[11] = {1'b0, {14'd2,3'd2, 7'd0}}; //read (same bank but wrong row so precharge first) - f_wb_inputs[12] = {1'b0, {14'd2,3'd2, 7'd1}}; //read (tCCD) - f_wb_inputs[13] = {1'b0, {14'd2,3'd2, 7'd2}}; //read (tCCD) - /* - f_wb_inputs[0] = {1'b0, {14'd0,3'd1, 7'd0}}; //read - f_wb_inputs[1] = {1'b0, {14'd0,3'd1, 7'd1}}; //read on same bank (tCCD) - f_wb_inputs[2] = {1'b1, {14'd0,3'd2, 7'd0}}; //write on the anticipated bank - f_wb_inputs[3] = {1'b1, {14'd0,3'd2, 7'd1}}; //write on same bank (tCCD) - f_wb_inputs[4] = {1'b0, {14'd0,3'd3, 7'd0}}; //read on the anticipated bank - f_wb_inputs[5] = {1'b0, {14'd0,3'd3, 7'd1}}; //read on same bank (tCCD) - f_wb_inputs[6] = {1'b1, {14'd0,3'd7, 7'd0}}; //write on the un-anticipated idle bank (activate first) - f_wb_inputs[7] = {1'b1, {14'd0,3'd1, 7'd1}}; //write on the un-anticipated active bank and row (write) - f_wb_inputs[8] = {1'b1, {14'd1,3'd7, 7'd0}}; //write on the un-anticipated active bank but wrong row (precharge first) - */ - /* - f_wb_inputs[0] = {1'b0, {14'd0,3'd1, 7'd0}}; //read - f_wb_inputs[1] = {1'b0, {14'd0,3'd1, 7'd1}}; //read - f_wb_inputs[2] = {1'b0, {14'd0,3'd1, 7'd2}}; //read - f_wb_inputs[3] = {1'b0, {14'd0,3'd1, 7'd3}}; //read - f_wb_inputs[4] = {1'b0, {14'd0,3'd1, 7'd4}}; //read - f_wb_inputs[5] = {1'b0, {14'd0,3'd1, 7'd5}}; //read - f_wb_inputs[6] = {1'b0, {14'd0,3'd1, 7'd6}}; //write - f_wb_inputs[7] = {1'b0, {14'd0,3'd1, 7'd7}}; //write - f_wb_inputs[8] = {1'b0, {14'd0,3'd1, 7'd8}}; //write - f_wb_inputs[9] = {1'b0, {14'd0,3'd1, 7'd9}}; //write - f_wb_inputs[10] = {1'b0, {14'd0,3'd1, 7'd10}}; //write - f_wb_inputs[11] = {1'b0, {14'd0,3'd1, 7'd11}}; //write - */ - /* - f_wb_inputs[0] = {1'b0, {14'd1,3'd1, 7'd120}}; //write on same bank (tRTW) - f_wb_inputs[1] = {1'b0, {14'd1,3'd1, 7'd121}}; //write on different bank (already activated) - f_wb_inputs[2] = {1'b0, {14'd1,3'd1, 7'd122}}; //write (tCCD) - f_wb_inputs[3] = {1'b0, {14'd1,3'd1, 7'd123}}; //write on different bank (already activated but wrong row) - f_wb_inputs[4] = {1'b0, {14'd1,3'd1, 7'd124}}; //write (tCCD) - f_wb_inputs[5] = {1'b0, {14'd1,3'd1, 7'd125}}; //write (tCCD) - f_wb_inputs[6] = {1'b0, {14'd1,3'd1, 7'd126}}; //read (same bank but wrong row so precharge first) - f_wb_inputs[7] = {1'b0, {14'd1,3'd1, 7'd127}}; //read (tCCD) - f_wb_inputs[8] = {1'b0, {14'd1,3'd2, 7'd0}}; //read (tCCD) - f_wb_inputs[9] = {1'b0, {14'd1,3'd2, 7'd1}}; //read (tCCD) - f_wb_inputs[10] = {1'b0, {14'd1,3'd2, 7'd2}}; //read (tCCD) - */ - end - initial begin - f_reset_counter = 0; - end - always @(posedge i_controller_clk) begin - if(!o_wb_stall) begin - f_index <= f_index + 1; //number of requests accepted - end - f_reset_counter <= f_reset_counter + 1; - end - - always @(posedge i_controller_clk) begin - assume(i_wb_cyc == 1); - assume(i_wb_stb == 1); - if(f_past_valid) begin - assume(i_rst_n); - end - assume(i_wb_we == f_wb_inputs[f_index][24]); - assume(i_wb_addr == f_wb_inputs[f_index][23:0]); - cover(f_index == 10); - if(f_index != 0) begin - assume(i_rst_n); //dont reset just to skip a request forcefully - end - end - `endif //endif for FORMAL_COVER - - - `ifdef TEST_TIME_PARAMETERS - // Test time parameter violations - reg[6:0] f_precharge_time_stamp[(1<= tCCD); - end - - if(cmd_d[READ_SLOT][CMD_CS_N:CMD_WE_N] == 4'b0101) begin //READ - f_read_time_stamp[cmd_d[READ_SLOT][CMD_BANK_START:CMD_ADDRESS_START+1]] <= f_timer + READ_SLOT; - //Check tCCD (read-to-read delay) - assert((f_timer+READ_SLOT) - f_read_time_stamp[bank_const] >= tCCD); - end - end - end - - always @* begin - // make sure saved time stamp is valid - assert(f_precharge_time_stamp[bank_const] <= f_timer); - assert(f_activate_time_stamp[bank_const] <= f_timer); - assert(f_read_time_stamp[bank_const] <= f_timer); - assert(f_write_time_stamp[bank_const] <= f_timer); - - // Check tRTP (Internal READ Command to PRECHARGE Command delay in SAME BANK) - if(f_precharge_time_stamp[bank_const] > f_read_time_stamp[bank_const]) begin - assert((f_precharge_time_stamp[bank_const] - f_read_time_stamp[bank_const]) >= ns_to_nCK(10)); - end - - // Check tWTR (Delay from start of internal write transaction to internal read command) - if(f_read_time_stamp[bank_const] > f_write_time_stamp[bank_const]) begin - assert((f_read_time_stamp[bank_const] - f_write_time_stamp[bank_const]) >= (CWL_nCK + 3'd4 + ns_to_nCK(tWTR))); - end - - // Check tRCD (ACT to internal read delay time) - if(f_read_time_stamp[bank_const] > f_activate_time_stamp[bank_const]) begin - assert((f_read_time_stamp[bank_const] - f_activate_time_stamp[bank_const]) >= ns_to_nCK(tRCD)); - end - - // Check tRCD (ACT to internal write delay time) - if(f_write_time_stamp[bank_const] > f_activate_time_stamp[bank_const]) begin - assert((f_write_time_stamp[bank_const] - f_activate_time_stamp[bank_const]) >= ns_to_nCK(tRCD)); - end - - // Check tRP (PRE command period) - if(f_activate_time_stamp[bank_const] > f_precharge_time_stamp[bank_const]) begin - assert((f_activate_time_stamp[bank_const] - f_precharge_time_stamp[bank_const]) >= ns_to_nCK(tRP)); - end - - // Check tRAS (ACTIVE to PRECHARGE command period) - if(f_precharge_time_stamp[bank_const] > f_activate_time_stamp[bank_const]) begin - assert((f_precharge_time_stamp[bank_const] - f_activate_time_stamp[bank_const]) >= ns_to_nCK(tRAS)); - end - - // Check tWR (WRITE recovery time for write-to-precharge) - if(f_precharge_time_stamp[bank_const] > f_write_time_stamp[bank_const]) begin - assert((f_precharge_time_stamp[bank_const] - f_write_time_stamp[bank_const]) >= (CWL_nCK + 3'd4 + ns_to_nCK(tWR))); - end - - // Check delay from read-to-write - if(f_write_time_stamp[bank_const] > f_read_time_stamp[bank_const]) begin - assert((f_write_time_stamp[bank_const] - f_read_time_stamp[bank_const]) >= (CL_nCK + tCCD + 3'd2 - CWL_nCK)); - end - - end - - // extra assertions to make sure engine starts properly - always @* begin - assert(instruction_address <= 22); - assert(state_calibrate <= DONE_CALIBRATE); - - if(!o_wb_stall) begin - assert(state_calibrate == DONE_CALIBRATE); - assert(instruction_address == 22 || (instruction_address == 19 && delay_counter == 0)); - end - - if(instruction_address == 19 && delay_counter != 0 && state_calibrate == DONE_CALIBRATE) begin - if(stage1_pending || stage2_pending) begin - assert(pause_counter); - end - end - - if(stage1_pending || stage2_pending) begin - assert(state_calibrate > ISSUE_WRITE_1); - assert(instruction_address == 22 || instruction_address == 19); - end - - if(instruction_address < 13) begin - assert(state_calibrate == IDLE); - end - - if(state_calibrate > IDLE && state_calibrate <= BITSLIP_DQS_TRAIN_2) begin - assert(instruction_address == 13); - assert(pause_counter); - end - - - if(state_calibrate > START_WRITE_LEVEL && state_calibrate <= WAIT_FOR_FEEDBACK) begin - assert(instruction_address == 17); - assert(pause_counter); - end - - if(pause_counter) begin - assert(delay_counter != 0); - end - - if(state_calibrate > ISSUE_WRITE_1 && state_calibrate < DONE_CALIBRATE) begin - assume(instruction_address == 22); //write-then-read calibration will not take more than tREFI (7.8us, delay a address 22) - assert(reset_done); - end - - if(state_calibrate == DONE_CALIBRATE) begin - assert(reset_done); - assert(instruction_address >= 19); - end - - if(reset_done) begin - assert(instruction_address >= 19); - end - - if(!reset_done) begin - assert(!stage1_pending && !stage2_pending); - assert(o_wb_stall); - end - if(reset_done) begin - assert(instruction_address >= 19 && instruction_address <= 22); - end - //delay_counter is zero at first clock of new instruction address, the actual delay_clock wil start at next clock cycle - if(instruction_address == 19 && delay_counter != 0) begin - assert(o_wb_stall); - end - - if(instruction_address == 19 && pause_counter) begin //pre-stall delay to finish all remaining requests - assert(delay_counter == PRE_REFRESH_DELAY); - assert(reset_done); - assert(DONE_CALIBRATE); - end - end - - /* - always @(posedge i_controller_clk) begin - if(f_past_valid) begin - if($past(instruction_address) == 22 && instruction_address == 19) begin - assert(state_calibrate == DONE_CALIBRATE); - end - end - end - */ - `endif //endif for TEST_TIME_PARAMETERS - - - `ifdef TEST_CONTROLLER_PIPELINE - // wires and registers used in this formal section - `ifdef TEST_DATA - localparam F_TEST_CMD_DATA_WIDTH = $bits(i_wb_data) + $bits(i_wb_sel) + $bits(i_aux) + $bits(i_wb_addr) + $bits(i_wb_we); - `else - localparam F_TEST_CMD_DATA_WIDTH = $bits(i_wb_addr) + $bits(i_wb_we); - `endif - localparam F_MAX_STALL = max(WRITE_TO_PRECHARGE_DELAY,READ_TO_PRECHARGE_DELAY) + 1 + PRECHARGE_TO_ACTIVATE_DELAY + 1 + max(ACTIVATE_TO_WRITE_DELAY,ACTIVATE_TO_READ_DELAY) + 1 ; - //worst case delay (Precharge -> Activate-> R/W) - //add 1 to each delay since they end at zero - localparam F_MAX_ACK_DELAY = F_MAX_STALL + (READ_ACK_PIPE_WIDTH + 2); //max_stall + size of shift_reg_read_pipe_q + o_wb_ack_read_q (assume to be two via read_pipe_max) - - (*keep*) wire[3:0] f_max_stall, f_max_ack_delay; - assign f_max_stall = F_MAX_STALL; - assign f_max_ack_delay = F_MAX_ACK_DELAY; - - reg f_past_valid = 0; - reg[$bits(instruction_address) - 1: 0] f_addr = 0, f_read = 0 ; - reg[$bits(instruction) - 1:0] f_read_inst = INITIAL_RESET_INSTRUCTION; - reg[3:0] f_count_refreshes = 0; //count how many refresh cycles had already passed - reg[24:0] f_wb_inputs[31:0]; - reg[4:0] f_index = 0; - reg[5:0] f_counter = 0; - - reg[4:0] f_index_1 = 0; - reg[4:0] f_index_2 = 0; - reg[F_TEST_CMD_DATA_WIDTH - 1:0] f_write_data; - reg f_write_fifo = 0, f_read_fifo = 0; - reg[ROW_BITS-1:0] f_bank_active_row[(1< nCK_to_cycles(tDLLK)); //Initialization sequence requires that tDLLK is satisfied after MRS to mode register 0 and ZQ calibration - assert(MR0[18] != 1'b1); //last Mode Register bit should never be zero - assert(MR1_WL_EN[18] != 1'b1); //(as this is used for A10-AP control for non-MRS - assert(MR1_WL_DIS[18] != 1'b1); //(as this is used for A10-AP control for non-MRS - assert(MR2[18] != 1'b1); //commands in the reset sequence) - assert(MR3_MPR_EN[18] != 1'b1); - assert(MR3_MPR_DIS[18] != 1'b1); - assert(DELAY_COUNTER_WIDTH <= $bits(MR0)); //bitwidth of mode register should be enough for the delay counter - //sanity checking to ensure 5 bits is allotted for extra instruction {reset_finished, use_timer , stay_command , cke , reset_n } - assert(($bits(instruction) - $bits(CMD_MRS) - $bits(MR0)) == 5 ); - assert(DELAY_SLOT_WIDTH >= DELAY_COUNTER_WIDTH); //width occupied by delay timer slot on the reset rom must be able to occupy the maximum possible delay value on the reset sequence - end - - always @(posedge i_controller_clk) f_past_valid <= 1; - - - //The idea below is sourced from https://zipcpu.com/formal/2019/11/18/genuctrlr.html - //We will form a packet of information describing each instruction as it goes through the pipeline and make assertions along the way. - //2-stage Pipeline: f_addr (update address) -> f_read (read instruction from rom) - - //pipeline stage logic: f_addr (update address) -> f_read (read instruction from rom) - always @(posedge i_controller_clk, negedge i_rst_n) begin - if(!i_rst_n) begin - f_addr <= 0; - f_read <= 0; - end - //move the pipeline forward when counter is about to go zero and we are not yet at end of reset sequence - else if((delay_counter == 1 || !instruction[USE_TIMER])) begin - f_addr <= (f_addr == 22)? 19:f_addr + 1; - f_read <= f_addr; - end - end - - // assert f_addr and f_read as shadows of next and current instruction address - always @* begin - assert(f_addr == instruction_address); //f_addr is the shadow of instruction_address (thus f_addr is the address of NEXT instruction) - f_read_inst = read_rom_instruction(f_read); //f_read is the address of CURRENT instruction - assert(f_read_inst == read_rom_instruction(f_read)); // needed for induction to make sure the engine will not create his own instruction - if(f_addr == 0) begin - f_read_inst = INITIAL_RESET_INSTRUCTION; //will only happen at the very start: f_addr (0) -> f_read (0) where we are reading the initial reset instruction and not the rom - end - assert(f_read_inst == instruction); // f_read_inst is the shadow of current instruction - end - - // main assertions for the reset sequence - always @(posedge i_controller_clk) begin - if(!i_rst_n || !$past(i_rst_n)) begin - assert(f_addr == 0); - assert(f_read == 0); - assert(instruction_address == 0); - assert(delay_counter == (INITIAL_RESET_INSTRUCTION[DELAY_COUNTER_WIDTH - 1:0])); - assert(delay_counter_is_zero == (INITIAL_RESET_INSTRUCTION[DELAY_COUNTER_WIDTH - 1:0] == 0)); - end - else if(f_past_valid) begin - //if counter is zero previously and current instruction needs timer delay, then this cycle should now have the new updated counter value - if( $past(delay_counter_is_zero) && $past(f_read_inst[USE_TIMER]) ) begin - assert(delay_counter == f_read_inst[DELAY_COUNTER_WIDTH - 1:0]); - end - //delay_counter_is_zero can be high when counter is zero and current instruction needs delay - if($past(f_read_inst[USE_TIMER]) && !$past(pause_counter) ) begin - assert( delay_counter_is_zero == (delay_counter == 0) ); - end - //delay_counter_is_zero will go high this cycle when we received a don't-use-timer instruction - else if(!$past(f_read_inst[USE_TIMER]) && !$past(pause_counter)) begin - assert(delay_counter_is_zero); - end - - //we are on the middle of a delay thus all values must remain constant while only delay_counter changes (decrement) - if(!delay_counter_is_zero) begin - assert(f_addr == $past(f_addr)); - assert(f_read == $past(f_read)); - assert(f_read_inst == $past(f_read_inst)); - end - - //if delay is not yet zero and timer delay is enabled, then delay_counter should decrement - if(!$past(delay_counter_is_zero) && $past(f_read_inst[USE_TIMER]) && !$past(pause_counter) ) begin - assert(delay_counter == $past(delay_counter) - 1); - assert(delay_counter < $past(delay_counter) ); //just to make sure delay_counter will never overflow back to all 1's - end - - //sanity checking for the comment "delay_counter will be zero AT NEXT CLOCK CYCLE when counter is now one" - if($past(delay_counter) == 1) begin - assert(delay_counter == 0 && delay_counter_is_zero); - end - //assert the relationship between the stages FOR RESET SEQUENCE - if(!reset_done) begin - if(f_addr == 0) begin - assert(f_read == 0); //will only happen at the very start: f_addr (0) -> f_read (0) - end - else if(f_read == 0) begin - assert(f_addr <= 1); //will only happen at the very first two cycles: f_addr (1) -> f_read (0) or f_addr (0) -> f_read (0) - end - //else if($past(reset_done)) assert(f_read == $past(f_read)); //reset instruction does not repeat after reaching end address thus it must saturate when pipeline reaches end - else begin - assert(f_read + 1 == f_addr); //address increments continuously - end - assert($past(f_read) < 21); //only instruction address 0-to-13 is for reset sequence (reset_done is asserted at address 14) - end - - //assert the relationship between the stages FOR REFRESH SEQUENCE - else begin - if(f_read == 22) begin - assert(f_addr == 19); //if current instruction is 22, then next instruction must be at 19 (instruction address wraps from 15 to 12) - end - else if(f_addr == 19) begin - assert(f_read == 22); //if next instruction is at 12, then current instruction must be at 15 (instruction address wraps from 15 to 12) - end - else begin - assert(f_read + 1 == f_addr); //if there is no need to wrap around, then instruction address must increment - end - assert((f_read >= 19 && f_read <= 22) ); //refresh sequence is only on instruction address 19,20,21,22 - end - - // reset_done must retain high when it was already asserted once - if($past(reset_done)) begin - assert(reset_done); - end - - // reset is already done at address 21 and up - if($past(f_read) >= 21 ) begin - assert(reset_done); - end - - //if reset is done, the REF_IDLE must only be high at instruction address 14 (on the middle of tREFI) - if(reset_done && f_read_inst[REF_IDLE]) begin - assert(f_read == 21); - end - - end - - end - - - // assertions on the instructions stored on the rom - always @* begin - //there MUST BE no instruction which USE_TIMER is high but delay is zero since it can cause the logic to lock-up (delay must be at least 1) - if(a[USE_TIMER]) begin - assert( a[DELAY_COUNTER_WIDTH - 1:0] > 0); - end - end - - // assertion on FSM calibration - always @* begin - if(instruction_address < 13) begin - assert(state_calibrate == IDLE); - end - - if(state_calibrate > IDLE && state_calibrate <= BITSLIP_DQS_TRAIN_2) begin - assert(instruction_address == 13); - assert(pause_counter); - end - - - if(state_calibrate > START_WRITE_LEVEL && state_calibrate <= WAIT_FOR_FEEDBACK) begin - assert(instruction_address == 17); - assert(pause_counter); - end - - if(pause_counter) begin - assert(delay_counter != 0); - end - - if(state_calibrate > ISSUE_WRITE_1 && state_calibrate < DONE_CALIBRATE) begin - assume(instruction_address == 22); //write-then-read calibration will not take more than tREFI (7.8us, delay a address 22) - assert(reset_done); - end - - if(state_calibrate == DONE_CALIBRATE) begin - assert(reset_done); - assert(instruction_address >= 19); - end - - if(reset_done) begin - assert(instruction_address >= 19); - end - end - - always @* begin - //make sure each command has distinct slot number (except for read/write which can have the same or different slot number) - //assert((WRITE_SLOT != ACTIVATE_SLOT != PRECHARGE_SLOT) && (READ_SLOT != ACTIVATE_SLOT != PRECHARGE_SLOT) ); - assert(WRITE_SLOT != ACTIVATE_SLOT); - assert(WRITE_SLOT != PRECHARGE_SLOT); - assert(READ_SLOT != ACTIVATE_SLOT); - assert(READ_SLOT != PRECHARGE_SLOT); - //make sure slot number for read command is correct - end - //create a formal assertion that says during refresh ack should be low always - //make an assertion that there will be no request pending before actual refresh starts at instruction 4'd12 - - - mini_fifo #( - .FIFO_WIDTH(1), //the fifo will have 2**FIFO_WIDTH positions - .DATA_WIDTH(F_TEST_CMD_DATA_WIDTH) //each FIFO position can store DATA_WIDTH bits - ) fifo_1 ( - .i_clk(i_controller_clk), - .i_rst_n(i_rst_n && i_wb_cyc), //reset outstanding request at reset or when cyc goes low - .read_fifo(f_read_fifo), - .write_fifo(f_write_fifo), - .empty(f_empty), - .full(f_full), - .write_data(f_write_data), - .read_data(f_read_data), - .read_data_next(f_read_data_next) - ); - - always @* begin - if(state_calibrate == DONE_CALIBRATE && i_wb_cyc) begin - if(f_full) begin - assert(stage1_pending && stage2_pending);//there are 2 contents - end - if(stage1_pending && stage2_pending) begin - assert(f_full); - end - - if(!f_empty && !f_full) begin - assert(stage1_pending ^ stage2_pending);//there is 1 content - end - if(stage1_pending ^ stage2_pending) begin - assert(!f_empty && !f_full); - end - - if(f_empty) begin - assert(stage1_pending == 0 && stage2_pending==0); //there is 0 content - end - if(stage1_pending == 0 && stage2_pending == 0) begin - assert(f_empty); - end - end - - if(state_calibrate < ISSUE_WRITE_1) begin - assert(!stage1_pending && !stage2_pending); - end - if(stage1_pending && state_calibrate == ISSUE_READ) begin - assert(stage1_we); - end - if(stage2_pending && state_calibrate == ISSUE_READ) begin - assert(stage2_we); - end - if(state_calibrate == ANALYZE_DATA) begin - assert(!stage1_pending && !stage2_pending); - end - end - - always @(posedge i_controller_clk) begin - if(f_past_valid) begin - //switch from calibrate to done - if(state_calibrate == DONE_CALIBRATE && $past(state_calibrate) != DONE_CALIBRATE) begin - assert($past(state_calibrate) == ANALYZE_DATA); - assert(f_empty); - assert(!stage1_pending); - assert(!stage2_pending); - //assert(f_bank_status == 1); //only first bank is activated - //assert(bank_status_q == 1); - end - if(stage1_pending && $past(state_calibrate) == READ_DATA && state_calibrate == READ_DATA) begin - assert(!stage1_we); - end - if(instruction_address == 21 || ($past(instruction_address) == 20 && $past(instruction_address,2) == 19) || instruction_address < 19) begin //not inside active or calibration - assert(f_bank_status == 0); - assert(bank_status_q == 0); - end - if(state_calibrate != DONE_CALIBRATE) begin - assert(f_bank_status == 0 || f_bank_status == 1); //only first bank is activated - assert(bank_status_q == 0 || f_bank_status == 1); - end - end - end - - //wishbone request should have a corresponding DDR3 command at the output - //wishbone request will be written to fifo, then once a DDR3 command is - //issued the fifo will be read to check if the DDR3 command matches the - //corresponding wishbone request - reg[ROW_BITS-1:0] f_read_data_col; - reg[BA_BITS-1:0] f_read_data_bank; - reg[AUX_WIDTH-1:0] f_read_data_aux; - reg[wb_sel_bits-1:0] f_read_data_wb_sel; - always @* begin - //write the wb request to fifo - if(i_wb_stb && i_wb_cyc && !o_wb_stall && state_calibrate == DONE_CALIBRATE) begin - f_write_fifo = 1; - `ifdef TEST_DATA - f_write_data = {i_wb_data, i_wb_sel, i_aux, i_wb_addr,i_wb_we}; - `else - f_write_data = {i_wb_addr,i_wb_we}; - `endif - end - else begin - f_write_fifo = 0; - end - f_read_fifo = 0; - //check if a DDR3 command is issued - if(i_wb_cyc) begin //only if already done calibrate and controller can accept wb request - - if(cmd_d[WRITE_SLOT][CMD_CS_N:CMD_WE_N] == 4'b0100) begin //WRITE - if(state_calibrate == DONE_CALIBRATE) begin - assert(f_bank_status[cmd_d[WRITE_SLOT][CMD_BANK_START:CMD_ADDRESS_START+1]] == 1'b1); //the bank that will be written must initially be active - f_read_data_col = {f_read_data[1 +: COL_BITS - $clog2(serdes_ratio*2)], 3'b000}; //column address must match - assert(cmd_d[WRITE_SLOT][CMD_ADDRESS_START:0] == f_read_data_col); - - f_read_data_bank = f_read_data[(COL_BITS - $clog2(serdes_ratio*2)) + 1 +: BA_BITS]; //bank must match - assert(cmd_d[WRITE_SLOT][CMD_BANK_START:CMD_ADDRESS_START+1] == f_read_data_bank); - - `ifdef TEST_DATA - f_read_data_aux = f_read_data[$bits(i_wb_addr) + 1 +: AUX_WIDTH]; //UAX ID must match - assert(stage2_aux == f_read_data_aux); - - f_read_data_wb_sel = (f_read_data[$bits(i_wb_addr) + AUX_WIDTH + 1 +: $bits(i_wb_sel)]); - assert(stage2_dm_unaligned == ~f_read_data_wb_sel); //data mask mst match inverse of wb sel - assert(stage2_data_unaligned == f_read_data[$bits(i_wb_sel) + $bits(i_wb_addr) + AUX_WIDTH + 1 +: $bits(i_wb_data)]); //actual data must match - `endif - - assert(f_read_data[0]); //i_wb_we must be high - f_read_fifo = 1; //advance read pointer to prepare for next read - end - else if(state_calibrate > ISSUE_WRITE_1) begin - assert(stage2_aux == 1); - end - //assert(f_bank_active_row[cmd_d[WRITE_SLOT][CMD_BANK_START:CMD_ADDRESS_START+1]] == current_row); //column to be written must be the current active row - end - - if(cmd_d[READ_SLOT][CMD_CS_N:CMD_WE_N] == 4'b0101) begin //READ - if(state_calibrate == DONE_CALIBRATE) begin - assert(f_bank_status[cmd_d[READ_SLOT][CMD_BANK_START:CMD_ADDRESS_START+1]] == 1'b1); //the bank that will be read must initially be active - f_read_data_col = {f_read_data[1 +: COL_BITS - $clog2(serdes_ratio*2)], 3'b000}; //column address must match - assert(cmd_d[READ_SLOT][CMD_ADDRESS_START:0] == f_read_data_col); - - f_read_data_bank = f_read_data[(COL_BITS - $clog2(serdes_ratio*2)) + 1 +: BA_BITS]; //bank must match - assert(cmd_d[READ_SLOT][CMD_BANK_START:CMD_ADDRESS_START+1] == f_read_data_bank); - - `ifdef TEST_DATA - f_read_data_aux = f_read_data[$bits(i_wb_addr) + 1 +: AUX_WIDTH]; //UAX ID must match - assert(stage2_aux == f_read_data_aux); - `endif - - assert(!f_read_data[0]); //i_wb_we must be low - f_read_fifo = 1; //advance read pointer to prepare for next read - end - else if(state_calibrate > ISSUE_WRITE_1) begin - assert(stage2_aux == 0); - end - //assert(f_bank_active_row[cmd_d[READ_SLOT][CMD_BANK_START:CMD_ADDRESS_START+1]] == current_row);//column to be written must be the current active row - end - - if(cmd_d[PRECHARGE_SLOT][CMD_CS_N:CMD_WE_N] == 4'b0010) begin //PRECHARGE - if(state_calibrate == DONE_CALIBRATE && (instruction_address == 22 || instruction_address == 19)) begin - assert(f_bank_status[cmd_d[PRECHARGE_SLOT][CMD_BANK_START:CMD_ADDRESS_START+1]] == 1'b1); //the bank that should be precharged must initially be active - end - end - - if(cmd_d[ACTIVATE_SLOT][CMD_CS_N:CMD_WE_N] == 4'b0011) begin //ACTIVATE - if(state_calibrate == DONE_CALIBRATE) begin - assert(f_bank_status[cmd_d[ACTIVATE_SLOT][CMD_BANK_START:CMD_ADDRESS_START+1]] == 1'b0); //the bank that should be activated must initially be precharged - end - end - - if(reset_done) begin - assert(cmd_d[PRECHARGE_SLOT][CMD_CKE] && cmd_d[PRECHARGE_SLOT][CMD_RESET_N]); //cke and rst_n should stay high when reset sequence is already done - assert(cmd_d[ACTIVATE_SLOT][CMD_CKE] && cmd_d[ACTIVATE_SLOT][CMD_RESET_N]); //cke and rst_n should stay high when reset sequence is already done - assert(cmd_d[READ_SLOT][CMD_CKE] && cmd_d[READ_SLOT][CMD_RESET_N]); //cke and rst_n should stay high when reset sequence is already done - assert(cmd_d[WRITE_SLOT][CMD_CKE] && cmd_d[WRITE_SLOT][CMD_RESET_N]); //cke and rst_n should stay high when reset sequence is already done - end - end - if(state_calibrate == DONE_CALIBRATE) begin - assert(reset_done); - end - if(state_calibrate != DONE_CALIBRATE) begin - assert(o_wb_stall); //if not yet finished calibrating, stall should never go low - end - if(state_calibrate != DONE_CALIBRATE) begin - assert(f_empty); //if not yet finished calibrating, stall should never go low - end - if(!f_empty) begin - assert(state_calibrate == DONE_CALIBRATE); - end - end - - //`ifdef UNDER_CONSTRUCTION - //make assertions on what is inside the fifo - always @* begin - if(!f_empty && !f_full) begin //make assertion when there is only 1 data on the pipe - if(stage1_pending) begin //request is still on stage1 - assert(stage1_bank == f_read_data[(COL_BITS - $clog2(serdes_ratio*2)) + 1 +: BA_BITS]); //bank must match - assert(stage1_col == {f_read_data[1 +: COL_BITS - $clog2(serdes_ratio*2)], 3'b000}); //column address must match - assert(stage1_we == f_read_data[0]); //i_wb_we must be high - end - if(stage2_pending) begin //request is now on stage2 - assert(stage2_bank == f_read_data[(COL_BITS - $clog2(serdes_ratio*2)) + 1 +: BA_BITS]); //bank must match - assert(stage2_col == {f_read_data[1 +: COL_BITS - $clog2(serdes_ratio*2)], 3'b000}); //column address must match - assert(stage2_we == f_read_data[0]); //i_wb_we must be high - end - end - if(f_full) begin //both stages have request - //stage2 is the request on the tip of the fifo - assert(stage2_bank == f_read_data[(COL_BITS - $clog2(serdes_ratio*2)) + 1 +: BA_BITS]); //bank must match - assert(stage2_col == {f_read_data[1 +: COL_BITS - $clog2(serdes_ratio*2)], 3'b000}); //column address must match - assert(stage2_we == f_read_data[0]); //i_wb_we must be high - //stage1 is the request on the other element of the fifo - //(since the fifo only has 2 elements, the other element that - //is not the tip will surely be the 2nd request that is being - //handles by stage1) - assert(stage1_bank == f_read_data_next[(COL_BITS - $clog2(serdes_ratio*2)) + 1 +: BA_BITS]); //bank must match - assert(stage1_col == {f_read_data_next[1 +: COL_BITS - $clog2(serdes_ratio*2)], 3'b000}); //column address must match - assert(stage1_we == f_read_data_next[0]); //i_wb_we must be high - end - end - - //`endif - - always @* begin - assert(f_bank_status == bank_status_q); - end - - (*keep*) reg[31:0] bank; - always @(posedge i_controller_clk, negedge i_rst_n) begin - if(!i_rst_n) begin - //reset bank status and active row - for(index=0; index < (1< ISSUE_WRITE_1 && state_calibrate < DONE_CALIBRATE) begin - if(stage1_pending) begin - assert(stage1_we == stage1_aux); //if write, then aux id must be 1 else 0 - end - if(stage2_pending) begin - assert(stage2_we == stage2_aux); //if write, then aux id must be 1 else 0 - end - end - - assert(state_calibrate <= DONE_CALIBRATE); - end - - wire[3:0] f_nreqs, f_nacks, f_outstanding, f_ackwait_count, f_stall_count; - wire[3:0] f_nreqs_2, f_nacks_2, f_outstanding_2; - reg[READ_ACK_PIPE_WIDTH+1:0] f_ack_pipe_after_stage2; - reg[AUX_WIDTH:0] f_aux_ack_pipe_after_stage2[READ_ACK_PIPE_WIDTH+1:0]; - integer f_ack_pipe_marker; - - integer f_sum_of_pending_acks = 0; - always @* begin - if(!i_rst_n) begin - assume(f_nreqs == 0); - assume(f_nacks == 0); - end - - if(state_calibrate != IDLE) assume(added_read_pipe_max == 1); - f_sum_of_pending_acks = stage1_pending + stage2_pending; - for(index = 0; index < READ_ACK_PIPE_WIDTH; index = index + 1) begin - f_sum_of_pending_acks = f_sum_of_pending_acks + shift_reg_read_pipe_q[index][0] + 0; - end - for(index = 0; index < 2; index = index + 1) begin //since added_read_pipe_max is assumed to be one, only the first two bits of o_wb_ack_read_q is relevant - f_sum_of_pending_acks = f_sum_of_pending_acks + o_wb_ack_read_q[index][0] + 0; - end - - //the remaining o_wb_ack_read_q (>2) should stay zero at - //all instance - for(index = 2; index < MAX_ADDED_READ_ACK_DELAY ; index = index + 1) begin - assert(o_wb_ack_read_q[index] == 0); - end - f_aux_ack_pipe_after_stage2[READ_ACK_PIPE_WIDTH+1] = o_wb_ack_read_q[0]; //last stage of f_aux_ack_pipe_after_stage2 is also the last ack stage - f_aux_ack_pipe_after_stage2[READ_ACK_PIPE_WIDTH] = o_wb_ack_read_q[1]; - for(index = 0; index < READ_ACK_PIPE_WIDTH; index = index + 1) begin - f_aux_ack_pipe_after_stage2[READ_ACK_PIPE_WIDTH - 1 - index] = shift_reg_read_pipe_q[index]; - end - f_ack_pipe_after_stage2 = { - o_wb_ack_read_q[0][0], - o_wb_ack_read_q[1][0], - shift_reg_read_pipe_q[0][0], - shift_reg_read_pipe_q[1][0], - shift_reg_read_pipe_q[2][0], - shift_reg_read_pipe_q[3][0], - shift_reg_read_pipe_q[4][0] - }; - - if(f_ackwait_count > F_MAX_STALL) begin - assert(|f_ack_pipe_after_stage2[(READ_ACK_PIPE_WIDTH+1) : (f_ackwait_count - F_MAX_STALL - 1)]); //at least one stage must be high - end - - - if(i_rst_n && state_calibrate == DONE_CALIBRATE) begin - assert(f_outstanding == f_sum_of_pending_acks || !i_wb_cyc); - end - else if(!i_rst_n) begin - assert(f_sum_of_pending_acks == 0); - end - if(state_calibrate != DONE_CALIBRATE && i_rst_n) begin - assert(f_outstanding == 0 || !i_wb_cyc); - end - if(state_calibrate <= ISSUE_WRITE_1 && i_rst_n) begin - //not inside tREFI, prestall delay, nor precharge - assert(f_outstanding == 0 || !i_wb_cyc); - assert(f_sum_of_pending_acks == 0); - end - if(state_calibrate == READ_DATA && i_rst_n) begin - assert(f_outstanding == 0 || !i_wb_cyc); - assert(f_sum_of_pending_acks <= 3); - - if((f_sum_of_pending_acks > 1) && o_wb_ack_read_q[0]) begin - assert(o_wb_ack_read_q[0] == {1, 1'b1}); - end - - f_ack_pipe_marker = 0; - for(index = 0; index < READ_ACK_PIPE_WIDTH + 2; index = index + 1) begin //check each ack stage starting from last stage - if(f_aux_ack_pipe_after_stage2[index][0]) begin //if ack is high - if(f_aux_ack_pipe_after_stage2[index][AUX_WIDTH:1] == 0) begin //ack for read - assert(f_ack_pipe_marker == 0); //read ack must be the last ack on the pipe(f_pipe_marker must still be zero) - f_ack_pipe_marker = f_ack_pipe_marker + 1; - assert(!stage1_pending && !stage2_pending); //a single read request must be the last request on this calibration - end - else begin //ack for write - assert(f_aux_ack_pipe_after_stage2[index][AUX_WIDTH:1] == 1); - f_ack_pipe_marker = f_ack_pipe_marker + 1; - end - end - end - assert(f_ack_pipe_marker <= 3); - end - - if(state_calibrate == ANALYZE_DATA && i_rst_n) begin - assert(f_outstanding == 0 || !i_wb_cyc); - assert(f_sum_of_pending_acks == 0); - end - if(state_calibrate != DONE_CALIBRATE && i_rst_n) begin //if not yet done calibration, no request should be accepted - assert(f_nreqs == 0); - assert(f_nacks == 0); - assert(f_outstanding == 0 || !i_wb_cyc); - end - - if(state_calibrate == ISSUE_WRITE_2 || state_calibrate == ISSUE_READ) begin - if(write_calib_stb == 1) begin - assert(write_calib_aux == 1); - assert(write_calib_we == 1); - end - end - if(!stage1_pending) begin - assert(!stage1_stall); - end - - if(!stage2_pending) begin - assert(!stage2_stall); - end - end - always @(posedge i_controller_clk) begin - if(f_past_valid) begin - if(instruction_address != 22 && instruction_address != 19 && $past(i_wb_cyc) && i_rst_n) begin - assert(f_nreqs == $past(f_nreqs)); - end - if(state_calibrate == DONE_CALIBRATE && $past(state_calibrate) != DONE_CALIBRATE && i_rst_n) begin//just started DONE_CALBRATION - assert(f_nreqs == 0); - assert(f_nacks == 0); - assert(f_outstanding == 0); - assert(f_sum_of_pending_acks == 0); - end - if((!stage1_pending || !stage2_pending) && $past(state_calibrate) == DONE_CALIBRATE && state_calibrate == DONE_CALIBRATE - && instruction_address == 22 && $past(instruction_address == 22)) begin - assert(!o_wb_stall);//if even 1 of the stage is empty, o_wb_stall must be low - end - end - end - - //test the delay_before* - always @* begin - for(index=0; index< (1<= tCCD); - end - - if(cmd_d[READ_SLOT][CMD_CS_N:CMD_WE_N] == 4'b0101) begin //READ - f_read_time_stamp[cmd_d[READ_SLOT][CMD_BANK_START:CMD_ADDRESS_START+1]] <= f_timer + READ_SLOT; - //Check tCCD (read-to-read delay) - assert((f_timer+READ_SLOT) - f_read_time_stamp[bank_const] >= tCCD); - end - end - end - - always @* begin - // make sure saved time stamp is valid - assert(f_precharge_time_stamp[bank_const] <= f_timer); - assert(f_activate_time_stamp[bank_const] <= f_timer); - assert(f_read_time_stamp[bank_const] <= f_timer); - assert(f_write_time_stamp[bank_const] <= f_timer); - - // Check tRTP (Internal READ Command to PRECHARGE Command delay in SAME BANK) - if(f_precharge_time_stamp[bank_const] > f_read_time_stamp[bank_const]) begin - assert((f_precharge_time_stamp[bank_const] - f_read_time_stamp[bank_const]) >= ns_to_nCK(10)); - end - - // Check tWTR (Delay from start of internal write transaction to internal read command) - if(f_read_time_stamp[bank_const] > f_write_time_stamp[bank_const]) begin - assert((f_read_time_stamp[bank_const] - f_write_time_stamp[bank_const]) >= (CWL_nCK + 3'd4 + ns_to_nCK(tWTR))); - end - - // Check tRCD (ACT to internal read delay time) - if(f_read_time_stamp[bank_const] > f_activate_time_stamp[bank_const]) begin - assert((f_read_time_stamp[bank_const] - f_activate_time_stamp[bank_const]) >= ns_to_nCK(tRCD)); - end - - // Check tRCD (ACT to internal write delay time) - if(f_write_time_stamp[bank_const] > f_activate_time_stamp[bank_const]) begin - assert((f_write_time_stamp[bank_const] - f_activate_time_stamp[bank_const]) >= ns_to_nCK(tRCD)); - end - - // Check tRP (PRE command period) - if(f_activate_time_stamp[bank_const] > f_precharge_time_stamp[bank_const]) begin - assert((f_activate_time_stamp[bank_const] - f_precharge_time_stamp[bank_const]) >= ns_to_nCK(tRP)); - end - - // Check tRAS (ACTIVE to PRECHARGE command period) - if(f_precharge_time_stamp[bank_const] > f_activate_time_stamp[bank_const]) begin - assert((f_precharge_time_stamp[bank_const] - f_activate_time_stamp[bank_const]) >= ns_to_nCK(tRAS)); - end - - // Check tWR (WRITE recovery time for write-to-precharge) - if(f_precharge_time_stamp[bank_const] > f_write_time_stamp[bank_const]) begin - assert((f_precharge_time_stamp[bank_const] - f_write_time_stamp[bank_const]) >= (CWL_nCK + 3'd4 + ns_to_nCK(tWR))); - end - - // Check delay from read-to-write - if(f_write_time_stamp[bank_const] > f_read_time_stamp[bank_const]) begin - assert((f_write_time_stamp[bank_const] - f_read_time_stamp[bank_const]) >= (CL_nCK + tCCD + 3'd2 - CWL_nCK)); - end - - end - - // extra assertions to make sure engine starts properly - always @* begin - assert(instruction_address <= 22); - assert(state_calibrate <= DONE_CALIBRATE); - - if(!o_wb_stall) begin - assert(state_calibrate == DONE_CALIBRATE); - assert(instruction_address == 22 || (instruction_address == 19 && delay_counter == 0)); - end - - if(instruction_address == 19 && delay_counter != 0 && state_calibrate == DONE_CALIBRATE) begin - if(stage1_pending || stage2_pending) begin - assert(pause_counter); - end - end - - if(stage1_pending || stage2_pending) begin - assert(state_calibrate > ISSUE_WRITE_1); - assert(instruction_address == 22 || instruction_address == 19); - end - - if(instruction_address < 13) begin - assert(state_calibrate == IDLE); - end - - if(state_calibrate > IDLE && state_calibrate <= BITSLIP_DQS_TRAIN_2) begin - assert(instruction_address == 13); - assert(pause_counter); - end - - - if(state_calibrate > START_WRITE_LEVEL && state_calibrate <= WAIT_FOR_FEEDBACK) begin - assert(instruction_address == 17); - assert(pause_counter); - end - - if(pause_counter) begin - assert(delay_counter != 0); - end - - if(state_calibrate > ISSUE_WRITE_1 && state_calibrate < DONE_CALIBRATE) begin - assume(instruction_address == 22); //write-then-read calibration will not take more than tREFI (7.8us, delay a address 22) - assert(reset_done); - end - - if(state_calibrate == DONE_CALIBRATE) begin - assert(reset_done); - assert(instruction_address >= 19); - end - - if(reset_done) begin - assert(instruction_address >= 19); - end - - if(!reset_done) begin - assert(!stage1_pending && !stage2_pending); - assert(o_wb_stall); - end - if(reset_done) begin - assert(instruction_address >= 19 && instruction_address <= 22); - end - //delay_counter is zero at first clock of new instruction address, the actual delay_clock wil start at next clock cycle - if(instruction_address == 19 && delay_counter != 0) begin - assert(o_wb_stall); - end - - if(instruction_address == 19 && pause_counter) begin //pre-stall delay to finish all remaining requests - assert(delay_counter == PRE_REFRESH_DELAY); - assert(reset_done); - assert(DONE_CALIBRATE); - end - end - - // verify the wishbone 2 - localparam F_TEST_WB2_DATA_WIDTH = wb2_sel_bits + 5 + $clog2(LANES) + 4 + 1; //WB2_SEL + CNTVALUEIN + LANE_NUMBER + MEMORY_MAPPED_ADDRESS + REQUEST_TYPE - reg f_read_fifo_2, f_write_fifo_2; - wire f_empty_2, f_full_2; - reg[F_TEST_WB2_DATA_WIDTH - 1:0] f_write_data_2 = 0; - reg[F_TEST_WB2_DATA_WIDTH - 1:0] f_read_data_2, f_read_data_2_q; - reg f_o_wb2_ack_q = 0; //registered o_wb2_ack - (*keep*) reg[LANES-1:0] f_delay_ld = 0; - - //accept request - always @* begin - if(state_calibrate != DONE_CALIBRATE) begin //not yet done calibrating - assert(!o_wb2_ack); - assert(!wb2_stb); - assert(o_wb2_stall); - assert(!wb2_update); - end - if(f_empty_2 && i_wb2_cyc) begin - assert(!wb2_stb && !o_wb2_ack); - end - if(!wb2_stb && !o_wb2_ack) begin - assert(f_empty_2); - end - f_write_data_2 = 0; - f_write_fifo_2 = 0; - if(i_wb2_stb && !o_wb2_stall && i_wb2_cyc) begin //if there is request - if(i_wb2_we) begin - f_write_data_2 = {i_wb2_sel, i_wb2_data[4:0], i_wb2_data[5 +: $clog2(LANES)], i_wb2_addr[3:0], i_wb2_we}; //CNTVALUEIN + LANE_NUMBER + MEMORY_MAPPED_ADDRESS + REQUEST_TYPE - end - else begin //read request - f_write_data_2 = {i_wb2_addr[4 +: $clog2(LANES)], i_wb2_addr[3:0], i_wb2_we}; //LANE_NUMBER + MEMORY_MAPPED_ADDRESS + REQUEST_TYPE - end - f_write_fifo_2 = 1; - end - end - - //verify outcome of request - always @(posedge i_controller_clk, negedge i_rst_n) begin - if(!i_rst_n) begin - f_o_wb2_ack_q <= 0; - f_read_data_2_q <= 0; - end - else begin - f_o_wb2_ack_q <= o_wb2_ack && f_read_data_2[0] && i_wb2_cyc; - f_read_data_2_q <= f_read_data_2; - end - end - always @* begin - if(i_rst_n) begin - if(wb2_stb && o_wb2_ack) begin - assert(f_full_2 || !i_wb2_cyc); - end - if(f_full_2) begin - assert(wb2_stb && o_wb2_ack); - assert(f_outstanding_2 == 2 || !i_wb2_cyc); - end - if(f_outstanding_2 == 2) begin - assert(f_full_2 || !i_wb2_cyc); - end - if(f_empty_2) begin - assert(f_outstanding_2 == 0 || !i_wb2_cyc); - end - if(f_outstanding_2 == 0) begin - assert(f_empty_2 || !i_wb2_cyc); - end - end - assert(f_outstanding_2 <= 2); - f_read_fifo_2 = 0; - if(f_o_wb2_ack_q && i_rst_n && (&f_read_data_2_q[5 + $clog2(LANES) + 4 + 1 +: $rtoi($ceil( ($clog2(LANES) + 5)/8 ))])) begin //write request (the sel bits must be high) - case(f_read_data_2_q[4:1]) //memory-mapped address - 0: begin - assert(o_phy_odelay_data_ld == (1 << f_read_data_2_q[5 +: $clog2(LANES)])); //the phy lane to be loaded must be high - assert(o_phy_odelay_data_cntvaluein == f_read_data_2_q[(5 + $clog2(LANES)) +: 5]); //the phy interface for cntvalue must already be updated - end - 1: begin - assert(o_phy_odelay_dqs_ld == (1 << f_read_data_2_q[5 +: $clog2(LANES)])); //the phy lane to be loaded must be high - assert(o_phy_odelay_dqs_cntvaluein == f_read_data_2_q[(5 + $clog2(LANES)) +: 5]); //the phy interface for cntvalue must already be updated - end - 2: begin - assert(o_phy_idelay_data_ld == (1 << f_read_data_2_q[5 +: $clog2(LANES)])); //the phy lane to be loaded must be high - assert(o_phy_idelay_data_cntvaluein == f_read_data_2_q[(5 + $clog2(LANES)) +: 5]); //the phy interface for cntvalue must already be updated - end - 3: begin - assert(o_phy_idelay_dqs_ld == (1 << f_read_data_2_q[5 +: $clog2(LANES)])); //the phy lane to be loaded must be high - assert(o_phy_idelay_dqs_cntvaluein == f_read_data_2_q[(5 + $clog2(LANES)) +: 5]); //the phy interface for cntvalue must already be updated - end - endcase - end - if(o_wb2_ack && !f_read_data_2[0] && i_rst_n) begin //read request - f_read_fifo_2 = 1; - end - - if(o_wb2_ack && f_read_data_2[0] && i_rst_n) begin - f_read_fifo_2 = 1; - end - end - wire[2:0] f_read_data_2_lane; - assign f_read_data_2_lane = f_read_data_2[5 +: $clog2(LANES)]; - always @(posedge i_controller_clk) begin - //read request - if(o_wb2_ack && !f_read_data_2[0] && i_rst_n && i_wb2_cyc && !(f_o_wb2_ack_q && f_read_data_2_q[1 +: (4 + $clog2(LANES))] == f_read_data_2[1 +: (4 + $clog2(LANES))] )) begin - case(f_read_data_2[4:1]) //memory-mapped address - 0: begin - assert(o_wb2_data == odelay_data_cntvaluein[f_read_data_2[5 +: $clog2(LANES)]]); //the stored delay must match the wb2 output - end - 1: begin - assert(o_wb2_data == odelay_dqs_cntvaluein[f_read_data_2[5 +: $clog2(LANES)]]); //the stored delay must match the wb2 output - end - 2: begin - assert(o_wb2_data == idelay_data_cntvaluein[f_read_data_2[5 +: $clog2(LANES)]]); //the stored delay must match the wb2 output - end - 3: begin - assert(o_wb2_data == idelay_dqs_cntvaluein[f_read_data_2[5 +: $clog2(LANES)]]); //the stored delay must match the wb2 output - end - endcase - end - if(f_past_valid) begin - for(index = 0; index < LANES; index = index + 1) begin - if(o_phy_bitslip[index]) begin - /* Bitslip cannot be asserted for two consecutive CLKDIV cycles; Bitslip must be - deasserted for at least one CLKDIV cycle between two Bitslip assertions. - */ - assert(!$past(o_phy_bitslip[index])); - end - end - end - end - - mini_fifo #( - .FIFO_WIDTH(1), //the fifo will have 2**FIFO_WIDTH positions - .DATA_WIDTH(F_TEST_WB2_DATA_WIDTH) //each FIFO position can store DATA_WIDTH bits - ) fifo_2 ( - .i_clk(i_controller_clk), - .i_rst_n(i_rst_n && i_wb2_cyc), //reset outstanding request at reset or when cyc goes low - .read_fifo(f_read_fifo_2), - .write_fifo(f_write_fifo_2), - .empty(f_empty_2), - .full(f_full_2), - .write_data(f_write_data_2), - .read_data(f_read_data_2) - ); - - //assumption on when to do request (so as not to violate the - //F_MAX_STALL property of fwb_slave) - always @* begin - if(!(state_calibrate == DONE_CALIBRATE && instruction_address == 22)) begin //if in initialization/refresh sequence, no request should come in to the controller wishbone - assume(!i_wb_stb); - end - if(!(state_calibrate == DONE_CALIBRATE)) begin //if not yet done calibrating, no request should come in to the phy wishbone - assume(!i_wb2_stb); - end - end - fwb_slave #( - // {{{ - .AW(wb_addr_bits), - .DW(wb_data_bits), - .F_MAX_STALL(F_MAX_STALL), - .F_MAX_ACK_DELAY(F_MAX_ACK_DELAY), - .F_LGDEPTH(4), - .F_MAX_REQUESTS(10), - // OPT_BUS_ABORT: If true, the master can drop CYC at any time - // and must drop CYC following any bus error - .OPT_BUS_ABORT(1), - // - // If true, allow the bus to be kept open when there are no - // outstanding requests. This is useful for any master that - // might execute a read modify write cycle, such as an atomic - // add. - .F_OPT_RMW_BUS_OPTION(1), - // - // - // If true, allow the bus to issue multiple discontinuous - // requests. - // Unlike F_OPT_RMW_BUS_OPTION, these requests may be issued - // while other requests are outstanding - .F_OPT_DISCONTINUOUS(1), - // - // - // If true, insist that there be a minimum of a single clock - // delay between request and response. This defaults to off - // since the wishbone specification specifically doesn't - // require this. However, some interfaces do, so we allow it - // as an option here. - .F_OPT_MINCLOCK_DELAY(1), - // }}} - ) wb_properties ( - // {{{ - .i_clk(i_controller_clk), - .i_reset(!i_rst_n), - // The Wishbone bus - .i_wb_cyc(i_wb_cyc), - .i_wb_stb(i_wb_stb), - .i_wb_we(i_wb_we), - .i_wb_addr(i_wb_addr), - .i_wb_data(i_wb_data), - .i_wb_sel(i_wb_sel), - // - .i_wb_ack(o_wb_ack), - .i_wb_stall(o_wb_stall), - .i_wb_idata(o_wb_data), - .i_wb_err(1'b0), - // Some convenience output parameters - .f_nreqs(f_nreqs), - .f_nacks(f_nacks), - .f_outstanding(f_outstanding), - .f_ackwait_count(f_ackwait_count), - .f_stall_count(f_stall_count) - // }}} - // }}} - ); - - fwb_slave #( - // {{{ - .AW(WB2_ADDR_BITS), - .DW(WB2_DATA_BITS), - .F_MAX_STALL(2), - .F_MAX_ACK_DELAY(2), - .F_LGDEPTH(4), - .F_MAX_REQUESTS(10), - // OPT_BUS_ABORT: If true, the master can drop CYC at any time - // and must drop CYC following any bus error - .OPT_BUS_ABORT(1), - // - // If true, allow the bus to be kept open when there are no - // outstanding requests. This is useful for any master that - // might execute a read modify write cycle, such as an atomic - // add. - .F_OPT_RMW_BUS_OPTION(1), - // - // - // If true, allow the bus to issue multiple discontinuous - // requests. - // Unlike F_OPT_RMW_BUS_OPTION, these requests may be issued - // while other requests are outstanding - .F_OPT_DISCONTINUOUS(1), - // - // - // If true, insist that there be a minimum of a single clock - // delay between request and response. This defaults to off - // since the wishbone specification specifically doesn't - // require this. However, some interfaces do, so we allow it - // as an option here. - .F_OPT_MINCLOCK_DELAY(1), - // }}} - ) wb2_properties ( - // {{{ - .i_clk(i_controller_clk), - .i_reset(!i_rst_n), - // The Wishbone bus - .i_wb_cyc(i_wb2_cyc), - .i_wb_stb(i_wb2_stb), - .i_wb_we(i_wb2_we), - .i_wb_addr(i_wb2_addr), - .i_wb_data(i_wb2_data), - .i_wb_sel(i_wb2_sel), - // - .i_wb_ack(o_wb2_ack), - .i_wb_stall(o_wb2_stall), - .i_wb_idata(o_wb2_data), - .i_wb_err(1'b0), - // Some convenience output parameters - .f_nreqs(f_nreqs_2), - .f_nacks(f_nacks_2), - .f_outstanding(f_outstanding_2), - // }}} - // }}} - ); - `endif //endif for TEST_CONTROLLER_PIPELINE -`endif //endif for FORMAL -endmodule - -//FiFO with only 2 elements for verifying the contents of the controller -//2-stage pipeline -module mini_fifo #( - parameter FIFO_WIDTH = 1, //the fifo will have 2**FIFO_WIDTH positions - parameter DATA_WIDTH = 8 //each FIFO position can store DATA_WIDTH bits - )( - input wire i_clk, i_rst_n, - input wire read_fifo, write_fifo, - output reg empty, full, - input wire[DATA_WIDTH - 1:0] write_data, - output wire[DATA_WIDTH - 1:0] read_data, - output wire[DATA_WIDTH - 1:0] read_data_next - ); - reg[FIFO_WIDTH-1:0] write_pointer=0, read_pointer=0; - reg[DATA_WIDTH - 1:0] fifo_reg[2**FIFO_WIDTH-1:0]; - initial begin - empty = 1; - full = 0; - end - - always @(posedge i_clk, negedge i_rst_n) begin - if(!i_rst_n) begin - empty <= 1; - full <=0; - read_pointer <= 0; - write_pointer <= 0; - end - else begin - if(read_fifo) begin - `ifdef FORMAL - assert(!empty); - `endif - if(!write_fifo) full <= 0; - //advance read pointer - read_pointer <= read_pointer + 1; - if(read_pointer + 1'b1 == write_pointer && !write_fifo) empty <= 1; - end - if(write_fifo) begin - `ifdef FORMAL - if(!read_fifo) assert(!full); - `endif - if(!read_fifo) empty <= 0; - //write to FiFo - fifo_reg[write_pointer] <= write_data; - //advance read pointer - write_pointer <= write_pointer + 1; - if(write_pointer + 1'b1 == read_pointer && !read_fifo) full <= 1'b1; //fifo should never be full - end - end - end - assign read_data = fifo_reg[read_pointer]; - assign read_data_next = fifo_reg[!read_pointer]; //data after current pointer - - `ifdef FORMAL - //mini-FiFo assertions - always @* begin - if(empty || full) begin - assert(write_pointer == read_pointer); - end - if(write_pointer == read_pointer) begin - assert(empty || full); - end - assert(!(empty && full)); - //TASK ADD MORE ASSERTIONS - end - `endif - -endmodule - -