From 9b35a04234f10ab19848b85f2196ccac85bb0fbc Mon Sep 17 00:00:00 2001 From: Kelvin Ly Date: Tue, 7 Jan 2020 09:02:04 -0500 Subject: [PATCH] adc_driver seems to be working to original spec, now to shift the slave select back a few cycles --- rtl/library/adc_driver.v | 53 +- rtl/tb/a.out | 563 +++ rtl/tb/adc_driver_tb.v | 143 + rtl/tb/adc_driver_tb.vcd | 8506 ++++++++++++++++++++++++++++++++++++++ rtl/tb/adc_test.cpp | 37 + 5 files changed, 9281 insertions(+), 21 deletions(-) create mode 100755 rtl/tb/a.out create mode 100644 rtl/tb/adc_driver_tb.v create mode 100644 rtl/tb/adc_driver_tb.vcd create mode 100644 rtl/tb/adc_test.cpp diff --git a/rtl/library/adc_driver.v b/rtl/library/adc_driver.v index dc63015..5ca8b49 100644 --- a/rtl/library/adc_driver.v +++ b/rtl/library/adc_driver.v @@ -3,16 +3,24 @@ module adc_driver( input rstn, input adc_so, - output reg adc_si, - output reg adc_ss, - reg adc_sck, + output adc_si, + output adc_ss, + output adc_sck, - output reg [1:0] channel, - output reg [11:0] adc_val, + output [1:0] channel, + output [11:0] adc_val, output reg vld, input ack ); +reg [1:0] channel_ff = 0; +reg [11:0] adc_val_ff = 0; +reg vld_ff = 0; + +assign channel = channel_ff; +assign adc_val = adc_val_ff; +assign vld = vld_ff; + reg [2:0] sck_strobe = 0; wire strobe = &sck_strobe; @@ -38,11 +46,16 @@ reg sck_next; reg ss_next; reg si_next; +reg adc_si_ff = 1; +reg adc_ss_ff = 1; reg adc_sck_ff = 1; +assign adc_si = adc_si_ff; +assign adc_ss = adc_ss_ff; assign adc_sck = adc_sck_ff; +wire [15:0] config_word; wire config_bit; -assign config_bit = { +assign config_word = { 1'b0, // ADC Mode Control 4'b0100, // Standard_Ext 4'b0011, // Up to AIN3 @@ -50,8 +63,9 @@ assign config_bit = { 2'b00, // normal PM mode 1'b1, // include channel number in output 1'b0, // SWCNV enable, not used in external clock mode - 1'b0, // reserved - }[15-bit_pos]; + 1'b0 // reserved + }; +assign config_bit = config_word[15-bit_pos]; always @* begin state_next = state; @@ -68,7 +82,7 @@ always @* begin ss_next = adc_ss; sck_next = adc_sck; - if (sck_strobe) begin + if (strobe) begin case (state) INIT: begin ss_next = 0; @@ -102,23 +116,20 @@ always @* begin si_next = 0; sck_next = ~adc_sck; - // update bit pos state on the falling edge + // update bit pos state on the rising edge // shift in data as well - if (adc_sck) begin + if (~adc_sck) begin bit_pos_next = bit_pos + 1; - so_ff_next = {so_ff[14:0], adc_si}; + so_ff_next = {so_ff[14:0], adc_so}; // after reading the last bit // deassert ss so it can be reasserted on the next rising edge if (bit_pos == 15) begin ss_next = 1; + write_out = 1; end end - // write the data out on the rising edge after the overflow - if (~adc_sck & (bit_pos == 0)) begin - write_out = 1; - end end endcase end @@ -135,18 +146,18 @@ always @(posedge clk) begin bit_pos <= bit_pos_next; adc_sck_ff <= sck_next; - adc_ss <= ss_next; - adc_si <= si_next; + adc_ss_ff <= ss_next; + adc_si_ff <= si_next; so_ff <= so_ff_next; // write the data out when write_out is asserted if (write_out) begin - {adc_channel, adc_val} <= so_ff[13:0]; - vld <= 1; + {channel_ff, adc_val_ff} <= so_ff_next[13:0]; + vld_ff <= 1; end // deassert vld when the data is acknowledged if (ack) - vld <= 0; + vld_ff <= 0; end endmodule diff --git a/rtl/tb/a.out b/rtl/tb/a.out new file mode 100755 index 0000000..9baedce --- /dev/null +++ b/rtl/tb/a.out @@ -0,0 +1,563 @@ +#! /usr/bin/vvp +:ivl_version "10.3 (stable)"; +:ivl_delay_selection "TYPICAL"; +:vpi_time_precision - 8; +:vpi_module "system"; +:vpi_module "vhdl_sys"; +:vpi_module "v2005_math"; +:vpi_module "va_math"; +:vpi_module "v2009"; +S_0x55c406b87500 .scope module, "top" "top" 2 3; + .timescale -8 -8; +v0x55c406bd3a20_0 .var "ack", 0 0; +v0x55c406bd3ae0 .array/i "adc_out", 0 3, 31 0; +v0x55c406bd3b80_0 .var/i "adc_pos", 31 0; +v0x55c406bd3c40_0 .net "adc_sck", 0 0, L_0x55c406bd4e50; 1 drivers +v0x55c406bd3d10_0 .net "adc_si", 0 0, L_0x55c406bd4ca0; 1 drivers +v0x55c406bd3db0_0 .var "adc_so", 0 0; +v0x55c406bd3e80_0 .net "adc_ss", 0 0, L_0x55c406bd4d90; 1 drivers +v0x55c406bd3f50_0 .net "adc_val", 11 0, L_0x55c406ba6030; 1 drivers +v0x55c406bd4020_0 .var/i "bit_pos", 31 0; +v0x55c406bd40c0_0 .net "channel", 1 0, L_0x55c406ba6120; 1 drivers +v0x55c406bd4190_0 .var/i "channel_num", 31 0; +v0x55c406bd4230_0 .var "clk", 0 0; +v0x55c406bd4300_0 .var/i "configdata", 31 0; +v0x55c406bd43c0_0 .var "configured", 0 0; +v0x55c406bd4480_0 .var "enabled", 0 0; +v0x55c406bd4540_0 .var/i "i", 31 0; +v0x55c406bd4620_0 .var "out", 15 0; +v0x55c406bd4700_0 .var "rstn", 0 0; +v0x55c406bd47d0_0 .var "sck_old", 0 0; +v0x55c406bd4870_0 .var "ss_old", 0 0; +v0x55c406bd4930_0 .var/i "tosend", 31 0; +v0x55c406bd4a10_0 .net "vld", 0 0, L_0x55c406ba5f40; 1 drivers +E_0x55c406ba5370 .event edge, v0x55c406bd3b80_0; +S_0x55c406b5f260 .scope module, "dut" "adc_driver" 2 21, 3 1 0, S_0x55c406b87500; + .timescale -8 -8; + .port_info 0 /INPUT 1 "clk" + .port_info 1 /INPUT 1 "rstn" + .port_info 2 /INPUT 1 "adc_so" + .port_info 3 /OUTPUT 1 "adc_si" + .port_info 4 /OUTPUT 1 "adc_ss" + .port_info 5 /OUTPUT 1 "adc_sck" + .port_info 6 /OUTPUT 2 "channel" + .port_info 7 /OUTPUT 12 "adc_val" + .port_info 8 /OUTPUT 1 "vld" + .port_info 9 /INPUT 1 "ack" +P_0x55c406b87140 .param/l "ADC" 1 3 34, +C4<00000000000000000000000000000010>; +P_0x55c406b87180 .param/l "CONFIG" 1 3 34, +C4<00000000000000000000000000000001>; +P_0x55c406b871c0 .param/l "INIT" 1 3 34, +C4<00000000000000000000000000000000>; +L_0x55c406ba6120 .functor BUFZ 2, v0x55c406bd2930_0, C4<00>, C4<00>, C4<00>; +L_0x55c406ba6030 .functor BUFZ 12, v0x55c406bd25b0_0, C4<000000000000>, C4<000000000000>, C4<000000000000>; +L_0x55c406ba5f40 .functor BUFZ 1, v0x55c406bd3550_0, C4<0>, C4<0>, C4<0>; +L_0x55c406bd4ca0 .functor BUFZ 1, v0x55c406bd21d0_0, C4<0>, C4<0>, C4<0>; +L_0x55c406bd4d90 .functor BUFZ 1, v0x55c406bd2410_0, C4<0>, C4<0>, C4<0>; +L_0x55c406bd4e50 .functor BUFZ 1, v0x55c406bd2050_0, C4<0>, C4<0>, C4<0>; +L_0x7ff03e59d060 .functor BUFT 1, C4<00000000000000000000000000001111>, C4<0>, C4<0>, C4<0>; +v0x55c406bb29b0_0 .net/2u *"_s16", 31 0, L_0x7ff03e59d060; 1 drivers +v0x55c406b8a8d0_0 .net *"_s18", 31 0, L_0x55c406be4fc0; 1 drivers +L_0x7ff03e59d0a8 .functor BUFT 1, C4<0000000000000000000000000000>, C4<0>, C4<0>, C4<0>; +v0x55c406bd1ce0_0 .net *"_s21", 27 0, L_0x7ff03e59d0a8; 1 drivers +v0x55c406bd1da0_0 .net *"_s22", 31 0, L_0x55c406be5140; 1 drivers +v0x55c406bd1e80_0 .net "ack", 0 0, v0x55c406bd3a20_0; 1 drivers +v0x55c406bd1f90_0 .net "adc_sck", 0 0, L_0x55c406bd4e50; alias, 1 drivers +v0x55c406bd2050_0 .var "adc_sck_ff", 0 0; +v0x55c406bd2110_0 .net "adc_si", 0 0, L_0x55c406bd4ca0; alias, 1 drivers +v0x55c406bd21d0_0 .var "adc_si_ff", 0 0; +v0x55c406bd2290_0 .net "adc_so", 0 0, v0x55c406bd3db0_0; 1 drivers +v0x55c406bd2350_0 .net "adc_ss", 0 0, L_0x55c406bd4d90; alias, 1 drivers +v0x55c406bd2410_0 .var "adc_ss_ff", 0 0; +v0x55c406bd24d0_0 .net "adc_val", 11 0, L_0x55c406ba6030; alias, 1 drivers +v0x55c406bd25b0_0 .var "adc_val_ff", 11 0; +v0x55c406bd2690_0 .var "bit_pos", 3 0; +v0x55c406bd2770_0 .var "bit_pos_next", 3 0; +v0x55c406bd2850_0 .net "channel", 1 0, L_0x55c406ba6120; alias, 1 drivers +v0x55c406bd2930_0 .var "channel_ff", 1 0; +v0x55c406bd2a10_0 .net "clk", 0 0, v0x55c406bd4230_0; 1 drivers +v0x55c406bd2ad0_0 .net "config_bit", 0 0, L_0x55c406be5320; 1 drivers +L_0x7ff03e59d018 .functor BUFT 1, C4<0010000110100100>, C4<0>, C4<0>, C4<0>; +v0x55c406bd2b90_0 .net "config_word", 15 0, L_0x7ff03e59d018; 1 drivers +v0x55c406bd2c70_0 .net "rstn", 0 0, v0x55c406bd4700_0; 1 drivers +v0x55c406bd2d30_0 .var "sck_next", 0 0; +v0x55c406bd2df0_0 .var "sck_strobe", 2 0; +v0x55c406bd2ed0_0 .var "si_next", 0 0; +v0x55c406bd2f90_0 .var "so_ff", 15 0; +v0x55c406bd3070_0 .var "so_ff_next", 15 0; +v0x55c406bd3150_0 .var "ss_next", 0 0; +v0x55c406bd3210_0 .var "state", 1 0; +v0x55c406bd32f0_0 .var "state_next", 1 0; +v0x55c406bd33d0_0 .net "strobe", 0 0, L_0x55c406bd4ba0; 1 drivers +v0x55c406bd3490_0 .net "vld", 0 0, L_0x55c406ba5f40; alias, 1 drivers +v0x55c406bd3550_0 .var "vld_ff", 0 0; +v0x55c406bd3820_0 .var "write_out", 0 0; +E_0x55c406ba3660 .event posedge, v0x55c406bd2a10_0; +E_0x55c406ba4480/0 .event edge, v0x55c406bd3210_0, v0x55c406bd2690_0, v0x55c406bd2f90_0, v0x55c406bd2c70_0; +E_0x55c406ba4480/1 .event edge, v0x55c406bd2110_0, v0x55c406bd2350_0, v0x55c406bd1f90_0, v0x55c406bd33d0_0; +E_0x55c406ba4480/2 .event edge, v0x55c406bd2ad0_0, v0x55c406bd2290_0; +E_0x55c406ba4480 .event/or E_0x55c406ba4480/0, E_0x55c406ba4480/1, E_0x55c406ba4480/2; +L_0x55c406bd4ba0 .reduce/and v0x55c406bd2df0_0; +L_0x55c406be4fc0 .concat [ 4 28 0 0], v0x55c406bd2690_0, L_0x7ff03e59d0a8; +L_0x55c406be5140 .arith/sub 32, L_0x7ff03e59d060, L_0x55c406be4fc0; +L_0x55c406be5320 .part/v L_0x7ff03e59d018, L_0x55c406be5140, 1; + .scope S_0x55c406b5f260; +T_0 ; + %pushi/vec4 0, 0, 2; + %store/vec4 v0x55c406bd2930_0, 0, 2; + %pushi/vec4 0, 0, 12; + %store/vec4 v0x55c406bd25b0_0, 0, 12; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd3550_0, 0, 1; + %pushi/vec4 0, 0, 3; + %store/vec4 v0x55c406bd2df0_0, 0, 3; + %pushi/vec4 0, 0, 2; + %store/vec4 v0x55c406bd3210_0, 0, 2; + %pushi/vec4 0, 0, 4; + %store/vec4 v0x55c406bd2690_0, 0, 4; + %pushi/vec4 0, 0, 16; + %store/vec4 v0x55c406bd2f90_0, 0, 16; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd21d0_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd2410_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd2050_0, 0, 1; + %end; + .thread T_0, $init; + .scope S_0x55c406b5f260; +T_1 ; + %wait E_0x55c406ba3660; + %load/vec4 v0x55c406bd2c70_0; + %flag_set/vec4 8; + %jmp/0xz T_1.0, 8; + %load/vec4 v0x55c406bd2df0_0; + %addi 1, 0, 3; + %assign/vec4 v0x55c406bd2df0_0, 0; + %jmp T_1.1; +T_1.0 ; + %pushi/vec4 0, 0, 3; + %assign/vec4 v0x55c406bd2df0_0, 0; +T_1.1 ; + %jmp T_1; + .thread T_1; + .scope S_0x55c406b5f260; +T_2 ; + %wait E_0x55c406ba4480; + %load/vec4 v0x55c406bd3210_0; + %store/vec4 v0x55c406bd32f0_0, 0, 2; + %load/vec4 v0x55c406bd2690_0; + %store/vec4 v0x55c406bd2770_0, 0, 4; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd3820_0, 0, 1; + %load/vec4 v0x55c406bd2f90_0; + %store/vec4 v0x55c406bd3070_0, 0, 16; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd2d30_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd3150_0, 0, 1; + %load/vec4 v0x55c406bd2c70_0; + %flag_set/vec4 8; + %jmp/0xz T_2.0, 8; + %load/vec4 v0x55c406bd2110_0; + %store/vec4 v0x55c406bd2ed0_0, 0, 1; + %load/vec4 v0x55c406bd2350_0; + %store/vec4 v0x55c406bd3150_0, 0, 1; + %load/vec4 v0x55c406bd1f90_0; + %store/vec4 v0x55c406bd2d30_0, 0, 1; + %load/vec4 v0x55c406bd33d0_0; + %flag_set/vec4 8; + %jmp/0xz T_2.2, 8; + %load/vec4 v0x55c406bd3210_0; + %dup/vec4; + %pushi/vec4 0, 0, 2; + %cmp/u; + %jmp/1 T_2.4, 6; + %dup/vec4; + %pushi/vec4 1, 0, 2; + %cmp/u; + %jmp/1 T_2.5, 6; + %dup/vec4; + %pushi/vec4 2, 0, 2; + %cmp/u; + %jmp/1 T_2.6, 6; + %jmp T_2.7; +T_2.4 ; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd3150_0, 0, 1; + %pushi/vec4 1, 0, 2; + %store/vec4 v0x55c406bd32f0_0, 0, 2; + %pushi/vec4 0, 0, 4; + %store/vec4 v0x55c406bd2770_0, 0, 4; + %jmp T_2.7; +T_2.5 ; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd3150_0, 0, 1; + %load/vec4 v0x55c406bd1f90_0; + %inv; + %store/vec4 v0x55c406bd2d30_0, 0, 1; + %load/vec4 v0x55c406bd1f90_0; + %flag_set/vec4 8; + %jmp/0xz T_2.8, 8; + %load/vec4 v0x55c406bd2690_0; + %addi 1, 0, 4; + %store/vec4 v0x55c406bd2770_0, 0, 4; + %load/vec4 v0x55c406bd2ad0_0; + %store/vec4 v0x55c406bd2ed0_0, 0, 1; + %load/vec4 v0x55c406bd2690_0; + %pad/u 32; + %cmpi/e 15, 0, 32; + %jmp/0xz T_2.10, 4; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd3150_0, 0, 1; +T_2.10 ; +T_2.8 ; + %load/vec4 v0x55c406bd1f90_0; + %inv; + %load/vec4 v0x55c406bd2690_0; + %pad/u 32; + %pushi/vec4 0, 0, 32; + %cmp/e; + %flag_get/vec4 4; + %and; + %flag_set/vec4 8; + %jmp/0xz T_2.12, 8; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd3150_0, 0, 1; + %pushi/vec4 2, 0, 2; + %store/vec4 v0x55c406bd32f0_0, 0, 2; +T_2.12 ; + %jmp T_2.7; +T_2.6 ; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd3150_0, 0, 1; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd2ed0_0, 0, 1; + %load/vec4 v0x55c406bd1f90_0; + %inv; + %store/vec4 v0x55c406bd2d30_0, 0, 1; + %load/vec4 v0x55c406bd1f90_0; + %inv; + %flag_set/vec4 8; + %jmp/0xz T_2.14, 8; + %load/vec4 v0x55c406bd2690_0; + %addi 1, 0, 4; + %store/vec4 v0x55c406bd2770_0, 0, 4; + %load/vec4 v0x55c406bd2f90_0; + %parti/s 15, 0, 2; + %load/vec4 v0x55c406bd2290_0; + %concat/vec4; draw_concat_vec4 + %store/vec4 v0x55c406bd3070_0, 0, 16; + %load/vec4 v0x55c406bd2690_0; + %pad/u 32; + %cmpi/e 15, 0, 32; + %jmp/0xz T_2.16, 4; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd3150_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd3820_0, 0, 1; +T_2.16 ; +T_2.14 ; + %jmp T_2.7; +T_2.7 ; + %pop/vec4 1; +T_2.2 ; + %jmp T_2.1; +T_2.0 ; + %pushi/vec4 0, 0, 2; + %store/vec4 v0x55c406bd32f0_0, 0, 2; + %pushi/vec4 0, 0, 4; + %store/vec4 v0x55c406bd2770_0, 0, 4; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd2d30_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd3150_0, 0, 1; +T_2.1 ; + %jmp T_2; + .thread T_2, $push; + .scope S_0x55c406b5f260; +T_3 ; + %wait E_0x55c406ba3660; + %load/vec4 v0x55c406bd32f0_0; + %assign/vec4 v0x55c406bd3210_0, 0; + %load/vec4 v0x55c406bd2770_0; + %assign/vec4 v0x55c406bd2690_0, 0; + %load/vec4 v0x55c406bd2d30_0; + %assign/vec4 v0x55c406bd2050_0, 0; + %load/vec4 v0x55c406bd3150_0; + %assign/vec4 v0x55c406bd2410_0, 0; + %load/vec4 v0x55c406bd2ed0_0; + %assign/vec4 v0x55c406bd21d0_0, 0; + %load/vec4 v0x55c406bd3070_0; + %assign/vec4 v0x55c406bd2f90_0, 0; + %load/vec4 v0x55c406bd3820_0; + %flag_set/vec4 8; + %jmp/0xz T_3.0, 8; + %load/vec4 v0x55c406bd3070_0; + %parti/s 14, 0, 2; + %split/vec4 12; + %assign/vec4 v0x55c406bd25b0_0, 0; + %assign/vec4 v0x55c406bd2930_0, 0; + %pushi/vec4 1, 0, 1; + %assign/vec4 v0x55c406bd3550_0, 0; +T_3.0 ; + %load/vec4 v0x55c406bd1e80_0; + %flag_set/vec4 8; + %jmp/0xz T_3.2, 8; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x55c406bd3550_0, 0; +T_3.2 ; + %jmp T_3; + .thread T_3; + .scope S_0x55c406b87500; +T_4 ; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd4230_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd4700_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd3db0_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd47d0_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd4870_0, 0, 1; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd3a20_0, 0, 1; + %end; + .thread T_4, $init; + .scope S_0x55c406b87500; +T_5 ; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd4230_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd4700_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd3db0_0, 0, 1; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd47d0_0, 0, 1; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd43c0_0, 0, 1; + %pushi/vec4 0, 0, 16; + %store/vec4 v0x55c406bd4620_0, 0, 16; + %vpi_call/w 2 48 "$dumpfile", "adc_driver_tb.vcd" {0 0 0}; + %vpi_call/w 2 49 "$dumpvars" {0 0 0}; + %end; + .thread T_5; + .scope S_0x55c406b87500; +T_6 ; + %delay 2, 0; + %load/vec4 v0x55c406bd4230_0; + %nor/r; + %store/vec4 v0x55c406bd4230_0, 0, 1; + %jmp T_6; + .thread T_6; + .scope S_0x55c406b87500; +T_7 ; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x55c406bd4020_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x55c406bd4190_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x55c406bd4930_0, 0, 32; + %pushi/vec4 0, 0, 1; + %store/vec4 v0x55c406bd4480_0, 0, 1; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x55c406bd4300_0, 0, 32; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x55c406bd3b80_0, 0, 32; + %pushi/vec4 1, 0, 1; + %store/vec4 v0x55c406bd3db0_0, 0, 1; + %pushi/vec4 0, 0, 32; + %store/vec4 v0x55c406bd4540_0, 0, 32; +T_7.0 ; + %load/vec4 v0x55c406bd4540_0; + %cmpi/s 4, 0, 32; + %jmp/0xz T_7.1, 5; + %pushi/vec4 0, 0, 32; + %ix/getv/s 4, v0x55c406bd4540_0; + %store/vec4a v0x55c406bd3ae0, 4, 0; + %load/vec4 v0x55c406bd4540_0; + %pushi/vec4 1, 0, 32; + %add; + %store/vec4 v0x55c406bd4540_0, 0, 32; + %jmp T_7.0; +T_7.1 ; + %end; + .thread T_7; + .scope S_0x55c406b87500; +T_8 ; + %wait E_0x55c406ba5370; + %load/vec4 v0x55c406bd3b80_0; + %parti/s 2, 0, 2; + %dup/vec4; + %pushi/vec4 0, 0, 2; + %cmp/u; + %jmp/1 T_8.0, 6; + %dup/vec4; + %pushi/vec4 1, 0, 2; + %cmp/u; + %jmp/1 T_8.1, 6; + %dup/vec4; + %pushi/vec4 2, 0, 2; + %cmp/u; + %jmp/1 T_8.2, 6; + %dup/vec4; + %pushi/vec4 3, 0, 2; + %cmp/u; + %jmp/1 T_8.3, 6; + %jmp T_8.4; +T_8.0 ; + %pushi/vec4 511, 0, 16; + %store/vec4 v0x55c406bd4620_0, 0, 16; + %jmp T_8.4; +T_8.1 ; + %pushi/vec4 8191, 0, 16; + %store/vec4 v0x55c406bd4620_0, 0, 16; + %jmp T_8.4; +T_8.2 ; + %pushi/vec4 11754, 0, 16; + %store/vec4 v0x55c406bd4620_0, 0, 16; + %jmp T_8.4; +T_8.3 ; + %pushi/vec4 15535, 0, 16; + %store/vec4 v0x55c406bd4620_0, 0, 16; + %jmp T_8.4; +T_8.4 ; + %pop/vec4 1; + %jmp T_8; + .thread T_8, $push; + .scope S_0x55c406b87500; +T_9 ; + %wait E_0x55c406ba3660; + %load/vec4 v0x55c406bd3e80_0; + %inv; + %load/vec4 v0x55c406bd4870_0; + %and; + %flag_set/vec4 8; + %jmp/0xz T_9.0, 8; + %pushi/vec4 1, 0, 1; + %assign/vec4 v0x55c406bd4480_0, 0; + %pushi/vec4 0, 0, 32; + %assign/vec4 v0x55c406bd4020_0, 0; +T_9.0 ; + %load/vec4 v0x55c406bd4480_0; + %flag_set/vec4 8; + %jmp/0xz T_9.2, 8; + %load/vec4 v0x55c406bd43c0_0; + %nor/r; + %flag_set/vec4 8; + %jmp/0xz T_9.4, 8; + %load/vec4 v0x55c406bd47d0_0; + %inv; + %load/vec4 v0x55c406bd3c40_0; + %and; + %flag_set/vec4 8; + %jmp/0xz T_9.6, 8; + %load/vec4 v0x55c406bd4300_0; + %ix/load 4, 1, 0; + %flag_set/imm 4, 0; + %shiftl 4; + %load/vec4 v0x55c406bd3d10_0; + %pad/u 32; + %or; + %assign/vec4 v0x55c406bd4300_0, 0; + %pushi/vec4 15, 0, 32; + %load/vec4 v0x55c406bd4020_0; + %cmp/s; + %flag_or 5, 4; + %jmp/0xz T_9.8, 5; + %pushi/vec4 1, 0, 1; + %assign/vec4 v0x55c406bd43c0_0, 0; + %pushi/vec4 0, 0, 32; + %assign/vec4 v0x55c406bd4020_0, 0; + %jmp T_9.9; +T_9.8 ; + %load/vec4 v0x55c406bd4020_0; + %addi 1, 0, 32; + %assign/vec4 v0x55c406bd4020_0, 0; +T_9.9 ; +T_9.6 ; + %jmp T_9.5; +T_9.4 ; + %load/vec4 v0x55c406bd47d0_0; + %inv; + %load/vec4 v0x55c406bd3c40_0; + %and; + %flag_set/vec4 8; + %jmp/0xz T_9.10, 8; +T_9.10 ; + %load/vec4 v0x55c406bd47d0_0; + %load/vec4 v0x55c406bd3c40_0; + %inv; + %and; + %flag_set/vec4 8; + %jmp/0xz T_9.12, 8; + %pushi/vec4 15, 0, 32; + %load/vec4 v0x55c406bd4020_0; + %cmp/s; + %flag_or 5, 4; + %jmp/0xz T_9.14, 5; + %pushi/vec4 0, 0, 32; + %assign/vec4 v0x55c406bd4020_0, 0; + %jmp T_9.15; +T_9.14 ; + %load/vec4 v0x55c406bd4020_0; + %addi 1, 0, 32; + %assign/vec4 v0x55c406bd4020_0, 0; +T_9.15 ; + %load/vec4 v0x55c406bd4620_0; + %pushi/vec4 15, 0, 32; + %load/vec4 v0x55c406bd4020_0; + %sub; + %part/s 1; + %assign/vec4 v0x55c406bd3db0_0, 0; +T_9.12 ; +T_9.5 ; +T_9.2 ; + %load/vec4 v0x55c406bd4a10_0; + %load/vec4 v0x55c406bd43c0_0; + %and; + %load/vec4 v0x55c406bd3a20_0; + %inv; + %and; + %flag_set/vec4 8; + %jmp/0xz T_9.16, 8; + %load/vec4 v0x55c406bd3b80_0; + %addi 1, 0, 32; + %assign/vec4 v0x55c406bd3b80_0, 0; + %load/vec4 v0x55c406bd3f50_0; + %pad/u 32; + %load/vec4 v0x55c406bd40c0_0; + %pad/u 4; + %ix/vec4 3; + %ix/load 4, 0, 0; Constant delay + %assign/vec4/a/d v0x55c406bd3ae0, 0, 4; + %pushi/vec4 1, 0, 1; + %assign/vec4 v0x55c406bd3a20_0, 0; + %load/vec4 v0x55c406bd40c0_0; + %pad/u 32; + %cmpi/e 3, 0, 32; + %jmp/0xz T_9.18, 4; + %vpi_call/w 2 128 "$finish" {0 0 0}; +T_9.18 ; + %jmp T_9.17; +T_9.16 ; + %pushi/vec4 0, 0, 1; + %assign/vec4 v0x55c406bd3a20_0, 0; +T_9.17 ; + %load/vec4 v0x55c406bd3e80_0; + %assign/vec4 v0x55c406bd4870_0, 0; + %load/vec4 v0x55c406bd3c40_0; + %assign/vec4 v0x55c406bd47d0_0, 0; + %jmp T_9; + .thread T_9; + .scope S_0x55c406b87500; +T_10 ; + %delay 50000, 0; + %vpi_call/w 2 139 "$finish" {0 0 0}; + %end; + .thread T_10; +# The file index is used to find the file name in the following table. +:file_names 4; + "N/A"; + ""; + "adc_driver_tb.v"; + "../library/adc_driver.v"; diff --git a/rtl/tb/adc_driver_tb.v b/rtl/tb/adc_driver_tb.v new file mode 100644 index 0000000..c6806db --- /dev/null +++ b/rtl/tb/adc_driver_tb.v @@ -0,0 +1,143 @@ +`timescale 10ns/10ns + +module top(); + +reg clk = 0; +reg rstn = 1; +reg adc_so = 1; +wire adc_si; +wire adc_sck; +wire adc_ss; + +reg sck_old = 1; +reg ss_old = 1; + +wire [1:0] channel; +wire [11:0] adc_val; +wire vld; + +reg ack = 0; + +adc_driver dut( + .clk(clk), + .rstn(rstn), + .adc_so(adc_so), + .adc_si(adc_si), + .adc_ss(adc_ss), + .adc_sck(adc_sck), + + .channel(channel), + .adc_val(adc_val), + .vld(vld), + .ack(ack) + ); + +reg configured; + +reg [15:0] out; + +initial begin + clk = 0; + rstn = 1; + adc_so = 1; + sck_old = 1; + + configured = 0; + out = 0; + + $dumpfile("adc_driver_tb.vcd"); + $dumpvars; +end + +always + #2 clk = !clk; + +reg enabled; +integer bit_pos; +integer channel_num; +integer tosend; +integer configdata; +integer adc_pos; + +integer adc_out[3:0]; + +integer i; +initial begin + bit_pos = 0; + channel_num = 0; + tosend = 0; + enabled = 0; + configdata = 0; + adc_pos = 0; + adc_so = 1; + + for (i = 0; i < 4; i++) + adc_out[i] = 0; +end + +always @* begin + case (adc_pos[1:0]) + 2'b00: out = 16'h01ff; + 2'b01: out = 16'h1fff; + 2'b10: out = 16'h2dea; + 2'b11: out = 16'h3caf; + endcase + +end + +always @(posedge clk) begin + if (~adc_ss & ss_old) begin + enabled <= 1; + bit_pos <= 0; + end + if (enabled) begin + if (!configured) begin + // load into configdata if it hasn't + // been configured yet + if (~sck_old & adc_sck) begin + configdata <= (configdata << 1) | adc_si; + if (bit_pos >= 15) begin + configured <= 1; + bit_pos <= 0; + end else + bit_pos <= bit_pos + 1; + end + end else begin + if (~sck_old & adc_sck) begin + // TODO make sure the input is zero + end + if (sck_old & ~adc_sck) begin + // otherwise start loading in adc data + if (bit_pos >= 15) begin + bit_pos <= 0; + end else + bit_pos <= bit_pos + 1; + + adc_so <= out[15-bit_pos]; + end + end + end + + if (vld & configured & ~ack) begin + adc_pos <= adc_pos + 1; + adc_out[channel] <= adc_val; + ack <= 1; + if (channel == 3) begin + // TODO check configdata + // TODO check adc values + $finish; + end + end else + ack <= 0; + + ss_old <= adc_ss; + sck_old <= adc_sck; +end + +initial begin + #50000 + $finish; +end + + +endmodule diff --git a/rtl/tb/adc_driver_tb.vcd b/rtl/tb/adc_driver_tb.vcd new file mode 100644 index 0000000..00cbced --- /dev/null +++ b/rtl/tb/adc_driver_tb.vcd @@ -0,0 +1,8506 @@ +$date + Tue Jan 7 08:44:48 2020 +$end +$version + Icarus Verilog +$end +$timescale + 10ns +$end +$scope module top $end +$var wire 1 ! vld $end +$var wire 2 " channel [1:0] $end +$var wire 12 # adc_val [11:0] $end +$var wire 1 $ adc_ss $end +$var wire 1 % adc_si $end +$var wire 1 & adc_sck $end +$var reg 1 ' ack $end +$var reg 1 ( adc_so $end +$var reg 1 ) clk $end +$var reg 1 * configured $end +$var reg 1 + enabled $end +$var reg 16 , out [15:0] $end +$var reg 1 - rstn $end +$var reg 1 . sck_old $end +$var reg 1 / ss_old $end +$var integer 32 0 adc_pos [31:0] $end +$var integer 32 1 bit_pos [31:0] $end +$var integer 32 2 channel_num [31:0] $end +$var integer 32 3 configdata [31:0] $end +$var integer 32 4 i [31:0] $end +$var integer 32 5 tosend [31:0] $end +$scope module dut $end +$var wire 1 ' ack $end +$var wire 1 & adc_sck $end +$var wire 1 % adc_si $end +$var wire 1 ( adc_so $end +$var wire 1 $ adc_ss $end +$var wire 12 6 adc_val [11:0] $end +$var wire 2 7 channel [1:0] $end +$var wire 1 ) clk $end +$var wire 16 8 config_word [15:0] $end +$var wire 1 - rstn $end +$var wire 1 ! vld $end +$var wire 1 9 strobe $end +$var wire 1 : config_bit $end +$var reg 1 ; adc_sck_ff $end +$var reg 1 < adc_si_ff $end +$var reg 1 = adc_ss_ff $end +$var reg 12 > adc_val_ff [11:0] $end +$var reg 4 ? bit_pos [3:0] $end +$var reg 4 @ bit_pos_next [3:0] $end +$var reg 2 A channel_ff [1:0] $end +$var reg 1 B sck_next $end +$var reg 3 C sck_strobe [2:0] $end +$var reg 1 D si_next $end +$var reg 16 E so_ff [15:0] $end +$var reg 16 F so_ff_next [15:0] $end +$var reg 1 G ss_next $end +$var reg 2 H state [1:0] $end +$var reg 2 I state_next [1:0] $end +$var reg 1 J vld_ff $end +$var reg 1 K write_out $end +$upscope $end +$upscope $end +$enddefinitions $end +#0 +$dumpvars +0K +0J +b0 I +b0 H +1G +b0 F +b0 E +1D +b0 C +1B +b0 A +b0 @ +b0 ? +b0 > +1= +1< +1; +0: +09 +b10000110100100 8 +b0 7 +b0 6 +b0 5 +b100 4 +b0 3 +b0 2 +b0 1 +b0 0 +1/ +1. +1- +b111111111 , +0+ +0* +0) +1( +0' +1& +1% +1$ +b0 # +b0 " +0! +$end +#2 +b1 C +1) +#4 +0) +#6 +b10 C +1) +#8 +0) +#10 +b11 C +1) +#12 +0) +#14 +b100 C +1) +#16 +0) +#18 +b101 C +1) +#20 +0) +#22 +b110 C +1) +#24 +0) +#26 +b1 I +0G +19 +b111 C +1) +#28 +0) +#30 +0G +0$ +0= +b1 H +09 +b0 C +1) +#32 +0) +#34 +b1 C +0/ +1+ +1) +#36 +0) +#38 +b10 C +1) +#40 +0) +#42 +b11 C +1) +#44 +0) +#46 +b100 C +1) +#48 +0) +#50 +b101 C +1) +#52 +0) +#54 +b110 C +1) +#56 +0) +#58 +0D +b1 @ +0B +0G +19 +b111 C +1) +#60 +0) +#62 +0G +0B +0% +0< +0& +0; +b1 ? +09 +b0 C +1) +#64 +0) +#66 +b1 C +0. +1) +#68 +0) +#70 +b10 C +1) +#72 +0) +#74 +b11 C +1) +#76 +0) +#78 +b100 C +1) +#80 +0) +#82 +b101 C +1) +#84 +0) +#86 +b110 C +1) +#88 +0) +#90 +0G +1B +19 +b111 C +1) +#92 +0) +#94 +0G +1& +1; +09 +b0 C +1) +#96 +0) +#98 +b1 C +1. +b1 1 +1) +#100 +0) +#102 +b10 C +1) +#104 +0) +#106 +b11 C +1) +#108 +0) +#110 +b100 C +1) +#112 +0) +#114 +b101 C +1) +#116 +0) +#118 +b110 C +1) +#120 +0) +#122 +b10 @ +0B +0G +19 +b111 C +1) +#124 +0) +#126 +0G +0B +0& +0; +1: +b10 ? +09 +b0 C +1) +#128 +0) +#130 +b1 C +0. +1) +#132 +0) +#134 +b10 C +1) +#136 +0) +#138 +b11 C +1) +#140 +0) +#142 +b100 C +1) +#144 +0) +#146 +b101 C +1) +#148 +0) +#150 +b110 C +1) +#152 +0) +#154 +0G +1B +19 +b111 C +1) +#156 +0) +#158 +0G +1& +1; +09 +b0 C +1) +#160 +0) +#162 +b1 C +1. +b10 1 +1) +#164 +0) +#166 +b10 C +1) +#168 +0) +#170 +b11 C +1) +#172 +0) +#174 +b100 C +1) +#176 +0) +#178 +b101 C +1) +#180 +0) +#182 +b110 C +1) +#184 +0) +#186 +1D +b11 @ +0B +0G +19 +b111 C +1) +#188 +0) +#190 +0G +0B +1% +1< +0& +0; +0: +b11 ? +09 +b0 C +1) +#192 +0) +#194 +b1 C +0. +1) +#196 +0) +#198 +b10 C +1) +#200 +0) +#202 +b11 C +1) +#204 +0) +#206 +b100 C +1) +#208 +0) +#210 +b101 C +1) +#212 +0) +#214 +b110 C +1) +#216 +0) +#218 +0G +1B +19 +b111 C +1) +#220 +0) +#222 +0G +1& +1; +09 +b0 C +1) +#224 +0) +#226 +b1 C +1. +b11 1 +b1 3 +1) +#228 +0) +#230 +b10 C +1) +#232 +0) +#234 +b11 C +1) +#236 +0) +#238 +b100 C +1) +#240 +0) +#242 +b101 C +1) +#244 +0) +#246 +b110 C +1) +#248 +0) +#250 +0D +b100 @ +0B +0G +19 +b111 C +1) +#252 +0) +#254 +0G +0B +0% +0< +0& +0; +b100 ? +09 +b0 C +1) +#256 +0) +#258 +b1 C +0. +1) +#260 +0) +#262 +b10 C +1) +#264 +0) +#266 +b11 C +1) +#268 +0) +#270 +b100 C +1) +#272 +0) +#274 +b101 C +1) +#276 +0) +#278 +b110 C +1) +#280 +0) +#282 +0G +1B +19 +b111 C +1) +#284 +0) +#286 +0G +1& +1; +09 +b0 C +1) +#288 +0) +#290 +b1 C +1. +b100 1 +b10 3 +1) +#292 +0) +#294 +b10 C +1) +#296 +0) +#298 +b11 C +1) +#300 +0) +#302 +b100 C +1) +#304 +0) +#306 +b101 C +1) +#308 +0) +#310 +b110 C +1) +#312 +0) +#314 +b101 @ +0B +0G +19 +b111 C +1) +#316 +0) +#318 +0G +0B +0& +0; +b101 ? +09 +b0 C +1) +#320 +0) +#322 +b1 C +0. +1) +#324 +0) +#326 +b10 C +1) +#328 +0) +#330 +b11 C +1) +#332 +0) +#334 +b100 C +1) +#336 +0) +#338 +b101 C +1) +#340 +0) +#342 +b110 C +1) +#344 +0) +#346 +0G +1B +19 +b111 C +1) +#348 +0) +#350 +0G +1& +1; +09 +b0 C +1) +#352 +0) +#354 +b1 C +1. +b101 1 +b100 3 +1) +#356 +0) +#358 +b10 C +1) +#360 +0) +#362 +b11 C +1) +#364 +0) +#366 +b100 C +1) +#368 +0) +#370 +b101 C +1) +#372 +0) +#374 +b110 C +1) +#376 +0) +#378 +b110 @ +0B +0G +19 +b111 C +1) +#380 +0) +#382 +0G +0B +0& +0; +b110 ? +09 +b0 C +1) +#384 +0) +#386 +b1 C +0. +1) +#388 +0) +#390 +b10 C +1) +#392 +0) +#394 +b11 C +1) +#396 +0) +#398 +b100 C +1) +#400 +0) +#402 +b101 C +1) +#404 +0) +#406 +b110 C +1) +#408 +0) +#410 +0G +1B +19 +b111 C +1) +#412 +0) +#414 +0G +1& +1; +09 +b0 C +1) +#416 +0) +#418 +b1 C +1. +b110 1 +b1000 3 +1) +#420 +0) +#422 +b10 C +1) +#424 +0) +#426 +b11 C +1) +#428 +0) +#430 +b100 C +1) +#432 +0) +#434 +b101 C +1) +#436 +0) +#438 +b110 C +1) +#440 +0) +#442 +b111 @ +0B +0G +19 +b111 C +1) +#444 +0) +#446 +0G +0B +0& +0; +1: +b111 ? +09 +b0 C +1) +#448 +0) +#450 +b1 C +0. +1) +#452 +0) +#454 +b10 C +1) +#456 +0) +#458 +b11 C +1) +#460 +0) +#462 +b100 C +1) +#464 +0) +#466 +b101 C +1) +#468 +0) +#470 +b110 C +1) +#472 +0) +#474 +0G +1B +19 +b111 C +1) +#476 +0) +#478 +0G +1& +1; +09 +b0 C +1) +#480 +0) +#482 +b1 C +1. +b111 1 +b10000 3 +1) +#484 +0) +#486 +b10 C +1) +#488 +0) +#490 +b11 C +1) +#492 +0) +#494 +b100 C +1) +#496 +0) +#498 +b101 C +1) +#500 +0) +#502 +b110 C +1) +#504 +0) +#506 +1D +b1000 @ +0B +0G +19 +b111 C +1) +#508 +0) +#510 +0G +0B +1% +1< +0& +0; +b1000 ? +09 +b0 C +1) +#512 +0) +#514 +b1 C +0. +1) +#516 +0) +#518 +b10 C +1) +#520 +0) +#522 +b11 C +1) +#524 +0) +#526 +b100 C +1) +#528 +0) +#530 +b101 C +1) +#532 +0) +#534 +b110 C +1) +#536 +0) +#538 +0G +1B +19 +b111 C +1) +#540 +0) +#542 +0G +1& +1; +09 +b0 C +1) +#544 +0) +#546 +b1 C +1. +b1000 1 +b100001 3 +1) +#548 +0) +#550 +b10 C +1) +#552 +0) +#554 +b11 C +1) +#556 +0) +#558 +b100 C +1) +#560 +0) +#562 +b101 C +1) +#564 +0) +#566 +b110 C +1) +#568 +0) +#570 +b1001 @ +0B +0G +19 +b111 C +1) +#572 +0) +#574 +0G +0B +0& +0; +0: +b1001 ? +09 +b0 C +1) +#576 +0) +#578 +b1 C +0. +1) +#580 +0) +#582 +b10 C +1) +#584 +0) +#586 +b11 C +1) +#588 +0) +#590 +b100 C +1) +#592 +0) +#594 +b101 C +1) +#596 +0) +#598 +b110 C +1) +#600 +0) +#602 +0G +1B +19 +b111 C +1) +#604 +0) +#606 +0G +1& +1; +09 +b0 C +1) +#608 +0) +#610 +b1 C +1. +b1001 1 +b1000011 3 +1) +#612 +0) +#614 +b10 C +1) +#616 +0) +#618 +b11 C +1) +#620 +0) +#622 +b100 C +1) +#624 +0) +#626 +b101 C +1) +#628 +0) +#630 +b110 C +1) +#632 +0) +#634 +0D +b1010 @ +0B +0G +19 +b111 C +1) +#636 +0) +#638 +0G +0B +0% +0< +0& +0; +1: +b1010 ? +09 +b0 C +1) +#640 +0) +#642 +b1 C +0. +1) +#644 +0) +#646 +b10 C +1) +#648 +0) +#650 +b11 C +1) +#652 +0) +#654 +b100 C +1) +#656 +0) +#658 +b101 C +1) +#660 +0) +#662 +b110 C +1) +#664 +0) +#666 +0G +1B +19 +b111 C +1) +#668 +0) +#670 +0G +1& +1; +09 +b0 C +1) +#672 +0) +#674 +b1 C +1. +b1010 1 +b10000110 3 +1) +#676 +0) +#678 +b10 C +1) +#680 +0) +#682 +b11 C +1) +#684 +0) +#686 +b100 C +1) +#688 +0) +#690 +b101 C +1) +#692 +0) +#694 +b110 C +1) +#696 +0) +#698 +1D +b1011 @ +0B +0G +19 +b111 C +1) +#700 +0) +#702 +0G +0B +1% +1< +0& +0; +0: +b1011 ? +09 +b0 C +1) +#704 +0) +#706 +b1 C +0. +1) +#708 +0) +#710 +b10 C +1) +#712 +0) +#714 +b11 C +1) +#716 +0) +#718 +b100 C +1) +#720 +0) +#722 +b101 C +1) +#724 +0) +#726 +b110 C +1) +#728 +0) +#730 +0G +1B +19 +b111 C +1) +#732 +0) +#734 +0G +1& +1; +09 +b0 C +1) +#736 +0) +#738 +b1 C +1. +b1011 1 +b100001101 3 +1) +#740 +0) +#742 +b10 C +1) +#744 +0) +#746 +b11 C +1) +#748 +0) +#750 +b100 C +1) +#752 +0) +#754 +b101 C +1) +#756 +0) +#758 +b110 C +1) +#760 +0) +#762 +0D +b1100 @ +0B +0G +19 +b111 C +1) +#764 +0) +#766 +0G +0B +0% +0< +0& +0; +b1100 ? +09 +b0 C +1) +#768 +0) +#770 +b1 C +0. +1) +#772 +0) +#774 +b10 C +1) +#776 +0) +#778 +b11 C +1) +#780 +0) +#782 +b100 C +1) +#784 +0) +#786 +b101 C +1) +#788 +0) +#790 +b110 C +1) +#792 +0) +#794 +0G +1B +19 +b111 C +1) +#796 +0) +#798 +0G +1& +1; +09 +b0 C +1) +#800 +0) +#802 +b1 C +1. +b1100 1 +b1000011010 3 +1) +#804 +0) +#806 +b10 C +1) +#808 +0) +#810 +b11 C +1) +#812 +0) +#814 +b100 C +1) +#816 +0) +#818 +b101 C +1) +#820 +0) +#822 +b110 C +1) +#824 +0) +#826 +b1101 @ +0B +0G +19 +b111 C +1) +#828 +0) +#830 +0G +0B +0& +0; +1: +b1101 ? +09 +b0 C +1) +#832 +0) +#834 +b1 C +0. +1) +#836 +0) +#838 +b10 C +1) +#840 +0) +#842 +b11 C +1) +#844 +0) +#846 +b100 C +1) +#848 +0) +#850 +b101 C +1) +#852 +0) +#854 +b110 C +1) +#856 +0) +#858 +0G +1B +19 +b111 C +1) +#860 +0) +#862 +0G +1& +1; +09 +b0 C +1) +#864 +0) +#866 +b1 C +1. +b1101 1 +b10000110100 3 +1) +#868 +0) +#870 +b10 C +1) +#872 +0) +#874 +b11 C +1) +#876 +0) +#878 +b100 C +1) +#880 +0) +#882 +b101 C +1) +#884 +0) +#886 +b110 C +1) +#888 +0) +#890 +1D +b1110 @ +0B +0G +19 +b111 C +1) +#892 +0) +#894 +0G +0B +1% +1< +0& +0; +0: +b1110 ? +09 +b0 C +1) +#896 +0) +#898 +b1 C +0. +1) +#900 +0) +#902 +b10 C +1) +#904 +0) +#906 +b11 C +1) +#908 +0) +#910 +b100 C +1) +#912 +0) +#914 +b101 C +1) +#916 +0) +#918 +b110 C +1) +#920 +0) +#922 +0G +1B +19 +b111 C +1) +#924 +0) +#926 +0G +1& +1; +09 +b0 C +1) +#928 +0) +#930 +b1 C +1. +b1110 1 +b100001101001 3 +1) +#932 +0) +#934 +b10 C +1) +#936 +0) +#938 +b11 C +1) +#940 +0) +#942 +b100 C +1) +#944 +0) +#946 +b101 C +1) +#948 +0) +#950 +b110 C +1) +#952 +0) +#954 +0D +b1111 @ +0B +0G +19 +b111 C +1) +#956 +0) +#958 +0G +0B +0% +0< +0& +0; +b1111 ? +09 +b0 C +1) +#960 +0) +#962 +b1 C +0. +1) +#964 +0) +#966 +b10 C +1) +#968 +0) +#970 +b11 C +1) +#972 +0) +#974 +b100 C +1) +#976 +0) +#978 +b101 C +1) +#980 +0) +#982 +b110 C +1) +#984 +0) +#986 +0G +1B +19 +b111 C +1) +#988 +0) +#990 +0G +1& +1; +09 +b0 C +1) +#992 +0) +#994 +b1 C +1. +b1111 1 +b1000011010010 3 +1) +#996 +0) +#998 +b10 C +1) +#1000 +0) +#1002 +b11 C +1) +#1004 +0) +#1006 +b100 C +1) +#1008 +0) +#1010 +b101 C +1) +#1012 +0) +#1014 +b110 C +1) +#1016 +0) +#1018 +b0 @ +0B +1G +19 +b111 C +1) +#1020 +0) +#1022 +0B +1$ +1= +0& +0; +b0 ? +09 +b0 C +1) +#1024 +0) +#1026 +b1 C +0. +1/ +1) +#1028 +0) +#1030 +b10 C +1) +#1032 +0) +#1034 +b11 C +1) +#1036 +0) +#1038 +b100 C +1) +#1040 +0) +#1042 +b101 C +1) +#1044 +0) +#1046 +b110 C +1) +#1048 +0) +#1050 +b10 I +0G +1B +19 +b111 C +1) +#1052 +0) +#1054 +0G +0$ +0= +1& +1; +b10 H +09 +b0 C +1) +#1056 +0) +#1058 +b1 C +1. +0/ +1* +b10000110100100 3 +b0 1 +1) +#1060 +0) +#1062 +b10 C +1) +#1064 +0) +#1066 +b11 C +1) +#1068 +0) +#1070 +b100 C +1) +#1072 +0) +#1074 +b101 C +1) +#1076 +0) +#1078 +b110 C +1) +#1080 +0) +#1082 +0B +0G +19 +b111 C +1) +#1084 +0) +#1086 +0G +0B +0& +0; +09 +b0 C +1) +#1088 +0) +#1090 +0G +0B +b1 C +0. +0( +b1 1 +1) +#1092 +0) +#1094 +b10 C +1) +#1096 +0) +#1098 +b11 C +1) +#1100 +0) +#1102 +b100 C +1) +#1104 +0) +#1106 +b101 C +1) +#1108 +0) +#1110 +b110 C +1) +#1112 +0) +#1114 +b1 @ +0G +1B +19 +b111 C +1) +#1116 +0) +#1118 +0G +1& +1; +b1 ? +09 +b0 C +1) +#1120 +0) +#1122 +b1 C +1. +1) +#1124 +0) +#1126 +b10 C +1) +#1128 +0) +#1130 +b11 C +1) +#1132 +0) +#1134 +b100 C +1) +#1136 +0) +#1138 +b101 C +1) +#1140 +0) +#1142 +b110 C +1) +#1144 +0) +#1146 +0B +0G +19 +b111 C +1) +#1148 +0) +#1150 +0G +0B +0& +0; +09 +b0 C +1) +#1152 +0) +#1154 +b1 C +0. +b10 1 +1) +#1156 +0) +#1158 +b10 C +1) +#1160 +0) +#1162 +b11 C +1) +#1164 +0) +#1166 +b100 C +1) +#1168 +0) +#1170 +b101 C +1) +#1172 +0) +#1174 +b110 C +1) +#1176 +0) +#1178 +b10 @ +0G +1B +19 +b111 C +1) +#1180 +0) +#1182 +0G +1& +1; +1: +b10 ? +09 +b0 C +1) +#1184 +0) +#1186 +b1 C +1. +1) +#1188 +0) +#1190 +b10 C +1) +#1192 +0) +#1194 +b11 C +1) +#1196 +0) +#1198 +b100 C +1) +#1200 +0) +#1202 +b101 C +1) +#1204 +0) +#1206 +b110 C +1) +#1208 +0) +#1210 +0B +0G +19 +b111 C +1) +#1212 +0) +#1214 +0G +0B +0& +0; +09 +b0 C +1) +#1216 +0) +#1218 +b1 C +0. +b11 1 +1) +#1220 +0) +#1222 +b10 C +1) +#1224 +0) +#1226 +b11 C +1) +#1228 +0) +#1230 +b100 C +1) +#1232 +0) +#1234 +b101 C +1) +#1236 +0) +#1238 +b110 C +1) +#1240 +0) +#1242 +b11 @ +0G +1B +19 +b111 C +1) +#1244 +0) +#1246 +0G +1& +1; +0: +b11 ? +09 +b0 C +1) +#1248 +0) +#1250 +b1 C +1. +1) +#1252 +0) +#1254 +b10 C +1) +#1256 +0) +#1258 +b11 C +1) +#1260 +0) +#1262 +b100 C +1) +#1264 +0) +#1266 +b101 C +1) +#1268 +0) +#1270 +b110 C +1) +#1272 +0) +#1274 +0B +0G +19 +b111 C +1) +#1276 +0) +#1278 +0G +0B +0& +0; +09 +b0 C +1) +#1280 +0) +#1282 +b1 C +0. +b100 1 +1) +#1284 +0) +#1286 +b10 C +1) +#1288 +0) +#1290 +b11 C +1) +#1292 +0) +#1294 +b100 C +1) +#1296 +0) +#1298 +b101 C +1) +#1300 +0) +#1302 +b110 C +1) +#1304 +0) +#1306 +b100 @ +0G +1B +19 +b111 C +1) +#1308 +0) +#1310 +0G +1& +1; +b100 ? +09 +b0 C +1) +#1312 +0) +#1314 +b1 C +1. +1) +#1316 +0) +#1318 +b10 C +1) +#1320 +0) +#1322 +b11 C +1) +#1324 +0) +#1326 +b100 C +1) +#1328 +0) +#1330 +b101 C +1) +#1332 +0) +#1334 +b110 C +1) +#1336 +0) +#1338 +0B +0G +19 +b111 C +1) +#1340 +0) +#1342 +0G +0B +0& +0; +09 +b0 C +1) +#1344 +0) +#1346 +b1 C +0. +b101 1 +1) +#1348 +0) +#1350 +b10 C +1) +#1352 +0) +#1354 +b11 C +1) +#1356 +0) +#1358 +b100 C +1) +#1360 +0) +#1362 +b101 C +1) +#1364 +0) +#1366 +b110 C +1) +#1368 +0) +#1370 +b101 @ +0G +1B +19 +b111 C +1) +#1372 +0) +#1374 +0G +1& +1; +b101 ? +09 +b0 C +1) +#1376 +0) +#1378 +b1 C +1. +1) +#1380 +0) +#1382 +b10 C +1) +#1384 +0) +#1386 +b11 C +1) +#1388 +0) +#1390 +b100 C +1) +#1392 +0) +#1394 +b101 C +1) +#1396 +0) +#1398 +b110 C +1) +#1400 +0) +#1402 +0B +0G +19 +b111 C +1) +#1404 +0) +#1406 +0G +0B +0& +0; +09 +b0 C +1) +#1408 +0) +#1410 +b1 C +0. +b110 1 +1) +#1412 +0) +#1414 +b10 C +1) +#1416 +0) +#1418 +b11 C +1) +#1420 +0) +#1422 +b100 C +1) +#1424 +0) +#1426 +b101 C +1) +#1428 +0) +#1430 +b110 C +1) +#1432 +0) +#1434 +b110 @ +0G +1B +19 +b111 C +1) +#1436 +0) +#1438 +0G +1& +1; +b110 ? +09 +b0 C +1) +#1440 +0) +#1442 +b1 C +1. +1) +#1444 +0) +#1446 +b10 C +1) +#1448 +0) +#1450 +b11 C +1) +#1452 +0) +#1454 +b100 C +1) +#1456 +0) +#1458 +b101 C +1) +#1460 +0) +#1462 +b110 C +1) +#1464 +0) +#1466 +0B +0G +19 +b111 C +1) +#1468 +0) +#1470 +0G +0B +0& +0; +09 +b0 C +1) +#1472 +0) +#1474 +b1 C +0. +b111 1 +1) +#1476 +0) +#1478 +b10 C +1) +#1480 +0) +#1482 +b11 C +1) +#1484 +0) +#1486 +b100 C +1) +#1488 +0) +#1490 +b101 C +1) +#1492 +0) +#1494 +b110 C +1) +#1496 +0) +#1498 +b111 @ +0G +1B +19 +b111 C +1) +#1500 +0) +#1502 +0G +1& +1; +1: +b111 ? +09 +b0 C +1) +#1504 +0) +#1506 +b1 C +1. +1) +#1508 +0) +#1510 +b10 C +1) +#1512 +0) +#1514 +b11 C +1) +#1516 +0) +#1518 +b100 C +1) +#1520 +0) +#1522 +b101 C +1) +#1524 +0) +#1526 +b110 C +1) +#1528 +0) +#1530 +0B +0G +19 +b111 C +1) +#1532 +0) +#1534 +0G +0B +0& +0; +09 +b0 C +1) +#1536 +0) +#1538 +0G +0B +b1 C +0. +1( +b1000 1 +1) +#1540 +0) +#1542 +b10 C +1) +#1544 +0) +#1546 +b11 C +1) +#1548 +0) +#1550 +b100 C +1) +#1552 +0) +#1554 +b101 C +1) +#1556 +0) +#1558 +b110 C +1) +#1560 +0) +#1562 +b1 F +b1000 @ +0G +1B +19 +b111 C +1) +#1564 +0) +#1566 +0G +b1 E +1& +1; +b1000 ? +09 +b0 C +1) +#1568 +0) +#1570 +b1 C +1. +1) +#1572 +0) +#1574 +b10 C +1) +#1576 +0) +#1578 +b11 C +1) +#1580 +0) +#1582 +b100 C +1) +#1584 +0) +#1586 +b101 C +1) +#1588 +0) +#1590 +b110 C +1) +#1592 +0) +#1594 +0B +0G +19 +b111 C +1) +#1596 +0) +#1598 +0G +0B +0& +0; +09 +b0 C +1) +#1600 +0) +#1602 +b1 C +0. +b1001 1 +1) +#1604 +0) +#1606 +b10 C +1) +#1608 +0) +#1610 +b11 C +1) +#1612 +0) +#1614 +b100 C +1) +#1616 +0) +#1618 +b101 C +1) +#1620 +0) +#1622 +b110 C +1) +#1624 +0) +#1626 +b11 F +b1001 @ +0G +1B +19 +b111 C +1) +#1628 +0) +#1630 +0G +b11 E +1& +1; +0: +b1001 ? +09 +b0 C +1) +#1632 +0) +#1634 +b1 C +1. +1) +#1636 +0) +#1638 +b10 C +1) +#1640 +0) +#1642 +b11 C +1) +#1644 +0) +#1646 +b100 C +1) +#1648 +0) +#1650 +b101 C +1) +#1652 +0) +#1654 +b110 C +1) +#1656 +0) +#1658 +0B +0G +19 +b111 C +1) +#1660 +0) +#1662 +0G +0B +0& +0; +09 +b0 C +1) +#1664 +0) +#1666 +b1 C +0. +b1010 1 +1) +#1668 +0) +#1670 +b10 C +1) +#1672 +0) +#1674 +b11 C +1) +#1676 +0) +#1678 +b100 C +1) +#1680 +0) +#1682 +b101 C +1) +#1684 +0) +#1686 +b110 C +1) +#1688 +0) +#1690 +b111 F +b1010 @ +0G +1B +19 +b111 C +1) +#1692 +0) +#1694 +0G +b111 E +1& +1; +1: +b1010 ? +09 +b0 C +1) +#1696 +0) +#1698 +b1 C +1. +1) +#1700 +0) +#1702 +b10 C +1) +#1704 +0) +#1706 +b11 C +1) +#1708 +0) +#1710 +b100 C +1) +#1712 +0) +#1714 +b101 C +1) +#1716 +0) +#1718 +b110 C +1) +#1720 +0) +#1722 +0B +0G +19 +b111 C +1) +#1724 +0) +#1726 +0G +0B +0& +0; +09 +b0 C +1) +#1728 +0) +#1730 +b1 C +0. +b1011 1 +1) +#1732 +0) +#1734 +b10 C +1) +#1736 +0) +#1738 +b11 C +1) +#1740 +0) +#1742 +b100 C +1) +#1744 +0) +#1746 +b101 C +1) +#1748 +0) +#1750 +b110 C +1) +#1752 +0) +#1754 +b1111 F +b1011 @ +0G +1B +19 +b111 C +1) +#1756 +0) +#1758 +0G +b1111 E +1& +1; +0: +b1011 ? +09 +b0 C +1) +#1760 +0) +#1762 +b1 C +1. +1) +#1764 +0) +#1766 +b10 C +1) +#1768 +0) +#1770 +b11 C +1) +#1772 +0) +#1774 +b100 C +1) +#1776 +0) +#1778 +b101 C +1) +#1780 +0) +#1782 +b110 C +1) +#1784 +0) +#1786 +0B +0G +19 +b111 C +1) +#1788 +0) +#1790 +0G +0B +0& +0; +09 +b0 C +1) +#1792 +0) +#1794 +b1 C +0. +b1100 1 +1) +#1796 +0) +#1798 +b10 C +1) +#1800 +0) +#1802 +b11 C +1) +#1804 +0) +#1806 +b100 C +1) +#1808 +0) +#1810 +b101 C +1) +#1812 +0) +#1814 +b110 C +1) +#1816 +0) +#1818 +b11111 F +b1100 @ +0G +1B +19 +b111 C +1) +#1820 +0) +#1822 +0G +b11111 E +1& +1; +b1100 ? +09 +b0 C +1) +#1824 +0) +#1826 +b1 C +1. +1) +#1828 +0) +#1830 +b10 C +1) +#1832 +0) +#1834 +b11 C +1) +#1836 +0) +#1838 +b100 C +1) +#1840 +0) +#1842 +b101 C +1) +#1844 +0) +#1846 +b110 C +1) +#1848 +0) +#1850 +0B +0G +19 +b111 C +1) +#1852 +0) +#1854 +0G +0B +0& +0; +09 +b0 C +1) +#1856 +0) +#1858 +b1 C +0. +b1101 1 +1) +#1860 +0) +#1862 +b10 C +1) +#1864 +0) +#1866 +b11 C +1) +#1868 +0) +#1870 +b100 C +1) +#1872 +0) +#1874 +b101 C +1) +#1876 +0) +#1878 +b110 C +1) +#1880 +0) +#1882 +b111111 F +b1101 @ +0G +1B +19 +b111 C +1) +#1884 +0) +#1886 +0G +b111111 E +1& +1; +1: +b1101 ? +09 +b0 C +1) +#1888 +0) +#1890 +b1 C +1. +1) +#1892 +0) +#1894 +b10 C +1) +#1896 +0) +#1898 +b11 C +1) +#1900 +0) +#1902 +b100 C +1) +#1904 +0) +#1906 +b101 C +1) +#1908 +0) +#1910 +b110 C +1) +#1912 +0) +#1914 +0B +0G +19 +b111 C +1) +#1916 +0) +#1918 +0G +0B +0& +0; +09 +b0 C +1) +#1920 +0) +#1922 +b1 C +0. +b1110 1 +1) +#1924 +0) +#1926 +b10 C +1) +#1928 +0) +#1930 +b11 C +1) +#1932 +0) +#1934 +b100 C +1) +#1936 +0) +#1938 +b101 C +1) +#1940 +0) +#1942 +b110 C +1) +#1944 +0) +#1946 +b1111111 F +b1110 @ +0G +1B +19 +b111 C +1) +#1948 +0) +#1950 +0G +b1111111 E +1& +1; +0: +b1110 ? +09 +b0 C +1) +#1952 +0) +#1954 +b1 C +1. +1) +#1956 +0) +#1958 +b10 C +1) +#1960 +0) +#1962 +b11 C +1) +#1964 +0) +#1966 +b100 C +1) +#1968 +0) +#1970 +b101 C +1) +#1972 +0) +#1974 +b110 C +1) +#1976 +0) +#1978 +0B +0G +19 +b111 C +1) +#1980 +0) +#1982 +0G +0B +0& +0; +09 +b0 C +1) +#1984 +0) +#1986 +b1 C +0. +b1111 1 +1) +#1988 +0) +#1990 +b10 C +1) +#1992 +0) +#1994 +b11 C +1) +#1996 +0) +#1998 +b100 C +1) +#2000 +0) +#2002 +b101 C +1) +#2004 +0) +#2006 +b110 C +1) +#2008 +0) +#2010 +b11111111 F +b1111 @ +0G +1B +19 +b111 C +1) +#2012 +0) +#2014 +0G +b11111111 E +1& +1; +b1111 ? +09 +b0 C +1) +#2016 +0) +#2018 +b1 C +1. +1) +#2020 +0) +#2022 +b10 C +1) +#2024 +0) +#2026 +b11 C +1) +#2028 +0) +#2030 +b100 C +1) +#2032 +0) +#2034 +b101 C +1) +#2036 +0) +#2038 +b110 C +1) +#2040 +0) +#2042 +0B +0G +19 +b111 C +1) +#2044 +0) +#2046 +0G +0B +0& +0; +09 +b0 C +1) +#2048 +0) +#2050 +b1 C +0. +b0 1 +1) +#2052 +0) +#2054 +b10 C +1) +#2056 +0) +#2058 +b11 C +1) +#2060 +0) +#2062 +b100 C +1) +#2064 +0) +#2066 +b101 C +1) +#2068 +0) +#2070 +b110 C +1) +#2072 +0) +#2074 +1K +b111111111 F +b0 @ +1G +1B +19 +b111 C +1) +#2076 +0) +#2078 +0K +1! +1J +b111111111 # +b111111111 6 +b111111111 > +b111111111 E +1$ +1= +1& +1; +b0 ? +09 +b0 C +1) +#2080 +0) +#2082 +b1111111111111 , +b1 C +1. +1/ +1' +b1 0 +1) +#2084 +0) +#2086 +0' +0! +0J +b10 C +1) +#2088 +0) +#2090 +b11 C +1) +#2092 +0) +#2094 +b100 C +1) +#2096 +0) +#2098 +b101 C +1) +#2100 +0) +#2102 +b110 C +1) +#2104 +0) +#2106 +0B +0G +19 +b111 C +1) +#2108 +0) +#2110 +0G +0B +0$ +0= +0& +0; +09 +b0 C +1) +#2112 +0) +#2114 +0G +0B +b1 C +0. +0/ +0( +b1 1 +1) +#2116 +0) +#2118 +b10 C +1) +#2120 +0) +#2122 +b11 C +1) +#2124 +0) +#2126 +b100 C +1) +#2128 +0) +#2130 +b101 C +1) +#2132 +0) +#2134 +b110 C +1) +#2136 +0) +#2138 +b1111111110 F +b1 @ +0G +1B +19 +b111 C +1) +#2140 +0) +#2142 +0G +b1111111110 E +1& +1; +b1 ? +09 +b0 C +1) +#2144 +0) +#2146 +b1 C +1. +1) +#2148 +0) +#2150 +b10 C +1) +#2152 +0) +#2154 +b11 C +1) +#2156 +0) +#2158 +b100 C +1) +#2160 +0) +#2162 +b101 C +1) +#2164 +0) +#2166 +b110 C +1) +#2168 +0) +#2170 +0B +0G +19 +b111 C +1) +#2172 +0) +#2174 +0G +0B +0& +0; +09 +b0 C +1) +#2176 +0) +#2178 +b1 C +0. +b10 1 +1) +#2180 +0) +#2182 +b10 C +1) +#2184 +0) +#2186 +b11 C +1) +#2188 +0) +#2190 +b100 C +1) +#2192 +0) +#2194 +b101 C +1) +#2196 +0) +#2198 +b110 C +1) +#2200 +0) +#2202 +b11111111100 F +b10 @ +0G +1B +19 +b111 C +1) +#2204 +0) +#2206 +0G +b11111111100 E +1& +1; +1: +b10 ? +09 +b0 C +1) +#2208 +0) +#2210 +b1 C +1. +1) +#2212 +0) +#2214 +b10 C +1) +#2216 +0) +#2218 +b11 C +1) +#2220 +0) +#2222 +b100 C +1) +#2224 +0) +#2226 +b101 C +1) +#2228 +0) +#2230 +b110 C +1) +#2232 +0) +#2234 +0B +0G +19 +b111 C +1) +#2236 +0) +#2238 +0G +0B +0& +0; +09 +b0 C +1) +#2240 +0) +#2242 +b1 C +0. +b11 1 +1) +#2244 +0) +#2246 +b10 C +1) +#2248 +0) +#2250 +b11 C +1) +#2252 +0) +#2254 +b100 C +1) +#2256 +0) +#2258 +b101 C +1) +#2260 +0) +#2262 +b110 C +1) +#2264 +0) +#2266 +b111111111000 F +b11 @ +0G +1B +19 +b111 C +1) +#2268 +0) +#2270 +0G +b111111111000 E +1& +1; +0: +b11 ? +09 +b0 C +1) +#2272 +0) +#2274 +b1 C +1. +1) +#2276 +0) +#2278 +b10 C +1) +#2280 +0) +#2282 +b11 C +1) +#2284 +0) +#2286 +b100 C +1) +#2288 +0) +#2290 +b101 C +1) +#2292 +0) +#2294 +b110 C +1) +#2296 +0) +#2298 +0B +0G +19 +b111 C +1) +#2300 +0) +#2302 +0G +0B +0& +0; +09 +b0 C +1) +#2304 +0) +#2306 +0G +0B +b1 C +0. +1( +b100 1 +1) +#2308 +0) +#2310 +b10 C +1) +#2312 +0) +#2314 +b11 C +1) +#2316 +0) +#2318 +b100 C +1) +#2320 +0) +#2322 +b101 C +1) +#2324 +0) +#2326 +b110 C +1) +#2328 +0) +#2330 +b1111111110001 F +b100 @ +0G +1B +19 +b111 C +1) +#2332 +0) +#2334 +0G +b1111111110001 E +1& +1; +b100 ? +09 +b0 C +1) +#2336 +0) +#2338 +b1 C +1. +1) +#2340 +0) +#2342 +b10 C +1) +#2344 +0) +#2346 +b11 C +1) +#2348 +0) +#2350 +b100 C +1) +#2352 +0) +#2354 +b101 C +1) +#2356 +0) +#2358 +b110 C +1) +#2360 +0) +#2362 +0B +0G +19 +b111 C +1) +#2364 +0) +#2366 +0G +0B +0& +0; +09 +b0 C +1) +#2368 +0) +#2370 +b1 C +0. +b101 1 +1) +#2372 +0) +#2374 +b10 C +1) +#2376 +0) +#2378 +b11 C +1) +#2380 +0) +#2382 +b100 C +1) +#2384 +0) +#2386 +b101 C +1) +#2388 +0) +#2390 +b110 C +1) +#2392 +0) +#2394 +b11111111100011 F +b101 @ +0G +1B +19 +b111 C +1) +#2396 +0) +#2398 +0G +b11111111100011 E +1& +1; +b101 ? +09 +b0 C +1) +#2400 +0) +#2402 +b1 C +1. +1) +#2404 +0) +#2406 +b10 C +1) +#2408 +0) +#2410 +b11 C +1) +#2412 +0) +#2414 +b100 C +1) +#2416 +0) +#2418 +b101 C +1) +#2420 +0) +#2422 +b110 C +1) +#2424 +0) +#2426 +0B +0G +19 +b111 C +1) +#2428 +0) +#2430 +0G +0B +0& +0; +09 +b0 C +1) +#2432 +0) +#2434 +b1 C +0. +b110 1 +1) +#2436 +0) +#2438 +b10 C +1) +#2440 +0) +#2442 +b11 C +1) +#2444 +0) +#2446 +b100 C +1) +#2448 +0) +#2450 +b101 C +1) +#2452 +0) +#2454 +b110 C +1) +#2456 +0) +#2458 +b111111111000111 F +b110 @ +0G +1B +19 +b111 C +1) +#2460 +0) +#2462 +0G +b111111111000111 E +1& +1; +b110 ? +09 +b0 C +1) +#2464 +0) +#2466 +b1 C +1. +1) +#2468 +0) +#2470 +b10 C +1) +#2472 +0) +#2474 +b11 C +1) +#2476 +0) +#2478 +b100 C +1) +#2480 +0) +#2482 +b101 C +1) +#2484 +0) +#2486 +b110 C +1) +#2488 +0) +#2490 +0B +0G +19 +b111 C +1) +#2492 +0) +#2494 +0G +0B +0& +0; +09 +b0 C +1) +#2496 +0) +#2498 +b1 C +0. +b111 1 +1) +#2500 +0) +#2502 +b10 C +1) +#2504 +0) +#2506 +b11 C +1) +#2508 +0) +#2510 +b100 C +1) +#2512 +0) +#2514 +b101 C +1) +#2516 +0) +#2518 +b110 C +1) +#2520 +0) +#2522 +b1111111110001111 F +b111 @ +0G +1B +19 +b111 C +1) +#2524 +0) +#2526 +0G +b1111111110001111 E +1& +1; +1: +b111 ? +09 +b0 C +1) +#2528 +0) +#2530 +b1 C +1. +1) +#2532 +0) +#2534 +b10 C +1) +#2536 +0) +#2538 +b11 C +1) +#2540 +0) +#2542 +b100 C +1) +#2544 +0) +#2546 +b101 C +1) +#2548 +0) +#2550 +b110 C +1) +#2552 +0) +#2554 +0B +0G +19 +b111 C +1) +#2556 +0) +#2558 +0G +0B +0& +0; +09 +b0 C +1) +#2560 +0) +#2562 +b1 C +0. +b1000 1 +1) +#2564 +0) +#2566 +b10 C +1) +#2568 +0) +#2570 +b11 C +1) +#2572 +0) +#2574 +b100 C +1) +#2576 +0) +#2578 +b101 C +1) +#2580 +0) +#2582 +b110 C +1) +#2584 +0) +#2586 +b1111111100011111 F +b1000 @ +0G +1B +19 +b111 C +1) +#2588 +0) +#2590 +0G +b1111111100011111 E +1& +1; +b1000 ? +09 +b0 C +1) +#2592 +0) +#2594 +b1 C +1. +1) +#2596 +0) +#2598 +b10 C +1) +#2600 +0) +#2602 +b11 C +1) +#2604 +0) +#2606 +b100 C +1) +#2608 +0) +#2610 +b101 C +1) +#2612 +0) +#2614 +b110 C +1) +#2616 +0) +#2618 +0B +0G +19 +b111 C +1) +#2620 +0) +#2622 +0G +0B +0& +0; +09 +b0 C +1) +#2624 +0) +#2626 +b1 C +0. +b1001 1 +1) +#2628 +0) +#2630 +b10 C +1) +#2632 +0) +#2634 +b11 C +1) +#2636 +0) +#2638 +b100 C +1) +#2640 +0) +#2642 +b101 C +1) +#2644 +0) +#2646 +b110 C +1) +#2648 +0) +#2650 +b1111111000111111 F +b1001 @ +0G +1B +19 +b111 C +1) +#2652 +0) +#2654 +0G +b1111111000111111 E +1& +1; +0: +b1001 ? +09 +b0 C +1) +#2656 +0) +#2658 +b1 C +1. +1) +#2660 +0) +#2662 +b10 C +1) +#2664 +0) +#2666 +b11 C +1) +#2668 +0) +#2670 +b100 C +1) +#2672 +0) +#2674 +b101 C +1) +#2676 +0) +#2678 +b110 C +1) +#2680 +0) +#2682 +0B +0G +19 +b111 C +1) +#2684 +0) +#2686 +0G +0B +0& +0; +09 +b0 C +1) +#2688 +0) +#2690 +b1 C +0. +b1010 1 +1) +#2692 +0) +#2694 +b10 C +1) +#2696 +0) +#2698 +b11 C +1) +#2700 +0) +#2702 +b100 C +1) +#2704 +0) +#2706 +b101 C +1) +#2708 +0) +#2710 +b110 C +1) +#2712 +0) +#2714 +b1111110001111111 F +b1010 @ +0G +1B +19 +b111 C +1) +#2716 +0) +#2718 +0G +b1111110001111111 E +1& +1; +1: +b1010 ? +09 +b0 C +1) +#2720 +0) +#2722 +b1 C +1. +1) +#2724 +0) +#2726 +b10 C +1) +#2728 +0) +#2730 +b11 C +1) +#2732 +0) +#2734 +b100 C +1) +#2736 +0) +#2738 +b101 C +1) +#2740 +0) +#2742 +b110 C +1) +#2744 +0) +#2746 +0B +0G +19 +b111 C +1) +#2748 +0) +#2750 +0G +0B +0& +0; +09 +b0 C +1) +#2752 +0) +#2754 +b1 C +0. +b1011 1 +1) +#2756 +0) +#2758 +b10 C +1) +#2760 +0) +#2762 +b11 C +1) +#2764 +0) +#2766 +b100 C +1) +#2768 +0) +#2770 +b101 C +1) +#2772 +0) +#2774 +b110 C +1) +#2776 +0) +#2778 +b1111100011111111 F +b1011 @ +0G +1B +19 +b111 C +1) +#2780 +0) +#2782 +0G +b1111100011111111 E +1& +1; +0: +b1011 ? +09 +b0 C +1) +#2784 +0) +#2786 +b1 C +1. +1) +#2788 +0) +#2790 +b10 C +1) +#2792 +0) +#2794 +b11 C +1) +#2796 +0) +#2798 +b100 C +1) +#2800 +0) +#2802 +b101 C +1) +#2804 +0) +#2806 +b110 C +1) +#2808 +0) +#2810 +0B +0G +19 +b111 C +1) +#2812 +0) +#2814 +0G +0B +0& +0; +09 +b0 C +1) +#2816 +0) +#2818 +b1 C +0. +b1100 1 +1) +#2820 +0) +#2822 +b10 C +1) +#2824 +0) +#2826 +b11 C +1) +#2828 +0) +#2830 +b100 C +1) +#2832 +0) +#2834 +b101 C +1) +#2836 +0) +#2838 +b110 C +1) +#2840 +0) +#2842 +b1111000111111111 F +b1100 @ +0G +1B +19 +b111 C +1) +#2844 +0) +#2846 +0G +b1111000111111111 E +1& +1; +b1100 ? +09 +b0 C +1) +#2848 +0) +#2850 +b1 C +1. +1) +#2852 +0) +#2854 +b10 C +1) +#2856 +0) +#2858 +b11 C +1) +#2860 +0) +#2862 +b100 C +1) +#2864 +0) +#2866 +b101 C +1) +#2868 +0) +#2870 +b110 C +1) +#2872 +0) +#2874 +0B +0G +19 +b111 C +1) +#2876 +0) +#2878 +0G +0B +0& +0; +09 +b0 C +1) +#2880 +0) +#2882 +b1 C +0. +b1101 1 +1) +#2884 +0) +#2886 +b10 C +1) +#2888 +0) +#2890 +b11 C +1) +#2892 +0) +#2894 +b100 C +1) +#2896 +0) +#2898 +b101 C +1) +#2900 +0) +#2902 +b110 C +1) +#2904 +0) +#2906 +b1110001111111111 F +b1101 @ +0G +1B +19 +b111 C +1) +#2908 +0) +#2910 +0G +b1110001111111111 E +1& +1; +1: +b1101 ? +09 +b0 C +1) +#2912 +0) +#2914 +b1 C +1. +1) +#2916 +0) +#2918 +b10 C +1) +#2920 +0) +#2922 +b11 C +1) +#2924 +0) +#2926 +b100 C +1) +#2928 +0) +#2930 +b101 C +1) +#2932 +0) +#2934 +b110 C +1) +#2936 +0) +#2938 +0B +0G +19 +b111 C +1) +#2940 +0) +#2942 +0G +0B +0& +0; +09 +b0 C +1) +#2944 +0) +#2946 +b1 C +0. +b1110 1 +1) +#2948 +0) +#2950 +b10 C +1) +#2952 +0) +#2954 +b11 C +1) +#2956 +0) +#2958 +b100 C +1) +#2960 +0) +#2962 +b101 C +1) +#2964 +0) +#2966 +b110 C +1) +#2968 +0) +#2970 +b1100011111111111 F +b1110 @ +0G +1B +19 +b111 C +1) +#2972 +0) +#2974 +0G +b1100011111111111 E +1& +1; +0: +b1110 ? +09 +b0 C +1) +#2976 +0) +#2978 +b1 C +1. +1) +#2980 +0) +#2982 +b10 C +1) +#2984 +0) +#2986 +b11 C +1) +#2988 +0) +#2990 +b100 C +1) +#2992 +0) +#2994 +b101 C +1) +#2996 +0) +#2998 +b110 C +1) +#3000 +0) +#3002 +0B +0G +19 +b111 C +1) +#3004 +0) +#3006 +0G +0B +0& +0; +09 +b0 C +1) +#3008 +0) +#3010 +b1 C +0. +b1111 1 +1) +#3012 +0) +#3014 +b10 C +1) +#3016 +0) +#3018 +b11 C +1) +#3020 +0) +#3022 +b100 C +1) +#3024 +0) +#3026 +b101 C +1) +#3028 +0) +#3030 +b110 C +1) +#3032 +0) +#3034 +b1000111111111111 F +b1111 @ +0G +1B +19 +b111 C +1) +#3036 +0) +#3038 +0G +b1000111111111111 E +1& +1; +b1111 ? +09 +b0 C +1) +#3040 +0) +#3042 +b1 C +1. +1) +#3044 +0) +#3046 +b10 C +1) +#3048 +0) +#3050 +b11 C +1) +#3052 +0) +#3054 +b100 C +1) +#3056 +0) +#3058 +b101 C +1) +#3060 +0) +#3062 +b110 C +1) +#3064 +0) +#3066 +0B +0G +19 +b111 C +1) +#3068 +0) +#3070 +0G +0B +0& +0; +09 +b0 C +1) +#3072 +0) +#3074 +b1 C +0. +b0 1 +1) +#3076 +0) +#3078 +b10 C +1) +#3080 +0) +#3082 +b11 C +1) +#3084 +0) +#3086 +b100 C +1) +#3088 +0) +#3090 +b101 C +1) +#3092 +0) +#3094 +b110 C +1) +#3096 +0) +#3098 +1K +b1111111111111 F +b0 @ +1G +1B +19 +b111 C +1) +#3100 +0) +#3102 +0K +1! +1J +b1 " +b1 7 +b1 A +b111111111111 # +b111111111111 6 +b111111111111 > +b1111111111111 E +1$ +1= +1& +1; +b0 ? +09 +b0 C +1) +#3104 +0) +#3106 +b10110111101010 , +b1 C +1. +1/ +1' +b10 0 +1) +#3108 +0) +#3110 +0' +0! +0J +b10 C +1) +#3112 +0) +#3114 +b11 C +1) +#3116 +0) +#3118 +b100 C +1) +#3120 +0) +#3122 +b101 C +1) +#3124 +0) +#3126 +b110 C +1) +#3128 +0) +#3130 +0B +0G +19 +b111 C +1) +#3132 +0) +#3134 +0G +0B +0$ +0= +0& +0; +09 +b0 C +1) +#3136 +0) +#3138 +0G +0B +b1 C +0. +0/ +0( +b1 1 +1) +#3140 +0) +#3142 +b10 C +1) +#3144 +0) +#3146 +b11 C +1) +#3148 +0) +#3150 +b100 C +1) +#3152 +0) +#3154 +b101 C +1) +#3156 +0) +#3158 +b110 C +1) +#3160 +0) +#3162 +b11111111111110 F +b1 @ +0G +1B +19 +b111 C +1) +#3164 +0) +#3166 +0G +b11111111111110 E +1& +1; +b1 ? +09 +b0 C +1) +#3168 +0) +#3170 +b1 C +1. +1) +#3172 +0) +#3174 +b10 C +1) +#3176 +0) +#3178 +b11 C +1) +#3180 +0) +#3182 +b100 C +1) +#3184 +0) +#3186 +b101 C +1) +#3188 +0) +#3190 +b110 C +1) +#3192 +0) +#3194 +0B +0G +19 +b111 C +1) +#3196 +0) +#3198 +0G +0B +0& +0; +09 +b0 C +1) +#3200 +0) +#3202 +b1 C +0. +b10 1 +1) +#3204 +0) +#3206 +b10 C +1) +#3208 +0) +#3210 +b11 C +1) +#3212 +0) +#3214 +b100 C +1) +#3216 +0) +#3218 +b101 C +1) +#3220 +0) +#3222 +b110 C +1) +#3224 +0) +#3226 +b111111111111100 F +b10 @ +0G +1B +19 +b111 C +1) +#3228 +0) +#3230 +0G +b111111111111100 E +1& +1; +1: +b10 ? +09 +b0 C +1) +#3232 +0) +#3234 +b1 C +1. +1) +#3236 +0) +#3238 +b10 C +1) +#3240 +0) +#3242 +b11 C +1) +#3244 +0) +#3246 +b100 C +1) +#3248 +0) +#3250 +b101 C +1) +#3252 +0) +#3254 +b110 C +1) +#3256 +0) +#3258 +0B +0G +19 +b111 C +1) +#3260 +0) +#3262 +0G +0B +0& +0; +09 +b0 C +1) +#3264 +0) +#3266 +0G +0B +b1 C +0. +1( +b11 1 +1) +#3268 +0) +#3270 +b10 C +1) +#3272 +0) +#3274 +b11 C +1) +#3276 +0) +#3278 +b100 C +1) +#3280 +0) +#3282 +b101 C +1) +#3284 +0) +#3286 +b110 C +1) +#3288 +0) +#3290 +b1111111111111001 F +b11 @ +0G +1B +19 +b111 C +1) +#3292 +0) +#3294 +0G +b1111111111111001 E +1& +1; +0: +b11 ? +09 +b0 C +1) +#3296 +0) +#3298 +b1 C +1. +1) +#3300 +0) +#3302 +b10 C +1) +#3304 +0) +#3306 +b11 C +1) +#3308 +0) +#3310 +b100 C +1) +#3312 +0) +#3314 +b101 C +1) +#3316 +0) +#3318 +b110 C +1) +#3320 +0) +#3322 +0B +0G +19 +b111 C +1) +#3324 +0) +#3326 +0G +0B +0& +0; +09 +b0 C +1) +#3328 +0) +#3330 +0G +0B +b1 C +0. +0( +b100 1 +1) +#3332 +0) +#3334 +b10 C +1) +#3336 +0) +#3338 +b11 C +1) +#3340 +0) +#3342 +b100 C +1) +#3344 +0) +#3346 +b101 C +1) +#3348 +0) +#3350 +b110 C +1) +#3352 +0) +#3354 +b1111111111110010 F +b100 @ +0G +1B +19 +b111 C +1) +#3356 +0) +#3358 +0G +b1111111111110010 E +1& +1; +b100 ? +09 +b0 C +1) +#3360 +0) +#3362 +b1 C +1. +1) +#3364 +0) +#3366 +b10 C +1) +#3368 +0) +#3370 +b11 C +1) +#3372 +0) +#3374 +b100 C +1) +#3376 +0) +#3378 +b101 C +1) +#3380 +0) +#3382 +b110 C +1) +#3384 +0) +#3386 +0B +0G +19 +b111 C +1) +#3388 +0) +#3390 +0G +0B +0& +0; +09 +b0 C +1) +#3392 +0) +#3394 +0G +0B +b1 C +0. +1( +b101 1 +1) +#3396 +0) +#3398 +b10 C +1) +#3400 +0) +#3402 +b11 C +1) +#3404 +0) +#3406 +b100 C +1) +#3408 +0) +#3410 +b101 C +1) +#3412 +0) +#3414 +b110 C +1) +#3416 +0) +#3418 +b1111111111100101 F +b101 @ +0G +1B +19 +b111 C +1) +#3420 +0) +#3422 +0G +b1111111111100101 E +1& +1; +b101 ? +09 +b0 C +1) +#3424 +0) +#3426 +b1 C +1. +1) +#3428 +0) +#3430 +b10 C +1) +#3432 +0) +#3434 +b11 C +1) +#3436 +0) +#3438 +b100 C +1) +#3440 +0) +#3442 +b101 C +1) +#3444 +0) +#3446 +b110 C +1) +#3448 +0) +#3450 +0B +0G +19 +b111 C +1) +#3452 +0) +#3454 +0G +0B +0& +0; +09 +b0 C +1) +#3456 +0) +#3458 +b1 C +0. +b110 1 +1) +#3460 +0) +#3462 +b10 C +1) +#3464 +0) +#3466 +b11 C +1) +#3468 +0) +#3470 +b100 C +1) +#3472 +0) +#3474 +b101 C +1) +#3476 +0) +#3478 +b110 C +1) +#3480 +0) +#3482 +b1111111111001011 F +b110 @ +0G +1B +19 +b111 C +1) +#3484 +0) +#3486 +0G +b1111111111001011 E +1& +1; +b110 ? +09 +b0 C +1) +#3488 +0) +#3490 +b1 C +1. +1) +#3492 +0) +#3494 +b10 C +1) +#3496 +0) +#3498 +b11 C +1) +#3500 +0) +#3502 +b100 C +1) +#3504 +0) +#3506 +b101 C +1) +#3508 +0) +#3510 +b110 C +1) +#3512 +0) +#3514 +0B +0G +19 +b111 C +1) +#3516 +0) +#3518 +0G +0B +0& +0; +09 +b0 C +1) +#3520 +0) +#3522 +0G +0B +b1 C +0. +0( +b111 1 +1) +#3524 +0) +#3526 +b10 C +1) +#3528 +0) +#3530 +b11 C +1) +#3532 +0) +#3534 +b100 C +1) +#3536 +0) +#3538 +b101 C +1) +#3540 +0) +#3542 +b110 C +1) +#3544 +0) +#3546 +b1111111110010110 F +b111 @ +0G +1B +19 +b111 C +1) +#3548 +0) +#3550 +0G +b1111111110010110 E +1& +1; +1: +b111 ? +09 +b0 C +1) +#3552 +0) +#3554 +b1 C +1. +1) +#3556 +0) +#3558 +b10 C +1) +#3560 +0) +#3562 +b11 C +1) +#3564 +0) +#3566 +b100 C +1) +#3568 +0) +#3570 +b101 C +1) +#3572 +0) +#3574 +b110 C +1) +#3576 +0) +#3578 +0B +0G +19 +b111 C +1) +#3580 +0) +#3582 +0G +0B +0& +0; +09 +b0 C +1) +#3584 +0) +#3586 +0G +0B +b1 C +0. +1( +b1000 1 +1) +#3588 +0) +#3590 +b10 C +1) +#3592 +0) +#3594 +b11 C +1) +#3596 +0) +#3598 +b100 C +1) +#3600 +0) +#3602 +b101 C +1) +#3604 +0) +#3606 +b110 C +1) +#3608 +0) +#3610 +b1111111100101101 F +b1000 @ +0G +1B +19 +b111 C +1) +#3612 +0) +#3614 +0G +b1111111100101101 E +1& +1; +b1000 ? +09 +b0 C +1) +#3616 +0) +#3618 +b1 C +1. +1) +#3620 +0) +#3622 +b10 C +1) +#3624 +0) +#3626 +b11 C +1) +#3628 +0) +#3630 +b100 C +1) +#3632 +0) +#3634 +b101 C +1) +#3636 +0) +#3638 +b110 C +1) +#3640 +0) +#3642 +0B +0G +19 +b111 C +1) +#3644 +0) +#3646 +0G +0B +0& +0; +09 +b0 C +1) +#3648 +0) +#3650 +b1 C +0. +b1001 1 +1) +#3652 +0) +#3654 +b10 C +1) +#3656 +0) +#3658 +b11 C +1) +#3660 +0) +#3662 +b100 C +1) +#3664 +0) +#3666 +b101 C +1) +#3668 +0) +#3670 +b110 C +1) +#3672 +0) +#3674 +b1111111001011011 F +b1001 @ +0G +1B +19 +b111 C +1) +#3676 +0) +#3678 +0G +b1111111001011011 E +1& +1; +0: +b1001 ? +09 +b0 C +1) +#3680 +0) +#3682 +b1 C +1. +1) +#3684 +0) +#3686 +b10 C +1) +#3688 +0) +#3690 +b11 C +1) +#3692 +0) +#3694 +b100 C +1) +#3696 +0) +#3698 +b101 C +1) +#3700 +0) +#3702 +b110 C +1) +#3704 +0) +#3706 +0B +0G +19 +b111 C +1) +#3708 +0) +#3710 +0G +0B +0& +0; +09 +b0 C +1) +#3712 +0) +#3714 +b1 C +0. +b1010 1 +1) +#3716 +0) +#3718 +b10 C +1) +#3720 +0) +#3722 +b11 C +1) +#3724 +0) +#3726 +b100 C +1) +#3728 +0) +#3730 +b101 C +1) +#3732 +0) +#3734 +b110 C +1) +#3736 +0) +#3738 +b1111110010110111 F +b1010 @ +0G +1B +19 +b111 C +1) +#3740 +0) +#3742 +0G +b1111110010110111 E +1& +1; +1: +b1010 ? +09 +b0 C +1) +#3744 +0) +#3746 +b1 C +1. +1) +#3748 +0) +#3750 +b10 C +1) +#3752 +0) +#3754 +b11 C +1) +#3756 +0) +#3758 +b100 C +1) +#3760 +0) +#3762 +b101 C +1) +#3764 +0) +#3766 +b110 C +1) +#3768 +0) +#3770 +0B +0G +19 +b111 C +1) +#3772 +0) +#3774 +0G +0B +0& +0; +09 +b0 C +1) +#3776 +0) +#3778 +b1 C +0. +b1011 1 +1) +#3780 +0) +#3782 +b10 C +1) +#3784 +0) +#3786 +b11 C +1) +#3788 +0) +#3790 +b100 C +1) +#3792 +0) +#3794 +b101 C +1) +#3796 +0) +#3798 +b110 C +1) +#3800 +0) +#3802 +b1111100101101111 F +b1011 @ +0G +1B +19 +b111 C +1) +#3804 +0) +#3806 +0G +b1111100101101111 E +1& +1; +0: +b1011 ? +09 +b0 C +1) +#3808 +0) +#3810 +b1 C +1. +1) +#3812 +0) +#3814 +b10 C +1) +#3816 +0) +#3818 +b11 C +1) +#3820 +0) +#3822 +b100 C +1) +#3824 +0) +#3826 +b101 C +1) +#3828 +0) +#3830 +b110 C +1) +#3832 +0) +#3834 +0B +0G +19 +b111 C +1) +#3836 +0) +#3838 +0G +0B +0& +0; +09 +b0 C +1) +#3840 +0) +#3842 +0G +0B +b1 C +0. +0( +b1100 1 +1) +#3844 +0) +#3846 +b10 C +1) +#3848 +0) +#3850 +b11 C +1) +#3852 +0) +#3854 +b100 C +1) +#3856 +0) +#3858 +b101 C +1) +#3860 +0) +#3862 +b110 C +1) +#3864 +0) +#3866 +b1111001011011110 F +b1100 @ +0G +1B +19 +b111 C +1) +#3868 +0) +#3870 +0G +b1111001011011110 E +1& +1; +b1100 ? +09 +b0 C +1) +#3872 +0) +#3874 +b1 C +1. +1) +#3876 +0) +#3878 +b10 C +1) +#3880 +0) +#3882 +b11 C +1) +#3884 +0) +#3886 +b100 C +1) +#3888 +0) +#3890 +b101 C +1) +#3892 +0) +#3894 +b110 C +1) +#3896 +0) +#3898 +0B +0G +19 +b111 C +1) +#3900 +0) +#3902 +0G +0B +0& +0; +09 +b0 C +1) +#3904 +0) +#3906 +0G +0B +b1 C +0. +1( +b1101 1 +1) +#3908 +0) +#3910 +b10 C +1) +#3912 +0) +#3914 +b11 C +1) +#3916 +0) +#3918 +b100 C +1) +#3920 +0) +#3922 +b101 C +1) +#3924 +0) +#3926 +b110 C +1) +#3928 +0) +#3930 +b1110010110111101 F +b1101 @ +0G +1B +19 +b111 C +1) +#3932 +0) +#3934 +0G +b1110010110111101 E +1& +1; +1: +b1101 ? +09 +b0 C +1) +#3936 +0) +#3938 +b1 C +1. +1) +#3940 +0) +#3942 +b10 C +1) +#3944 +0) +#3946 +b11 C +1) +#3948 +0) +#3950 +b100 C +1) +#3952 +0) +#3954 +b101 C +1) +#3956 +0) +#3958 +b110 C +1) +#3960 +0) +#3962 +0B +0G +19 +b111 C +1) +#3964 +0) +#3966 +0G +0B +0& +0; +09 +b0 C +1) +#3968 +0) +#3970 +0G +0B +b1 C +0. +0( +b1110 1 +1) +#3972 +0) +#3974 +b10 C +1) +#3976 +0) +#3978 +b11 C +1) +#3980 +0) +#3982 +b100 C +1) +#3984 +0) +#3986 +b101 C +1) +#3988 +0) +#3990 +b110 C +1) +#3992 +0) +#3994 +b1100101101111010 F +b1110 @ +0G +1B +19 +b111 C +1) +#3996 +0) +#3998 +0G +b1100101101111010 E +1& +1; +0: +b1110 ? +09 +b0 C +1) +#4000 +0) +#4002 +b1 C +1. +1) +#4004 +0) +#4006 +b10 C +1) +#4008 +0) +#4010 +b11 C +1) +#4012 +0) +#4014 +b100 C +1) +#4016 +0) +#4018 +b101 C +1) +#4020 +0) +#4022 +b110 C +1) +#4024 +0) +#4026 +0B +0G +19 +b111 C +1) +#4028 +0) +#4030 +0G +0B +0& +0; +09 +b0 C +1) +#4032 +0) +#4034 +0G +0B +b1 C +0. +1( +b1111 1 +1) +#4036 +0) +#4038 +b10 C +1) +#4040 +0) +#4042 +b11 C +1) +#4044 +0) +#4046 +b100 C +1) +#4048 +0) +#4050 +b101 C +1) +#4052 +0) +#4054 +b110 C +1) +#4056 +0) +#4058 +b1001011011110101 F +b1111 @ +0G +1B +19 +b111 C +1) +#4060 +0) +#4062 +0G +b1001011011110101 E +1& +1; +b1111 ? +09 +b0 C +1) +#4064 +0) +#4066 +b1 C +1. +1) +#4068 +0) +#4070 +b10 C +1) +#4072 +0) +#4074 +b11 C +1) +#4076 +0) +#4078 +b100 C +1) +#4080 +0) +#4082 +b101 C +1) +#4084 +0) +#4086 +b110 C +1) +#4088 +0) +#4090 +0B +0G +19 +b111 C +1) +#4092 +0) +#4094 +0G +0B +0& +0; +09 +b0 C +1) +#4096 +0) +#4098 +0G +0B +b1 C +0. +0( +b0 1 +1) +#4100 +0) +#4102 +b10 C +1) +#4104 +0) +#4106 +b11 C +1) +#4108 +0) +#4110 +b100 C +1) +#4112 +0) +#4114 +b101 C +1) +#4116 +0) +#4118 +b110 C +1) +#4120 +0) +#4122 +1K +b10110111101010 F +b0 @ +1G +1B +19 +b111 C +1) +#4124 +0) +#4126 +0K +1! +1J +b10 " +b10 7 +b10 A +b110111101010 # +b110111101010 6 +b110111101010 > +b10110111101010 E +1$ +1= +1& +1; +b0 ? +09 +b0 C +1) +#4128 +0) +#4130 +b11110010101111 , +b1 C +1. +1/ +1' +b11 0 +1) +#4132 +0) +#4134 +0' +0! +0J +b10 C +1) +#4136 +0) +#4138 +b11 C +1) +#4140 +0) +#4142 +b100 C +1) +#4144 +0) +#4146 +b101 C +1) +#4148 +0) +#4150 +b110 C +1) +#4152 +0) +#4154 +0B +0G +19 +b111 C +1) +#4156 +0) +#4158 +0G +0B +0$ +0= +0& +0; +09 +b0 C +1) +#4160 +0) +#4162 +b1 C +0. +0/ +b1 1 +1) +#4164 +0) +#4166 +b10 C +1) +#4168 +0) +#4170 +b11 C +1) +#4172 +0) +#4174 +b100 C +1) +#4176 +0) +#4178 +b101 C +1) +#4180 +0) +#4182 +b110 C +1) +#4184 +0) +#4186 +b101101111010100 F +b1 @ +0G +1B +19 +b111 C +1) +#4188 +0) +#4190 +0G +b101101111010100 E +1& +1; +b1 ? +09 +b0 C +1) +#4192 +0) +#4194 +b1 C +1. +1) +#4196 +0) +#4198 +b10 C +1) +#4200 +0) +#4202 +b11 C +1) +#4204 +0) +#4206 +b100 C +1) +#4208 +0) +#4210 +b101 C +1) +#4212 +0) +#4214 +b110 C +1) +#4216 +0) +#4218 +0B +0G +19 +b111 C +1) +#4220 +0) +#4222 +0G +0B +0& +0; +09 +b0 C +1) +#4224 +0) +#4226 +b1 C +0. +b10 1 +1) +#4228 +0) +#4230 +b10 C +1) +#4232 +0) +#4234 +b11 C +1) +#4236 +0) +#4238 +b100 C +1) +#4240 +0) +#4242 +b101 C +1) +#4244 +0) +#4246 +b110 C +1) +#4248 +0) +#4250 +b1011011110101000 F +b10 @ +0G +1B +19 +b111 C +1) +#4252 +0) +#4254 +0G +b1011011110101000 E +1& +1; +1: +b10 ? +09 +b0 C +1) +#4256 +0) +#4258 +b1 C +1. +1) +#4260 +0) +#4262 +b10 C +1) +#4264 +0) +#4266 +b11 C +1) +#4268 +0) +#4270 +b100 C +1) +#4272 +0) +#4274 +b101 C +1) +#4276 +0) +#4278 +b110 C +1) +#4280 +0) +#4282 +0B +0G +19 +b111 C +1) +#4284 +0) +#4286 +0G +0B +0& +0; +09 +b0 C +1) +#4288 +0) +#4290 +0G +0B +b1 C +0. +1( +b11 1 +1) +#4292 +0) +#4294 +b10 C +1) +#4296 +0) +#4298 +b11 C +1) +#4300 +0) +#4302 +b100 C +1) +#4304 +0) +#4306 +b101 C +1) +#4308 +0) +#4310 +b110 C +1) +#4312 +0) +#4314 +b110111101010001 F +b11 @ +0G +1B +19 +b111 C +1) +#4316 +0) +#4318 +0G +b110111101010001 E +1& +1; +0: +b11 ? +09 +b0 C +1) +#4320 +0) +#4322 +b1 C +1. +1) +#4324 +0) +#4326 +b10 C +1) +#4328 +0) +#4330 +b11 C +1) +#4332 +0) +#4334 +b100 C +1) +#4336 +0) +#4338 +b101 C +1) +#4340 +0) +#4342 +b110 C +1) +#4344 +0) +#4346 +0B +0G +19 +b111 C +1) +#4348 +0) +#4350 +0G +0B +0& +0; +09 +b0 C +1) +#4352 +0) +#4354 +b1 C +0. +b100 1 +1) +#4356 +0) +#4358 +b10 C +1) +#4360 +0) +#4362 +b11 C +1) +#4364 +0) +#4366 +b100 C +1) +#4368 +0) +#4370 +b101 C +1) +#4372 +0) +#4374 +b110 C +1) +#4376 +0) +#4378 +b1101111010100011 F +b100 @ +0G +1B +19 +b111 C +1) +#4380 +0) +#4382 +0G +b1101111010100011 E +1& +1; +b100 ? +09 +b0 C +1) +#4384 +0) +#4386 +b1 C +1. +1) +#4388 +0) +#4390 +b10 C +1) +#4392 +0) +#4394 +b11 C +1) +#4396 +0) +#4398 +b100 C +1) +#4400 +0) +#4402 +b101 C +1) +#4404 +0) +#4406 +b110 C +1) +#4408 +0) +#4410 +0B +0G +19 +b111 C +1) +#4412 +0) +#4414 +0G +0B +0& +0; +09 +b0 C +1) +#4416 +0) +#4418 +b1 C +0. +b101 1 +1) +#4420 +0) +#4422 +b10 C +1) +#4424 +0) +#4426 +b11 C +1) +#4428 +0) +#4430 +b100 C +1) +#4432 +0) +#4434 +b101 C +1) +#4436 +0) +#4438 +b110 C +1) +#4440 +0) +#4442 +b1011110101000111 F +b101 @ +0G +1B +19 +b111 C +1) +#4444 +0) +#4446 +0G +b1011110101000111 E +1& +1; +b101 ? +09 +b0 C +1) +#4448 +0) +#4450 +b1 C +1. +1) +#4452 +0) +#4454 +b10 C +1) +#4456 +0) +#4458 +b11 C +1) +#4460 +0) +#4462 +b100 C +1) +#4464 +0) +#4466 +b101 C +1) +#4468 +0) +#4470 +b110 C +1) +#4472 +0) +#4474 +0B +0G +19 +b111 C +1) +#4476 +0) +#4478 +0G +0B +0& +0; +09 +b0 C +1) +#4480 +0) +#4482 +b1 C +0. +b110 1 +1) +#4484 +0) +#4486 +b10 C +1) +#4488 +0) +#4490 +b11 C +1) +#4492 +0) +#4494 +b100 C +1) +#4496 +0) +#4498 +b101 C +1) +#4500 +0) +#4502 +b110 C +1) +#4504 +0) +#4506 +b111101010001111 F +b110 @ +0G +1B +19 +b111 C +1) +#4508 +0) +#4510 +0G +b111101010001111 E +1& +1; +b110 ? +09 +b0 C +1) +#4512 +0) +#4514 +b1 C +1. +1) +#4516 +0) +#4518 +b10 C +1) +#4520 +0) +#4522 +b11 C +1) +#4524 +0) +#4526 +b100 C +1) +#4528 +0) +#4530 +b101 C +1) +#4532 +0) +#4534 +b110 C +1) +#4536 +0) +#4538 +0B +0G +19 +b111 C +1) +#4540 +0) +#4542 +0G +0B +0& +0; +09 +b0 C +1) +#4544 +0) +#4546 +0G +0B +b1 C +0. +0( +b111 1 +1) +#4548 +0) +#4550 +b10 C +1) +#4552 +0) +#4554 +b11 C +1) +#4556 +0) +#4558 +b100 C +1) +#4560 +0) +#4562 +b101 C +1) +#4564 +0) +#4566 +b110 C +1) +#4568 +0) +#4570 +b1111010100011110 F +b111 @ +0G +1B +19 +b111 C +1) +#4572 +0) +#4574 +0G +b1111010100011110 E +1& +1; +1: +b111 ? +09 +b0 C +1) +#4576 +0) +#4578 +b1 C +1. +1) +#4580 +0) +#4582 +b10 C +1) +#4584 +0) +#4586 +b11 C +1) +#4588 +0) +#4590 +b100 C +1) +#4592 +0) +#4594 +b101 C +1) +#4596 +0) +#4598 +b110 C +1) +#4600 +0) +#4602 +0B +0G +19 +b111 C +1) +#4604 +0) +#4606 +0G +0B +0& +0; +09 +b0 C +1) +#4608 +0) +#4610 +b1 C +0. +b1000 1 +1) +#4612 +0) +#4614 +b10 C +1) +#4616 +0) +#4618 +b11 C +1) +#4620 +0) +#4622 +b100 C +1) +#4624 +0) +#4626 +b101 C +1) +#4628 +0) +#4630 +b110 C +1) +#4632 +0) +#4634 +b1110101000111100 F +b1000 @ +0G +1B +19 +b111 C +1) +#4636 +0) +#4638 +0G +b1110101000111100 E +1& +1; +b1000 ? +09 +b0 C +1) +#4640 +0) +#4642 +b1 C +1. +1) +#4644 +0) +#4646 +b10 C +1) +#4648 +0) +#4650 +b11 C +1) +#4652 +0) +#4654 +b100 C +1) +#4656 +0) +#4658 +b101 C +1) +#4660 +0) +#4662 +b110 C +1) +#4664 +0) +#4666 +0B +0G +19 +b111 C +1) +#4668 +0) +#4670 +0G +0B +0& +0; +09 +b0 C +1) +#4672 +0) +#4674 +0G +0B +b1 C +0. +1( +b1001 1 +1) +#4676 +0) +#4678 +b10 C +1) +#4680 +0) +#4682 +b11 C +1) +#4684 +0) +#4686 +b100 C +1) +#4688 +0) +#4690 +b101 C +1) +#4692 +0) +#4694 +b110 C +1) +#4696 +0) +#4698 +b1101010001111001 F +b1001 @ +0G +1B +19 +b111 C +1) +#4700 +0) +#4702 +0G +b1101010001111001 E +1& +1; +0: +b1001 ? +09 +b0 C +1) +#4704 +0) +#4706 +b1 C +1. +1) +#4708 +0) +#4710 +b10 C +1) +#4712 +0) +#4714 +b11 C +1) +#4716 +0) +#4718 +b100 C +1) +#4720 +0) +#4722 +b101 C +1) +#4724 +0) +#4726 +b110 C +1) +#4728 +0) +#4730 +0B +0G +19 +b111 C +1) +#4732 +0) +#4734 +0G +0B +0& +0; +09 +b0 C +1) +#4736 +0) +#4738 +0G +0B +b1 C +0. +0( +b1010 1 +1) +#4740 +0) +#4742 +b10 C +1) +#4744 +0) +#4746 +b11 C +1) +#4748 +0) +#4750 +b100 C +1) +#4752 +0) +#4754 +b101 C +1) +#4756 +0) +#4758 +b110 C +1) +#4760 +0) +#4762 +b1010100011110010 F +b1010 @ +0G +1B +19 +b111 C +1) +#4764 +0) +#4766 +0G +b1010100011110010 E +1& +1; +1: +b1010 ? +09 +b0 C +1) +#4768 +0) +#4770 +b1 C +1. +1) +#4772 +0) +#4774 +b10 C +1) +#4776 +0) +#4778 +b11 C +1) +#4780 +0) +#4782 +b100 C +1) +#4784 +0) +#4786 +b101 C +1) +#4788 +0) +#4790 +b110 C +1) +#4792 +0) +#4794 +0B +0G +19 +b111 C +1) +#4796 +0) +#4798 +0G +0B +0& +0; +09 +b0 C +1) +#4800 +0) +#4802 +0G +0B +b1 C +0. +1( +b1011 1 +1) +#4804 +0) +#4806 +b10 C +1) +#4808 +0) +#4810 +b11 C +1) +#4812 +0) +#4814 +b100 C +1) +#4816 +0) +#4818 +b101 C +1) +#4820 +0) +#4822 +b110 C +1) +#4824 +0) +#4826 +b101000111100101 F +b1011 @ +0G +1B +19 +b111 C +1) +#4828 +0) +#4830 +0G +b101000111100101 E +1& +1; +0: +b1011 ? +09 +b0 C +1) +#4832 +0) +#4834 +b1 C +1. +1) +#4836 +0) +#4838 +b10 C +1) +#4840 +0) +#4842 +b11 C +1) +#4844 +0) +#4846 +b100 C +1) +#4848 +0) +#4850 +b101 C +1) +#4852 +0) +#4854 +b110 C +1) +#4856 +0) +#4858 +0B +0G +19 +b111 C +1) +#4860 +0) +#4862 +0G +0B +0& +0; +09 +b0 C +1) +#4864 +0) +#4866 +0G +0B +b1 C +0. +0( +b1100 1 +1) +#4868 +0) +#4870 +b10 C +1) +#4872 +0) +#4874 +b11 C +1) +#4876 +0) +#4878 +b100 C +1) +#4880 +0) +#4882 +b101 C +1) +#4884 +0) +#4886 +b110 C +1) +#4888 +0) +#4890 +b1010001111001010 F +b1100 @ +0G +1B +19 +b111 C +1) +#4892 +0) +#4894 +0G +b1010001111001010 E +1& +1; +b1100 ? +09 +b0 C +1) +#4896 +0) +#4898 +b1 C +1. +1) +#4900 +0) +#4902 +b10 C +1) +#4904 +0) +#4906 +b11 C +1) +#4908 +0) +#4910 +b100 C +1) +#4912 +0) +#4914 +b101 C +1) +#4916 +0) +#4918 +b110 C +1) +#4920 +0) +#4922 +0B +0G +19 +b111 C +1) +#4924 +0) +#4926 +0G +0B +0& +0; +09 +b0 C +1) +#4928 +0) +#4930 +0G +0B +b1 C +0. +1( +b1101 1 +1) +#4932 +0) +#4934 +b10 C +1) +#4936 +0) +#4938 +b11 C +1) +#4940 +0) +#4942 +b100 C +1) +#4944 +0) +#4946 +b101 C +1) +#4948 +0) +#4950 +b110 C +1) +#4952 +0) +#4954 +b100011110010101 F +b1101 @ +0G +1B +19 +b111 C +1) +#4956 +0) +#4958 +0G +b100011110010101 E +1& +1; +1: +b1101 ? +09 +b0 C +1) +#4960 +0) +#4962 +b1 C +1. +1) +#4964 +0) +#4966 +b10 C +1) +#4968 +0) +#4970 +b11 C +1) +#4972 +0) +#4974 +b100 C +1) +#4976 +0) +#4978 +b101 C +1) +#4980 +0) +#4982 +b110 C +1) +#4984 +0) +#4986 +0B +0G +19 +b111 C +1) +#4988 +0) +#4990 +0G +0B +0& +0; +09 +b0 C +1) +#4992 +0) +#4994 +b1 C +0. +b1110 1 +1) +#4996 +0) +#4998 +b10 C +1) +#5000 +0) +#5002 +b11 C +1) +#5004 +0) +#5006 +b100 C +1) +#5008 +0) +#5010 +b101 C +1) +#5012 +0) +#5014 +b110 C +1) +#5016 +0) +#5018 +b1000111100101011 F +b1110 @ +0G +1B +19 +b111 C +1) +#5020 +0) +#5022 +0G +b1000111100101011 E +1& +1; +0: +b1110 ? +09 +b0 C +1) +#5024 +0) +#5026 +b1 C +1. +1) +#5028 +0) +#5030 +b10 C +1) +#5032 +0) +#5034 +b11 C +1) +#5036 +0) +#5038 +b100 C +1) +#5040 +0) +#5042 +b101 C +1) +#5044 +0) +#5046 +b110 C +1) +#5048 +0) +#5050 +0B +0G +19 +b111 C +1) +#5052 +0) +#5054 +0G +0B +0& +0; +09 +b0 C +1) +#5056 +0) +#5058 +b1 C +0. +b1111 1 +1) +#5060 +0) +#5062 +b10 C +1) +#5064 +0) +#5066 +b11 C +1) +#5068 +0) +#5070 +b100 C +1) +#5072 +0) +#5074 +b101 C +1) +#5076 +0) +#5078 +b110 C +1) +#5080 +0) +#5082 +b1111001010111 F +b1111 @ +0G +1B +19 +b111 C +1) +#5084 +0) +#5086 +0G +b1111001010111 E +1& +1; +b1111 ? +09 +b0 C +1) +#5088 +0) +#5090 +b1 C +1. +1) +#5092 +0) +#5094 +b10 C +1) +#5096 +0) +#5098 +b11 C +1) +#5100 +0) +#5102 +b100 C +1) +#5104 +0) +#5106 +b101 C +1) +#5108 +0) +#5110 +b110 C +1) +#5112 +0) +#5114 +0B +0G +19 +b111 C +1) +#5116 +0) +#5118 +0G +0B +0& +0; +09 +b0 C +1) +#5120 +0) +#5122 +b1 C +0. +b0 1 +1) +#5124 +0) +#5126 +b10 C +1) +#5128 +0) +#5130 +b11 C +1) +#5132 +0) +#5134 +b100 C +1) +#5136 +0) +#5138 +b101 C +1) +#5140 +0) +#5142 +b110 C +1) +#5144 +0) +#5146 +1K +b11110010101111 F +b0 @ +1G +1B +19 +b111 C +1) +#5148 +0) +#5150 +0K +1! +1J +b11 " +b11 7 +b11 A +b110010101111 # +b110010101111 6 +b110010101111 > +b11110010101111 E +1$ +1= +1& +1; +b0 ? +09 +b0 C +1) +#5152 +0) +#5154 +b111111111 , +b1 C +1' +b100 0 +1) diff --git a/rtl/tb/adc_test.cpp b/rtl/tb/adc_test.cpp new file mode 100644 index 0000000..f3c77a2 --- /dev/null +++ b/rtl/tb/adc_test.cpp @@ -0,0 +1,37 @@ +#include "Vadc_driver.h" +#include "verilated.h" + +#include + +int main(int argc, char** argv, char** env) { + Verilated::commandArgs(argc, argv); + auto driver = std::unique_ptr(); + uint64_t tick = 0; + bool done = false; + + driver->clk = 0; + driver->rstn = 1; + driver->adc_so = 0; + driver->ack = 0; + + int sck_old = driver->sck; + + while (!done) { + if (tick > 5) { + driver->rstn = 0; + } + if ((tick % 10) == 0) { + driver->clk = 1; + } + if ((tick % 10) == 5) { + driver->clk = 0; + } + driver->eval(); + if (driver->sck & !sck_old) { + } + sck_old = driver->sck; + if (driver->vld) { + } + } + return 0; +}