diff options
author | crupest <crupest@outlook.com> | 2021-12-26 17:21:51 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-12-26 17:21:51 +0800 |
commit | 825afbb7774d5a507f198429b8999c6aae3f8592 (patch) | |
tree | 87826d08c77b359a7c7df1ba8155603f641b5e80 /works/life | |
parent | 90dbff7efabddf8f3cb19cae3e75009f4bf0fc52 (diff) | |
download | crupest-825afbb7774d5a507f198429b8999c6aae3f8592.tar.gz crupest-825afbb7774d5a507f198429b8999c6aae3f8592.tar.bz2 crupest-825afbb7774d5a507f198429b8999c6aae3f8592.zip |
import(life): ...
Diffstat (limited to 'works/life')
-rw-r--r-- | works/life/computer-organization-experiment/cpu.vhdl | 212 | ||||
-rw-r--r-- | works/life/computer-organization-experiment/out.ghw | bin | 14642 -> 4661248 bytes | |||
-rw-r--r-- | works/life/computer-organization-experiment/out.vcd | 1133 |
3 files changed, 249 insertions, 1096 deletions
diff --git a/works/life/computer-organization-experiment/cpu.vhdl b/works/life/computer-organization-experiment/cpu.vhdl index f1a7d65..aca35cf 100644 --- a/works/life/computer-organization-experiment/cpu.vhdl +++ b/works/life/computer-organization-experiment/cpu.vhdl @@ -4,6 +4,7 @@ use ieee.std_logic_1164.all; package cru is subtype word is std_logic_vector(31 downto 0); constant clock_time : time := 10 ns; + constant ram_clock_time: time := 2.5 ns; end package; library ieee; @@ -35,13 +36,36 @@ end architecture; library ieee; use ieee.std_logic_1164.all; +use work.cru.all; + +entity reg_file_clock is + port(CLK: out std_logic); +end entity; + +architecture Behavioral of reg_file_clock is + signal V: std_logic := '1'; +begin + l: process is + begin + CLK <= V; + wait for 1 ns; + loop + V <= not V; + wait for 1 ps; + CLK <= V; + wait for clock_time; + end loop; + end process; +end architecture; + +library ieee; +use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all; use work.cru.all; entity register_file is port ( - CLK: in std_logic; ENABLE: in std_logic; R1, R2, W: in std_logic_vector(4 downto 0); WD: in std_logic_vector(31 downto 0); @@ -52,7 +76,10 @@ end entity; architecture Behavioral of register_file is type reg_file_type is array (0 to 31) of std_logic_vector(31 downto 0); signal reg_file: reg_file_type := (others => (others => '0')); + signal CLK : std_logic; begin + clock: entity work.reg_file_clock + port map (CLK); process (CLK) begin if rising_edge(CLK) then @@ -91,13 +118,11 @@ begin else std_logic_vector(signed(A) sll to_integer(unsigned(B))) when ALUC ?= B"0011" else std_logic_vector(signed(A) srl to_integer(unsigned(B))) when ALUC ?= B"0111" else std_logic_vector(signed(A) sra to_integer(unsigned(B))) when ALUC ?= B"1111"; - Z <= S ?= X"00000000"; + Z <= S ?= X"00000000" after 10 ps; end architecture; library ieee; use ieee.std_logic_1164.all; -use ieee.numeric_std.all; -use ieee.std_logic_unsigned.all; use work.cru.all; entity clock is @@ -113,16 +138,41 @@ end architecture; library ieee; use ieee.std_logic_1164.all; +use work.cru.all; + +entity ram_clock is + port(CLK: out std_logic); +end entity; + +architecture Behavioral of ram_clock is + signal V: std_logic := '0'; +begin + l: process is + begin + CLK <= V; + wait for 500 ps; + loop + V <= not V; + wait for 1 ps; + CLK <= V; + wait for ram_clock_time; + end loop; + end process; +end architecture; + +library ieee; +use ieee.std_logic_1164.all; use ieee.numeric_std.all; -use ieee.std_logic_unsigned.all; use work.cru.all; entity ram is - port(CLK: in std_logic; - R: out word; - W: in word; - ADDR: in word; - ENABLE: in std_logic + port( + R_DATA: out word; + W_DATA: in word; + R_ADDR: in word; + W_ADDR: in word; + READ: in std_logic; + WRITE: in std_logic ); end entity; @@ -130,7 +180,7 @@ architecture Behavioral of ram is type memory_type is array (0 to 16#30#) of word; signal memory: memory_type := ( X"3c010000", - X"34240020", + X"34240080", X"20050004", X"0c000018", X"ac820000", @@ -168,14 +218,17 @@ architecture Behavioral of ram is others => (others => '0') ); signal V: std_logic := '0'; + signal CLK: std_logic; begin + clock: entity work.ram_clock + port map (CLK); b: process(CLK) is begin - if rising_edge(CLK) then - R <= memory(to_integer(unsigned(ADDR)) / 4); + if rising_edge(CLK) and READ = '1' then + R_DATA <= memory(to_integer(unsigned(R_ADDR)) / 4); end if; - if falling_edge(CLK) and ENABLE = '1' then - memory(to_integer(unsigned(ADDR)) / 4) <= W; + if falling_edge(CLK) and WRITE = '1' then + memory(to_integer(unsigned(W_ADDR)) / 4) <= W_DATA; end if; end process; end architecture; @@ -198,17 +251,18 @@ architecture Behavioral of cpu is signal ins: word; - signal enable_mem: std_logic; - signal write_mem: std_logic := '0'; - signal addr: word := X"00000000"; - signal mem_w: word; - signal mem_r: word; + signal mem_r_addr: word := X"00000000"; + signal mem_w_addr: word := X"00000000"; + signal mem_r_data: word; + signal mem_w_data: word := X"00000000"; + signal mem_read: std_logic := '0'; + signal mem_write: std_logic := '0'; signal WRITE_REG: std_logic := '0'; signal R1: std_logic_vector(4 downto 0) := B"00000"; signal R2: std_logic_vector(4 downto 0) := B"00000"; signal W: std_logic_vector(4 downto 0) := B"00000"; - signal WD: std_logic_vector(31 downto 0); + signal WD: std_logic_vector(31 downto 0) := X"00000000"; signal RD1: std_logic_vector(31 downto 0) := X"00000000"; signal RD2: std_logic_vector(31 downto 0) := X"00000000"; @@ -227,7 +281,6 @@ begin ); reg: entity work.register_file port map( - CLK => CLK, ENABLE => WRITE_REG, R1 => R1, R2 => R2, @@ -247,84 +300,112 @@ begin ram: entity work.ram port map ( - CLK => CLK, - R => mem_r, - W => mem_w, - ADDR => addr, - ENABLE => write_mem + R_DATA => mem_r_data, + W_DATA => mem_w_data, + R_ADDR => mem_r_addr, + W_ADDR => mem_w_addr, + READ => mem_read, + WRITE => mem_write ); logic: process is begin wait until rising_edge(CLK); - wait for 100 ps; - addr <= pc; + wait for 250 ps; + + mem_read <= '1'; + mem_r_addr <= pc; pc_to_write <= pc + 4; - wait for 1 ns; - ins <= mem_r; + wait for 500 ps; + + ins <= mem_r_data; + + mem_write <= '0'; WRITE_REG <= '0'; + + wait for 100 ps; - if ins(31 downto 27) = B"00001" then -- j / jal + if ins(31 downto 27) = B"00001" then -- j / jal, not read reg if ins(26) = '1' then -- jal W <= B"11111"; - WD <= pc; + WD <= pc + 4; WRITE_REG <= '1'; end if; - pc_to_write <= (25 downto 0 => ins(25 downto 0), others => '0'); + + ALUC <= B"0011"; + A <= (25 downto 0 => ins(25 downto 0), others => '0'); + B <= X"00000002"; + wait for 100 ps; + pc_to_write <= S; elsif ins(31 downto 26) = B"000000" then if ins(5) = '1' then R1 <= ins(25 downto 21); R2 <= ins(20 downto 16); - ALUC <= ins(3 downto 0); - wait for 100 ps; + wait for 500 ps; + ALUC <= ins(3 downto 0); A <= RD1; B <= RD2; + + wait for 100 ps; + W <= ins(15 downto 11); WRITE_REG <= '1'; WD <= S; elsif ins(3) = '0' then R1 <= ins(20 downto 16); + + wait for 500 ps; + ALUC(3 downto 2) <= ins(1 downto 0); ALUC(1 downto 0) <= B"11"; + A <= RD1; + B <= (4 downto 0 => ins(10 downto 6), others => '0'); wait for 100 ps; - A <= RD1; - B <= (4 downto 0 => ins(10 downto 6), others => '0'); W <= ins(15 downto 11); WRITE_REG <= '1'; WD <= S; else R1 <= ins(25 downto 21); - WRITE_REG <= '0'; - wait for 100 ps; + wait for 500 ps; pc_to_write <= RD1; end if; else if ins(31) = '1' then - enable_mem <= '1'; R1 <= ins(25 downto 21); - ALUC <= B"0000"; + R2 <= ins(20 downto 16); - wait for 100 ps; + wait for 500 ps; + ALUC <= B"0000"; A <= RD1; B <= (15 downto 0 => ins(15 downto 0), others => '0' ); + + wait for 100 ps; + if ins(29) = '1' then - W <= ins(20 downto 16); - write_mem <= '0'; - else R2 <= ins(20 downto 16); - write_mem <= '1'; + mem_write <= '1'; + mem_w_addr <= S; + mem_w_data <= RD2; + + else + W <= ins(20 downto 16); + mem_read <= '1'; + mem_r_addr <= S; + + wait for ram_clock_time * 2; - wait for 100 ps; + WD <= mem_r_data; + WRITE_REG <= '1'; end if; elsif ins(29 downto 26) = B"1111" then WRITE_REG <= '1'; @@ -332,43 +413,42 @@ begin WD(31 downto 16) <= ins(15 downto 0); elsif ins(29) = '1' then R1 <= ins(25 downto 21); - ALUC <= ins(29 downto 26); - wait for 100 ps; + wait for 500 ps; + ALUC <= ins(29 downto 26); A <= RD1; B(15 downto 0) <= ins(15 downto 0); - B(31 downto 16) <= X"0000"; + if ins(15) = '0' then + B(31 downto 16) <= X"0000"; + else + B(31 downto 16) <= X"FFFF"; + end if; + + wait for 100 ps; + W <= ins(20 downto 16); WRITE_REG <= '1'; WD <= S; else R1 <= ins(25 downto 21); R2 <= ins(20 downto 16); - ALUC <= B"0010"; - wait for 100 ps; + wait for 500 ps; + ALUC <= B"0010"; A <= RD1; B <= RD2; - if Z = '1' then - pc_to_write <= pc_to_write + to_integer(unsigned(ins(15 downto 0)) * 4); + + wait for 100 ps; + + if Z = '1' xor ins(26) = '1' then + pc_to_write <= pc_to_write + to_integer(signed(ins(15 downto 0)) * 4); end if; WRITE_REG <= '0'; end if; end if; - if enable_mem then - if write_mem then - WRITE_REG <= '0'; - mem_w <= RD2; - else - WRITE_REG <= '1'; - WD <= mem_r; - end if; - else - write_mem <= '0'; - end if; end process; end architecture; diff --git a/works/life/computer-organization-experiment/out.ghw b/works/life/computer-organization-experiment/out.ghw Binary files differindex 10d4b17..81d1df7 100644 --- a/works/life/computer-organization-experiment/out.ghw +++ b/works/life/computer-organization-experiment/out.ghw diff --git a/works/life/computer-organization-experiment/out.vcd b/works/life/computer-organization-experiment/out.vcd index 5bc0ca7..a47fb22 100644 --- a/works/life/computer-organization-experiment/out.vcd +++ b/works/life/computer-organization-experiment/out.vcd @@ -1,5 +1,5 @@ $date - Sat Dec 25 16:11:16 2021 + Sun Dec 26 07:20:30 2021 $end $version GHDL v0 @@ -32,56 +32,63 @@ $var reg 1 $ clk $end $var reg 32 % pc[31:0] $end $var reg 32 & pc_to_write[31:0] $end $var reg 32 ' ins[31:0] $end -$var reg 1 ( enable_mem $end -$var reg 1 ) write_mem $end -$var reg 32 * addr[31:0] $end -$var reg 32 + mem_w[31:0] $end -$var reg 32 , mem_r[31:0] $end -$var reg 1 - write_reg $end -$var reg 5 . r1[4:0] $end -$var reg 5 / r2[4:0] $end -$var reg 5 0 w[4:0] $end -$var reg 32 1 wd[31:0] $end -$var reg 32 2 rd1[31:0] $end -$var reg 32 3 rd2[31:0] $end -$var reg 32 4 a[31:0] $end -$var reg 32 5 b[31:0] $end -$var reg 4 6 aluc[3:0] $end -$var reg 32 7 s[31:0] $end -$var reg 1 8 z $end +$var reg 32 ( mem_r_addr[31:0] $end +$var reg 32 ) mem_w_addr[31:0] $end +$var reg 32 * mem_r_data[31:0] $end +$var reg 32 + mem_w_data[31:0] $end +$var reg 1 , mem_read $end +$var reg 1 - mem_write $end +$var reg 1 . write_reg $end +$var reg 5 / r1[4:0] $end +$var reg 5 0 r2[4:0] $end +$var reg 5 1 w[4:0] $end +$var reg 32 2 wd[31:0] $end +$var reg 32 3 rd1[31:0] $end +$var reg 32 4 rd2[31:0] $end +$var reg 32 5 a[31:0] $end +$var reg 32 6 b[31:0] $end +$var reg 4 7 aluc[3:0] $end +$var reg 32 8 s[31:0] $end +$var reg 1 9 z $end $scope module pc_reg $end -$var reg 1 9 clk $end -$var reg 1 : enable $end -$var reg 32 ; w[31:0] $end -$var reg 32 < r[31:0] $end -$var reg 32 = v[31:0] $end +$var reg 1 : clk $end +$var reg 1 ; enable $end +$var reg 32 < w[31:0] $end +$var reg 32 = r[31:0] $end +$var reg 32 > v[31:0] $end $upscope $end $scope module reg $end -$var reg 1 > clk $end -$var reg 1 ? enable $end -$var reg 5 @ r1[4:0] $end -$var reg 5 A r2[4:0] $end -$var reg 5 B w[4:0] $end -$var reg 32 C wd[31:0] $end -$var reg 32 D rd1[31:0] $end -$var reg 32 E rd2[31:0] $end +$var reg 1 ? clk $end +$var reg 1 @ enable $end +$var reg 5 A r1[4:0] $end +$var reg 5 B r2[4:0] $end +$var reg 5 C w[4:0] $end +$var reg 32 D wd[31:0] $end +$var reg 32 E rd1[31:0] $end +$var reg 32 F rd2[31:0] $end $comment reg_file is not handled $end $upscope $end $scope module alu $end -$var reg 32 F a[31:0] $end -$var reg 32 G b[31:0] $end -$var reg 4 H aluc[3:0] $end -$var reg 32 I s[31:0] $end -$var reg 1 J z $end +$var reg 32 G a[31:0] $end +$var reg 32 H b[31:0] $end +$var reg 4 I aluc[3:0] $end +$var reg 32 J s[31:0] $end +$var reg 1 K z $end $upscope $end $scope module ram $end -$var reg 1 K clk $end -$var reg 32 L r[31:0] $end -$var reg 32 M w[31:0] $end -$var reg 32 N addr[31:0] $end -$var reg 1 O enable $end +$var reg 32 L r_data[31:0] $end +$var reg 32 M w_data[31:0] $end +$var reg 32 N r_addr[31:0] $end +$var reg 32 O w_addr[31:0] $end +$var reg 1 P read $end +$var reg 1 Q write $end $comment memory is not handled $end -$var reg 1 P v $end +$var reg 1 R v $end +$var reg 1 S clk $end +$scope module clock $end +$var reg 1 T clk $end +$var reg 1 U v $end +$upscope $end $upscope $end $upscope $end $upscope $end @@ -94,1018 +101,84 @@ $enddefinitions $end bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU % bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU & bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU ' -U( -0) -b00000000000000000000000000000000 * -bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU + -bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU , +b00000000000000000000000000000000 ( +b00000000000000000000000000000000 ) +bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU * +b00000000000000000000000000000000 + +0, 0- -b00000 . +0. b00000 / b00000 0 -bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 1 +b00000 1 bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 2 bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 3 -b00000000000000000000000000000000 4 +bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU 4 b00000000000000000000000000000000 5 -b0000 6 -b00000000000000000000000000000000 7 -18 -09 -1: -bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU ; +b00000000000000000000000000000000 6 +b0000 7 +b00000000000000000000000000000000 8 +19 +0: +1; bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU < -b00000000000000000000000000000000 = -0> +bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU = +b00000000000000000000000000000000 > 0? -b00000 @ +0@ b00000 A b00000 B -bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU C +b00000 C bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU D bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU E -b00000000000000000000000000000000 F +bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU F b00000000000000000000000000000000 G -b0000 H -b00000000000000000000000000000000 I -1J -0K +b00000000000000000000000000000000 H +b0000 I +b00000000000000000000000000000000 J +1K bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU L -bUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU M +b00000000000000000000000000000000 M b00000000000000000000000000000000 N -0O +b00000000000000000000000000000000 O 0P +0Q +0R +0S +0T +0U +#200000 +#2700000 +1U +#5200000 +1S +1T +0U +#7700000 +0S +0T +1U #10000000 1! 1" 1# 1$ b00000000000000000000000000000000 % -b00111100000000010000000000000000 , -b00000000000000000000000000000000 2 b00000000000000000000000000000000 3 -19 -b00000000000000000000000000000000 < -1> -b00000000000000000000000000000000 D +b00000000000000000000000000000000 4 +1: +b00000000000000000000000000000000 = +1? b00000000000000000000000000000000 E -1K -b00111100000000010000000000000000 L +b00000000000000000000000000000000 F #10100000 -b00000000000000000000000000000001 & -b00000000000000000000000000000001 ; -#11100000 -b00111100000000010000000000000000 ' -bUUUUU . -bUUUUU / -b0010 6 -bUUUUU @ -bUUUUU A -b0010 H -#11200000 -#20000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000000001 = -0> -0K -#30000000 -1! -1" -1# -1$ -b00000000000000000000000000000001 % -19 -b00000000000000000000000000000001 < -1> -1K -#30100000 -b00000000000000000000000000000010 & -b00000000000000000000000000000001 * -b00000000000000000000000000000010 ; -b00000000000000000000000000000001 N -#31100000 -1- -b00001 0 -b0000000000000000UUUUUUUUUUUUUUUU 1 -1? -b00001 B -b0000000000000000UUUUUUUUUUUUUUUU C -#40000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000000010 = -0> -0K -#50000000 -1! -1" -1# -1$ -b00000000000000000000000000000010 % -b00110100001001000000000000100000 , -19 -b00000000000000000000000000000010 < -1> -1K -b00110100001001000000000000100000 L -#50100000 -b00000000000000000000000000000011 & -b00000000000000000000000000000010 * -b00000000000000000000000000000011 ; -b00000000000000000000000000000010 N -#51100000 -b00110100001001000000000000100000 ' -#60000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000000011 = -0> -0K -#70000000 -1! -1" -1# -1$ -b00000000000000000000000000000011 % -b00100000000001010000000000000100 , -19 -b00000000000000000000000000000011 < -1> -1K -b00100000000001010000000000000100 L -#70100000 b00000000000000000000000000000100 & -b00000000000000000000000000000011 * -b00000000000000000000000000000100 ; -b00000000000000000000000000000011 N -#71100000 -b00100000000001010000000000000100 ' -0- -b00001 . -b1101 6 -0? -b00001 @ -b1101 H -#71200000 -1- -b00101 0 -b00000000000000000000000000000000 1 -b00000000000000000000000000000100 5 -b00000000000000000000000000000100 7 -08 -1? -b00101 B -b00000000000000000000000000000000 C -b00000000000000000000000000000100 G -b00000000000000000000000000000100 I -0J -#80000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000000100 = -0> -0K -#90000000 -1! -1" -1# -1$ -b00000000000000000000000000000100 % -b00001100000000000000000000011000 , -b0000000000000000UUUUUUUUUUUUUUUU 2 -19 +1, b00000000000000000000000000000100 < -1> -b0000000000000000UUUUUUUUUUUUUUUU D -1K -b00001100000000000000000000011000 L -#90100000 -b00000000000000000000000000000101 & -b00000000000000000000000000000100 * -b00000000000000000000000000000101 ; -b00000000000000000000000000000100 N -#91100000 -b00001100000000000000000000011000 ' -0- -b00000 . -b1000 6 -0? -b00000 @ -b1000 H -#91200000 -1- -b00000 0 -b00000000000000000000000000000100 1 -b0000000000000000UUUUUUUUUUUUUUUU 4 -b00000000000000000000000000011000 5 -bXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7 -X8 -1? -b00000 B -b00000000000000000000000000000100 C -b0000000000000000UUUUUUUUUUUUUUUU F -b00000000000000000000000000011000 G -bXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX I -XJ -#100000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000000101 = -0> -0K -#110000000 -1! -1" -1# -1$ -b00000000000000000000000000000101 % -b10101100100000100000000000000000 , -b00000000000000000000000000000100 2 -b00000000000000000000000000000100 3 -19 -b00000000000000000000000000000101 < -1> -b00000000000000000000000000000100 D -b00000000000000000000000000000100 E -1K -b10101100100000100000000000000000 L -#110100000 -b00000000000000000000000000000110 & -b00000000000000000000000000000101 * -b00000000000000000000000000000110 ; -b00000000000000000000000000000101 N -#111100000 -b00000000000000000000000000011000 & -b10101100100000100000000000000000 ' -b11111 0 -b00000000000000000000000000000101 1 -b00000000000000000000000000011000 ; -b11111 B -b00000000000000000000000000000101 C -#120000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000011000 = -0> -0K -#130000000 -1! -1" -1# -1$ -b00000000000000000000000000011000 % -b10001100100010010000000000000000 , -19 -b00000000000000000000000000011000 < -1> -1K -b10001100100010010000000000000000 L -#130100000 -b00000000000000000000000000011001 & -b00000000000000000000000000011000 * -b00000000000000000000000000011001 ; -b00000000000000000000000000011000 N -#131100000 -b10001100100010010000000000000000 ' -1( -0- -b00100 . -b0000 6 -0? -b00100 @ -b0000 H -#131200000 -1) -b01001 / -b00000000000000000000000000000100 4 -b00000000000000000000000000000000 5 -b00000000000000000000000000000100 7 -08 -b01001 A -b00000000000000000000000000000100 F -b00000000000000000000000000000000 G -b00000000000000000000000000000100 I -0J -1O -#131300000 -b00000000000000000000000000000100 + -b00000000000000000000000000000100 M -#140000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000011001 = -0> -0K -#150000000 -1! -1" -1# -1$ -b00000000000000000000000000011001 % -b00000000000000000000000000000100 , -b00000000000000000000000000000000 2 -b00000000000000000000000000000000 3 -19 -b00000000000000000000000000011001 < -1> -b00000000000000000000000000000000 D -b00000000000000000000000000000000 E -1K -b00000000000000000000000000000100 L -#150100000 -b00000000000000000000000000011010 & -b00000000000000000000000000011001 * -b00000000000000000000000000011010 ; -b00000000000000000000000000011001 N -#151100000 -b00000000000000000000000000000100 ' -#151200000 -b00000 / -b00000000000000000000000000000000 4 -b00000000000000000000000000000100 5 -b00000 A -b00000000000000000000000000000000 F -b00000000000000000000000000000100 G -#151300000 -b00000000000000000000000000000000 + -b00000000000000000000000000000000 M -#160000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000011010 = -0> -0K -#170000000 -1! -1" -1# -1$ -b00000000000000000000000000011010 % -b00000000000000000000000000000000 , -b00000000000000000000000000000100 3 -19 -b00000000000000000000000000011010 < -1> -b00000000000000000000000000000100 E -1K -b00000000000000000000000000000000 L -#170100000 -b00000000000000000000000000011011 & -b00000000000000000000000000011010 * -b00000000000000000000000000011011 ; -b00000000000000000000000000011010 N -#171100000 -b00000000000000000000000000000000 ' -b00000 . -b0011 6 -b00000000000000000000000000000000 7 -18 -b00000 @ -b0011 H -b00000000000000000000000000000000 I -1J -#171200000 -b00000000000000000000000000000100 + -b00000 0 -b00000000000000000000000000000000 1 -b00000000000000000000000000000000 5 -b00000 B -b00000000000000000000000000000000 C -b00000000000000000000000000000000 G -b00000000000000000000000000000100 M -#180000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000011011 = -0> -0K -#190000000 -1! -1" -1# -1$ -b00000000000000000000000000011011 % -b00000000000000000000000000000100 , -b00000000000000000000000000000100 2 -19 -b00000000000000000000000000011011 < -1> -b00000000000000000000000000000100 D -1K -b00000000000000000000000000000100 L -#190100000 -b00000000000000000000000000011100 & -b00000000000000000000000000011011 * -b00000000000000000000000000011100 ; -b00000000000000000000000000011011 N -#191100000 -b00000000000000000000000000000100 ' -#191200000 -b00000000000000000000000000000100 4 -b00000000000000000000000000000100 7 -08 -b00000000000000000000000000000100 F -b00000000000000000000000000000100 I -0J -#200000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000011100 = -0> -0K -#210000000 -1! -1" -1# -1$ -b00000000000000000000000000011100 % -19 -b00000000000000000000000000011100 < -1> -1K -#210100000 -b00000000000000000000000000011101 & -b00000000000000000000000000011100 * -b00000000000000000000000000011101 ; -b00000000000000000000000000011100 N -#211100000 -#211200000 -b00000000000000000000000000000100 1 -b00000000000000000000000000000100 C -#220000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000011101 = -0> -0K -#230000000 -1! -1" -1# -1$ -b00000000000000000000000000011101 % -19 -b00000000000000000000000000011101 < -1> -1K -#230100000 -b00000000000000000000000000011110 & -b00000000000000000000000000011101 * -b00000000000000000000000000011110 ; -b00000000000000000000000000011101 N -#231100000 -#231200000 -#240000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000011110 = -0> -0K -#250000000 -1! -1" -1# -1$ -b00000000000000000000000000011110 % -19 -b00000000000000000000000000011110 < -1> -1K -#250100000 -b00000000000000000000000000011111 & -b00000000000000000000000000011110 * -b00000000000000000000000000011111 ; -b00000000000000000000000000011110 N -#251100000 -#251200000 -#260000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000011111 = -0> -0K -#270000000 -1! -1" -1# -1$ -b00000000000000000000000000011111 % -19 -b00000000000000000000000000011111 < -1> -1K -#270100000 -b00000000000000000000000000100000 & -b00000000000000000000000000011111 * -b00000000000000000000000000100000 ; -b00000000000000000000000000011111 N -#271100000 -#271200000 -#280000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000100000 = -0> -0K -#290000000 -1! -1" -1# -1$ -b00000000000000000000000000100000 % -19 -b00000000000000000000000000100000 < -1> -1K -#290100000 -b00000000000000000000000000100001 & -b00000000000000000000000000100000 * -b00000000000000000000000000100001 ; -b00000000000000000000000000100000 N -#291100000 -#291200000 -#300000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000100001 = -0> -0K -#310000000 -1! -1" -1# -1$ -b00000000000000000000000000100001 % -19 -b00000000000000000000000000100001 < -1> -1K -#310100000 -b00000000000000000000000000100010 & -b00000000000000000000000000100001 * -b00000000000000000000000000100010 ; -b00000000000000000000000000100001 N -#311100000 -#311200000 -#320000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000100010 = -0> -0K -#330000000 -1! -1" -1# -1$ -b00000000000000000000000000100010 % -19 -b00000000000000000000000000100010 < -1> -1K -#330100000 -b00000000000000000000000000100011 & -b00000000000000000000000000100010 * -b00000000000000000000000000100011 ; -b00000000000000000000000000100010 N -#331100000 -#331200000 -#340000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000100011 = -0> -0K -#350000000 -1! -1" -1# -1$ -b00000000000000000000000000100011 % -19 -b00000000000000000000000000100011 < -1> -1K -#350100000 -b00000000000000000000000000100100 & -b00000000000000000000000000100011 * -b00000000000000000000000000100100 ; -b00000000000000000000000000100011 N -#351100000 -#351200000 -#360000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000100100 = -0> -0K -#370000000 -1! -1" -1# -1$ -b00000000000000000000000000100100 % -19 -b00000000000000000000000000100100 < -1> -1K -#370100000 -b00000000000000000000000000100101 & -b00000000000000000000000000100100 * -b00000000000000000000000000100101 ; -b00000000000000000000000000100100 N -#371100000 -#371200000 -#380000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000100101 = -0> -0K -#390000000 -1! -1" -1# -1$ -b00000000000000000000000000100101 % -19 -b00000000000000000000000000100101 < -1> -1K -#390100000 -b00000000000000000000000000100110 & -b00000000000000000000000000100101 * -b00000000000000000000000000100110 ; -b00000000000000000000000000100101 N -#391100000 -#391200000 -#400000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000100110 = -0> -0K -#410000000 -1! -1" -1# -1$ -b00000000000000000000000000100110 % -19 -b00000000000000000000000000100110 < -1> -1K -#410100000 -b00000000000000000000000000100111 & -b00000000000000000000000000100110 * -b00000000000000000000000000100111 ; -b00000000000000000000000000100110 N -#411100000 -#411200000 -#420000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000100111 = -0> -0K -#430000000 -1! -1" -1# -1$ -b00000000000000000000000000100111 % -19 -b00000000000000000000000000100111 < -1> -1K -#430100000 -b00000000000000000000000000101000 & -b00000000000000000000000000100111 * -b00000000000000000000000000101000 ; -b00000000000000000000000000100111 N -#431100000 -#431200000 -#440000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000101000 = -0> -0K -#450000000 -1! -1" -1# -1$ -b00000000000000000000000000101000 % -19 -b00000000000000000000000000101000 < -1> -1K -#450100000 -b00000000000000000000000000101001 & -b00000000000000000000000000101000 * -b00000000000000000000000000101001 ; -b00000000000000000000000000101000 N -#451100000 -#451200000 -#460000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000101001 = -0> -0K -#470000000 -1! -1" -1# -1$ -b00000000000000000000000000101001 % -19 -b00000000000000000000000000101001 < -1> -1K -#470100000 -b00000000000000000000000000101010 & -b00000000000000000000000000101001 * -b00000000000000000000000000101010 ; -b00000000000000000000000000101001 N -#471100000 -#471200000 -#480000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000101010 = -0> -0K -#490000000 -1! -1" -1# -1$ -b00000000000000000000000000101010 % -19 -b00000000000000000000000000101010 < -1> -1K -#490100000 -b00000000000000000000000000101011 & -b00000000000000000000000000101010 * -b00000000000000000000000000101011 ; -b00000000000000000000000000101010 N -#491100000 -#491200000 -#500000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000101011 = -0> -0K -#510000000 -1! -1" -1# -1$ -b00000000000000000000000000101011 % -19 -b00000000000000000000000000101011 < -1> -1K -#510100000 -b00000000000000000000000000101100 & -b00000000000000000000000000101011 * -b00000000000000000000000000101100 ; -b00000000000000000000000000101011 N -#511100000 -#511200000 -#520000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000101100 = -0> -0K -#530000000 -1! -1" -1# -1$ -b00000000000000000000000000101100 % -19 -b00000000000000000000000000101100 < -1> -1K -#530100000 -b00000000000000000000000000101101 & -b00000000000000000000000000101100 * -b00000000000000000000000000101101 ; -b00000000000000000000000000101100 N -#531100000 -#531200000 -#540000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000101101 = -0> -0K -#550000000 -1! -1" -1# -1$ -b00000000000000000000000000101101 % -19 -b00000000000000000000000000101101 < -1> -1K -#550100000 -b00000000000000000000000000101110 & -b00000000000000000000000000101101 * -b00000000000000000000000000101110 ; -b00000000000000000000000000101101 N -#551100000 -#551200000 -#560000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000101110 = -0> -0K -#570000000 -1! -1" -1# -1$ -b00000000000000000000000000101110 % -19 -b00000000000000000000000000101110 < -1> -1K -#570100000 -b00000000000000000000000000101111 & -b00000000000000000000000000101110 * -b00000000000000000000000000101111 ; -b00000000000000000000000000101110 N -#571100000 -#571200000 -#580000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000101111 = -0> -0K -#590000000 -1! -1" -1# -1$ -b00000000000000000000000000101111 % -19 -b00000000000000000000000000101111 < -1> -1K -#590100000 -b00000000000000000000000000110000 & -b00000000000000000000000000101111 * -b00000000000000000000000000110000 ; -b00000000000000000000000000101111 N -#591100000 -#591200000 -#600000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000110000 = -0> -0K -#610000000 -1! -1" -1# -1$ -b00000000000000000000000000110000 % -19 -b00000000000000000000000000110000 < -1> -1K -#610100000 -b00000000000000000000000000110001 & -b00000000000000000000000000110000 * -b00000000000000000000000000110001 ; -b00000000000000000000000000110000 N -#611100000 -#611200000 -#620000000 -0! -0" -0# -0$ -09 -b00000000000000000000000000110001 = -0> -0K -#630000000 -1! -1" -1# -1$ -b00000000000000000000000000110001 % -19 -b00000000000000000000000000110001 < -1> -1K -#630100000 -b00000000000000000000000000110010 & -b00000000000000000000000000110001 * -b00000000000000000000000000110010 ; -b00000000000000000000000000110001 N -#631100000 -#631200000 +1P +#10200000 +b00111100000000010000000000000000 * +b00111100000000010000000000000000 L +1S +1T +0U |