URL
https://opencores.org/ocsvn/sdram_ctrl/sdram_ctrl/trunk
Subversion Repositories sdram_ctrl
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 7 to Rev 8
- ↔ Reverse comparison
Rev 7 → Rev 8
/tags/V10/syn/sdram_ctrl/cb_generator.pl
File deleted
/tags/V10/syn/sdram_ctrl/hdl/sdram_ctrl.vhd
File deleted
/tags/V10/syn/sdram_ctrl/class.ptf
File deleted
/tags/V10/test_bench/pll.vhd
File deleted
/tags/V10/test_bench/old/cpu_simulator_file_based.vhd
File deleted
\ No newline at end of file
/tags/V10/test_bench/old/Hello_LED_sdram_0.dat
File deleted
/tags/V10/test_bench/old/Count_Binary_sdram_0.dat
File deleted
/tags/V10/test_bench/old/nios.dat
File deleted
\ No newline at end of file
/tags/V10/test_bench/sdram_ctrl_tb.vhd
File deleted
/tags/V10/test_bench/mt48lc4m32b2.vhd
File deleted
/tags/V10/test_bench/cpu_simulator.vhd
File deleted
\ No newline at end of file
/tags/V10/doc/sdram_ctrl.sxw
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
tags/V10/doc/sdram_ctrl.sxw
Property changes :
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: tags/V10/src/sdram_ctrl.vhd
===================================================================
--- tags/V10/src/sdram_ctrl.vhd (revision 7)
+++ tags/V10/src/sdram_ctrl.vhd (nonexistent)
@@ -1,441 +0,0 @@
-------------------------------------------------------------------
---
--- sdram_ctrl.vhd
---
--- Module Description:
--- SDRAM small&fast controller
---
---
--- To Do:
--- multichipselect support
--- configurable times
--- nios simulation support
---
--- Author(s):
--- Aleksey Kuzmenok, ntpqa@opencores.org
---
-------------------------------------------------------------------
---
--- Copyright (C) 2006 Aleksey Kuzmenok and OPENCORES.ORG
---
--- This module is free software; you can redistribute it and/or
--- modify it under the terms of the GNU Lesser General Public
--- License as published by the Free Software Foundation; either
--- version 2.1 of the License, or (at your option) any later version.
---
--- This module is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
--- Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public
--- License along with this software; if not, write to the Free Software
--- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
---
-------------------------------------------------------------------
--- Test results
--- FPGA SDRAM CLK (not less than)
--- EP1C12XXXXC8 MT48LC4M32B2TG-7:G 125 MHz
--- EP1C6XXXXC8 IS42S16100C1-7TL 125 MHz
---
-------------------------------------------------------------------
-
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-USE ieee.numeric_std.ALL;
-LIBRARY altera_mf;
-USE altera_mf.altera_mf_components.all;
-
-entity sdram_ctrl is
- generic(
- DATA_WIDTH: integer:=32;
- BANK_WIDTH: integer:=4;
- ROW_WIDTH: integer:=12;
- COLUMN_WIDTH: integer:=8;
-
- clk_MHz: integer:=120
- );
- port(
- signal clk : IN STD_LOGIC;
- signal reset : IN STD_LOGIC;
-
- -- IMPORTANT: for this Avalon(tm) interface
- -- 'Minimum Arbitration Shares'=1
- -- 'Max Pending Read Transactions'=9
- signal avs_nios_chipselect : IN STD_LOGIC;
- signal avs_nios_address : IN STD_LOGIC_VECTOR ((BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH-1) DOWNTO 0);
- signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0);
- signal avs_nios_writedata : IN STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
- signal avs_nios_write : IN STD_LOGIC;
- signal avs_nios_read : IN STD_LOGIC;
- signal avs_nios_waitrequest : OUT STD_LOGIC;
- signal avs_nios_readdata : OUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
- signal avs_nios_readdatavalid : OUT STD_LOGIC;
-
- -- global export signals
- signal sdram_cke : OUT STD_LOGIC; -- This pin has fixed state '1'
- signal sdram_ba : OUT STD_LOGIC_VECTOR ((BANK_WIDTH-1) DOWNTO 0);
- signal sdram_addr : OUT STD_LOGIC_VECTOR ((ROW_WIDTH-1) DOWNTO 0);
- signal sdram_cs_n : OUT STD_LOGIC; -- This pin has fixed state '0'
- signal sdram_ras_n : OUT STD_LOGIC;
- signal sdram_cas_n : OUT STD_LOGIC;
- signal sdram_we_n : OUT STD_LOGIC;
- signal sdram_dq : INOUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
- signal sdram_dqm : OUT STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0)
- );
-end sdram_ctrl;
-
-architecture behaviour of sdram_ctrl is
-
- CONSTANT FIFO_WIDTH: integer:=BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
-
- CONSTANT MODE: std_logic_vector(11 downto 0):="000000110000"; -- 1 word burst, CAS latency=3
- -- Only two times are configurable
- -- tINIT delay between powerup and load mode register = 100 us
- -- tREF refresh period = 15.625 us (64ms/4096rows)
- CONSTANT INIT_PAUSE_CLOCKS: integer:=(clk_MHz*10000)/91; -- 109.9 us just to be on the save side
- CONSTANT REFRESH_PERIOD_CLOCKS: integer:=(clk_MHz*1000)/65; -- 15.384 us the same purpose
- CONSTANT CAS_LATENCY: integer:=3; -- other latencies weren't been tested!
-
- COMPONENT scfifo
- GENERIC (
- add_ram_output_register : STRING;
- intended_device_family : STRING;
- lpm_numwords : NATURAL;
- lpm_showahead : STRING;
- lpm_type : STRING;
- lpm_width : NATURAL;
- lpm_widthu : NATURAL;
- overflow_checking : STRING;
- underflow_checking : STRING;
- use_eab : STRING
- );
- PORT (
- rdreq : IN STD_LOGIC ;
- empty : OUT STD_LOGIC ;
- aclr : IN STD_LOGIC ;
- clock : IN STD_LOGIC ;
- q : OUT STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
- wrreq : IN STD_LOGIC ;
- data : IN STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
- full : OUT STD_LOGIC
- );
- END COMPONENT;
-
- -- If you ask me why there are so many states, I'll answer that all times are fixed.
- -- The top speed for MT48LC4M32B2TG-7:G is 7 ns, therefore all times were based on it.
- -- tRP PRECHARGE command period = 3 clocks
- -- tRFC AUTO REFRESH period = 10 clocks
- -- tMRD LOAD MODE REGISTER command to ACTIVE or REFRESH command = 2 clocks
- -- tRCD ACTIVE to READ or WRITE delay = 3 clocks
- -- tRAS ACTIVE to PRECHARGE command = 7 clocks
- -- tRC ACTIVE to ACTIVE command period = 10 clocks
- -- tWR2 Write recovery time = 2 clocks
- type states is (
- INIT0,INIT1,INIT2,INIT3,INIT4,INIT5,INIT6,INIT7,
- INIT8,INIT9,INIT10,INIT11,INIT12,INIT13,INIT14,INIT15,
- INIT16,INIT17,INIT18,INIT19,INIT20,INIT21,INIT22,INIT23,INIT24,
- REFRESH0,REFRESH1,REFRESH2,REFRESH3,REFRESH4,REFRESH5,REFRESH6,REFRESH7,
- REFRESH8,REFRESH9,REFRESH10,REFRESH11,REFRESH12,REFRESH13,REFRESH14,
- ACTIVE0,ACTIVE1,ACTIVE2,ACTIVE3,ACTIVE4,
- IDLE,READ0,WRITE0);
- signal operation: states;
-
- signal fifo_q: std_logic_vector((FIFO_WIDTH-1) downto 0);
-
- signal init_counter: unsigned(15 downto 0):=to_unsigned(INIT_PAUSE_CLOCKS,16);
- signal refresh_counter: unsigned(15 downto 0);
- signal active_counter: unsigned(2 downto 0);
- signal active_address: unsigned((BANK_WIDTH+ROW_WIDTH-1) downto 0);
-
- signal bank: std_logic_vector((sdram_ba'length-1) downto 0);
- signal row: std_logic_vector((sdram_addr'length-1) downto 0);
- signal column: std_logic_vector((COLUMN_WIDTH-1) downto 0);
- signal be: std_logic_vector((sdram_dqm'length-1) downto 0);
- signal data: std_logic_vector((sdram_dq'length-1) downto 0);
-
- signal do_init,do_refresh,do_active,read_is_active,ready,tRCD_not_expired: std_logic:='0';
-
- signal fifo_rdreq,fifo_empty: std_logic;
-
- signal read_latency: std_logic_vector(CAS_LATENCY downto 0);
-
- signal fifo_data: std_logic_vector((FIFO_WIDTH-1) downto 0);
- signal fifo_wrreq,fifo_wrfull: std_logic;
-
- signal i_command : STD_LOGIC_VECTOR(4 downto 0);
- CONSTANT NOP: STD_LOGIC_VECTOR(4 downto 0):="10111";
- CONSTANT ACTIVE: STD_LOGIC_VECTOR(4 downto 0):="10011";
- CONSTANT READ: STD_LOGIC_VECTOR(4 downto 0):="10101";
- CONSTANT WRITE: STD_LOGIC_VECTOR(4 downto 0):="10100";
- CONSTANT PRECHARGE: STD_LOGIC_VECTOR(4 downto 0):="10010";
- CONSTANT AUTO_REFRESH: STD_LOGIC_VECTOR(4 downto 0):="10001";
- CONSTANT LOAD_MODE_REGISTER: STD_LOGIC_VECTOR(4 downto 0):="10000";
-
- signal i_address : STD_LOGIC_VECTOR((sdram_addr'length-1) DOWNTO 0);
- signal i_bank : STD_LOGIC_VECTOR((sdram_ba'length-1) DOWNTO 0);
- signal i_dqm : STD_LOGIC_VECTOR((sdram_dqm'length-1) DOWNTO 0);
- signal i_data : STD_LOGIC_VECTOR((sdram_dq'length-1) DOWNTO 0);
- attribute ALTERA_ATTRIBUTE : string;
- attribute ALTERA_ATTRIBUTE of i_command : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_address : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_bank : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_dqm : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_data : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of avs_nios_readdata : signal is "FAST_INPUT_REGISTER=ON";
-begin
- (sdram_cke,sdram_cs_n,sdram_ras_n,sdram_cas_n,sdram_we_n) <= i_command;
- sdram_addr <= i_address;
- sdram_ba <= i_bank;
- sdram_dqm <= i_dqm;
- sdram_dq <= i_data;
-
- fifo_data<=avs_nios_address & avs_nios_writedata & avs_nios_byteenable & avs_nios_write & avs_nios_read;
- fifo_wrreq<=(avs_nios_write or avs_nios_read) and avs_nios_chipselect and not fifo_wrfull;
-
- avs_nios_waitrequest<=fifo_wrfull;
-
- fifo_rdreq<=not fifo_empty and not do_refresh and not do_active and not read_is_active and ready;
-
- do_active<='0' when active_address=unsigned((fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)))) else '1';
- read_is_active<='1' when read_latency(CAS_LATENCY-1 downto 0)>"000" and fifo_q(1)='1' else '0';
- ready<='1' when operation=IDLE or operation=READ0 or operation=WRITE0 else '0';
-
- operation_machine:process(reset,clk)
- begin
- if reset='1'
- then
- operation<=INIT0;
- active_address<=(others=>'1');
- elsif rising_edge(clk)
- then
-
- bank<=fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length));
- row<=fifo_q((fifo_q'length-bank'length-1) downto (fifo_q'length-bank'length-row'length));
- column<=fifo_q((column'length+data'length+be'length+2-1) downto (data'length+be'length+2));
- data<=fifo_q((data'length+be'length+2-1) downto (be'length+2));
- be<=fifo_q((be'length+2-1) downto 2);
-
- case operation is
- when INIT0=>
- if do_init='1'
- then operation<=INIT1;row(10)<='1';
- end if;
- when INIT1=>operation<=INIT2;
- when INIT2=>operation<=INIT3;
- when INIT3=>operation<=INIT4;
- when INIT4=>operation<=INIT5;
- when INIT5=>operation<=INIT6;
- when INIT6=>operation<=INIT7;
- when INIT7=>operation<=INIT8;
- when INIT8=>operation<=INIT9;
- when INIT9=>operation<=INIT10;
- when INIT10=>operation<=INIT11;
- when INIT11=>operation<=INIT12;
- when INIT12=>operation<=INIT13;
- when INIT13=>operation<=INIT14;
- when INIT14=>operation<=INIT15;
- when INIT15=>operation<=INIT16;
- when INIT16=>operation<=INIT17;
- when INIT17=>operation<=INIT18;
- when INIT18=>operation<=INIT19;
- when INIT19=>operation<=INIT20;
- when INIT20=>operation<=INIT21;
- when INIT21=>operation<=INIT22;
- when INIT22=>operation<=INIT23;
- when INIT23=>operation<=INIT24;row<=MODE((row'length-1) downto 0);
- when INIT24=>operation<=IDLE;
-
- when REFRESH0=>operation<=REFRESH1;
- when REFRESH1=>operation<=REFRESH2;
- when REFRESH2=>operation<=REFRESH3;
- when REFRESH3=>operation<=REFRESH4;
- when REFRESH4=>operation<=REFRESH5;
- when REFRESH5=>operation<=REFRESH6;
- when REFRESH6=>operation<=REFRESH7;
- when REFRESH7=>operation<=REFRESH8;
- when REFRESH8=>operation<=REFRESH9;
- when REFRESH9=>operation<=REFRESH10;
- when REFRESH10=>operation<=REFRESH11;
- when REFRESH11=>operation<=REFRESH12;
- when REFRESH12=>operation<=REFRESH13;
- active_address<=unsigned(fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)));
- when REFRESH13=>operation<=REFRESH14;
- when REFRESH14=>operation<=IDLE;
-
- when ACTIVE0=>operation<=ACTIVE1;
- when ACTIVE1=>operation<=ACTIVE2;
- when ACTIVE2=>operation<=ACTIVE3;
- active_address<=unsigned(fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)));
- when ACTIVE3=>operation<=ACTIVE4;
- when ACTIVE4=>operation<=IDLE;
-
- when others=>
- if do_refresh='1'
- then
- if tRCD_not_expired='0' and operation=IDLE
- then operation<=REFRESH0;row(10)<='1';
- else operation<=IDLE;
- end if;
- elsif do_active='1'
- then
- if tRCD_not_expired='0' and operation=IDLE
- then operation<=ACTIVE0;row(10)<='1';
- else operation<=IDLE;
- end if;
- elsif fifo_empty='1'
- then
- operation<=IDLE;
- elsif fifo_q(1)='1' --write
- then
- if read_latency(CAS_LATENCY-1 downto 0)>"000"
- then operation<=IDLE;
- else operation<=WRITE0;
- end if;
- elsif fifo_q(0)='1' --read
- then
- operation<=READ0;
- end if;
- end case;
- end if;
- end process;
-
- control_latency:process(reset,clk)
- begin
- if reset='1'
- then
- read_latency<=(others=>'0');
- elsif rising_edge(clk)
- then
- read_latency<=std_logic_vector(unsigned(read_latency) SLL 1);
- if operation=READ0
- then read_latency(0)<='1';
- else read_latency(0)<='0';
- end if;
- end if;
- end process;
- latch_readdata:process(reset,clk)
- begin
- if reset='1'
- then
- avs_nios_readdata<=(others=>'0');
- avs_nios_readdatavalid<='0';
- elsif rising_edge(clk)
- then
- avs_nios_readdata<=sdram_dq;
- avs_nios_readdatavalid<=read_latency(CAS_LATENCY);
- end if;
- end process;
- initialization:process(reset,clk)
- begin
- if rising_edge(clk)
- then
- if init_counter>0
- then
- init_counter<=init_counter-1;
- else do_init<='1';
- end if;
- end if;
- end process;
- refreshing:process(clk,reset)
- begin
- if reset='1'
- then
- refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
- do_refresh<='0';
- elsif rising_edge(clk)
- then
- if refresh_counter=to_unsigned(0,refresh_counter'length)
- then refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
- do_refresh<='1';
- else refresh_counter<=refresh_counter-1;
- end if;
- if operation=REFRESH0 or operation=REFRESH5
- then do_refresh<='0';
- end if;
- end if;
- end process;
- active_period:process(reset,clk)
- begin
- if reset='1'
- then
- active_counter<=(others=>'0');
- tRCD_not_expired<='0';
- elsif rising_edge(clk)
- then
- if operation=ACTIVE3 or operation=REFRESH13
- then active_counter<=to_unsigned(5,active_counter'length);
- elsif active_counter>0
- then active_counter<=active_counter-1;
- end if;
- end if;
- if active_counter>0
- then tRCD_not_expired<='1';
- else tRCD_not_expired<='0';
- end if;
- end process;
- latch_controls:process(clk,reset)
- begin
- if reset='1'
- then
- i_command<=NOP;
- i_address<=(others=>'0');
- i_bank<=(others=>'0');
- i_dqm<=(others=>'0');
- i_data<=(others=>'Z');
- elsif rising_edge(clk)
- then
- i_command<=NOP;
- i_bank<=bank;
- i_address<=(others=>'0');
- i_address((column'length-1) downto 0)<=column;
- i_data<=(others=>'Z');
- i_dqm<=(others=>'0');
-
- case operation is
- when INIT1|REFRESH0|ACTIVE0 =>
- i_command<=PRECHARGE;
- i_address<=row;
- when INIT4|INIT14|REFRESH3 =>
- i_command<=AUTO_REFRESH;
- when INIT24=>
- i_command<=LOAD_MODE_REGISTER;
- i_address<=row;
- when ACTIVE3|REFRESH13 =>
- i_command<=ACTIVE;
- i_address<=row;
- when READ0 =>
- i_command<=READ;
- when WRITE0 =>
- i_command<=WRITE;
- i_dqm<=not be;
- i_data<=data;
- when OTHERS =>
- end case;
- end if;
- end process;
-
- fifo: scfifo
- GENERIC MAP (
- add_ram_output_register => "ON",
- intended_device_family => "Cyclone",
- lpm_numwords => 4,
- lpm_showahead => "ON",
- lpm_type => "scfifo",
- lpm_width => FIFO_WIDTH,
- lpm_widthu => 2,
- overflow_checking => "ON",
- underflow_checking => "ON",
- use_eab => "ON"
- )
- PORT MAP (
- rdreq => fifo_rdreq,
- aclr => reset,
- clock => clk,
- wrreq => fifo_wrreq,
- data => fifo_data,
- empty => fifo_empty,
- q => fifo_q,
- full => fifo_wrfull
- );
-end behaviour;
Index: trunk/test_bench/mt48lc4m32b2.vhd
===================================================================
--- trunk/test_bench/mt48lc4m32b2.vhd (revision 7)
+++ trunk/test_bench/mt48lc4m32b2.vhd (nonexistent)
@@ -1,1134 +0,0 @@
------------------------------------------------------------------------------------------
---
--- File Name: MT48LC4M32B2.VHD
--- Version: 2.0
--- Date: January 24th, 2002
--- Model: Behavioral
--- Simulator: Model Technology
---
--- Dependencies: None
---
--- Email: modelsupport@micron.com
--- Company: Micron Technology, Inc.
--- Part Number: MT48LC4M32A2 (1Mb x 32 x 4 Banks)
---
--- Description: Micron 128Mb SDRAM
---
--- Limitation: - Doesn't check for 4096-cycle refresh
---
--- Note: - Set simulator resolution to "ps" accuracy
---
--- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY
--- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY
--- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
--- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT.
---
--- Copyright (c) 1998 Micron Semiconductor Products, Inc.
--- All rights researved
---
--- Rev Author Date Changes
--- --- -------------------------- -------------------------------------
--- 2.0 SH 01/24/2002 - Second Release
--- Micron Technology Inc.
---
---------------------------------------------------------------------------
-
-LIBRARY IEEE;
- USE IEEE.STD_LOGIC_1164.ALL;
- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- USE IEEE.STD_LOGIC_ARITH.ALL;
-
-ENTITY mt48lc4m32b2 IS
- GENERIC (
- -- Timing Parameters for -75 (PC133) and CL = 3
- tAC : TIME := 5.4 ns;
- tHZ : TIME := 5.4 ns;
- tOH : TIME := 2.7 ns;
- tMRD : INTEGER := 2; -- 2 Clk Cycles
- tRAS : TIME := 44.0 ns;
- tRC : TIME := 66.0 ns;
- tRCD : TIME := 20.0 ns;
- tRFC : TIME := 66.0 ns;
- tRP : TIME := 20.0 ns;
- tRRD : TIME := 15.0 ns;
- tWRa : TIME := 7.5 ns; -- Auto precharge
- tWRm : TIME := 15.0 ns; -- Manual Precharge
-
- tAH : TIME := 0.8 ns;
- tAS : TIME := 1.5 ns;
- tCH : TIME := 2.5 ns;
- tCL : TIME := 2.5 ns;
- tCK : TIME := 7.5 ns;
- tDH : TIME := 0.8 ns;
- tDS : TIME := 1.5 ns;
- tCKH : TIME := 0.8 ns;
- tCKS : TIME := 1.5 ns;
- tCMH : TIME := 0.8 ns;
- tCMS : TIME := 1.5 ns;
-
- addr_bits : INTEGER := 12;
- data_bits : INTEGER := 32;
- col_bits : INTEGER := 8
- );
- PORT (
- Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z');
- Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
- Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
- Clk : IN STD_LOGIC := '0';
- Cke : IN STD_LOGIC := '1';
- Cs_n : IN STD_LOGIC := '1';
- Ras_n : IN STD_LOGIC := '1';
- Cas_n : IN STD_LOGIC := '1';
- We_n : IN STD_LOGIC := '1';
- Dqm : IN STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000"
- );
-END mt48lc4m32b2;
-
-ARCHITECTURE behave OF mt48lc4m32b2 IS
- TYPE State IS (BST, NOP, PRECH, READ, WRITE);
- TYPE Array4xI IS ARRAY (3 DOWNTO 0) OF INTEGER;
- TYPE Array4xT IS ARRAY (3 DOWNTO 0) OF TIME;
- TYPE Array4xB IS ARRAY (3 DOWNTO 0) OF STD_LOGIC;
- TYPE Array4x2BV IS ARRAY (3 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0);
- TYPE Array4xCBV IS ARRAY (4 DOWNTO 0) OF STD_LOGIC_VECTOR (Col_bits - 1 DOWNTO 0);
- TYPE Array_state IS ARRAY (4 DOWNTO 0) OF State;
- SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
- SIGNAL Active_enable, Aref_enable, Burst_term : STD_LOGIC := '0';
- SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0';
- SIGNAL Burst_length_1, Burst_length_2, Burst_length_4, Burst_length_8 : STD_LOGIC := '0';
- SIGNAL Cas_latency_1, Cas_latency_2, Cas_latency_3 : STD_LOGIC := '0';
- SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0';
- SIGNAL Write_burst_mode : STD_LOGIC := '0';
- SIGNAL Sys_clk, CkeZ : STD_LOGIC := '0';
-
-BEGIN
- -- Strip the strength
- Cs_in <= To_X01 (Cs_n);
- Ras_in <= To_X01 (Ras_n);
- Cas_in <= To_X01 (Cas_n);
- We_in <= To_X01 (We_n);
-
- -- Commands Decode
- Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in;
- Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in;
- Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in);
- Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in);
- Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in);
- Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in;
- Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in);
-
- -- Burst Length Decode
- Burst_length_1 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND NOT(Mode_reg(0));
- Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0);
- Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0));
- Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0);
-
- -- CAS Latency Decode
- Cas_latency_1 <= NOT(Mode_reg(6)) AND NOT(Mode_reg(5)) AND Mode_reg(4);
- Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4));
- Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4);
-
- -- Write Burst Mode
- Write_burst_mode <= Mode_reg(9);
-
- -- System Clock
- int_clk : PROCESS (Clk)
- BEGIN
- IF Clk'LAST_VALUE = '0' AND Clk = '1' THEN
- CkeZ <= Cke;
- END IF;
- Sys_clk <= CkeZ AND Clk;
- END PROCESS;
-
- state_register : PROCESS
- TYPE ram_type IS ARRAY (2**col_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0);
- TYPE ram_pntr IS ACCESS ram_type;
- TYPE ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF ram_pntr;
- VARIABLE Bank0 : ram_stor;
- VARIABLE Bank1 : ram_stor;
- VARIABLE Bank2 : ram_stor;
- VARIABLE Bank3 : ram_stor;
- VARIABLE Row_index, Col_index : INTEGER := 0;
- VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => '0');
-
- VARIABLE Col_addr : Array4xCBV;
- VARIABLE Bank_addr : Array4x2BV;
- VARIABLE Dqm_reg0, Dqm_reg1 : STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000";
-
- VARIABLE Bank, Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
- VARIABLE B0_row_addr, B1_row_addr, B2_row_addr, B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
- VARIABLE Col_brst : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0');
- VARIABLE Row : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
- VARIABLE Col : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0');
- VARIABLE Burst_counter : INTEGER := 0;
-
- VARIABLE Command : Array_state;
- VARIABLE Bank_precharge : Array4x2BV;
- VARIABLE A10_precharge : Array4xB := ('0' & '0' & '0' & '0');
- VARIABLE Auto_precharge : Array4xB := ('0' & '0' & '0' & '0');
- VARIABLE Read_precharge : Array4xB := ('0' & '0' & '0' & '0');
- VARIABLE Write_precharge : Array4xB := ('0' & '0' & '0' & '0');
- VARIABLE RW_interrupt_read : Array4xB := ('0' & '0' & '0' & '0');
- VARIABLE RW_interrupt_write : Array4xB := ('0' & '0' & '0' & '0');
- VARIABLE RW_interrupt_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
- VARIABLE RW_interrupt_counter : Array4xI := (0 & 0 & 0 & 0);
- VARIABLE Count_precharge : Array4xI := (0 & 0 & 0 & 0);
-
- VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0';
- VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0';
- VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1';
-
- -- Timing Check
- VARIABLE MRD_chk : INTEGER := 0;
- VARIABLE RFC_chk : TIME := 0 ns;
- VARIABLE RRD_chk : TIME := 0 ns;
- VARIABLE WR_chkm : Array4xT := (0 ns & 0 ns & 0 ns & 0 ns);
- VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns;
- VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns;
- VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns;
- VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns;
-
- -- Initialize empty rows
- PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR (1 DOWNTO 0); Row_index : INTEGER) IS
- VARIABLE i, j : INTEGER := 0;
- BEGIN
- IF Bank = "00" THEN
- IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty
- Bank0 (Row_index) := NEW ram_type; -- Open new row for access
- FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros
- FOR j IN (data_bits - 1) DOWNTO 0 LOOP
- Bank0 (Row_index) (i) (j) := '0';
- END LOOP;
- END LOOP;
- END IF;
- ELSIF Bank = "01" THEN
- IF Bank1 (Row_index) = NULL THEN
- Bank1 (Row_index) := NEW ram_type;
- FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP
- FOR j IN (data_bits - 1) DOWNTO 0 LOOP
- Bank1 (Row_index) (i) (j) := '0';
- END LOOP;
- END LOOP;
- END IF;
- ELSIF Bank = "10" THEN
- IF Bank2 (Row_index) = NULL THEN
- Bank2 (Row_index) := NEW ram_type;
- FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP
- FOR j IN (data_bits - 1) DOWNTO 0 LOOP
- Bank2 (Row_index) (i) (j) := '0';
- END LOOP;
- END LOOP;
- END IF;
- ELSIF Bank = "11" THEN
- IF Bank3 (Row_index) = NULL THEN
- Bank3 (Row_index) := NEW ram_type;
- FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP
- FOR j IN (data_bits - 1) DOWNTO 0 LOOP
- Bank3 (Row_index) (i) (j) := '0';
- END LOOP;
- END LOOP;
- END IF;
- END IF;
- END;
-
- -- Burst Counter
- PROCEDURE Burst_decode IS
- VARIABLE Col_int : INTEGER := 0;
- VARIABLE Col_vec, Col_temp : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0');
- BEGIN
- -- Advance Burst Counter
- Burst_counter := Burst_counter + 1;
-
- -- Burst Type
- IF Mode_reg (3) = '0' THEN
- Col_int := conv_integer(Col) + 1;
- Col_temp := CONV_STD_LOGIC_VECTOR(Col_int, col_bits);
- ELSIF Mode_reg (3) = '1' THEN
- Col_vec := CONV_STD_LOGIC_VECTOR(Burst_counter, col_bits);
- Col_temp (2) := Col_vec (2) XOR Col_brst (2);
- Col_temp (1) := Col_vec (1) XOR Col_brst (1);
- Col_temp (0) := Col_vec (0) XOR Col_brst (0);
- END IF;
-
- -- Burst Length
- IF Burst_length_2 = '1' THEN
- Col (0) := Col_temp (0);
- ELSIF Burst_length_4 = '1' THEN
- Col (1 DOWNTO 0) := Col_temp (1 DOWNTO 0);
- ELSIF Burst_length_8 = '1' THEN
- Col (2 DOWNTO 0) := Col_temp (2 DOWNTO 0);
- ELSE
- Col := Col_temp;
- END IF;
-
- -- Burst Read Single Write
- IF Write_burst_mode = '1' AND Data_in_enable = '1' THEN
- Data_in_enable := '0';
- END IF;
-
- -- Data counter
- IF Burst_length_1 = '1' THEN
- IF Burst_counter >= 1 THEN
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
- ELSIF Data_out_enable = '1' THEN
- Data_out_enable := '0';
- END IF;
- END IF;
- ELSIF Burst_length_2 = '1' THEN
- IF Burst_counter >= 2 THEN
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
- ELSIF Data_out_enable = '1' THEN
- Data_out_enable := '0';
- END IF;
- END IF;
- ELSIF Burst_length_4 = '1' THEN
- IF Burst_counter >= 4 THEN
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
- ELSIF Data_out_enable = '1' THEN
- Data_out_enable := '0';
- END IF;
- END IF;
- ELSIF Burst_length_8 = '1' THEN
- IF Burst_counter >= 8 THEN
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
- ELSIF Data_out_enable = '1' THEN
- Data_out_enable := '0';
- END IF;
- END IF;
- END IF;
- END;
-
- BEGIN
- WAIT ON Sys_clk;
- IF Sys_clk'event AND Sys_clk = '1' THEN
- -- Internal Pipeline
- Command(0) := Command(1);
- Command(1) := Command(2);
- Command(2) := Command(3);
- Command(3) := NOP;
-
- Col_addr(0) := Col_addr(1);
- Col_addr(1) := Col_addr(2);
- Col_addr(2) := Col_addr(3);
- Col_addr(3) := (OTHERS => '0');
-
- Bank_addr(0) := Bank_addr(1);
- Bank_addr(1) := Bank_addr(2);
- Bank_addr(2) := Bank_addr(3);
- Bank_addr(3) := "00";
-
- Bank_precharge(0) := Bank_precharge(1);
- Bank_precharge(1) := Bank_precharge(2);
- Bank_precharge(2) := Bank_precharge(3);
- Bank_precharge(3) := "00";
-
- A10_precharge(0) := A10_precharge(1);
- A10_precharge(1) := A10_precharge(2);
- A10_precharge(2) := A10_precharge(3);
- A10_precharge(3) := '0';
-
- -- Dqm pipeline for Read
- Dqm_reg0 := Dqm_reg1;
- Dqm_reg1 := Dqm;
-
- -- Read or Write with Auto Precharge Counter
- IF Auto_precharge (0) = '1' THEN
- Count_precharge (0) := Count_precharge (0) + 1;
- END IF;
- IF Auto_precharge (1) = '1' THEN
- Count_precharge (1) := Count_precharge (1) + 1;
- END IF;
- IF Auto_precharge (2) = '1' THEN
- Count_precharge (2) := Count_precharge (2) + 1;
- END IF;
- IF Auto_precharge (3) = '1' THEN
- Count_precharge (3) := Count_precharge (3) + 1;
- END IF;
-
- -- Read or Write Interrupt Counter
- IF RW_interrupt_write (0) = '1' THEN
- RW_interrupt_counter (0) := RW_interrupt_counter (0) + 1;
- END IF;
- IF RW_interrupt_write (1) = '1' THEN
- RW_interrupt_counter (1) := RW_interrupt_counter (1) + 1;
- END IF;
- IF RW_interrupt_write (2) = '1' THEN
- RW_interrupt_counter (2) := RW_interrupt_counter (2) + 1;
- END IF;
- IF RW_interrupt_write (3) = '1' THEN
- RW_interrupt_counter (3) := RW_interrupt_counter (3) + 1;
- END IF;
-
- -- tMRD Counter
- MRD_chk := MRD_chk + 1;
-
- -- Auto Refresh
- IF Aref_enable = '1' THEN
- -- Auto Refresh to Auto Refresh
- ASSERT (NOW - RFC_chk >= tRFC)
- REPORT "tRFC violation during Auto Refresh"
- SEVERITY WARNING;
-
- -- Precharge to Auto Refresh
- ASSERT ((NOW - RP_chk0 >= tRP) OR (NOW - RP_chk1 >= tRP) OR
- (NOW - RP_chk2 >= tRP) OR (NOW - RP_chk3 >= tRP))
- REPORT "tRP violation during Auto Refresh"
- SEVERITY WARNING;
-
- -- Precharge to Auto Refresh
- ASSERT (Pc_b0 ='1' AND Pc_b1 = '1' AND Pc_b2 ='1' AND Pc_b3 = '1')
- REPORT "All banks must be Precharge before Auto Refresh"
- SEVERITY WARNING;
-
- -- Load Mode Register to Auto Refresh
- ASSERT (MRD_chk >= tMRD)
- REPORT "tMRD violation during Auto Refresh"
- SEVERITY WARNING;
-
- -- Record current tRFC time
- RFC_chk := NOW;
- END IF;
-
- -- Load Mode Register
- IF Mode_reg_enable = '1' THEN
- -- Register Mode
- Mode_reg <= Addr;
-
- -- Precharge to Load Mode Register
- ASSERT (Pc_b0 ='1' AND Pc_b1 = '1' AND Pc_b2 ='1' AND Pc_b3 = '1')
- REPORT "All banks must be Precharge before Load Mode Register"
- SEVERITY WARNING;
-
- -- Precharge to Load Mode Register
- ASSERT ((NOW - RP_chk0 >= tRP) OR (NOW - RP_chk1 >= tRP) OR
- (NOW - RP_chk2 >= tRP) OR (NOW - RP_chk3 >= tRP))
- REPORT "tRP violation during Load Mode Register"
- SEVERITY WARNING;
-
- -- Auto Refresh to Load Mode Register
- ASSERT (NOW - RFC_chk >= tRFC)
- REPORT "tRFC violation during Load Mode Register"
- SEVERITY WARNING;
-
- -- Load Mode Register to Load Mode Register
- ASSERT (MRD_chk >= tMRD)
- REPORT "tMRD violation during Load Mode Register"
- SEVERITY WARNING;
-
- -- Record current tMRD time
- MRD_chk := 0;
- END IF;
-
- -- Active Block (Latch Bank and Row Address)
- IF Active_enable = '1' THEN
- -- Activate an OPEN bank can corrupt data
- ASSERT ((Ba = "00" AND Act_b0 = '0') OR (Ba = "01" AND Act_b1 = '0') OR
- (Ba = "10" AND Act_b2 = '0') OR (Ba = "11" AND Act_b3 = '0'))
- REPORT "Bank is already activated - data can be corrupted"
- SEVERITY WARNING;
-
- -- Activate Bank 0
- IF Ba = "00" AND Pc_b0 = '1' THEN
- -- Activate to Activate (same bank)
- ASSERT (NOW - RC_chk0 >= tRC)
- REPORT "tRC violation during Activate Bank 0"
- SEVERITY WARNING;
-
- -- Precharge to Activate
- ASSERT (NOW - RP_chk0 >= tRP)
- REPORT "tRP violation during Activate Bank 0"
- SEVERITY WARNING;
-
- -- Record variables for checking violation
- Act_b0 := '1';
- Pc_b0 := '0';
- B0_row_addr := Addr;
- RAS_chk0 := NOW;
- RC_chk0 := NOW;
- RCD_chk0 := NOW;
- END IF;
-
- -- Activate Bank 1
- IF Ba = "01" AND Pc_b1 = '1' THEN
- -- Activate to Activate (same bank)
- ASSERT (NOW - RC_chk1 >= tRC)
- REPORT "tRC violation during Activate Bank 1"
- SEVERITY WARNING;
-
- -- Precharge to Activate
- ASSERT (NOW - RP_chk1 >= tRP)
- REPORT "tRP violation during Activate Bank 1"
- SEVERITY WARNING;
-
- -- Record variables for checking violation
- Act_b1 := '1';
- Pc_b1 := '0';
- B1_row_addr := Addr;
- RAS_chk1 := NOW;
- RC_chk1 := NOW;
- RCD_chk1 := NOW;
- END IF;
-
- -- Activate Bank 2
- IF Ba = "10" AND Pc_b2 = '1' THEN
- -- Activate to Activate (same bank)
- ASSERT (NOW - RC_chk2 >= tRC)
- REPORT "tRC violation during Activate Bank 2"
- SEVERITY WARNING;
-
- -- Precharge to Activate
- ASSERT (NOW - RP_chk2 >= tRP)
- REPORT "tRP violation during Activate Bank 2"
- SEVERITY WARNING;
-
- -- Record variables for checking violation
- Act_b2 := '1';
- Pc_b2 := '0';
- B2_row_addr := Addr;
- RAS_chk2 := NOW;
- RC_chk2 := NOW;
- RCD_chk2 := NOW;
- END IF;
-
- -- Activate Bank 3
- IF Ba = "11" AND Pc_b3 = '1' THEN
- -- Activate to Activate (same bank)
- ASSERT (NOW - RC_chk3 >= tRC)
- REPORT "tRC violation during Activate Bank 3"
- SEVERITY WARNING;
-
- -- Precharge to Activate
- ASSERT (NOW - RP_chk3 >= tRP)
- REPORT "tRP violation during Activate Bank 3"
- SEVERITY WARNING;
-
- -- Record variables for checking violation
- Act_b3 := '1';
- Pc_b3 := '0';
- B3_row_addr := Addr;
- RAS_chk3 := NOW;
- RC_chk3 := NOW;
- RCD_chk3 := NOW;
- END IF;
-
- -- Activate to Activate (different bank)
- IF (Prev_bank /= Ba) THEN
- ASSERT (NOW - RRD_chk >= tRRD)
- REPORT "tRRD violation during Activate"
- SEVERITY WARNING;
- END IF;
-
- -- Auto Refresh to Activate
- ASSERT (NOW - RFC_chk >= tRFC)
- REPORT "tRFC violation during Activate"
- SEVERITY WARNING;
-
- -- Load Mode Register to Activate
- ASSERT (MRD_chk >= tMRD)
- REPORT "tMRD violation during Activate"
- SEVERITY WARNING;
-
- -- Record variable for checking violation
- RRD_chk := NOW;
- Prev_Bank := Ba;
- END IF;
-
- -- Precharge Block
- IF Prech_enable = '1' THEN
- -- Load Mode Register to Precharge
- ASSERT (MRD_chk >= tMRD)
- REPORT "tMRD violation during Precharge"
- SEVERITY WARNING;
-
- -- Precharge Bank 0
- IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN
- Act_b0 := '0';
- Pc_b0 := '1';
- RP_chk0 := NOW;
-
- -- Activate to Precharge
- ASSERT (NOW - RAS_chk0 >= tRAS)
- REPORT "tRAS violation during Precharge"
- SEVERITY WARNING;
-
- -- tWR violation check for Write
- ASSERT (NOW - WR_chkm(0) >= tWRm)
- REPORT "tWR violation during Precharge"
- SEVERITY WARNING;
- END IF;
-
- -- Precharge Bank 1
- IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN
- Act_b1 := '0';
- Pc_b1 := '1';
- RP_chk1 := NOW;
-
- -- Activate to Precharge
- ASSERT (NOW - RAS_chk1 >= tRAS)
- REPORT "tRAS violation during Precharge"
- SEVERITY WARNING;
-
- -- tWR violation check for Write
- ASSERT (NOW - WR_chkm(1) >= tWRm)
- REPORT "tWR violation during Precharge"
- SEVERITY WARNING;
- END IF;
-
- -- Precharge Bank 2
- IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN
- Act_b2 := '0';
- Pc_b2 := '1';
- RP_chk2 := NOW;
-
- -- Activate to Precharge
- ASSERT (NOW - RAS_chk2 >= tRAS)
- REPORT "tRAS violation during Precharge"
- SEVERITY WARNING;
-
- -- tWR violation check for Write
- ASSERT (NOW - WR_chkm(2) >= tWRm)
- REPORT "tWR violation during Precharge"
- SEVERITY WARNING;
- END IF;
-
- -- Precharge Bank 3
- IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN
- Act_b3 := '0';
- Pc_b3 := '1';
- RP_chk3 := NOW;
-
- -- Activate to Precharge
- ASSERT (NOW - RAS_chk3 >= tRAS)
- REPORT "tRAS violation during Precharge"
- SEVERITY WARNING;
-
- -- tWR violation check for Write
- ASSERT (NOW - WR_chkm(3) >= tWRm)
- REPORT "tWR violation during Precharge"
- SEVERITY WARNING;
- END IF;
-
- -- Terminate a Write Immediately (if same bank or all banks)
- IF (Data_in_enable = '1' AND (Bank = Ba OR Addr(10) = '1')) THEN
- Data_in_enable := '0';
- END IF;
-
- -- Precharge Command Pipeline for READ
- IF CAS_latency_3 = '1' THEN
- Command(2) := PRECH;
- Bank_precharge(2) := Ba;
- A10_precharge(2) := Addr(10);
- ELSIF CAS_latency_2 = '1' THEN
- Command(1) := PRECH;
- Bank_precharge(1) := Ba;
- A10_precharge(1) := Addr(10);
- END IF;
- END IF;
-
- -- Burst Terminate
- IF Burst_term = '1' THEN
- -- Terminate a Write immediately
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
- END IF;
-
- -- Terminate a Read depend on CAS Latency
- IF CAS_latency_3 = '1' THEN
- Command(2) := BST;
- ELSIF CAS_latency_2 = '1' THEN
- Command(1) := BST;
- END IF;
- END IF;
-
- -- Read Command
- IF Read_enable = '1' THEN
- -- Activate to Read
- ASSERT ((Ba="00" AND Act_b0='1') OR (Ba="01" AND Act_b1='1') OR
- (Ba="10" AND Act_b2='1') OR (Ba="11" AND Act_b3='1'))
- REPORT "Bank is not Activated for Read"
- SEVERITY WARNING;
-
- -- Activate to Read
- ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR
- (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR
- (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR
- (Ba = "11" AND NOW - RCD_chk3 >= tRCD))
- REPORT "tRCD violation during Read"
- SEVERITY WARNING;
-
- -- CAS Latency Pipeline
- IF Cas_latency_3 = '1' THEN
- Command(2) := READ;
- Col_addr (2) := Addr(col_bits - 1 DOWNTO 0);
- Bank_addr (2) := Ba;
- ELSIF Cas_latency_2 = '1' THEN
- Command(1) := READ;
- Col_addr (1) := Addr(col_bits - 1 DOWNTO 0);
- Bank_addr (1) := Ba;
- ELSIF Cas_latency_1 = '1' THEN
- Command(0) := READ;
- Col_addr (0) := Addr(col_bits - 1 DOWNTO 0);
- Bank_addr (0) := Ba;
- END IF;
-
- -- Read Terminate Write Immediately
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
- -- Interrupt a Write with Auto Precharge
- IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Write_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN
- RW_interrupt_write(CONV_INTEGER(RW_Interrupt_Bank)) := '1';
- RW_interrupt_counter (CONV_INTEGER(RW_Interrupt_Bank)) := 0;
- ASSERT FALSE REPORT "Read interrupt a Write with Auto Precharge." SEVERITY NOTE;
- END IF;
- END IF;
-
- -- Read Terminate Read after CL - 1
- IF (Data_out_enable = '1' AND ((Cas_latency_2 = '1' AND ((Burst_length_2 = '1' AND Burst_counter < 1) OR
- (Burst_length_4 = '1' AND Burst_counter < 3) OR
- (Burst_length_8 = '1' AND Burst_counter < 7))) OR
- (Cas_latency_3 = '1' AND ((Burst_length_4 = '1' AND Burst_counter < 2) OR
- (Burst_length_8 = '1' AND Burst_counter < 6))))) THEN
- -- Interrupt a Read with Auto Precharge
- IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Read_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN
- RW_interrupt_read(CONV_INTEGER(RW_Interrupt_Bank)) := '1';
- ASSERT FALSE REPORT "Read interrupt a Read with Auto Precharge." SEVERITY NOTE;
- END IF;
- END IF;
-
- -- Auto Precharge
- IF Addr(10) = '1' THEN
- Auto_precharge (CONV_INTEGER(Ba)) := '1';
- Count_precharge (CONV_INTEGER(Ba)) := 0;
- RW_Interrupt_Bank := Ba;
- Read_precharge (CONV_INTEGER(Ba)) := '1';
- END IF;
- END IF;
-
- -- Write Command
- IF Write_enable = '1' THEN
- -- Activate to Write
- ASSERT ((Ba="00" AND Act_b0='1') OR (Ba="01" AND Act_b1='1') OR
- (Ba="10" AND Act_b2='1') OR (Ba="11" AND Act_b3='1'))
- REPORT "Bank is not Activated for Write"
- SEVERITY WARNING;
-
- -- Activate to Write
- ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR
- (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR
- (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR
- (Ba = "11" AND NOW - RCD_chk3 >= tRCD))
- REPORT "tRCD violation during Write"
- SEVERITY WARNING;
-
- -- Latch write command, bank, column
- Command(0) := WRITE;
- Col_addr (0) := Addr(col_bits - 1 DOWNTO 0);
- Bank_addr (0) := Ba;
-
- -- Write Terminate Write Immediately
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
-
- -- Interrupt a Write with Auto Precharge
- IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Write_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN
- RW_interrupt_write(CONV_INTEGER(RW_Interrupt_Bank)) := '1';
- RW_interrupt_counter (CONV_INTEGER(RW_Interrupt_Bank)) := 0;
- ASSERT FALSE REPORT "Write interrupt a Write with Auto Precharge." SEVERITY NOTE;
- END IF;
- END IF;
-
- -- Write Terminate Read Immediately
- IF Data_out_enable = '1' THEN
- Data_out_enable := '0';
-
- -- Interrupt a Read with Auto Precharge
- IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Read_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN
- RW_interrupt_read(CONV_INTEGER(RW_Interrupt_Bank)) := '1';
- ASSERT FALSE REPORT "Write interrupt a Read with Auto Precharge." SEVERITY NOTE;
- END IF;
- END IF;
-
- -- Auto Precharge
- IF Addr(10) = '1' THEN
- Auto_precharge (CONV_INTEGER(Ba)) := '1';
- Count_precharge (CONV_INTEGER(Ba)) := 0;
- RW_Interrupt_Bank := Ba;
- Write_precharge (CONV_INTEGER(Ba)) := '1';
- END IF;
- END IF;
-
- -- Write with AutoPrecharge Calculation
- -- The device start internal precharge when:
- -- 1. Meet tRAS requirement
- -- and 2. tWR cycle(s) after last valid data
- -- or 3. Interrupt by a Read or Write (with or without Auto Precharge)
- --
- -- Note: Model is starting the internal precharge 1 cycle after they meet all the
- -- requirement but tRP will be compensate for the time after the 1 cycle.
- IF ((Auto_precharge(0) = '1') AND (Write_precharge(0) = '1')) THEN
- IF (((NOW - RAS_chk0 >= tRAS) AND
- (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(0) >= 1) OR
- (Burst_length_2 = '1' AND Count_precharge(0) >= 2) OR
- (Burst_length_4 = '1' AND Count_precharge(0) >= 4) OR
- (Burst_length_8 = '1' AND Count_precharge(0) >= 8))) OR
- (RW_interrupt_write(0) = '1' AND RW_interrupt_counter(0) >= 1)) THEN
- Auto_precharge(0) := '0';
- Write_precharge(0) := '0';
- RW_interrupt_write(0) := '0';
- Pc_b0 := '1';
- Act_b0 := '0';
- RP_chk0 := NOW + tWRa;
- END IF;
- END IF;
- IF ((Auto_precharge(1) = '1') AND (Write_precharge(1) = '1')) THEN
- IF (((NOW - RAS_chk1 >= tRAS) AND
- (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(1) >= 1) OR
- (Burst_length_2 = '1' AND Count_precharge(1) >= 2) OR
- (Burst_length_4 = '1' AND Count_precharge(1) >= 4) OR
- (Burst_length_8 = '1' AND Count_precharge(1) >= 8))) OR
- (RW_interrupt_write(1) = '1' AND RW_interrupt_counter(1) >= 1)) THEN
- Auto_precharge(1) := '0';
- Write_precharge(1) := '0';
- RW_interrupt_write(1) := '0';
- Pc_b1 := '1';
- Act_b1 := '0';
- RP_chk1 := NOW + tWRa;
- END IF;
- END IF;
- IF ((Auto_precharge(2) = '1') AND (Write_precharge(2) = '1')) THEN
- IF (((NOW - RAS_chk2 >= tRAS) AND
- (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(2) >= 1) OR
- (Burst_length_2 = '1' AND Count_precharge(2) >= 2) OR
- (Burst_length_4 = '1' AND Count_precharge(2) >= 4) OR
- (Burst_length_8 = '1' AND Count_precharge(2) >= 8))) OR
- (RW_interrupt_write(2) = '1' AND RW_interrupt_counter(2) >= 1)) THEN
- Auto_precharge(2) := '0';
- Write_precharge(2) := '0';
- RW_interrupt_write(2) := '0';
- Pc_b2 := '1';
- Act_b2 := '0';
- RP_chk2 := NOW + tWRa;
- END IF;
- END IF;
- IF ((Auto_precharge(3) = '1') AND (Write_precharge(3) = '1')) THEN
- IF (((NOW - RAS_chk3 >= tRAS) AND
- (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(3) >= 1) OR
- (Burst_length_2 = '1' AND Count_precharge(3) >= 2) OR
- (Burst_length_4 = '1' AND Count_precharge(3) >= 4) OR
- (Burst_length_8 = '1' AND Count_precharge(3) >= 8))) OR
- (RW_interrupt_write(0) = '1' AND RW_interrupt_counter(3) >= 1)) THEN
- Auto_precharge(3) := '0';
- Write_precharge(3) := '0';
- RW_interrupt_write(3) := '0';
- Pc_b3 := '1';
- Act_b3 := '0';
- RP_chk3 := NOW + tWRa;
- END IF;
- END IF;
-
- -- Read with AutoPrecharge Calculation
- -- The device start internal precharge when:
- -- 1. Meet minimum tRAS requirement
- -- and 2. CL - 1 cycle(s) before last valid data
- -- or 3. Interrupt by a Read or Write (with or without Auto Precharge)
- IF ((Auto_precharge(0) = '1') AND (Read_precharge(0) = '1')) THEN
- IF (((NOW - RAS_chk0 >= tRAS) AND
- ((Burst_length_1 = '1' AND Count_precharge(0) >= 1) OR
- (Burst_length_2 = '1' AND Count_precharge(0) >= 2) OR
- (Burst_length_4 = '1' AND Count_precharge(0) >= 4) OR
- (Burst_length_8 = '1' AND Count_precharge(0) >= 8))) OR
- (RW_interrupt_read(0) = '1')) THEN
- Pc_b0 := '1';
- Act_b0 := '0';
- RP_chk0 := NOW;
- Auto_precharge(0) := '0';
- Read_precharge(0) := '0';
- RW_interrupt_read(0) := '0';
- END IF;
- END IF;
- IF ((Auto_precharge(1) = '1') AND (Read_precharge(1) = '1')) THEN
- IF (((NOW - RAS_chk1 >= tRAS) AND
- ((Burst_length_1 = '1' AND Count_precharge(1) >= 1) OR
- (Burst_length_2 = '1' AND Count_precharge(1) >= 2) OR
- (Burst_length_4 = '1' AND Count_precharge(1) >= 4) OR
- (Burst_length_8 = '1' AND Count_precharge(1) >= 8))) OR
- (RW_interrupt_read(1) = '1')) THEN
- Pc_b1 := '1';
- Act_b1 := '0';
- RP_chk1 := NOW;
- Auto_precharge(1) := '0';
- Read_precharge(1) := '0';
- RW_interrupt_read(1) := '0';
- END IF;
- END IF;
- IF ((Auto_precharge(2) = '1') AND (Read_precharge(2) = '1')) THEN
- IF (((NOW - RAS_chk2 >= tRAS) AND
- ((Burst_length_1 = '1' AND Count_precharge(2) >= 1) OR
- (Burst_length_2 = '1' AND Count_precharge(2) >= 2) OR
- (Burst_length_4 = '1' AND Count_precharge(2) >= 4) OR
- (Burst_length_8 = '1' AND Count_precharge(2) >= 8))) OR
- (RW_interrupt_read(2) = '1')) THEN
- Pc_b2 := '1';
- Act_b2 := '0';
- RP_chk2 := NOW;
- Auto_precharge(2) := '0';
- Read_precharge(2) := '0';
- RW_interrupt_read(2) := '0';
- END IF;
- END IF;
- IF ((Auto_precharge(3) = '1') AND (Read_precharge(3) = '1')) THEN
- IF (((NOW - RAS_chk3 >= tRAS) AND
- ((Burst_length_1 = '1' AND Count_precharge(3) >= 1) OR
- (Burst_length_2 = '1' AND Count_precharge(3) >= 2) OR
- (Burst_length_4 = '1' AND Count_precharge(3) >= 4) OR
- (Burst_length_8 = '1' AND Count_precharge(3) >= 8))) OR
- (RW_interrupt_read(3) = '1')) THEN
- Pc_b3 := '1';
- Act_b3 := '0';
- RP_chk3 := NOW;
- Auto_precharge(3) := '0';
- Read_precharge(3) := '0';
- RW_interrupt_read(3) := '0';
- END IF;
- END IF;
-
- -- Internal Precharge or Bst
- IF Command(0) = PRECH THEN -- PRECH terminate a read if same bank or all banks
- IF Bank_precharge(0) = Bank OR A10_precharge(0) = '1' THEN
- IF Data_out_enable = '1' THEN
- Data_out_enable := '0';
- END IF;
- END IF;
- ELSIF Command(0) = BST THEN -- BST terminate a read regardless of bank
- IF Data_out_enable = '1' THEN
- Data_out_enable := '0';
- END IF;
- END IF;
-
- IF Data_out_enable = '0' THEN
- Dq <= TRANSPORT (OTHERS => 'Z') AFTER tOH;
- END IF;
-
- -- Detect Read or Write Command
- IF Command(0) = READ THEN
- Bank := Bank_addr (0);
- Col := Col_addr (0);
- Col_brst := Col_addr (0);
- IF Bank_addr (0) = "00" THEN
- Row := B0_row_addr;
- ELSIF Bank_addr (0) = "01" THEN
- Row := B1_row_addr;
- ELSIF Bank_addr (0) = "10" THEN
- Row := B2_row_addr;
- ELSE
- Row := B3_row_addr;
- END IF;
- Burst_counter := 0;
- Data_in_enable := '0';
- Data_out_enable := '1';
- ELSIF Command(0) = WRITE THEN
- Bank := Bank_addr(0);
- Col := Col_addr(0);
- Col_brst := Col_addr(0);
- IF Bank_addr (0) = "00" THEN
- Row := B0_row_addr;
- ELSIF Bank_addr (0) = "01" THEN
- Row := B1_row_addr;
- ELSIF Bank_addr (0) = "10" THEN
- Row := B2_row_addr;
- ELSE
- Row := B3_row_addr;
- END IF;
- Burst_counter := 0;
- Data_in_enable := '1';
- Data_out_enable := '0';
- END IF;
-
- -- DQ (Driver / Receiver)
- Row_index := CONV_INTEGER (Row);
- Col_index := CONV_INTEGER (Col);
-
- IF Data_in_enable = '1' THEN
- IF Dqm /= "1111" THEN
- -- Initialize Memory
- Init_mem (Bank, Row_index);
-
- -- Array Buffer
- CASE Bank IS
- WHEN "00" => Dq_temp := Bank0 (Row_index) (Col_index);
- WHEN "01" => Dq_temp := Bank1 (Row_index) (Col_index);
- WHEN "10" => Dq_temp := Bank2 (Row_index) (Col_index);
- WHEN OTHERS => Dq_temp := Bank3 (Row_index) (Col_index);
- END CASE;
-
- -- Dqm Operation
- IF Dqm (0) = '0' THEN
- Dq_temp ( 7 DOWNTO 0) := Dq ( 7 DOWNTO 0);
- END IF;
- IF Dqm (1) = '0' THEN
- Dq_temp (15 DOWNTO 8) := Dq (15 DOWNTO 8);
- END IF;
- IF Dqm (2) = '0' THEN
- Dq_temp (23 DOWNTO 16) := Dq (23 DOWNTO 16);
- END IF;
- IF Dqm (3) = '0' THEN
- Dq_temp (31 DOWNTO 24) := Dq (31 DOWNTO 24);
- END IF;
-
- -- Write to Memory
- CASE Bank IS
- WHEN "00" => Bank0 (Row_index) (Col_index) := Dq_temp;
- WHEN "01" => Bank1 (Row_index) (Col_index) := Dq_temp;
- WHEN "10" => Bank2 (Row_index) (Col_index) := Dq_temp;
- WHEN OTHERS => Bank3 (Row_index) (Col_index) := Dq_temp;
- END CASE;
-
- -- Record tWR for manual precharge
- WR_chkm(CONV_INTEGER(Bank)) := NOW;
- END IF;
-
- -- Advance Burst Counter
- Burst_decode;
-
- ELSIF Data_out_enable = '1' THEN
- IF Dqm_reg0 /= "1111" THEN
- -- Initialize Memory
- Init_mem (Bank, Row_index);
-
- -- Array Buffer
- CASE Bank IS
- WHEN "00" => Dq_temp := Bank0 (Row_index) (Col_index);
- WHEN "01" => Dq_temp := Bank1 (Row_index) (Col_index);
- WHEN "10" => Dq_temp := Bank2 (Row_index) (Col_index);
- WHEN OTHERS => Dq_temp := Bank3 (Row_index) (Col_index);
- END CASE;
-
- -- Dqm Operation
- IF Dqm_reg0 (0) = '1' THEN
- Dq_temp ( 7 DOWNTO 0) := (OTHERS => 'Z');
- END IF;
- IF Dqm_reg0 (1) = '1' THEN
- Dq_temp (15 DOWNTO 8) := (OTHERS => 'Z');
- END IF;
- IF Dqm_reg0 (2) = '1' THEN
- Dq_temp (23 DOWNTO 16) := (OTHERS => 'Z');
- END IF;
- IF Dqm_reg0 (3) = '1' THEN
- Dq_temp (31 DOWNTO 24) := (OTHERS => 'Z');
- END IF;
-
- -- Output
- Dq <= TRANSPORT Dq_temp AFTER tAC;
- ELSE
- Dq <= TRANSPORT (OTHERS => 'Z') AFTER tHZ;
- END IF;
-
- -- Advance Burst Counter
- Burst_decode;
- END IF;
- END IF;
-
- END PROCESS;
-
- -- Clock timing checks
- Clock_check : PROCESS
- VARIABLE Clk_low, Clk_high : TIME := 0 ns;
- BEGIN
- WAIT ON Clk;
- IF (Clk = '1' AND NOW >= 10 ns) THEN
- ASSERT (NOW - Clk_low >= tCL)
- REPORT "tCL violation"
- SEVERITY WARNING;
- ASSERT (NOW - Clk_high >= tCK)
- REPORT "tCK violation"
- SEVERITY WARNING;
- Clk_high := NOW;
- ELSIF (Clk = '0' AND NOW /= 0 ns) THEN
- ASSERT (NOW - Clk_high >= tCH)
- REPORT "tCH violation"
- SEVERITY WARNING;
- Clk_low := NOW;
- END IF;
- END PROCESS;
-
- -- Setup timing checks
- Setup_check : PROCESS
- BEGIN
- WAIT ON Clk;
- IF Clk = '1' THEN
- ASSERT(Cke'LAST_EVENT >= tCKS)
- REPORT "CKE Setup time violation -- tCKS"
- SEVERITY WARNING;
- ASSERT(Cs_n'LAST_EVENT >= tCMS)
- REPORT "CS# Setup time violation -- tCMS"
- SEVERITY WARNING;
- ASSERT(Cas_n'LAST_EVENT >= tCMS)
- REPORT "CAS# Setup time violation -- tCMS"
- SEVERITY WARNING;
- ASSERT(Ras_n'LAST_EVENT >= tCMS)
- REPORT "RAS# Setup time violation -- tCMS"
- SEVERITY WARNING;
- ASSERT(We_n'LAST_EVENT >= tCMS)
- REPORT "WE# Setup time violation -- tCMS"
- SEVERITY WARNING;
- ASSERT(Dqm'LAST_EVENT >= tCMS)
- REPORT "Dqm Setup time violation -- tCMS"
- SEVERITY WARNING;
- ASSERT(Addr'LAST_EVENT >= tAS)
- REPORT "ADDR Setup time violation -- tAS"
- SEVERITY WARNING;
- ASSERT(Ba'LAST_EVENT >= tAS)
- REPORT "BA Setup time violation -- tAS"
- SEVERITY WARNING;
- ASSERT(Dq'LAST_EVENT >= tDS)
- REPORT "Dq Setup time violation -- tDS"
- SEVERITY WARNING;
- END IF;
- END PROCESS;
-
- -- Hold timing checks
- Hold_check : PROCESS
- BEGIN
- WAIT ON Clk'DELAYED (tCKH), Clk'DELAYED (tCMH), Clk'DELAYED (tAH), Clk'DELAYED (tDH);
- IF Clk'DELAYED (tCKH) = '1' THEN
- ASSERT(Cke'LAST_EVENT > tCKH)
- REPORT "CKE Hold time violation -- tCKH"
- SEVERITY WARNING;
- END IF;
- IF Clk'DELAYED (tCMH) = '1' THEN
- ASSERT(Cs_n'LAST_EVENT > tCMH)
- REPORT "CS# Hold time violation -- tCMH"
- SEVERITY WARNING;
- ASSERT(Cas_n'LAST_EVENT > tCMH)
- REPORT "CAS# Hold time violation -- tCMH"
- SEVERITY WARNING;
- ASSERT(Ras_n'LAST_EVENT > tCMH)
- REPORT "RAS# Hold time violation -- tCMH"
- SEVERITY WARNING;
- ASSERT(We_n'LAST_EVENT > tCMH)
- REPORT "WE# Hold time violation -- tCMH"
- SEVERITY WARNING;
- ASSERT(Dqm'LAST_EVENT > tCMH)
- REPORT "Dqm Hold time violation -- tCMH"
- SEVERITY WARNING;
- END IF;
- IF Clk'DELAYED (tAH) = '1' THEN
- ASSERT(Addr'LAST_EVENT > tAH)
- REPORT "ADDR Hold time violation -- tAH"
- SEVERITY WARNING;
- ASSERT(Ba'LAST_EVENT > tAH)
- REPORT "BA Hold time violation -- tAH"
- SEVERITY WARNING;
- END IF;
- IF Clk'DELAYED (tDH) = '1' THEN
- ASSERT(Dq'LAST_EVENT > tDH)
- REPORT "Dq Hold time violation -- tDH"
- SEVERITY WARNING;
- END IF;
- END PROCESS;
-
-END behave;
Index: trunk/test_bench/cpu_simulator.vhd
===================================================================
--- trunk/test_bench/cpu_simulator.vhd (revision 7)
+++ trunk/test_bench/cpu_simulator.vhd (nonexistent)
@@ -1,72 +0,0 @@
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-USE ieee.numeric_std.ALL;
-
-ENTITY cpu_simulator IS
- PORT(clk, reset: in std_logic;
-
- address : out std_logic_vector(21 downto 0);
- writedata : out std_logic_vector(31 downto 0);
- byteenable : out std_logic_vector(3 downto 0);
- write : out std_logic;
- read : out std_logic;
- readdata : in std_logic_vector(31 downto 0);
- waitrequest : in std_logic;
- readdatavalid : in std_logic
- );
-END cpu_simulator;
-
-ARCHITECTURE behaviour OF cpu_simulator IS
- signal counter: unsigned(3 downto 0);
- type vector is
- record
- address: integer;
- writedata: integer;
- byteenable: std_logic_vector(3 downto 0);
- write: std_logic;
- read: std_logic;
- end record;
- type script is array(0 to (2**counter'length)-1) of vector;
- signal wave_form: script:=(
- (0,0,"1111",'1','0'),
- (1,1,"1111",'1','0'),
- (2,2,"1111",'1','0'),
- (3,3,"1111",'1','0'),
- (1024,1024,"1111",'0','1'),
- (1025,1025,"1111",'0','1'),
- (1026,1026,"1111",'0','1'),
- (1027,1027,"1111",'0','1'),
- (1024,1024,"1111",'1','0'),
- (1025,1025,"1111",'1','0'),
- (1026,1026,"1111",'1','0'),
- (1027,1027,"1111",'1','0'),
- (0,0,"1111",'0','1'),
- (1,1,"1111",'0','1'),
- (2,2,"1111",'0','1'),
- (3,3,"1111",'0','1')
- );
-BEGIN
- process(clk,reset)
- begin
- if reset='1'
- then
- counter<=(others=>'0');
- address<=(others=>'0');
- writedata<=(others=>'0');
- byteenable<=(others=>'0');
- write<='0';
- read<='0';
- elsif rising_edge(clk)
- then
- if waitrequest='0'
- then
- counter<=counter+1;
- address<=std_logic_vector(to_unsigned(wave_form(to_integer(counter)).address,address'length));
- writedata<=std_logic_vector(to_unsigned(wave_form(to_integer(counter)).writedata,writedata'length));
- byteenable<=wave_form(to_integer(counter)).byteenable;
- write<=wave_form(to_integer(counter)).write;
- read<=wave_form(to_integer(counter)).read;
- end if;
- end if;
- end process;
-END behaviour;
\ No newline at end of file
Index: trunk/test_bench/pll.vhd
===================================================================
--- trunk/test_bench/pll.vhd (revision 7)
+++ trunk/test_bench/pll.vhd (nonexistent)
@@ -1,256 +0,0 @@
--- megafunction wizard: %ALTPLL%
--- GENERATION: STANDARD
--- VERSION: WM1.0
--- MODULE: altpll
-
--- ============================================================
--- File Name: pll.vhd
--- Megafunction Name(s):
--- altpll
--- ============================================================
--- ************************************************************
--- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
---
--- 5.1 Build 213 01/19/2006 SP 1 SJ Full Version
--- ************************************************************
-
-
---Copyright (C) 1991-2006 Altera Corporation
---Your use of Altera Corporation's design tools, logic functions
---and other software and tools, and its AMPP partner logic
---functions, and any output files any of the foregoing
---(including device programming or simulation files), and any
---associated documentation or information are expressly subject
---to the terms and conditions of the Altera Program License
---Subscription Agreement, Altera MegaCore Function License
---Agreement, or other applicable license agreement, including,
---without limitation, that your use is for the sole purpose of
---programming logic devices manufactured by Altera and sold by
---Altera or its authorized distributors. Please refer to the
---applicable agreement for further details.
-
-
-LIBRARY ieee;
-USE ieee.std_logic_1164.all;
-
-LIBRARY altera_mf;
-USE altera_mf.altera_mf_components.all;
-
-ENTITY pll IS
- PORT
- (
- inclk0 : IN STD_LOGIC := '0';
- c0 : OUT STD_LOGIC ;
- e0 : OUT STD_LOGIC ;
- locked : OUT STD_LOGIC
- );
-END pll;
-
-
-ARCHITECTURE SYN OF pll IS
-
- SIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0);
- SIGNAL sub_wire1 : STD_LOGIC ;
- SIGNAL sub_wire2 : STD_LOGIC ;
- SIGNAL sub_wire3 : STD_LOGIC_VECTOR (3 DOWNTO 0);
- SIGNAL sub_wire4 : STD_LOGIC ;
- SIGNAL sub_wire5 : STD_LOGIC ;
- SIGNAL sub_wire6 : STD_LOGIC_VECTOR (1 DOWNTO 0);
- SIGNAL sub_wire7_bv : BIT_VECTOR (0 DOWNTO 0);
- SIGNAL sub_wire7 : STD_LOGIC_VECTOR (0 DOWNTO 0);
-
-
-
- COMPONENT altpll
- GENERIC (
- clk0_divide_by : NATURAL;
- clk0_duty_cycle : NATURAL;
- clk0_multiply_by : NATURAL;
- clk0_phase_shift : STRING;
- compensate_clock : STRING;
- extclk0_divide_by : NATURAL;
- extclk0_duty_cycle : NATURAL;
- extclk0_multiply_by : NATURAL;
- extclk0_phase_shift : STRING;
- inclk0_input_frequency : NATURAL;
- intended_device_family : STRING;
- invalid_lock_multiplier : NATURAL;
- lpm_type : STRING;
- operation_mode : STRING;
- pll_type : STRING;
- valid_lock_multiplier : NATURAL
- );
- PORT (
- extclk : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
- inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
- locked : OUT STD_LOGIC ;
- clk : OUT STD_LOGIC_VECTOR (5 DOWNTO 0)
- );
- END COMPONENT;
-
-BEGIN
- sub_wire7_bv(0 DOWNTO 0) <= "0";
- sub_wire7 <= To_stdlogicvector(sub_wire7_bv);
- sub_wire1 <= sub_wire0(0);
- c0 <= sub_wire1;
- locked <= sub_wire2;
- sub_wire4 <= sub_wire3(0);
- e0 <= sub_wire4;
- sub_wire5 <= inclk0;
- sub_wire6 <= sub_wire7(0 DOWNTO 0) & sub_wire5;
-
- altpll_component : altpll
- GENERIC MAP (
- clk0_divide_by => 2,
- clk0_duty_cycle => 50,
- clk0_multiply_by => 11,
- clk0_phase_shift => "0",
- compensate_clock => "CLK0",
- extclk0_divide_by => 2,
- extclk0_duty_cycle => 50,
- extclk0_multiply_by => 11,
- extclk0_phase_shift => "5682",
- inclk0_input_frequency => 41666,
- intended_device_family => "Cyclone",
- invalid_lock_multiplier => 5,
- lpm_type => "altpll",
- operation_mode => "NORMAL",
- pll_type => "AUTO",
- valid_lock_multiplier => 1
- )
- PORT MAP (
- inclk => sub_wire6,
- clk => sub_wire0,
- locked => sub_wire2,
- extclk => sub_wire3
- );
-
-
-
-END SYN;
-
--- ============================================================
--- CNX file retrieval info
--- ============================================================
--- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0"
--- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000"
--- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "0"
--- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz"
--- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low"
--- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1"
--- Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0"
--- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0"
--- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0"
--- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0"
--- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0"
--- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0"
--- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0"
--- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0"
--- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0"
--- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0"
--- Retrieval info: PRIVATE: DEVICE_FAMILY NUMERIC "11"
--- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any"
--- Retrieval info: PRIVATE: DEV_FAMILY STRING "Cyclone"
--- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1"
--- Retrieval info: PRIVATE: DIV_FACTOR6 NUMERIC "1"
--- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000"
--- Retrieval info: PRIVATE: DUTY_CYCLE6 STRING "50.00000000"
--- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0"
--- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1"
--- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0"
--- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0"
--- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575"
--- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1"
--- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "24.000"
--- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz"
--- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000"
--- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1"
--- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1"
--- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz"
--- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1"
--- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1"
--- Retrieval info: PRIVATE: LOCK_LOSS_SWITCHOVER_CHECK STRING "0"
--- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1"
--- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "504.000"
--- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0"
--- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg"
--- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT6 STRING "deg"
--- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0"
--- Retrieval info: PRIVATE: MIRROR_CLK6 STRING "0"
--- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1"
--- Retrieval info: PRIVATE: MULT_FACTOR6 NUMERIC "1"
--- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1"
--- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "132.000"
--- Retrieval info: PRIVATE: OUTPUT_FREQ6 STRING "100.000"
--- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1"
--- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE6 STRING "0"
--- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz"
--- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT6 STRING "MHz"
--- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000"
--- Retrieval info: PRIVATE: PHASE_SHIFT6 STRING "0.00000000"
--- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg"
--- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT6 STRING "deg"
--- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0"
--- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0"
--- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1"
--- Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "0"
--- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0"
--- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0"
--- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0"
--- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0"
--- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0"
--- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0"
--- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0"
--- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "0"
--- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0"
--- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0"
--- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000"
--- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz"
--- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500"
--- Retrieval info: PRIVATE: SPREAD_USE STRING "0"
--- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0"
--- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1"
--- Retrieval info: PRIVATE: STICKY_CLK6 STRING "0"
--- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1"
--- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "0"
--- Retrieval info: PRIVATE: USE_CLK0 STRING "1"
--- Retrieval info: PRIVATE: USE_CLK6 STRING "0"
--- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0"
--- Retrieval info: PRIVATE: USE_CLKENA6 STRING "0"
--- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0"
--- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
--- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "2"
--- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50"
--- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "11"
--- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0"
--- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0"
--- Retrieval info: CONSTANT: EXTCLK0_DIVIDE_BY NUMERIC "2"
--- Retrieval info: CONSTANT: EXTCLK0_DUTY_CYCLE NUMERIC "50"
--- Retrieval info: CONSTANT: EXTCLK0_MULTIPLY_BY NUMERIC "11"
--- Retrieval info: CONSTANT: EXTCLK0_PHASE_SHIFT STRING "5682"
--- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "41666"
--- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone"
--- Retrieval info: CONSTANT: INVALID_LOCK_MULTIPLIER NUMERIC "5"
--- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll"
--- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL"
--- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO"
--- Retrieval info: CONSTANT: VALID_LOCK_MULTIPLIER NUMERIC "1"
--- Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT VCC "@clk[5..0]"
--- Retrieval info: USED_PORT: @extclk 0 0 4 0 OUTPUT VCC "@extclk[3..0]"
--- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT VCC "@inclk[1..0]"
--- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT VCC "c0"
--- Retrieval info: USED_PORT: e0 0 0 0 0 OUTPUT VCC "e0"
--- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT GND "inclk0"
--- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked"
--- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0
--- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0
--- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0
--- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0
--- Retrieval info: CONNECT: e0 0 0 0 0 @extclk 0 0 1 0
--- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd TRUE FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.vhd FALSE FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL pll_waveforms.html FALSE FALSE
--- Retrieval info: GEN_FILE: TYPE_NORMAL pll_wave*.jpg FALSE FALSE
Index: trunk/test_bench/old/nios.dat
===================================================================
--- trunk/test_bench/old/nios.dat (revision 7)
+++ trunk/test_bench/old/nios.dat (nonexistent)
@@ -1 +0,0 @@
- ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ
\ No newline at end of file
Index: trunk/test_bench/old/cpu_simulator_file_based.vhd
===================================================================
--- trunk/test_bench/old/cpu_simulator_file_based.vhd (revision 7)
+++ trunk/test_bench/old/cpu_simulator_file_based.vhd (nonexistent)
@@ -1,79 +0,0 @@
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-USE ieee.numeric_std.ALL;
-
-ENTITY cpu_simulator IS
- PORT(clk, reset: in std_logic;
-
- address : out std_logic_vector(21 downto 0);
- writedata : out std_logic_vector(31 downto 0);
- byteenable : out std_logic_vector(3 downto 0);
- write : out std_logic;
- read : out std_logic;
- readdata : in std_logic_vector(31 downto 0);
- waitrequest : in std_logic;
- readdatavalid : in std_logic
- );
-END cpu_simulator;
-
-ARCHITECTURE behaviour OF cpu_simulator IS
- signal address: std_logic_vector(21 downto 0);
- signal writedata: std_logic_vector(31 downto 0);
- signal byteenable: std_logic_vector(3 downto 0);
- signal write: std_logic;
- signal read: std_logic;
-
-BEGIN
- process(clk,reset)
- variable service: std_logic_vector(7 downto 0);
- variable b0,b1,b2,b3,b4,b5,b6,b7: BYTE;
- begin
- if reset='1'
- then
- file_close(NIOS);
- file_open(NIOS, FILES_PATH&"nios.dat", READ_MODE);
- elsif rising_edge(clk)
- then
- if waitrequest='0'
- then
- if Endfile(NIOS)
- then
- file_close(NIOS);
- file_open(NIOS, FILES_PATH&"nios.dat", READ_MODE);
- else
- Read(NIOS,b0);
- Read(NIOS,b1);
- Read(NIOS,b2);
- Read(NIOS,b3);
- Read(NIOS,b4);
- Read(NIOS,b5);
- Read(NIOS,b6);
- Read(NIOS,b7);
- service:=char2std_logic_vector(b0);
- address<=service(5 downto 0)&char2std_logic_vector(b1)&char2std_logic_vector(b2);
- writedata<=char2std_logic_vector(b3)&char2std_logic_vector(b4)&char2std_logic_vector(b5)&char2std_logic_vector(b6);
- service:=char2std_logic_vector(b7);
- byteenable<=not service(7 downto 4);
- write<=service(3);
- read<=service(2);
- end if;
- end if;
- end if;
- end process;
-
- process(clk,reset)
- begin
- if reset='1'
- then
- readed<=(others=>'0');
- new_data<='0';
- elsif rising_edge(clk)
- then
- new_data<=readdatavalid;
- if readdatavalid='1'
- then
- readed<=readdata;
- end if;
- end if;
- end process;
-END behaviour;
\ No newline at end of file
Index: trunk/test_bench/old/Hello_LED_sdram_0.dat
===================================================================
--- trunk/test_bench/old/Hello_LED_sdram_0.dat (revision 7)
+++ trunk/test_bench/old/Hello_LED_sdram_0.dat (nonexistent)
@@ -1,49 +0,0 @@
-@00000000 00400034
-@00000001 08400804
-@00000002 0800683A
-@00000003 00000000
-@00000004 00000000
-@00000005 00000000
-@00000006 00000000
-@00000007 00000000
-@00000008 06C04034
-@00000009 DEC00004
-@0000000A 06800074
-@0000000B D6A03104
-@0000000C 00000340
-@0000000D DEFFFD04
-@0000000E DF000215
-@0000000F D839883A
-@00000010 00800084
-@00000011 E0800005
-@00000012 E0000045
-@00000013 E0800003
-@00000014 1080204C
-@00000015 1005003A
-@00000016 1000031E
-@00000017 E0800043
-@00000018 1080005C
-@00000019 E0800045
-@0000001A E0800043
-@0000001B 1005003A
-@0000001C 1000041E
-@0000001D E0800003
-@0000001E 1004D07A
-@0000001F E0800005
-@00000020 00000306
-@00000021 E0800003
-@00000022 1085883A
-@00000023 E0800005
-@00000024 00C04034
-@00000025 18C21004
-@00000026 E0800003
-@00000027 18800035
-@00000028 E0000115
-@00000029 E0C00117
-@0000002A 008000F4
-@0000002B 10834FC4
-@0000002C 10FFE616
-@0000002D E0800117
-@0000002E 10800044
-@0000002F E0800115
-@00000030 003FF806
Index: trunk/test_bench/old/Count_Binary_sdram_0.dat
===================================================================
--- trunk/test_bench/old/Count_Binary_sdram_0.dat (revision 7)
+++ trunk/test_bench/old/Count_Binary_sdram_0.dat (nonexistent)
@@ -1,5026 +0,0 @@
-;Count Binary
-@00000000 00820014
-@00000001 1001483A
-@00000002 10BFF804
-@00000003 00BFFD16
-@00000004 00400034
-@00000005 08407204
-@00000006 0800683A
-@00000007 00000000
-@00000008 DEFFED04
-@00000009 DFC00015
-@0000000A D8400215
-@0000000B D8800315
-@0000000C D8C00415
-@0000000D D9000515
-@0000000E D9400615
-@0000000F D9800715
-@00000010 D9C00815
-@00000011 000B307A
-@00000012 DA000915
-@00000013 DA400A15
-@00000014 DA800B15
-@00000015 DAC00C15
-@00000016 DB000D15
-@00000017 DB400E15
-@00000018 DB800F15
-@00000019 DBC01015
-@0000001A D9401115
-@0000001B EBFFFF04
-@0000001C DBC01215
-@0000001D 0009313A
-@0000001E 2880004C
-@0000001F 10000326
-@00000020 20000226
-@00000021 00000EC0
-@00000022 00000306
-@00000023 DF401215
-@00000024 E8BFFF17
-@00000025 003DA03A
-@00000026 D9401117
-@00000027 DF401217
-@00000028 DFC00017
-@00000029 2801707A
-@0000002A D8400217
-@0000002B D8800317
-@0000002C D8C00417
-@0000002D D9000517
-@0000002E D9400617
-@0000002F D9800717
-@00000030 D9C00817
-@00000031 DA000917
-@00000032 DA400A17
-@00000033 DA800B17
-@00000034 DAC00C17
-@00000035 DB000D17
-@00000036 DB400E17
-@00000037 DB800F17
-@00000038 DBC01017
-@00000039 DEC01304
-@0000003A E800083A
-@0000003B DEFFF904
-@0000003C DFC00615
-@0000003D DF000515
-@0000003E D839883A
-@0000003F 0005313A
-@00000040 E0800415
-@00000041 E0800417
-@00000042 E0800315
-@00000043 E0800317
-@00000044 E0800015
-@00000045 E0000215
-@00000046 00800044
-@00000047 E0800115
-@00000048 E0C00017
-@00000049 E0800117
-@0000004A 1884703A
-@0000004B 1005003A
-@0000004C 1000101E
-@0000004D 00C00034
-@0000004E 18D3A504
-@0000004F E0800217
-@00000050 100490FA
-@00000051 10C9883A
-@00000052 00C00034
-@00000053 18D3A504
-@00000054 E0800217
-@00000055 100490FA
-@00000056 10C5883A
-@00000057 10800104
-@00000058 20C00017
-@00000059 11000017
-@0000005A E1400217
-@0000005B 183EE83A
-@0000005C 00000706
-@0000005D E0800117
-@0000005E 1085883A
-@0000005F E0800115
-@00000060 E0800217
-@00000061 10800044
-@00000062 E0800215
-@00000063 003FE406
-@00000064 0005313A
-@00000065 E0800315
-@00000066 E0800317
-@00000067 E0800415
-@00000068 E0800417
-@00000069 E0800015
-@0000006A E0800017
-@0000006B 1005003A
-@0000006C 1000011E
-@0000006D 003FD706
-@0000006E DFC00617
-@0000006F DF000517
-@00000070 DEC00704
-@00000071 F800283A
-@00000072 06C04034
-@00000073 DEC00004
-@00000074 06800074
-@00000075 D6B38B04
-@00000076 00800034
-@00000077 1093A104
-@00000078 00C00034
-@00000079 18D42804
-@0000007A 10C00326
-@0000007B 10000015
-@0000007C 10800104
-@0000007D 10FFFD36
-@0000007E 0000DB40
-@0000007F DEFFFE04
-@00000080 DFC00115
-@00000081 DF000015
-@00000082 D839883A
-@00000083 01000034
-@00000084 210D8704
-@00000085 00005100
-@00000086 01000034
-@00000087 210D8F04
-@00000088 00005100
-@00000089 01000034
-@0000008A 210D9604
-@0000008B 00005100
-@0000008C 01000034
-@0000008D 210D9D04
-@0000008E 00005100
-@0000008F DFC00117
-@00000090 DF000017
-@00000091 DEC00204
-@00000092 F800283A
-@00000093 DEFFFF04
-@00000094 DF000015
-@00000095 D839883A
-@00000096 00C04034
-@00000097 18C21004
-@00000098 D0A01603
-@00000099 18800035
-@0000009A DF000017
-@0000009B DEC00104
-@0000009C F800283A
-@0000009D DEFFFF04
-@0000009E DF000015
-@0000009F D839883A
-@000000A0 DF000017
-@000000A1 DEC00104
-@000000A2 F800283A
-@000000A3 DEFFFE04
-@000000A4 DF000115
-@000000A5 D839883A
-@000000A6 E1000015
-@000000A7 DF000117
-@000000A8 DEC00204
-@000000A9 F800283A
-@000000AA DEFFFD04
-@000000AB DFC00215
-@000000AC DF000115
-@000000AD D839883A
-@000000AE E1000015
-@000000AF 000024C0
-@000000B0 00002740
-@000000B1 E1000017
-@000000B2 000028C0
-@000000B3 D1601603
-@000000B4 01000034
-@000000B5 210DA404
-@000000B6 00005100
-@000000B7 DFC00217
-@000000B8 DF000117
-@000000B9 DEC00304
-@000000BA F800283A
-@000000BB DEFFFA04
-@000000BC DFC00515
-@000000BD DF000415
-@000000BE D839883A
-@000000BF E1400115
-@000000C0 E1000005
-@000000C1 E0800003
-@000000C2 108018D8
-@000000C3 1000201E
-@000000C4 D0A01717
-@000000C5 E0800215
-@000000C6 E0C00217
-@000000C7 188000A0
-@000000C8 1000101E
-@000000C9 E0C00217
-@000000CA 188000C8
-@000000CB 1000041E
-@000000CC E0C00217
-@000000CD 18800060
-@000000CE 1000081E
-@000000CF 00001106
-@000000D0 E0C00217
-@000000D1 18800120
-@000000D2 1000081E
-@000000D3 E0C00217
-@000000D4 18800220
-@000000D5 1000081E
-@000000D6 00000A06
-@000000D7 000024C0
-@000000D8 00003106
-@000000D9 00002740
-@000000DA 00002F06
-@000000DB E1000117
-@000000DC 000028C0
-@000000DD 00002C06
-@000000DE E1000117
-@000000DF 00002A80
-@000000E0 00002906
-@000000E1 E1000117
-@000000E2 00002A80
-@000000E3 00002606
-@000000E4 D0A01717
-@000000E5 E0800315
-@000000E6 E0C00317
-@000000E7 188000A0
-@000000E8 1000131E
-@000000E9 E0C00317
-@000000EA 188000C8
-@000000EB 1000041E
-@000000EC E0C00317
-@000000ED 18800060
-@000000EE 1000081E
-@000000EF 00001A06
-@000000F0 E0C00317
-@000000F1 18800120
-@000000F2 10000E1E
-@000000F3 E0C00317
-@000000F4 18800220
-@000000F5 1000101E
-@000000F6 00001306
-@000000F7 01000034
-@000000F8 210DA604
-@000000F9 00005100
-@000000FA D0201715
-@000000FB 00000E06
-@000000FC 01000034
-@000000FD 210DA904
-@000000FE 00005100
-@000000FF D0201715
-@00000100 00000906
-@00000101 01000034
-@00000102 210DAC04
-@00000103 00005100
-@00000104 D0201715
-@00000105 00000406
-@00000106 01000034
-@00000107 210DAF04
-@00000108 00005100
-@00000109 D0201715
-@0000010A DFC00517
-@0000010B DF000417
-@0000010C DEC00604
-@0000010D F800283A
-@0000010E DEFFFB04
-@0000010F DFC00415
-@00000110 DF000315
-@00000111 D839883A
-@00000112 D0201605
-@00000113 00001FC0
-@00000114 010000B4
-@00000115 2121A804
-@00000116 0000E6C0
-@00000117 D0A01717
-@00000118 1005003A
-@00000119 1000041E
-@0000011A 010018C4
-@0000011B E1400217
-@0000011C 00002EC0
-@0000011D 00000206
-@0000011E E1000217
-@0000011F 00002A80
-@00000120 D0A01603
-@00000121 10803FD8
-@00000122 10001D1E
-@00000123 01000034
-@00000124 210DB204
-@00000125 00005100
-@00000126 D0201715
-@00000127 E0000115
-@00000128 E0000015
-@00000129 E0800017
-@0000012A 10801188
-@0000012B 1000131E
-@0000012C 01000034
-@0000012D 210DB504
-@0000012E 00005100
-@0000012F D0A01717
-@00000130 1005003A
-@00000131 1000061E
-@00000132 01000034
-@00000133 210DB604
-@00000134 00005100
-@00000135 01001DC4
-@00000136 E1400217
-@00000137 00002EC0
-@00000138 010000B4
-@00000139 2121A804
-@0000013A 0000E6C0
-@0000013B E0800017
-@0000013C 10800044
-@0000013D E0800015
-@0000013E 003FEA06
-@0000013F 00001FC0
-@00000140 D0A01603
-@00000141 10800044
-@00000142 D0A01605
-@00000143 003FD006
-@00000144 DEFFFC04
-@00000145 DFC00015
-@00000146 D9400115
-@00000147 D9800215
-@00000148 D9C00315
-@00000149 D0A00017
-@0000014A 200B883A
-@0000014B D9800104
-@0000014C 11000117
-@0000014D 00800034
-@0000014E 1082C604
-@0000014F 20800115
-@00000150 0000AF40
-@00000151 DFC00017
-@00000152 DEC00404
-@00000153 F800283A
-@00000154 DEFFFB04
-@00000155 DC000315
-@00000156 DC400215
-@00000157 DC800115
-@00000158 DFC00415
-@00000159 D9800005
-@0000015A 2025883A
-@0000015B 2823883A
-@0000015C 3C3FFFC4
-@0000015D 01C00A0E
-@0000015E 88C00117
-@0000015F 9009883A
-@00000160 880B883A
-@00000161 D80D883A
-@00000162 01C00044
-@00000163 183EE83A
-@00000164 8007883A
-@00000165 843FFFC4
-@00000166 1000081E
-@00000167 00FFF616
-@00000168 0005883A
-@00000169 DFC00417
-@0000016A DC000317
-@0000016B DC400217
-@0000016C DC800117
-@0000016D DEC00504
-@0000016E F800283A
-@0000016F 00BFFFC4
-@00000170 DFC00417
-@00000171 DC000317
-@00000172 DC400217
-@00000173 DC800117
-@00000174 DEC00504
-@00000175 F800283A
-@00000176 DEFFEC04
-@00000177 DF001215
-@00000178 DC001115
-@00000179 DC401015
-@0000017A DC800F15
-@0000017B DD000D15
-@0000017C DD800B15
-@0000017D DDC00A15
-@0000017E DFC01315
-@0000017F DCC00E15
-@00000180 DD400C15
-@00000181 30800003
-@00000182 202F883A
-@00000183 2829883A
-@00000184 1021883A
-@00000185 D9C00215
-@00000186 34800044
-@00000187 D8000315
-@00000188 D8000415
-@00000189 D8000515
-@0000018A D8000615
-@0000018B 0039883A
-@0000018C D8000715
-@0000018D D8000815
-@0000018E 002D883A
-@0000018F 0023883A
-@00000190 1000061E
-@00000191 00002206
-@00000192 88002E26
-@00000193 90800003
-@00000194 94800044
-@00000195 1021883A
-@00000196 10001D26
-@00000197 01C00044
-@00000198 89C03626
-@00000199 3C7FF80E
-@0000019A 00800084
-@0000019B 88BFF71E
-@0000019C 81003FCC
-@0000019D 2100201C
-@0000019E 213FE004
-@0000019F 00800B84
-@000001A0 20803826
-@000001A1 817FF404
-@000001A2 28C03FCC
-@000001A3 00800244
-@000001A4 10C03636
-@000001A5 D8C00617
-@000001A6 2821883A
-@000001A7 18005916
-@000001A8 D9000617
-@000001A9 01400284
-@000001AA 0000D8C0
-@000001AB 80C03FCC
-@000001AC 18C0201C
-@000001AD 18FFE004
-@000001AE 10C5883A
-@000001AF D8800615
-@000001B0 90800003
-@000001B1 94800044
-@000001B2 1021883A
-@000001B3 103FE31E
-@000001B4 B005883A
-@000001B5 DFC01317
-@000001B6 DF001217
-@000001B7 DC001117
-@000001B8 DC401017
-@000001B9 DC800F17
-@000001BA DCC00E17
-@000001BB DD000D17
-@000001BC DD400C17
-@000001BD DD800B17
-@000001BE DDC00A17
-@000001BF DEC01404
-@000001C0 F800283A
-@000001C1 80C03FCC
-@000001C2 18C0201C
-@000001C3 18FFE004
-@000001C4 00800944
-@000001C5 18802026
-@000001C6 A0C00117
-@000001C7 B809883A
-@000001C8 DC000005
-@000001C9 A00B883A
-@000001CA D80D883A
-@000001CB 183EE83A
-@000001CC 1000E81E
-@000001CD B5800044
-@000001CE 003FC406
-@000001CF 81003FCC
-@000001D0 2100201C
-@000001D1 213FE004
-@000001D2 00800C04
-@000001D3 20801C26
-@000001D4 00800944
-@000001D5 20801D26
-@000001D6 00800B84
-@000001D7 04400084
-@000001D8 20BFC81E
-@000001D9 D8000615
-@000001DA 003FB806
-@000001DB 00801B04
-@000001DC 20802126
-@000001DD 20FFEA04
-@000001DE 00800804
-@000001DF 10C01C36
-@000001E0 180490BA
-@000001E1 00C00034
-@000001E2 18CDBA04
-@000001E3 10C5883A
-@000001E4 11000017
-@000001E5 2000683A
-@000001E6 00BFFFC4
-@000001E7 07000284
-@000001E8 3823883A
-@000001E9 D9C00715
-@000001EA D8800515
-@000001EB D8000315
-@000001EC D8000415
-@000001ED D8000815
-@000001EE D8800615
-@000001EF 003FA306
-@000001F0 DC400315
-@000001F1 04400084
-@000001F2 003FA006
-@000001F3 A0C00117
-@000001F4 B809883A
-@000001F5 DC000045
-@000001F6 A00B883A
-@000001F7 D9800044
-@000001F8 880F883A
-@000001F9 183EE83A
-@000001FA 1000BA1E
-@000001FB B46D883A
-@000001FC 0023883A
-@000001FD 003F9506
-@000001FE 00800044
-@000001FF D8800415
-@00000200 003F9206
-@00000201 D8800517
-@00000202 1000B416
-@00000203 D9000517
-@00000204 01400284
-@00000205 0000D8C0
-@00000206 D8800515
-@00000207 D8C00517
-@00000208 80803FCC
-@00000209 1080201C
-@0000020A 10BFE004
-@0000020B 1887883A
-@0000020C D8C00515
-@0000020D 003F8506
-@0000020E 00C00044
-@0000020F D8000715
-@00000210 07000404
-@00000211 D8C00815
-@00000212 D8800717
-@00000213 D8000915
-@00000214 1007003A
-@00000215 D8800217
-@00000216 15400017
-@00000217 10800104
-@00000218 D8800215
-@00000219 1800011E
-@0000021A A8009E16
-@0000021B 04C00044
-@0000021C A821883A
-@0000021D 9823883A
-@0000021E 00000506
-@0000021F 9809883A
-@00000220 E00B883A
-@00000221 0000D8C0
-@00000222 1027883A
-@00000223 8C400044
-@00000224 8009883A
-@00000225 E00B883A
-@00000226 0000D6C0
-@00000227 1021883A
-@00000228 103FF61E
-@00000229 D8800517
-@0000022A D8C00317
-@0000022B 1445C83A
-@0000022C D8800515
-@0000022D 18006F26
-@0000022E D8800917
-@0000022F 10000D26
-@00000230 A0C00117
-@00000231 00800B44
-@00000232 D8800085
-@00000233 B809883A
-@00000234 A00B883A
-@00000235 D9800084
-@00000236 01C00044
-@00000237 183EE83A
-@00000238 10007C1E
-@00000239 D8C00517
-@0000023A B5800044
-@0000023B 18FFFFC4
-@0000023C D8C00515
-@0000023D D9C00517
-@0000023E B809883A
-@0000023F A00B883A
-@00000240 01800C04
-@00000241 00005500
-@00000242 1000721E
-@00000243 D8800517
-@00000244 B0AD883A
-@00000245 983FB626
-@00000246 A809883A
-@00000247 980B883A
-@00000248 0000D6C0
-@00000249 11000C04
-@0000024A 20C03FCC
-@0000024B 00800E44
-@0000024C 10C0042E
-@0000024D D8800817
-@0000024E 190001C4
-@0000024F 1000011E
-@00000250 190009C4
-@00000251 A0C00117
-@00000252 A00B883A
-@00000253 D9000105
-@00000254 D9800104
-@00000255 B809883A
-@00000256 01C00044
-@00000257 183EE83A
-@00000258 10005C1E
-@00000259 A809883A
-@0000025A 980B883A
-@0000025B 0000D7C0
-@0000025C 9809883A
-@0000025D E00B883A
-@0000025E 102B883A
-@0000025F 0000D6C0
-@00000260 1027883A
-@00000261 B5800044
-@00000262 003FE206
-@00000263 D8800517
-@00000264 B809883A
-@00000265 A00B883A
-@00000266 01800804
-@00000267 11FFFFC4
-@00000268 00005500
-@00000269 10004B1E
-@0000026A D8800217
-@0000026B A2000117
-@0000026C B809883A
-@0000026D 10C00017
-@0000026E 10800104
-@0000026F A00B883A
-@00000270 D8C00145
-@00000271 D8C00517
-@00000272 D9800144
-@00000273 01C00044
-@00000274 D8800215
-@00000275 1DA1883A
-@00000276 403EE83A
-@00000277 10003D1E
-@00000278 802D883A
-@00000279 0023883A
-@0000027A 003F1806
-@0000027B 07000404
-@0000027C D8000715
-@0000027D 003F9406
-@0000027E D8000715
-@0000027F 003F9206
-@00000280 D8800217
-@00000281 14400017
-@00000282 10C00104
-@00000283 D8C00215
-@00000284 8809883A
-@00000285 0000BEC0
-@00000286 1021883A
-@00000287 D8800517
-@00000288 B809883A
-@00000289 A00B883A
-@0000028A 1427C83A
-@0000028B 01800804
-@0000028C 980F883A
-@0000028D 00005500
-@0000028E 1000261E
-@0000028F A0C00117
-@00000290 880D883A
-@00000291 B809883A
-@00000292 A00B883A
-@00000293 800F883A
-@00000294 B4ED883A
-@00000295 183EE83A
-@00000296 10001E1E
-@00000297 B42D883A
-@00000298 0023883A
-@00000299 003EF906
-@0000029A 07000204
-@0000029B D8000715
-@0000029C 003F7506
-@0000029D D8C00917
-@0000029E 1821003A
-@0000029F 8000031E
-@000002A0 D8800517
-@000002A1 10BFFFC4
-@000002A2 D8800515
-@000002A3 D9C00517
-@000002A4 B809883A
-@000002A5 A00B883A
-@000002A6 01800804
-@000002A7 00005500
-@000002A8 10000C1E
-@000002A9 D8C00517
-@000002AA B0ED883A
-@000002AB 803F991E
-@000002AC A0C00117
-@000002AD 00800B44
-@000002AE D88000C5
-@000002AF B809883A
-@000002B0 A00B883A
-@000002B1 D98000C4
-@000002B2 01C00044
-@000002B3 183EE83A
-@000002B4 103FAC26
-@000002B5 00BFFFC4
-@000002B6 003EFE06
-@000002B7 D8000515
-@000002B8 003F4E06
-@000002B9 00C00044
-@000002BA 056BC83A
-@000002BB D8C00915
-@000002BC 003F5E06
-@000002BD 2013883A
-@000002BE D1200017
-@000002BF 2807883A
-@000002C0 300F883A
-@000002C1 480B883A
-@000002C2 180D883A
-@000002C3 02000034
-@000002C4 42017604
-@000002C5 4000683A
-@000002C6 DEFFFA04
-@000002C7 DC400315
-@000002C8 DC800215
-@000002C9 DCC00115
-@000002CA DFC00515
-@000002CB DC000415
-@000002CC DD000015
-@000002CD 28C0000B
-@000002CE 2027883A
-@000002CF 2825883A
-@000002D0 1804D0FA
-@000002D1 3023883A
-@000002D2 013FFFC4
-@000002D3 1080004C
-@000002D4 10001B26
-@000002D5 2940008B
-@000002D6 28BFFFCC
-@000002D7 10A0001C
-@000002D8 10A00004
-@000002D9 10001316
-@000002DA 3821883A
-@000002DB 05010004
-@000002DC 01C00316
-@000002DD 00001B06
-@000002DE 04001A0E
-@000002DF 9140008B
-@000002E0 297FFFCC
-@000002E1 2960001C
-@000002E2 880D883A
-@000002E3 9809883A
-@000002E4 29600004
-@000002E5 800F883A
-@000002E6 A400010E
-@000002E7 01C10004
-@000002E8 0000C0C0
-@000002E9 80A1C83A
-@000002EA 88A3883A
-@000002EB 00BFF216
-@000002EC 90C0000B
-@000002ED 18801014
-@000002EE 9080000D
-@000002EF 013FFFC4
-@000002F0 2005883A
-@000002F1 DFC00517
-@000002F2 DC000417
-@000002F3 DC400317
-@000002F4 DC800217
-@000002F5 DCC00117
-@000002F6 DD000017
-@000002F7 DEC00604
-@000002F8 F800283A
-@000002F9 0009883A
-@000002FA 003FF506
-@000002FB 20800007
-@000002FC 2007883A
-@000002FD 10000326
-@000002FE 21000044
-@000002FF 20800007
-@00000300 103FFD1E
-@00000301 20C5C83A
-@00000302 F800283A
-@00000303 DEFFFE04
-@00000304 DC000015
-@00000305 2021883A
-@00000306 2809883A
-@00000307 300B883A
-@00000308 380D883A
-@00000309 DFC00115
-@0000030A D0201815
-@0000030B 0000E980
-@0000030C 1007883A
-@0000030D 00BFFFC4
-@0000030E 18800526
-@0000030F 1805883A
-@00000310 DFC00117
-@00000311 DC000017
-@00000312 DEC00204
-@00000313 F800283A
-@00000314 D0A01817
-@00000315 103FF926
-@00000316 80800315
-@00000317 1805883A
-@00000318 DFC00117
-@00000319 DC000017
-@0000031A DEC00204
-@0000031B F800283A
-@0000031C 00800044
-@0000031D 000F883A
-@0000031E 2900082E
-@0000031F 28000716
-@00000320 294B883A
-@00000321 1085883A
-@00000322 29000E2E
-@00000323 1007003A
-@00000324 1800081E
-@00000325 283FFA0E
-@00000326 1800061E
-@00000327 21400236
-@00000328 2149C83A
-@00000329 388EB03A
-@0000032A 1004D07A
-@0000032B 280AD07A
-@0000032C 103FFA1E
-@0000032D 3000011E
-@0000032E 3809883A
-@0000032F 2005883A
-@00000330 F800283A
-@00000331 1007003A
-@00000332 183FF426
-@00000333 003FF906
-@00000334 DEFFFE04
-@00000335 DC000015
-@00000336 DFC00115
-@00000337 000D883A
-@00000338 0021883A
-@00000339 20000816
-@0000033A 28000A16
-@0000033B 0000C700
-@0000033C 80000126
-@0000033D 0085C83A
-@0000033E DFC00117
-@0000033F DC000017
-@00000340 DEC00204
-@00000341 F800283A
-@00000342 0109C83A
-@00000343 0021003A
-@00000344 283FF60E
-@00000345 014BC83A
-@00000346 8021003A
-@00000347 003FF306
-@00000348 DEFFFE04
-@00000349 DC000015
-@0000034A DFC00115
-@0000034B 01800044
-@0000034C 0021883A
-@0000034D 20000816
-@0000034E 28000A16
-@0000034F 0000C700
-@00000350 80000126
-@00000351 0085C83A
-@00000352 DFC00117
-@00000353 DC000017
-@00000354 DEC00204
-@00000355 F800283A
-@00000356 0109C83A
-@00000357 3021883A
-@00000358 283FF60E
-@00000359 014BC83A
-@0000035A 003FF406
-@0000035B 000D883A
-@0000035C 02000034
-@0000035D 42031C04
-@0000035E 4000683A
-@0000035F 01800044
-@00000360 02000034
-@00000361 42031C04
-@00000362 4000683A
-@00000363 0007883A
-@00000364 20000626
-@00000365 2080004C
-@00000366 2008D07A
-@00000367 10000126
-@00000368 1947883A
-@00000369 294B883A
-@0000036A 203FFA1E
-@0000036B 1805883A
-@0000036C F800283A
-@0000036D DEFFFD04
-@0000036E DFC00215
-@0000036F DF000115
-@00000370 D839883A
-@00000371 E0000015
-@00000372 000170FA
-@00000373 00800044
-@00000374 1001703A
-@00000375 E0000015
-@00000376 0000E200
-@00000377 01000034
-@00000378 210DDB04
-@00000379 01400034
-@0000037A 294DDB04
-@0000037B 01800034
-@0000037C 318DDB04
-@0000037D 0001F540
-@0000037E 0001DC80
-@0000037F 01000034
-@00000380 21078804
-@00000381 000283C0
-@00000382 D1200117
-@00000383 D1600217
-@00000384 D1A00317
-@00000385 00004380
-@00000386 1009883A
-@00000387 00028D80
-@00000388 DEFFFE04
-@00000389 DFC00115
-@0000038A DF000015
-@0000038B D839883A
-@0000038C 01004034
-@0000038D 21020004
-@0000038E 01400044
-@0000038F 0180FA04
-@00000390 00019880
-@00000391 01000034
-@00000392 210DFD04
-@00000393 01404034
-@00000394 29421404
-@00000395 01800404
-@00000396 00018600
-@00000397 DFC00117
-@00000398 DF000017
-@00000399 DEC00204
-@0000039A F800283A
-@0000039B DEFFFD04
-@0000039C DFC00215
-@0000039D DF000115
-@0000039E D839883A
-@0000039F E1000015
-@000003A0 E1000017
-@000003A1 0001B500
-@000003A2 DFC00217
-@000003A3 DF000117
-@000003A4 DEC00304
-@000003A5 F800283A
-@000003A6 DEFFF704
-@000003A7 DFC00815
-@000003A8 DF000715
-@000003A9 D839883A
-@000003AA E1000015
-@000003AB E1400115
-@000003AC E1800215
-@000003AD E0800017
-@000003AE 1004803A
-@000003AF 1000091E
-@000003B0 E1000017
-@000003B1 01400304
-@000003B2 0000D8C0
-@000003B3 1007883A
-@000003B4 00800034
-@000003B5 10921F04
-@000003B6 1887883A
-@000003B7 E0C00615
-@000003B8 00000106
-@000003B9 E0000615
-@000003BA E0800617
-@000003BB E0800315
-@000003BC E0800317
-@000003BD 1005003A
-@000003BE 1000241E
-@000003BF E0800317
-@000003C0 10800217
-@000003C1 108000CC
-@000003C2 1005003A
-@000003C3 10001A1E
-@000003C4 E0800317
-@000003C5 10800017
-@000003C6 10800617
-@000003C7 1005003A
-@000003C8 1000151E
-@000003C9 E0800317
-@000003CA 10800017
-@000003CB 10800617
-@000003CC E1000317
-@000003CD E1400117
-@000003CE E1800217
-@000003CF 103EE83A
-@000003D0 E0800415
-@000003D1 E0800417
-@000003D2 1004403A
-@000003D3 1000071E
-@000003D4 0000FB80
-@000003D5 E0C00417
-@000003D6 00C7C83A
-@000003D7 10C00015
-@000003D8 00BFFFC4
-@000003D9 E0800515
-@000003DA 00000E06
-@000003DB E0800417
-@000003DC E0800515
-@000003DD 00000B06
-@000003DE 0000FB80
-@000003DF 1007883A
-@000003E0 00800344
-@000003E1 18800015
-@000003E2 00000406
-@000003E3 0000FB80
-@000003E4 1007883A
-@000003E5 00801444
-@000003E6 18800015
-@000003E7 00BFFFC4
-@000003E8 E0800515
-@000003E9 E0800517
-@000003EA DFC00817
-@000003EB DF000717
-@000003EC DEC00904
-@000003ED F800283A
-@000003EE DEFFFD04
-@000003EF DFC00215
-@000003F0 DF000115
-@000003F1 D839883A
-@000003F2 D0A00917
-@000003F3 1005003A
-@000003F4 1000041E
-@000003F5 D0A00917
-@000003F6 103EE83A
-@000003F7 E0800015
-@000003F8 00000206
-@000003F9 D0A01804
-@000003FA E0800015
-@000003FB E0800017
-@000003FC DFC00217
-@000003FD DF000117
-@000003FE DEC00304
-@000003FF F800283A
-@00000400 DEFFF204
-@00000401 DFC00D15
-@00000402 DF000C15
-@00000403 D839883A
-@00000404 E1000015
-@00000405 E1400115
-@00000406 E1800215
-@00000407 E0800017
-@00000408 10800017
-@00000409 E0800315
-@0000040A E0800117
-@0000040B E0800415
-@0000040C E0000715
-@0000040D E0800217
-@0000040E 10800050
-@0000040F 10004D1E
-@00000410 E0800317
-@00000411 10801417
-@00000412 E0800815
-@00000413 E0800317
-@00000414 10801517
-@00000415 E0800915
-@00000416 E0C00817
-@00000417 E0800917
-@00000418 18800536
-@00000419 E0800817
-@0000041A E0C00917
-@0000041B 10C5C83A
-@0000041C E0800615
-@0000041D 00000406
-@0000041E 00820004
-@0000041F E0C00917
-@00000420 10C5C83A
-@00000421 E0800615
-@00000422 E0800617
-@00000423 1004C03A
-@00000424 1000011E
-@00000425 00001E06
-@00000426 E0C00217
-@00000427 E0800617
-@00000428 1880022E
-@00000429 E0800217
-@0000042A E0800615
-@0000042B E0C00317
-@0000042C E0800917
-@0000042D 1885883A
-@0000042E 11401804
-@0000042F E1000417
-@00000430 E1800617
-@00000431 00030C00
-@00000432 E0C00417
-@00000433 E0800617
-@00000434 1885883A
-@00000435 E0800415
-@00000436 E0C00217
-@00000437 E0800617
-@00000438 1885C83A
-@00000439 E0800215
-@0000043A E1000317
-@0000043B E0C00917
-@0000043C E0800617
-@0000043D 1885883A
-@0000043E 1081FFCC
-@0000043F 20801515
-@00000440 E0800217
-@00000441 10800050
-@00000442 1000011E
-@00000443 003FCC06
-@00000444 E0C00417
-@00000445 E0800117
-@00000446 18800126
-@00000447 00001506
-@00000448 E0800017
-@00000449 10800217
-@0000044A 1004D3BA
-@0000044B 1080004C
-@0000044C 1005003A
-@0000044D 1000011E
-@0000044E 00000E06
-@0000044F E0800317
-@00000450 10C01417
-@00000451 E0800817
-@00000452 1880061E
-@00000453 E0800317
-@00000454 E0C00317
-@00000455 11001317
-@00000456 18800B17
-@00000457 2080012E
-@00000458 003FF606
-@00000459 E0800317
-@0000045A 10C01417
-@0000045B E0800817
-@0000045C 18BFB01E
-@0000045D E0000915
-@0000045E E0C00417
-@0000045F E0800117
-@00000460 18801726
-@00000461 0005303A
-@00000462 E0800A15
-@00000463 0001703A
-@00000464 E0800A17
-@00000465 E0800815
-@00000466 E0800817
-@00000467 E0800515
-@00000468 E0C00317
-@00000469 E0800317
-@0000046A 10801217
-@0000046B 10800054
-@0000046C 18801215
-@0000046D E0800317
-@0000046E 10800A17
-@0000046F 10800104
-@00000470 1007883A
-@00000471 E0800317
-@00000472 10801217
-@00000473 18800035
-@00000474 E0800517
-@00000475 E0800A15
-@00000476 E0800A17
-@00000477 1001703A
-@00000478 E0C00417
-@00000479 E0800117
-@0000047A 18800526
-@0000047B E0800417
-@0000047C E0C00117
-@0000047D 10C5C83A
-@0000047E E0800B15
-@0000047F 00000B06
-@00000480 E0800017
-@00000481 10800217
-@00000482 1004D3BA
-@00000483 1080004C
-@00000484 1005003A
-@00000485 1000031E
-@00000486 00BFFD44
-@00000487 E0800B15
-@00000488 00000206
-@00000489 00BFFEC4
-@0000048A E0800B15
-@0000048B E0800B17
-@0000048C DFC00D17
-@0000048D DF000C17
-@0000048E DEC00E04
-@0000048F F800283A
-@00000490 DEFFF104
-@00000491 DFC00E15
-@00000492 DF000D15
-@00000493 D839883A
-@00000494 E1000015
-@00000495 E1400115
-@00000496 E1800215
-@00000497 E0000415
-@00000498 E0800017
-@00000499 10800017
-@0000049A E0800715
-@0000049B E0800117
-@0000049C E0800815
-@0000049D E0000915
-@0000049E E0800217
-@0000049F 10800050
-@000004A0 10003A1E
-@000004A1 E0800717
-@000004A2 10801617
-@000004A3 E0800315
-@000004A4 E0800717
-@000004A5 10801717
-@000004A6 E0800415
-@000004A7 E0C00317
-@000004A8 E0800417
-@000004A9 1880062E
-@000004AA E0C00417
-@000004AB E0800317
-@000004AC 1885C83A
-@000004AD 10BFFFC4
-@000004AE E0800515
-@000004AF 00000C06
-@000004B0 E0800417
-@000004B1 1005003A
-@000004B2 1000051E
-@000004B3 00820004
-@000004B4 E0C00317
-@000004B5 10C5C83A
-@000004B6 E0800515
-@000004B7 00000406
-@000004B8 0081FFC4
-@000004B9 E0C00317
-@000004BA 10C5C83A
-@000004BB E0800515
-@000004BC E0800517
-@000004BD 1004C03A
-@000004BE 1000011E
-@000004BF 00001B06
-@000004C0 E0C00217
-@000004C1 E0800517
-@000004C2 1880022E
-@000004C3 E0800217
-@000004C4 E0800515
-@000004C5 E0C00717
-@000004C6 E0800317
-@000004C7 1885883A
-@000004C8 11021804
-@000004C9 E1400117
-@000004CA E1800517
-@000004CB 00030C00
-@000004CC E0C00117
-@000004CD E0800517
-@000004CE 1885883A
-@000004CF E0800115
-@000004D0 E0C00217
-@000004D1 E0800517
-@000004D2 1885C83A
-@000004D3 E0800215
-@000004D4 E1000717
-@000004D5 E0C00317
-@000004D6 E0800517
-@000004D7 1885883A
-@000004D8 1081FFCC
-@000004D9 20801615
-@000004DA 003FC306
-@000004DB 0005303A
-@000004DC E0800B15
-@000004DD 0001703A
-@000004DE E0800B17
-@000004DF E0800A15
-@000004E0 E0800A17
-@000004E1 E0800615
-@000004E2 E0C00717
-@000004E3 E0800717
-@000004E4 10801217
-@000004E5 10800094
-@000004E6 18801215
-@000004E7 E0800717
-@000004E8 10800A17
-@000004E9 10800104
-@000004EA 1007883A
-@000004EB E0800717
-@000004EC 10801217
-@000004ED 18800035
-@000004EE E0800617
-@000004EF E0800B15
-@000004F0 E0800B17
-@000004F1 1001703A
-@000004F2 E0800217
-@000004F3 10800050
-@000004F4 1000161E
-@000004F5 E0800017
-@000004F6 10800217
-@000004F7 1004D3BA
-@000004F8 1080004C
-@000004F9 1005003A
-@000004FA 1000011E
-@000004FB 00001306
-@000004FC E0800717
-@000004FD 10C01717
-@000004FE E0800417
-@000004FF 1880061E
-@00000500 E0800717
-@00000501 E0C00717
-@00000502 11001317
-@00000503 18800B17
-@00000504 2080012E
-@00000505 003FF606
-@00000506 E0800717
-@00000507 10C01717
-@00000508 E0800417
-@00000509 1880011E
-@0000050A 00000406
-@0000050B E0800217
-@0000050C 10800050
-@0000050D 1000011E
-@0000050E 003F8F06
-@0000050F E0000B15
-@00000510 E0C00117
-@00000511 E0800817
-@00000512 18800526
-@00000513 E0800117
-@00000514 E0C00817
-@00000515 10C5C83A
-@00000516 E0800C15
-@00000517 00000B06
-@00000518 E0800017
-@00000519 10800217
-@0000051A 1004D3BA
-@0000051B 1080004C
-@0000051C 1005003A
-@0000051D 1000031E
-@0000051E 00BFFD44
-@0000051F E0800C15
-@00000520 00000206
-@00000521 00BFFEC4
-@00000522 E0800C15
-@00000523 E0800C17
-@00000524 DFC00E17
-@00000525 DF000D17
-@00000526 DEC00F04
-@00000527 F800283A
-@00000528 DEFFF804
-@00000529 DF000715
-@0000052A D839883A
-@0000052B E1000015
-@0000052C E1400115
-@0000052D E0800017
-@0000052E E0800215
-@0000052F E0800217
-@00000530 10800A17
-@00000531 E0800315
-@00000532 E0800317
-@00000533 10800104
-@00000534 10800037
-@00000535 E0800415
-@00000536 E0800417
-@00000537 1080C00C
-@00000538 1004C03A
-@00000539 1000011E
-@0000053A 00006E06
-@0000053B E0800417
-@0000053C 1004D23A
-@0000053D 1080004C
-@0000053E 1005003A
-@0000053F 1000351E
-@00000540 00800074
-@00000541 10800004
-@00000542 E0800515
-@00000543 E0800217
-@00000544 10801417
-@00000545 10800044
-@00000546 1081FFCC
-@00000547 E0800615
-@00000548 E0800217
-@00000549 10C01517
-@0000054A E0800617
-@0000054B 1880011E
-@0000054C 00001806
-@0000054D E0800317
-@0000054E 10800037
-@0000054F E0800515
-@00000550 E0800517
-@00000551 1004D3FA
-@00000552 1080005C
-@00000553 1080004C
-@00000554 1005003A
-@00000555 1000011E
-@00000556 00000E06
-@00000557 E0C00217
-@00000558 E0800217
-@00000559 10801417
-@0000055A 1885883A
-@0000055B 10C01804
-@0000055C E0800517
-@0000055D 18800005
-@0000055E E0C00217
-@0000055F E0800217
-@00000560 10801417
-@00000561 10800044
-@00000562 1081FFCC
-@00000563 18801415
-@00000564 003FDE06
-@00000565 E0800517
-@00000566 10BFFFEC
-@00000567 1005003A
-@00000568 10000C1E
-@00000569 E1000217
-@0000056A E0800217
-@0000056B 10C01217
-@0000056C 00BFFF84
-@0000056D 1884703A
-@0000056E 20801215
-@0000056F E0800317
-@00000570 10800104
-@00000571 1007883A
-@00000572 E0800217
-@00000573 10801217
-@00000574 18800035
-@00000575 E0800417
-@00000576 1004D27A
-@00000577 1080004C
-@00000578 1005003A
-@00000579 103FB81E
-@0000057A E0800417
-@0000057B 10BFFFEC
-@0000057C 1004D43A
-@0000057D E0800615
-@0000057E E0800617
-@0000057F 1005003A
-@00000580 1000171E
-@00000581 E0800217
-@00000582 E0C00217
-@00000583 11001717
-@00000584 18801617
-@00000585 20801226
-@00000586 E1000317
-@00000587 E0C00217
-@00000588 E0800217
-@00000589 10801717
-@0000058A 1885883A
-@0000058B 10821804
-@0000058C 10800007
-@0000058D 20800035
-@0000058E E0C00217
-@0000058F E0800217
-@00000590 10801717
-@00000591 10800044
-@00000592 1081FFCC
-@00000593 18801715
-@00000594 E0800617
-@00000595 10BFFFC4
-@00000596 E0800615
-@00000597 003FE606
-@00000598 E0800617
-@00000599 1005003A
-@0000059A 103F971E
-@0000059B E1000217
-@0000059C E0800217
-@0000059D 10C01217
-@0000059E 00BFFF44
-@0000059F 1884703A
-@000005A0 20801215
-@000005A1 E0800217
-@000005A2 10800A17
-@000005A3 10800104
-@000005A4 1007883A
-@000005A5 E0800217
-@000005A6 10801217
-@000005A7 18800035
-@000005A8 003F8906
-@000005A9 DF000717
-@000005AA DEC00804
-@000005AB F800283A
-@000005AC DEFFF604
-@000005AD DF000915
-@000005AE D839883A
-@000005AF E1000015
-@000005B0 E1400115
-@000005B1 E1800215
-@000005B2 E0800017
-@000005B3 10800017
-@000005B4 E0800315
-@000005B5 00BFF9C4
-@000005B6 E0800415
-@000005B7 E0800117
-@000005B8 E0800815
-@000005B9 E0C00817
-@000005BA 189A8060
-@000005BB 1000041E
-@000005BC E0C00817
-@000005BD 189A80A0
-@000005BE 10001D1E
-@000005BF 00002906
-@000005C0 E0800317
-@000005C1 10C00B17
-@000005C2 00A00034
-@000005C3 10BFFFC4
-@000005C4 18802426
-@000005C5 E0800217
-@000005C6 10800017
-@000005C7 E0800515
-@000005C8 E0800317
-@000005C9 E0800615
-@000005CA E0800517
-@000005CB 10800090
-@000005CC 1000071E
-@000005CD E0C00517
-@000005CE 00A00034
-@000005CF 10BFFFC4
-@000005D0 18800326
-@000005D1 E0C00517
-@000005D2 E0C00715
-@000005D3 00000306
-@000005D4 00A00034
-@000005D5 10BFFF84
-@000005D6 E0800715
-@000005D7 E0C00717
-@000005D8 E0800617
-@000005D9 10C00B15
-@000005DA E0000415
-@000005DB 00000D06
-@000005DC E0800317
-@000005DD 10C00B17
-@000005DE 00A00034
-@000005DF 10BFFFC4
-@000005E0 18800826
-@000005E1 E1400217
-@000005E2 E0800317
-@000005E3 E0C00317
-@000005E4 11001317
-@000005E5 18800B17
-@000005E6 2085803A
-@000005E7 28800015
-@000005E8 E0000415
-@000005E9 E0800417
-@000005EA DF000917
-@000005EB DEC00A04
-@000005EC F800283A
-@000005ED DEFFFB04
-@000005EE DF000415
-@000005EF D839883A
-@000005F0 E1000015
-@000005F1 E0800017
-@000005F2 E0800215
-@000005F3 E0800217
-@000005F4 10800A17
-@000005F5 10800104
-@000005F6 10800037
-@000005F7 E0800115
-@000005F8 E0800117
-@000005F9 1004D2BA
-@000005FA 1080004C
-@000005FB 1005003A
-@000005FC 10000B1E
-@000005FD E0800217
-@000005FE 10800A17
-@000005FF 10800104
-@00000600 1007883A
-@00000601 E0800217
-@00000602 10801217
-@00000603 10810014
-@00000604 18800035
-@00000605 E0800217
-@00000606 10001315
-@00000607 00000A06
-@00000608 E0800217
-@00000609 10C01317
-@0000060A 00A00034
-@0000060B 10BFFF04
-@0000060C 10C00536
-@0000060D E0C00217
-@0000060E E0800217
-@0000060F 10801317
-@00000610 10800044
-@00000611 18801315
-@00000612 D0A00C17
-@00000613 E0800315
-@00000614 E0800317
-@00000615 DF000417
-@00000616 DEC00504
-@00000617 F800283A
-@00000618 DEFFF704
-@00000619 DFC00815
-@0000061A DF000715
-@0000061B D839883A
-@0000061C E1000015
-@0000061D E1400115
-@0000061E E1800215
-@0000061F E0000315
-@00000620 E0000415
-@00000621 E0000515
-@00000622 E0C00017
-@00000623 00800044
-@00000624 18801215
-@00000625 E0800117
-@00000626 10800104
-@00000627 1007883A
-@00000628 E0800017
-@00000629 10801217
-@0000062A 18800035
-@0000062B E1000217
-@0000062C E1400017
-@0000062D 01800034
-@0000062E 31852804
-@0000062F 0001FC80
-@00000630 1004803A
-@00000631 1000021E
-@00000632 E1000017
-@00000633 00019240
-@00000634 E0800017
-@00000635 10001315
-@00000636 D0A00C17
-@00000637 E0800615
-@00000638 E1400617
-@00000639 E0800017
-@0000063A 11000C04
-@0000063B 01800034
-@0000063C 3185ED04
-@0000063D E1C00017
-@0000063E 0001A080
-@0000063F 1004403A
-@00000640 1000041E
-@00000641 E0C00017
-@00000642 00A00034
-@00000643 10BFFFC4
-@00000644 18800B15
-@00000645 DFC00817
-@00000646 DF000717
-@00000647 DEC00904
-@00000648 F800283A
-@00000649 DEFFFD04
-@0000064A DFC00215
-@0000064B DF000115
-@0000064C D839883A
-@0000064D E1000015
-@0000064E E1000017
-@0000064F D1600604
-@00000650 0001CD00
-@00000651 DFC00217
-@00000652 DF000117
-@00000653 DEC00304
-@00000654 F800283A
-@00000655 DEFFFC04
-@00000656 DFC00315
-@00000657 DF000215
-@00000658 D839883A
-@00000659 E1000015
-@0000065A E1400115
-@0000065B E0800017
-@0000065C 10000035
-@0000065D 00025040
-@0000065E DFC00317
-@0000065F DF000217
-@00000660 DEC00404
-@00000661 F800283A
-@00000662 DEFFF904
-@00000663 DFC00615
-@00000664 DF000515
-@00000665 D839883A
-@00000666 E1000015
-@00000667 E1400115
-@00000668 E1800215
-@00000669 E0800217
-@0000066A E0800315
-@0000066B D0A00C17
-@0000066C 1004C03A
-@0000066D 1000041E
-@0000066E E0800317
-@0000066F D0A00C15
-@00000670 E0000415
-@00000671 00000206
-@00000672 00BFFFC4
-@00000673 E0800415
-@00000674 E0800017
-@00000675 10800104
-@00000676 1007883A
-@00000677 008001C4
-@00000678 18800035
-@00000679 E1000117
-@0000067A E1400017
-@0000067B 01800034
-@0000067C 31865504
-@0000067D 0001FC80
-@0000067E DFC00617
-@0000067F DF000517
-@00000680 DEC00704
-@00000681 F800283A
-@00000682 DEFFF504
-@00000683 DF000A15
-@00000684 D839883A
-@00000685 E1000015
-@00000686 E1400115
-@00000687 E1800215
-@00000688 E1C00315
-@00000689 E0000515
-@0000068A D0A00C17
-@0000068B E0800615
-@0000068C E0800617
-@0000068D 1005003A
-@0000068E 10003F1E
-@0000068F E0800017
-@00000690 1005003A
-@00000691 1000391E
-@00000692 E0C00017
-@00000693 E0800217
-@00000694 18800315
-@00000695 E0C00017
-@00000696 E0800317
-@00000697 18800515
-@00000698 0005303A
-@00000699 E0800815
-@0000069A 0001703A
-@0000069B E0800817
-@0000069C E0800715
-@0000069D E0800717
-@0000069E E0800415
-@0000069F D0A00D17
-@000006A0 E0800815
-@000006A1 E0800817
-@000006A2 E0800515
-@000006A3 E1000017
-@000006A4 E0C00117
-@000006A5 E0800517
-@000006A6 1885883A
-@000006A7 10800044
-@000006A8 20800215
-@000006A9 E0800017
-@000006AA 10C00217
-@000006AB E0800517
-@000006AC 1880042E
-@000006AD E0C00017
-@000006AE 00800044
-@000006AF 18800405
-@000006B0 00000206
-@000006B1 E0800017
-@000006B2 10000405
-@000006B3 D0A00E04
-@000006B4 E0800815
-@000006B5 E0800017
-@000006B6 E0800715
-@000006B7 E0C00717
-@000006B8 E0800817
-@000006B9 18800115
-@000006BA E0C00717
-@000006BB E0800817
-@000006BC 10800017
-@000006BD 18800015
-@000006BE E0800817
-@000006BF 10C00017
-@000006C0 E0800717
-@000006C1 18800115
-@000006C2 E0C00817
-@000006C3 E0800717
-@000006C4 18800015
-@000006C5 E0800417
-@000006C6 E0800815
-@000006C7 E0800817
-@000006C8 1001703A
-@000006C9 E0000915
-@000006CA 00000506
-@000006CB 00BFFA84
-@000006CC E0800915
-@000006CD 00000206
-@000006CE 00BFDE84
-@000006CF E0800915
-@000006D0 E0800917
-@000006D1 DF000A17
-@000006D2 DEC00B04
-@000006D3 F800283A
-@000006D4 DEFFFA04
-@000006D5 DFC00515
-@000006D6 DF000415
-@000006D7 D839883A
-@000006D8 E1000015
-@000006D9 008000C4
-@000006DA E0800315
-@000006DB E1000317
-@000006DC 014003F4
-@000006DD 29509004
-@000006DE 0000D8C0
-@000006DF 100B883A
-@000006E0 01005BB4
-@000006E1 210D8004
-@000006E2 0000D6C0
-@000006E3 100B883A
-@000006E4 01200034
-@000006E5 213FFFC4
-@000006E6 0000D6C0
-@000006E7 100B883A
-@000006E8 E1000017
-@000006E9 0000D6C0
-@000006EA E0800215
-@000006EB E0800217
-@000006EC 1005003A
-@000006ED 10002A1E
-@000006EE E0000115
-@000006EF E0C00117
-@000006F0 E0800217
-@000006F1 1880180E
-@000006F2 00A00034
-@000006F3 10BFFFC4
-@000006F4 10BFFFC4
-@000006F5 103FFE1E
-@000006F6 E1000317
-@000006F7 014003F4
-@000006F8 29509004
-@000006F9 0000D8C0
-@000006FA 100B883A
-@000006FB 01005BB4
-@000006FC 210D8004
-@000006FD 0000D6C0
-@000006FE 100B883A
-@000006FF 01200034
-@00000700 213FFFC4
-@00000701 0000D6C0
-@00000702 1007883A
-@00000703 E0800017
-@00000704 10C5C83A
-@00000705 E0800015
-@00000706 E0800117
-@00000707 10800044
-@00000708 E0800115
-@00000709 003FE506
-@0000070A E1000317
-@0000070B 014003F4
-@0000070C 29509004
-@0000070D 0000D8C0
-@0000070E 100B883A
-@0000070F 01005BB4
-@00000710 210D8004
-@00000711 0000D6C0
-@00000712 1009883A
-@00000713 E1400017
-@00000714 0000D8C0
-@00000715 10BFFFC4
-@00000716 103FFE1E
-@00000717 00000D06
-@00000718 E1000317
-@00000719 014003F4
-@0000071A 29509004
-@0000071B 0000D8C0
-@0000071C 100B883A
-@0000071D 01005BB4
-@0000071E 210D8004
-@0000071F 0000D6C0
-@00000720 1009883A
-@00000721 E1400017
-@00000722 0000D8C0
-@00000723 10BFFFC4
-@00000724 00BFFE16
-@00000725 0005883A
-@00000726 DFC00517
-@00000727 DF000417
-@00000728 DEC00604
-@00000729 F800283A
-@0000072A DEFFFC04
-@0000072B DF000315
-@0000072C D839883A
-@0000072D E1000015
-@0000072E E1400115
-@0000072F E1800215
-@00000730 E0800217
-@00000731 DF000317
-@00000732 DEC00404
-@00000733 F800283A
-@00000734 DEFFF904
-@00000735 DFC00615
-@00000736 DF000515
-@00000737 D839883A
-@00000738 E1000015
-@00000739 E1400115
-@0000073A E0800017
-@0000073B 1005003A
-@0000073C 1000041E
-@0000073D E0800017
-@0000073E 10800217
-@0000073F 1004C03A
-@00000740 1000071E
-@00000741 0001D800
-@00000742 1007883A
-@00000743 00800584
-@00000744 18800015
-@00000745 00BFFA84
-@00000746 E0800415
-@00000747 00001306
-@00000748 E0800117
-@00000749 E0800215
-@0000074A E0800017
-@0000074B E0800315
-@0000074C E0C00317
-@0000074D E0800217
-@0000074E 18800115
-@0000074F E0C00317
-@00000750 E0800217
-@00000751 10800017
-@00000752 18800015
-@00000753 E0800217
-@00000754 10C00017
-@00000755 E0800317
-@00000756 18800115
-@00000757 E0C00217
-@00000758 E0800317
-@00000759 18800015
-@0000075A E0000415
-@0000075B E0800417
-@0000075C DFC00617
-@0000075D DF000517
-@0000075E DEC00704
-@0000075F F800283A
-@00000760 DEFFFD04
-@00000761 DFC00215
-@00000762 DF000115
-@00000763 D839883A
-@00000764 D0A00917
-@00000765 1005003A
-@00000766 1000041E
-@00000767 D0A00917
-@00000768 103EE83A
-@00000769 E0800015
-@0000076A 00000206
-@0000076B D0A01804
-@0000076C E0800015
-@0000076D E0800017
-@0000076E DFC00217
-@0000076F DF000117
-@00000770 DEC00304
-@00000771 F800283A
-@00000772 DEFFFD04
-@00000773 DFC00215
-@00000774 DF000115
-@00000775 D839883A
-@00000776 00800034
-@00000777 108D8604
-@00000778 E0800015
-@00000779 E0C00017
-@0000077A 00800034
-@0000077B 108D8704
-@0000077C 18800736
-@0000077D E0800017
-@0000077E 10800017
-@0000077F 103EE83A
-@00000780 E0800017
-@00000781 10BFFF04
-@00000782 E0800015
-@00000783 003FF506
-@00000784 DFC00217
-@00000785 DF000117
-@00000786 DEC00304
-@00000787 F800283A
-@00000788 DEFFFD04
-@00000789 DFC00215
-@0000078A DF000115
-@0000078B D839883A
-@0000078C 00800034
-@0000078D 108D8604
-@0000078E E0800015
-@0000078F E0C00017
-@00000790 00800034
-@00000791 108D8704
-@00000792 18800736
-@00000793 E0800017
-@00000794 10800017
-@00000795 103EE83A
-@00000796 E0800017
-@00000797 10BFFF04
-@00000798 E0800015
-@00000799 003FF506
-@0000079A DFC00217
-@0000079B DF000117
-@0000079C DEC00304
-@0000079D F800283A
-@0000079E DEFFF704
-@0000079F DFC00815
-@000007A0 DF000715
-@000007A1 DC000615
-@000007A2 DC400515
-@000007A3 D839883A
-@000007A4 E1000015
-@000007A5 E1400115
-@000007A6 E1800215
-@000007A7 E1C00315
-@000007A8 E1000117
-@000007A9 E1400217
-@000007AA E1800317
-@000007AB 00022300
-@000007AC E0800415
-@000007AD E0800417
-@000007AE 1004803A
-@000007AF 10001F1E
-@000007B0 E4000017
-@000007B1 04400034
-@000007B2 8C521F04
-@000007B3 E1000417
-@000007B4 01400304
-@000007B5 0000D8C0
-@000007B6 1445883A
-@000007B7 10800017
-@000007B8 80800015
-@000007B9 E4000017
-@000007BA 04400034
-@000007BB 8C521F04
-@000007BC E1000417
-@000007BD 01400304
-@000007BE 0000D8C0
-@000007BF 1445883A
-@000007C0 10800104
-@000007C1 10800017
-@000007C2 80800115
-@000007C3 E4000017
-@000007C4 04400034
-@000007C5 8C521F04
-@000007C6 E1000417
-@000007C7 01400304
-@000007C8 0000D8C0
-@000007C9 1445883A
-@000007CA 10800204
-@000007CB 10800017
-@000007CC 80800215
-@000007CD E1000417
-@000007CE 00024000
-@000007CF DFC00817
-@000007D0 DF000717
-@000007D1 DC000617
-@000007D2 DC400517
-@000007D3 DEC00904
-@000007D4 F800283A
-@000007D5 DEFFFB04
-@000007D6 DFC00415
-@000007D7 DF000315
-@000007D8 D839883A
-@000007D9 E1000015
-@000007DA E1400115
-@000007DB E1800215
-@000007DC 01000034
-@000007DD 21122204
-@000007DE E1400017
-@000007DF 01800044
-@000007E0 01C07FC4
-@000007E1 0001E780
-@000007E2 01000034
-@000007E3 21121F04
-@000007E4 E1400117
-@000007E5 000D883A
-@000007E6 01C07FC4
-@000007E7 0001E780
-@000007E8 01000034
-@000007E9 21122504
-@000007EA E1400217
-@000007EB 01800044
-@000007EC 01C07FC4
-@000007ED 0001E780
-@000007EE DFC00417
-@000007EF DF000317
-@000007F0 DEC00504
-@000007F1 F800283A
-@000007F2 DEFFF304
-@000007F3 DF000C15
-@000007F4 D839883A
-@000007F5 E1000015
-@000007F6 E1400115
-@000007F7 E1800215
-@000007F8 00BFFA84
-@000007F9 E0800315
-@000007FA E0800017
-@000007FB 10800828
-@000007FC 1000511E
-@000007FD 0005303A
-@000007FE E0800615
-@000007FF 0001703A
-@00000800 E0800617
-@00000801 E0800515
-@00000802 E0800517
-@00000803 E0800415
-@00000804 00C00034
-@00000805 18D3A504
-@00000806 E0800017
-@00000807 100490FA
-@00000808 10C7883A
-@00000809 E0800217
-@0000080A 18800015
-@0000080B 00C00034
-@0000080C 18D3A504
-@0000080D E0800017
-@0000080E 100490FA
-@0000080F 10C5883A
-@00000810 10C00104
-@00000811 E0800117
-@00000812 18800015
-@00000813 E0800217
-@00000814 1005003A
-@00000815 1000191E
-@00000816 E0800017
-@00000817 E0800615
-@00000818 0005303A
-@00000819 E0800915
-@0000081A 0001703A
-@0000081B E0800917
-@0000081C E0800815
-@0000081D E0800817
-@0000081E E0800715
-@0000081F 00C00044
-@00000820 E0800617
-@00000821 1886983A
-@00000822 D0A00A17
-@00000823 10C4B03A
-@00000824 D0A00A15
-@00000825 D0A00A17
-@00000826 100170FA
-@00000827 E0800717
-@00000828 E0800915
-@00000829 E0800917
-@0000082A 1001703A
-@0000082B E0000515
-@0000082C E0800517
-@0000082D E0800B15
-@0000082E 00001906
-@0000082F E0800017
-@00000830 E0800915
-@00000831 0005303A
-@00000832 E0800A15
-@00000833 0001703A
-@00000834 E0800A17
-@00000835 E0800615
-@00000836 E0800617
-@00000837 E0800715
-@00000838 00C00044
-@00000839 E0800917
-@0000083A 1884983A
-@0000083B 0086303A
-@0000083C D0A00A17
-@0000083D 10C4703A
-@0000083E D0A00A15
-@0000083F D0A00A17
-@00000840 100170FA
-@00000841 E0800717
-@00000842 E0800A15
-@00000843 E0800A17
-@00000844 1001703A
-@00000845 E0000815
-@00000846 E0800817
-@00000847 E0800B15
-@00000848 E0800B17
-@00000849 E0800315
-@0000084A E0800417
-@0000084B E0800A15
-@0000084C E0800A17
-@0000084D 1001703A
-@0000084E E0800317
-@0000084F DF000C17
-@00000850 DEC00D04
-@00000851 F800283A
-@00000852 DEFFFA04
-@00000853 DFC00515
-@00000854 DF000415
-@00000855 DC000315
-@00000856 D839883A
-@00000857 E1000015
-@00000858 E0C00017
-@00000859 E0800017
-@0000085A 10800217
-@0000085B 10900034
-@0000085C 18800215
-@0000085D E0000115
-@0000085E D0E00817
-@0000085F E0800117
-@00000860 18802436
-@00000861 04000034
-@00000862 84121F04
-@00000863 E1000117
-@00000864 01400304
-@00000865 0000D8C0
-@00000866 1405883A
-@00000867 E0C00017
-@00000868 11000017
-@00000869 18800017
-@0000086A 2080161E
-@0000086B 04000034
-@0000086C 84121F04
-@0000086D E1000117
-@0000086E 01400304
-@0000086F 0000D8C0
-@00000870 1405883A
-@00000871 10800204
-@00000872 10800017
-@00000873 1004403A
-@00000874 10000C1E
-@00000875 E1000117
-@00000876 01400304
-@00000877 0000D8C0
-@00000878 1007883A
-@00000879 00800034
-@0000087A 10921F04
-@0000087B 1887883A
-@0000087C E0800017
-@0000087D 18800326
-@0000087E 00BFFCC4
-@0000087F E0800215
-@00000880 00000506
-@00000881 E0800117
-@00000882 10800044
-@00000883 E0800115
-@00000884 003FD906
-@00000885 E0000215
-@00000886 E0800217
-@00000887 DFC00517
-@00000888 DF000417
-@00000889 DC000317
-@0000088A DEC00604
-@0000088B F800283A
-@0000088C DEFFF404
-@0000088D DFC00B15
-@0000088E DF000A15
-@0000088F D839883A
-@00000890 E1000015
-@00000891 E1400115
-@00000892 E1800215
-@00000893 00BFFFC4
-@00000894 E0800515
-@00000895 00BFFB44
-@00000896 E0800615
-@00000897 E0000715
-@00000898 E1000017
-@00000899 D1600604
-@0000089A 00026040
-@0000089B E0800315
-@0000089C E0800317
-@0000089D 1004C03A
-@0000089E 1000051E
-@0000089F E1000017
-@000008A0 00026940
-@000008A1 E0800315
-@000008A2 00800044
-@000008A3 E0800715
-@000008A4 E0800317
-@000008A5 1005003A
-@000008A6 1000321E
-@000008A7 E1000317
-@000008A8 00027780
-@000008A9 E0800515
-@000008AA E0800517
-@000008AB 1004403A
-@000008AC 1000031E
-@000008AD E0800517
-@000008AE E0800615
-@000008AF 00002B06
-@000008B0 E1000517
-@000008B1 01400304
-@000008B2 0000D8C0
-@000008B3 1007883A
-@000008B4 00800034
-@000008B5 10921F04
-@000008B6 1885883A
-@000008B7 E0800415
-@000008B8 E1000417
-@000008B9 E0C00117
-@000008BA 00900034
-@000008BB 10BFFFC4
-@000008BC 1884703A
-@000008BD 20800215
-@000008BE E0800717
-@000008BF 1004C03A
-@000008C0 1000071E
-@000008C1 E1000417
-@000008C2 00021480
-@000008C3 E0800615
-@000008C4 E0800617
-@000008C5 1004403A
-@000008C6 1000011E
-@000008C7 00001306
-@000008C8 E0800317
-@000008C9 10800317
-@000008CA 1005003A
-@000008CB 1000091E
-@000008CC E0800317
-@000008CD 10800317
-@000008CE E1000417
-@000008CF E1400017
-@000008D0 E1800117
-@000008D1 E1C00217
-@000008D2 103EE83A
-@000008D3 E0800915
-@000008D4 00000106
-@000008D5 E0000915
-@000008D6 E0800917
-@000008D7 E0800615
-@000008D8 00000206
-@000008D9 00BFFB44
-@000008DA E0800615
-@000008DB E0800617
-@000008DC 1004403A
-@000008DD 1000091E
-@000008DE E1000517
-@000008DF 00024000
-@000008E0 00023B80
-@000008E1 E0C00617
-@000008E2 00C7C83A
-@000008E3 10C00015
-@000008E4 00BFFFC4
-@000008E5 E0800815
-@000008E6 00000206
-@000008E7 E0800517
-@000008E8 E0800815
-@000008E9 E0800817
-@000008EA DFC00B17
-@000008EB DF000A17
-@000008EC DEC00C04
-@000008ED F800283A
-@000008EE DEFFFD04
-@000008EF DFC00215
-@000008F0 DF000115
-@000008F1 D839883A
-@000008F2 D0A00917
-@000008F3 1005003A
-@000008F4 1000041E
-@000008F5 D0A00917
-@000008F6 103EE83A
-@000008F7 E0800015
-@000008F8 00000206
-@000008F9 D0A01804
-@000008FA E0800015
-@000008FB E0800017
-@000008FC DFC00217
-@000008FD DF000117
-@000008FE DEC00304
-@000008FF F800283A
-@00000900 DEFFFC04
-@00000901 DFC00315
-@00000902 DF000215
-@00000903 DC000115
-@00000904 D839883A
-@00000905 E1000015
-@00000906 E0800017
-@00000907 108000D0
-@00000908 10000F1E
-@00000909 04000034
-@0000090A 84121F04
-@0000090B E1000017
-@0000090C 01400304
-@0000090D 0000D8C0
-@0000090E 1405883A
-@0000090F 10800204
-@00000910 10000015
-@00000911 04000034
-@00000912 84121F04
-@00000913 E1000017
-@00000914 01400304
-@00000915 0000D8C0
-@00000916 1405883A
-@00000917 10000015
-@00000918 DFC00317
-@00000919 DF000217
-@0000091A DC000117
-@0000091B DEC00404
-@0000091C F800283A
-@0000091D DEFFFB04
-@0000091E DF000415
-@0000091F D839883A
-@00000920 E1000015
-@00000921 0005303A
-@00000922 E0800315
-@00000923 0001703A
-@00000924 E0800317
-@00000925 E0800215
-@00000926 E0800217
-@00000927 E0800115
-@00000928 E0800017
-@00000929 E0800315
-@0000092A E0800317
-@0000092B 10C00017
-@0000092C E0800317
-@0000092D 10800117
-@0000092E 18800115
-@0000092F E0800317
-@00000930 10C00117
-@00000931 E0800317
-@00000932 10800017
-@00000933 18800015
-@00000934 E0C00317
-@00000935 E0800317
-@00000936 18800115
-@00000937 E0C00317
-@00000938 E0800317
-@00000939 18800015
-@0000093A E0800117
-@0000093B E0800315
-@0000093C E0800317
-@0000093D 1001703A
-@0000093E DF000417
-@0000093F DEC00504
-@00000940 F800283A
-@00000941 DEFFFB04
-@00000942 DFC00415
-@00000943 DF000315
-@00000944 D839883A
-@00000945 D0A00E17
-@00000946 E0800115
-@00000947 D0A00D17
-@00000948 10800044
-@00000949 D0A00D15
-@0000094A E0C00117
-@0000094B D0A00E04
-@0000094C 18803026
-@0000094D E0800117
-@0000094E 10800017
-@0000094F E0800015
-@00000950 E0800117
-@00000951 10800403
-@00000952 1005003A
-@00000953 1000051E
-@00000954 D0A00D17
-@00000955 1004C03A
-@00000956 1000021E
-@00000957 E0800117
-@00000958 10000405
-@00000959 E0800117
-@0000095A 10C00217
-@0000095B D0A00D17
-@0000095C 10C01D36
-@0000095D E0800117
-@0000095E 10800403
-@0000095F 1004C03A
-@00000960 1000191E
-@00000961 E0800117
-@00000962 E0C00117
-@00000963 10800317
-@00000964 19000517
-@00000965 103EE83A
-@00000966 E0800215
-@00000967 E0800217
-@00000968 1004C03A
-@00000969 1000031E
-@0000096A E1000117
-@0000096B 00024740
-@0000096C 00000D06
-@0000096D E1000117
-@0000096E E0800117
-@0000096F 10C00217
-@00000970 E0800217
-@00000971 1885883A
-@00000972 20800215
-@00000973 E0800117
-@00000974 10C00217
-@00000975 D0A00D17
-@00000976 1880032E
-@00000977 E0C00117
-@00000978 00800044
-@00000979 18800405
-@0000097A E0800017
-@0000097B E0800115
-@0000097C 003FCD06
-@0000097D DFC00417
-@0000097E DF000317
-@0000097F DEC00504
-@00000980 F800283A
-@00000981 DEFFF904
-@00000982 DFC00615
-@00000983 DF000515
-@00000984 D839883A
-@00000985 E1000015
-@00000986 E1400115
-@00000987 E0800117
-@00000988 10800017
-@00000989 E0800215
-@0000098A E1000017
-@0000098B 0000BEC0
-@0000098C 10800044
-@0000098D E0800315
-@0000098E E0C00217
-@0000098F E0800117
-@00000990 18800E26
-@00000991 E0800217
-@00000992 11000217
-@00000993 E1400017
-@00000994 E1800317
-@00000995 00030840
-@00000996 1004C03A
-@00000997 1000031E
-@00000998 E0800217
-@00000999 E0800415
-@0000099A 00000506
-@0000099B E0800217
-@0000099C 10800017
-@0000099D E0800215
-@0000099E 003FEF06
-@0000099F E0000415
-@000009A0 E0800417
-@000009A1 DFC00617
-@000009A2 DF000517
-@000009A3 DEC00704
-@000009A4 F800283A
-@000009A5 DEFFFA04
-@000009A6 DFC00515
-@000009A7 DF000415
-@000009A8 D839883A
-@000009A9 E1000015
-@000009AA D0A00417
-@000009AB E0800115
-@000009AC E0C00117
-@000009AD D0A00404
-@000009AE 18802926
-@000009AF E0800117
-@000009B0 11000217
-@000009B1 0000BEC0
-@000009B2 E0800215
-@000009B3 E0800117
-@000009B4 10C00217
-@000009B5 E0800217
-@000009B6 1885883A
-@000009B7 10BFFFC4
-@000009B8 10800007
-@000009B9 10800BD8
-@000009BA 1000031E
-@000009BB E0800217
-@000009BC 10BFFFC4
-@000009BD E0800215
-@000009BE E0C00017
-@000009BF E0800217
-@000009C0 1885883A
-@000009C1 10800007
-@000009C2 10800BE0
-@000009C3 1000061E
-@000009C4 E0C00017
-@000009C5 E0800217
-@000009C6 1885883A
-@000009C7 10800007
-@000009C8 1004C03A
-@000009C9 10000A1E
-@000009CA E0800117
-@000009CB 11000217
-@000009CC E1400017
-@000009CD E1800217
-@000009CE 00030840
-@000009CF 1004C03A
-@000009D0 1000031E
-@000009D1 E0800117
-@000009D2 E0800315
-@000009D3 00000506
-@000009D4 E0800117
-@000009D5 10800017
-@000009D6 E0800115
-@000009D7 003FD406
-@000009D8 E0000315
-@000009D9 E0800317
-@000009DA DFC00517
-@000009DB DF000417
-@000009DC DEC00604
-@000009DD F800283A
-@000009DE DEFFF804
-@000009DF DFC00715
-@000009E0 DF000615
-@000009E1 DC000515
-@000009E2 D839883A
-@000009E3 E1000015
-@000009E4 00BFFA04
-@000009E5 E0800215
-@000009E6 E0000315
-@000009E7 E0000115
-@000009E8 E0800117
-@000009E9 10800808
-@000009EA 10001D1E
-@000009EB 04000034
-@000009EC 84121F04
-@000009ED E1000117
-@000009EE 01400304
-@000009EF 0000D8C0
-@000009F0 1405883A
-@000009F1 10800017
-@000009F2 1004C03A
-@000009F3 1000101E
-@000009F4 04000034
-@000009F5 84121F04
-@000009F6 E1000117
-@000009F7 01400304
-@000009F8 0000D8C0
-@000009F9 1407883A
-@000009FA E0800017
-@000009FB 18800015
-@000009FC E0C00117
-@000009FD D0A00817
-@000009FE 10C0020E
-@000009FF E0800117
-@00000A00 D0A00815
-@00000A01 E0800117
-@00000A02 E0800215
-@00000A03 00000406
-@00000A04 E0800117
-@00000A05 10800044
-@00000A06 E0800115
-@00000A07 003FE006
-@00000A08 E0000415
-@00000A09 E0800217
-@00000A0A DFC00717
-@00000A0B DF000617
-@00000A0C DC000517
-@00000A0D DEC00804
-@00000A0E F800283A
-@00000A0F D0A00017
-@00000A10 DEFFFE04
-@00000A11 DC000015
-@00000A12 DFC00115
-@00000A13 11400C17
-@00000A14 2021883A
-@00000A15 01004304
-@00000A16 28001B26
-@00000A17 28C00117
-@00000A18 008007C4
-@00000A19 10C00D16
-@00000A1A 28800104
-@00000A1B 10C00017
-@00000A1C 000D883A
-@00000A1D 180890BA
-@00000A1E 18C00044
-@00000A1F 10C00015
-@00000A20 2149883A
-@00000A21 24000215
-@00000A22 3005883A
-@00000A23 DFC00117
-@00000A24 DC000017
-@00000A25 DEC00204
-@00000A26 F800283A
-@00000A27 00029A40
-@00000A28 100B883A
-@00000A29 01BFFFC4
-@00000A2A 103FF726
-@00000A2B D0E00017
-@00000A2C 10004215
-@00000A2D 10000115
-@00000A2E 18800C17
-@00000A2F 28800015
-@00000A30 19400C15
-@00000A31 003FE806
-@00000A32 01400034
-@00000A33 2953E504
-@00000A34 11400C15
-@00000A35 003FE106
-@00000A36 D0A00017
-@00000A37 DEFFF804
-@00000A38 DD800015
-@00000A39 DFC00715
-@00000A3A DC000615
-@00000A3B DC400515
-@00000A3C DC800415
-@00000A3D DCC00315
-@00000A3E DD000215
-@00000A3F DD400115
-@00000A40 15000C17
-@00000A41 202D883A
-@00000A42 A0002426
-@00000A43 A0800117
-@00000A44 A5402204
-@00000A45 0027883A
-@00000A46 14BFFFC4
-@00000A47 9006803A
-@00000A48 1800021E
-@00000A49 00800044
-@00000A4A 14A6983A
-@00000A4B 1800191E
-@00000A4C 900690BA
-@00000A4D 1D05883A
-@00000A4E 14400204
-@00000A4F 1821883A
-@00000A50 00000806
-@00000A51 88800017
-@00000A52 29400017
-@00000A53 94BFFFC4
-@00000A54 843FFF04
-@00000A55 103EE83A
-@00000A56 8C7FFF04
-@00000A57 9827D07A
-@00000A58 90000C16
-@00000A59 A8802017
-@00000A5A 854B883A
-@00000A5B B009883A
-@00000A5C 14C4703A
-@00000A5D 103FF31E
-@00000A5E 88800017
-@00000A5F 94BFFFC4
-@00000A60 843FFF04
-@00000A61 103EE83A
-@00000A62 8C7FFF04
-@00000A63 9827D07A
-@00000A64 903FF40E
-@00000A65 A5000017
-@00000A66 A03FDC1E
-@00000A67 B009883A
-@00000A68 000354C0
-@00000A69 200B883A
-@00000A6A D1200017
-@00000A6B 02000034
-@00000A6C 420A7304
-@00000A6D 4000683A
-@00000A6E 200B883A
-@00000A6F D1200017
-@00000A70 02000034
-@00000A71 420C9904
-@00000A72 4000683A
-@00000A73 DEFFF504
-@00000A74 28C002C4
-@00000A75 00800584
-@00000A76 DC400715
-@00000A77 DC800615
-@00000A78 DFC00A15
-@00000A79 DF000915
-@00000A7A DC000815
-@00000A7B DCC00515
-@00000A7C DD000415
-@00000A7D DD400315
-@00000A7E DD800215
-@00000A7F DDC00115
-@00000A80 2025883A
-@00000A81 04400404
-@00000A82 10C0032E
-@00000A83 00BFFE04
-@00000A84 18A2703A
-@00000A85 88000116
-@00000A86 89400D2E
-@00000A87 0005883A
-@00000A88 DFC00A17
-@00000A89 DF000917
-@00000A8A DC000817
-@00000A8B DC400717
-@00000A8C DC800617
-@00000A8D DCC00517
-@00000A8E DD000417
-@00000A8F DD400317
-@00000A90 DD800217
-@00000A91 DDC00117
-@00000A92 DEC00B04
-@00000A93 F800283A
-@00000A94 9009883A
-@00000A95 000356C0
-@00000A96 00807DC4
-@00000A97 14401536
-@00000A98 03400034
-@00000A99 6B528904
-@00000A9A 8B4D883A
-@00000A9B 34000317
-@00000A9C 8812D0FA
-@00000A9D 81803E26
-@00000A9E 80C00117
-@00000A9F 00BFFF04
-@00000AA0 82000317
-@00000AA1 1886703A
-@00000AA2 80CB883A
-@00000AA3 28800117
-@00000AA4 81C00217
-@00000AA5 9009883A
-@00000AA6 10800054
-@00000AA7 41C00215
-@00000AA8 28800115
-@00000AA9 3A000315
-@00000AAA 00035880
-@00000AAB 80800204
-@00000AAC 003FDB06
-@00000AAD 8806D27A
-@00000AAE 8812D0FA
-@00000AAF 18000926
-@00000AB0 00800104
-@00000AB1 10C02F2E
-@00000AB2 00800504
-@00000AB3 1A4016C4
-@00000AB4 10C0042E
-@00000AB5 00801504
-@00000AB6 10C11536
-@00000AB7 8804D33A
-@00000AB8 12401B84
-@00000AB9 480490FA
-@00000ABA 03400034
-@00000ABB 6B528904
-@00000ABC 134B883A
-@00000ABD 2C000317
-@00000ABE 81400926
-@00000ABF 01FFFF04
-@00000AC0 018003C4
-@00000AC1 80800117
-@00000AC2 11C6703A
-@00000AC3 1C49C83A
-@00000AC4 3100AA16
-@00000AC5 2000690E
-@00000AC6 84000317
-@00000AC7 817FF91E
-@00000AC8 4A400044
-@00000AC9 03000034
-@00000ACA 63128B04
-@00000ACB 64000217
-@00000ACC 83002826
-@00000ACD 80800117
-@00000ACE 00FFFF04
-@00000ACF 10C6703A
-@00000AD0 1C49C83A
-@00000AD1 008003C4
-@00000AD2 11006616
-@00000AD3 63000315
-@00000AD4 63000215
-@00000AD5 20000E16
-@00000AD6 80C7883A
-@00000AD7 18800117
-@00000AD8 9009883A
-@00000AD9 10800054
-@00000ADA 18800115
-@00000ADB 003FCE06
-@00000ADC 81800204
-@00000ADD 34000317
-@00000ADE 81BFBF1E
-@00000ADF 4A400084
-@00000AE0 003FE806
-@00000AE1 8804D1BA
-@00000AE2 12400E04
-@00000AE3 003FD506
-@00000AE4 00807FC4
-@00000AE5 10C09436
-@00000AE6 1808D0FA
-@00000AE7 61BFFE04
-@00000AE8 00800044
-@00000AE9 200A90FA
-@00000AEA 2007D0BA
-@00000AEB 31000117
-@00000AEC 2991883A
-@00000AED 41C00217
-@00000AEE 10C4983A
-@00000AEF 82000315
-@00000AF0 81C00215
-@00000AF1 2088B03A
-@00000AF2 3C000315
-@00000AF3 31000115
-@00000AF4 44000215
-@00000AF5 4807883A
-@00000AF6 4800A616
-@00000AF7 1807D0BA
-@00000AF8 03400034
-@00000AF9 6B528904
-@00000AFA 00800044
-@00000AFB 10CE983A
-@00000AFC 69000117
-@00000AFD 21C04836
-@00000AFE 21C4703A
-@00000AFF 10000A1E
-@00000B00 39CF883A
-@00000B01 00BFFF04
-@00000B02 4884703A
-@00000B03 21C6703A
-@00000B04 12400104
-@00000B05 1800041E
-@00000B06 39CF883A
-@00000B07 4A400104
-@00000B08 21C4703A
-@00000B09 103FFC26
-@00000B0A 480490FA
-@00000B0B 4817883A
-@00000B0C 134D883A
-@00000B0D 300B883A
-@00000B0E 2C000317
-@00000B0F 81400926
-@00000B10 02BFFF04
-@00000B11 020003C4
-@00000B12 80800117
-@00000B13 1286703A
-@00000B14 1C49C83A
-@00000B15 41008016
-@00000B16 2000180E
-@00000B17 84000317
-@00000B18 817FF91E
-@00000B19 4A400044
-@00000B1A 488000CC
-@00000B1B 29400204
-@00000B1C 103FF11E
-@00000B1D 588000CC
-@00000B1E 31BFFE04
-@00000B1F 5AFFFFC4
-@00000B20 1000E526
-@00000B21 30800217
-@00000B22 11BFFA26
-@00000B23 03400034
-@00000B24 6B528904
-@00000B25 39CF883A
-@00000B26 68C00117
-@00000B27 19C01E36
-@00000B28 3800031E
-@00000B29 00001C06
-@00000B2A 39CF883A
-@00000B2B 4A400104
-@00000B2C 19C4703A
-@00000B2D 103FFC26
-@00000B2E 003FDB06
-@00000B2F 80C7883A
-@00000B30 18800117
-@00000B31 82000317
-@00000B32 81C00217
-@00000B33 10800054
-@00000B34 9009883A
-@00000B35 18800115
-@00000B36 41C00215
-@00000B37 3A000315
-@00000B38 003F7106
-@00000B39 88800054
-@00000B3A 844B883A
-@00000B3B 80800115
-@00000B3C 2905883A
-@00000B3D 20C00054
-@00000B3E 61400315
-@00000B3F 61400215
-@00000B40 11000015
-@00000B41 9009883A
-@00000B42 2B000215
-@00000B43 28C00115
-@00000B44 2B000315
-@00000B45 003F6406
-@00000B46 6D400217
-@00000B47 00BFFF04
-@00000B48 A8C00117
-@00000B49 18AC703A
-@00000B4A B449C83A
-@00000B4B B4400236
-@00000B4C 008003C4
-@00000B4D 11002316
-@00000B4E D0A01317
-@00000B4F 073FFFC4
-@00000B50 B02F883A
-@00000B51 8887883A
-@00000B52 D0A01217
-@00000B53 ADA7883A
-@00000B54 1D000404
-@00000B55 17000326
-@00000B56 18C023C4
-@00000B57 00BFE004
-@00000B58 18A8703A
-@00000B59 9009883A
-@00000B5A A00B883A
-@00000B5B DB400015
-@00000B5C 00030F40
-@00000B5D 1021883A
-@00000B5E DB400017
-@00000B5F 17000426
-@00000B60 14C03E2E
-@00000B61 00800034
-@00000B62 10928904
-@00000B63 A8803B26
-@00000B64 68800217
-@00000B65 013FFF04
-@00000B66 10C00117
-@00000B67 1906703A
-@00000B68 1C49C83A
-@00000B69 1C400236
-@00000B6A 008003C4
-@00000B6B 11000516
-@00000B6C 9009883A
-@00000B6D 00035880
-@00000B6E 003F1806
-@00000B6F 4A7FFFC4
-@00000B70 003F5706
-@00000B71 6C000217
-@00000B72 88800054
-@00000B73 21000054
-@00000B74 8447883A
-@00000B75 80800115
-@00000B76 19000115
-@00000B77 9009883A
-@00000B78 68C00215
-@00000B79 003F3006
-@00000B7A 180AD27A
-@00000B7B 1808D0FA
-@00000B7C 28000426
-@00000B7D 00800104
-@00000B7E 11405836
-@00000B7F 1804D1BA
-@00000B80 11000E04
-@00000B81 200490FA
-@00000B82 01400034
-@00000B83 29528904
-@00000B84 1351883A
-@00000B85 41C00217
-@00000B86 3A006D26
-@00000B87 38800117
-@00000B88 013FFF04
-@00000B89 1104703A
-@00000B8A 1880052E
-@00000B8B 39C00217
-@00000B8C 3A000326
-@00000B8D 38800117
-@00000B8E 1104703A
-@00000B8F 18BFFB36
-@00000B90 3A000317
-@00000B91 82000315
-@00000B92 81C00215
-@00000B93 3C000315
-@00000B94 44000215
-@00000B95 003F5F06
-@00000B96 82000317
-@00000B97 81C00217
-@00000B98 88800054
-@00000B99 844B883A
-@00000B9A 41C00215
-@00000B9B 3A000315
-@00000B9C 003F9E06
-@00000B9D 48C000C4
-@00000B9E 003F5806
-@00000B9F 07000034
-@00000BA0 E7127F04
-@00000BA1 E0800017
-@00000BA2 1505883A
-@00000BA3 E0800015
-@00000BA4 84C05826
-@00000BA5 D0E01217
-@00000BA6 00BFFFC4
-@00000BA7 18805326
-@00000BA8 E0800017
-@00000BA9 84C7C83A
-@00000BAA 10C5883A
-@00000BAB E0800015
-@00000BAC 80C001CC
-@00000BAD 0027883A
-@00000BAE 18000326
-@00000BAF 00800204
-@00000BB0 10E7C83A
-@00000BB1 84E1883A
-@00000BB2 8505883A
-@00000BB3 10801FCC
-@00000BB4 00C02004
-@00000BB5 1887C83A
-@00000BB6 98E7883A
-@00000BB7 9009883A
-@00000BB8 980B883A
-@00000BB9 DB400015
-@00000BBA 00030F40
-@00000BBB 1007883A
-@00000BBC 00BFFFC4
-@00000BBD DB400017
-@00000BBE 18804E26
-@00000BBF E0800017
-@00000BC0 1C07C83A
-@00000BC1 1CC9883A
-@00000BC2 14C5883A
-@00000BC3 E0800015
-@00000BC4 6C000215
-@00000BC5 20800054
-@00000BC6 AB404426
-@00000BC7 014003C4
-@00000BC8 2D801636
-@00000BC9 00800044
-@00000BCA 80800115
-@00000BCB 003F9806
-@00000BCC 00805504
-@00000BCD 10C00336
-@00000BCE 8804D3FA
-@00000BCF 12401DC4
-@00000BD0 003EE806
-@00000BD1 00815504
-@00000BD2 02401F84
-@00000BD3 10FEE536
-@00000BD4 8804D4BA
-@00000BD5 12401F04
-@00000BD6 003EE206
-@00000BD7 00800504
-@00000BD8 290016C4
-@00000BD9 117FA72E
-@00000BDA 00801504
-@00000BDB 11403A36
-@00000BDC 1804D33A
-@00000BDD 11001B84
-@00000BDE 003FA206
-@00000BDF 80800115
-@00000BE0 A8800117
-@00000BE1 00FFFE04
-@00000BE2 B13FFD04
-@00000BE3 20EE703A
-@00000BE4 1080004C
-@00000BE5 15C4B03A
-@00000BE6 A8800115
-@00000BE7 ADC7883A
-@00000BE8 00800144
-@00000BE9 18800215
-@00000BEA 18800115
-@00000BEB 2DC02436
-@00000BEC E0C00017
-@00000BED D0A01117
-@00000BEE 10C0012E
-@00000BEF D0E01115
-@00000BF0 D0A01017
-@00000BF1 10FF722E
-@00000BF2 D0E01015
-@00000BF3 003F7006
-@00000BF4 2005D0BA
-@00000BF5 00C00044
-@00000BF6 29000117
-@00000BF7 1886983A
-@00000BF8 20C8B03A
-@00000BF9 29000115
-@00000BFA 003F9606
-@00000BFB D4201215
-@00000BFC 003FAF06
-@00000BFD 80801FCC
-@00000BFE 103FA61E
-@00000BFF 00800034
-@00000C00 10928904
-@00000C01 10C00217
-@00000C02 A5C9883A
-@00000C03 20800054
-@00000C04 18800115
-@00000C05 003FE606
-@00000C06 68800117
-@00000C07 01C6303A
-@00000C08 10C4703A
-@00000C09 68800115
-@00000C0A 003F1806
-@00000C0B 80800115
-@00000C0C 003FDF06
-@00000C0D 0027883A
-@00000C0E 8007883A
-@00000C0F 003FAF06
-@00000C10 A9400204
-@00000C11 9009883A
-@00000C12 DB400015
-@00000C13 00032640
-@00000C14 DB400017
-@00000C15 003FD606
-@00000C16 00805504
-@00000C17 11400336
-@00000C18 1804D3FA
-@00000C19 11001DC4
-@00000C1A 003F6606
-@00000C1B 00815504
-@00000C1C 01001F84
-@00000C1D 117F6336
-@00000C1E 1804D4BA
-@00000C1F 11001F04
-@00000C20 003F6006
-@00000C21 31BFFFC4
-@00000C22 00BFFFC4
-@00000C23 30800826
-@00000C24 100F883A
-@00000C25 20C00003
-@00000C26 28800003
-@00000C27 31BFFFC4
-@00000C28 21000044
-@00000C29 29400044
-@00000C2A 1880031E
-@00000C2B 31FFF91E
-@00000C2C 0005883A
-@00000C2D F800283A
-@00000C2E 1885C83A
-@00000C2F F800283A
-@00000C30 31BFFFC4
-@00000C31 00BFFFC4
-@00000C32 2007883A
-@00000C33 30800726
-@00000C34 100F883A
-@00000C35 28800003
-@00000C36 31BFFFC4
-@00000C37 29400044
-@00000C38 18800005
-@00000C39 18C00044
-@00000C3A 31FFFA1E
-@00000C3B 2005883A
-@00000C3C F800283A
-@00000C3D DEFFFE04
-@00000C3E DC000015
-@00000C3F 2021883A
-@00000C40 2809883A
-@00000C41 DFC00115
-@00000C42 D0201815
-@00000C43 00035A40
-@00000C44 1007883A
-@00000C45 00BFFFC4
-@00000C46 18800526
-@00000C47 1805883A
-@00000C48 DFC00117
-@00000C49 DC000017
-@00000C4A DEC00204
-@00000C4B F800283A
-@00000C4C D0A01817
-@00000C4D 103FF926
-@00000C4E 80800315
-@00000C4F 003FF706
-@00000C50 DEFFFB04
-@00000C51 DCC00015
-@00000C52 04C00034
-@00000C53 9CD28904
-@00000C54 DC000315
-@00000C55 DC400215
-@00000C56 DC800115
-@00000C57 2823883A
-@00000C58 2021883A
-@00000C59 DFC00415
-@00000C5A 000356C0
-@00000C5B 98800217
-@00000C5C 8009883A
-@00000C5D 000B883A
-@00000C5E 10C00117
-@00000C5F 00BFFF04
-@00000C60 18A4703A
-@00000C61 9463C83A
-@00000C62 8C401BC4
-@00000C63 8822D1FA
-@00000C64 00802004
-@00000C65 8C7FFFC4
-@00000C66 882291FA
-@00000C67 88800616
-@00000C68 00030F40
-@00000C69 98C00217
-@00000C6A 8009883A
-@00000C6B 044BC83A
-@00000C6C 1C87883A
-@00000C6D 18800926
-@00000C6E 00035880
-@00000C6F 0005883A
-@00000C70 DFC00417
-@00000C71 DC000317
-@00000C72 DC400217
-@00000C73 DC800117
-@00000C74 DCC00017
-@00000C75 DEC00504
-@00000C76 F800283A
-@00000C77 8009883A
-@00000C78 00030F40
-@00000C79 944DC83A
-@00000C7A 00FFFFC4
-@00000C7B 8009883A
-@00000C7C 000B883A
-@00000C7D 01C00034
-@00000C7E 39D27F04
-@00000C7F 31800054
-@00000C80 10C00926
-@00000C81 38800017
-@00000C82 98C00217
-@00000C83 8009883A
-@00000C84 1445C83A
-@00000C85 38800015
-@00000C86 19800115
-@00000C87 00035880
-@00000C88 00800044
-@00000C89 003FE606
-@00000C8A 00030F40
-@00000C8B 99400217
-@00000C8C 100D883A
-@00000C8D 8009883A
-@00000C8E 1165C83A
-@00000C8F 008003C4
-@00000C90 90C00054
-@00000C91 14BFDC0E
-@00000C92 28C00115
-@00000C93 D0E01217
-@00000C94 00800034
-@00000C95 10927F04
-@00000C96 30C7C83A
-@00000C97 10C00015
-@00000C98 003FD506
-@00000C99 DEFFFD04
-@00000C9A DC000115
-@00000C9B DC400015
-@00000C9C DFC00215
-@00000C9D 2821883A
-@00000C9E 2023883A
-@00000C9F 28003226
-@00000CA0 000356C0
-@00000CA1 82BFFE04
-@00000CA2 51400117
-@00000CA3 00BFFF84
-@00000CA4 03000034
-@00000CA5 63128904
-@00000CA6 2892703A
-@00000CA7 524D883A
-@00000CA8 30C00117
-@00000CA9 61000217
-@00000CAA 00BFFF04
-@00000CAB 1896703A
-@00000CAC 21804E26
-@00000CAD 2880004C
-@00000CAE 32C00115
-@00000CAF 000B883A
-@00000CB0 1000091E
-@00000CB1 50C00017
-@00000CB2 60800204
-@00000CB3 50D5C83A
-@00000CB4 51000217
-@00000CB5 48D3883A
-@00000CB6 20807426
-@00000CB7 52000317
-@00000CB8 41000215
-@00000CB9 22000315
-@00000CBA 32C7883A
-@00000CBB 18800117
-@00000CBC 2808C03A
-@00000CBD 1080004C
-@00000CBE 1000061E
-@00000CBF 4AD3883A
-@00000CC0 20001626
-@00000CC1 30C00217
-@00000CC2 32000317
-@00000CC3 40C00215
-@00000CC4 1A000315
-@00000CC5 48800054
-@00000CC6 5247883A
-@00000CC7 50800115
-@00000CC8 1A400015
-@00000CC9 20001726
-@00000CCA 8809883A
-@00000CCB 02000034
-@00000CCC 420D6204
-@00000CCD DFC00217
-@00000CCE DC000117
-@00000CCF DC400017
-@00000CD0 DEC00304
-@00000CD1 4000683A
-@00000CD2 DFC00217
-@00000CD3 DC000117
-@00000CD4 DC400017
-@00000CD5 DEC00304
-@00000CD6 F800283A
-@00000CD7 30C00217
-@00000CD8 00800034
-@00000CD9 10928B04
-@00000CDA 18BFE71E
-@00000CDB 1A800315
-@00000CDC 1A800215
-@00000CDD 01000044
-@00000CDE 50C00215
-@00000CDF 50C00315
-@00000CE0 003FE406
-@00000CE1 00807FC4
-@00000CE2 12402B36
-@00000CE3 4806D0FA
-@00000CE4 01800034
-@00000CE5 31928904
-@00000CE6 00800044
-@00000CE7 180890FA
-@00000CE8 1807D0BA
-@00000CE9 31400117
-@00000CEA 2191883A
-@00000CEB 41C00217
-@00000CEC 10C4983A
-@00000CED 52000315
-@00000CEE 51C00215
-@00000CEF 288AB03A
-@00000CF0 3A800315
-@00000CF1 31400115
-@00000CF2 42800215
-@00000CF3 8809883A
-@00000CF4 02000034
-@00000CF5 420D6204
-@00000CF6 DFC00217
-@00000CF7 DC000117
-@00000CF8 DC400017
-@00000CF9 DEC00304
-@00000CFA 4000683A
-@00000CFB 2880004C
-@00000CFC 4AD3883A
-@00000CFD 1000071E
-@00000CFE 50C00017
-@00000CFF 50D5C83A
-@00000D00 52000317
-@00000D01 51C00217
-@00000D02 48D3883A
-@00000D03 41C00215
-@00000D04 3A000315
-@00000D05 D0A01417
-@00000D06 48C00054
-@00000D07 62800215
-@00000D08 50C00115
-@00000D09 48BFC036
-@00000D0A D1601317
-@00000D0B 8809883A
-@00000D0C 00031400
-@00000D0D 003FBC06
-@00000D0E 4808D27A
-@00000D0F 4806D0FA
-@00000D10 2000151E
-@00000D11 180490FA
-@00000D12 01400034
-@00000D13 29528904
-@00000D14 1311883A
-@00000D15 41C00217
-@00000D16 3A001E26
-@00000D17 38800117
-@00000D18 00FFFF04
-@00000D19 10C4703A
-@00000D1A 4880052E
-@00000D1B 39C00217
-@00000D1C 3A000326
-@00000D1D 38800117
-@00000D1E 10C4703A
-@00000D1F 48BFFB36
-@00000D20 3A000317
-@00000D21 52000315
-@00000D22 51C00215
-@00000D23 3A800315
-@00000D24 42800215
-@00000D25 003FCD06
-@00000D26 00800104
-@00000D27 11000536
-@00000D28 4804D1BA
-@00000D29 10C00E04
-@00000D2A 003FE606
-@00000D2B 01400044
-@00000D2C 003F8D06
-@00000D2D 00800504
-@00000D2E 20C016C4
-@00000D2F 113FE12E
-@00000D30 00801504
-@00000D31 11000A36
-@00000D32 4804D33A
-@00000D33 10C01B84
-@00000D34 003FDC06
-@00000D35 1805D0BA
-@00000D36 00C00044
-@00000D37 29000117
-@00000D38 1886983A
-@00000D39 20C8B03A
-@00000D3A 29000115
-@00000D3B 003FE506
-@00000D3C 00805504
-@00000D3D 11000336
-@00000D3E 4804D3FA
-@00000D3F 10C01DC4
-@00000D40 003FD006
-@00000D41 00815504
-@00000D42 00C01F84
-@00000D43 113FCD36
-@00000D44 4804D4BA
-@00000D45 10C01F04
-@00000D46 003FCA06
-@00000D47 DEFFFD04
-@00000D48 DF000215
-@00000D49 D839883A
-@00000D4A E1000015
-@00000D4B E0800017
-@00000D4C E0800115
-@00000D4D 00C00044
-@00000D4E E0800117
-@00000D4F 180171BA
-@00000D50 DF000217
-@00000D51 DEC00304
-@00000D52 F800283A
-@00000D53 DEFFFD04
-@00000D54 DFC00215
-@00000D55 DF000115
-@00000D56 D839883A
-@00000D57 E1000015
-@00000D58 E1000017
-@00000D59 000351C0
-@00000D5A 003FFF06
-@00000D5B DEFFFE04
-@00000D5C DF000115
-@00000D5D D839883A
-@00000D5E E1000015
-@00000D5F DF000117
-@00000D60 DEC00204
-@00000D61 F800283A
-@00000D62 DEFFFE04
-@00000D63 DF000115
-@00000D64 D839883A
-@00000D65 E1000015
-@00000D66 DF000117
-@00000D67 DEC00204
-@00000D68 F800283A
-@00000D69 DEFFFA04
-@00000D6A DF000515
-@00000D6B D839883A
-@00000D6C E1000015
-@00000D6D 0005303A
-@00000D6E E0800415
-@00000D6F 0001703A
-@00000D70 E0800417
-@00000D71 E0800315
-@00000D72 E0800317
-@00000D73 E0800115
-@00000D74 D0A01517
-@00000D75 10C000C4
-@00000D76 00BFFF04
-@00000D77 1884703A
-@00000D78 D0A01515
-@00000D79 D0A01517
-@00000D7A E0800215
-@00000D7B D0E01517
-@00000D7C E0800017
-@00000D7D 1885883A
-@00000D7E D0A01515
-@00000D7F E0800117
-@00000D80 E0800415
-@00000D81 E0800417
-@00000D82 1001703A
-@00000D83 E0800217
-@00000D84 DF000517
-@00000D85 DEC00604
-@00000D86 F800283A
-@00000D87 2A2A0A0A
-@00000D88 2A2A2A2A
-@00000D89 2A2A2A2A
-@00000D8A 2A2A2A2A
-@00000D8B 2A2A2A2A
-@00000D8C 2A2A2A2A
-@00000D8D 2A2A2A2A
-@00000D8E 0000000A
-@00000D8F 6548202A
-@00000D90 206F6C6C
-@00000D91 6D6F7266
-@00000D92 6F694E20
-@00000D93 49492073
-@00000D94 20202021
-@00000D95 000A2A20
-@00000D96 6F43202A
-@00000D97 69746E75
-@00000D98 6620676E
-@00000D99 206D6F72
-@00000D9A 74203030
-@00000D9B 6666206F
-@00000D9C 000A2A20
-@00000D9D 2A2A2A2A
-@00000D9E 2A2A2A2A
-@00000D9F 2A2A2A2A
-@00000DA0 2A2A2A2A
-@00000DA1 2A2A2A2A
-@00000DA2 2A2A2A2A
-@00000DA3 000A2A2A
-@00000DA4 78323025
-@00000DA5 0020202C
-@00000DA6 74747542
-@00000DA7 31206E6F
-@00000DA8 0000000A
-@00000DA9 74747542
-@00000DAA 32206E6F
-@00000DAB 0000000A
-@00000DAC 74747542
-@00000DAD 33206E6F
-@00000DAE 0000000A
-@00000DAF 74747542
-@00000DB0 34206E6F
-@00000DB1 0000000A
-@00000DB2 6961570A
-@00000DB3 676E6974
-@00000DB4 002E2E2E
-@00000DB5 0000002E
-@00000DB6 756F590A
-@00000DB7 73757020
-@00000DB8 3A646568
-@00000DB9 00002020
-@00000DBA 00000838
-@00000DBB 000007F0
-@00000DBC 000007F0
-@00000DBD 000007F0
-@00000DBE 000007F0
-@00000DBF 000007F0
-@00000DC0 000007F0
-@00000DC1 000007F0
-@00000DC2 000007F0
-@00000DC3 000007F0
-@00000DC4 000007F0
-@00000DC5 0000098C
-@00000DC6 00000848
-@00000DC7 000007F0
-@00000DC8 000007F0
-@00000DC9 000007F0
-@00000DCA 000007F0
-@00000DCB 00000848
-@00000DCC 000007F0
-@00000DCD 000007F0
-@00000DCE 000007F0
-@00000DCF 000007F0
-@00000DD0 000007F0
-@00000DD1 00000A68
-@00000DD2 000007F0
-@00000DD3 000007F0
-@00000DD4 000007F0
-@00000DD5 00000A00
-@00000DD6 000007F0
-@00000DD7 000009F8
-@00000DD8 000007F0
-@00000DD9 000007F0
-@00000DDA 000009EC
-@00000DDB 7665642F
-@00000DDC 61746A2F
-@00000DDD 61755F67
-@00000DDE 305F7472
-@00000DDF 00000000
-@00000DE0 7665642F
-@00000DE1 61746A2F
-@00000DE2 61755F67
-@00000DE3 305F7472
-@00000DE4 00000000
-@00000DE5 7665642F
-@00000DE6 6C756E2F
-@00000DE7 0000006C
-@00000DE8 000037D4
-@00000DE9 000037DC
-@00000DEA 000037E4
-@00000DEB 00000000
-@00000DEC 00000000
-@00000DED 00000000
-@00000DEE 00000000
-@00000DEF 00000000
-@00000DF0 00000000
-@00000DF1 00000000
-@00000DF2 00000000
-@00000DF3 00000000
-@00000DF4 00000000
-@00000DF5 00000004
-@00000DF6 00000000
-@00000DF7 0001000A
-@00000DF8 00000000
-@00000DF9 0002000A
-@00000DFA 00000000
-@00000DFB 00000000
-@00000DFC 00000000
-@00000DFD 00000000
-@00000DFE 00000000
-@00000DFF 00003780
-@00000E00 00000000
-@00000E01 00000000
-@00000E02 00001000
-@00000E03 00001240
-@00000E04 00000000
-@00000E05 00000000
-@00000E06 000016B0
-@00000E07 01000850
-@00000E08 0000000A
-@00000E09 00000000
-@00000E0A 00000000
-@00000E0B 00000000
-@00000E0C 00000000
-@00000E0D 00000000
-@00000E0E 00000000
-@00000E0F 00000000
-@00000E10 00000000
-@00000E11 00000000
-@00000E12 00000000
-@00000E13 00000000
-@00000E14 00000000
-@00000E15 00000000
-@00000E16 00000000
-@00000E17 00000000
-@00000E18 00000000
-@00000E19 00000000
-@00000E1A 00000000
-@00000E1B 00000000
-@00000E1C 00000000
-@00000E1D 00000000
-@00000E1E 00000000
-@00000E1F 00000000
-@00000E20 00000000
-@00000E21 00000000
-@00000E22 00000000
-@00000E23 00000000
-@00000E24 00000000
-@00000E25 00000000
-@00000E26 00000000
-@00000E27 00000000
-@00000E28 00000000
-@00000E29 00000000
-@00000E2A 00000000
-@00000E2B 00000000
-@00000E2C 00000000
-@00000E2D 00000000
-@00000E2E 00000000
-@00000E2F 00000000
-@00000E30 00000000
-@00000E31 00000000
-@00000E32 00000000
-@00000E33 00000000
-@00000E34 00000000
-@00000E35 00000000
-@00000E36 00000000
-@00000E37 00000000
-@00000E38 00000000
-@00000E39 00000000
-@00000E3A 00000000
-@00000E3B 00000000
-@00000E3C 00000000
-@00000E3D 00000000
-@00000E3E 00000000
-@00000E3F 00000000
-@00000E40 00000000
-@00000E41 00000000
-@00000E42 00000000
-@00000E43 00000000
-@00000E44 00000000
-@00000E45 00000000
-@00000E46 00000000
-@00000E47 00000000
-@00000E48 00000000
-@00000E49 00000000
-@00000E4A 00000000
-@00000E4B 00000000
-@00000E4C 00000000
-@00000E4D 00000000
-@00000E4E 00000000
-@00000E4F 00000000
-@00000E50 00000000
-@00000E51 00000000
-@00000E52 00000000
-@00000E53 00000000
-@00000E54 00000000
-@00000E55 00000000
-@00000E56 00000000
-@00000E57 00000000
-@00000E58 00000000
-@00000E59 00000000
-@00000E5A 00000000
-@00000E5B 00000000
-@00000E5C 00000000
-@00000E5D 00000000
-@00000E5E 00000000
-@00000E5F 00000000
-@00000E60 00000000
-@00000E61 00000000
-@00000E62 00000000
-@00000E63 00000000
-@00000E64 00000000
-@00000E65 00000000
-@00000E66 00000000
-@00000E67 00000000
-@00000E68 00000000
-@00000E69 00000000
-@00000E6A 00000000
-@00000E6B 00000000
-@00000E6C 00000000
-@00000E6D 00000000
-@00000E6E 00000000
-@00000E6F 00000000
-@00000E70 00000000
-@00000E71 00000000
-@00000E72 00000000
-@00000E73 00000000
-@00000E74 00000000
-@00000E75 00000000
-@00000E76 00000000
-@00000E77 00000000
-@00000E78 00000000
-@00000E79 00000000
-@00000E7A 00000000
-@00000E7B 00000000
-@00000E7C 00000000
-@00000E7D 00000000
-@00000E7E 00000000
-@00000E7F 00000000
-@00000E80 00000000
-@00000E81 00000000
-@00000E82 00000000
-@00000E83 00000000
-@00000E84 00000000
-@00000E85 00000000
-@00000E86 00000000
-@00000E87 00000000
-@00000E88 00000000
-@00000E89 00000000
-@00000E8A 00000000
-@00000E8B 00000000
-@00000E8C 00000000
-@00000E8D 00000000
-@00000E8E 00000000
-@00000E8F 00000000
-@00000E90 00000000
-@00000E91 00000000
-@00000E92 00000000
-@00000E93 00000000
-@00000E94 00000000
-@00000E95 00000000
-@00000E96 00000000
-@00000E97 00000000
-@00000E98 00000000
-@00000E99 00000000
-@00000E9A 00000000
-@00000E9B 00000000
-@00000E9C 00000000
-@00000E9D 00000000
-@00000E9E 00000000
-@00000E9F 00000000
-@00000EA0 00000000
-@00000EA1 00000000
-@00000EA2 00000000
-@00000EA3 00000000
-@00000EA4 00000000
-@00000EA5 00000000
-@00000EA6 00000000
-@00000EA7 00000000
-@00000EA8 00000000
-@00000EA9 00000000
-@00000EAA 00000000
-@00000EAB 00000000
-@00000EAC 00000000
-@00000EAD 00000000
-@00000EAE 00000000
-@00000EAF 00000000
-@00000EB0 00000000
-@00000EB1 00000000
-@00000EB2 00000000
-@00000EB3 00000000
-@00000EB4 00000000
-@00000EB5 00000000
-@00000EB6 00000000
-@00000EB7 00000000
-@00000EB8 00000000
-@00000EB9 00000000
-@00000EBA 00000000
-@00000EBB 00000000
-@00000EBC 00000000
-@00000EBD 00000000
-@00000EBE 00000000
-@00000EBF 00000000
-@00000EC0 00000000
-@00000EC1 00000000
-@00000EC2 00000000
-@00000EC3 00000000
-@00000EC4 00000000
-@00000EC5 00000000
-@00000EC6 00000000
-@00000EC7 00000000
-@00000EC8 00000000
-@00000EC9 00000000
-@00000ECA 00000000
-@00000ECB 00000000
-@00000ECC 00000000
-@00000ECD 00000000
-@00000ECE 00000000
-@00000ECF 00000000
-@00000ED0 00000000
-@00000ED1 00000000
-@00000ED2 00000000
-@00000ED3 00000000
-@00000ED4 00000000
-@00000ED5 00000000
-@00000ED6 00000000
-@00000ED7 00000000
-@00000ED8 00000000
-@00000ED9 00000000
-@00000EDA 00000000
-@00000EDB 00000000
-@00000EDC 00000000
-@00000EDD 00000000
-@00000EDE 00000000
-@00000EDF 00000000
-@00000EE0 00000000
-@00000EE1 00000000
-@00000EE2 00000000
-@00000EE3 00000000
-@00000EE4 00000000
-@00000EE5 00000000
-@00000EE6 00000000
-@00000EE7 00000000
-@00000EE8 00000000
-@00000EE9 00000000
-@00000EEA 00000000
-@00000EEB 00000000
-@00000EEC 00000000
-@00000EED 00000000
-@00000EEE 00000000
-@00000EEF 00000000
-@00000EF0 00000000
-@00000EF1 00000000
-@00000EF2 00000000
-@00000EF3 00000000
-@00000EF4 00000000
-@00000EF5 00000000
-@00000EF6 00000000
-@00000EF7 00000000
-@00000EF8 00000000
-@00000EF9 00000000
-@00000EFA 00000000
-@00000EFB 00000000
-@00000EFC 00000000
-@00000EFD 00000000
-@00000EFE 00000000
-@00000EFF 00000000
-@00000F00 00000000
-@00000F01 00000000
-@00000F02 00000000
-@00000F03 00000000
-@00000F04 00000000
-@00000F05 00000000
-@00000F06 00000000
-@00000F07 00000000
-@00000F08 00000000
-@00000F09 00000000
-@00000F0A 00000000
-@00000F0B 00000000
-@00000F0C 00000000
-@00000F0D 00000000
-@00000F0E 00000000
-@00000F0F 00000000
-@00000F10 00000000
-@00000F11 00000000
-@00000F12 00000000
-@00000F13 00000000
-@00000F14 00000000
-@00000F15 00000000
-@00000F16 00000000
-@00000F17 00000000
-@00000F18 00000000
-@00000F19 00000000
-@00000F1A 00000000
-@00000F1B 00000000
-@00000F1C 00000000
-@00000F1D 00000000
-@00000F1E 00000000
-@00000F1F 00000000
-@00000F20 00000000
-@00000F21 00000000
-@00000F22 00000000
-@00000F23 00000000
-@00000F24 00000000
-@00000F25 00000000
-@00000F26 00000000
-@00000F27 00000000
-@00000F28 00000000
-@00000F29 00000000
-@00000F2A 00000000
-@00000F2B 00000000
-@00000F2C 00000000
-@00000F2D 00000000
-@00000F2E 00000000
-@00000F2F 00000000
-@00000F30 00000000
-@00000F31 00000000
-@00000F32 00000000
-@00000F33 00000000
-@00000F34 00000000
-@00000F35 00000000
-@00000F36 00000000
-@00000F37 00000000
-@00000F38 00000000
-@00000F39 00000000
-@00000F3A 00000000
-@00000F3B 00000000
-@00000F3C 00000000
-@00000F3D 00000000
-@00000F3E 00000000
-@00000F3F 00000000
-@00000F40 00000000
-@00000F41 00000000
-@00000F42 00000000
-@00000F43 00000000
-@00000F44 00000000
-@00000F45 00000000
-@00000F46 00000000
-@00000F47 00000000
-@00000F48 00000000
-@00000F49 00000000
-@00000F4A 00000000
-@00000F4B 00000000
-@00000F4C 00000000
-@00000F4D 00000000
-@00000F4E 00000000
-@00000F4F 00000000
-@00000F50 00000000
-@00000F51 00000000
-@00000F52 00000000
-@00000F53 00000000
-@00000F54 00000000
-@00000F55 00000000
-@00000F56 00000000
-@00000F57 00000000
-@00000F58 00000000
-@00000F59 00000000
-@00000F5A 00000000
-@00000F5B 00000000
-@00000F5C 00000000
-@00000F5D 00000000
-@00000F5E 00000000
-@00000F5F 00000000
-@00000F60 00000000
-@00000F61 00000000
-@00000F62 00000000
-@00000F63 00000000
-@00000F64 00000000
-@00000F65 00000000
-@00000F66 00000000
-@00000F67 00000000
-@00000F68 00000000
-@00000F69 00000000
-@00000F6A 00000000
-@00000F6B 00000000
-@00000F6C 00000000
-@00000F6D 00000000
-@00000F6E 00000000
-@00000F6F 00000000
-@00000F70 00000000
-@00000F71 00000000
-@00000F72 00000000
-@00000F73 00000000
-@00000F74 00000000
-@00000F75 00000000
-@00000F76 00000000
-@00000F77 00000000
-@00000F78 00000000
-@00000F79 00000000
-@00000F7A 00000000
-@00000F7B 00000000
-@00000F7C 00000000
-@00000F7D 00000000
-@00000F7E 00000000
-@00000F7F 00000000
-@00000F80 00000000
-@00000F81 00000000
-@00000F82 00000000
-@00000F83 00000000
-@00000F84 00000000
-@00000F85 00000000
-@00000F86 00000000
-@00000F87 00000000
-@00000F88 00000000
-@00000F89 00000000
-@00000F8A 00000000
-@00000F8B 00000000
-@00000F8C 00000000
-@00000F8D 00000000
-@00000F8E 00000000
-@00000F8F 00000000
-@00000F90 00000000
-@00000F91 00000000
-@00000F92 00000000
-@00000F93 00000000
-@00000F94 00000000
-@00000F95 00000000
-@00000F96 00000000
-@00000F97 00000000
-@00000F98 00000000
-@00000F99 00000000
-@00000F9A 00000000
-@00000F9B 00000000
-@00000F9C 00000000
-@00000F9D 00000000
-@00000F9E 00000000
-@00000F9F 00000000
-@00000FA0 00000000
-@00000FA1 00000000
-@00000FA2 00000000
-@00000FA3 00000000
-@00000FA4 00000000
-@00000FA5 00000000
-@00000FA6 00000000
-@00000FA7 00000000
-@00000FA8 00000000
-@00000FA9 00000000
-@00000FAA 00000000
-@00000FAB 00000000
-@00000FAC 00000000
-@00000FAD 00000000
-@00000FAE 00000000
-@00000FAF 00000000
-@00000FB0 00000000
-@00000FB1 00000000
-@00000FB2 00000000
-@00000FB3 00000000
-@00000FB4 00000000
-@00000FB5 00000000
-@00000FB6 00000000
-@00000FB7 00000000
-@00000FB8 00000000
-@00000FB9 00000000
-@00000FBA 00000000
-@00000FBB 00000000
-@00000FBC 00000000
-@00000FBD 00000000
-@00000FBE 00000000
-@00000FBF 00000000
-@00000FC0 00000000
-@00000FC1 00000000
-@00000FC2 00000000
-@00000FC3 00000000
-@00000FC4 00000000
-@00000FC5 00000000
-@00000FC6 00000000
-@00000FC7 00000000
-@00000FC8 00000000
-@00000FC9 00000000
-@00000FCA 00000000
-@00000FCB 00000000
-@00000FCC 00000000
-@00000FCD 00000000
-@00000FCE 00000000
-@00000FCF 00000000
-@00000FD0 00000000
-@00000FD1 00000000
-@00000FD2 00000000
-@00000FD3 00000000
-@00000FD4 00000000
-@00000FD5 00000000
-@00000FD6 00000000
-@00000FD7 00000000
-@00000FD8 00000000
-@00000FD9 00000000
-@00000FDA 00000000
-@00000FDB 00000000
-@00000FDC 00000000
-@00000FDD 00000000
-@00000FDE 00000000
-@00000FDF 00000000
-@00000FE0 00000000
-@00000FE1 00000000
-@00000FE2 00000000
-@00000FE3 00000000
-@00000FE4 00000000
-@00000FE5 00000000
-@00000FE6 00000000
-@00000FE7 00000000
-@00000FE8 00000000
-@00000FE9 00000000
-@00000FEA 00000000
-@00000FEB 00000000
-@00000FEC 00000000
-@00000FED 00000000
-@00000FEE 00000000
-@00000FEF 00000000
-@00000FF0 00000000
-@00000FF1 00000000
-@00000FF2 00000000
-@00000FF3 00000000
-@00000FF4 00000000
-@00000FF5 00000000
-@00000FF6 00000000
-@00000FF7 00000000
-@00000FF8 00000000
-@00000FF9 00000000
-@00000FFA 00000000
-@00000FFB 00000000
-@00000FFC 00000000
-@00000FFD 00000000
-@00000FFE 00000000
-@00000FFF 00000000
-@00001000 00000000
-@00001001 00000000
-@00001002 00000000
-@00001003 00000000
-@00001004 00000000
-@00001005 00000000
-@00001006 00000000
-@00001007 00000000
-@00001008 00000000
-@00001009 00000000
-@0000100A 00000000
-@0000100B 00000000
-@0000100C 00000000
-@0000100D 00000000
-@0000100E 00000000
-@0000100F 00000000
-@00001010 00000000
-@00001011 00000000
-@00001012 00000000
-@00001013 00000000
-@00001014 00000000
-@00001015 00000000
-@00001016 00000000
-@00001017 00000000
-@00001018 00000000
-@00001019 00000000
-@0000101A 00000000
-@0000101B 00000000
-@0000101C 00000000
-@0000101D 00000000
-@0000101E 00000000
-@0000101F 00000000
-@00001020 00000000
-@00001021 00000000
-@00001022 00000000
-@00001023 00000000
-@00001024 00000000
-@00001025 00000000
-@00001026 00000000
-@00001027 00000000
-@00001028 00000000
-@00001029 00000000
-@0000102A 00000000
-@0000102B 00000000
-@0000102C 00000000
-@0000102D 00000000
-@0000102E 00000000
-@0000102F 00000000
-@00001030 00000000
-@00001031 00000000
-@00001032 00000000
-@00001033 00000000
-@00001034 00000000
-@00001035 00000000
-@00001036 00000000
-@00001037 00000000
-@00001038 00000000
-@00001039 00000000
-@0000103A 00000000
-@0000103B 00000000
-@0000103C 00000000
-@0000103D 00000000
-@0000103E 00000000
-@0000103F 00000000
-@00001040 00000000
-@00001041 00000000
-@00001042 00000000
-@00001043 00000000
-@00001044 00000000
-@00001045 00000000
-@00001046 00000000
-@00001047 00000000
-@00001048 00000000
-@00001049 00000000
-@0000104A 00000000
-@0000104B 00000000
-@0000104C 00000000
-@0000104D 00000000
-@0000104E 00000000
-@0000104F 00000000
-@00001050 00000000
-@00001051 00000000
-@00001052 00000000
-@00001053 00000000
-@00001054 00000000
-@00001055 00000000
-@00001056 00000000
-@00001057 00000000
-@00001058 00000000
-@00001059 00000000
-@0000105A 00000000
-@0000105B 00000000
-@0000105C 00000000
-@0000105D 00000000
-@0000105E 00000000
-@0000105F 00000000
-@00001060 00000000
-@00001061 00000000
-@00001062 00000000
-@00001063 00000000
-@00001064 00000000
-@00001065 00000000
-@00001066 00000000
-@00001067 00000000
-@00001068 00000000
-@00001069 00000000
-@0000106A 00000000
-@0000106B 00000000
-@0000106C 00000000
-@0000106D 00000000
-@0000106E 00000000
-@0000106F 00000000
-@00001070 00000000
-@00001071 00000000
-@00001072 00000000
-@00001073 00000000
-@00001074 00000000
-@00001075 00000000
-@00001076 00000000
-@00001077 00000000
-@00001078 00000000
-@00001079 00000000
-@0000107A 00000000
-@0000107B 00000000
-@0000107C 00000000
-@0000107D 00000000
-@0000107E 00000000
-@0000107F 00000000
-@00001080 00000000
-@00001081 00000000
-@00001082 00000000
-@00001083 00000000
-@00001084 00000000
-@00001085 00000000
-@00001086 00000000
-@00001087 00000000
-@00001088 00000000
-@00001089 00000000
-@0000108A 00000000
-@0000108B 00000000
-@0000108C 00000000
-@0000108D 00000000
-@0000108E 00000000
-@0000108F 00000000
-@00001090 00000000
-@00001091 00000000
-@00001092 00000000
-@00001093 00000000
-@00001094 00000000
-@00001095 00000000
-@00001096 00000000
-@00001097 00000000
-@00001098 00000000
-@00001099 00000000
-@0000109A 00000000
-@0000109B 00000000
-@0000109C 00000000
-@0000109D 00000000
-@0000109E 00000000
-@0000109F 00000000
-@000010A0 00000000
-@000010A1 00000000
-@000010A2 00000000
-@000010A3 00000000
-@000010A4 00000000
-@000010A5 00000000
-@000010A6 00000000
-@000010A7 00000000
-@000010A8 00000000
-@000010A9 00000000
-@000010AA 00000000
-@000010AB 00000000
-@000010AC 00000000
-@000010AD 00000000
-@000010AE 00000000
-@000010AF 00000000
-@000010B0 00000000
-@000010B1 00000000
-@000010B2 00000000
-@000010B3 00000000
-@000010B4 00000000
-@000010B5 00000000
-@000010B6 00000000
-@000010B7 00000000
-@000010B8 00000000
-@000010B9 00000000
-@000010BA 00000000
-@000010BB 00000000
-@000010BC 00000000
-@000010BD 00000000
-@000010BE 00000000
-@000010BF 00000000
-@000010C0 00000000
-@000010C1 00000000
-@000010C2 00000000
-@000010C3 00000000
-@000010C4 00000000
-@000010C5 00000000
-@000010C6 00000000
-@000010C7 00000000
-@000010C8 00000000
-@000010C9 00000000
-@000010CA 00000000
-@000010CB 00000000
-@000010CC 00000000
-@000010CD 00000000
-@000010CE 00000000
-@000010CF 00000000
-@000010D0 00000000
-@000010D1 00000000
-@000010D2 00000000
-@000010D3 00000000
-@000010D4 00000000
-@000010D5 00000000
-@000010D6 00000000
-@000010D7 00000000
-@000010D8 00000000
-@000010D9 00000000
-@000010DA 00000000
-@000010DB 00000000
-@000010DC 00000000
-@000010DD 00000000
-@000010DE 00000000
-@000010DF 00000000
-@000010E0 00000000
-@000010E1 00000000
-@000010E2 00000000
-@000010E3 00000000
-@000010E4 00000000
-@000010E5 00000000
-@000010E6 00000000
-@000010E7 00000000
-@000010E8 00000000
-@000010E9 00000000
-@000010EA 00000000
-@000010EB 00000000
-@000010EC 00000000
-@000010ED 00000000
-@000010EE 00000000
-@000010EF 00000000
-@000010F0 00000000
-@000010F1 00000000
-@000010F2 00000000
-@000010F3 00000000
-@000010F4 00000000
-@000010F5 00000000
-@000010F6 00000000
-@000010F7 00000000
-@000010F8 00000000
-@000010F9 00000000
-@000010FA 00000000
-@000010FB 00000000
-@000010FC 00000000
-@000010FD 00000000
-@000010FE 00000000
-@000010FF 00000000
-@00001100 00000000
-@00001101 00000000
-@00001102 00000000
-@00001103 00000000
-@00001104 00000000
-@00001105 00000000
-@00001106 00000000
-@00001107 00000000
-@00001108 00000000
-@00001109 00000000
-@0000110A 00000000
-@0000110B 00000000
-@0000110C 00000000
-@0000110D 00000000
-@0000110E 00000000
-@0000110F 00000000
-@00001110 00000000
-@00001111 00000000
-@00001112 00000000
-@00001113 00000000
-@00001114 00000000
-@00001115 00000000
-@00001116 00000000
-@00001117 00000000
-@00001118 00000000
-@00001119 00000000
-@0000111A 00000000
-@0000111B 00000000
-@0000111C 00000000
-@0000111D 00000000
-@0000111E 00000000
-@0000111F 00000000
-@00001120 00000000
-@00001121 00000000
-@00001122 00000000
-@00001123 00000000
-@00001124 00000000
-@00001125 00000000
-@00001126 00000000
-@00001127 00000000
-@00001128 00000000
-@00001129 00000000
-@0000112A 00000000
-@0000112B 00000000
-@0000112C 00000000
-@0000112D 00000000
-@0000112E 00000000
-@0000112F 00000000
-@00001130 00000000
-@00001131 00000000
-@00001132 00000000
-@00001133 00000000
-@00001134 00000000
-@00001135 00000000
-@00001136 00000000
-@00001137 00000000
-@00001138 00000000
-@00001139 00000000
-@0000113A 00000000
-@0000113B 00000000
-@0000113C 00000000
-@0000113D 00000000
-@0000113E 00000000
-@0000113F 00000000
-@00001140 00000000
-@00001141 00000000
-@00001142 00000000
-@00001143 00000000
-@00001144 00000000
-@00001145 00000000
-@00001146 00000000
-@00001147 00000000
-@00001148 00000000
-@00001149 00000000
-@0000114A 00000000
-@0000114B 00000000
-@0000114C 00000000
-@0000114D 00000000
-@0000114E 00000000
-@0000114F 00000000
-@00001150 00000000
-@00001151 00000000
-@00001152 00000000
-@00001153 00000000
-@00001154 00000000
-@00001155 00000000
-@00001156 00000000
-@00001157 00000000
-@00001158 00000000
-@00001159 00000000
-@0000115A 00000000
-@0000115B 00000000
-@0000115C 00000000
-@0000115D 00000000
-@0000115E 00000000
-@0000115F 00000000
-@00001160 00000000
-@00001161 00000000
-@00001162 00000000
-@00001163 00000000
-@00001164 00000000
-@00001165 00000000
-@00001166 00000000
-@00001167 00000000
-@00001168 00000000
-@00001169 00000000
-@0000116A 00000000
-@0000116B 00000000
-@0000116C 00000000
-@0000116D 00000000
-@0000116E 00000000
-@0000116F 00000000
-@00001170 00000000
-@00001171 00000000
-@00001172 00000000
-@00001173 00000000
-@00001174 00000000
-@00001175 00000000
-@00001176 00000000
-@00001177 00000000
-@00001178 00000000
-@00001179 00000000
-@0000117A 00000000
-@0000117B 00000000
-@0000117C 00000000
-@0000117D 00000000
-@0000117E 00000000
-@0000117F 00000000
-@00001180 00000000
-@00001181 00000000
-@00001182 00000000
-@00001183 00000000
-@00001184 00000000
-@00001185 00000000
-@00001186 00000000
-@00001187 00000000
-@00001188 00000000
-@00001189 00000000
-@0000118A 00000000
-@0000118B 00000000
-@0000118C 00000000
-@0000118D 00000000
-@0000118E 00000000
-@0000118F 00000000
-@00001190 00000000
-@00001191 00000000
-@00001192 00000000
-@00001193 00000000
-@00001194 00000000
-@00001195 00000000
-@00001196 00000000
-@00001197 00000000
-@00001198 00000000
-@00001199 00000000
-@0000119A 00000000
-@0000119B 00000000
-@0000119C 00000000
-@0000119D 00000000
-@0000119E 00000000
-@0000119F 00000000
-@000011A0 00000000
-@000011A1 00000000
-@000011A2 00000000
-@000011A3 00000000
-@000011A4 00000000
-@000011A5 00000000
-@000011A6 00000000
-@000011A7 00000000
-@000011A8 00000000
-@000011A9 00000000
-@000011AA 00000000
-@000011AB 00000000
-@000011AC 00000000
-@000011AD 00000000
-@000011AE 00000000
-@000011AF 00000000
-@000011B0 00000000
-@000011B1 00000000
-@000011B2 00000000
-@000011B3 00000000
-@000011B4 00000000
-@000011B5 00000000
-@000011B6 00000000
-@000011B7 00000000
-@000011B8 00000000
-@000011B9 00000000
-@000011BA 00000000
-@000011BB 00000000
-@000011BC 00000000
-@000011BD 00000000
-@000011BE 00000000
-@000011BF 00000000
-@000011C0 00000000
-@000011C1 00000000
-@000011C2 00000000
-@000011C3 00000000
-@000011C4 00000000
-@000011C5 00000000
-@000011C6 00000000
-@000011C7 00000000
-@000011C8 00000000
-@000011C9 00000000
-@000011CA 00000000
-@000011CB 00000000
-@000011CC 00000000
-@000011CD 00000000
-@000011CE 00000000
-@000011CF 00000000
-@000011D0 00000000
-@000011D1 00000000
-@000011D2 00000000
-@000011D3 00000000
-@000011D4 00000000
-@000011D5 00000000
-@000011D6 00000000
-@000011D7 00000000
-@000011D8 00000000
-@000011D9 00000000
-@000011DA 00000000
-@000011DB 00000000
-@000011DC 00000000
-@000011DD 00000000
-@000011DE 00000000
-@000011DF 00000000
-@000011E0 00000000
-@000011E1 00000000
-@000011E2 00000000
-@000011E3 00000000
-@000011E4 00000000
-@000011E5 00000000
-@000011E6 00000000
-@000011E7 00000000
-@000011E8 00000000
-@000011E9 00000000
-@000011EA 00000000
-@000011EB 00000000
-@000011EC 00000000
-@000011ED 00000000
-@000011EE 00000000
-@000011EF 00000000
-@000011F0 00000000
-@000011F1 00000000
-@000011F2 00000000
-@000011F3 00000000
-@000011F4 00000000
-@000011F5 00000000
-@000011F6 00000000
-@000011F7 00000000
-@000011F8 00000000
-@000011F9 00000000
-@000011FA 00000000
-@000011FB 00000000
-@000011FC 00000000
-@000011FD 00000000
-@000011FE 00000000
-@000011FF 00000000
-@00001200 00000000
-@00001201 00000000
-@00001202 00000000
-@00001203 00000000
-@00001204 00000000
-@00001205 00000000
-@00001206 00000000
-@00001207 00000000
-@00001208 00000000
-@00001209 00000000
-@0000120A 00000000
-@0000120B 00000000
-@0000120C 00000000
-@0000120D 00000000
-@0000120E 00000000
-@0000120F 00000000
-@00001210 00000000
-@00001211 00000000
-@00001212 00000000
-@00001213 00000000
-@00001214 00000000
-@00001215 00004E44
-@00001216 00004E44
-@00001217 00003794
-@00001218 00000000
-@00001219 00000000
-@0000121A 00000000
-@0000121B 00001CA8
-@0000121C 00000000
-@0000121D 00000000
-@0000121E 00000000
-@0000121F 00004854
-@00001220 00000000
-@00001221 00000000
-@00001222 00004854
-@00001223 00000000
-@00001224 00000000
-@00001225 00004854
-@00001226 00000000
-@00001227 00000000
-@00001228 00000000
-@00001229 00000000
-@0000122A 00000000
-@0000122B 00000000
-@0000122C 00000000
-@0000122D 00000000
-@0000122E 00000000
-@0000122F 00000000
-@00001230 00000000
-@00001231 00000000
-@00001232 00000000
-@00001233 00000000
-@00001234 00000000
-@00001235 00000000
-@00001236 00000000
-@00001237 00000000
-@00001238 00000000
-@00001239 00000000
-@0000123A 00000000
-@0000123B 00000000
-@0000123C 00000000
-@0000123D 00000000
-@0000123E 00000000
-@0000123F 00000000
-@00001240 00000000
-@00001241 00000000
-@00001242 00000000
-@00001243 00000000
-@00001244 00000000
-@00001245 00000000
-@00001246 00000000
-@00001247 00000000
-@00001248 00000000
-@00001249 00000000
-@0000124A 00000000
-@0000124B 00000000
-@0000124C 00000000
-@0000124D 00000000
-@0000124E 00000000
-@0000124F 00000000
-@00001250 00000000
-@00001251 00000000
-@00001252 00000000
-@00001253 00000000
-@00001254 00000000
-@00001255 00000000
-@00001256 00000000
-@00001257 00000000
-@00001258 00000000
-@00001259 00000000
-@0000125A 00000000
-@0000125B 00000000
-@0000125C 00000000
-@0000125D 00000000
-@0000125E 00000000
-@0000125F 00000000
-@00001260 00000000
-@00001261 00000000
-@00001262 00000000
-@00001263 00000000
-@00001264 00000000
-@00001265 00000000
-@00001266 00000000
-@00001267 00000000
-@00001268 00000000
-@00001269 00000000
-@0000126A 00000000
-@0000126B 00000000
-@0000126C 00000000
-@0000126D 00000000
-@0000126E 00000000
-@0000126F 00000000
-@00001270 00000000
-@00001271 00000000
-@00001272 00000000
-@00001273 00000000
-@00001274 00000000
-@00001275 00000000
-@00001276 00000000
-@00001277 00000000
-@00001278 00000000
-@00001279 00000000
-@0000127A 00000000
-@0000127B 00000000
-@0000127C 00000000
-@0000127D 00000000
-@0000127E 00000000
-@0000127F 00000000
-@00001280 00000000
-@00001281 00000000
-@00001282 00000000
-@00001283 00000000
-@00001284 00000000
-@00001285 00000000
-@00001286 00000000
-@00001287 00000000
-@00001288 00000000
-@00001289 00000000
-@0000128A 00000000
-@0000128B 00004A24
-@0000128C 00004A24
-@0000128D 00004A2C
-@0000128E 00004A2C
-@0000128F 00004A34
-@00001290 00004A34
-@00001291 00004A3C
-@00001292 00004A3C
-@00001293 00004A44
-@00001294 00004A44
-@00001295 00004A4C
-@00001296 00004A4C
-@00001297 00004A54
-@00001298 00004A54
-@00001299 00004A5C
-@0000129A 00004A5C
-@0000129B 00004A64
-@0000129C 00004A64
-@0000129D 00004A6C
-@0000129E 00004A6C
-@0000129F 00004A74
-@000012A0 00004A74
-@000012A1 00004A7C
-@000012A2 00004A7C
-@000012A3 00004A84
-@000012A4 00004A84
-@000012A5 00004A8C
-@000012A6 00004A8C
-@000012A7 00004A94
-@000012A8 00004A94
-@000012A9 00004A9C
-@000012AA 00004A9C
-@000012AB 00004AA4
-@000012AC 00004AA4
-@000012AD 00004AAC
-@000012AE 00004AAC
-@000012AF 00004AB4
-@000012B0 00004AB4
-@000012B1 00004ABC
-@000012B2 00004ABC
-@000012B3 00004AC4
-@000012B4 00004AC4
-@000012B5 00004ACC
-@000012B6 00004ACC
-@000012B7 00004AD4
-@000012B8 00004AD4
-@000012B9 00004ADC
-@000012BA 00004ADC
-@000012BB 00004AE4
-@000012BC 00004AE4
-@000012BD 00004AEC
-@000012BE 00004AEC
-@000012BF 00004AF4
-@000012C0 00004AF4
-@000012C1 00004AFC
-@000012C2 00004AFC
-@000012C3 00004B04
-@000012C4 00004B04
-@000012C5 00004B0C
-@000012C6 00004B0C
-@000012C7 00004B14
-@000012C8 00004B14
-@000012C9 00004B1C
-@000012CA 00004B1C
-@000012CB 00004B24
-@000012CC 00004B24
-@000012CD 00004B2C
-@000012CE 00004B2C
-@000012CF 00004B34
-@000012D0 00004B34
-@000012D1 00004B3C
-@000012D2 00004B3C
-@000012D3 00004B44
-@000012D4 00004B44
-@000012D5 00004B4C
-@000012D6 00004B4C
-@000012D7 00004B54
-@000012D8 00004B54
-@000012D9 00004B5C
-@000012DA 00004B5C
-@000012DB 00004B64
-@000012DC 00004B64
-@000012DD 00004B6C
-@000012DE 00004B6C
-@000012DF 00004B74
-@000012E0 00004B74
-@000012E1 00004B7C
-@000012E2 00004B7C
-@000012E3 00004B84
-@000012E4 00004B84
-@000012E5 00004B8C
-@000012E6 00004B8C
-@000012E7 00004B94
-@000012E8 00004B94
-@000012E9 00004B9C
-@000012EA 00004B9C
-@000012EB 00004BA4
-@000012EC 00004BA4
-@000012ED 00004BAC
-@000012EE 00004BAC
-@000012EF 00004BB4
-@000012F0 00004BB4
-@000012F1 00004BBC
-@000012F2 00004BBC
-@000012F3 00004BC4
-@000012F4 00004BC4
-@000012F5 00004BCC
-@000012F6 00004BCC
-@000012F7 00004BD4
-@000012F8 00004BD4
-@000012F9 00004BDC
-@000012FA 00004BDC
-@000012FB 00004BE4
-@000012FC 00004BE4
-@000012FD 00004BEC
-@000012FE 00004BEC
-@000012FF 00004BF4
-@00001300 00004BF4
-@00001301 00004BFC
-@00001302 00004BFC
-@00001303 00004C04
-@00001304 00004C04
-@00001305 00004C0C
-@00001306 00004C0C
-@00001307 00004C14
-@00001308 00004C14
-@00001309 00004C1C
-@0000130A 00004C1C
-@0000130B 00004C24
-@0000130C 00004C24
-@0000130D 00004C2C
-@0000130E 00004C2C
-@0000130F 00004C34
-@00001310 00004C34
-@00001311 00004C3C
-@00001312 00004C3C
-@00001313 00004C44
-@00001314 00004C44
-@00001315 00004C4C
-@00001316 00004C4C
-@00001317 00004C54
-@00001318 00004C54
-@00001319 00004C5C
-@0000131A 00004C5C
-@0000131B 00004C64
-@0000131C 00004C64
-@0000131D 00004C6C
-@0000131E 00004C6C
-@0000131F 00004C74
-@00001320 00004C74
-@00001321 00004C7C
-@00001322 00004C7C
-@00001323 00004C84
-@00001324 00004C84
-@00001325 00004C8C
-@00001326 00004C8C
-@00001327 00004C94
-@00001328 00004C94
-@00001329 00004C9C
-@0000132A 00004C9C
-@0000132B 00004CA4
-@0000132C 00004CA4
-@0000132D 00004CAC
-@0000132E 00004CAC
-@0000132F 00004CB4
-@00001330 00004CB4
-@00001331 00004CBC
-@00001332 00004CBC
-@00001333 00004CC4
-@00001334 00004CC4
-@00001335 00004CCC
-@00001336 00004CCC
-@00001337 00004CD4
-@00001338 00004CD4
-@00001339 00004CDC
-@0000133A 00004CDC
-@0000133B 00004CE4
-@0000133C 00004CE4
-@0000133D 00004CEC
-@0000133E 00004CEC
-@0000133F 00004CF4
-@00001340 00004CF4
-@00001341 00004CFC
-@00001342 00004CFC
-@00001343 00004D04
-@00001344 00004D04
-@00001345 00004D0C
-@00001346 00004D0C
-@00001347 00004D14
-@00001348 00004D14
-@00001349 00004D1C
-@0000134A 00004D1C
-@0000134B 00004D24
-@0000134C 00004D24
-@0000134D 00004D2C
-@0000134E 00004D2C
-@0000134F 00004D34
-@00001350 00004D34
-@00001351 00004D3C
-@00001352 00004D3C
-@00001353 00004D44
-@00001354 00004D44
-@00001355 00004D4C
-@00001356 00004D4C
-@00001357 00004D54
-@00001358 00004D54
-@00001359 00004D5C
-@0000135A 00004D5C
-@0000135B 00004D64
-@0000135C 00004D64
-@0000135D 00004D6C
-@0000135E 00004D6C
-@0000135F 00004D74
-@00001360 00004D74
-@00001361 00004D7C
-@00001362 00004D7C
-@00001363 00004D84
-@00001364 00004D84
-@00001365 00004D8C
-@00001366 00004D8C
-@00001367 00004D94
-@00001368 00004D94
-@00001369 00004D9C
-@0000136A 00004D9C
-@0000136B 00004DA4
-@0000136C 00004DA4
-@0000136D 00004DAC
-@0000136E 00004DAC
-@0000136F 00004DB4
-@00001370 00004DB4
-@00001371 00004DBC
-@00001372 00004DBC
-@00001373 00004DC4
-@00001374 00004DC4
-@00001375 00004DCC
-@00001376 00004DCC
-@00001377 00004DD4
-@00001378 00004DD4
-@00001379 00004DDC
-@0000137A 00004DDC
-@0000137B 00004DE4
-@0000137C 00004DE4
-@0000137D 00004DEC
-@0000137E 00004DEC
-@0000137F 00004DF4
-@00001380 00004DF4
-@00001381 00004DFC
-@00001382 00004DFC
-@00001383 00004E04
-@00001384 00004E04
-@00001385 00004E0C
-@00001386 00004E0C
-@00001387 00004E14
-@00001388 00004E14
-@00001389 00004E1C
-@0000138A 00004E1C
-@0000138B 000037A0
-@0000138C 00000000
-@0000138D 00000000
-@0000138E 00000000
-@0000138F 00004E3C
-@00001390 00004E3C
-@00001391 00004854
-@00001392 00004854
-@00001393 FFFFFFFF
-@00001394 00000000
-@00001395 00000000
-@00001396 FFFFFFFF
-@00001397 00000000
-@00001398 00000000
-@00001399 00004E64
-@0000139A 00004E64
-@0000139B 00000000
-@0000139C 00000000
-@0000139D FFFFFFFF
-@0000139E 00000000
-@0000139F 00020000
-@000013A0 000050A0
Index: trunk/test_bench/sdram_ctrl_tb.vhd
===================================================================
--- trunk/test_bench/sdram_ctrl_tb.vhd (revision 7)
+++ trunk/test_bench/sdram_ctrl_tb.vhd (nonexistent)
@@ -1,169 +0,0 @@
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-USE ieee.numeric_std.ALL;
-
-entity sdram_ctrl_tb is
-end sdram_ctrl_tb;
-
-architecture structure of sdram_ctrl_tb is
- component pll
- port (
- inclk0 : IN STD_LOGIC := '0';
- c0 : OUT STD_LOGIC ;
- e0 : OUT STD_LOGIC ;
- locked : OUT STD_LOGIC
- ) ;
- end component ;
- component sdram_ctrl is
- port(
- signal clk : IN STD_LOGIC;
- signal reset : IN STD_LOGIC;
-
- signal avs_nios_chipselect : IN STD_LOGIC;
- signal avs_nios_address : IN STD_LOGIC_VECTOR (21 DOWNTO 0);
- signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
- signal avs_nios_writedata : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
- signal avs_nios_write : IN STD_LOGIC;
- signal avs_nios_read : IN STD_LOGIC;
- signal avs_nios_readdata : OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
- signal avs_nios_readdatavalid : OUT STD_LOGIC;
- signal avs_nios_waitrequest : OUT STD_LOGIC;
-
- signal sdram_addr : OUT STD_LOGIC_VECTOR (11 DOWNTO 0);
- signal sdram_ba : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
- signal sdram_cas_n : OUT STD_LOGIC;
- signal sdram_cke : OUT STD_LOGIC;
- signal sdram_cs_n : OUT STD_LOGIC_VECTOR(0 downto 0);
- signal sdram_dq : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0);
- signal sdram_dqm : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
- signal sdram_ras_n : OUT STD_LOGIC;
- signal sdram_we_n : OUT STD_LOGIC
- );
- end component;
-
- component mt48lc4m32b2 IS
- PORT (
- Dq : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0) := (OTHERS => 'Z');
- Addr : IN STD_LOGIC_VECTOR (11 DOWNTO 0) := (OTHERS => '0');
- Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
- Clk : IN STD_LOGIC := '0';
- Cke : IN STD_LOGIC := '1';
- Cs_n : IN STD_LOGIC := '1';
- Ras_n : IN STD_LOGIC := '1';
- Cas_n : IN STD_LOGIC := '1';
- We_n : IN STD_LOGIC := '1';
- Dqm : IN STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000"
- );
- END component;
-
- component cpu_simulator IS
- PORT(clk, reset: IN std_logic;
- address : OUT std_logic_vector(21 downto 0):=(others=>'0');
- writedata : out std_logic_vector(31 downto 0):=(others=>'0');
- byteenable : out std_logic_vector(3 downto 0):=(others=>'0');
- write : out std_logic:='0';
- read : out std_logic:='0';
- readdata : in std_logic_vector(31 downto 0);
- waitrequest : in std_logic;
- readdatavalid : in std_logic
- );
- END component;
-
- signal reset, clk_ok: std_logic;
- signal run_nios_n : std_logic:='1';
- signal clk,i_clk: std_logic:='0';
-
- signal SDRAM_CLK : std_logic;
- signal SDRAM_CKE : std_logic;
- signal SDRAM_NCS : std_logic_vector(0 downto 0);
- signal SDRAM_NRAS : std_logic;
- signal SDRAM_NCAS : std_logic;
- signal SDRAM_NWE : std_logic;
- signal SDRAM_ADDRESS : std_logic_vector(11 downto 0);
- signal SDRAM_BANK : std_logic_vector(1 downto 0);
- signal SDRAM_DQM : std_logic_vector(3 downto 0);
- signal SDRAM_DATA : std_logic_vector(31 downto 0);
-
- signal address : std_logic_vector(21 downto 0);
- signal writedata : std_logic_vector(31 downto 0):=(others=>'0');
- signal byteenable : std_logic_vector(3 downto 0):=(others=>'0');
- signal write : std_logic;
- signal read : std_logic;
- signal chipselect : std_logic:='1';
- signal readdata : std_logic_vector(31 downto 0);
- signal waitrequest : std_logic;
- signal readdatavalid : std_logic;
-
-begin
-
- reset<= not clk_ok;
- run_nios_n<= reset after 140 us;
-
- UUT: sdram_ctrl
- port map(
- clk => i_clk,
- reset => reset,
-
- avs_nios_chipselect => chipselect,
- avs_nios_address => address,
- avs_nios_byteenable => byteenable,
- avs_nios_writedata => writedata,
- avs_nios_write => write,
- avs_nios_read => read,
- avs_nios_readdata => readdata,
- avs_nios_readdatavalid => readdatavalid,
- avs_nios_waitrequest => waitrequest,
-
- sdram_addr => SDRAM_ADDRESS,
- sdram_ba => SDRAM_BANK,
- sdram_cas_n => SDRAM_NCAS,
- sdram_cke => SDRAM_CKE,
- sdram_cs_n => SDRAM_NCS,
- sdram_dq => SDRAM_DATA,
- sdram_dqm => SDRAM_DQM,
- sdram_ras_n => SDRAM_NRAS,
- sdram_we_n => SDRAM_NWE
- );
-
- sdram:mt48lc4m32b2
- PORT MAP(
- Dq => SDRAM_DATA,
- Addr => SDRAM_ADDRESS,
- Ba => SDRAM_BANK,
- Clk => SDRAM_CLK,
- Cke => SDRAM_CKE,
- Cs_n => SDRAM_NCS(0),
- Ras_n => SDRAM_NRAS,
- Cas_n => SDRAM_NCAS,
- We_n => SDRAM_NWE,
- Dqm => SDRAM_DQM
- );
-
- cpu: cpu_simulator
- PORT MAP(
- clk => i_clk,
- reset => run_nios_n,
- address => address,
- writedata => writedata,
- byteenable => byteenable,
- write => write,
- read => read,
- readdata => readdata,
- waitrequest => waitrequest,
- readdatavalid => readdatavalid
- );
-
- U1 : pll
- port map(
- inclk0 => clk,
- c0 => i_clk,
- e0 => SDRAM_CLK,
- locked =>clk_ok
- );
-
- clock_generator:process
- begin
- wait for 21 ns;
- clk<= clk xor '1';
- end process;
-end structure;
Index: trunk/doc/sdram_ctrl.sxw
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/doc/sdram_ctrl.sxw
===================================================================
--- trunk/doc/sdram_ctrl.sxw (revision 7)
+++ trunk/doc/sdram_ctrl.sxw (nonexistent)
trunk/doc/sdram_ctrl.sxw
Property changes :
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: trunk/doc/readme.txt
===================================================================
--- trunk/doc/readme.txt (revision 7)
+++ trunk/doc/readme.txt (nonexistent)
@@ -1 +0,0 @@
-Please look up inside the source.
\ No newline at end of file
Index: trunk/src/sdram_ctrl.vhd
===================================================================
--- trunk/src/sdram_ctrl.vhd (revision 7)
+++ trunk/src/sdram_ctrl.vhd (nonexistent)
@@ -1,484 +0,0 @@
-------------------------------------------------------------------
---
--- sdram_ctrl.vhd
---
--- Module Description:
--- SDRAM small&fast controller
---
---
--- To Do:
--- multichipselect support done
--- configurable times 50%
--- nios simulation support
---
--- Author(s):
--- Aleksey Kuzmenok, ntpqa@opencores.org
---
-------------------------------------------------------------------
---
--- Copyright (C) 2006 Aleksey Kuzmenok and OPENCORES.ORG
---
--- This module is free software; you can redistribute it and/or
--- modify it under the terms of the GNU Lesser General Public
--- License as published by the Free Software Foundation; either
--- version 2.1 of the License, or (at your option) any later version.
---
--- This module is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
--- Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public
--- License along with this software; if not, write to the Free Software
--- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
---
-------------------------------------------------------------------
--- Hardware test results
--- FPGA SDRAM CLK (not less than)
--- EP1C12XXXXC8 MT48LC4M32B2TG-7:G 125 MHz
--- EP1C6XXXXC8 IS42S16100C1-7TL 125 MHz
---
-------------------------------------------------------------------
--- History
--- 22.10.2006 multichipselect functionaly tested
--- 10.11.2006 first successful hardware test
--- 07.12.2006 proved to be fully reliable
-
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-USE ieee.numeric_std.ALL;
-
-LIBRARY altera_mf;
-USE altera_mf.altera_mf_components.all;
-
-entity sdram_ctrl is
- generic(
- DATA_WIDTH: integer:=32;
- CHIPSELECTS: integer:=1;
- LOG2_OF_CS: integer:=0;
- BANK_WIDTH: integer:=2;
- ROW_WIDTH: integer:=12;
- COLUMN_WIDTH: integer:=8;
-
- MODE_REGISTER: integer:=48; -- 1 word burst, CAS latency=3
-
- -- Only two times are configurable
- -- tINIT delay between powerup and load mode register = 100 us
- -- tREF refresh period = 15.625 us (64ms/4096rows)
- clk_MHz: integer:=120;
- t_INIT_uS: integer:=110; -- 109.9 us just to be on the save side
- t_REF_nS: integer:=15384 -- 15.384 us the same purpose
-
- );
- port(
- signal clk : IN STD_LOGIC;
- signal reset : IN STD_LOGIC;
-
- -- IMPORTANT: for this Avalon(tm) interface
- -- 'Minimum Arbitration Shares'=1
- -- 'Max Pending Read Transactions'=9
- signal avs_nios_chipselect : IN STD_LOGIC;
- signal avs_nios_address : IN STD_LOGIC_VECTOR ((LOG2_OF_CS+BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH-1) DOWNTO 0);
- signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0);
- signal avs_nios_writedata : IN STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
- signal avs_nios_write : IN STD_LOGIC;
- signal avs_nios_read : IN STD_LOGIC;
- signal avs_nios_waitrequest : OUT STD_LOGIC;
- signal avs_nios_readdata : OUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
- signal avs_nios_readdatavalid : OUT STD_LOGIC;
-
- -- global export signals
- signal sdram_cke : OUT STD_LOGIC; -- This pin has the fixed state '1'
- signal sdram_ba : OUT STD_LOGIC_VECTOR ((BANK_WIDTH-1) DOWNTO 0);
- signal sdram_addr : OUT STD_LOGIC_VECTOR ((ROW_WIDTH-1) DOWNTO 0);
- signal sdram_cs_n : OUT STD_LOGIC_VECTOR ((CHIPSELECTS-1) DOWNTO 0);
- signal sdram_ras_n : OUT STD_LOGIC;
- signal sdram_cas_n : OUT STD_LOGIC;
- signal sdram_we_n : OUT STD_LOGIC;
- signal sdram_dq : INOUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
- signal sdram_dqm : OUT STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0)
- );
-end sdram_ctrl;
-
-architecture behaviour of sdram_ctrl is
-
- CONSTANT FIFO_WIDTH: integer:=LOG2_OF_CS+BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
- CONSTANT BE_LOW_BIT: integer:=2;
- CONSTANT DATA_LOW_BIT: integer:=(DATA_WIDTH/8)+2;
- CONSTANT COL_LOW_BIT: integer:=DATA_WIDTH+(DATA_WIDTH/8)+2;
- CONSTANT ROW_LOW_BIT: integer:=COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
- CONSTANT BANK_LOW_BIT: integer:=ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
- CONSTANT CS_LOW_BIT: integer:=BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
-
- --CONSTANT MODE: std_logic_vector((sdram_addr'length-1) downto 0):=std_logic_vector(MODE_REGISTER((sdram_addr'length-1) downto 0));
- CONSTANT INIT_PAUSE_CLOCKS: integer:=clk_MHz*t_INIT_uS;
- CONSTANT REFRESH_PERIOD_CLOCKS: integer:=(clk_MHz*t_REF_nS)/1000;
- CONSTANT CAS_LATENCY: integer:=3; -- other latencies weren't been tested!
-
- COMPONENT scfifo
- GENERIC (
- add_ram_output_register : STRING;
- intended_device_family : STRING;
- lpm_numwords : NATURAL;
- lpm_showahead : STRING;
- lpm_type : STRING;
- lpm_width : NATURAL;
- lpm_widthu : NATURAL;
- overflow_checking : STRING;
- underflow_checking : STRING;
- use_eab : STRING
- );
- PORT (
- rdreq : IN STD_LOGIC ;
- empty : OUT STD_LOGIC ;
- aclr : IN STD_LOGIC ;
- clock : IN STD_LOGIC ;
- q : OUT STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
- wrreq : IN STD_LOGIC ;
- data : IN STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
- full : OUT STD_LOGIC
- );
- END COMPONENT;
-
- -- If you ask me why there are so many states, I'll answer that all times are fixed.
- -- The top speed for MT48LC4M32B2TG-7:G is 7 ns, therefore all times were based on it.
- -- tRP PRECHARGE command period = 3 clocks
- -- tRFC AUTO REFRESH period = 10 clocks
- -- tMRD LOAD MODE REGISTER command to ACTIVE or REFRESH command = 2 clocks
- -- tRCD ACTIVE to READ or WRITE delay = 3 clocks
- -- tRAS ACTIVE to PRECHARGE command = 7 clocks
- -- tRC ACTIVE to ACTIVE command period = 10 clocks
- -- tWR2 Write recovery time = 2 clocks
- type states is (
- INIT0,INIT1,INIT2,INIT3,INIT4,INIT5,INIT6,INIT7,
- INIT8,INIT9,INIT10,INIT11,INIT12,INIT13,INIT14,INIT15,
- INIT16,INIT17,INIT18,INIT19,INIT20,INIT21,INIT22,INIT23,INIT24,
- REFRESH0,REFRESH1,REFRESH2,REFRESH3,REFRESH4,REFRESH5,REFRESH6,REFRESH7,
- REFRESH8,REFRESH9,REFRESH10,REFRESH11,REFRESH12,REFRESH13,REFRESH14,
- ACTIVE0,ACTIVE1,ACTIVE2,ACTIVE3,ACTIVE4,
- IDLE,READ0,WRITE0);
- signal operation: states;
-
- signal fifo_q: std_logic_vector((FIFO_WIDTH-1) downto 0);
-
- signal init_counter: unsigned(15 downto 0):=to_unsigned(INIT_PAUSE_CLOCKS,16);
- signal refresh_counter: unsigned(15 downto 0);
- signal active_counter: unsigned(2 downto 0);
- signal active_address: unsigned((LOG2_OF_CS+BANK_WIDTH+ROW_WIDTH-1) downto 0);
-
- signal chipselect: std_logic_vector(LOG2_OF_CS downto 0);
- signal bank: std_logic_vector((sdram_ba'length-1) downto 0);
- signal row: std_logic_vector((sdram_addr'length-1) downto 0);
- signal column: std_logic_vector((COLUMN_WIDTH-1) downto 0);
- signal data: std_logic_vector((sdram_dq'length-1) downto 0);
- signal be: std_logic_vector((sdram_dqm'length-1) downto 0);
-
- signal do_init,do_refresh,do_active,read_is_active,ready,tRCD_not_expired: std_logic:='0';
-
- signal fifo_rdreq,fifo_empty: std_logic;
-
- signal read_latency: std_logic_vector(CAS_LATENCY downto 0);
-
- signal fifo_data: std_logic_vector((FIFO_WIDTH-1) downto 0);
- signal fifo_wrreq,fifo_wrfull: std_logic;
-
- signal i_command : STD_LOGIC_VECTOR(2 downto 0);
- CONSTANT NOP: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="111";
- CONSTANT ACTIVE: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="011";
- CONSTANT READ: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="101";
- CONSTANT WRITE: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="100";
- CONSTANT PRECHARGE: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="010";
- CONSTANT AUTO_REFRESH: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="001";
- CONSTANT LOAD_MODE_REGISTER: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="000";
-
- signal i_address : STD_LOGIC_VECTOR((sdram_addr'length-1) DOWNTO 0);
- signal i_chipselect: STD_LOGIC_VECTOR((sdram_cs_n'length-1) downto 0);
- signal i_bank : STD_LOGIC_VECTOR((sdram_ba'length-1) DOWNTO 0);
- signal i_dqm : STD_LOGIC_VECTOR((sdram_dqm'length-1) DOWNTO 0);
- signal i_data : STD_LOGIC_VECTOR((sdram_dq'length-1) DOWNTO 0);
- attribute ALTERA_ATTRIBUTE : string;
- attribute ALTERA_ATTRIBUTE of i_command : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_address : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_chipselect : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_bank : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_dqm : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_data : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of avs_nios_readdata : signal is "FAST_INPUT_REGISTER=ON";
-
- function DECODE(hex: std_logic_vector; size: integer) return std_logic_vector is
- variable result : std_logic_vector((size-1) downto 0);
- begin
- result:=(others=>'1');
- result(to_integer(unsigned(hex))):='0';
- return result;
- end;
-begin
- sdram_cke<='1';
- (sdram_ras_n,sdram_cas_n,sdram_we_n) <= i_command;
- sdram_cs_n <= i_chipselect;
- sdram_addr <= i_address;
- sdram_ba <= i_bank;
- sdram_dqm <= i_dqm;
- sdram_dq <= i_data;
-
- fifo_data<=avs_nios_address & avs_nios_writedata & avs_nios_byteenable & avs_nios_write & avs_nios_read;
- fifo_wrreq<=(avs_nios_write or avs_nios_read) and avs_nios_chipselect and not fifo_wrfull;
-
- avs_nios_waitrequest<=fifo_wrfull;
-
- fifo_rdreq<=not fifo_empty and not do_refresh and not do_active and not read_is_active and ready;
-
- do_active<='0' when active_address=unsigned(fifo_q((fifo_q'length-1) downto (column'length+data'length+be'length+2))) else '1';
- read_is_active<='1' when read_latency(CAS_LATENCY-1 downto 0)>"000" and fifo_q(1)='1' else '0';
- ready<='1' when operation=IDLE or operation=READ0 or operation=WRITE0 else '0';
-
- operation_machine:process(reset,clk)
- begin
- if reset='1'
- then
- operation<=INIT0;
- active_address<=(others=>'1');
- elsif rising_edge(clk)
- then
- if CHIPSELECTS>1
- then
- chipselect<='0'&fifo_q((FIFO_WIDTH-1) downto CS_LOW_BIT);
- bank<=fifo_q((CS_LOW_BIT-1) downto BANK_LOW_BIT);
- else
- chipselect<=(others=>'0');
- bank<=fifo_q((FIFO_WIDTH-1) downto BANK_LOW_BIT);
- end if;
-
- row<= fifo_q((BANK_LOW_BIT-1) downto ROW_LOW_BIT);
- column<=fifo_q((ROW_LOW_BIT-1) downto COL_LOW_BIT);
- data<= fifo_q((COL_LOW_BIT-1) downto DATA_LOW_BIT);
- be<= fifo_q((DATA_LOW_BIT-1) downto BE_LOW_BIT);
-
- case operation is
- when INIT0=>
- if do_init='1'
- then operation<=INIT1;row(10)<='1';
- end if;
- when INIT1=>operation<=INIT2;
- when INIT2=>operation<=INIT3;
- when INIT3=>operation<=INIT4;
- when INIT4=>operation<=INIT5;
- when INIT5=>operation<=INIT6;
- when INIT6=>operation<=INIT7;
- when INIT7=>operation<=INIT8;
- when INIT8=>operation<=INIT9;
- when INIT9=>operation<=INIT10;
- when INIT10=>operation<=INIT11;
- when INIT11=>operation<=INIT12;
- when INIT12=>operation<=INIT13;
- when INIT13=>operation<=INIT14;
- when INIT14=>operation<=INIT15;
- when INIT15=>operation<=INIT16;
- when INIT16=>operation<=INIT17;
- when INIT17=>operation<=INIT18;
- when INIT18=>operation<=INIT19;
- when INIT19=>operation<=INIT20;
- when INIT20=>operation<=INIT21;
- when INIT21=>operation<=INIT22;
- when INIT22=>operation<=INIT23;
- when INIT23=>operation<=INIT24;row<=std_logic_vector(to_unsigned(MODE_REGISTER,row'length));
- when INIT24=>operation<=IDLE;
-
- when REFRESH0=>operation<=REFRESH1;
- when REFRESH1=>operation<=REFRESH2;
- when REFRESH2=>operation<=REFRESH3;
- when REFRESH3=>operation<=REFRESH4;
- when REFRESH4=>operation<=REFRESH5;
- when REFRESH5=>operation<=REFRESH6;
- when REFRESH6=>operation<=REFRESH7;
- when REFRESH7=>operation<=REFRESH8;
- when REFRESH8=>operation<=REFRESH9;
- when REFRESH9=>operation<=REFRESH10;
- when REFRESH10=>operation<=REFRESH11;
- when REFRESH11=>operation<=REFRESH12;
- when REFRESH12=>operation<=REFRESH13;
- active_address<=unsigned(fifo_q((fifo_q'length-1) downto ROW_LOW_BIT));
- when REFRESH13=>operation<=REFRESH14;
- when REFRESH14=>operation<=IDLE;
-
- when ACTIVE0=>operation<=ACTIVE1;
- when ACTIVE1=>operation<=ACTIVE2;
- when ACTIVE2=>operation<=ACTIVE3;
- active_address<=unsigned(fifo_q((fifo_q'length-1) downto ROW_LOW_BIT));
- when ACTIVE3=>operation<=ACTIVE4;
- when ACTIVE4=>operation<=IDLE;
-
- when others=>
- if do_refresh='1'
- then
- if tRCD_not_expired='0' and operation=IDLE
- then operation<=REFRESH0;row(10)<='1';
- else operation<=IDLE;
- end if;
- elsif do_active='1'
- then
- if tRCD_not_expired='0' and operation=IDLE
- then operation<=ACTIVE0;row(10)<='1';
- else operation<=IDLE;
- end if;
- elsif fifo_empty='1'
- then
- operation<=IDLE;
- elsif fifo_q(1)='1' --write
- then
- if read_latency(CAS_LATENCY-1 downto 0)>"000"
- then operation<=IDLE;
- else operation<=WRITE0;
- end if;
- elsif fifo_q(0)='1' --read
- then
- operation<=READ0;
- end if;
- end case;
- end if;
- end process;
-
- control_latency:process(reset,clk)
- begin
- if reset='1'
- then
- read_latency<=(others=>'0');
- elsif rising_edge(clk)
- then
- read_latency<=std_logic_vector(unsigned(read_latency) SLL 1);
- if operation=READ0
- then read_latency(0)<='1';
- else read_latency(0)<='0';
- end if;
- end if;
- end process;
- latch_readdata:process(reset,clk)
- begin
- if reset='1'
- then
- avs_nios_readdata<=(others=>'0');
- avs_nios_readdatavalid<='0';
- elsif rising_edge(clk)
- then
- avs_nios_readdata<=sdram_dq;
- avs_nios_readdatavalid<=read_latency(CAS_LATENCY);
- end if;
- end process;
- initialization:process(reset,clk)
- begin
- if rising_edge(clk)
- then
- if init_counter>0
- then
- init_counter<=init_counter-1;
- else do_init<='1';
- end if;
- end if;
- end process;
- refreshing:process(clk,reset)
- begin
- if reset='1'
- then
- refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
- do_refresh<='0';
- elsif rising_edge(clk)
- then
- if refresh_counter=to_unsigned(0,refresh_counter'length)
- then refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
- do_refresh<='1';
- else refresh_counter<=refresh_counter-1;
- end if;
- if operation=REFRESH0 or operation=REFRESH5
- then do_refresh<='0';
- end if;
- end if;
- end process;
- active_period:process(reset,clk)
- begin
- if reset='1'
- then
- active_counter<=(others=>'0');
- tRCD_not_expired<='0';
- elsif rising_edge(clk)
- then
- if operation=ACTIVE3 or operation=REFRESH13
- then active_counter<=to_unsigned(5,active_counter'length);
- elsif active_counter>0
- then active_counter<=active_counter-1;
- end if;
- end if;
- if active_counter>0
- then tRCD_not_expired<='1';
- else tRCD_not_expired<='0';
- end if;
- end process;
- latch_controls:process(clk,reset)
- begin
- if reset='1'
- then
- i_command<=NOP;
- i_address<=(others=>'0');
- i_bank<=(others=>'0');
- i_dqm<=(others=>'0');
- i_data<=(others=>'Z');
- i_chipselect<=(others=>'1');
- elsif rising_edge(clk)
- then
- i_command<=NOP;
- i_chipselect<=DECODE(chipselect,i_chipselect'length);
- i_bank<=bank;
- i_address<=(others=>'0');
- i_address((column'length-1) downto 0)<=column;
- i_data<=(others=>'Z');
- i_dqm<=(others=>'0');
-
- case operation is
- when INIT1|REFRESH0|ACTIVE0 =>
- i_command<=PRECHARGE;
- i_address<=row;
- i_chipselect<=(others=>'0');
- when INIT4|INIT14|REFRESH3 =>
- i_command<=AUTO_REFRESH;
- i_chipselect<=(others=>'0');
- when INIT24=>
- i_command<=LOAD_MODE_REGISTER;
- i_address<=row;
- i_chipselect<=(others=>'0');
- when ACTIVE3|REFRESH13 =>
- i_command<=ACTIVE;
- i_address<=row;
- when READ0 =>
- i_command<=READ;
- when WRITE0 =>
- i_command<=WRITE;
- i_dqm<=not be;
- i_data<=data;
- when OTHERS =>
- end case;
- end if;
- end process;
-
- fifo: scfifo
- GENERIC MAP (
- add_ram_output_register => "ON",
- intended_device_family => "Auto",
- lpm_numwords => 4,
- lpm_showahead => "ON",
- lpm_type => "scfifo",
- lpm_width => FIFO_WIDTH,
- lpm_widthu => 2,
- overflow_checking => "ON",
- underflow_checking => "ON",
- use_eab => "ON"
- )
- PORT MAP (
- rdreq => fifo_rdreq,
- aclr => reset,
- clock => clk,
- wrreq => fifo_wrreq,
- data => fifo_data,
- empty => fifo_empty,
- q => fifo_q,
- full => fifo_wrfull
- );
-end behaviour;
Index: trunk/syn/sdram_ctrl/class.ptf
===================================================================
--- trunk/syn/sdram_ctrl/class.ptf (revision 7)
+++ trunk/syn/sdram_ctrl/class.ptf (nonexistent)
@@ -1,972 +0,0 @@
-#
-# This class.ptf file built by Component Editor
-# 2006.09.25.10:24:12
-#
-# DO NOT MODIFY THIS FILE
-# If you hand-modify this file you will likely
-# interfere with Component Editor's ability to
-# read and edit it. And then Component Editor
-# will overwrite your changes anyway. So, for
-# the very best results, just relax and
-# DO NOT MODIFY THIS FILE
-#
-CLASS sdram_ctrl
-{
- CB_GENERATOR
- {
- HDL_FILES
- {
- FILE
- {
- use_in_simulation = "1";
- use_in_synthesis = "1";
- filepath = "hdl/sdram_ctrl.vhd";
- }
- }
- top_module_name = "sdram_ctrl.vhd:sdram_ctrl";
- emit_system_h = "0";
- LIBRARIES
- {
- library = "ieee.std_logic_1164.all";
- library = "ieee.numeric_std.all";
- library = "altera_mf.altera_mf_components.all";
- library = "std.standard.all";
- }
- }
- MODULE_DEFAULTS global_signals
- {
- class = "sdram_ctrl";
- class_version = "1.1";
- SYSTEM_BUILDER_INFO
- {
- Instantiate_In_System_Module = "1";
- Has_Clock = "1";
- Top_Level_Ports_Are_Enumerated = "1";
- }
- COMPONENT_BUILDER
- {
- GLS_SETTINGS
- {
- }
- }
- PORT_WIRING
- {
- PORT clk
- {
- width = "1";
- width_expression = "";
- direction = "input";
- type = "clk";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT reset
- {
- width = "1";
- width_expression = "";
- direction = "input";
- type = "reset";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT sdram_cke
- {
- width = "1";
- width_expression = "";
- direction = "output";
- type = "export";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT sdram_ba
- {
- width = "-1";
- width_expression = "((bank_width - 1)) - (0) + 1";
- direction = "output";
- type = "export";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT sdram_addr
- {
- width = "-1";
- width_expression = "((row_width - 1)) - (0) + 1";
- direction = "output";
- type = "export";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT sdram_cs_n
- {
- width = "1";
- width_expression = "";
- direction = "output";
- type = "export";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT sdram_ras_n
- {
- width = "1";
- width_expression = "";
- direction = "output";
- type = "export";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT sdram_cas_n
- {
- width = "1";
- width_expression = "";
- direction = "output";
- type = "export";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT sdram_we_n
- {
- width = "1";
- width_expression = "";
- direction = "output";
- type = "export";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT sdram_dq
- {
- width = "-1";
- width_expression = "((data_width - 1)) - (0) + 1";
- direction = "inout";
- type = "export";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT sdram_dqm
- {
- width = "-1";
- width_expression = "(((data_width / 8) - 1)) - (0) + 1";
- direction = "output";
- type = "export";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- }
- WIZARD_SCRIPT_ARGUMENTS
- {
- hdl_parameters
- {
- data_width = "32";
- bank_width = "4";
- row_width = "12";
- column_width = "8";
- clk_mhz = "120";
- }
- }
- SIMULATION
- {
- DISPLAY
- {
- }
- }
- SLAVE nios
- {
- SYSTEM_BUILDER_INFO
- {
- Bus_Type = "avalon";
- Address_Group = "1";
- Has_Clock = "0";
- Address_Width = "-1";
- Address_Alignment = "dynamic";
- Data_Width = "8";
- Has_Base_Address = "1";
- Has_IRQ = "0";
- Setup_Time = "0";
- Hold_Time = "0";
- Read_Wait_States = "peripheral_controlled";
- Write_Wait_States = "peripheral_controlled";
- Read_Latency = "0";
- Maximum_Pending_Read_Transactions = "9";
- Active_CS_Through_Read_Latency = "0";
- Is_Printable_Device = "1";
- Is_Memory_Device = "1";
- Is_Readable = "1";
- Is_Writable = "1";
- Minimum_Uninterrupted_Run_Length = "1";
- }
- COMPONENT_BUILDER
- {
- AVS_SETTINGS
- {
- Setup_Value = "0";
- Read_Wait_Value = "1";
- Write_Wait_Value = "1";
- Hold_Value = "0";
- Timing_Units = "cycles";
- Read_Latency_Value = "0";
- Minimum_Arbitration_Shares = "1";
- Active_CS_Through_Read_Latency = "0";
- Max_Pending_Read_Transactions_Value = "9";
- Address_Alignment = "dynamic";
- Is_Printable_Device = "1";
- interface_name = "Avalon Slave";
- external_wait = "1";
- Is_Memory_Device = "1";
- }
- }
- PORT_WIRING
- {
- PORT avs_nios_chipselect
- {
- width = "1";
- width_expression = "";
- direction = "input";
- type = "chipselect";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT avs_nios_address
- {
- width = "-1";
- width_expression = "((((bank_width + row_width) + column_width) - 1)) - (0) + 1";
- direction = "input";
- type = "address";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT avs_nios_byteenable
- {
- width = "-1";
- width_expression = "(((data_width / 8) - 1)) - (0) + 1";
- direction = "input";
- type = "byteenable";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT avs_nios_writedata
- {
- width = "-1";
- width_expression = "((data_width - 1)) - (0) + 1";
- direction = "input";
- type = "writedata";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT avs_nios_write
- {
- width = "1";
- width_expression = "";
- direction = "input";
- type = "write";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT avs_nios_read
- {
- width = "1";
- width_expression = "";
- direction = "input";
- type = "read";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT avs_nios_waitrequest
- {
- width = "1";
- width_expression = "";
- direction = "output";
- type = "waitrequest";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT avs_nios_readdata
- {
- width = "-1";
- width_expression = "((data_width - 1)) - (0) + 1";
- direction = "output";
- type = "readdata";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- PORT avs_nios_readdatavalid
- {
- width = "1";
- width_expression = "";
- direction = "output";
- type = "readdatavalid";
- is_shared = "0";
- vhdl_record_name = "";
- vhdl_record_type = "";
- }
- }
- }
- }
- USER_INTERFACE
- {
- USER_LABELS
- {
- name = "sdram_ctrl";
- technology = "Opencores";
- }
- WIZARD_UI the_wizard_ui
- {
- title = "sdram_ctrl - {{ $MOD }}";
- CONTEXT
- {
- H = "WIZARD_SCRIPT_ARGUMENTS/hdl_parameters";
- M = "";
- SBI_global_signals = "SYSTEM_BUILDER_INFO";
- SBI_nios = "SLAVE nios/SYSTEM_BUILDER_INFO";
- # The following signals have parameterized widths:
- PORT_sdram_ba = "PORT_WIRING/PORT sdram_ba";
- PORT_sdram_addr = "PORT_WIRING/PORT sdram_addr";
- PORT_sdram_dq = "PORT_WIRING/PORT sdram_dq";
- PORT_sdram_dqm = "PORT_WIRING/PORT sdram_dqm";
- PORT_avs_nios_address = "SLAVE nios/PORT_WIRING/PORT avs_nios_address";
- PORT_avs_nios_byteenable = "SLAVE nios/PORT_WIRING/PORT avs_nios_byteenable";
- PORT_avs_nios_writedata = "SLAVE nios/PORT_WIRING/PORT avs_nios_writedata";
- PORT_avs_nios_readdata = "SLAVE nios/PORT_WIRING/PORT avs_nios_readdata";
- }
- PAGES main
- {
- PAGE 1
- {
- align = "left";
- title = "sdram_ctrl 1.1 Settings";
- layout = "vertical";
- TEXT
- {
- title = "Built on: 2006.09.25.10:24:12";
- }
- TEXT
- {
- title = "Class name: sdram_ctrl";
- }
- TEXT
- {
- title = "Class version: 1.1";
- }
- TEXT
- {
- title = "Component name: sdram_ctrl";
- }
- TEXT
- {
- title = "Component Group: Opencores";
- }
- GROUP parameters
- {
- title = "Parameters";
- layout = "form";
- align = "left";
- EDIT e1
- {
- id = "data_width";
- editable = "1";
- title = "data_width:";
- columns = "40";
- tooltip = "default value: 32";
- DATA
- {
- $H/data_width = "$";
- }
- q = "'";
- warning = "{{ if(!(regexp('ugly_'+$H/data_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/data_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/data_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/data_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/data_width,'ugly_-?[0-9]+')))'data_width must be numeric constant, not '+$H/data_width; }}";
- }
- EDIT e2
- {
- id = "bank_width";
- editable = "1";
- title = "bank_width:";
- columns = "40";
- tooltip = "default value: 4";
- DATA
- {
- $H/bank_width = "$";
- }
- q = "'";
- warning = "{{ if(!(regexp('ugly_'+$H/bank_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/bank_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/bank_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/bank_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/bank_width,'ugly_-?[0-9]+')))'bank_width must be numeric constant, not '+$H/bank_width; }}";
- }
- EDIT e3
- {
- id = "row_width";
- editable = "1";
- title = "row_width:";
- columns = "40";
- tooltip = "default value: 12";
- DATA
- {
- $H/row_width = "$";
- }
- q = "'";
- warning = "{{ if(!(regexp('ugly_'+$H/row_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/row_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/row_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/row_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/row_width,'ugly_-?[0-9]+')))'row_width must be numeric constant, not '+$H/row_width; }}";
- }
- EDIT e4
- {
- id = "column_width";
- editable = "1";
- title = "column_width:";
- columns = "40";
- tooltip = "default value: 8";
- DATA
- {
- $H/column_width = "$";
- }
- q = "'";
- warning = "{{ if(!(regexp('ugly_'+$H/column_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/column_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/column_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/column_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/column_width,'ugly_-?[0-9]+')))'column_width must be numeric constant, not '+$H/column_width; }}";
- }
- EDIT e5
- {
- id = "clk_mhz";
- editable = "1";
- title = "clk_mhz:";
- columns = "40";
- tooltip = "default value: 120";
- DATA
- {
- $H/clk_mhz = "$";
- }
- q = "'";
- warning = "{{ if(!(regexp('ugly_'+$H/clk_mhz,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/clk_mhz,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/clk_mhz,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/clk_mhz,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/clk_mhz,'ugly_-?[0-9]+')))'clk_mhz must be numeric constant, not '+$H/clk_mhz; }}";
- }
- }
- GROUP variable_port_widths
- {
- # This group is for display only, to preview parameterized port widths
- title = "Parameterized Signal Widths";
- layout = "form";
- align = "left";
- EDIT sdram_ba_width
- {
- id = "sdram_ba_width";
- editable = "0";
- title = "sdram_ba[((bank_width - 1)) - (0) + 1]:";
- tooltip = "sdram_ba[((bank_width - 1)) - (0) + 1]
direction: output
signal type: export"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_sdram_ba/width = (int((( ( $H/bank_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_sdram_ba/width = "$"; - } - warning = "{{ if($PORT_sdram_ba/width <= 0)('width of sdram_ba must be greater than zero' ) }}"; - } - EDIT sdram_addr_width - { - id = "sdram_addr_width"; - editable = "0"; - title = "sdram_addr[((row_width - 1)) - (0) + 1]:"; - tooltip = "sdram_addr[((row_width - 1)) - (0) + 1]
direction: output
signal type: export"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_sdram_addr/width = (int((( ( $H/row_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_sdram_addr/width = "$"; - } - warning = "{{ if($PORT_sdram_addr/width <= 0)('width of sdram_addr must be greater than zero' ) }}"; - } - EDIT sdram_dq_width - { - id = "sdram_dq_width"; - editable = "0"; - title = "sdram_dq[((data_width - 1)) - (0) + 1]:"; - tooltip = "sdram_dq[((data_width - 1)) - (0) + 1]
direction: inout
signal type: export"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_sdram_dq/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_sdram_dq/width = "$"; - } - warning = "{{ if($PORT_sdram_dq/width <= 0)('width of sdram_dq must be greater than zero' ) }}"; - } - EDIT sdram_dqm_width - { - id = "sdram_dqm_width"; - editable = "0"; - title = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]:"; - tooltip = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]
direction: output
signal type: export"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_sdram_dqm/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_sdram_dqm/width = "$"; - } - warning = "{{ if($PORT_sdram_dqm/width <= 0)('width of sdram_dqm must be greater than zero' ) }}"; - } - EDIT avs_nios_address_width - { - id = "avs_nios_address_width"; - editable = "0"; - title = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]:"; - tooltip = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]
direction: input
signal type: address"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_avs_nios_address/width = (int((((( ( $H/bank_width ) + ( $H/row_width ) ) + ( $H/column_width ) ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - dummy_dummy = "{{ $SBI_nios/Address_Width = $PORT_avs_nios_address/width; }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_avs_nios_address/width = "$"; - } - warning = "{{ if($PORT_avs_nios_address/width <= 0)('width of avs_nios_address must be greater than zero' ) }}"; - } - EDIT avs_nios_byteenable_width - { - id = "avs_nios_byteenable_width"; - editable = "0"; - title = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]:"; - tooltip = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]
direction: input
signal type: byteenable"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_avs_nios_byteenable/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_avs_nios_byteenable/width = "$"; - } - warning = "{{ if($PORT_avs_nios_byteenable/width <= 0)('width of avs_nios_byteenable must be greater than zero' ) }}"; - } - EDIT avs_nios_writedata_width - { - id = "avs_nios_writedata_width"; - editable = "0"; - title = "avs_nios_writedata[((data_width - 1)) - (0) + 1]:"; - tooltip = "avs_nios_writedata[((data_width - 1)) - (0) + 1]
direction: input
signal type: writedata"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_avs_nios_writedata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_writedata/width - 1) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_avs_nios_writedata/width = "$"; - } - warning = "{{ if($PORT_avs_nios_writedata/width <= 0)('width of avs_nios_writedata must be greater than zero' ) }}"; - } - EDIT avs_nios_readdata_width - { - id = "avs_nios_readdata_width"; - editable = "0"; - title = "avs_nios_readdata[((data_width - 1)) - (0) + 1]:"; - tooltip = "avs_nios_readdata[((data_width - 1)) - (0) + 1]
direction: output
signal type: readdata"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_avs_nios_readdata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_readdata/width - 1) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_avs_nios_readdata/width = "$"; - } - warning = "{{ if($PORT_avs_nios_readdata/width <= 0)('width of avs_nios_readdata must be greater than zero' ) }}"; - } - } - } - } - } - } - SOPC_Builder_Version = "5.10"; - COMPONENT_BUILDER - { - HDL_PARAMETERS - { - # generated by CBDocument.getParameterContainer - # used only by Component Editor - HDL_PARAMETER data_width - { - parameter_name = "data_width"; - type = "integer"; - default_value = "32"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER bank_width - { - parameter_name = "bank_width"; - type = "integer"; - default_value = "4"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER row_width - { - parameter_name = "row_width"; - type = "integer"; - default_value = "12"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER column_width - { - parameter_name = "column_width"; - type = "integer"; - default_value = "8"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER clk_mhz - { - parameter_name = "clk_mhz"; - type = "integer"; - default_value = "120"; - editable = "1"; - tooltip = ""; - } - } - SW_FILES - { - } - built_on = "2006.09.25.10:24:12"; - CACHED_HDL_INFO - { - # cached hdl info, emitted by CBFrameRealtime.getDocumentCachedHDLInfoSection - # used only by Component Builder - FILE sdram_ctrl.vhd - { - file_mod = "Mon Sep 18 18:08:50 EEST 2006"; - quartus_map_start = "Mon Sep 25 10:22:36 EEST 2006"; - quartus_map_finished = "Mon Sep 25 10:22:58 EEST 2006"; - #found 1 valid modules - WRAPPER sdram_ctrl - { - CLASS sdram_ctrl - { - CB_GENERATOR - { - HDL_FILES - { - FILE - { - use_in_simulation = "1"; - use_in_synthesis = "1"; - filepath = "H:/Work/Home_stuff/opencores/sdram_ctrl/src/sdram_ctrl.vhd"; - } - } - top_module_name = "sdram_ctrl"; - emit_system_h = "0"; - LIBRARIES - { - library = "ieee.std_logic_1164.all"; - library = "ieee.numeric_std.all"; - library = "altera_mf.altera_mf_components.all"; - library = "std.standard.all"; - } - } - MODULE_DEFAULTS global_signals - { - class = "sdram_ctrl"; - class_version = "1.0"; - SYSTEM_BUILDER_INFO - { - Instantiate_In_System_Module = "1"; - } - SLAVE nios - { - SYSTEM_BUILDER_INFO - { - Bus_Type = "avalon"; - } - PORT_WIRING - { - PORT avs_nios_chipselect - { - width = "1"; - width_expression = ""; - direction = "input"; - type = "chipselect"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_address - { - width = "-1"; - width_expression = "((((bank_width + row_width) + column_width) - 1)) - (0) + 1"; - direction = "input"; - type = "address"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_byteenable - { - width = "-1"; - width_expression = "(((data_width / 8) - 1)) - (0) + 1"; - direction = "input"; - type = "byteenable"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_writedata - { - width = "-1"; - width_expression = "((data_width - 1)) - (0) + 1"; - direction = "input"; - type = "writedata"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_write - { - width = "1"; - width_expression = ""; - direction = "input"; - type = "write"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_read - { - width = "1"; - width_expression = ""; - direction = "input"; - type = "read"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_waitrequest - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "waitrequest"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_readdata - { - width = "-1"; - width_expression = "((data_width - 1)) - (0) + 1"; - direction = "output"; - type = "readdata"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_readdatavalid - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "readdatavalid"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - } - } - SLAVE avalon_slave_0 - { - SYSTEM_BUILDER_INFO - { - Bus_Type = "avalon"; - } - PORT_WIRING - { - PORT sdram_cke - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_ba - { - width = "-1"; - width_expression = "((bank_width - 1)) - (0) + 1"; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_addr - { - width = "-1"; - width_expression = "((row_width - 1)) - (0) + 1"; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_cs_n - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_ras_n - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_cas_n - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_we_n - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_dq - { - width = "-1"; - width_expression = "((data_width - 1)) - (0) + 1"; - direction = "inout"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_dqm - { - width = "-1"; - width_expression = "(((data_width / 8) - 1)) - (0) + 1"; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - } - } - PORT_WIRING - { - PORT clk - { - width = "1"; - width_expression = ""; - direction = "input"; - type = "clk"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT reset - { - width = "1"; - width_expression = ""; - direction = "input"; - type = "reset"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - } - } - USER_INTERFACE - { - USER_LABELS - { - name = "sdram_ctrl"; - technology = "imported components"; - } - } - SOPC_Builder_Version = "0.0"; - COMPONENT_BUILDER - { - HDL_PARAMETERS - { - # generated by CBDocument.getParameterContainer - # used only by Component Editor - HDL_PARAMETER data_width - { - parameter_name = "data_width"; - type = "integer"; - default_value = "32"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER bank_width - { - parameter_name = "bank_width"; - type = "integer"; - default_value = "4"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER row_width - { - parameter_name = "row_width"; - type = "integer"; - default_value = "12"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER column_width - { - parameter_name = "column_width"; - type = "integer"; - default_value = "8"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER clk_mhz - { - parameter_name = "clk_mhz"; - type = "integer"; - default_value = "120"; - editable = "1"; - tooltip = ""; - } - } - } - } - } - } - } - } - ASSOCIATED_FILES - { - Add_Program = "the_wizard_ui"; - Edit_Program = "the_wizard_ui"; - Generator_Program = "cb_generator.pl"; - } -} Index: trunk/syn/sdram_ctrl/cb_generator.pl =================================================================== --- trunk/syn/sdram_ctrl/cb_generator.pl (revision 7) +++ trunk/syn/sdram_ctrl/cb_generator.pl (nonexistent) @@ -1,1159 +0,0 @@ -# | file: cb_generator.pl -# | -# | This SOPC Builder Generator program is provided by -# | the Component Builder application. It is copied -# | straight across and is data-driven from its command -# | line arguments and the PTF files referenced. -# | -# | Its purpose is to construct an HDL "wrapper" for -# | a particular instance of a particular SOPC Builder -# | peripheral. This wrapper resolves the instance -# | name and any HDL parameterization. -# | -# +------------------------------------------- - - - -# +------------------------------------------- -# | - -use strict; -use format_conversion_utils; -use ptf_parse; -use wiz_utils; -use europa_all; -use run_system_command_utils; - -# | -# +------------------------------------------- - - - -# +------------------------------------------- -# | -# | first pass: include all of generator_libarary.pm RIGHT HERE. -# | dvb04.08.02 -# | then prune down to actual functionality. -# | -# | TODO: Rewrite this whole file into something readable -# | this is much more confusing than I'm comfortable with. dvb04. -# | (though it does seem to work.) -# | - -my $DEBUG_DEFAULT_GEN = 1; - -#This is the global hash of arguments passed in by the generator program - -my $generator_hr = { - wrapper_args => { - make_wrapper => 0, - top_module_name => "", - simulate_hdl => 1, - ports => "", - }, - class_ptf_hr => "", - module_ptf_hr => "", - system_ptf_hr => "", - language => "", - external_args => "", - external_args_hr => "", - project_path_widget => "__PROJECT_DIRECTORY__", - generator_mode => "silent", - }; - - -sub generator_print_verbose -{ - my ($info) = (@_); - - if($generator_hr->{generator_mode} eq "verbose"){ - print("cb_generator.pl: ".$info); - } -} - -sub generator_enable_mode -{ - my ($mode) = (@_); - $generator_hr->{generator_mode} = $mode; -} - -sub generator_get_system_ptf_handle -{ - return $generator_hr->{system_ptf_hr}; -} - -sub generator_get_language -{ - return $generator_hr->{language}; -} - -sub generator_get_class_ptf_handle -{ - return $generator_hr->{class_ptf_hr}; -} - -sub default_ribbit -{ - my ($arg) = (@_); - &ribbit("\n\n--Error: default_gen_lib: $arg\n"); -} - - -sub _copy_files -{ - my ($dest_dir, $source_dir, @files) = (@_); - my $function_name; - - #validate args - &default_ribbit("No target dir for function copy_files!") - unless ($dest_dir ne ""); - - &default_ribbit("No source dir for function copy_files!") - unless ($source_dir ne ""); - - &default_ribbit("No files for function copy_files!") - unless (@files != 0); - - - #check for valid directories - opendir (SDIR, $source_dir) or - &default_ribbit("can't open $source_dir !"); - - opendir (DDIR, $dest_dir) or - &default_ribbit("can't open $dest_dir !"); - - - foreach my $source_file(@files){ - # | - # | Separate out the source subdir and the source filename - # | - my $source_subdir = ""; - my $source_filename = $source_file; - - if($source_filename =~ /^(.*)\/(.*)$/) # break on last slash - { - $source_subdir = "/$1"; # embed its leading slash, for concatty - $source_filename = $2; - } - - my $source_fullpath = "$source_dir$source_subdir/$source_filename"; - my $dest_fullpath = "$dest_dir/$source_filename"; - - &Perlcopy($source_fullpath, $dest_fullpath); - &generator_print_verbose("Copying file: \"$source_fullpath\"" - . " to \"$dest_fullpath\".\n"); - } - - closedir (SDIR); - closedir (DDIR); -} - - -sub get_module_wrapper_arg_hash_from_system_ptf_file -{ - my $module_ptf_hr = $generator_hr->{module_ptf_hr}; - - my @list_of_sections = ("MASTER","SLAVE","PORT_WIRING"); - my @port_list; - foreach my $section(@list_of_sections){ - my $number = get_child_count($module_ptf_hr, $section); - - for(my $initial=0; $initial < $number; $initial++){ - - my $interface_section = get_child($module_ptf_hr, $initial, $section); - my $interface_section_name = get_data($interface_section); - - my $port_wiring_section; - if($section ne "PORT_WIRING"){ - $port_wiring_section = - get_child_by_path($module_ptf_hr, $section." ".$interface_section_name."/PORT_WIRING"); - }else{ - $port_wiring_section = - get_child_by_path($module_ptf_hr, $section); - } - my $num_ports = get_child_count($port_wiring_section, "PORT"); - foreach(my $port_count = 0; $port_count < $num_ports; $port_count++){ - my $port = get_child($port_wiring_section, $port_count, "PORT"); - - my %port_info_struct; - $port_info_struct{name} = get_data($port); - $port_info_struct{direction} = get_data_by_path($port, "direction"); - $port_info_struct{width} = get_data_by_path($port, "width"); - $port_info_struct{vhdl_record_name} = get_data_by_path($port, "vhdl_record_name"); - $port_info_struct{vhdl_record_type} = get_data_by_path($port, "vhdl_record_type"); - - push(@port_list, \%port_info_struct); - - } - } - } - $generator_hr->{wrapper_args}{ports} = \@port_list; -} - - -sub generator_make_module_wrapper -{ - my ($simulate_hdl, $top_module_name, $module_language) = (@_); - - &default_ribbit("generator_make_module_wrapper: no arg0 passed in for simulate_hdl\n") - if($simulate_hdl eq ''); - - &default_ribbit("generator_make_module_wrapper: no arg1 passed in for top_module_name\n") - unless($top_module_name); - - $generator_hr->{wrapper_args}{simulate_hdl} = $simulate_hdl; - $generator_hr->{wrapper_args}{top_module_name} = $top_module_name; - $generator_hr->{wrapper_args}{make_wrapper} = 1; - $generator_hr->{wrapper_args}{module_language} = $module_language; - -} - - - - -# | -# | recognize varous number forms, -# | return 'h0123abcd-ish. -# | -sub turn_anything_into_appropriate_string($$$$) - { - my ($value,$type,$editable,$module_language) = (@_); - - return $value if($value =~ /^\"/); # quoted string: unscathed - return $value if($type eq "string"); # string: anything is ok - - return $value if(!$editable); # and you know, if you can't change it, keep it! - - - # | - # | first, convert to a number - # | - my $base = 10; - my $n = $value; - my $width = 32; - my $number = 0; - - $value = lc($value); # lower case - - if($value =~ /^([0-9]*)\'([hbo])(.*)$/) - { - # | tick notation: AOK for verilog - if($module_language eq "verilog") - { - $number = $value; - } - # | - # | note: at this point, we could notice if the - # | result should be vhdl binary, and convert - # | to that, avoiding the precision-losing - # | integer intermediary - # | - # | (alternatively, we could use a binary string - # | always as the intermediate form, rather than - # | a precision-losing int.) - # | - else - { - $width = $1; - my $baseletter = $2; - my $digits = $3; - - if($baseletter eq "h") - { - $base = 16; - } - elsif($baseletter eq "b") - { - $base = 2; - } - elsif($baseletter eq "o") # must be - { - $base = 8; - } - - $digits =~ s/[ _-]//g; # crush out dividing value - - while(length($digits) > 0) - { - my $digit = substr($digits,0,1); - $digits = substr($digits,1); - my $digitvalue = hex($digit); # how handy - $number = $number * $base + $digitvalue; - } - } - } - elsif($value =~ /^0x(.*)$/) - { - $number = hex($1); - } - else # try for decimal - { - $number = int(1 * $value); - } - - # | - # | ok, we have a number. If our target type - # | is "std_logic_vector(this downto that)" - # | for tricky VHDL, we - # | must quote a binary string out of it. - # | - - if(($module_language eq "vhdl") and ($type =~ /^.*\((\d+) downto (\d+)\).*$/)) - { - my ($high_bit,$low_bit) = ($1,$2); - my $binary = ""; - for(my $bit = $low_bit; $bit <= $high_bit; $bit++) - { - $binary = ($number % 2) . $binary; - $number = int($number >> 1); - } - - $number = '"' . $binary . '"'; - } - - return $number; - } - -# -# return @array of vhdl libraries, if any, from the class.ptf -sub get_libraries() -{ - my $class_ptf = generator_get_class_ptf_handle(); - my @libraries; - my $libraries_ptf = get_child_by_path($class_ptf,"CLASS/CB_GENERATOR/LIBRARIES"); - - if($libraries_ptf) - { - my $library_count = get_child_count($libraries_ptf,"library"); - for(my $i = 0; $i < $library_count; $i++) - { - my $library_ptf = get_child($libraries_ptf,$i,"library"); - my $library_name = get_data($library_ptf); - push(@libraries,$library_name); - } - } - - return @libraries; -} - - - -sub _generator_make_module_wrapper -{ - - my $wrapper_args = $generator_hr->{wrapper_args}; - my $no_black_box = $wrapper_args->{simulate_hdl}; - my $top_module_name = $wrapper_args->{top_module_name}; - my $language = $generator_hr->{language}; - my @external_args = @{$generator_hr->{external_args}}; - my $module_ptf_hr = $generator_hr->{module_ptf_hr}; - - ### Build Module - my $project = e_project->new(@external_args); - my $top = $project->top(); - - # add the ports to the system module - my @ports; - - foreach my $port_hash(@{$wrapper_args->{ports}}){ - my $porto = e_port->new({ - name => $port_hash->{name}, - width => $port_hash->{width}, - direction => $port_hash->{direction}, - vhdl_record_name => $port_hash->{vhdl_record_name}, - vhdl_record_type => $port_hash->{vhdl_record_type} - }); - push(@ports, $porto); - } - $top->add_contents(@ports); - - - - - - # +---------------------------------------- - # | Get parameters from class.ptf - # | create @array of parameters, eacho - # | one like name=>, default=>, type=>, - # | - # | These are the definitions of parameters for - # | ANY instance of this module; we need to - # | have them in the "wrapee" module so that - # | when the system bus is knitted together - # | the parameter types can be properly used. - # | - # | (as it turns out, verilog doesnt need - # | them, but vhld does) - # | - # | dvb2004 - - - my @e_hdl_parameters; # list of e_parameters - - my $class_ptf = generator_get_class_ptf_handle(); - my $hdl_parameter_definitions_ptf = get_child_by_path($class_ptf,"CLASS/COMPONENT_BUILDER/HDL_PARAMETERS"); - - my @libraries = get_libraries(); - - my $hdl_parameter_count = get_child_count($hdl_parameter_definitions_ptf,"HDL_PARAMETER"); - - my $module_language = $generator_hr->{wrapper_args}{module_language}; - - for(my $i = 0; $i < $hdl_parameter_count; $i++) - { - my $a_parameter = get_child($hdl_parameter_definitions_ptf,$i,"HDL_PARAMETER"); - my $parameter_editable = get_data_by_path($a_parameter,"editable"); - if($parameter_editable) - { - my $boring_name = get_data($a_parameter); # legal guinevere-ized - my $name = get_data_by_path($a_parameter,"parameter_name"); # original HDL name - my $default = get_data_by_path($a_parameter,"default_value"); - my $type = get_data_by_path($a_parameter,"type"); - - $default = turn_anything_into_appropriate_string($default,$type,1,$module_language); - - my $a_parameter = e_parameter->new - ({ - name => $name, - default => $default, - type => $type - }); - - push (@e_hdl_parameters,$a_parameter); - } - } - - - - # | and @e_hdl_parameters is used below in the wrapee module - # +-------------------------------------------- - - # +-------------------------------------------- - # | Now, we build a "hdl_parameter_map", which is just - # | your basic hash table with keys (parameters) - # | and values (parameter values). - # | - # | these are the particular values for this instance. - # | - - my %hdl_parameter_map; - my $module_ptf = $generator_hr->{module_ptf_hr}; - my $hdl_parameters_ptf = - get_child_by_path($module_ptf,"WIZARD_SCRIPT_ARGUMENTS/hdl_parameters"); - - my $child_count = get_child_count($hdl_parameters_ptf); - - for(my $i = 0; $i < $child_count; $i++) - { - my $a_parameter = get_child($hdl_parameters_ptf,$i); - - my $boring_name = get_name($a_parameter); - my $value = get_data($a_parameter); - - # refer back to the original HDL name... - my $parameter_definition_ptf = get_child_by_path($hdl_parameter_definitions_ptf,"HDL_PARAMETER $boring_name"); - my $parameter_name = get_data_by_path($parameter_definition_ptf,"parameter_name"); - my $parameter_type = get_data_by_path($parameter_definition_ptf,"type"); - my $parameter_editable = get_data_by_path($parameter_definition_ptf,"editable"); - - $value = turn_anything_into_appropriate_string($value,$parameter_type,$parameter_editable,$module_language); - - # | - # | our internal _dummy assignment shows up here - # | without a corresponding hdl entry. we - # | ignore it. - # | - - if(($parameter_name ne "") and $parameter_editable) - { - $hdl_parameter_map{$parameter_name} = $value; - } - } - - my $wrapee_module; - $wrapee_module = e_module->new({ - name => $top_module_name, - contents => [@ports,@e_hdl_parameters], - do_black_box => 0, - do_ptf => 0, - _hdl_generated => 1, - _explicitly_empty_module => 1, - }); - - # VHDL Libraries, from PTF file... - $wrapee_module->add_vhdl_libraries(@libraries); - $top->add_vhdl_libraries(@libraries); - - - $top->add_contents ( - e_instance->new({ - module => $wrapee_module, - parameter_map => \%hdl_parameter_map - }), - ); - - $project->top()->do_ptf(0); - $project->do_write_ptf(0); - - - my $module_file = $project->_target_module_name().".v"; - $module_file = $project->_target_module_name().".vhd" - if($language eq "vhdl"); - - $module_file = $generator_hr->{project_path_widget}."/".$module_file; - &generator_set_files_in_system_ptf("Synthesis_HDL_Files", ($module_file)); - $project->output(); - - - # if you don't want a simulation model, you don't get a simulation model - if($no_black_box eq "0") - { - my $black_project = e_project->new(@external_args); - $black_project->_target_module_name($top_module_name); - my $black_top = $black_project->top(); - - - - $black_top->add_contents(@ports); - my $black_top_instance; - $black_top_instance = e_module->new({ - name => $wrapper_args->{top_module_name}."_bb", - contents => [@ports], - do_black_box => 1, - do_ptf => 0, - _hdl_generated => 0, - _explicitly_empty_module => 1, - }); - - $black_top->add_contents ( - e_instance->new({ - module => $black_top_instance, - }), - ); - - - - - $black_project->top()->do_ptf(0); - $black_project->do_write_ptf(0); - - my $black_module_file = $black_project->_target_module_name().".v"; - $black_module_file = $black_project->_target_module_name().".vhd" - if($language eq "vhdl"); - - - $black_module_file = $generator_hr->{project_path_widget}."/".$black_module_file; - &generator_set_files_in_system_ptf("Simulation_HDL_Files", ($black_module_file)); - -# &set_data_by_path($module_ptf_hr, "HDL_INFO/Simulation_HDL_Files", $black_module_file); - - - $black_project->output(); - } - -} - -#### -# Args: $file_type : "synthesis", "synthesis_only", "simulation" -# @file_list : an array of files. This list of files is assumed to be relative to the -# component's directory - - -my $decoder_ring_hr = { - quartus_only => { - copy => 1, - copy_to => "project", - ptf_set => 0, - }, - simulation_only => { - copy => 1, - copy_to => "simulation", - ptf_set => 1, - ptf_section => "Simulation_HDL_Files", - }, - simulation_and_quartus => { - copy => 1, - copy_to => "project", - ptf_set => 1, - ptf_section => "Synthesis_HDL_Files", - }, - precompiled_simulation_files => { - copy => 0, - ptf_set => 1, - ptf_section => "Precompiled_Simulation_Library_Files", - }, - }; - - - - -sub generator_copy_files_and_set_system_ptf -{ - my ($hdl_section, @file_list) = (@_); - - my $ptf_path_prefix = ""; - my $external_args_hr = $generator_hr->{external_args_hr}; - my @new_file_array; - - #validate first - my $decoder_hash = $decoder_ring_hr->{$hdl_section}; - &default_ribbit("generator_copy_files_and_set_system_ptf: No understood HDL section passed in for first arg\n") - unless($decoder_ring_hr->{$hdl_section} ne ""); - - &generator_print_verbose("generator_copy_files_and_set_system_ptf: copying files for section ".$hdl_section."\n"); - - #copy second - my @new_file_array; - - # If we need to copy over some files, then we need to make sure we are - # keeping track of what files we copy over. - # Otherwise, we just need to keep track of the files that the user has asked to copy over - # and use these instead. - if($decoder_hash->{copy}){ - my $copy_to_location; - my $copy_from_location; - - if($decoder_hash->{copy_to} eq "project"){ - $copy_to_location = $external_args_hr->{system_directory}; - }elsif($decoder_hash->{copy_to} eq "simulation"){ - $copy_to_location = $external_args_hr->{system_sim_dir}; - }else{ - &default_ribbit("generator_copy_files_and_set_system_ptf: No understood copy files to location\n"); - } - - $copy_from_location = $external_args_hr->{class_directory}; - @new_file_array = &generator_copy_files($copy_to_location, $copy_from_location, @file_list); - }else{ - @new_file_array = @file_list; - } - - #scribble on PTF hash last - if($decoder_hash->{ptf_set}){ - - if($decoder_hash->{copy_to} eq "project"){ - foreach my $file(@new_file_array){ - $file =~ s/^.*\/(.*?)$/$1/; - $file = $generator_hr->{project_path_widget}."/".$file; - } - } - &generator_print_verbose("generator_copy_files_and_set_system_ptf: setting system PTF file in section ".$hdl_section."\n"); - if($decoder_hash->{ptf_section} eq "Precompiled_Simulation_Library_Files"){ - @new_file_array = map{$external_args_hr->{class_directory}."/".$_} @new_file_array; - } - &generator_set_files_in_system_ptf($decoder_hash->{ptf_section}, @new_file_array); - } -} - - - -#### -# Name: generator_set_files_in_system_ptf -# Args: $hdl_section -# @list_of_files -# Returns: 1 or 0 -# Purpose: This is an internal function used to set files in the module's section in the system PTF file -# -sub generator_set_files_in_system_ptf -{ - my ($hdl_section, @list_of_files) = (@_); - - my $file_list = join(",", @list_of_files); - my $previous_data; - - &generator_print_verbose("setting HDL_INFO/".$hdl_section." in system PTF file with ".$file_list."\n"); - my $previous_data = &get_data_by_path($generator_hr->{module_ptf_hr}, "HDL_INFO/".$hdl_section); - if($previous_data){ - $file_list = $previous_data . ", $file_list"; # spr 132177 - # swapping order, dvb 2003 - } - &set_data_by_path($generator_hr->{module_ptf_hr}, "HDL_INFO/".$hdl_section, $file_list); -} - -#### -# Name: generator_copy_files -# Args: $target_directory -# $source_directory -# @list_of_files -# Returns: The list of files which has been copied (suitable for framing!) -# Purpose: This is an internal function used to copy files around in the generator program. -# -sub generator_copy_files -{ - my ($target_directory, $source_directory, @list_of_files) = (@_); - - my @new_file_array; - - foreach my $file_name(@list_of_files){ - $file_name =~ s|\\|\/|g; - if($file_name =~ /\*\.*/){ - $file_name =~ s/\*/$1/; - my @found_list = &_find_all_dir_files_with_ext($source_directory, $file_name); - push(@new_file_array, @found_list); - }else{ - &generator_print_verbose("Copying: ".$file_name."\n"); - push(@new_file_array, $file_name); - } - } - - &_copy_files($target_directory, $source_directory, @new_file_array); - return @new_file_array; -} - - - -sub _find_all_dir_files_with_ext -{ - my ($dir, - $ext) = (@_); - - opendir (DIR, $dir) or - &default_ribbit("can't open $dir !"); - - my @all_files = readdir(DIR); - my @new_file_list; - - - foreach my $file (@all_files){ - if($file =~ /^.*($ext)$/){ - push(@new_file_list, $file); - } - } - - return @new_file_list; -} - -#### -# Name: generator_begin -# Args: Array of generator program launcher args -# Returns: A hash reference to the module's section in the system PTF file -# Purpose: This is the first subroutine a user should call before running the rest of their -# generator program. -# - -sub generator_begin -{ - my @external_args = (@_); - - my ($external_args_hr, - $temp_user_defined, - $temp_db_Module, - $temp_db_PTF_File) = Process_Wizard_Script_Arguments("", @external_args); - - &generator_print_verbose("generator_begin: initializing\n"); - - $generator_hr->{external_args_hr} = $external_args_hr; - $generator_hr->{external_args} = \@external_args; - - # open up class.ptf and - $generator_hr->{class_ptf_hr} = new_ptf_from_file($external_args_hr->{class_directory}."/class.ptf"); - - # get the system.ptf - $generator_hr->{system_ptf_hr} = new_ptf_from_file($external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf"); - $generator_hr->{module_ptf_hr} = &get_child_by_path($generator_hr->{system_ptf_hr}, "SYSTEM $external_args_hr->{system_name}/MODULE $external_args_hr->{target_module_name}"); - my $class_name = get_data_by_path($generator_hr->{module_ptf_hr}, "class"); - - # find the default generator section - $generator_hr->{language} = get_data_by_path($generator_hr->{system_ptf_hr}, "SYSTEM $external_args_hr->{system_name}/WIZARD_SCRIPT_ARGUMENTS/hdl_language"); - - # get some wrapper settings - &get_module_wrapper_arg_hash_from_system_ptf_file(); - - # clear system ptf's HDL section - &delete_child($generator_hr->{module_ptf_hr}, "HDL_INFO"); - - return $generator_hr->{module_ptf_hr}; -} - -#### -# Name: generator_end -# Args: none -# Returns: nothing -# Purpose: This is the last subroutine a user should call from their generator program. -# Not calling this subroutine will make you very sad... =< -# - -sub generator_end -{ - # o.k., time to make the wrapper and output it. - if($generator_hr->{wrapper_args}{make_wrapper}){ - &_generator_make_module_wrapper(); - } - - - my $external_args_hr = $generator_hr->{external_args_hr}; - my $ptf_file_name = $external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf"; - &generator_print_verbose("generator_end: writing PTF file ".$external_args_hr->{system_name}.".ptf to ".$external_args_hr->{system_directory}."\n"); - - default_ribbit("Cannot write PTF file ".$ptf_file_name."!\n") - unless(&write_ptf_file($generator_hr->{system_ptf_hr}, $external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf")); -} - -sub generator_end_read_module_wrapper_string -{ - my $language = &generator_get_language(); - my $ls; - - if($language =~ /vhdl/){ - $ls = ".vhd"; - }elsif($language =~ /verilog/){ - $ls = ".v"; - }else{ - &ribbit("generator_end_read_module_wrapper_string invoked with unkown language"); - } - my $system_dir = $generator_hr->{external_args_hr}->{system_directory}; - my $module_name = $generator_hr->{external_args_hr}->{target_module_name}; - - my $file = $system_dir."/".$module_name.$ls; - &generator_print_verbose("generator library reading file into string: $file\n"); - - open (FILE,"<$file") or ribbit "cannot open file ($file) ($!)\n"; - my $return_string; - while ()
- {
- $return_string .= $_;
- }
- close (FILE);
- return($return_string);
-}
-
-sub generator_end_write_module_wrapper_string
-{
- my $string = shift or ribbit "no string specified\n";
-
- my $language = &generator_get_language();
- my $ls;
-
- print $language;
-
- if($language =~ /vhdl/){
- $ls = ".vhd";
- }elsif($language =~ /verilog/){
- $ls = ".v";
- }else{
- &ribbit("generator_end_read_module_wrapper_string invoked with unkown language");
- }
- my $system_dir = $generator_hr->{external_args_hr}->{system_directory};
- my $module_name = $generator_hr->{external_args_hr}->{target_module_name};
-
- my $file = $system_dir."/".$module_name.$ls;
- &generator_print_verbose("generator library writing string into file: $file\n");
-
- open (FILE,">$file") or ribbit "cannot open file ($file) ($!)\n";
- print FILE $string;
- close (FILE);
-}
-# end of generator_library.pm
-
-
-
-
-
-#
-#
-#
-#
-# ---------------------------------------------------------------------
-
-# +----------------------------------------------------
-# | emit_system_h
-# |
-# | if "is_cpu", attempt to emit a system.h
-# | memory map.
-# |
-
-sub emit_system_h($$$)
- {
- my ($sopc_directory,$master,$system_ptf) = (@_);
-
- # |
- # | Build a system.h file for masters.
- # |
-
-
-# as of quartus 5.0, we prefer gtf-generate in sopc_builder directly
-
- my $gtf_generate = "$sopc_directory/bin/gtf-generate";
- my $gtf_filename = "$sopc_directory/bin/gtf/system.h.gtf";
-
- if(! -f $gtf_generate)
- {
- # but if sopc_builder is missing it for whatever reason,
- # try the one in sopc_kit_nios2
-
- my $sopc_kit_nios2 = $ENV{SOPC_KIT_NIOS2};
- if($sopc_kit_nios2 ne "")
- {
- $gtf_generate = "$sopc_kit_nios2/bin/gtf-generate";
- $gtf_filename = "$sopc_kit_nios2/bin/gtf/system.h.gtf";
- }
- }
-
- # |
- # | xml template
- # |
-
- my $stf_template = <
-
-
-
-
-
-
-EOP
-
- # |
- # | THINK
- # |
-
- my $output_directory = "./${master}_map";
- my $project_name = "ignored";
- my $stf_filename = "./${master}_project.stf";
-
- # |
- # | build up template variables
- # |
-
- my %template_vars;
- $template_vars{date} = fcu_date_time();
- $template_vars{whoami} = $0;
- $template_vars{project_name} = $project_name;
- $template_vars{system_ptf} = $system_ptf;
- $template_vars{output_directory} = $output_directory;
- $template_vars{master} = $master;
-
- # |
- # | poke in the values to the template
- # |
-
- foreach my $key (sort(keys(%template_vars)))
- {
- $stf_template =~ s/--$key--/$template_vars{$key}/gs;
- }
-
- ## debug print $stf_template;
-
- # |
- # | write out the stf file, so we can soon use it
- # |
-
- fcu_write_file($stf_filename,$stf_template);
-
- # |
- # | and use it
- # |
-
- if(-e $gtf_generate && -e $gtf_filename)
- {
-
- my $generate_cmd = $gtf_generate;
-
- $generate_cmd .= " --output-directory=$output_directory";
- $generate_cmd .= " --gtf=$gtf_filename";
- $generate_cmd .= " --stf=$stf_filename";
-
- r_system($sopc_directory,$generate_cmd);
-
- # |
- # | done with it
- # |
-
- r_system($sopc_directory,"rm $stf_filename");
-
- fcu_print_command("Generated memory map \"$output_directory/system.h\"");
- }
- else
- {
- fcu_print_command("Warning: did NOT emit system.h for $master");
- }
-
-
-
-
- }
-
-
-sub r_system($$)
- {
- my ($sopc_directory,$cmd) = (@_);
- fcu_print_command($cmd);
- return Run_Command_In_Unix_Like_Shell($sopc_directory,$cmd);
- }
-
-
-
-
-
-
-
-# +------------------------------------------
-# | synthesis and simulation files are are
-# | listed in CLASS/CB_GENERATOR/HDL_FILES.
-# |
-
-sub get_synthesis_files($)
- {
- my ($class_ptf) = (@_);
- my $synthesis_files = "";
- my $simulation_files = "";
-
- my $hdl_files = get_child_by_path($class_ptf,"CLASS/CB_GENERATOR/HDL_FILES");
- my $child_count = get_child_count($hdl_files);
- for(my $i = 0; $i < $child_count; $i++)
- {
- my $hdl_file = get_child($hdl_files,$i);
- if(get_name($hdl_file) eq "FILE")
- {
- my $filename = get_data_by_path($hdl_file,"filepath");
- my $use_in_synthesis = get_data_by_path($hdl_file,"use_in_synthesis");
- my $use_in_simulation = get_data_by_path($hdl_file,"use_in_simulation");
-
- if($use_in_synthesis)
- {
- $synthesis_files .= ", " if $synthesis_files;
- $synthesis_files .= $filename;
- }
-
- if($use_in_simulation)
- {
- $simulation_files .= ", " if $simulation_files;
- $simulation_files .= $filename;
- }
- }
- }
-
- return $synthesis_files;
- }
-
-
-
-
-
-
-
-
-sub main
- {
-
- push(@ARGV,"--verbose=1") if 0;
- my %args = fcu_parse_args(@ARGV);
-
- if(0)
- {
- foreach my $key (sort(keys(%args)))
- {
- print("--$key = $args{$key} \n");
- }
- }
-
- # |
- # | get the arguments we care about
- # |
-
- my $class_dir = fcu_get_switch(\%args,"module_lib_dir");
-
-
- my $target_module_name = fcu_get_switch(\%args,"target_module_name");
- my $system_name = fcu_get_switch(\%args,"system_name");
- my $sopc_directory = fcu_get_switch(\%args,"sopc_directory");
-
- # |
- # | preflight the arguments a little
- # |
-
- my $error_count = 0;
-
- my $class_ptf_path = "$class_dir/class.ptf";
- if(!-f $class_ptf_path)
- {
- print "error: no class.ptf at \"$class_dir\"\n";
- $error_count++;
- }
-
- die "$error_count errors" if($error_count > 0);
-
- # +-------------------------------------------
- # | ok, let us get to work
- # |
-
-
- my $class_ptf = new_ptf_from_file($class_ptf_path);
-
- # |
- # | emit system.h for this module
- # | TODO iff Is_CPU i guess.
- # |
-
- my $do_emit_system_h = get_data_by_path($class_ptf,
- "CLASS/CB_GENERATOR/emit_system_h");
- if($do_emit_system_h)
- {
- emit_system_h($sopc_directory,
- $target_module_name,
- "./$system_name.ptf");
- }
-
- my $top_module_name = get_data_by_path($class_ptf,
- "CLASS/CB_GENERATOR/top_module_name");
- my $file_name = "";
-
- # | stored as file_name.v:module_name, so we break it open
- if($top_module_name =~ /^(.*):(.*)$/)
- {
- $file_name = $1;
- my $module_name = $2;
- $top_module_name = $module_name;
- }
-
- # | language of this particular module...
-
- my $module_language = "verilog";
- if($file_name =~ /^.*\.vhd$/)
- {
- $module_language = "vhdl";
- }
-
- # |
- # | consult the CB_GENERATOR/HDL_FILES section regarding
- # | where our HDL files for synthesis are.
- # |
-
-
- my $synthesis_files = get_synthesis_files($class_ptf);
-
-
- my $instantiate_in_system_module = get_data_by_path($class_ptf,
- "CLASS/MODULE_DEFAULTS/SYSTEM_BUILDER_INFO/Instantiate_In_System_Module");
-
-
-
- if($instantiate_in_system_module)
- {
- generator_enable_mode ("terse");
-
-
- generator_begin (@ARGV);
-
-
- generator_make_module_wrapper(1,$top_module_name,$module_language);
-
- generator_copy_files_and_set_system_ptf
- (
- "simulation_and_quartus",
- split(/ *, */,$synthesis_files)
-# "$synthesis_files"
- );
-
- generator_end ();
- }
-
- exit (0);
- }
-
-$| = 1; # always polite to flush.
-main()
-
-# end of file
Index: trunk/syn/sdram_ctrl/hdl/sdram_ctrl.vhd
===================================================================
--- trunk/syn/sdram_ctrl/hdl/sdram_ctrl.vhd (revision 7)
+++ trunk/syn/sdram_ctrl/hdl/sdram_ctrl.vhd (nonexistent)
@@ -1,440 +0,0 @@
-------------------------------------------------------------------
---
--- sdram_ctrl.vhd
---
--- Module Description:
--- SDRAM small&fast controller
---
---
--- To Do:
--- configurable times
--- nios simulation support
---
--- Author(s):
--- Aleksey Kuzmenok, ntpqa@opencores.org
---
-------------------------------------------------------------------
---
--- Copyright (C) 2006 Aleksey Kuzmenok and OPENCORES.ORG
---
--- This module is free software; you can redistribute it and/or
--- modify it under the terms of the GNU Lesser General Public
--- License as published by the Free Software Foundation; either
--- version 2.1 of the License, or (at your option) any later version.
---
--- This module is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
--- Lesser General Public License for more details.
---
--- You should have received a copy of the GNU Lesser General Public
--- License along with this software; if not, write to the Free Software
--- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
---
-------------------------------------------------------------------
--- Test results
--- FPGA SDRAM CLK (not less than)
--- EP1C12XXXXC8 MT48LC4M32B2TG-7:G 125 MHz
--- EP1C6XXXXC8 IS42S16100C1-7TL 125 MHz
---
-------------------------------------------------------------------
-
-LIBRARY ieee;
-USE ieee.std_logic_1164.ALL;
-USE ieee.numeric_std.ALL;
-LIBRARY altera_mf;
-USE altera_mf.altera_mf_components.all;
-
-entity sdram_ctrl is
- generic(
- DATA_WIDTH: integer:=32;
- BANK_WIDTH: integer:=4;
- ROW_WIDTH: integer:=12;
- COLUMN_WIDTH: integer:=8;
-
- clk_MHz: integer:=120
- );
- port(
- signal clk : IN STD_LOGIC;
- signal reset : IN STD_LOGIC;
-
- -- IMPORTANT: for this Avalon(tm) interface
- -- 'Minimum Arbitration Shares'=1
- -- 'Max Pending Read Transactions'=9
- signal avs_nios_chipselect : IN STD_LOGIC;
- signal avs_nios_address : IN STD_LOGIC_VECTOR ((BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH-1) DOWNTO 0);
- signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0);
- signal avs_nios_writedata : IN STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
- signal avs_nios_write : IN STD_LOGIC;
- signal avs_nios_read : IN STD_LOGIC;
- signal avs_nios_waitrequest : OUT STD_LOGIC;
- signal avs_nios_readdata : OUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
- signal avs_nios_readdatavalid : OUT STD_LOGIC;
-
- -- global export signals
- signal sdram_cke : OUT STD_LOGIC; -- This pin has fixed state '1'
- signal sdram_ba : OUT STD_LOGIC_VECTOR ((BANK_WIDTH-1) DOWNTO 0);
- signal sdram_addr : OUT STD_LOGIC_VECTOR ((ROW_WIDTH-1) DOWNTO 0);
- signal sdram_cs_n : OUT STD_LOGIC; -- This pin has fixed state '0'
- signal sdram_ras_n : OUT STD_LOGIC;
- signal sdram_cas_n : OUT STD_LOGIC;
- signal sdram_we_n : OUT STD_LOGIC;
- signal sdram_dq : INOUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
- signal sdram_dqm : OUT STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0)
- );
-end sdram_ctrl;
-
-architecture behaviour of sdram_ctrl is
-
- CONSTANT FIFO_WIDTH: integer:=BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
-
- CONSTANT MODE: std_logic_vector(11 downto 0):="000000110000"; -- 1 word burst, CAS latency=3
- -- Only two times are configurable
- -- tINIT delay between powerup and load mode register = 100 us
- -- tREF refresh period = 15.625 us (64ms/4096rows)
- CONSTANT INIT_PAUSE_CLOCKS: integer:=(clk_MHz*10000)/91; -- 109.9 us just to be on the save side
- CONSTANT REFRESH_PERIOD_CLOCKS: integer:=(clk_MHz*1000)/65; -- 15.384 us the same purpose
- CONSTANT CAS_LATENCY: integer:=3; -- other latencies weren't been tested!
-
- COMPONENT scfifo
- GENERIC (
- add_ram_output_register : STRING;
- intended_device_family : STRING;
- lpm_numwords : NATURAL;
- lpm_showahead : STRING;
- lpm_type : STRING;
- lpm_width : NATURAL;
- lpm_widthu : NATURAL;
- overflow_checking : STRING;
- underflow_checking : STRING;
- use_eab : STRING
- );
- PORT (
- rdreq : IN STD_LOGIC ;
- empty : OUT STD_LOGIC ;
- aclr : IN STD_LOGIC ;
- clock : IN STD_LOGIC ;
- q : OUT STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
- wrreq : IN STD_LOGIC ;
- data : IN STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
- full : OUT STD_LOGIC
- );
- END COMPONENT;
-
- -- If you ask me why there are so many states, I'll answer that all times are fixed.
- -- The top speed for MT48LC4M32B2TG-7:G is 7 ns, therefore all times were based on it.
- -- tRP PRECHARGE command period = 3 clocks
- -- tRFC AUTO REFRESH period = 10 clocks
- -- tMRD LOAD MODE REGISTER command to ACTIVE or REFRESH command = 2 clocks
- -- tRCD ACTIVE to READ or WRITE delay = 3 clocks
- -- tRAS ACTIVE to PRECHARGE command = 7 clocks
- -- tRC ACTIVE to ACTIVE command period = 10 clocks
- -- tWR2 Write recovery time = 2 clocks
- type states is (
- INIT0,INIT1,INIT2,INIT3,INIT4,INIT5,INIT6,INIT7,
- INIT8,INIT9,INIT10,INIT11,INIT12,INIT13,INIT14,INIT15,
- INIT16,INIT17,INIT18,INIT19,INIT20,INIT21,INIT22,INIT23,INIT24,
- REFRESH0,REFRESH1,REFRESH2,REFRESH3,REFRESH4,REFRESH5,REFRESH6,REFRESH7,
- REFRESH8,REFRESH9,REFRESH10,REFRESH11,REFRESH12,REFRESH13,REFRESH14,
- ACTIVE0,ACTIVE1,ACTIVE2,ACTIVE3,ACTIVE4,
- IDLE,READ0,WRITE0);
- signal operation: states;
-
- signal fifo_q: std_logic_vector((FIFO_WIDTH-1) downto 0);
-
- signal init_counter: unsigned(15 downto 0):=to_unsigned(INIT_PAUSE_CLOCKS,16);
- signal refresh_counter: unsigned(15 downto 0);
- signal active_counter: unsigned(2 downto 0);
- signal active_address: unsigned((BANK_WIDTH+ROW_WIDTH-1) downto 0);
-
- signal bank: std_logic_vector((sdram_ba'length-1) downto 0);
- signal row: std_logic_vector((sdram_addr'length-1) downto 0);
- signal column: std_logic_vector((COLUMN_WIDTH-1) downto 0);
- signal be: std_logic_vector((sdram_dqm'length-1) downto 0);
- signal data: std_logic_vector((sdram_dq'length-1) downto 0);
-
- signal do_init,do_refresh,do_active,read_is_active,ready,tRCD_not_expired: std_logic:='0';
-
- signal fifo_rdreq,fifo_empty: std_logic;
-
- signal read_latency: std_logic_vector(CAS_LATENCY downto 0);
-
- signal fifo_data: std_logic_vector((FIFO_WIDTH-1) downto 0);
- signal fifo_wrreq,fifo_wrfull: std_logic;
-
- signal i_command : STD_LOGIC_VECTOR(4 downto 0);
- CONSTANT NOP: STD_LOGIC_VECTOR(4 downto 0):="10111";
- CONSTANT ACTIVE: STD_LOGIC_VECTOR(4 downto 0):="10011";
- CONSTANT READ: STD_LOGIC_VECTOR(4 downto 0):="10101";
- CONSTANT WRITE: STD_LOGIC_VECTOR(4 downto 0):="10100";
- CONSTANT PRECHARGE: STD_LOGIC_VECTOR(4 downto 0):="10010";
- CONSTANT AUTO_REFRESH: STD_LOGIC_VECTOR(4 downto 0):="10001";
- CONSTANT LOAD_MODE_REGISTER: STD_LOGIC_VECTOR(4 downto 0):="10000";
-
- signal i_address : STD_LOGIC_VECTOR((sdram_addr'length-1) DOWNTO 0);
- signal i_bank : STD_LOGIC_VECTOR((sdram_ba'length-1) DOWNTO 0);
- signal i_dqm : STD_LOGIC_VECTOR((sdram_dqm'length-1) DOWNTO 0);
- signal i_data : STD_LOGIC_VECTOR((sdram_dq'length-1) DOWNTO 0);
- attribute ALTERA_ATTRIBUTE : string;
- attribute ALTERA_ATTRIBUTE of i_command : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_address : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_bank : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_dqm : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of i_data : signal is "FAST_OUTPUT_REGISTER=ON";
- attribute ALTERA_ATTRIBUTE of avs_nios_readdata : signal is "FAST_INPUT_REGISTER=ON";
-begin
- (sdram_cke,sdram_cs_n,sdram_ras_n,sdram_cas_n,sdram_we_n) <= i_command;
- sdram_addr <= i_address;
- sdram_ba <= i_bank;
- sdram_dqm <= i_dqm;
- sdram_dq <= i_data;
-
- fifo_data<=avs_nios_address & avs_nios_writedata & avs_nios_byteenable & avs_nios_write & avs_nios_read;
- fifo_wrreq<=(avs_nios_write or avs_nios_read) and avs_nios_chipselect and not fifo_wrfull;
-
- avs_nios_waitrequest<=fifo_wrfull;
-
- fifo_rdreq<=not fifo_empty and not do_refresh and not do_active and not read_is_active and ready;
-
- do_active<='0' when active_address=unsigned((fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)))) else '1';
- read_is_active<='1' when read_latency(CAS_LATENCY-1 downto 0)>"000" and fifo_q(1)='1' else '0';
- ready<='1' when operation=IDLE or operation=READ0 or operation=WRITE0 else '0';
-
- operation_machine:process(reset,clk)
- begin
- if reset='1'
- then
- operation<=INIT0;
- active_address<=(others=>'1');
- elsif rising_edge(clk)
- then
-
- bank<=fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length));
- row<=fifo_q((fifo_q'length-bank'length-1) downto (fifo_q'length-bank'length-row'length));
- column<=fifo_q((column'length+data'length+be'length+2-1) downto (data'length+be'length+2));
- data<=fifo_q((data'length+be'length+2-1) downto (be'length+2));
- be<=fifo_q((be'length+2-1) downto 2);
-
- case operation is
- when INIT0=>
- if do_init='1'
- then operation<=INIT1;row(10)<='1';
- end if;
- when INIT1=>operation<=INIT2;
- when INIT2=>operation<=INIT3;
- when INIT3=>operation<=INIT4;
- when INIT4=>operation<=INIT5;
- when INIT5=>operation<=INIT6;
- when INIT6=>operation<=INIT7;
- when INIT7=>operation<=INIT8;
- when INIT8=>operation<=INIT9;
- when INIT9=>operation<=INIT10;
- when INIT10=>operation<=INIT11;
- when INIT11=>operation<=INIT12;
- when INIT12=>operation<=INIT13;
- when INIT13=>operation<=INIT14;
- when INIT14=>operation<=INIT15;
- when INIT15=>operation<=INIT16;
- when INIT16=>operation<=INIT17;
- when INIT17=>operation<=INIT18;
- when INIT18=>operation<=INIT19;
- when INIT19=>operation<=INIT20;
- when INIT20=>operation<=INIT21;
- when INIT21=>operation<=INIT22;
- when INIT22=>operation<=INIT23;
- when INIT23=>operation<=INIT24;row<=MODE((row'length-1) downto 0);
- when INIT24=>operation<=IDLE;
-
- when REFRESH0=>operation<=REFRESH1;
- when REFRESH1=>operation<=REFRESH2;
- when REFRESH2=>operation<=REFRESH3;
- when REFRESH3=>operation<=REFRESH4;
- when REFRESH4=>operation<=REFRESH5;
- when REFRESH5=>operation<=REFRESH6;
- when REFRESH6=>operation<=REFRESH7;
- when REFRESH7=>operation<=REFRESH8;
- when REFRESH8=>operation<=REFRESH9;
- when REFRESH9=>operation<=REFRESH10;
- when REFRESH10=>operation<=REFRESH11;
- when REFRESH11=>operation<=REFRESH12;
- when REFRESH12=>operation<=REFRESH13;
- active_address<=unsigned(fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)));
- when REFRESH13=>operation<=REFRESH14;
- when REFRESH14=>operation<=IDLE;
-
- when ACTIVE0=>operation<=ACTIVE1;
- when ACTIVE1=>operation<=ACTIVE2;
- when ACTIVE2=>operation<=ACTIVE3;
- active_address<=unsigned(fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)));
- when ACTIVE3=>operation<=ACTIVE4;
- when ACTIVE4=>operation<=IDLE;
-
- when others=>
- if do_refresh='1'
- then
- if tRCD_not_expired='0' and operation=IDLE
- then operation<=REFRESH0;row(10)<='1';
- else operation<=IDLE;
- end if;
- elsif do_active='1'
- then
- if tRCD_not_expired='0' and operation=IDLE
- then operation<=ACTIVE0;row(10)<='1';
- else operation<=IDLE;
- end if;
- elsif fifo_empty='1'
- then
- operation<=IDLE;
- elsif fifo_q(1)='1' --write
- then
- if read_latency(CAS_LATENCY-1 downto 0)>"000"
- then operation<=IDLE;
- else operation<=WRITE0;
- end if;
- elsif fifo_q(0)='1' --read
- then
- operation<=READ0;
- end if;
- end case;
- end if;
- end process;
-
- control_latency:process(reset,clk)
- begin
- if reset='1'
- then
- read_latency<=(others=>'0');
- elsif rising_edge(clk)
- then
- read_latency<=std_logic_vector(unsigned(read_latency) SLL 1);
- if operation=READ0
- then read_latency(0)<='1';
- else read_latency(0)<='0';
- end if;
- end if;
- end process;
- latch_readdata:process(reset,clk)
- begin
- if reset='1'
- then
- avs_nios_readdata<=(others=>'0');
- avs_nios_readdatavalid<='0';
- elsif rising_edge(clk)
- then
- avs_nios_readdata<=sdram_dq;
- avs_nios_readdatavalid<=read_latency(CAS_LATENCY);
- end if;
- end process;
- initialization:process(reset,clk)
- begin
- if rising_edge(clk)
- then
- if init_counter>0
- then
- init_counter<=init_counter-1;
- else do_init<='1';
- end if;
- end if;
- end process;
- refreshing:process(clk,reset)
- begin
- if reset='1'
- then
- refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
- do_refresh<='0';
- elsif rising_edge(clk)
- then
- if refresh_counter=to_unsigned(0,refresh_counter'length)
- then refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
- do_refresh<='1';
- else refresh_counter<=refresh_counter-1;
- end if;
- if operation=REFRESH0 or operation=REFRESH5
- then do_refresh<='0';
- end if;
- end if;
- end process;
- active_period:process(reset,clk)
- begin
- if reset='1'
- then
- active_counter<=(others=>'0');
- tRCD_not_expired<='0';
- elsif rising_edge(clk)
- then
- if operation=ACTIVE3 or operation=REFRESH13
- then active_counter<=to_unsigned(5,active_counter'length);
- elsif active_counter>0
- then active_counter<=active_counter-1;
- end if;
- end if;
- if active_counter>0
- then tRCD_not_expired<='1';
- else tRCD_not_expired<='0';
- end if;
- end process;
- latch_controls:process(clk,reset)
- begin
- if reset='1'
- then
- i_command<=NOP;
- i_address<=(others=>'0');
- i_bank<=(others=>'0');
- i_dqm<=(others=>'0');
- i_data<=(others=>'Z');
- elsif rising_edge(clk)
- then
- i_command<=NOP;
- i_bank<=bank;
- i_address<=(others=>'0');
- i_address((column'length-1) downto 0)<=column;
- i_data<=(others=>'Z');
- i_dqm<=(others=>'0');
-
- case operation is
- when INIT1|REFRESH0|ACTIVE0 =>
- i_command<=PRECHARGE;
- i_address<=row;
- when INIT4|INIT14|REFRESH3 =>
- i_command<=AUTO_REFRESH;
- when INIT24=>
- i_command<=LOAD_MODE_REGISTER;
- i_address<=row;
- when ACTIVE3|REFRESH13 =>
- i_command<=ACTIVE;
- i_address<=row;
- when READ0 =>
- i_command<=READ;
- when WRITE0 =>
- i_command<=WRITE;
- i_dqm<=not be;
- i_data<=data;
- when OTHERS =>
- end case;
- end if;
- end process;
-
- fifo: scfifo
- GENERIC MAP (
- add_ram_output_register => "ON",
- intended_device_family => "Cyclone",
- lpm_numwords => 4,
- lpm_showahead => "ON",
- lpm_type => "scfifo",
- lpm_width => FIFO_WIDTH,
- lpm_widthu => 2,
- overflow_checking => "ON",
- underflow_checking => "ON",
- use_eab => "ON"
- )
- PORT MAP (
- rdreq => fifo_rdreq,
- aclr => reset,
- clock => clk,
- wrreq => fifo_wrreq,
- data => fifo_data,
- empty => fifo_empty,
- q => fifo_q,
- full => fifo_wrfull
- );
-end behaviour;
Index: sdram_ctrl/trunk/src/sdram_ctrl.vhd
===================================================================
--- sdram_ctrl/trunk/src/sdram_ctrl.vhd (nonexistent)
+++ sdram_ctrl/trunk/src/sdram_ctrl.vhd (revision 8)
@@ -0,0 +1,484 @@
+------------------------------------------------------------------
+--
+-- sdram_ctrl.vhd
+--
+-- Module Description:
+-- SDRAM small&fast controller
+--
+--
+-- To Do:
+-- multichipselect support done
+-- configurable times 50%
+-- nios simulation support
+--
+-- Author(s):
+-- Aleksey Kuzmenok, ntpqa@opencores.org
+--
+------------------------------------------------------------------
+--
+-- Copyright (C) 2006 Aleksey Kuzmenok and OPENCORES.ORG
+--
+-- This module is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU Lesser General Public
+-- License as published by the Free Software Foundation; either
+-- version 2.1 of the License, or (at your option) any later version.
+--
+-- This module is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+-- Lesser General Public License for more details.
+--
+-- You should have received a copy of the GNU Lesser General Public
+-- License along with this software; if not, write to the Free Software
+-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+--
+------------------------------------------------------------------
+-- Hardware test results
+-- FPGA SDRAM CLK (not less than)
+-- EP1C12XXXXC8 MT48LC4M32B2TG-7:G 125 MHz
+-- EP1C6XXXXC8 IS42S16100C1-7TL 125 MHz
+--
+------------------------------------------------------------------
+-- History
+-- 22.10.2006 multichipselect functionaly tested
+-- 10.11.2006 first successful hardware test
+-- 07.12.2006 proved to be fully reliable
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+USE ieee.numeric_std.ALL;
+
+LIBRARY altera_mf;
+USE altera_mf.altera_mf_components.all;
+
+entity sdram_ctrl is
+ generic(
+ DATA_WIDTH: integer:=32;
+ CHIPSELECTS: integer:=1;
+ LOG2_OF_CS: integer:=0;
+ BANK_WIDTH: integer:=2;
+ ROW_WIDTH: integer:=12;
+ COLUMN_WIDTH: integer:=8;
+
+ MODE_REGISTER: integer:=48; -- 1 word burst, CAS latency=3
+
+ -- Only two times are configurable
+ -- tINIT delay between powerup and load mode register = 100 us
+ -- tREF refresh period = 15.625 us (64ms/4096rows)
+ clk_MHz: integer:=120;
+ t_INIT_uS: integer:=110; -- 109.9 us just to be on the save side
+ t_REF_nS: integer:=15384 -- 15.384 us the same purpose
+
+ );
+ port(
+ signal clk : IN STD_LOGIC;
+ signal reset : IN STD_LOGIC;
+
+ -- IMPORTANT: for this Avalon(tm) interface
+ -- 'Minimum Arbitration Shares'=1
+ -- 'Max Pending Read Transactions'=9
+ signal avs_nios_chipselect : IN STD_LOGIC;
+ signal avs_nios_address : IN STD_LOGIC_VECTOR ((LOG2_OF_CS+BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH-1) DOWNTO 0);
+ signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0);
+ signal avs_nios_writedata : IN STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal avs_nios_write : IN STD_LOGIC;
+ signal avs_nios_read : IN STD_LOGIC;
+ signal avs_nios_waitrequest : OUT STD_LOGIC;
+ signal avs_nios_readdata : OUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal avs_nios_readdatavalid : OUT STD_LOGIC;
+
+ -- global export signals
+ signal sdram_cke : OUT STD_LOGIC; -- This pin has the fixed state '1'
+ signal sdram_ba : OUT STD_LOGIC_VECTOR ((BANK_WIDTH-1) DOWNTO 0);
+ signal sdram_addr : OUT STD_LOGIC_VECTOR ((ROW_WIDTH-1) DOWNTO 0);
+ signal sdram_cs_n : OUT STD_LOGIC_VECTOR ((CHIPSELECTS-1) DOWNTO 0);
+ signal sdram_ras_n : OUT STD_LOGIC;
+ signal sdram_cas_n : OUT STD_LOGIC;
+ signal sdram_we_n : OUT STD_LOGIC;
+ signal sdram_dq : INOUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal sdram_dqm : OUT STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0)
+ );
+end sdram_ctrl;
+
+architecture behaviour of sdram_ctrl is
+
+ CONSTANT FIFO_WIDTH: integer:=LOG2_OF_CS+BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
+ CONSTANT BE_LOW_BIT: integer:=2;
+ CONSTANT DATA_LOW_BIT: integer:=(DATA_WIDTH/8)+2;
+ CONSTANT COL_LOW_BIT: integer:=DATA_WIDTH+(DATA_WIDTH/8)+2;
+ CONSTANT ROW_LOW_BIT: integer:=COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
+ CONSTANT BANK_LOW_BIT: integer:=ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
+ CONSTANT CS_LOW_BIT: integer:=BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
+
+ --CONSTANT MODE: std_logic_vector((sdram_addr'length-1) downto 0):=std_logic_vector(MODE_REGISTER((sdram_addr'length-1) downto 0));
+ CONSTANT INIT_PAUSE_CLOCKS: integer:=clk_MHz*t_INIT_uS;
+ CONSTANT REFRESH_PERIOD_CLOCKS: integer:=(clk_MHz*t_REF_nS)/1000;
+ CONSTANT CAS_LATENCY: integer:=3; -- other latencies weren't been tested!
+
+ COMPONENT scfifo
+ GENERIC (
+ add_ram_output_register : STRING;
+ intended_device_family : STRING;
+ lpm_numwords : NATURAL;
+ lpm_showahead : STRING;
+ lpm_type : STRING;
+ lpm_width : NATURAL;
+ lpm_widthu : NATURAL;
+ overflow_checking : STRING;
+ underflow_checking : STRING;
+ use_eab : STRING
+ );
+ PORT (
+ rdreq : IN STD_LOGIC ;
+ empty : OUT STD_LOGIC ;
+ aclr : IN STD_LOGIC ;
+ clock : IN STD_LOGIC ;
+ q : OUT STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
+ wrreq : IN STD_LOGIC ;
+ data : IN STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
+ full : OUT STD_LOGIC
+ );
+ END COMPONENT;
+
+ -- If you ask me why there are so many states, I'll answer that all times are fixed.
+ -- The top speed for MT48LC4M32B2TG-7:G is 7 ns, therefore all times were based on it.
+ -- tRP PRECHARGE command period = 3 clocks
+ -- tRFC AUTO REFRESH period = 10 clocks
+ -- tMRD LOAD MODE REGISTER command to ACTIVE or REFRESH command = 2 clocks
+ -- tRCD ACTIVE to READ or WRITE delay = 3 clocks
+ -- tRAS ACTIVE to PRECHARGE command = 7 clocks
+ -- tRC ACTIVE to ACTIVE command period = 10 clocks
+ -- tWR2 Write recovery time = 2 clocks
+ type states is (
+ INIT0,INIT1,INIT2,INIT3,INIT4,INIT5,INIT6,INIT7,
+ INIT8,INIT9,INIT10,INIT11,INIT12,INIT13,INIT14,INIT15,
+ INIT16,INIT17,INIT18,INIT19,INIT20,INIT21,INIT22,INIT23,INIT24,
+ REFRESH0,REFRESH1,REFRESH2,REFRESH3,REFRESH4,REFRESH5,REFRESH6,REFRESH7,
+ REFRESH8,REFRESH9,REFRESH10,REFRESH11,REFRESH12,REFRESH13,REFRESH14,
+ ACTIVE0,ACTIVE1,ACTIVE2,ACTIVE3,ACTIVE4,
+ IDLE,READ0,WRITE0);
+ signal operation: states;
+
+ signal fifo_q: std_logic_vector((FIFO_WIDTH-1) downto 0);
+
+ signal init_counter: unsigned(15 downto 0):=to_unsigned(INIT_PAUSE_CLOCKS,16);
+ signal refresh_counter: unsigned(15 downto 0);
+ signal active_counter: unsigned(2 downto 0);
+ signal active_address: unsigned((LOG2_OF_CS+BANK_WIDTH+ROW_WIDTH-1) downto 0);
+
+ signal chipselect: std_logic_vector(LOG2_OF_CS downto 0);
+ signal bank: std_logic_vector((sdram_ba'length-1) downto 0);
+ signal row: std_logic_vector((sdram_addr'length-1) downto 0);
+ signal column: std_logic_vector((COLUMN_WIDTH-1) downto 0);
+ signal data: std_logic_vector((sdram_dq'length-1) downto 0);
+ signal be: std_logic_vector((sdram_dqm'length-1) downto 0);
+
+ signal do_init,do_refresh,do_active,read_is_active,ready,tRCD_not_expired: std_logic:='0';
+
+ signal fifo_rdreq,fifo_empty: std_logic;
+
+ signal read_latency: std_logic_vector(CAS_LATENCY downto 0);
+
+ signal fifo_data: std_logic_vector((FIFO_WIDTH-1) downto 0);
+ signal fifo_wrreq,fifo_wrfull: std_logic;
+
+ signal i_command : STD_LOGIC_VECTOR(2 downto 0);
+ CONSTANT NOP: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="111";
+ CONSTANT ACTIVE: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="011";
+ CONSTANT READ: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="101";
+ CONSTANT WRITE: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="100";
+ CONSTANT PRECHARGE: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="010";
+ CONSTANT AUTO_REFRESH: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="001";
+ CONSTANT LOAD_MODE_REGISTER: STD_LOGIC_VECTOR((i_command'length-1) downto 0):="000";
+
+ signal i_address : STD_LOGIC_VECTOR((sdram_addr'length-1) DOWNTO 0);
+ signal i_chipselect: STD_LOGIC_VECTOR((sdram_cs_n'length-1) downto 0);
+ signal i_bank : STD_LOGIC_VECTOR((sdram_ba'length-1) DOWNTO 0);
+ signal i_dqm : STD_LOGIC_VECTOR((sdram_dqm'length-1) DOWNTO 0);
+ signal i_data : STD_LOGIC_VECTOR((sdram_dq'length-1) DOWNTO 0);
+ attribute ALTERA_ATTRIBUTE : string;
+ attribute ALTERA_ATTRIBUTE of i_command : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_address : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_chipselect : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_bank : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_dqm : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_data : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of avs_nios_readdata : signal is "FAST_INPUT_REGISTER=ON";
+
+ function DECODE(hex: std_logic_vector; size: integer) return std_logic_vector is
+ variable result : std_logic_vector((size-1) downto 0);
+ begin
+ result:=(others=>'1');
+ result(to_integer(unsigned(hex))):='0';
+ return result;
+ end;
+begin
+ sdram_cke<='1';
+ (sdram_ras_n,sdram_cas_n,sdram_we_n) <= i_command;
+ sdram_cs_n <= i_chipselect;
+ sdram_addr <= i_address;
+ sdram_ba <= i_bank;
+ sdram_dqm <= i_dqm;
+ sdram_dq <= i_data;
+
+ fifo_data<=avs_nios_address & avs_nios_writedata & avs_nios_byteenable & avs_nios_write & avs_nios_read;
+ fifo_wrreq<=(avs_nios_write or avs_nios_read) and avs_nios_chipselect and not fifo_wrfull;
+
+ avs_nios_waitrequest<=fifo_wrfull;
+
+ fifo_rdreq<=not fifo_empty and not do_refresh and not do_active and not read_is_active and ready;
+
+ do_active<='0' when active_address=unsigned(fifo_q((fifo_q'length-1) downto (column'length+data'length+be'length+2))) else '1';
+ read_is_active<='1' when read_latency(CAS_LATENCY-1 downto 0)>"000" and fifo_q(1)='1' else '0';
+ ready<='1' when operation=IDLE or operation=READ0 or operation=WRITE0 else '0';
+
+ operation_machine:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ operation<=INIT0;
+ active_address<=(others=>'1');
+ elsif rising_edge(clk)
+ then
+ if CHIPSELECTS>1
+ then
+ chipselect<='0'&fifo_q((FIFO_WIDTH-1) downto CS_LOW_BIT);
+ bank<=fifo_q((CS_LOW_BIT-1) downto BANK_LOW_BIT);
+ else
+ chipselect<=(others=>'0');
+ bank<=fifo_q((FIFO_WIDTH-1) downto BANK_LOW_BIT);
+ end if;
+
+ row<= fifo_q((BANK_LOW_BIT-1) downto ROW_LOW_BIT);
+ column<=fifo_q((ROW_LOW_BIT-1) downto COL_LOW_BIT);
+ data<= fifo_q((COL_LOW_BIT-1) downto DATA_LOW_BIT);
+ be<= fifo_q((DATA_LOW_BIT-1) downto BE_LOW_BIT);
+
+ case operation is
+ when INIT0=>
+ if do_init='1'
+ then operation<=INIT1;row(10)<='1';
+ end if;
+ when INIT1=>operation<=INIT2;
+ when INIT2=>operation<=INIT3;
+ when INIT3=>operation<=INIT4;
+ when INIT4=>operation<=INIT5;
+ when INIT5=>operation<=INIT6;
+ when INIT6=>operation<=INIT7;
+ when INIT7=>operation<=INIT8;
+ when INIT8=>operation<=INIT9;
+ when INIT9=>operation<=INIT10;
+ when INIT10=>operation<=INIT11;
+ when INIT11=>operation<=INIT12;
+ when INIT12=>operation<=INIT13;
+ when INIT13=>operation<=INIT14;
+ when INIT14=>operation<=INIT15;
+ when INIT15=>operation<=INIT16;
+ when INIT16=>operation<=INIT17;
+ when INIT17=>operation<=INIT18;
+ when INIT18=>operation<=INIT19;
+ when INIT19=>operation<=INIT20;
+ when INIT20=>operation<=INIT21;
+ when INIT21=>operation<=INIT22;
+ when INIT22=>operation<=INIT23;
+ when INIT23=>operation<=INIT24;row<=std_logic_vector(to_unsigned(MODE_REGISTER,row'length));
+ when INIT24=>operation<=IDLE;
+
+ when REFRESH0=>operation<=REFRESH1;
+ when REFRESH1=>operation<=REFRESH2;
+ when REFRESH2=>operation<=REFRESH3;
+ when REFRESH3=>operation<=REFRESH4;
+ when REFRESH4=>operation<=REFRESH5;
+ when REFRESH5=>operation<=REFRESH6;
+ when REFRESH6=>operation<=REFRESH7;
+ when REFRESH7=>operation<=REFRESH8;
+ when REFRESH8=>operation<=REFRESH9;
+ when REFRESH9=>operation<=REFRESH10;
+ when REFRESH10=>operation<=REFRESH11;
+ when REFRESH11=>operation<=REFRESH12;
+ when REFRESH12=>operation<=REFRESH13;
+ active_address<=unsigned(fifo_q((fifo_q'length-1) downto ROW_LOW_BIT));
+ when REFRESH13=>operation<=REFRESH14;
+ when REFRESH14=>operation<=IDLE;
+
+ when ACTIVE0=>operation<=ACTIVE1;
+ when ACTIVE1=>operation<=ACTIVE2;
+ when ACTIVE2=>operation<=ACTIVE3;
+ active_address<=unsigned(fifo_q((fifo_q'length-1) downto ROW_LOW_BIT));
+ when ACTIVE3=>operation<=ACTIVE4;
+ when ACTIVE4=>operation<=IDLE;
+
+ when others=>
+ if do_refresh='1'
+ then
+ if tRCD_not_expired='0' and operation=IDLE
+ then operation<=REFRESH0;row(10)<='1';
+ else operation<=IDLE;
+ end if;
+ elsif do_active='1'
+ then
+ if tRCD_not_expired='0' and operation=IDLE
+ then operation<=ACTIVE0;row(10)<='1';
+ else operation<=IDLE;
+ end if;
+ elsif fifo_empty='1'
+ then
+ operation<=IDLE;
+ elsif fifo_q(1)='1' --write
+ then
+ if read_latency(CAS_LATENCY-1 downto 0)>"000"
+ then operation<=IDLE;
+ else operation<=WRITE0;
+ end if;
+ elsif fifo_q(0)='1' --read
+ then
+ operation<=READ0;
+ end if;
+ end case;
+ end if;
+ end process;
+
+ control_latency:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ read_latency<=(others=>'0');
+ elsif rising_edge(clk)
+ then
+ read_latency<=std_logic_vector(unsigned(read_latency) SLL 1);
+ if operation=READ0
+ then read_latency(0)<='1';
+ else read_latency(0)<='0';
+ end if;
+ end if;
+ end process;
+ latch_readdata:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ avs_nios_readdata<=(others=>'0');
+ avs_nios_readdatavalid<='0';
+ elsif rising_edge(clk)
+ then
+ avs_nios_readdata<=sdram_dq;
+ avs_nios_readdatavalid<=read_latency(CAS_LATENCY);
+ end if;
+ end process;
+ initialization:process(reset,clk)
+ begin
+ if rising_edge(clk)
+ then
+ if init_counter>0
+ then
+ init_counter<=init_counter-1;
+ else do_init<='1';
+ end if;
+ end if;
+ end process;
+ refreshing:process(clk,reset)
+ begin
+ if reset='1'
+ then
+ refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
+ do_refresh<='0';
+ elsif rising_edge(clk)
+ then
+ if refresh_counter=to_unsigned(0,refresh_counter'length)
+ then refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
+ do_refresh<='1';
+ else refresh_counter<=refresh_counter-1;
+ end if;
+ if operation=REFRESH0 or operation=REFRESH5
+ then do_refresh<='0';
+ end if;
+ end if;
+ end process;
+ active_period:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ active_counter<=(others=>'0');
+ tRCD_not_expired<='0';
+ elsif rising_edge(clk)
+ then
+ if operation=ACTIVE3 or operation=REFRESH13
+ then active_counter<=to_unsigned(5,active_counter'length);
+ elsif active_counter>0
+ then active_counter<=active_counter-1;
+ end if;
+ end if;
+ if active_counter>0
+ then tRCD_not_expired<='1';
+ else tRCD_not_expired<='0';
+ end if;
+ end process;
+ latch_controls:process(clk,reset)
+ begin
+ if reset='1'
+ then
+ i_command<=NOP;
+ i_address<=(others=>'0');
+ i_bank<=(others=>'0');
+ i_dqm<=(others=>'0');
+ i_data<=(others=>'Z');
+ i_chipselect<=(others=>'1');
+ elsif rising_edge(clk)
+ then
+ i_command<=NOP;
+ i_chipselect<=DECODE(chipselect,i_chipselect'length);
+ i_bank<=bank;
+ i_address<=(others=>'0');
+ i_address((column'length-1) downto 0)<=column;
+ i_data<=(others=>'Z');
+ i_dqm<=(others=>'0');
+
+ case operation is
+ when INIT1|REFRESH0|ACTIVE0 =>
+ i_command<=PRECHARGE;
+ i_address<=row;
+ i_chipselect<=(others=>'0');
+ when INIT4|INIT14|REFRESH3 =>
+ i_command<=AUTO_REFRESH;
+ i_chipselect<=(others=>'0');
+ when INIT24=>
+ i_command<=LOAD_MODE_REGISTER;
+ i_address<=row;
+ i_chipselect<=(others=>'0');
+ when ACTIVE3|REFRESH13 =>
+ i_command<=ACTIVE;
+ i_address<=row;
+ when READ0 =>
+ i_command<=READ;
+ when WRITE0 =>
+ i_command<=WRITE;
+ i_dqm<=not be;
+ i_data<=data;
+ when OTHERS =>
+ end case;
+ end if;
+ end process;
+
+ fifo: scfifo
+ GENERIC MAP (
+ add_ram_output_register => "ON",
+ intended_device_family => "Auto",
+ lpm_numwords => 4,
+ lpm_showahead => "ON",
+ lpm_type => "scfifo",
+ lpm_width => FIFO_WIDTH,
+ lpm_widthu => 2,
+ overflow_checking => "ON",
+ underflow_checking => "ON",
+ use_eab => "ON"
+ )
+ PORT MAP (
+ rdreq => fifo_rdreq,
+ aclr => reset,
+ clock => clk,
+ wrreq => fifo_wrreq,
+ data => fifo_data,
+ empty => fifo_empty,
+ q => fifo_q,
+ full => fifo_wrfull
+ );
+end behaviour;
Index: sdram_ctrl/trunk/test_bench/sdram_ctrl_tb.vhd
===================================================================
--- sdram_ctrl/trunk/test_bench/sdram_ctrl_tb.vhd (nonexistent)
+++ sdram_ctrl/trunk/test_bench/sdram_ctrl_tb.vhd (revision 8)
@@ -0,0 +1,169 @@
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+USE ieee.numeric_std.ALL;
+
+entity sdram_ctrl_tb is
+end sdram_ctrl_tb;
+
+architecture structure of sdram_ctrl_tb is
+ component pll
+ port (
+ inclk0 : IN STD_LOGIC := '0';
+ c0 : OUT STD_LOGIC ;
+ e0 : OUT STD_LOGIC ;
+ locked : OUT STD_LOGIC
+ ) ;
+ end component ;
+ component sdram_ctrl is
+ port(
+ signal clk : IN STD_LOGIC;
+ signal reset : IN STD_LOGIC;
+
+ signal avs_nios_chipselect : IN STD_LOGIC;
+ signal avs_nios_address : IN STD_LOGIC_VECTOR (21 DOWNTO 0);
+ signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
+ signal avs_nios_writedata : IN STD_LOGIC_VECTOR (31 DOWNTO 0);
+ signal avs_nios_write : IN STD_LOGIC;
+ signal avs_nios_read : IN STD_LOGIC;
+ signal avs_nios_readdata : OUT STD_LOGIC_VECTOR (31 DOWNTO 0);
+ signal avs_nios_readdatavalid : OUT STD_LOGIC;
+ signal avs_nios_waitrequest : OUT STD_LOGIC;
+
+ signal sdram_addr : OUT STD_LOGIC_VECTOR (11 DOWNTO 0);
+ signal sdram_ba : OUT STD_LOGIC_VECTOR (1 DOWNTO 0);
+ signal sdram_cas_n : OUT STD_LOGIC;
+ signal sdram_cke : OUT STD_LOGIC;
+ signal sdram_cs_n : OUT STD_LOGIC_VECTOR(0 downto 0);
+ signal sdram_dq : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0);
+ signal sdram_dqm : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
+ signal sdram_ras_n : OUT STD_LOGIC;
+ signal sdram_we_n : OUT STD_LOGIC
+ );
+ end component;
+
+ component mt48lc4m32b2 IS
+ PORT (
+ Dq : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0) := (OTHERS => 'Z');
+ Addr : IN STD_LOGIC_VECTOR (11 DOWNTO 0) := (OTHERS => '0');
+ Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
+ Clk : IN STD_LOGIC := '0';
+ Cke : IN STD_LOGIC := '1';
+ Cs_n : IN STD_LOGIC := '1';
+ Ras_n : IN STD_LOGIC := '1';
+ Cas_n : IN STD_LOGIC := '1';
+ We_n : IN STD_LOGIC := '1';
+ Dqm : IN STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000"
+ );
+ END component;
+
+ component cpu_simulator IS
+ PORT(clk, reset: IN std_logic;
+ address : OUT std_logic_vector(21 downto 0):=(others=>'0');
+ writedata : out std_logic_vector(31 downto 0):=(others=>'0');
+ byteenable : out std_logic_vector(3 downto 0):=(others=>'0');
+ write : out std_logic:='0';
+ read : out std_logic:='0';
+ readdata : in std_logic_vector(31 downto 0);
+ waitrequest : in std_logic;
+ readdatavalid : in std_logic
+ );
+ END component;
+
+ signal reset, clk_ok: std_logic;
+ signal run_nios_n : std_logic:='1';
+ signal clk,i_clk: std_logic:='0';
+
+ signal SDRAM_CLK : std_logic;
+ signal SDRAM_CKE : std_logic;
+ signal SDRAM_NCS : std_logic_vector(0 downto 0);
+ signal SDRAM_NRAS : std_logic;
+ signal SDRAM_NCAS : std_logic;
+ signal SDRAM_NWE : std_logic;
+ signal SDRAM_ADDRESS : std_logic_vector(11 downto 0);
+ signal SDRAM_BANK : std_logic_vector(1 downto 0);
+ signal SDRAM_DQM : std_logic_vector(3 downto 0);
+ signal SDRAM_DATA : std_logic_vector(31 downto 0);
+
+ signal address : std_logic_vector(21 downto 0);
+ signal writedata : std_logic_vector(31 downto 0):=(others=>'0');
+ signal byteenable : std_logic_vector(3 downto 0):=(others=>'0');
+ signal write : std_logic;
+ signal read : std_logic;
+ signal chipselect : std_logic:='1';
+ signal readdata : std_logic_vector(31 downto 0);
+ signal waitrequest : std_logic;
+ signal readdatavalid : std_logic;
+
+begin
+
+ reset<= not clk_ok;
+ run_nios_n<= reset after 140 us;
+
+ UUT: sdram_ctrl
+ port map(
+ clk => i_clk,
+ reset => reset,
+
+ avs_nios_chipselect => chipselect,
+ avs_nios_address => address,
+ avs_nios_byteenable => byteenable,
+ avs_nios_writedata => writedata,
+ avs_nios_write => write,
+ avs_nios_read => read,
+ avs_nios_readdata => readdata,
+ avs_nios_readdatavalid => readdatavalid,
+ avs_nios_waitrequest => waitrequest,
+
+ sdram_addr => SDRAM_ADDRESS,
+ sdram_ba => SDRAM_BANK,
+ sdram_cas_n => SDRAM_NCAS,
+ sdram_cke => SDRAM_CKE,
+ sdram_cs_n => SDRAM_NCS,
+ sdram_dq => SDRAM_DATA,
+ sdram_dqm => SDRAM_DQM,
+ sdram_ras_n => SDRAM_NRAS,
+ sdram_we_n => SDRAM_NWE
+ );
+
+ sdram:mt48lc4m32b2
+ PORT MAP(
+ Dq => SDRAM_DATA,
+ Addr => SDRAM_ADDRESS,
+ Ba => SDRAM_BANK,
+ Clk => SDRAM_CLK,
+ Cke => SDRAM_CKE,
+ Cs_n => SDRAM_NCS(0),
+ Ras_n => SDRAM_NRAS,
+ Cas_n => SDRAM_NCAS,
+ We_n => SDRAM_NWE,
+ Dqm => SDRAM_DQM
+ );
+
+ cpu: cpu_simulator
+ PORT MAP(
+ clk => i_clk,
+ reset => run_nios_n,
+ address => address,
+ writedata => writedata,
+ byteenable => byteenable,
+ write => write,
+ read => read,
+ readdata => readdata,
+ waitrequest => waitrequest,
+ readdatavalid => readdatavalid
+ );
+
+ U1 : pll
+ port map(
+ inclk0 => clk,
+ c0 => i_clk,
+ e0 => SDRAM_CLK,
+ locked =>clk_ok
+ );
+
+ clock_generator:process
+ begin
+ wait for 21 ns;
+ clk<= clk xor '1';
+ end process;
+end structure;
Index: sdram_ctrl/trunk/test_bench/mt48lc4m32b2.vhd
===================================================================
--- sdram_ctrl/trunk/test_bench/mt48lc4m32b2.vhd (nonexistent)
+++ sdram_ctrl/trunk/test_bench/mt48lc4m32b2.vhd (revision 8)
@@ -0,0 +1,1134 @@
+-----------------------------------------------------------------------------------------
+--
+-- File Name: MT48LC4M32B2.VHD
+-- Version: 2.0
+-- Date: January 24th, 2002
+-- Model: Behavioral
+-- Simulator: Model Technology
+--
+-- Dependencies: None
+--
+-- Email: modelsupport@micron.com
+-- Company: Micron Technology, Inc.
+-- Part Number: MT48LC4M32A2 (1Mb x 32 x 4 Banks)
+--
+-- Description: Micron 128Mb SDRAM
+--
+-- Limitation: - Doesn't check for 4096-cycle refresh
+--
+-- Note: - Set simulator resolution to "ps" accuracy
+--
+-- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY
+-- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY
+-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
+-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT.
+--
+-- Copyright (c) 1998 Micron Semiconductor Products, Inc.
+-- All rights researved
+--
+-- Rev Author Date Changes
+-- --- -------------------------- -------------------------------------
+-- 2.0 SH 01/24/2002 - Second Release
+-- Micron Technology Inc.
+--
+--------------------------------------------------------------------------
+
+LIBRARY IEEE;
+ USE IEEE.STD_LOGIC_1164.ALL;
+ USE IEEE.STD_LOGIC_UNSIGNED.ALL;
+ USE IEEE.STD_LOGIC_ARITH.ALL;
+
+ENTITY mt48lc4m32b2 IS
+ GENERIC (
+ -- Timing Parameters for -75 (PC133) and CL = 3
+ tAC : TIME := 5.4 ns;
+ tHZ : TIME := 5.4 ns;
+ tOH : TIME := 2.7 ns;
+ tMRD : INTEGER := 2; -- 2 Clk Cycles
+ tRAS : TIME := 44.0 ns;
+ tRC : TIME := 66.0 ns;
+ tRCD : TIME := 20.0 ns;
+ tRFC : TIME := 66.0 ns;
+ tRP : TIME := 20.0 ns;
+ tRRD : TIME := 15.0 ns;
+ tWRa : TIME := 7.5 ns; -- Auto precharge
+ tWRm : TIME := 15.0 ns; -- Manual Precharge
+
+ tAH : TIME := 0.8 ns;
+ tAS : TIME := 1.5 ns;
+ tCH : TIME := 2.5 ns;
+ tCL : TIME := 2.5 ns;
+ tCK : TIME := 7.5 ns;
+ tDH : TIME := 0.8 ns;
+ tDS : TIME := 1.5 ns;
+ tCKH : TIME := 0.8 ns;
+ tCKS : TIME := 1.5 ns;
+ tCMH : TIME := 0.8 ns;
+ tCMS : TIME := 1.5 ns;
+
+ addr_bits : INTEGER := 12;
+ data_bits : INTEGER := 32;
+ col_bits : INTEGER := 8
+ );
+ PORT (
+ Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z');
+ Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
+ Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
+ Clk : IN STD_LOGIC := '0';
+ Cke : IN STD_LOGIC := '1';
+ Cs_n : IN STD_LOGIC := '1';
+ Ras_n : IN STD_LOGIC := '1';
+ Cas_n : IN STD_LOGIC := '1';
+ We_n : IN STD_LOGIC := '1';
+ Dqm : IN STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000"
+ );
+END mt48lc4m32b2;
+
+ARCHITECTURE behave OF mt48lc4m32b2 IS
+ TYPE State IS (BST, NOP, PRECH, READ, WRITE);
+ TYPE Array4xI IS ARRAY (3 DOWNTO 0) OF INTEGER;
+ TYPE Array4xT IS ARRAY (3 DOWNTO 0) OF TIME;
+ TYPE Array4xB IS ARRAY (3 DOWNTO 0) OF STD_LOGIC;
+ TYPE Array4x2BV IS ARRAY (3 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0);
+ TYPE Array4xCBV IS ARRAY (4 DOWNTO 0) OF STD_LOGIC_VECTOR (Col_bits - 1 DOWNTO 0);
+ TYPE Array_state IS ARRAY (4 DOWNTO 0) OF State;
+ SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
+ SIGNAL Active_enable, Aref_enable, Burst_term : STD_LOGIC := '0';
+ SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0';
+ SIGNAL Burst_length_1, Burst_length_2, Burst_length_4, Burst_length_8 : STD_LOGIC := '0';
+ SIGNAL Cas_latency_1, Cas_latency_2, Cas_latency_3 : STD_LOGIC := '0';
+ SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0';
+ SIGNAL Write_burst_mode : STD_LOGIC := '0';
+ SIGNAL Sys_clk, CkeZ : STD_LOGIC := '0';
+
+BEGIN
+ -- Strip the strength
+ Cs_in <= To_X01 (Cs_n);
+ Ras_in <= To_X01 (Ras_n);
+ Cas_in <= To_X01 (Cas_n);
+ We_in <= To_X01 (We_n);
+
+ -- Commands Decode
+ Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in;
+ Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in;
+ Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in);
+ Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in);
+ Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in);
+ Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in;
+ Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in);
+
+ -- Burst Length Decode
+ Burst_length_1 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND NOT(Mode_reg(0));
+ Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0);
+ Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0));
+ Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0);
+
+ -- CAS Latency Decode
+ Cas_latency_1 <= NOT(Mode_reg(6)) AND NOT(Mode_reg(5)) AND Mode_reg(4);
+ Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4));
+ Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4);
+
+ -- Write Burst Mode
+ Write_burst_mode <= Mode_reg(9);
+
+ -- System Clock
+ int_clk : PROCESS (Clk)
+ BEGIN
+ IF Clk'LAST_VALUE = '0' AND Clk = '1' THEN
+ CkeZ <= Cke;
+ END IF;
+ Sys_clk <= CkeZ AND Clk;
+ END PROCESS;
+
+ state_register : PROCESS
+ TYPE ram_type IS ARRAY (2**col_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0);
+ TYPE ram_pntr IS ACCESS ram_type;
+ TYPE ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF ram_pntr;
+ VARIABLE Bank0 : ram_stor;
+ VARIABLE Bank1 : ram_stor;
+ VARIABLE Bank2 : ram_stor;
+ VARIABLE Bank3 : ram_stor;
+ VARIABLE Row_index, Col_index : INTEGER := 0;
+ VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => '0');
+
+ VARIABLE Col_addr : Array4xCBV;
+ VARIABLE Bank_addr : Array4x2BV;
+ VARIABLE Dqm_reg0, Dqm_reg1 : STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000";
+
+ VARIABLE Bank, Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
+ VARIABLE B0_row_addr, B1_row_addr, B2_row_addr, B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
+ VARIABLE Col_brst : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0');
+ VARIABLE Row : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
+ VARIABLE Col : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0');
+ VARIABLE Burst_counter : INTEGER := 0;
+
+ VARIABLE Command : Array_state;
+ VARIABLE Bank_precharge : Array4x2BV;
+ VARIABLE A10_precharge : Array4xB := ('0' & '0' & '0' & '0');
+ VARIABLE Auto_precharge : Array4xB := ('0' & '0' & '0' & '0');
+ VARIABLE Read_precharge : Array4xB := ('0' & '0' & '0' & '0');
+ VARIABLE Write_precharge : Array4xB := ('0' & '0' & '0' & '0');
+ VARIABLE RW_interrupt_read : Array4xB := ('0' & '0' & '0' & '0');
+ VARIABLE RW_interrupt_write : Array4xB := ('0' & '0' & '0' & '0');
+ VARIABLE RW_interrupt_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
+ VARIABLE RW_interrupt_counter : Array4xI := (0 & 0 & 0 & 0);
+ VARIABLE Count_precharge : Array4xI := (0 & 0 & 0 & 0);
+
+ VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0';
+ VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0';
+ VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1';
+
+ -- Timing Check
+ VARIABLE MRD_chk : INTEGER := 0;
+ VARIABLE RFC_chk : TIME := 0 ns;
+ VARIABLE RRD_chk : TIME := 0 ns;
+ VARIABLE WR_chkm : Array4xT := (0 ns & 0 ns & 0 ns & 0 ns);
+ VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns;
+ VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns;
+ VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns;
+ VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns;
+
+ -- Initialize empty rows
+ PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR (1 DOWNTO 0); Row_index : INTEGER) IS
+ VARIABLE i, j : INTEGER := 0;
+ BEGIN
+ IF Bank = "00" THEN
+ IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty
+ Bank0 (Row_index) := NEW ram_type; -- Open new row for access
+ FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros
+ FOR j IN (data_bits - 1) DOWNTO 0 LOOP
+ Bank0 (Row_index) (i) (j) := '0';
+ END LOOP;
+ END LOOP;
+ END IF;
+ ELSIF Bank = "01" THEN
+ IF Bank1 (Row_index) = NULL THEN
+ Bank1 (Row_index) := NEW ram_type;
+ FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP
+ FOR j IN (data_bits - 1) DOWNTO 0 LOOP
+ Bank1 (Row_index) (i) (j) := '0';
+ END LOOP;
+ END LOOP;
+ END IF;
+ ELSIF Bank = "10" THEN
+ IF Bank2 (Row_index) = NULL THEN
+ Bank2 (Row_index) := NEW ram_type;
+ FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP
+ FOR j IN (data_bits - 1) DOWNTO 0 LOOP
+ Bank2 (Row_index) (i) (j) := '0';
+ END LOOP;
+ END LOOP;
+ END IF;
+ ELSIF Bank = "11" THEN
+ IF Bank3 (Row_index) = NULL THEN
+ Bank3 (Row_index) := NEW ram_type;
+ FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP
+ FOR j IN (data_bits - 1) DOWNTO 0 LOOP
+ Bank3 (Row_index) (i) (j) := '0';
+ END LOOP;
+ END LOOP;
+ END IF;
+ END IF;
+ END;
+
+ -- Burst Counter
+ PROCEDURE Burst_decode IS
+ VARIABLE Col_int : INTEGER := 0;
+ VARIABLE Col_vec, Col_temp : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0');
+ BEGIN
+ -- Advance Burst Counter
+ Burst_counter := Burst_counter + 1;
+
+ -- Burst Type
+ IF Mode_reg (3) = '0' THEN
+ Col_int := conv_integer(Col) + 1;
+ Col_temp := CONV_STD_LOGIC_VECTOR(Col_int, col_bits);
+ ELSIF Mode_reg (3) = '1' THEN
+ Col_vec := CONV_STD_LOGIC_VECTOR(Burst_counter, col_bits);
+ Col_temp (2) := Col_vec (2) XOR Col_brst (2);
+ Col_temp (1) := Col_vec (1) XOR Col_brst (1);
+ Col_temp (0) := Col_vec (0) XOR Col_brst (0);
+ END IF;
+
+ -- Burst Length
+ IF Burst_length_2 = '1' THEN
+ Col (0) := Col_temp (0);
+ ELSIF Burst_length_4 = '1' THEN
+ Col (1 DOWNTO 0) := Col_temp (1 DOWNTO 0);
+ ELSIF Burst_length_8 = '1' THEN
+ Col (2 DOWNTO 0) := Col_temp (2 DOWNTO 0);
+ ELSE
+ Col := Col_temp;
+ END IF;
+
+ -- Burst Read Single Write
+ IF Write_burst_mode = '1' AND Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ END IF;
+
+ -- Data counter
+ IF Burst_length_1 = '1' THEN
+ IF Burst_counter >= 1 THEN
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ ELSIF Data_out_enable = '1' THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+ ELSIF Burst_length_2 = '1' THEN
+ IF Burst_counter >= 2 THEN
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ ELSIF Data_out_enable = '1' THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+ ELSIF Burst_length_4 = '1' THEN
+ IF Burst_counter >= 4 THEN
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ ELSIF Data_out_enable = '1' THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+ ELSIF Burst_length_8 = '1' THEN
+ IF Burst_counter >= 8 THEN
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ ELSIF Data_out_enable = '1' THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+ END IF;
+ END;
+
+ BEGIN
+ WAIT ON Sys_clk;
+ IF Sys_clk'event AND Sys_clk = '1' THEN
+ -- Internal Pipeline
+ Command(0) := Command(1);
+ Command(1) := Command(2);
+ Command(2) := Command(3);
+ Command(3) := NOP;
+
+ Col_addr(0) := Col_addr(1);
+ Col_addr(1) := Col_addr(2);
+ Col_addr(2) := Col_addr(3);
+ Col_addr(3) := (OTHERS => '0');
+
+ Bank_addr(0) := Bank_addr(1);
+ Bank_addr(1) := Bank_addr(2);
+ Bank_addr(2) := Bank_addr(3);
+ Bank_addr(3) := "00";
+
+ Bank_precharge(0) := Bank_precharge(1);
+ Bank_precharge(1) := Bank_precharge(2);
+ Bank_precharge(2) := Bank_precharge(3);
+ Bank_precharge(3) := "00";
+
+ A10_precharge(0) := A10_precharge(1);
+ A10_precharge(1) := A10_precharge(2);
+ A10_precharge(2) := A10_precharge(3);
+ A10_precharge(3) := '0';
+
+ -- Dqm pipeline for Read
+ Dqm_reg0 := Dqm_reg1;
+ Dqm_reg1 := Dqm;
+
+ -- Read or Write with Auto Precharge Counter
+ IF Auto_precharge (0) = '1' THEN
+ Count_precharge (0) := Count_precharge (0) + 1;
+ END IF;
+ IF Auto_precharge (1) = '1' THEN
+ Count_precharge (1) := Count_precharge (1) + 1;
+ END IF;
+ IF Auto_precharge (2) = '1' THEN
+ Count_precharge (2) := Count_precharge (2) + 1;
+ END IF;
+ IF Auto_precharge (3) = '1' THEN
+ Count_precharge (3) := Count_precharge (3) + 1;
+ END IF;
+
+ -- Read or Write Interrupt Counter
+ IF RW_interrupt_write (0) = '1' THEN
+ RW_interrupt_counter (0) := RW_interrupt_counter (0) + 1;
+ END IF;
+ IF RW_interrupt_write (1) = '1' THEN
+ RW_interrupt_counter (1) := RW_interrupt_counter (1) + 1;
+ END IF;
+ IF RW_interrupt_write (2) = '1' THEN
+ RW_interrupt_counter (2) := RW_interrupt_counter (2) + 1;
+ END IF;
+ IF RW_interrupt_write (3) = '1' THEN
+ RW_interrupt_counter (3) := RW_interrupt_counter (3) + 1;
+ END IF;
+
+ -- tMRD Counter
+ MRD_chk := MRD_chk + 1;
+
+ -- Auto Refresh
+ IF Aref_enable = '1' THEN
+ -- Auto Refresh to Auto Refresh
+ ASSERT (NOW - RFC_chk >= tRFC)
+ REPORT "tRFC violation during Auto Refresh"
+ SEVERITY WARNING;
+
+ -- Precharge to Auto Refresh
+ ASSERT ((NOW - RP_chk0 >= tRP) OR (NOW - RP_chk1 >= tRP) OR
+ (NOW - RP_chk2 >= tRP) OR (NOW - RP_chk3 >= tRP))
+ REPORT "tRP violation during Auto Refresh"
+ SEVERITY WARNING;
+
+ -- Precharge to Auto Refresh
+ ASSERT (Pc_b0 ='1' AND Pc_b1 = '1' AND Pc_b2 ='1' AND Pc_b3 = '1')
+ REPORT "All banks must be Precharge before Auto Refresh"
+ SEVERITY WARNING;
+
+ -- Load Mode Register to Auto Refresh
+ ASSERT (MRD_chk >= tMRD)
+ REPORT "tMRD violation during Auto Refresh"
+ SEVERITY WARNING;
+
+ -- Record current tRFC time
+ RFC_chk := NOW;
+ END IF;
+
+ -- Load Mode Register
+ IF Mode_reg_enable = '1' THEN
+ -- Register Mode
+ Mode_reg <= Addr;
+
+ -- Precharge to Load Mode Register
+ ASSERT (Pc_b0 ='1' AND Pc_b1 = '1' AND Pc_b2 ='1' AND Pc_b3 = '1')
+ REPORT "All banks must be Precharge before Load Mode Register"
+ SEVERITY WARNING;
+
+ -- Precharge to Load Mode Register
+ ASSERT ((NOW - RP_chk0 >= tRP) OR (NOW - RP_chk1 >= tRP) OR
+ (NOW - RP_chk2 >= tRP) OR (NOW - RP_chk3 >= tRP))
+ REPORT "tRP violation during Load Mode Register"
+ SEVERITY WARNING;
+
+ -- Auto Refresh to Load Mode Register
+ ASSERT (NOW - RFC_chk >= tRFC)
+ REPORT "tRFC violation during Load Mode Register"
+ SEVERITY WARNING;
+
+ -- Load Mode Register to Load Mode Register
+ ASSERT (MRD_chk >= tMRD)
+ REPORT "tMRD violation during Load Mode Register"
+ SEVERITY WARNING;
+
+ -- Record current tMRD time
+ MRD_chk := 0;
+ END IF;
+
+ -- Active Block (Latch Bank and Row Address)
+ IF Active_enable = '1' THEN
+ -- Activate an OPEN bank can corrupt data
+ ASSERT ((Ba = "00" AND Act_b0 = '0') OR (Ba = "01" AND Act_b1 = '0') OR
+ (Ba = "10" AND Act_b2 = '0') OR (Ba = "11" AND Act_b3 = '0'))
+ REPORT "Bank is already activated - data can be corrupted"
+ SEVERITY WARNING;
+
+ -- Activate Bank 0
+ IF Ba = "00" AND Pc_b0 = '1' THEN
+ -- Activate to Activate (same bank)
+ ASSERT (NOW - RC_chk0 >= tRC)
+ REPORT "tRC violation during Activate Bank 0"
+ SEVERITY WARNING;
+
+ -- Precharge to Activate
+ ASSERT (NOW - RP_chk0 >= tRP)
+ REPORT "tRP violation during Activate Bank 0"
+ SEVERITY WARNING;
+
+ -- Record variables for checking violation
+ Act_b0 := '1';
+ Pc_b0 := '0';
+ B0_row_addr := Addr;
+ RAS_chk0 := NOW;
+ RC_chk0 := NOW;
+ RCD_chk0 := NOW;
+ END IF;
+
+ -- Activate Bank 1
+ IF Ba = "01" AND Pc_b1 = '1' THEN
+ -- Activate to Activate (same bank)
+ ASSERT (NOW - RC_chk1 >= tRC)
+ REPORT "tRC violation during Activate Bank 1"
+ SEVERITY WARNING;
+
+ -- Precharge to Activate
+ ASSERT (NOW - RP_chk1 >= tRP)
+ REPORT "tRP violation during Activate Bank 1"
+ SEVERITY WARNING;
+
+ -- Record variables for checking violation
+ Act_b1 := '1';
+ Pc_b1 := '0';
+ B1_row_addr := Addr;
+ RAS_chk1 := NOW;
+ RC_chk1 := NOW;
+ RCD_chk1 := NOW;
+ END IF;
+
+ -- Activate Bank 2
+ IF Ba = "10" AND Pc_b2 = '1' THEN
+ -- Activate to Activate (same bank)
+ ASSERT (NOW - RC_chk2 >= tRC)
+ REPORT "tRC violation during Activate Bank 2"
+ SEVERITY WARNING;
+
+ -- Precharge to Activate
+ ASSERT (NOW - RP_chk2 >= tRP)
+ REPORT "tRP violation during Activate Bank 2"
+ SEVERITY WARNING;
+
+ -- Record variables for checking violation
+ Act_b2 := '1';
+ Pc_b2 := '0';
+ B2_row_addr := Addr;
+ RAS_chk2 := NOW;
+ RC_chk2 := NOW;
+ RCD_chk2 := NOW;
+ END IF;
+
+ -- Activate Bank 3
+ IF Ba = "11" AND Pc_b3 = '1' THEN
+ -- Activate to Activate (same bank)
+ ASSERT (NOW - RC_chk3 >= tRC)
+ REPORT "tRC violation during Activate Bank 3"
+ SEVERITY WARNING;
+
+ -- Precharge to Activate
+ ASSERT (NOW - RP_chk3 >= tRP)
+ REPORT "tRP violation during Activate Bank 3"
+ SEVERITY WARNING;
+
+ -- Record variables for checking violation
+ Act_b3 := '1';
+ Pc_b3 := '0';
+ B3_row_addr := Addr;
+ RAS_chk3 := NOW;
+ RC_chk3 := NOW;
+ RCD_chk3 := NOW;
+ END IF;
+
+ -- Activate to Activate (different bank)
+ IF (Prev_bank /= Ba) THEN
+ ASSERT (NOW - RRD_chk >= tRRD)
+ REPORT "tRRD violation during Activate"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Auto Refresh to Activate
+ ASSERT (NOW - RFC_chk >= tRFC)
+ REPORT "tRFC violation during Activate"
+ SEVERITY WARNING;
+
+ -- Load Mode Register to Activate
+ ASSERT (MRD_chk >= tMRD)
+ REPORT "tMRD violation during Activate"
+ SEVERITY WARNING;
+
+ -- Record variable for checking violation
+ RRD_chk := NOW;
+ Prev_Bank := Ba;
+ END IF;
+
+ -- Precharge Block
+ IF Prech_enable = '1' THEN
+ -- Load Mode Register to Precharge
+ ASSERT (MRD_chk >= tMRD)
+ REPORT "tMRD violation during Precharge"
+ SEVERITY WARNING;
+
+ -- Precharge Bank 0
+ IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN
+ Act_b0 := '0';
+ Pc_b0 := '1';
+ RP_chk0 := NOW;
+
+ -- Activate to Precharge
+ ASSERT (NOW - RAS_chk0 >= tRAS)
+ REPORT "tRAS violation during Precharge"
+ SEVERITY WARNING;
+
+ -- tWR violation check for Write
+ ASSERT (NOW - WR_chkm(0) >= tWRm)
+ REPORT "tWR violation during Precharge"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Precharge Bank 1
+ IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN
+ Act_b1 := '0';
+ Pc_b1 := '1';
+ RP_chk1 := NOW;
+
+ -- Activate to Precharge
+ ASSERT (NOW - RAS_chk1 >= tRAS)
+ REPORT "tRAS violation during Precharge"
+ SEVERITY WARNING;
+
+ -- tWR violation check for Write
+ ASSERT (NOW - WR_chkm(1) >= tWRm)
+ REPORT "tWR violation during Precharge"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Precharge Bank 2
+ IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN
+ Act_b2 := '0';
+ Pc_b2 := '1';
+ RP_chk2 := NOW;
+
+ -- Activate to Precharge
+ ASSERT (NOW - RAS_chk2 >= tRAS)
+ REPORT "tRAS violation during Precharge"
+ SEVERITY WARNING;
+
+ -- tWR violation check for Write
+ ASSERT (NOW - WR_chkm(2) >= tWRm)
+ REPORT "tWR violation during Precharge"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Precharge Bank 3
+ IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN
+ Act_b3 := '0';
+ Pc_b3 := '1';
+ RP_chk3 := NOW;
+
+ -- Activate to Precharge
+ ASSERT (NOW - RAS_chk3 >= tRAS)
+ REPORT "tRAS violation during Precharge"
+ SEVERITY WARNING;
+
+ -- tWR violation check for Write
+ ASSERT (NOW - WR_chkm(3) >= tWRm)
+ REPORT "tWR violation during Precharge"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Terminate a Write Immediately (if same bank or all banks)
+ IF (Data_in_enable = '1' AND (Bank = Ba OR Addr(10) = '1')) THEN
+ Data_in_enable := '0';
+ END IF;
+
+ -- Precharge Command Pipeline for READ
+ IF CAS_latency_3 = '1' THEN
+ Command(2) := PRECH;
+ Bank_precharge(2) := Ba;
+ A10_precharge(2) := Addr(10);
+ ELSIF CAS_latency_2 = '1' THEN
+ Command(1) := PRECH;
+ Bank_precharge(1) := Ba;
+ A10_precharge(1) := Addr(10);
+ END IF;
+ END IF;
+
+ -- Burst Terminate
+ IF Burst_term = '1' THEN
+ -- Terminate a Write immediately
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ END IF;
+
+ -- Terminate a Read depend on CAS Latency
+ IF CAS_latency_3 = '1' THEN
+ Command(2) := BST;
+ ELSIF CAS_latency_2 = '1' THEN
+ Command(1) := BST;
+ END IF;
+ END IF;
+
+ -- Read Command
+ IF Read_enable = '1' THEN
+ -- Activate to Read
+ ASSERT ((Ba="00" AND Act_b0='1') OR (Ba="01" AND Act_b1='1') OR
+ (Ba="10" AND Act_b2='1') OR (Ba="11" AND Act_b3='1'))
+ REPORT "Bank is not Activated for Read"
+ SEVERITY WARNING;
+
+ -- Activate to Read
+ ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR
+ (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR
+ (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR
+ (Ba = "11" AND NOW - RCD_chk3 >= tRCD))
+ REPORT "tRCD violation during Read"
+ SEVERITY WARNING;
+
+ -- CAS Latency Pipeline
+ IF Cas_latency_3 = '1' THEN
+ Command(2) := READ;
+ Col_addr (2) := Addr(col_bits - 1 DOWNTO 0);
+ Bank_addr (2) := Ba;
+ ELSIF Cas_latency_2 = '1' THEN
+ Command(1) := READ;
+ Col_addr (1) := Addr(col_bits - 1 DOWNTO 0);
+ Bank_addr (1) := Ba;
+ ELSIF Cas_latency_1 = '1' THEN
+ Command(0) := READ;
+ Col_addr (0) := Addr(col_bits - 1 DOWNTO 0);
+ Bank_addr (0) := Ba;
+ END IF;
+
+ -- Read Terminate Write Immediately
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ -- Interrupt a Write with Auto Precharge
+ IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Write_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN
+ RW_interrupt_write(CONV_INTEGER(RW_Interrupt_Bank)) := '1';
+ RW_interrupt_counter (CONV_INTEGER(RW_Interrupt_Bank)) := 0;
+ ASSERT FALSE REPORT "Read interrupt a Write with Auto Precharge." SEVERITY NOTE;
+ END IF;
+ END IF;
+
+ -- Read Terminate Read after CL - 1
+ IF (Data_out_enable = '1' AND ((Cas_latency_2 = '1' AND ((Burst_length_2 = '1' AND Burst_counter < 1) OR
+ (Burst_length_4 = '1' AND Burst_counter < 3) OR
+ (Burst_length_8 = '1' AND Burst_counter < 7))) OR
+ (Cas_latency_3 = '1' AND ((Burst_length_4 = '1' AND Burst_counter < 2) OR
+ (Burst_length_8 = '1' AND Burst_counter < 6))))) THEN
+ -- Interrupt a Read with Auto Precharge
+ IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Read_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN
+ RW_interrupt_read(CONV_INTEGER(RW_Interrupt_Bank)) := '1';
+ ASSERT FALSE REPORT "Read interrupt a Read with Auto Precharge." SEVERITY NOTE;
+ END IF;
+ END IF;
+
+ -- Auto Precharge
+ IF Addr(10) = '1' THEN
+ Auto_precharge (CONV_INTEGER(Ba)) := '1';
+ Count_precharge (CONV_INTEGER(Ba)) := 0;
+ RW_Interrupt_Bank := Ba;
+ Read_precharge (CONV_INTEGER(Ba)) := '1';
+ END IF;
+ END IF;
+
+ -- Write Command
+ IF Write_enable = '1' THEN
+ -- Activate to Write
+ ASSERT ((Ba="00" AND Act_b0='1') OR (Ba="01" AND Act_b1='1') OR
+ (Ba="10" AND Act_b2='1') OR (Ba="11" AND Act_b3='1'))
+ REPORT "Bank is not Activated for Write"
+ SEVERITY WARNING;
+
+ -- Activate to Write
+ ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR
+ (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR
+ (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR
+ (Ba = "11" AND NOW - RCD_chk3 >= tRCD))
+ REPORT "tRCD violation during Write"
+ SEVERITY WARNING;
+
+ -- Latch write command, bank, column
+ Command(0) := WRITE;
+ Col_addr (0) := Addr(col_bits - 1 DOWNTO 0);
+ Bank_addr (0) := Ba;
+
+ -- Write Terminate Write Immediately
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+
+ -- Interrupt a Write with Auto Precharge
+ IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Write_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN
+ RW_interrupt_write(CONV_INTEGER(RW_Interrupt_Bank)) := '1';
+ RW_interrupt_counter (CONV_INTEGER(RW_Interrupt_Bank)) := 0;
+ ASSERT FALSE REPORT "Write interrupt a Write with Auto Precharge." SEVERITY NOTE;
+ END IF;
+ END IF;
+
+ -- Write Terminate Read Immediately
+ IF Data_out_enable = '1' THEN
+ Data_out_enable := '0';
+
+ -- Interrupt a Read with Auto Precharge
+ IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Read_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN
+ RW_interrupt_read(CONV_INTEGER(RW_Interrupt_Bank)) := '1';
+ ASSERT FALSE REPORT "Write interrupt a Read with Auto Precharge." SEVERITY NOTE;
+ END IF;
+ END IF;
+
+ -- Auto Precharge
+ IF Addr(10) = '1' THEN
+ Auto_precharge (CONV_INTEGER(Ba)) := '1';
+ Count_precharge (CONV_INTEGER(Ba)) := 0;
+ RW_Interrupt_Bank := Ba;
+ Write_precharge (CONV_INTEGER(Ba)) := '1';
+ END IF;
+ END IF;
+
+ -- Write with AutoPrecharge Calculation
+ -- The device start internal precharge when:
+ -- 1. Meet tRAS requirement
+ -- and 2. tWR cycle(s) after last valid data
+ -- or 3. Interrupt by a Read or Write (with or without Auto Precharge)
+ --
+ -- Note: Model is starting the internal precharge 1 cycle after they meet all the
+ -- requirement but tRP will be compensate for the time after the 1 cycle.
+ IF ((Auto_precharge(0) = '1') AND (Write_precharge(0) = '1')) THEN
+ IF (((NOW - RAS_chk0 >= tRAS) AND
+ (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(0) >= 1) OR
+ (Burst_length_2 = '1' AND Count_precharge(0) >= 2) OR
+ (Burst_length_4 = '1' AND Count_precharge(0) >= 4) OR
+ (Burst_length_8 = '1' AND Count_precharge(0) >= 8))) OR
+ (RW_interrupt_write(0) = '1' AND RW_interrupt_counter(0) >= 1)) THEN
+ Auto_precharge(0) := '0';
+ Write_precharge(0) := '0';
+ RW_interrupt_write(0) := '0';
+ Pc_b0 := '1';
+ Act_b0 := '0';
+ RP_chk0 := NOW + tWRa;
+ END IF;
+ END IF;
+ IF ((Auto_precharge(1) = '1') AND (Write_precharge(1) = '1')) THEN
+ IF (((NOW - RAS_chk1 >= tRAS) AND
+ (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(1) >= 1) OR
+ (Burst_length_2 = '1' AND Count_precharge(1) >= 2) OR
+ (Burst_length_4 = '1' AND Count_precharge(1) >= 4) OR
+ (Burst_length_8 = '1' AND Count_precharge(1) >= 8))) OR
+ (RW_interrupt_write(1) = '1' AND RW_interrupt_counter(1) >= 1)) THEN
+ Auto_precharge(1) := '0';
+ Write_precharge(1) := '0';
+ RW_interrupt_write(1) := '0';
+ Pc_b1 := '1';
+ Act_b1 := '0';
+ RP_chk1 := NOW + tWRa;
+ END IF;
+ END IF;
+ IF ((Auto_precharge(2) = '1') AND (Write_precharge(2) = '1')) THEN
+ IF (((NOW - RAS_chk2 >= tRAS) AND
+ (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(2) >= 1) OR
+ (Burst_length_2 = '1' AND Count_precharge(2) >= 2) OR
+ (Burst_length_4 = '1' AND Count_precharge(2) >= 4) OR
+ (Burst_length_8 = '1' AND Count_precharge(2) >= 8))) OR
+ (RW_interrupt_write(2) = '1' AND RW_interrupt_counter(2) >= 1)) THEN
+ Auto_precharge(2) := '0';
+ Write_precharge(2) := '0';
+ RW_interrupt_write(2) := '0';
+ Pc_b2 := '1';
+ Act_b2 := '0';
+ RP_chk2 := NOW + tWRa;
+ END IF;
+ END IF;
+ IF ((Auto_precharge(3) = '1') AND (Write_precharge(3) = '1')) THEN
+ IF (((NOW - RAS_chk3 >= tRAS) AND
+ (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(3) >= 1) OR
+ (Burst_length_2 = '1' AND Count_precharge(3) >= 2) OR
+ (Burst_length_4 = '1' AND Count_precharge(3) >= 4) OR
+ (Burst_length_8 = '1' AND Count_precharge(3) >= 8))) OR
+ (RW_interrupt_write(0) = '1' AND RW_interrupt_counter(3) >= 1)) THEN
+ Auto_precharge(3) := '0';
+ Write_precharge(3) := '0';
+ RW_interrupt_write(3) := '0';
+ Pc_b3 := '1';
+ Act_b3 := '0';
+ RP_chk3 := NOW + tWRa;
+ END IF;
+ END IF;
+
+ -- Read with AutoPrecharge Calculation
+ -- The device start internal precharge when:
+ -- 1. Meet minimum tRAS requirement
+ -- and 2. CL - 1 cycle(s) before last valid data
+ -- or 3. Interrupt by a Read or Write (with or without Auto Precharge)
+ IF ((Auto_precharge(0) = '1') AND (Read_precharge(0) = '1')) THEN
+ IF (((NOW - RAS_chk0 >= tRAS) AND
+ ((Burst_length_1 = '1' AND Count_precharge(0) >= 1) OR
+ (Burst_length_2 = '1' AND Count_precharge(0) >= 2) OR
+ (Burst_length_4 = '1' AND Count_precharge(0) >= 4) OR
+ (Burst_length_8 = '1' AND Count_precharge(0) >= 8))) OR
+ (RW_interrupt_read(0) = '1')) THEN
+ Pc_b0 := '1';
+ Act_b0 := '0';
+ RP_chk0 := NOW;
+ Auto_precharge(0) := '0';
+ Read_precharge(0) := '0';
+ RW_interrupt_read(0) := '0';
+ END IF;
+ END IF;
+ IF ((Auto_precharge(1) = '1') AND (Read_precharge(1) = '1')) THEN
+ IF (((NOW - RAS_chk1 >= tRAS) AND
+ ((Burst_length_1 = '1' AND Count_precharge(1) >= 1) OR
+ (Burst_length_2 = '1' AND Count_precharge(1) >= 2) OR
+ (Burst_length_4 = '1' AND Count_precharge(1) >= 4) OR
+ (Burst_length_8 = '1' AND Count_precharge(1) >= 8))) OR
+ (RW_interrupt_read(1) = '1')) THEN
+ Pc_b1 := '1';
+ Act_b1 := '0';
+ RP_chk1 := NOW;
+ Auto_precharge(1) := '0';
+ Read_precharge(1) := '0';
+ RW_interrupt_read(1) := '0';
+ END IF;
+ END IF;
+ IF ((Auto_precharge(2) = '1') AND (Read_precharge(2) = '1')) THEN
+ IF (((NOW - RAS_chk2 >= tRAS) AND
+ ((Burst_length_1 = '1' AND Count_precharge(2) >= 1) OR
+ (Burst_length_2 = '1' AND Count_precharge(2) >= 2) OR
+ (Burst_length_4 = '1' AND Count_precharge(2) >= 4) OR
+ (Burst_length_8 = '1' AND Count_precharge(2) >= 8))) OR
+ (RW_interrupt_read(2) = '1')) THEN
+ Pc_b2 := '1';
+ Act_b2 := '0';
+ RP_chk2 := NOW;
+ Auto_precharge(2) := '0';
+ Read_precharge(2) := '0';
+ RW_interrupt_read(2) := '0';
+ END IF;
+ END IF;
+ IF ((Auto_precharge(3) = '1') AND (Read_precharge(3) = '1')) THEN
+ IF (((NOW - RAS_chk3 >= tRAS) AND
+ ((Burst_length_1 = '1' AND Count_precharge(3) >= 1) OR
+ (Burst_length_2 = '1' AND Count_precharge(3) >= 2) OR
+ (Burst_length_4 = '1' AND Count_precharge(3) >= 4) OR
+ (Burst_length_8 = '1' AND Count_precharge(3) >= 8))) OR
+ (RW_interrupt_read(3) = '1')) THEN
+ Pc_b3 := '1';
+ Act_b3 := '0';
+ RP_chk3 := NOW;
+ Auto_precharge(3) := '0';
+ Read_precharge(3) := '0';
+ RW_interrupt_read(3) := '0';
+ END IF;
+ END IF;
+
+ -- Internal Precharge or Bst
+ IF Command(0) = PRECH THEN -- PRECH terminate a read if same bank or all banks
+ IF Bank_precharge(0) = Bank OR A10_precharge(0) = '1' THEN
+ IF Data_out_enable = '1' THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+ ELSIF Command(0) = BST THEN -- BST terminate a read regardless of bank
+ IF Data_out_enable = '1' THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+
+ IF Data_out_enable = '0' THEN
+ Dq <= TRANSPORT (OTHERS => 'Z') AFTER tOH;
+ END IF;
+
+ -- Detect Read or Write Command
+ IF Command(0) = READ THEN
+ Bank := Bank_addr (0);
+ Col := Col_addr (0);
+ Col_brst := Col_addr (0);
+ IF Bank_addr (0) = "00" THEN
+ Row := B0_row_addr;
+ ELSIF Bank_addr (0) = "01" THEN
+ Row := B1_row_addr;
+ ELSIF Bank_addr (0) = "10" THEN
+ Row := B2_row_addr;
+ ELSE
+ Row := B3_row_addr;
+ END IF;
+ Burst_counter := 0;
+ Data_in_enable := '0';
+ Data_out_enable := '1';
+ ELSIF Command(0) = WRITE THEN
+ Bank := Bank_addr(0);
+ Col := Col_addr(0);
+ Col_brst := Col_addr(0);
+ IF Bank_addr (0) = "00" THEN
+ Row := B0_row_addr;
+ ELSIF Bank_addr (0) = "01" THEN
+ Row := B1_row_addr;
+ ELSIF Bank_addr (0) = "10" THEN
+ Row := B2_row_addr;
+ ELSE
+ Row := B3_row_addr;
+ END IF;
+ Burst_counter := 0;
+ Data_in_enable := '1';
+ Data_out_enable := '0';
+ END IF;
+
+ -- DQ (Driver / Receiver)
+ Row_index := CONV_INTEGER (Row);
+ Col_index := CONV_INTEGER (Col);
+
+ IF Data_in_enable = '1' THEN
+ IF Dqm /= "1111" THEN
+ -- Initialize Memory
+ Init_mem (Bank, Row_index);
+
+ -- Array Buffer
+ CASE Bank IS
+ WHEN "00" => Dq_temp := Bank0 (Row_index) (Col_index);
+ WHEN "01" => Dq_temp := Bank1 (Row_index) (Col_index);
+ WHEN "10" => Dq_temp := Bank2 (Row_index) (Col_index);
+ WHEN OTHERS => Dq_temp := Bank3 (Row_index) (Col_index);
+ END CASE;
+
+ -- Dqm Operation
+ IF Dqm (0) = '0' THEN
+ Dq_temp ( 7 DOWNTO 0) := Dq ( 7 DOWNTO 0);
+ END IF;
+ IF Dqm (1) = '0' THEN
+ Dq_temp (15 DOWNTO 8) := Dq (15 DOWNTO 8);
+ END IF;
+ IF Dqm (2) = '0' THEN
+ Dq_temp (23 DOWNTO 16) := Dq (23 DOWNTO 16);
+ END IF;
+ IF Dqm (3) = '0' THEN
+ Dq_temp (31 DOWNTO 24) := Dq (31 DOWNTO 24);
+ END IF;
+
+ -- Write to Memory
+ CASE Bank IS
+ WHEN "00" => Bank0 (Row_index) (Col_index) := Dq_temp;
+ WHEN "01" => Bank1 (Row_index) (Col_index) := Dq_temp;
+ WHEN "10" => Bank2 (Row_index) (Col_index) := Dq_temp;
+ WHEN OTHERS => Bank3 (Row_index) (Col_index) := Dq_temp;
+ END CASE;
+
+ -- Record tWR for manual precharge
+ WR_chkm(CONV_INTEGER(Bank)) := NOW;
+ END IF;
+
+ -- Advance Burst Counter
+ Burst_decode;
+
+ ELSIF Data_out_enable = '1' THEN
+ IF Dqm_reg0 /= "1111" THEN
+ -- Initialize Memory
+ Init_mem (Bank, Row_index);
+
+ -- Array Buffer
+ CASE Bank IS
+ WHEN "00" => Dq_temp := Bank0 (Row_index) (Col_index);
+ WHEN "01" => Dq_temp := Bank1 (Row_index) (Col_index);
+ WHEN "10" => Dq_temp := Bank2 (Row_index) (Col_index);
+ WHEN OTHERS => Dq_temp := Bank3 (Row_index) (Col_index);
+ END CASE;
+
+ -- Dqm Operation
+ IF Dqm_reg0 (0) = '1' THEN
+ Dq_temp ( 7 DOWNTO 0) := (OTHERS => 'Z');
+ END IF;
+ IF Dqm_reg0 (1) = '1' THEN
+ Dq_temp (15 DOWNTO 8) := (OTHERS => 'Z');
+ END IF;
+ IF Dqm_reg0 (2) = '1' THEN
+ Dq_temp (23 DOWNTO 16) := (OTHERS => 'Z');
+ END IF;
+ IF Dqm_reg0 (3) = '1' THEN
+ Dq_temp (31 DOWNTO 24) := (OTHERS => 'Z');
+ END IF;
+
+ -- Output
+ Dq <= TRANSPORT Dq_temp AFTER tAC;
+ ELSE
+ Dq <= TRANSPORT (OTHERS => 'Z') AFTER tHZ;
+ END IF;
+
+ -- Advance Burst Counter
+ Burst_decode;
+ END IF;
+ END IF;
+
+ END PROCESS;
+
+ -- Clock timing checks
+ Clock_check : PROCESS
+ VARIABLE Clk_low, Clk_high : TIME := 0 ns;
+ BEGIN
+ WAIT ON Clk;
+ IF (Clk = '1' AND NOW >= 10 ns) THEN
+ ASSERT (NOW - Clk_low >= tCL)
+ REPORT "tCL violation"
+ SEVERITY WARNING;
+ ASSERT (NOW - Clk_high >= tCK)
+ REPORT "tCK violation"
+ SEVERITY WARNING;
+ Clk_high := NOW;
+ ELSIF (Clk = '0' AND NOW /= 0 ns) THEN
+ ASSERT (NOW - Clk_high >= tCH)
+ REPORT "tCH violation"
+ SEVERITY WARNING;
+ Clk_low := NOW;
+ END IF;
+ END PROCESS;
+
+ -- Setup timing checks
+ Setup_check : PROCESS
+ BEGIN
+ WAIT ON Clk;
+ IF Clk = '1' THEN
+ ASSERT(Cke'LAST_EVENT >= tCKS)
+ REPORT "CKE Setup time violation -- tCKS"
+ SEVERITY WARNING;
+ ASSERT(Cs_n'LAST_EVENT >= tCMS)
+ REPORT "CS# Setup time violation -- tCMS"
+ SEVERITY WARNING;
+ ASSERT(Cas_n'LAST_EVENT >= tCMS)
+ REPORT "CAS# Setup time violation -- tCMS"
+ SEVERITY WARNING;
+ ASSERT(Ras_n'LAST_EVENT >= tCMS)
+ REPORT "RAS# Setup time violation -- tCMS"
+ SEVERITY WARNING;
+ ASSERT(We_n'LAST_EVENT >= tCMS)
+ REPORT "WE# Setup time violation -- tCMS"
+ SEVERITY WARNING;
+ ASSERT(Dqm'LAST_EVENT >= tCMS)
+ REPORT "Dqm Setup time violation -- tCMS"
+ SEVERITY WARNING;
+ ASSERT(Addr'LAST_EVENT >= tAS)
+ REPORT "ADDR Setup time violation -- tAS"
+ SEVERITY WARNING;
+ ASSERT(Ba'LAST_EVENT >= tAS)
+ REPORT "BA Setup time violation -- tAS"
+ SEVERITY WARNING;
+ ASSERT(Dq'LAST_EVENT >= tDS)
+ REPORT "Dq Setup time violation -- tDS"
+ SEVERITY WARNING;
+ END IF;
+ END PROCESS;
+
+ -- Hold timing checks
+ Hold_check : PROCESS
+ BEGIN
+ WAIT ON Clk'DELAYED (tCKH), Clk'DELAYED (tCMH), Clk'DELAYED (tAH), Clk'DELAYED (tDH);
+ IF Clk'DELAYED (tCKH) = '1' THEN
+ ASSERT(Cke'LAST_EVENT > tCKH)
+ REPORT "CKE Hold time violation -- tCKH"
+ SEVERITY WARNING;
+ END IF;
+ IF Clk'DELAYED (tCMH) = '1' THEN
+ ASSERT(Cs_n'LAST_EVENT > tCMH)
+ REPORT "CS# Hold time violation -- tCMH"
+ SEVERITY WARNING;
+ ASSERT(Cas_n'LAST_EVENT > tCMH)
+ REPORT "CAS# Hold time violation -- tCMH"
+ SEVERITY WARNING;
+ ASSERT(Ras_n'LAST_EVENT > tCMH)
+ REPORT "RAS# Hold time violation -- tCMH"
+ SEVERITY WARNING;
+ ASSERT(We_n'LAST_EVENT > tCMH)
+ REPORT "WE# Hold time violation -- tCMH"
+ SEVERITY WARNING;
+ ASSERT(Dqm'LAST_EVENT > tCMH)
+ REPORT "Dqm Hold time violation -- tCMH"
+ SEVERITY WARNING;
+ END IF;
+ IF Clk'DELAYED (tAH) = '1' THEN
+ ASSERT(Addr'LAST_EVENT > tAH)
+ REPORT "ADDR Hold time violation -- tAH"
+ SEVERITY WARNING;
+ ASSERT(Ba'LAST_EVENT > tAH)
+ REPORT "BA Hold time violation -- tAH"
+ SEVERITY WARNING;
+ END IF;
+ IF Clk'DELAYED (tDH) = '1' THEN
+ ASSERT(Dq'LAST_EVENT > tDH)
+ REPORT "Dq Hold time violation -- tDH"
+ SEVERITY WARNING;
+ END IF;
+ END PROCESS;
+
+END behave;
Index: sdram_ctrl/trunk/test_bench/cpu_simulator.vhd
===================================================================
--- sdram_ctrl/trunk/test_bench/cpu_simulator.vhd (nonexistent)
+++ sdram_ctrl/trunk/test_bench/cpu_simulator.vhd (revision 8)
@@ -0,0 +1,72 @@
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+USE ieee.numeric_std.ALL;
+
+ENTITY cpu_simulator IS
+ PORT(clk, reset: in std_logic;
+
+ address : out std_logic_vector(21 downto 0);
+ writedata : out std_logic_vector(31 downto 0);
+ byteenable : out std_logic_vector(3 downto 0);
+ write : out std_logic;
+ read : out std_logic;
+ readdata : in std_logic_vector(31 downto 0);
+ waitrequest : in std_logic;
+ readdatavalid : in std_logic
+ );
+END cpu_simulator;
+
+ARCHITECTURE behaviour OF cpu_simulator IS
+ signal counter: unsigned(3 downto 0);
+ type vector is
+ record
+ address: integer;
+ writedata: integer;
+ byteenable: std_logic_vector(3 downto 0);
+ write: std_logic;
+ read: std_logic;
+ end record;
+ type script is array(0 to (2**counter'length)-1) of vector;
+ signal wave_form: script:=(
+ (0,0,"1111",'1','0'),
+ (1,1,"1111",'1','0'),
+ (2,2,"1111",'1','0'),
+ (3,3,"1111",'1','0'),
+ (1024,1024,"1111",'0','1'),
+ (1025,1025,"1111",'0','1'),
+ (1026,1026,"1111",'0','1'),
+ (1027,1027,"1111",'0','1'),
+ (1024,1024,"1111",'1','0'),
+ (1025,1025,"1111",'1','0'),
+ (1026,1026,"1111",'1','0'),
+ (1027,1027,"1111",'1','0'),
+ (0,0,"1111",'0','1'),
+ (1,1,"1111",'0','1'),
+ (2,2,"1111",'0','1'),
+ (3,3,"1111",'0','1')
+ );
+BEGIN
+ process(clk,reset)
+ begin
+ if reset='1'
+ then
+ counter<=(others=>'0');
+ address<=(others=>'0');
+ writedata<=(others=>'0');
+ byteenable<=(others=>'0');
+ write<='0';
+ read<='0';
+ elsif rising_edge(clk)
+ then
+ if waitrequest='0'
+ then
+ counter<=counter+1;
+ address<=std_logic_vector(to_unsigned(wave_form(to_integer(counter)).address,address'length));
+ writedata<=std_logic_vector(to_unsigned(wave_form(to_integer(counter)).writedata,writedata'length));
+ byteenable<=wave_form(to_integer(counter)).byteenable;
+ write<=wave_form(to_integer(counter)).write;
+ read<=wave_form(to_integer(counter)).read;
+ end if;
+ end if;
+ end process;
+END behaviour;
\ No newline at end of file
Index: sdram_ctrl/trunk/test_bench/pll.vhd
===================================================================
--- sdram_ctrl/trunk/test_bench/pll.vhd (nonexistent)
+++ sdram_ctrl/trunk/test_bench/pll.vhd (revision 8)
@@ -0,0 +1,256 @@
+-- megafunction wizard: %ALTPLL%
+-- GENERATION: STANDARD
+-- VERSION: WM1.0
+-- MODULE: altpll
+
+-- ============================================================
+-- File Name: pll.vhd
+-- Megafunction Name(s):
+-- altpll
+-- ============================================================
+-- ************************************************************
+-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
+--
+-- 5.1 Build 213 01/19/2006 SP 1 SJ Full Version
+-- ************************************************************
+
+
+--Copyright (C) 1991-2006 Altera Corporation
+--Your use of Altera Corporation's design tools, logic functions
+--and other software and tools, and its AMPP partner logic
+--functions, and any output files any of the foregoing
+--(including device programming or simulation files), and any
+--associated documentation or information are expressly subject
+--to the terms and conditions of the Altera Program License
+--Subscription Agreement, Altera MegaCore Function License
+--Agreement, or other applicable license agreement, including,
+--without limitation, that your use is for the sole purpose of
+--programming logic devices manufactured by Altera and sold by
+--Altera or its authorized distributors. Please refer to the
+--applicable agreement for further details.
+
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.all;
+
+LIBRARY altera_mf;
+USE altera_mf.altera_mf_components.all;
+
+ENTITY pll IS
+ PORT
+ (
+ inclk0 : IN STD_LOGIC := '0';
+ c0 : OUT STD_LOGIC ;
+ e0 : OUT STD_LOGIC ;
+ locked : OUT STD_LOGIC
+ );
+END pll;
+
+
+ARCHITECTURE SYN OF pll IS
+
+ SIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0);
+ SIGNAL sub_wire1 : STD_LOGIC ;
+ SIGNAL sub_wire2 : STD_LOGIC ;
+ SIGNAL sub_wire3 : STD_LOGIC_VECTOR (3 DOWNTO 0);
+ SIGNAL sub_wire4 : STD_LOGIC ;
+ SIGNAL sub_wire5 : STD_LOGIC ;
+ SIGNAL sub_wire6 : STD_LOGIC_VECTOR (1 DOWNTO 0);
+ SIGNAL sub_wire7_bv : BIT_VECTOR (0 DOWNTO 0);
+ SIGNAL sub_wire7 : STD_LOGIC_VECTOR (0 DOWNTO 0);
+
+
+
+ COMPONENT altpll
+ GENERIC (
+ clk0_divide_by : NATURAL;
+ clk0_duty_cycle : NATURAL;
+ clk0_multiply_by : NATURAL;
+ clk0_phase_shift : STRING;
+ compensate_clock : STRING;
+ extclk0_divide_by : NATURAL;
+ extclk0_duty_cycle : NATURAL;
+ extclk0_multiply_by : NATURAL;
+ extclk0_phase_shift : STRING;
+ inclk0_input_frequency : NATURAL;
+ intended_device_family : STRING;
+ invalid_lock_multiplier : NATURAL;
+ lpm_type : STRING;
+ operation_mode : STRING;
+ pll_type : STRING;
+ valid_lock_multiplier : NATURAL
+ );
+ PORT (
+ extclk : OUT STD_LOGIC_VECTOR (3 DOWNTO 0);
+ inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
+ locked : OUT STD_LOGIC ;
+ clk : OUT STD_LOGIC_VECTOR (5 DOWNTO 0)
+ );
+ END COMPONENT;
+
+BEGIN
+ sub_wire7_bv(0 DOWNTO 0) <= "0";
+ sub_wire7 <= To_stdlogicvector(sub_wire7_bv);
+ sub_wire1 <= sub_wire0(0);
+ c0 <= sub_wire1;
+ locked <= sub_wire2;
+ sub_wire4 <= sub_wire3(0);
+ e0 <= sub_wire4;
+ sub_wire5 <= inclk0;
+ sub_wire6 <= sub_wire7(0 DOWNTO 0) & sub_wire5;
+
+ altpll_component : altpll
+ GENERIC MAP (
+ clk0_divide_by => 2,
+ clk0_duty_cycle => 50,
+ clk0_multiply_by => 11,
+ clk0_phase_shift => "0",
+ compensate_clock => "CLK0",
+ extclk0_divide_by => 2,
+ extclk0_duty_cycle => 50,
+ extclk0_multiply_by => 11,
+ extclk0_phase_shift => "5682",
+ inclk0_input_frequency => 41666,
+ intended_device_family => "Cyclone",
+ invalid_lock_multiplier => 5,
+ lpm_type => "altpll",
+ operation_mode => "NORMAL",
+ pll_type => "AUTO",
+ valid_lock_multiplier => 1
+ )
+ PORT MAP (
+ inclk => sub_wire6,
+ clk => sub_wire0,
+ locked => sub_wire2,
+ extclk => sub_wire3
+ );
+
+
+
+END SYN;
+
+-- ============================================================
+-- CNX file retrieval info
+-- ============================================================
+-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0"
+-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000"
+-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "0"
+-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz"
+-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low"
+-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1"
+-- Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0"
+-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0"
+-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0"
+-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0"
+-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0"
+-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0"
+-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0"
+-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0"
+-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0"
+-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0"
+-- Retrieval info: PRIVATE: DEVICE_FAMILY NUMERIC "11"
+-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any"
+-- Retrieval info: PRIVATE: DEV_FAMILY STRING "Cyclone"
+-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1"
+-- Retrieval info: PRIVATE: DIV_FACTOR6 NUMERIC "1"
+-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000"
+-- Retrieval info: PRIVATE: DUTY_CYCLE6 STRING "50.00000000"
+-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0"
+-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1"
+-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0"
+-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0"
+-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575"
+-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1"
+-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "24.000"
+-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz"
+-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000"
+-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1"
+-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1"
+-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz"
+-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1"
+-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1"
+-- Retrieval info: PRIVATE: LOCK_LOSS_SWITCHOVER_CHECK STRING "0"
+-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1"
+-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "504.000"
+-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0"
+-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg"
+-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT6 STRING "deg"
+-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0"
+-- Retrieval info: PRIVATE: MIRROR_CLK6 STRING "0"
+-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1"
+-- Retrieval info: PRIVATE: MULT_FACTOR6 NUMERIC "1"
+-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1"
+-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "132.000"
+-- Retrieval info: PRIVATE: OUTPUT_FREQ6 STRING "100.000"
+-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1"
+-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE6 STRING "0"
+-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz"
+-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT6 STRING "MHz"
+-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000"
+-- Retrieval info: PRIVATE: PHASE_SHIFT6 STRING "0.00000000"
+-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg"
+-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT6 STRING "deg"
+-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0"
+-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0"
+-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1"
+-- Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "0"
+-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0"
+-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0"
+-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0"
+-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0"
+-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0"
+-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0"
+-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0"
+-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "0"
+-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0"
+-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0"
+-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000"
+-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz"
+-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500"
+-- Retrieval info: PRIVATE: SPREAD_USE STRING "0"
+-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0"
+-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1"
+-- Retrieval info: PRIVATE: STICKY_CLK6 STRING "0"
+-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1"
+-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "0"
+-- Retrieval info: PRIVATE: USE_CLK0 STRING "1"
+-- Retrieval info: PRIVATE: USE_CLK6 STRING "0"
+-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0"
+-- Retrieval info: PRIVATE: USE_CLKENA6 STRING "0"
+-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0"
+-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
+-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "2"
+-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50"
+-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "11"
+-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0"
+-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0"
+-- Retrieval info: CONSTANT: EXTCLK0_DIVIDE_BY NUMERIC "2"
+-- Retrieval info: CONSTANT: EXTCLK0_DUTY_CYCLE NUMERIC "50"
+-- Retrieval info: CONSTANT: EXTCLK0_MULTIPLY_BY NUMERIC "11"
+-- Retrieval info: CONSTANT: EXTCLK0_PHASE_SHIFT STRING "5682"
+-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "41666"
+-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone"
+-- Retrieval info: CONSTANT: INVALID_LOCK_MULTIPLIER NUMERIC "5"
+-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll"
+-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL"
+-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO"
+-- Retrieval info: CONSTANT: VALID_LOCK_MULTIPLIER NUMERIC "1"
+-- Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT VCC "@clk[5..0]"
+-- Retrieval info: USED_PORT: @extclk 0 0 4 0 OUTPUT VCC "@extclk[3..0]"
+-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT VCC "@inclk[1..0]"
+-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT VCC "c0"
+-- Retrieval info: USED_PORT: e0 0 0 0 0 OUTPUT VCC "e0"
+-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT GND "inclk0"
+-- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked"
+-- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0
+-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0
+-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0
+-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0
+-- Retrieval info: CONNECT: e0 0 0 0 0 @extclk 0 0 1 0
+-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd TRUE FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.vhd FALSE FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_waveforms.html FALSE FALSE
+-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_wave*.jpg FALSE FALSE
Index: sdram_ctrl/trunk/test_bench/old/nios.dat
===================================================================
--- sdram_ctrl/trunk/test_bench/old/nios.dat (nonexistent)
+++ sdram_ctrl/trunk/test_bench/old/nios.dat (revision 8)
@@ -0,0 +1 @@
+ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ
\ No newline at end of file
Index: sdram_ctrl/trunk/test_bench/old/Hello_LED_sdram_0.dat
===================================================================
--- sdram_ctrl/trunk/test_bench/old/Hello_LED_sdram_0.dat (nonexistent)
+++ sdram_ctrl/trunk/test_bench/old/Hello_LED_sdram_0.dat (revision 8)
@@ -0,0 +1,49 @@
+@00000000 00400034
+@00000001 08400804
+@00000002 0800683A
+@00000003 00000000
+@00000004 00000000
+@00000005 00000000
+@00000006 00000000
+@00000007 00000000
+@00000008 06C04034
+@00000009 DEC00004
+@0000000A 06800074
+@0000000B D6A03104
+@0000000C 00000340
+@0000000D DEFFFD04
+@0000000E DF000215
+@0000000F D839883A
+@00000010 00800084
+@00000011 E0800005
+@00000012 E0000045
+@00000013 E0800003
+@00000014 1080204C
+@00000015 1005003A
+@00000016 1000031E
+@00000017 E0800043
+@00000018 1080005C
+@00000019 E0800045
+@0000001A E0800043
+@0000001B 1005003A
+@0000001C 1000041E
+@0000001D E0800003
+@0000001E 1004D07A
+@0000001F E0800005
+@00000020 00000306
+@00000021 E0800003
+@00000022 1085883A
+@00000023 E0800005
+@00000024 00C04034
+@00000025 18C21004
+@00000026 E0800003
+@00000027 18800035
+@00000028 E0000115
+@00000029 E0C00117
+@0000002A 008000F4
+@0000002B 10834FC4
+@0000002C 10FFE616
+@0000002D E0800117
+@0000002E 10800044
+@0000002F E0800115
+@00000030 003FF806
Index: sdram_ctrl/trunk/test_bench/old/cpu_simulator_file_based.vhd
===================================================================
--- sdram_ctrl/trunk/test_bench/old/cpu_simulator_file_based.vhd (nonexistent)
+++ sdram_ctrl/trunk/test_bench/old/cpu_simulator_file_based.vhd (revision 8)
@@ -0,0 +1,79 @@
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+USE ieee.numeric_std.ALL;
+
+ENTITY cpu_simulator IS
+ PORT(clk, reset: in std_logic;
+
+ address : out std_logic_vector(21 downto 0);
+ writedata : out std_logic_vector(31 downto 0);
+ byteenable : out std_logic_vector(3 downto 0);
+ write : out std_logic;
+ read : out std_logic;
+ readdata : in std_logic_vector(31 downto 0);
+ waitrequest : in std_logic;
+ readdatavalid : in std_logic
+ );
+END cpu_simulator;
+
+ARCHITECTURE behaviour OF cpu_simulator IS
+ signal address: std_logic_vector(21 downto 0);
+ signal writedata: std_logic_vector(31 downto 0);
+ signal byteenable: std_logic_vector(3 downto 0);
+ signal write: std_logic;
+ signal read: std_logic;
+
+BEGIN
+ process(clk,reset)
+ variable service: std_logic_vector(7 downto 0);
+ variable b0,b1,b2,b3,b4,b5,b6,b7: BYTE;
+ begin
+ if reset='1'
+ then
+ file_close(NIOS);
+ file_open(NIOS, FILES_PATH&"nios.dat", READ_MODE);
+ elsif rising_edge(clk)
+ then
+ if waitrequest='0'
+ then
+ if Endfile(NIOS)
+ then
+ file_close(NIOS);
+ file_open(NIOS, FILES_PATH&"nios.dat", READ_MODE);
+ else
+ Read(NIOS,b0);
+ Read(NIOS,b1);
+ Read(NIOS,b2);
+ Read(NIOS,b3);
+ Read(NIOS,b4);
+ Read(NIOS,b5);
+ Read(NIOS,b6);
+ Read(NIOS,b7);
+ service:=char2std_logic_vector(b0);
+ address<=service(5 downto 0)&char2std_logic_vector(b1)&char2std_logic_vector(b2);
+ writedata<=char2std_logic_vector(b3)&char2std_logic_vector(b4)&char2std_logic_vector(b5)&char2std_logic_vector(b6);
+ service:=char2std_logic_vector(b7);
+ byteenable<=not service(7 downto 4);
+ write<=service(3);
+ read<=service(2);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk,reset)
+ begin
+ if reset='1'
+ then
+ readed<=(others=>'0');
+ new_data<='0';
+ elsif rising_edge(clk)
+ then
+ new_data<=readdatavalid;
+ if readdatavalid='1'
+ then
+ readed<=readdata;
+ end if;
+ end if;
+ end process;
+END behaviour;
\ No newline at end of file
Index: sdram_ctrl/trunk/test_bench/old/Count_Binary_sdram_0.dat
===================================================================
--- sdram_ctrl/trunk/test_bench/old/Count_Binary_sdram_0.dat (nonexistent)
+++ sdram_ctrl/trunk/test_bench/old/Count_Binary_sdram_0.dat (revision 8)
@@ -0,0 +1,5026 @@
+;Count Binary
+@00000000 00820014
+@00000001 1001483A
+@00000002 10BFF804
+@00000003 00BFFD16
+@00000004 00400034
+@00000005 08407204
+@00000006 0800683A
+@00000007 00000000
+@00000008 DEFFED04
+@00000009 DFC00015
+@0000000A D8400215
+@0000000B D8800315
+@0000000C D8C00415
+@0000000D D9000515
+@0000000E D9400615
+@0000000F D9800715
+@00000010 D9C00815
+@00000011 000B307A
+@00000012 DA000915
+@00000013 DA400A15
+@00000014 DA800B15
+@00000015 DAC00C15
+@00000016 DB000D15
+@00000017 DB400E15
+@00000018 DB800F15
+@00000019 DBC01015
+@0000001A D9401115
+@0000001B EBFFFF04
+@0000001C DBC01215
+@0000001D 0009313A
+@0000001E 2880004C
+@0000001F 10000326
+@00000020 20000226
+@00000021 00000EC0
+@00000022 00000306
+@00000023 DF401215
+@00000024 E8BFFF17
+@00000025 003DA03A
+@00000026 D9401117
+@00000027 DF401217
+@00000028 DFC00017
+@00000029 2801707A
+@0000002A D8400217
+@0000002B D8800317
+@0000002C D8C00417
+@0000002D D9000517
+@0000002E D9400617
+@0000002F D9800717
+@00000030 D9C00817
+@00000031 DA000917
+@00000032 DA400A17
+@00000033 DA800B17
+@00000034 DAC00C17
+@00000035 DB000D17
+@00000036 DB400E17
+@00000037 DB800F17
+@00000038 DBC01017
+@00000039 DEC01304
+@0000003A E800083A
+@0000003B DEFFF904
+@0000003C DFC00615
+@0000003D DF000515
+@0000003E D839883A
+@0000003F 0005313A
+@00000040 E0800415
+@00000041 E0800417
+@00000042 E0800315
+@00000043 E0800317
+@00000044 E0800015
+@00000045 E0000215
+@00000046 00800044
+@00000047 E0800115
+@00000048 E0C00017
+@00000049 E0800117
+@0000004A 1884703A
+@0000004B 1005003A
+@0000004C 1000101E
+@0000004D 00C00034
+@0000004E 18D3A504
+@0000004F E0800217
+@00000050 100490FA
+@00000051 10C9883A
+@00000052 00C00034
+@00000053 18D3A504
+@00000054 E0800217
+@00000055 100490FA
+@00000056 10C5883A
+@00000057 10800104
+@00000058 20C00017
+@00000059 11000017
+@0000005A E1400217
+@0000005B 183EE83A
+@0000005C 00000706
+@0000005D E0800117
+@0000005E 1085883A
+@0000005F E0800115
+@00000060 E0800217
+@00000061 10800044
+@00000062 E0800215
+@00000063 003FE406
+@00000064 0005313A
+@00000065 E0800315
+@00000066 E0800317
+@00000067 E0800415
+@00000068 E0800417
+@00000069 E0800015
+@0000006A E0800017
+@0000006B 1005003A
+@0000006C 1000011E
+@0000006D 003FD706
+@0000006E DFC00617
+@0000006F DF000517
+@00000070 DEC00704
+@00000071 F800283A
+@00000072 06C04034
+@00000073 DEC00004
+@00000074 06800074
+@00000075 D6B38B04
+@00000076 00800034
+@00000077 1093A104
+@00000078 00C00034
+@00000079 18D42804
+@0000007A 10C00326
+@0000007B 10000015
+@0000007C 10800104
+@0000007D 10FFFD36
+@0000007E 0000DB40
+@0000007F DEFFFE04
+@00000080 DFC00115
+@00000081 DF000015
+@00000082 D839883A
+@00000083 01000034
+@00000084 210D8704
+@00000085 00005100
+@00000086 01000034
+@00000087 210D8F04
+@00000088 00005100
+@00000089 01000034
+@0000008A 210D9604
+@0000008B 00005100
+@0000008C 01000034
+@0000008D 210D9D04
+@0000008E 00005100
+@0000008F DFC00117
+@00000090 DF000017
+@00000091 DEC00204
+@00000092 F800283A
+@00000093 DEFFFF04
+@00000094 DF000015
+@00000095 D839883A
+@00000096 00C04034
+@00000097 18C21004
+@00000098 D0A01603
+@00000099 18800035
+@0000009A DF000017
+@0000009B DEC00104
+@0000009C F800283A
+@0000009D DEFFFF04
+@0000009E DF000015
+@0000009F D839883A
+@000000A0 DF000017
+@000000A1 DEC00104
+@000000A2 F800283A
+@000000A3 DEFFFE04
+@000000A4 DF000115
+@000000A5 D839883A
+@000000A6 E1000015
+@000000A7 DF000117
+@000000A8 DEC00204
+@000000A9 F800283A
+@000000AA DEFFFD04
+@000000AB DFC00215
+@000000AC DF000115
+@000000AD D839883A
+@000000AE E1000015
+@000000AF 000024C0
+@000000B0 00002740
+@000000B1 E1000017
+@000000B2 000028C0
+@000000B3 D1601603
+@000000B4 01000034
+@000000B5 210DA404
+@000000B6 00005100
+@000000B7 DFC00217
+@000000B8 DF000117
+@000000B9 DEC00304
+@000000BA F800283A
+@000000BB DEFFFA04
+@000000BC DFC00515
+@000000BD DF000415
+@000000BE D839883A
+@000000BF E1400115
+@000000C0 E1000005
+@000000C1 E0800003
+@000000C2 108018D8
+@000000C3 1000201E
+@000000C4 D0A01717
+@000000C5 E0800215
+@000000C6 E0C00217
+@000000C7 188000A0
+@000000C8 1000101E
+@000000C9 E0C00217
+@000000CA 188000C8
+@000000CB 1000041E
+@000000CC E0C00217
+@000000CD 18800060
+@000000CE 1000081E
+@000000CF 00001106
+@000000D0 E0C00217
+@000000D1 18800120
+@000000D2 1000081E
+@000000D3 E0C00217
+@000000D4 18800220
+@000000D5 1000081E
+@000000D6 00000A06
+@000000D7 000024C0
+@000000D8 00003106
+@000000D9 00002740
+@000000DA 00002F06
+@000000DB E1000117
+@000000DC 000028C0
+@000000DD 00002C06
+@000000DE E1000117
+@000000DF 00002A80
+@000000E0 00002906
+@000000E1 E1000117
+@000000E2 00002A80
+@000000E3 00002606
+@000000E4 D0A01717
+@000000E5 E0800315
+@000000E6 E0C00317
+@000000E7 188000A0
+@000000E8 1000131E
+@000000E9 E0C00317
+@000000EA 188000C8
+@000000EB 1000041E
+@000000EC E0C00317
+@000000ED 18800060
+@000000EE 1000081E
+@000000EF 00001A06
+@000000F0 E0C00317
+@000000F1 18800120
+@000000F2 10000E1E
+@000000F3 E0C00317
+@000000F4 18800220
+@000000F5 1000101E
+@000000F6 00001306
+@000000F7 01000034
+@000000F8 210DA604
+@000000F9 00005100
+@000000FA D0201715
+@000000FB 00000E06
+@000000FC 01000034
+@000000FD 210DA904
+@000000FE 00005100
+@000000FF D0201715
+@00000100 00000906
+@00000101 01000034
+@00000102 210DAC04
+@00000103 00005100
+@00000104 D0201715
+@00000105 00000406
+@00000106 01000034
+@00000107 210DAF04
+@00000108 00005100
+@00000109 D0201715
+@0000010A DFC00517
+@0000010B DF000417
+@0000010C DEC00604
+@0000010D F800283A
+@0000010E DEFFFB04
+@0000010F DFC00415
+@00000110 DF000315
+@00000111 D839883A
+@00000112 D0201605
+@00000113 00001FC0
+@00000114 010000B4
+@00000115 2121A804
+@00000116 0000E6C0
+@00000117 D0A01717
+@00000118 1005003A
+@00000119 1000041E
+@0000011A 010018C4
+@0000011B E1400217
+@0000011C 00002EC0
+@0000011D 00000206
+@0000011E E1000217
+@0000011F 00002A80
+@00000120 D0A01603
+@00000121 10803FD8
+@00000122 10001D1E
+@00000123 01000034
+@00000124 210DB204
+@00000125 00005100
+@00000126 D0201715
+@00000127 E0000115
+@00000128 E0000015
+@00000129 E0800017
+@0000012A 10801188
+@0000012B 1000131E
+@0000012C 01000034
+@0000012D 210DB504
+@0000012E 00005100
+@0000012F D0A01717
+@00000130 1005003A
+@00000131 1000061E
+@00000132 01000034
+@00000133 210DB604
+@00000134 00005100
+@00000135 01001DC4
+@00000136 E1400217
+@00000137 00002EC0
+@00000138 010000B4
+@00000139 2121A804
+@0000013A 0000E6C0
+@0000013B E0800017
+@0000013C 10800044
+@0000013D E0800015
+@0000013E 003FEA06
+@0000013F 00001FC0
+@00000140 D0A01603
+@00000141 10800044
+@00000142 D0A01605
+@00000143 003FD006
+@00000144 DEFFFC04
+@00000145 DFC00015
+@00000146 D9400115
+@00000147 D9800215
+@00000148 D9C00315
+@00000149 D0A00017
+@0000014A 200B883A
+@0000014B D9800104
+@0000014C 11000117
+@0000014D 00800034
+@0000014E 1082C604
+@0000014F 20800115
+@00000150 0000AF40
+@00000151 DFC00017
+@00000152 DEC00404
+@00000153 F800283A
+@00000154 DEFFFB04
+@00000155 DC000315
+@00000156 DC400215
+@00000157 DC800115
+@00000158 DFC00415
+@00000159 D9800005
+@0000015A 2025883A
+@0000015B 2823883A
+@0000015C 3C3FFFC4
+@0000015D 01C00A0E
+@0000015E 88C00117
+@0000015F 9009883A
+@00000160 880B883A
+@00000161 D80D883A
+@00000162 01C00044
+@00000163 183EE83A
+@00000164 8007883A
+@00000165 843FFFC4
+@00000166 1000081E
+@00000167 00FFF616
+@00000168 0005883A
+@00000169 DFC00417
+@0000016A DC000317
+@0000016B DC400217
+@0000016C DC800117
+@0000016D DEC00504
+@0000016E F800283A
+@0000016F 00BFFFC4
+@00000170 DFC00417
+@00000171 DC000317
+@00000172 DC400217
+@00000173 DC800117
+@00000174 DEC00504
+@00000175 F800283A
+@00000176 DEFFEC04
+@00000177 DF001215
+@00000178 DC001115
+@00000179 DC401015
+@0000017A DC800F15
+@0000017B DD000D15
+@0000017C DD800B15
+@0000017D DDC00A15
+@0000017E DFC01315
+@0000017F DCC00E15
+@00000180 DD400C15
+@00000181 30800003
+@00000182 202F883A
+@00000183 2829883A
+@00000184 1021883A
+@00000185 D9C00215
+@00000186 34800044
+@00000187 D8000315
+@00000188 D8000415
+@00000189 D8000515
+@0000018A D8000615
+@0000018B 0039883A
+@0000018C D8000715
+@0000018D D8000815
+@0000018E 002D883A
+@0000018F 0023883A
+@00000190 1000061E
+@00000191 00002206
+@00000192 88002E26
+@00000193 90800003
+@00000194 94800044
+@00000195 1021883A
+@00000196 10001D26
+@00000197 01C00044
+@00000198 89C03626
+@00000199 3C7FF80E
+@0000019A 00800084
+@0000019B 88BFF71E
+@0000019C 81003FCC
+@0000019D 2100201C
+@0000019E 213FE004
+@0000019F 00800B84
+@000001A0 20803826
+@000001A1 817FF404
+@000001A2 28C03FCC
+@000001A3 00800244
+@000001A4 10C03636
+@000001A5 D8C00617
+@000001A6 2821883A
+@000001A7 18005916
+@000001A8 D9000617
+@000001A9 01400284
+@000001AA 0000D8C0
+@000001AB 80C03FCC
+@000001AC 18C0201C
+@000001AD 18FFE004
+@000001AE 10C5883A
+@000001AF D8800615
+@000001B0 90800003
+@000001B1 94800044
+@000001B2 1021883A
+@000001B3 103FE31E
+@000001B4 B005883A
+@000001B5 DFC01317
+@000001B6 DF001217
+@000001B7 DC001117
+@000001B8 DC401017
+@000001B9 DC800F17
+@000001BA DCC00E17
+@000001BB DD000D17
+@000001BC DD400C17
+@000001BD DD800B17
+@000001BE DDC00A17
+@000001BF DEC01404
+@000001C0 F800283A
+@000001C1 80C03FCC
+@000001C2 18C0201C
+@000001C3 18FFE004
+@000001C4 00800944
+@000001C5 18802026
+@000001C6 A0C00117
+@000001C7 B809883A
+@000001C8 DC000005
+@000001C9 A00B883A
+@000001CA D80D883A
+@000001CB 183EE83A
+@000001CC 1000E81E
+@000001CD B5800044
+@000001CE 003FC406
+@000001CF 81003FCC
+@000001D0 2100201C
+@000001D1 213FE004
+@000001D2 00800C04
+@000001D3 20801C26
+@000001D4 00800944
+@000001D5 20801D26
+@000001D6 00800B84
+@000001D7 04400084
+@000001D8 20BFC81E
+@000001D9 D8000615
+@000001DA 003FB806
+@000001DB 00801B04
+@000001DC 20802126
+@000001DD 20FFEA04
+@000001DE 00800804
+@000001DF 10C01C36
+@000001E0 180490BA
+@000001E1 00C00034
+@000001E2 18CDBA04
+@000001E3 10C5883A
+@000001E4 11000017
+@000001E5 2000683A
+@000001E6 00BFFFC4
+@000001E7 07000284
+@000001E8 3823883A
+@000001E9 D9C00715
+@000001EA D8800515
+@000001EB D8000315
+@000001EC D8000415
+@000001ED D8000815
+@000001EE D8800615
+@000001EF 003FA306
+@000001F0 DC400315
+@000001F1 04400084
+@000001F2 003FA006
+@000001F3 A0C00117
+@000001F4 B809883A
+@000001F5 DC000045
+@000001F6 A00B883A
+@000001F7 D9800044
+@000001F8 880F883A
+@000001F9 183EE83A
+@000001FA 1000BA1E
+@000001FB B46D883A
+@000001FC 0023883A
+@000001FD 003F9506
+@000001FE 00800044
+@000001FF D8800415
+@00000200 003F9206
+@00000201 D8800517
+@00000202 1000B416
+@00000203 D9000517
+@00000204 01400284
+@00000205 0000D8C0
+@00000206 D8800515
+@00000207 D8C00517
+@00000208 80803FCC
+@00000209 1080201C
+@0000020A 10BFE004
+@0000020B 1887883A
+@0000020C D8C00515
+@0000020D 003F8506
+@0000020E 00C00044
+@0000020F D8000715
+@00000210 07000404
+@00000211 D8C00815
+@00000212 D8800717
+@00000213 D8000915
+@00000214 1007003A
+@00000215 D8800217
+@00000216 15400017
+@00000217 10800104
+@00000218 D8800215
+@00000219 1800011E
+@0000021A A8009E16
+@0000021B 04C00044
+@0000021C A821883A
+@0000021D 9823883A
+@0000021E 00000506
+@0000021F 9809883A
+@00000220 E00B883A
+@00000221 0000D8C0
+@00000222 1027883A
+@00000223 8C400044
+@00000224 8009883A
+@00000225 E00B883A
+@00000226 0000D6C0
+@00000227 1021883A
+@00000228 103FF61E
+@00000229 D8800517
+@0000022A D8C00317
+@0000022B 1445C83A
+@0000022C D8800515
+@0000022D 18006F26
+@0000022E D8800917
+@0000022F 10000D26
+@00000230 A0C00117
+@00000231 00800B44
+@00000232 D8800085
+@00000233 B809883A
+@00000234 A00B883A
+@00000235 D9800084
+@00000236 01C00044
+@00000237 183EE83A
+@00000238 10007C1E
+@00000239 D8C00517
+@0000023A B5800044
+@0000023B 18FFFFC4
+@0000023C D8C00515
+@0000023D D9C00517
+@0000023E B809883A
+@0000023F A00B883A
+@00000240 01800C04
+@00000241 00005500
+@00000242 1000721E
+@00000243 D8800517
+@00000244 B0AD883A
+@00000245 983FB626
+@00000246 A809883A
+@00000247 980B883A
+@00000248 0000D6C0
+@00000249 11000C04
+@0000024A 20C03FCC
+@0000024B 00800E44
+@0000024C 10C0042E
+@0000024D D8800817
+@0000024E 190001C4
+@0000024F 1000011E
+@00000250 190009C4
+@00000251 A0C00117
+@00000252 A00B883A
+@00000253 D9000105
+@00000254 D9800104
+@00000255 B809883A
+@00000256 01C00044
+@00000257 183EE83A
+@00000258 10005C1E
+@00000259 A809883A
+@0000025A 980B883A
+@0000025B 0000D7C0
+@0000025C 9809883A
+@0000025D E00B883A
+@0000025E 102B883A
+@0000025F 0000D6C0
+@00000260 1027883A
+@00000261 B5800044
+@00000262 003FE206
+@00000263 D8800517
+@00000264 B809883A
+@00000265 A00B883A
+@00000266 01800804
+@00000267 11FFFFC4
+@00000268 00005500
+@00000269 10004B1E
+@0000026A D8800217
+@0000026B A2000117
+@0000026C B809883A
+@0000026D 10C00017
+@0000026E 10800104
+@0000026F A00B883A
+@00000270 D8C00145
+@00000271 D8C00517
+@00000272 D9800144
+@00000273 01C00044
+@00000274 D8800215
+@00000275 1DA1883A
+@00000276 403EE83A
+@00000277 10003D1E
+@00000278 802D883A
+@00000279 0023883A
+@0000027A 003F1806
+@0000027B 07000404
+@0000027C D8000715
+@0000027D 003F9406
+@0000027E D8000715
+@0000027F 003F9206
+@00000280 D8800217
+@00000281 14400017
+@00000282 10C00104
+@00000283 D8C00215
+@00000284 8809883A
+@00000285 0000BEC0
+@00000286 1021883A
+@00000287 D8800517
+@00000288 B809883A
+@00000289 A00B883A
+@0000028A 1427C83A
+@0000028B 01800804
+@0000028C 980F883A
+@0000028D 00005500
+@0000028E 1000261E
+@0000028F A0C00117
+@00000290 880D883A
+@00000291 B809883A
+@00000292 A00B883A
+@00000293 800F883A
+@00000294 B4ED883A
+@00000295 183EE83A
+@00000296 10001E1E
+@00000297 B42D883A
+@00000298 0023883A
+@00000299 003EF906
+@0000029A 07000204
+@0000029B D8000715
+@0000029C 003F7506
+@0000029D D8C00917
+@0000029E 1821003A
+@0000029F 8000031E
+@000002A0 D8800517
+@000002A1 10BFFFC4
+@000002A2 D8800515
+@000002A3 D9C00517
+@000002A4 B809883A
+@000002A5 A00B883A
+@000002A6 01800804
+@000002A7 00005500
+@000002A8 10000C1E
+@000002A9 D8C00517
+@000002AA B0ED883A
+@000002AB 803F991E
+@000002AC A0C00117
+@000002AD 00800B44
+@000002AE D88000C5
+@000002AF B809883A
+@000002B0 A00B883A
+@000002B1 D98000C4
+@000002B2 01C00044
+@000002B3 183EE83A
+@000002B4 103FAC26
+@000002B5 00BFFFC4
+@000002B6 003EFE06
+@000002B7 D8000515
+@000002B8 003F4E06
+@000002B9 00C00044
+@000002BA 056BC83A
+@000002BB D8C00915
+@000002BC 003F5E06
+@000002BD 2013883A
+@000002BE D1200017
+@000002BF 2807883A
+@000002C0 300F883A
+@000002C1 480B883A
+@000002C2 180D883A
+@000002C3 02000034
+@000002C4 42017604
+@000002C5 4000683A
+@000002C6 DEFFFA04
+@000002C7 DC400315
+@000002C8 DC800215
+@000002C9 DCC00115
+@000002CA DFC00515
+@000002CB DC000415
+@000002CC DD000015
+@000002CD 28C0000B
+@000002CE 2027883A
+@000002CF 2825883A
+@000002D0 1804D0FA
+@000002D1 3023883A
+@000002D2 013FFFC4
+@000002D3 1080004C
+@000002D4 10001B26
+@000002D5 2940008B
+@000002D6 28BFFFCC
+@000002D7 10A0001C
+@000002D8 10A00004
+@000002D9 10001316
+@000002DA 3821883A
+@000002DB 05010004
+@000002DC 01C00316
+@000002DD 00001B06
+@000002DE 04001A0E
+@000002DF 9140008B
+@000002E0 297FFFCC
+@000002E1 2960001C
+@000002E2 880D883A
+@000002E3 9809883A
+@000002E4 29600004
+@000002E5 800F883A
+@000002E6 A400010E
+@000002E7 01C10004
+@000002E8 0000C0C0
+@000002E9 80A1C83A
+@000002EA 88A3883A
+@000002EB 00BFF216
+@000002EC 90C0000B
+@000002ED 18801014
+@000002EE 9080000D
+@000002EF 013FFFC4
+@000002F0 2005883A
+@000002F1 DFC00517
+@000002F2 DC000417
+@000002F3 DC400317
+@000002F4 DC800217
+@000002F5 DCC00117
+@000002F6 DD000017
+@000002F7 DEC00604
+@000002F8 F800283A
+@000002F9 0009883A
+@000002FA 003FF506
+@000002FB 20800007
+@000002FC 2007883A
+@000002FD 10000326
+@000002FE 21000044
+@000002FF 20800007
+@00000300 103FFD1E
+@00000301 20C5C83A
+@00000302 F800283A
+@00000303 DEFFFE04
+@00000304 DC000015
+@00000305 2021883A
+@00000306 2809883A
+@00000307 300B883A
+@00000308 380D883A
+@00000309 DFC00115
+@0000030A D0201815
+@0000030B 0000E980
+@0000030C 1007883A
+@0000030D 00BFFFC4
+@0000030E 18800526
+@0000030F 1805883A
+@00000310 DFC00117
+@00000311 DC000017
+@00000312 DEC00204
+@00000313 F800283A
+@00000314 D0A01817
+@00000315 103FF926
+@00000316 80800315
+@00000317 1805883A
+@00000318 DFC00117
+@00000319 DC000017
+@0000031A DEC00204
+@0000031B F800283A
+@0000031C 00800044
+@0000031D 000F883A
+@0000031E 2900082E
+@0000031F 28000716
+@00000320 294B883A
+@00000321 1085883A
+@00000322 29000E2E
+@00000323 1007003A
+@00000324 1800081E
+@00000325 283FFA0E
+@00000326 1800061E
+@00000327 21400236
+@00000328 2149C83A
+@00000329 388EB03A
+@0000032A 1004D07A
+@0000032B 280AD07A
+@0000032C 103FFA1E
+@0000032D 3000011E
+@0000032E 3809883A
+@0000032F 2005883A
+@00000330 F800283A
+@00000331 1007003A
+@00000332 183FF426
+@00000333 003FF906
+@00000334 DEFFFE04
+@00000335 DC000015
+@00000336 DFC00115
+@00000337 000D883A
+@00000338 0021883A
+@00000339 20000816
+@0000033A 28000A16
+@0000033B 0000C700
+@0000033C 80000126
+@0000033D 0085C83A
+@0000033E DFC00117
+@0000033F DC000017
+@00000340 DEC00204
+@00000341 F800283A
+@00000342 0109C83A
+@00000343 0021003A
+@00000344 283FF60E
+@00000345 014BC83A
+@00000346 8021003A
+@00000347 003FF306
+@00000348 DEFFFE04
+@00000349 DC000015
+@0000034A DFC00115
+@0000034B 01800044
+@0000034C 0021883A
+@0000034D 20000816
+@0000034E 28000A16
+@0000034F 0000C700
+@00000350 80000126
+@00000351 0085C83A
+@00000352 DFC00117
+@00000353 DC000017
+@00000354 DEC00204
+@00000355 F800283A
+@00000356 0109C83A
+@00000357 3021883A
+@00000358 283FF60E
+@00000359 014BC83A
+@0000035A 003FF406
+@0000035B 000D883A
+@0000035C 02000034
+@0000035D 42031C04
+@0000035E 4000683A
+@0000035F 01800044
+@00000360 02000034
+@00000361 42031C04
+@00000362 4000683A
+@00000363 0007883A
+@00000364 20000626
+@00000365 2080004C
+@00000366 2008D07A
+@00000367 10000126
+@00000368 1947883A
+@00000369 294B883A
+@0000036A 203FFA1E
+@0000036B 1805883A
+@0000036C F800283A
+@0000036D DEFFFD04
+@0000036E DFC00215
+@0000036F DF000115
+@00000370 D839883A
+@00000371 E0000015
+@00000372 000170FA
+@00000373 00800044
+@00000374 1001703A
+@00000375 E0000015
+@00000376 0000E200
+@00000377 01000034
+@00000378 210DDB04
+@00000379 01400034
+@0000037A 294DDB04
+@0000037B 01800034
+@0000037C 318DDB04
+@0000037D 0001F540
+@0000037E 0001DC80
+@0000037F 01000034
+@00000380 21078804
+@00000381 000283C0
+@00000382 D1200117
+@00000383 D1600217
+@00000384 D1A00317
+@00000385 00004380
+@00000386 1009883A
+@00000387 00028D80
+@00000388 DEFFFE04
+@00000389 DFC00115
+@0000038A DF000015
+@0000038B D839883A
+@0000038C 01004034
+@0000038D 21020004
+@0000038E 01400044
+@0000038F 0180FA04
+@00000390 00019880
+@00000391 01000034
+@00000392 210DFD04
+@00000393 01404034
+@00000394 29421404
+@00000395 01800404
+@00000396 00018600
+@00000397 DFC00117
+@00000398 DF000017
+@00000399 DEC00204
+@0000039A F800283A
+@0000039B DEFFFD04
+@0000039C DFC00215
+@0000039D DF000115
+@0000039E D839883A
+@0000039F E1000015
+@000003A0 E1000017
+@000003A1 0001B500
+@000003A2 DFC00217
+@000003A3 DF000117
+@000003A4 DEC00304
+@000003A5 F800283A
+@000003A6 DEFFF704
+@000003A7 DFC00815
+@000003A8 DF000715
+@000003A9 D839883A
+@000003AA E1000015
+@000003AB E1400115
+@000003AC E1800215
+@000003AD E0800017
+@000003AE 1004803A
+@000003AF 1000091E
+@000003B0 E1000017
+@000003B1 01400304
+@000003B2 0000D8C0
+@000003B3 1007883A
+@000003B4 00800034
+@000003B5 10921F04
+@000003B6 1887883A
+@000003B7 E0C00615
+@000003B8 00000106
+@000003B9 E0000615
+@000003BA E0800617
+@000003BB E0800315
+@000003BC E0800317
+@000003BD 1005003A
+@000003BE 1000241E
+@000003BF E0800317
+@000003C0 10800217
+@000003C1 108000CC
+@000003C2 1005003A
+@000003C3 10001A1E
+@000003C4 E0800317
+@000003C5 10800017
+@000003C6 10800617
+@000003C7 1005003A
+@000003C8 1000151E
+@000003C9 E0800317
+@000003CA 10800017
+@000003CB 10800617
+@000003CC E1000317
+@000003CD E1400117
+@000003CE E1800217
+@000003CF 103EE83A
+@000003D0 E0800415
+@000003D1 E0800417
+@000003D2 1004403A
+@000003D3 1000071E
+@000003D4 0000FB80
+@000003D5 E0C00417
+@000003D6 00C7C83A
+@000003D7 10C00015
+@000003D8 00BFFFC4
+@000003D9 E0800515
+@000003DA 00000E06
+@000003DB E0800417
+@000003DC E0800515
+@000003DD 00000B06
+@000003DE 0000FB80
+@000003DF 1007883A
+@000003E0 00800344
+@000003E1 18800015
+@000003E2 00000406
+@000003E3 0000FB80
+@000003E4 1007883A
+@000003E5 00801444
+@000003E6 18800015
+@000003E7 00BFFFC4
+@000003E8 E0800515
+@000003E9 E0800517
+@000003EA DFC00817
+@000003EB DF000717
+@000003EC DEC00904
+@000003ED F800283A
+@000003EE DEFFFD04
+@000003EF DFC00215
+@000003F0 DF000115
+@000003F1 D839883A
+@000003F2 D0A00917
+@000003F3 1005003A
+@000003F4 1000041E
+@000003F5 D0A00917
+@000003F6 103EE83A
+@000003F7 E0800015
+@000003F8 00000206
+@000003F9 D0A01804
+@000003FA E0800015
+@000003FB E0800017
+@000003FC DFC00217
+@000003FD DF000117
+@000003FE DEC00304
+@000003FF F800283A
+@00000400 DEFFF204
+@00000401 DFC00D15
+@00000402 DF000C15
+@00000403 D839883A
+@00000404 E1000015
+@00000405 E1400115
+@00000406 E1800215
+@00000407 E0800017
+@00000408 10800017
+@00000409 E0800315
+@0000040A E0800117
+@0000040B E0800415
+@0000040C E0000715
+@0000040D E0800217
+@0000040E 10800050
+@0000040F 10004D1E
+@00000410 E0800317
+@00000411 10801417
+@00000412 E0800815
+@00000413 E0800317
+@00000414 10801517
+@00000415 E0800915
+@00000416 E0C00817
+@00000417 E0800917
+@00000418 18800536
+@00000419 E0800817
+@0000041A E0C00917
+@0000041B 10C5C83A
+@0000041C E0800615
+@0000041D 00000406
+@0000041E 00820004
+@0000041F E0C00917
+@00000420 10C5C83A
+@00000421 E0800615
+@00000422 E0800617
+@00000423 1004C03A
+@00000424 1000011E
+@00000425 00001E06
+@00000426 E0C00217
+@00000427 E0800617
+@00000428 1880022E
+@00000429 E0800217
+@0000042A E0800615
+@0000042B E0C00317
+@0000042C E0800917
+@0000042D 1885883A
+@0000042E 11401804
+@0000042F E1000417
+@00000430 E1800617
+@00000431 00030C00
+@00000432 E0C00417
+@00000433 E0800617
+@00000434 1885883A
+@00000435 E0800415
+@00000436 E0C00217
+@00000437 E0800617
+@00000438 1885C83A
+@00000439 E0800215
+@0000043A E1000317
+@0000043B E0C00917
+@0000043C E0800617
+@0000043D 1885883A
+@0000043E 1081FFCC
+@0000043F 20801515
+@00000440 E0800217
+@00000441 10800050
+@00000442 1000011E
+@00000443 003FCC06
+@00000444 E0C00417
+@00000445 E0800117
+@00000446 18800126
+@00000447 00001506
+@00000448 E0800017
+@00000449 10800217
+@0000044A 1004D3BA
+@0000044B 1080004C
+@0000044C 1005003A
+@0000044D 1000011E
+@0000044E 00000E06
+@0000044F E0800317
+@00000450 10C01417
+@00000451 E0800817
+@00000452 1880061E
+@00000453 E0800317
+@00000454 E0C00317
+@00000455 11001317
+@00000456 18800B17
+@00000457 2080012E
+@00000458 003FF606
+@00000459 E0800317
+@0000045A 10C01417
+@0000045B E0800817
+@0000045C 18BFB01E
+@0000045D E0000915
+@0000045E E0C00417
+@0000045F E0800117
+@00000460 18801726
+@00000461 0005303A
+@00000462 E0800A15
+@00000463 0001703A
+@00000464 E0800A17
+@00000465 E0800815
+@00000466 E0800817
+@00000467 E0800515
+@00000468 E0C00317
+@00000469 E0800317
+@0000046A 10801217
+@0000046B 10800054
+@0000046C 18801215
+@0000046D E0800317
+@0000046E 10800A17
+@0000046F 10800104
+@00000470 1007883A
+@00000471 E0800317
+@00000472 10801217
+@00000473 18800035
+@00000474 E0800517
+@00000475 E0800A15
+@00000476 E0800A17
+@00000477 1001703A
+@00000478 E0C00417
+@00000479 E0800117
+@0000047A 18800526
+@0000047B E0800417
+@0000047C E0C00117
+@0000047D 10C5C83A
+@0000047E E0800B15
+@0000047F 00000B06
+@00000480 E0800017
+@00000481 10800217
+@00000482 1004D3BA
+@00000483 1080004C
+@00000484 1005003A
+@00000485 1000031E
+@00000486 00BFFD44
+@00000487 E0800B15
+@00000488 00000206
+@00000489 00BFFEC4
+@0000048A E0800B15
+@0000048B E0800B17
+@0000048C DFC00D17
+@0000048D DF000C17
+@0000048E DEC00E04
+@0000048F F800283A
+@00000490 DEFFF104
+@00000491 DFC00E15
+@00000492 DF000D15
+@00000493 D839883A
+@00000494 E1000015
+@00000495 E1400115
+@00000496 E1800215
+@00000497 E0000415
+@00000498 E0800017
+@00000499 10800017
+@0000049A E0800715
+@0000049B E0800117
+@0000049C E0800815
+@0000049D E0000915
+@0000049E E0800217
+@0000049F 10800050
+@000004A0 10003A1E
+@000004A1 E0800717
+@000004A2 10801617
+@000004A3 E0800315
+@000004A4 E0800717
+@000004A5 10801717
+@000004A6 E0800415
+@000004A7 E0C00317
+@000004A8 E0800417
+@000004A9 1880062E
+@000004AA E0C00417
+@000004AB E0800317
+@000004AC 1885C83A
+@000004AD 10BFFFC4
+@000004AE E0800515
+@000004AF 00000C06
+@000004B0 E0800417
+@000004B1 1005003A
+@000004B2 1000051E
+@000004B3 00820004
+@000004B4 E0C00317
+@000004B5 10C5C83A
+@000004B6 E0800515
+@000004B7 00000406
+@000004B8 0081FFC4
+@000004B9 E0C00317
+@000004BA 10C5C83A
+@000004BB E0800515
+@000004BC E0800517
+@000004BD 1004C03A
+@000004BE 1000011E
+@000004BF 00001B06
+@000004C0 E0C00217
+@000004C1 E0800517
+@000004C2 1880022E
+@000004C3 E0800217
+@000004C4 E0800515
+@000004C5 E0C00717
+@000004C6 E0800317
+@000004C7 1885883A
+@000004C8 11021804
+@000004C9 E1400117
+@000004CA E1800517
+@000004CB 00030C00
+@000004CC E0C00117
+@000004CD E0800517
+@000004CE 1885883A
+@000004CF E0800115
+@000004D0 E0C00217
+@000004D1 E0800517
+@000004D2 1885C83A
+@000004D3 E0800215
+@000004D4 E1000717
+@000004D5 E0C00317
+@000004D6 E0800517
+@000004D7 1885883A
+@000004D8 1081FFCC
+@000004D9 20801615
+@000004DA 003FC306
+@000004DB 0005303A
+@000004DC E0800B15
+@000004DD 0001703A
+@000004DE E0800B17
+@000004DF E0800A15
+@000004E0 E0800A17
+@000004E1 E0800615
+@000004E2 E0C00717
+@000004E3 E0800717
+@000004E4 10801217
+@000004E5 10800094
+@000004E6 18801215
+@000004E7 E0800717
+@000004E8 10800A17
+@000004E9 10800104
+@000004EA 1007883A
+@000004EB E0800717
+@000004EC 10801217
+@000004ED 18800035
+@000004EE E0800617
+@000004EF E0800B15
+@000004F0 E0800B17
+@000004F1 1001703A
+@000004F2 E0800217
+@000004F3 10800050
+@000004F4 1000161E
+@000004F5 E0800017
+@000004F6 10800217
+@000004F7 1004D3BA
+@000004F8 1080004C
+@000004F9 1005003A
+@000004FA 1000011E
+@000004FB 00001306
+@000004FC E0800717
+@000004FD 10C01717
+@000004FE E0800417
+@000004FF 1880061E
+@00000500 E0800717
+@00000501 E0C00717
+@00000502 11001317
+@00000503 18800B17
+@00000504 2080012E
+@00000505 003FF606
+@00000506 E0800717
+@00000507 10C01717
+@00000508 E0800417
+@00000509 1880011E
+@0000050A 00000406
+@0000050B E0800217
+@0000050C 10800050
+@0000050D 1000011E
+@0000050E 003F8F06
+@0000050F E0000B15
+@00000510 E0C00117
+@00000511 E0800817
+@00000512 18800526
+@00000513 E0800117
+@00000514 E0C00817
+@00000515 10C5C83A
+@00000516 E0800C15
+@00000517 00000B06
+@00000518 E0800017
+@00000519 10800217
+@0000051A 1004D3BA
+@0000051B 1080004C
+@0000051C 1005003A
+@0000051D 1000031E
+@0000051E 00BFFD44
+@0000051F E0800C15
+@00000520 00000206
+@00000521 00BFFEC4
+@00000522 E0800C15
+@00000523 E0800C17
+@00000524 DFC00E17
+@00000525 DF000D17
+@00000526 DEC00F04
+@00000527 F800283A
+@00000528 DEFFF804
+@00000529 DF000715
+@0000052A D839883A
+@0000052B E1000015
+@0000052C E1400115
+@0000052D E0800017
+@0000052E E0800215
+@0000052F E0800217
+@00000530 10800A17
+@00000531 E0800315
+@00000532 E0800317
+@00000533 10800104
+@00000534 10800037
+@00000535 E0800415
+@00000536 E0800417
+@00000537 1080C00C
+@00000538 1004C03A
+@00000539 1000011E
+@0000053A 00006E06
+@0000053B E0800417
+@0000053C 1004D23A
+@0000053D 1080004C
+@0000053E 1005003A
+@0000053F 1000351E
+@00000540 00800074
+@00000541 10800004
+@00000542 E0800515
+@00000543 E0800217
+@00000544 10801417
+@00000545 10800044
+@00000546 1081FFCC
+@00000547 E0800615
+@00000548 E0800217
+@00000549 10C01517
+@0000054A E0800617
+@0000054B 1880011E
+@0000054C 00001806
+@0000054D E0800317
+@0000054E 10800037
+@0000054F E0800515
+@00000550 E0800517
+@00000551 1004D3FA
+@00000552 1080005C
+@00000553 1080004C
+@00000554 1005003A
+@00000555 1000011E
+@00000556 00000E06
+@00000557 E0C00217
+@00000558 E0800217
+@00000559 10801417
+@0000055A 1885883A
+@0000055B 10C01804
+@0000055C E0800517
+@0000055D 18800005
+@0000055E E0C00217
+@0000055F E0800217
+@00000560 10801417
+@00000561 10800044
+@00000562 1081FFCC
+@00000563 18801415
+@00000564 003FDE06
+@00000565 E0800517
+@00000566 10BFFFEC
+@00000567 1005003A
+@00000568 10000C1E
+@00000569 E1000217
+@0000056A E0800217
+@0000056B 10C01217
+@0000056C 00BFFF84
+@0000056D 1884703A
+@0000056E 20801215
+@0000056F E0800317
+@00000570 10800104
+@00000571 1007883A
+@00000572 E0800217
+@00000573 10801217
+@00000574 18800035
+@00000575 E0800417
+@00000576 1004D27A
+@00000577 1080004C
+@00000578 1005003A
+@00000579 103FB81E
+@0000057A E0800417
+@0000057B 10BFFFEC
+@0000057C 1004D43A
+@0000057D E0800615
+@0000057E E0800617
+@0000057F 1005003A
+@00000580 1000171E
+@00000581 E0800217
+@00000582 E0C00217
+@00000583 11001717
+@00000584 18801617
+@00000585 20801226
+@00000586 E1000317
+@00000587 E0C00217
+@00000588 E0800217
+@00000589 10801717
+@0000058A 1885883A
+@0000058B 10821804
+@0000058C 10800007
+@0000058D 20800035
+@0000058E E0C00217
+@0000058F E0800217
+@00000590 10801717
+@00000591 10800044
+@00000592 1081FFCC
+@00000593 18801715
+@00000594 E0800617
+@00000595 10BFFFC4
+@00000596 E0800615
+@00000597 003FE606
+@00000598 E0800617
+@00000599 1005003A
+@0000059A 103F971E
+@0000059B E1000217
+@0000059C E0800217
+@0000059D 10C01217
+@0000059E 00BFFF44
+@0000059F 1884703A
+@000005A0 20801215
+@000005A1 E0800217
+@000005A2 10800A17
+@000005A3 10800104
+@000005A4 1007883A
+@000005A5 E0800217
+@000005A6 10801217
+@000005A7 18800035
+@000005A8 003F8906
+@000005A9 DF000717
+@000005AA DEC00804
+@000005AB F800283A
+@000005AC DEFFF604
+@000005AD DF000915
+@000005AE D839883A
+@000005AF E1000015
+@000005B0 E1400115
+@000005B1 E1800215
+@000005B2 E0800017
+@000005B3 10800017
+@000005B4 E0800315
+@000005B5 00BFF9C4
+@000005B6 E0800415
+@000005B7 E0800117
+@000005B8 E0800815
+@000005B9 E0C00817
+@000005BA 189A8060
+@000005BB 1000041E
+@000005BC E0C00817
+@000005BD 189A80A0
+@000005BE 10001D1E
+@000005BF 00002906
+@000005C0 E0800317
+@000005C1 10C00B17
+@000005C2 00A00034
+@000005C3 10BFFFC4
+@000005C4 18802426
+@000005C5 E0800217
+@000005C6 10800017
+@000005C7 E0800515
+@000005C8 E0800317
+@000005C9 E0800615
+@000005CA E0800517
+@000005CB 10800090
+@000005CC 1000071E
+@000005CD E0C00517
+@000005CE 00A00034
+@000005CF 10BFFFC4
+@000005D0 18800326
+@000005D1 E0C00517
+@000005D2 E0C00715
+@000005D3 00000306
+@000005D4 00A00034
+@000005D5 10BFFF84
+@000005D6 E0800715
+@000005D7 E0C00717
+@000005D8 E0800617
+@000005D9 10C00B15
+@000005DA E0000415
+@000005DB 00000D06
+@000005DC E0800317
+@000005DD 10C00B17
+@000005DE 00A00034
+@000005DF 10BFFFC4
+@000005E0 18800826
+@000005E1 E1400217
+@000005E2 E0800317
+@000005E3 E0C00317
+@000005E4 11001317
+@000005E5 18800B17
+@000005E6 2085803A
+@000005E7 28800015
+@000005E8 E0000415
+@000005E9 E0800417
+@000005EA DF000917
+@000005EB DEC00A04
+@000005EC F800283A
+@000005ED DEFFFB04
+@000005EE DF000415
+@000005EF D839883A
+@000005F0 E1000015
+@000005F1 E0800017
+@000005F2 E0800215
+@000005F3 E0800217
+@000005F4 10800A17
+@000005F5 10800104
+@000005F6 10800037
+@000005F7 E0800115
+@000005F8 E0800117
+@000005F9 1004D2BA
+@000005FA 1080004C
+@000005FB 1005003A
+@000005FC 10000B1E
+@000005FD E0800217
+@000005FE 10800A17
+@000005FF 10800104
+@00000600 1007883A
+@00000601 E0800217
+@00000602 10801217
+@00000603 10810014
+@00000604 18800035
+@00000605 E0800217
+@00000606 10001315
+@00000607 00000A06
+@00000608 E0800217
+@00000609 10C01317
+@0000060A 00A00034
+@0000060B 10BFFF04
+@0000060C 10C00536
+@0000060D E0C00217
+@0000060E E0800217
+@0000060F 10801317
+@00000610 10800044
+@00000611 18801315
+@00000612 D0A00C17
+@00000613 E0800315
+@00000614 E0800317
+@00000615 DF000417
+@00000616 DEC00504
+@00000617 F800283A
+@00000618 DEFFF704
+@00000619 DFC00815
+@0000061A DF000715
+@0000061B D839883A
+@0000061C E1000015
+@0000061D E1400115
+@0000061E E1800215
+@0000061F E0000315
+@00000620 E0000415
+@00000621 E0000515
+@00000622 E0C00017
+@00000623 00800044
+@00000624 18801215
+@00000625 E0800117
+@00000626 10800104
+@00000627 1007883A
+@00000628 E0800017
+@00000629 10801217
+@0000062A 18800035
+@0000062B E1000217
+@0000062C E1400017
+@0000062D 01800034
+@0000062E 31852804
+@0000062F 0001FC80
+@00000630 1004803A
+@00000631 1000021E
+@00000632 E1000017
+@00000633 00019240
+@00000634 E0800017
+@00000635 10001315
+@00000636 D0A00C17
+@00000637 E0800615
+@00000638 E1400617
+@00000639 E0800017
+@0000063A 11000C04
+@0000063B 01800034
+@0000063C 3185ED04
+@0000063D E1C00017
+@0000063E 0001A080
+@0000063F 1004403A
+@00000640 1000041E
+@00000641 E0C00017
+@00000642 00A00034
+@00000643 10BFFFC4
+@00000644 18800B15
+@00000645 DFC00817
+@00000646 DF000717
+@00000647 DEC00904
+@00000648 F800283A
+@00000649 DEFFFD04
+@0000064A DFC00215
+@0000064B DF000115
+@0000064C D839883A
+@0000064D E1000015
+@0000064E E1000017
+@0000064F D1600604
+@00000650 0001CD00
+@00000651 DFC00217
+@00000652 DF000117
+@00000653 DEC00304
+@00000654 F800283A
+@00000655 DEFFFC04
+@00000656 DFC00315
+@00000657 DF000215
+@00000658 D839883A
+@00000659 E1000015
+@0000065A E1400115
+@0000065B E0800017
+@0000065C 10000035
+@0000065D 00025040
+@0000065E DFC00317
+@0000065F DF000217
+@00000660 DEC00404
+@00000661 F800283A
+@00000662 DEFFF904
+@00000663 DFC00615
+@00000664 DF000515
+@00000665 D839883A
+@00000666 E1000015
+@00000667 E1400115
+@00000668 E1800215
+@00000669 E0800217
+@0000066A E0800315
+@0000066B D0A00C17
+@0000066C 1004C03A
+@0000066D 1000041E
+@0000066E E0800317
+@0000066F D0A00C15
+@00000670 E0000415
+@00000671 00000206
+@00000672 00BFFFC4
+@00000673 E0800415
+@00000674 E0800017
+@00000675 10800104
+@00000676 1007883A
+@00000677 008001C4
+@00000678 18800035
+@00000679 E1000117
+@0000067A E1400017
+@0000067B 01800034
+@0000067C 31865504
+@0000067D 0001FC80
+@0000067E DFC00617
+@0000067F DF000517
+@00000680 DEC00704
+@00000681 F800283A
+@00000682 DEFFF504
+@00000683 DF000A15
+@00000684 D839883A
+@00000685 E1000015
+@00000686 E1400115
+@00000687 E1800215
+@00000688 E1C00315
+@00000689 E0000515
+@0000068A D0A00C17
+@0000068B E0800615
+@0000068C E0800617
+@0000068D 1005003A
+@0000068E 10003F1E
+@0000068F E0800017
+@00000690 1005003A
+@00000691 1000391E
+@00000692 E0C00017
+@00000693 E0800217
+@00000694 18800315
+@00000695 E0C00017
+@00000696 E0800317
+@00000697 18800515
+@00000698 0005303A
+@00000699 E0800815
+@0000069A 0001703A
+@0000069B E0800817
+@0000069C E0800715
+@0000069D E0800717
+@0000069E E0800415
+@0000069F D0A00D17
+@000006A0 E0800815
+@000006A1 E0800817
+@000006A2 E0800515
+@000006A3 E1000017
+@000006A4 E0C00117
+@000006A5 E0800517
+@000006A6 1885883A
+@000006A7 10800044
+@000006A8 20800215
+@000006A9 E0800017
+@000006AA 10C00217
+@000006AB E0800517
+@000006AC 1880042E
+@000006AD E0C00017
+@000006AE 00800044
+@000006AF 18800405
+@000006B0 00000206
+@000006B1 E0800017
+@000006B2 10000405
+@000006B3 D0A00E04
+@000006B4 E0800815
+@000006B5 E0800017
+@000006B6 E0800715
+@000006B7 E0C00717
+@000006B8 E0800817
+@000006B9 18800115
+@000006BA E0C00717
+@000006BB E0800817
+@000006BC 10800017
+@000006BD 18800015
+@000006BE E0800817
+@000006BF 10C00017
+@000006C0 E0800717
+@000006C1 18800115
+@000006C2 E0C00817
+@000006C3 E0800717
+@000006C4 18800015
+@000006C5 E0800417
+@000006C6 E0800815
+@000006C7 E0800817
+@000006C8 1001703A
+@000006C9 E0000915
+@000006CA 00000506
+@000006CB 00BFFA84
+@000006CC E0800915
+@000006CD 00000206
+@000006CE 00BFDE84
+@000006CF E0800915
+@000006D0 E0800917
+@000006D1 DF000A17
+@000006D2 DEC00B04
+@000006D3 F800283A
+@000006D4 DEFFFA04
+@000006D5 DFC00515
+@000006D6 DF000415
+@000006D7 D839883A
+@000006D8 E1000015
+@000006D9 008000C4
+@000006DA E0800315
+@000006DB E1000317
+@000006DC 014003F4
+@000006DD 29509004
+@000006DE 0000D8C0
+@000006DF 100B883A
+@000006E0 01005BB4
+@000006E1 210D8004
+@000006E2 0000D6C0
+@000006E3 100B883A
+@000006E4 01200034
+@000006E5 213FFFC4
+@000006E6 0000D6C0
+@000006E7 100B883A
+@000006E8 E1000017
+@000006E9 0000D6C0
+@000006EA E0800215
+@000006EB E0800217
+@000006EC 1005003A
+@000006ED 10002A1E
+@000006EE E0000115
+@000006EF E0C00117
+@000006F0 E0800217
+@000006F1 1880180E
+@000006F2 00A00034
+@000006F3 10BFFFC4
+@000006F4 10BFFFC4
+@000006F5 103FFE1E
+@000006F6 E1000317
+@000006F7 014003F4
+@000006F8 29509004
+@000006F9 0000D8C0
+@000006FA 100B883A
+@000006FB 01005BB4
+@000006FC 210D8004
+@000006FD 0000D6C0
+@000006FE 100B883A
+@000006FF 01200034
+@00000700 213FFFC4
+@00000701 0000D6C0
+@00000702 1007883A
+@00000703 E0800017
+@00000704 10C5C83A
+@00000705 E0800015
+@00000706 E0800117
+@00000707 10800044
+@00000708 E0800115
+@00000709 003FE506
+@0000070A E1000317
+@0000070B 014003F4
+@0000070C 29509004
+@0000070D 0000D8C0
+@0000070E 100B883A
+@0000070F 01005BB4
+@00000710 210D8004
+@00000711 0000D6C0
+@00000712 1009883A
+@00000713 E1400017
+@00000714 0000D8C0
+@00000715 10BFFFC4
+@00000716 103FFE1E
+@00000717 00000D06
+@00000718 E1000317
+@00000719 014003F4
+@0000071A 29509004
+@0000071B 0000D8C0
+@0000071C 100B883A
+@0000071D 01005BB4
+@0000071E 210D8004
+@0000071F 0000D6C0
+@00000720 1009883A
+@00000721 E1400017
+@00000722 0000D8C0
+@00000723 10BFFFC4
+@00000724 00BFFE16
+@00000725 0005883A
+@00000726 DFC00517
+@00000727 DF000417
+@00000728 DEC00604
+@00000729 F800283A
+@0000072A DEFFFC04
+@0000072B DF000315
+@0000072C D839883A
+@0000072D E1000015
+@0000072E E1400115
+@0000072F E1800215
+@00000730 E0800217
+@00000731 DF000317
+@00000732 DEC00404
+@00000733 F800283A
+@00000734 DEFFF904
+@00000735 DFC00615
+@00000736 DF000515
+@00000737 D839883A
+@00000738 E1000015
+@00000739 E1400115
+@0000073A E0800017
+@0000073B 1005003A
+@0000073C 1000041E
+@0000073D E0800017
+@0000073E 10800217
+@0000073F 1004C03A
+@00000740 1000071E
+@00000741 0001D800
+@00000742 1007883A
+@00000743 00800584
+@00000744 18800015
+@00000745 00BFFA84
+@00000746 E0800415
+@00000747 00001306
+@00000748 E0800117
+@00000749 E0800215
+@0000074A E0800017
+@0000074B E0800315
+@0000074C E0C00317
+@0000074D E0800217
+@0000074E 18800115
+@0000074F E0C00317
+@00000750 E0800217
+@00000751 10800017
+@00000752 18800015
+@00000753 E0800217
+@00000754 10C00017
+@00000755 E0800317
+@00000756 18800115
+@00000757 E0C00217
+@00000758 E0800317
+@00000759 18800015
+@0000075A E0000415
+@0000075B E0800417
+@0000075C DFC00617
+@0000075D DF000517
+@0000075E DEC00704
+@0000075F F800283A
+@00000760 DEFFFD04
+@00000761 DFC00215
+@00000762 DF000115
+@00000763 D839883A
+@00000764 D0A00917
+@00000765 1005003A
+@00000766 1000041E
+@00000767 D0A00917
+@00000768 103EE83A
+@00000769 E0800015
+@0000076A 00000206
+@0000076B D0A01804
+@0000076C E0800015
+@0000076D E0800017
+@0000076E DFC00217
+@0000076F DF000117
+@00000770 DEC00304
+@00000771 F800283A
+@00000772 DEFFFD04
+@00000773 DFC00215
+@00000774 DF000115
+@00000775 D839883A
+@00000776 00800034
+@00000777 108D8604
+@00000778 E0800015
+@00000779 E0C00017
+@0000077A 00800034
+@0000077B 108D8704
+@0000077C 18800736
+@0000077D E0800017
+@0000077E 10800017
+@0000077F 103EE83A
+@00000780 E0800017
+@00000781 10BFFF04
+@00000782 E0800015
+@00000783 003FF506
+@00000784 DFC00217
+@00000785 DF000117
+@00000786 DEC00304
+@00000787 F800283A
+@00000788 DEFFFD04
+@00000789 DFC00215
+@0000078A DF000115
+@0000078B D839883A
+@0000078C 00800034
+@0000078D 108D8604
+@0000078E E0800015
+@0000078F E0C00017
+@00000790 00800034
+@00000791 108D8704
+@00000792 18800736
+@00000793 E0800017
+@00000794 10800017
+@00000795 103EE83A
+@00000796 E0800017
+@00000797 10BFFF04
+@00000798 E0800015
+@00000799 003FF506
+@0000079A DFC00217
+@0000079B DF000117
+@0000079C DEC00304
+@0000079D F800283A
+@0000079E DEFFF704
+@0000079F DFC00815
+@000007A0 DF000715
+@000007A1 DC000615
+@000007A2 DC400515
+@000007A3 D839883A
+@000007A4 E1000015
+@000007A5 E1400115
+@000007A6 E1800215
+@000007A7 E1C00315
+@000007A8 E1000117
+@000007A9 E1400217
+@000007AA E1800317
+@000007AB 00022300
+@000007AC E0800415
+@000007AD E0800417
+@000007AE 1004803A
+@000007AF 10001F1E
+@000007B0 E4000017
+@000007B1 04400034
+@000007B2 8C521F04
+@000007B3 E1000417
+@000007B4 01400304
+@000007B5 0000D8C0
+@000007B6 1445883A
+@000007B7 10800017
+@000007B8 80800015
+@000007B9 E4000017
+@000007BA 04400034
+@000007BB 8C521F04
+@000007BC E1000417
+@000007BD 01400304
+@000007BE 0000D8C0
+@000007BF 1445883A
+@000007C0 10800104
+@000007C1 10800017
+@000007C2 80800115
+@000007C3 E4000017
+@000007C4 04400034
+@000007C5 8C521F04
+@000007C6 E1000417
+@000007C7 01400304
+@000007C8 0000D8C0
+@000007C9 1445883A
+@000007CA 10800204
+@000007CB 10800017
+@000007CC 80800215
+@000007CD E1000417
+@000007CE 00024000
+@000007CF DFC00817
+@000007D0 DF000717
+@000007D1 DC000617
+@000007D2 DC400517
+@000007D3 DEC00904
+@000007D4 F800283A
+@000007D5 DEFFFB04
+@000007D6 DFC00415
+@000007D7 DF000315
+@000007D8 D839883A
+@000007D9 E1000015
+@000007DA E1400115
+@000007DB E1800215
+@000007DC 01000034
+@000007DD 21122204
+@000007DE E1400017
+@000007DF 01800044
+@000007E0 01C07FC4
+@000007E1 0001E780
+@000007E2 01000034
+@000007E3 21121F04
+@000007E4 E1400117
+@000007E5 000D883A
+@000007E6 01C07FC4
+@000007E7 0001E780
+@000007E8 01000034
+@000007E9 21122504
+@000007EA E1400217
+@000007EB 01800044
+@000007EC 01C07FC4
+@000007ED 0001E780
+@000007EE DFC00417
+@000007EF DF000317
+@000007F0 DEC00504
+@000007F1 F800283A
+@000007F2 DEFFF304
+@000007F3 DF000C15
+@000007F4 D839883A
+@000007F5 E1000015
+@000007F6 E1400115
+@000007F7 E1800215
+@000007F8 00BFFA84
+@000007F9 E0800315
+@000007FA E0800017
+@000007FB 10800828
+@000007FC 1000511E
+@000007FD 0005303A
+@000007FE E0800615
+@000007FF 0001703A
+@00000800 E0800617
+@00000801 E0800515
+@00000802 E0800517
+@00000803 E0800415
+@00000804 00C00034
+@00000805 18D3A504
+@00000806 E0800017
+@00000807 100490FA
+@00000808 10C7883A
+@00000809 E0800217
+@0000080A 18800015
+@0000080B 00C00034
+@0000080C 18D3A504
+@0000080D E0800017
+@0000080E 100490FA
+@0000080F 10C5883A
+@00000810 10C00104
+@00000811 E0800117
+@00000812 18800015
+@00000813 E0800217
+@00000814 1005003A
+@00000815 1000191E
+@00000816 E0800017
+@00000817 E0800615
+@00000818 0005303A
+@00000819 E0800915
+@0000081A 0001703A
+@0000081B E0800917
+@0000081C E0800815
+@0000081D E0800817
+@0000081E E0800715
+@0000081F 00C00044
+@00000820 E0800617
+@00000821 1886983A
+@00000822 D0A00A17
+@00000823 10C4B03A
+@00000824 D0A00A15
+@00000825 D0A00A17
+@00000826 100170FA
+@00000827 E0800717
+@00000828 E0800915
+@00000829 E0800917
+@0000082A 1001703A
+@0000082B E0000515
+@0000082C E0800517
+@0000082D E0800B15
+@0000082E 00001906
+@0000082F E0800017
+@00000830 E0800915
+@00000831 0005303A
+@00000832 E0800A15
+@00000833 0001703A
+@00000834 E0800A17
+@00000835 E0800615
+@00000836 E0800617
+@00000837 E0800715
+@00000838 00C00044
+@00000839 E0800917
+@0000083A 1884983A
+@0000083B 0086303A
+@0000083C D0A00A17
+@0000083D 10C4703A
+@0000083E D0A00A15
+@0000083F D0A00A17
+@00000840 100170FA
+@00000841 E0800717
+@00000842 E0800A15
+@00000843 E0800A17
+@00000844 1001703A
+@00000845 E0000815
+@00000846 E0800817
+@00000847 E0800B15
+@00000848 E0800B17
+@00000849 E0800315
+@0000084A E0800417
+@0000084B E0800A15
+@0000084C E0800A17
+@0000084D 1001703A
+@0000084E E0800317
+@0000084F DF000C17
+@00000850 DEC00D04
+@00000851 F800283A
+@00000852 DEFFFA04
+@00000853 DFC00515
+@00000854 DF000415
+@00000855 DC000315
+@00000856 D839883A
+@00000857 E1000015
+@00000858 E0C00017
+@00000859 E0800017
+@0000085A 10800217
+@0000085B 10900034
+@0000085C 18800215
+@0000085D E0000115
+@0000085E D0E00817
+@0000085F E0800117
+@00000860 18802436
+@00000861 04000034
+@00000862 84121F04
+@00000863 E1000117
+@00000864 01400304
+@00000865 0000D8C0
+@00000866 1405883A
+@00000867 E0C00017
+@00000868 11000017
+@00000869 18800017
+@0000086A 2080161E
+@0000086B 04000034
+@0000086C 84121F04
+@0000086D E1000117
+@0000086E 01400304
+@0000086F 0000D8C0
+@00000870 1405883A
+@00000871 10800204
+@00000872 10800017
+@00000873 1004403A
+@00000874 10000C1E
+@00000875 E1000117
+@00000876 01400304
+@00000877 0000D8C0
+@00000878 1007883A
+@00000879 00800034
+@0000087A 10921F04
+@0000087B 1887883A
+@0000087C E0800017
+@0000087D 18800326
+@0000087E 00BFFCC4
+@0000087F E0800215
+@00000880 00000506
+@00000881 E0800117
+@00000882 10800044
+@00000883 E0800115
+@00000884 003FD906
+@00000885 E0000215
+@00000886 E0800217
+@00000887 DFC00517
+@00000888 DF000417
+@00000889 DC000317
+@0000088A DEC00604
+@0000088B F800283A
+@0000088C DEFFF404
+@0000088D DFC00B15
+@0000088E DF000A15
+@0000088F D839883A
+@00000890 E1000015
+@00000891 E1400115
+@00000892 E1800215
+@00000893 00BFFFC4
+@00000894 E0800515
+@00000895 00BFFB44
+@00000896 E0800615
+@00000897 E0000715
+@00000898 E1000017
+@00000899 D1600604
+@0000089A 00026040
+@0000089B E0800315
+@0000089C E0800317
+@0000089D 1004C03A
+@0000089E 1000051E
+@0000089F E1000017
+@000008A0 00026940
+@000008A1 E0800315
+@000008A2 00800044
+@000008A3 E0800715
+@000008A4 E0800317
+@000008A5 1005003A
+@000008A6 1000321E
+@000008A7 E1000317
+@000008A8 00027780
+@000008A9 E0800515
+@000008AA E0800517
+@000008AB 1004403A
+@000008AC 1000031E
+@000008AD E0800517
+@000008AE E0800615
+@000008AF 00002B06
+@000008B0 E1000517
+@000008B1 01400304
+@000008B2 0000D8C0
+@000008B3 1007883A
+@000008B4 00800034
+@000008B5 10921F04
+@000008B6 1885883A
+@000008B7 E0800415
+@000008B8 E1000417
+@000008B9 E0C00117
+@000008BA 00900034
+@000008BB 10BFFFC4
+@000008BC 1884703A
+@000008BD 20800215
+@000008BE E0800717
+@000008BF 1004C03A
+@000008C0 1000071E
+@000008C1 E1000417
+@000008C2 00021480
+@000008C3 E0800615
+@000008C4 E0800617
+@000008C5 1004403A
+@000008C6 1000011E
+@000008C7 00001306
+@000008C8 E0800317
+@000008C9 10800317
+@000008CA 1005003A
+@000008CB 1000091E
+@000008CC E0800317
+@000008CD 10800317
+@000008CE E1000417
+@000008CF E1400017
+@000008D0 E1800117
+@000008D1 E1C00217
+@000008D2 103EE83A
+@000008D3 E0800915
+@000008D4 00000106
+@000008D5 E0000915
+@000008D6 E0800917
+@000008D7 E0800615
+@000008D8 00000206
+@000008D9 00BFFB44
+@000008DA E0800615
+@000008DB E0800617
+@000008DC 1004403A
+@000008DD 1000091E
+@000008DE E1000517
+@000008DF 00024000
+@000008E0 00023B80
+@000008E1 E0C00617
+@000008E2 00C7C83A
+@000008E3 10C00015
+@000008E4 00BFFFC4
+@000008E5 E0800815
+@000008E6 00000206
+@000008E7 E0800517
+@000008E8 E0800815
+@000008E9 E0800817
+@000008EA DFC00B17
+@000008EB DF000A17
+@000008EC DEC00C04
+@000008ED F800283A
+@000008EE DEFFFD04
+@000008EF DFC00215
+@000008F0 DF000115
+@000008F1 D839883A
+@000008F2 D0A00917
+@000008F3 1005003A
+@000008F4 1000041E
+@000008F5 D0A00917
+@000008F6 103EE83A
+@000008F7 E0800015
+@000008F8 00000206
+@000008F9 D0A01804
+@000008FA E0800015
+@000008FB E0800017
+@000008FC DFC00217
+@000008FD DF000117
+@000008FE DEC00304
+@000008FF F800283A
+@00000900 DEFFFC04
+@00000901 DFC00315
+@00000902 DF000215
+@00000903 DC000115
+@00000904 D839883A
+@00000905 E1000015
+@00000906 E0800017
+@00000907 108000D0
+@00000908 10000F1E
+@00000909 04000034
+@0000090A 84121F04
+@0000090B E1000017
+@0000090C 01400304
+@0000090D 0000D8C0
+@0000090E 1405883A
+@0000090F 10800204
+@00000910 10000015
+@00000911 04000034
+@00000912 84121F04
+@00000913 E1000017
+@00000914 01400304
+@00000915 0000D8C0
+@00000916 1405883A
+@00000917 10000015
+@00000918 DFC00317
+@00000919 DF000217
+@0000091A DC000117
+@0000091B DEC00404
+@0000091C F800283A
+@0000091D DEFFFB04
+@0000091E DF000415
+@0000091F D839883A
+@00000920 E1000015
+@00000921 0005303A
+@00000922 E0800315
+@00000923 0001703A
+@00000924 E0800317
+@00000925 E0800215
+@00000926 E0800217
+@00000927 E0800115
+@00000928 E0800017
+@00000929 E0800315
+@0000092A E0800317
+@0000092B 10C00017
+@0000092C E0800317
+@0000092D 10800117
+@0000092E 18800115
+@0000092F E0800317
+@00000930 10C00117
+@00000931 E0800317
+@00000932 10800017
+@00000933 18800015
+@00000934 E0C00317
+@00000935 E0800317
+@00000936 18800115
+@00000937 E0C00317
+@00000938 E0800317
+@00000939 18800015
+@0000093A E0800117
+@0000093B E0800315
+@0000093C E0800317
+@0000093D 1001703A
+@0000093E DF000417
+@0000093F DEC00504
+@00000940 F800283A
+@00000941 DEFFFB04
+@00000942 DFC00415
+@00000943 DF000315
+@00000944 D839883A
+@00000945 D0A00E17
+@00000946 E0800115
+@00000947 D0A00D17
+@00000948 10800044
+@00000949 D0A00D15
+@0000094A E0C00117
+@0000094B D0A00E04
+@0000094C 18803026
+@0000094D E0800117
+@0000094E 10800017
+@0000094F E0800015
+@00000950 E0800117
+@00000951 10800403
+@00000952 1005003A
+@00000953 1000051E
+@00000954 D0A00D17
+@00000955 1004C03A
+@00000956 1000021E
+@00000957 E0800117
+@00000958 10000405
+@00000959 E0800117
+@0000095A 10C00217
+@0000095B D0A00D17
+@0000095C 10C01D36
+@0000095D E0800117
+@0000095E 10800403
+@0000095F 1004C03A
+@00000960 1000191E
+@00000961 E0800117
+@00000962 E0C00117
+@00000963 10800317
+@00000964 19000517
+@00000965 103EE83A
+@00000966 E0800215
+@00000967 E0800217
+@00000968 1004C03A
+@00000969 1000031E
+@0000096A E1000117
+@0000096B 00024740
+@0000096C 00000D06
+@0000096D E1000117
+@0000096E E0800117
+@0000096F 10C00217
+@00000970 E0800217
+@00000971 1885883A
+@00000972 20800215
+@00000973 E0800117
+@00000974 10C00217
+@00000975 D0A00D17
+@00000976 1880032E
+@00000977 E0C00117
+@00000978 00800044
+@00000979 18800405
+@0000097A E0800017
+@0000097B E0800115
+@0000097C 003FCD06
+@0000097D DFC00417
+@0000097E DF000317
+@0000097F DEC00504
+@00000980 F800283A
+@00000981 DEFFF904
+@00000982 DFC00615
+@00000983 DF000515
+@00000984 D839883A
+@00000985 E1000015
+@00000986 E1400115
+@00000987 E0800117
+@00000988 10800017
+@00000989 E0800215
+@0000098A E1000017
+@0000098B 0000BEC0
+@0000098C 10800044
+@0000098D E0800315
+@0000098E E0C00217
+@0000098F E0800117
+@00000990 18800E26
+@00000991 E0800217
+@00000992 11000217
+@00000993 E1400017
+@00000994 E1800317
+@00000995 00030840
+@00000996 1004C03A
+@00000997 1000031E
+@00000998 E0800217
+@00000999 E0800415
+@0000099A 00000506
+@0000099B E0800217
+@0000099C 10800017
+@0000099D E0800215
+@0000099E 003FEF06
+@0000099F E0000415
+@000009A0 E0800417
+@000009A1 DFC00617
+@000009A2 DF000517
+@000009A3 DEC00704
+@000009A4 F800283A
+@000009A5 DEFFFA04
+@000009A6 DFC00515
+@000009A7 DF000415
+@000009A8 D839883A
+@000009A9 E1000015
+@000009AA D0A00417
+@000009AB E0800115
+@000009AC E0C00117
+@000009AD D0A00404
+@000009AE 18802926
+@000009AF E0800117
+@000009B0 11000217
+@000009B1 0000BEC0
+@000009B2 E0800215
+@000009B3 E0800117
+@000009B4 10C00217
+@000009B5 E0800217
+@000009B6 1885883A
+@000009B7 10BFFFC4
+@000009B8 10800007
+@000009B9 10800BD8
+@000009BA 1000031E
+@000009BB E0800217
+@000009BC 10BFFFC4
+@000009BD E0800215
+@000009BE E0C00017
+@000009BF E0800217
+@000009C0 1885883A
+@000009C1 10800007
+@000009C2 10800BE0
+@000009C3 1000061E
+@000009C4 E0C00017
+@000009C5 E0800217
+@000009C6 1885883A
+@000009C7 10800007
+@000009C8 1004C03A
+@000009C9 10000A1E
+@000009CA E0800117
+@000009CB 11000217
+@000009CC E1400017
+@000009CD E1800217
+@000009CE 00030840
+@000009CF 1004C03A
+@000009D0 1000031E
+@000009D1 E0800117
+@000009D2 E0800315
+@000009D3 00000506
+@000009D4 E0800117
+@000009D5 10800017
+@000009D6 E0800115
+@000009D7 003FD406
+@000009D8 E0000315
+@000009D9 E0800317
+@000009DA DFC00517
+@000009DB DF000417
+@000009DC DEC00604
+@000009DD F800283A
+@000009DE DEFFF804
+@000009DF DFC00715
+@000009E0 DF000615
+@000009E1 DC000515
+@000009E2 D839883A
+@000009E3 E1000015
+@000009E4 00BFFA04
+@000009E5 E0800215
+@000009E6 E0000315
+@000009E7 E0000115
+@000009E8 E0800117
+@000009E9 10800808
+@000009EA 10001D1E
+@000009EB 04000034
+@000009EC 84121F04
+@000009ED E1000117
+@000009EE 01400304
+@000009EF 0000D8C0
+@000009F0 1405883A
+@000009F1 10800017
+@000009F2 1004C03A
+@000009F3 1000101E
+@000009F4 04000034
+@000009F5 84121F04
+@000009F6 E1000117
+@000009F7 01400304
+@000009F8 0000D8C0
+@000009F9 1407883A
+@000009FA E0800017
+@000009FB 18800015
+@000009FC E0C00117
+@000009FD D0A00817
+@000009FE 10C0020E
+@000009FF E0800117
+@00000A00 D0A00815
+@00000A01 E0800117
+@00000A02 E0800215
+@00000A03 00000406
+@00000A04 E0800117
+@00000A05 10800044
+@00000A06 E0800115
+@00000A07 003FE006
+@00000A08 E0000415
+@00000A09 E0800217
+@00000A0A DFC00717
+@00000A0B DF000617
+@00000A0C DC000517
+@00000A0D DEC00804
+@00000A0E F800283A
+@00000A0F D0A00017
+@00000A10 DEFFFE04
+@00000A11 DC000015
+@00000A12 DFC00115
+@00000A13 11400C17
+@00000A14 2021883A
+@00000A15 01004304
+@00000A16 28001B26
+@00000A17 28C00117
+@00000A18 008007C4
+@00000A19 10C00D16
+@00000A1A 28800104
+@00000A1B 10C00017
+@00000A1C 000D883A
+@00000A1D 180890BA
+@00000A1E 18C00044
+@00000A1F 10C00015
+@00000A20 2149883A
+@00000A21 24000215
+@00000A22 3005883A
+@00000A23 DFC00117
+@00000A24 DC000017
+@00000A25 DEC00204
+@00000A26 F800283A
+@00000A27 00029A40
+@00000A28 100B883A
+@00000A29 01BFFFC4
+@00000A2A 103FF726
+@00000A2B D0E00017
+@00000A2C 10004215
+@00000A2D 10000115
+@00000A2E 18800C17
+@00000A2F 28800015
+@00000A30 19400C15
+@00000A31 003FE806
+@00000A32 01400034
+@00000A33 2953E504
+@00000A34 11400C15
+@00000A35 003FE106
+@00000A36 D0A00017
+@00000A37 DEFFF804
+@00000A38 DD800015
+@00000A39 DFC00715
+@00000A3A DC000615
+@00000A3B DC400515
+@00000A3C DC800415
+@00000A3D DCC00315
+@00000A3E DD000215
+@00000A3F DD400115
+@00000A40 15000C17
+@00000A41 202D883A
+@00000A42 A0002426
+@00000A43 A0800117
+@00000A44 A5402204
+@00000A45 0027883A
+@00000A46 14BFFFC4
+@00000A47 9006803A
+@00000A48 1800021E
+@00000A49 00800044
+@00000A4A 14A6983A
+@00000A4B 1800191E
+@00000A4C 900690BA
+@00000A4D 1D05883A
+@00000A4E 14400204
+@00000A4F 1821883A
+@00000A50 00000806
+@00000A51 88800017
+@00000A52 29400017
+@00000A53 94BFFFC4
+@00000A54 843FFF04
+@00000A55 103EE83A
+@00000A56 8C7FFF04
+@00000A57 9827D07A
+@00000A58 90000C16
+@00000A59 A8802017
+@00000A5A 854B883A
+@00000A5B B009883A
+@00000A5C 14C4703A
+@00000A5D 103FF31E
+@00000A5E 88800017
+@00000A5F 94BFFFC4
+@00000A60 843FFF04
+@00000A61 103EE83A
+@00000A62 8C7FFF04
+@00000A63 9827D07A
+@00000A64 903FF40E
+@00000A65 A5000017
+@00000A66 A03FDC1E
+@00000A67 B009883A
+@00000A68 000354C0
+@00000A69 200B883A
+@00000A6A D1200017
+@00000A6B 02000034
+@00000A6C 420A7304
+@00000A6D 4000683A
+@00000A6E 200B883A
+@00000A6F D1200017
+@00000A70 02000034
+@00000A71 420C9904
+@00000A72 4000683A
+@00000A73 DEFFF504
+@00000A74 28C002C4
+@00000A75 00800584
+@00000A76 DC400715
+@00000A77 DC800615
+@00000A78 DFC00A15
+@00000A79 DF000915
+@00000A7A DC000815
+@00000A7B DCC00515
+@00000A7C DD000415
+@00000A7D DD400315
+@00000A7E DD800215
+@00000A7F DDC00115
+@00000A80 2025883A
+@00000A81 04400404
+@00000A82 10C0032E
+@00000A83 00BFFE04
+@00000A84 18A2703A
+@00000A85 88000116
+@00000A86 89400D2E
+@00000A87 0005883A
+@00000A88 DFC00A17
+@00000A89 DF000917
+@00000A8A DC000817
+@00000A8B DC400717
+@00000A8C DC800617
+@00000A8D DCC00517
+@00000A8E DD000417
+@00000A8F DD400317
+@00000A90 DD800217
+@00000A91 DDC00117
+@00000A92 DEC00B04
+@00000A93 F800283A
+@00000A94 9009883A
+@00000A95 000356C0
+@00000A96 00807DC4
+@00000A97 14401536
+@00000A98 03400034
+@00000A99 6B528904
+@00000A9A 8B4D883A
+@00000A9B 34000317
+@00000A9C 8812D0FA
+@00000A9D 81803E26
+@00000A9E 80C00117
+@00000A9F 00BFFF04
+@00000AA0 82000317
+@00000AA1 1886703A
+@00000AA2 80CB883A
+@00000AA3 28800117
+@00000AA4 81C00217
+@00000AA5 9009883A
+@00000AA6 10800054
+@00000AA7 41C00215
+@00000AA8 28800115
+@00000AA9 3A000315
+@00000AAA 00035880
+@00000AAB 80800204
+@00000AAC 003FDB06
+@00000AAD 8806D27A
+@00000AAE 8812D0FA
+@00000AAF 18000926
+@00000AB0 00800104
+@00000AB1 10C02F2E
+@00000AB2 00800504
+@00000AB3 1A4016C4
+@00000AB4 10C0042E
+@00000AB5 00801504
+@00000AB6 10C11536
+@00000AB7 8804D33A
+@00000AB8 12401B84
+@00000AB9 480490FA
+@00000ABA 03400034
+@00000ABB 6B528904
+@00000ABC 134B883A
+@00000ABD 2C000317
+@00000ABE 81400926
+@00000ABF 01FFFF04
+@00000AC0 018003C4
+@00000AC1 80800117
+@00000AC2 11C6703A
+@00000AC3 1C49C83A
+@00000AC4 3100AA16
+@00000AC5 2000690E
+@00000AC6 84000317
+@00000AC7 817FF91E
+@00000AC8 4A400044
+@00000AC9 03000034
+@00000ACA 63128B04
+@00000ACB 64000217
+@00000ACC 83002826
+@00000ACD 80800117
+@00000ACE 00FFFF04
+@00000ACF 10C6703A
+@00000AD0 1C49C83A
+@00000AD1 008003C4
+@00000AD2 11006616
+@00000AD3 63000315
+@00000AD4 63000215
+@00000AD5 20000E16
+@00000AD6 80C7883A
+@00000AD7 18800117
+@00000AD8 9009883A
+@00000AD9 10800054
+@00000ADA 18800115
+@00000ADB 003FCE06
+@00000ADC 81800204
+@00000ADD 34000317
+@00000ADE 81BFBF1E
+@00000ADF 4A400084
+@00000AE0 003FE806
+@00000AE1 8804D1BA
+@00000AE2 12400E04
+@00000AE3 003FD506
+@00000AE4 00807FC4
+@00000AE5 10C09436
+@00000AE6 1808D0FA
+@00000AE7 61BFFE04
+@00000AE8 00800044
+@00000AE9 200A90FA
+@00000AEA 2007D0BA
+@00000AEB 31000117
+@00000AEC 2991883A
+@00000AED 41C00217
+@00000AEE 10C4983A
+@00000AEF 82000315
+@00000AF0 81C00215
+@00000AF1 2088B03A
+@00000AF2 3C000315
+@00000AF3 31000115
+@00000AF4 44000215
+@00000AF5 4807883A
+@00000AF6 4800A616
+@00000AF7 1807D0BA
+@00000AF8 03400034
+@00000AF9 6B528904
+@00000AFA 00800044
+@00000AFB 10CE983A
+@00000AFC 69000117
+@00000AFD 21C04836
+@00000AFE 21C4703A
+@00000AFF 10000A1E
+@00000B00 39CF883A
+@00000B01 00BFFF04
+@00000B02 4884703A
+@00000B03 21C6703A
+@00000B04 12400104
+@00000B05 1800041E
+@00000B06 39CF883A
+@00000B07 4A400104
+@00000B08 21C4703A
+@00000B09 103FFC26
+@00000B0A 480490FA
+@00000B0B 4817883A
+@00000B0C 134D883A
+@00000B0D 300B883A
+@00000B0E 2C000317
+@00000B0F 81400926
+@00000B10 02BFFF04
+@00000B11 020003C4
+@00000B12 80800117
+@00000B13 1286703A
+@00000B14 1C49C83A
+@00000B15 41008016
+@00000B16 2000180E
+@00000B17 84000317
+@00000B18 817FF91E
+@00000B19 4A400044
+@00000B1A 488000CC
+@00000B1B 29400204
+@00000B1C 103FF11E
+@00000B1D 588000CC
+@00000B1E 31BFFE04
+@00000B1F 5AFFFFC4
+@00000B20 1000E526
+@00000B21 30800217
+@00000B22 11BFFA26
+@00000B23 03400034
+@00000B24 6B528904
+@00000B25 39CF883A
+@00000B26 68C00117
+@00000B27 19C01E36
+@00000B28 3800031E
+@00000B29 00001C06
+@00000B2A 39CF883A
+@00000B2B 4A400104
+@00000B2C 19C4703A
+@00000B2D 103FFC26
+@00000B2E 003FDB06
+@00000B2F 80C7883A
+@00000B30 18800117
+@00000B31 82000317
+@00000B32 81C00217
+@00000B33 10800054
+@00000B34 9009883A
+@00000B35 18800115
+@00000B36 41C00215
+@00000B37 3A000315
+@00000B38 003F7106
+@00000B39 88800054
+@00000B3A 844B883A
+@00000B3B 80800115
+@00000B3C 2905883A
+@00000B3D 20C00054
+@00000B3E 61400315
+@00000B3F 61400215
+@00000B40 11000015
+@00000B41 9009883A
+@00000B42 2B000215
+@00000B43 28C00115
+@00000B44 2B000315
+@00000B45 003F6406
+@00000B46 6D400217
+@00000B47 00BFFF04
+@00000B48 A8C00117
+@00000B49 18AC703A
+@00000B4A B449C83A
+@00000B4B B4400236
+@00000B4C 008003C4
+@00000B4D 11002316
+@00000B4E D0A01317
+@00000B4F 073FFFC4
+@00000B50 B02F883A
+@00000B51 8887883A
+@00000B52 D0A01217
+@00000B53 ADA7883A
+@00000B54 1D000404
+@00000B55 17000326
+@00000B56 18C023C4
+@00000B57 00BFE004
+@00000B58 18A8703A
+@00000B59 9009883A
+@00000B5A A00B883A
+@00000B5B DB400015
+@00000B5C 00030F40
+@00000B5D 1021883A
+@00000B5E DB400017
+@00000B5F 17000426
+@00000B60 14C03E2E
+@00000B61 00800034
+@00000B62 10928904
+@00000B63 A8803B26
+@00000B64 68800217
+@00000B65 013FFF04
+@00000B66 10C00117
+@00000B67 1906703A
+@00000B68 1C49C83A
+@00000B69 1C400236
+@00000B6A 008003C4
+@00000B6B 11000516
+@00000B6C 9009883A
+@00000B6D 00035880
+@00000B6E 003F1806
+@00000B6F 4A7FFFC4
+@00000B70 003F5706
+@00000B71 6C000217
+@00000B72 88800054
+@00000B73 21000054
+@00000B74 8447883A
+@00000B75 80800115
+@00000B76 19000115
+@00000B77 9009883A
+@00000B78 68C00215
+@00000B79 003F3006
+@00000B7A 180AD27A
+@00000B7B 1808D0FA
+@00000B7C 28000426
+@00000B7D 00800104
+@00000B7E 11405836
+@00000B7F 1804D1BA
+@00000B80 11000E04
+@00000B81 200490FA
+@00000B82 01400034
+@00000B83 29528904
+@00000B84 1351883A
+@00000B85 41C00217
+@00000B86 3A006D26
+@00000B87 38800117
+@00000B88 013FFF04
+@00000B89 1104703A
+@00000B8A 1880052E
+@00000B8B 39C00217
+@00000B8C 3A000326
+@00000B8D 38800117
+@00000B8E 1104703A
+@00000B8F 18BFFB36
+@00000B90 3A000317
+@00000B91 82000315
+@00000B92 81C00215
+@00000B93 3C000315
+@00000B94 44000215
+@00000B95 003F5F06
+@00000B96 82000317
+@00000B97 81C00217
+@00000B98 88800054
+@00000B99 844B883A
+@00000B9A 41C00215
+@00000B9B 3A000315
+@00000B9C 003F9E06
+@00000B9D 48C000C4
+@00000B9E 003F5806
+@00000B9F 07000034
+@00000BA0 E7127F04
+@00000BA1 E0800017
+@00000BA2 1505883A
+@00000BA3 E0800015
+@00000BA4 84C05826
+@00000BA5 D0E01217
+@00000BA6 00BFFFC4
+@00000BA7 18805326
+@00000BA8 E0800017
+@00000BA9 84C7C83A
+@00000BAA 10C5883A
+@00000BAB E0800015
+@00000BAC 80C001CC
+@00000BAD 0027883A
+@00000BAE 18000326
+@00000BAF 00800204
+@00000BB0 10E7C83A
+@00000BB1 84E1883A
+@00000BB2 8505883A
+@00000BB3 10801FCC
+@00000BB4 00C02004
+@00000BB5 1887C83A
+@00000BB6 98E7883A
+@00000BB7 9009883A
+@00000BB8 980B883A
+@00000BB9 DB400015
+@00000BBA 00030F40
+@00000BBB 1007883A
+@00000BBC 00BFFFC4
+@00000BBD DB400017
+@00000BBE 18804E26
+@00000BBF E0800017
+@00000BC0 1C07C83A
+@00000BC1 1CC9883A
+@00000BC2 14C5883A
+@00000BC3 E0800015
+@00000BC4 6C000215
+@00000BC5 20800054
+@00000BC6 AB404426
+@00000BC7 014003C4
+@00000BC8 2D801636
+@00000BC9 00800044
+@00000BCA 80800115
+@00000BCB 003F9806
+@00000BCC 00805504
+@00000BCD 10C00336
+@00000BCE 8804D3FA
+@00000BCF 12401DC4
+@00000BD0 003EE806
+@00000BD1 00815504
+@00000BD2 02401F84
+@00000BD3 10FEE536
+@00000BD4 8804D4BA
+@00000BD5 12401F04
+@00000BD6 003EE206
+@00000BD7 00800504
+@00000BD8 290016C4
+@00000BD9 117FA72E
+@00000BDA 00801504
+@00000BDB 11403A36
+@00000BDC 1804D33A
+@00000BDD 11001B84
+@00000BDE 003FA206
+@00000BDF 80800115
+@00000BE0 A8800117
+@00000BE1 00FFFE04
+@00000BE2 B13FFD04
+@00000BE3 20EE703A
+@00000BE4 1080004C
+@00000BE5 15C4B03A
+@00000BE6 A8800115
+@00000BE7 ADC7883A
+@00000BE8 00800144
+@00000BE9 18800215
+@00000BEA 18800115
+@00000BEB 2DC02436
+@00000BEC E0C00017
+@00000BED D0A01117
+@00000BEE 10C0012E
+@00000BEF D0E01115
+@00000BF0 D0A01017
+@00000BF1 10FF722E
+@00000BF2 D0E01015
+@00000BF3 003F7006
+@00000BF4 2005D0BA
+@00000BF5 00C00044
+@00000BF6 29000117
+@00000BF7 1886983A
+@00000BF8 20C8B03A
+@00000BF9 29000115
+@00000BFA 003F9606
+@00000BFB D4201215
+@00000BFC 003FAF06
+@00000BFD 80801FCC
+@00000BFE 103FA61E
+@00000BFF 00800034
+@00000C00 10928904
+@00000C01 10C00217
+@00000C02 A5C9883A
+@00000C03 20800054
+@00000C04 18800115
+@00000C05 003FE606
+@00000C06 68800117
+@00000C07 01C6303A
+@00000C08 10C4703A
+@00000C09 68800115
+@00000C0A 003F1806
+@00000C0B 80800115
+@00000C0C 003FDF06
+@00000C0D 0027883A
+@00000C0E 8007883A
+@00000C0F 003FAF06
+@00000C10 A9400204
+@00000C11 9009883A
+@00000C12 DB400015
+@00000C13 00032640
+@00000C14 DB400017
+@00000C15 003FD606
+@00000C16 00805504
+@00000C17 11400336
+@00000C18 1804D3FA
+@00000C19 11001DC4
+@00000C1A 003F6606
+@00000C1B 00815504
+@00000C1C 01001F84
+@00000C1D 117F6336
+@00000C1E 1804D4BA
+@00000C1F 11001F04
+@00000C20 003F6006
+@00000C21 31BFFFC4
+@00000C22 00BFFFC4
+@00000C23 30800826
+@00000C24 100F883A
+@00000C25 20C00003
+@00000C26 28800003
+@00000C27 31BFFFC4
+@00000C28 21000044
+@00000C29 29400044
+@00000C2A 1880031E
+@00000C2B 31FFF91E
+@00000C2C 0005883A
+@00000C2D F800283A
+@00000C2E 1885C83A
+@00000C2F F800283A
+@00000C30 31BFFFC4
+@00000C31 00BFFFC4
+@00000C32 2007883A
+@00000C33 30800726
+@00000C34 100F883A
+@00000C35 28800003
+@00000C36 31BFFFC4
+@00000C37 29400044
+@00000C38 18800005
+@00000C39 18C00044
+@00000C3A 31FFFA1E
+@00000C3B 2005883A
+@00000C3C F800283A
+@00000C3D DEFFFE04
+@00000C3E DC000015
+@00000C3F 2021883A
+@00000C40 2809883A
+@00000C41 DFC00115
+@00000C42 D0201815
+@00000C43 00035A40
+@00000C44 1007883A
+@00000C45 00BFFFC4
+@00000C46 18800526
+@00000C47 1805883A
+@00000C48 DFC00117
+@00000C49 DC000017
+@00000C4A DEC00204
+@00000C4B F800283A
+@00000C4C D0A01817
+@00000C4D 103FF926
+@00000C4E 80800315
+@00000C4F 003FF706
+@00000C50 DEFFFB04
+@00000C51 DCC00015
+@00000C52 04C00034
+@00000C53 9CD28904
+@00000C54 DC000315
+@00000C55 DC400215
+@00000C56 DC800115
+@00000C57 2823883A
+@00000C58 2021883A
+@00000C59 DFC00415
+@00000C5A 000356C0
+@00000C5B 98800217
+@00000C5C 8009883A
+@00000C5D 000B883A
+@00000C5E 10C00117
+@00000C5F 00BFFF04
+@00000C60 18A4703A
+@00000C61 9463C83A
+@00000C62 8C401BC4
+@00000C63 8822D1FA
+@00000C64 00802004
+@00000C65 8C7FFFC4
+@00000C66 882291FA
+@00000C67 88800616
+@00000C68 00030F40
+@00000C69 98C00217
+@00000C6A 8009883A
+@00000C6B 044BC83A
+@00000C6C 1C87883A
+@00000C6D 18800926
+@00000C6E 00035880
+@00000C6F 0005883A
+@00000C70 DFC00417
+@00000C71 DC000317
+@00000C72 DC400217
+@00000C73 DC800117
+@00000C74 DCC00017
+@00000C75 DEC00504
+@00000C76 F800283A
+@00000C77 8009883A
+@00000C78 00030F40
+@00000C79 944DC83A
+@00000C7A 00FFFFC4
+@00000C7B 8009883A
+@00000C7C 000B883A
+@00000C7D 01C00034
+@00000C7E 39D27F04
+@00000C7F 31800054
+@00000C80 10C00926
+@00000C81 38800017
+@00000C82 98C00217
+@00000C83 8009883A
+@00000C84 1445C83A
+@00000C85 38800015
+@00000C86 19800115
+@00000C87 00035880
+@00000C88 00800044
+@00000C89 003FE606
+@00000C8A 00030F40
+@00000C8B 99400217
+@00000C8C 100D883A
+@00000C8D 8009883A
+@00000C8E 1165C83A
+@00000C8F 008003C4
+@00000C90 90C00054
+@00000C91 14BFDC0E
+@00000C92 28C00115
+@00000C93 D0E01217
+@00000C94 00800034
+@00000C95 10927F04
+@00000C96 30C7C83A
+@00000C97 10C00015
+@00000C98 003FD506
+@00000C99 DEFFFD04
+@00000C9A DC000115
+@00000C9B DC400015
+@00000C9C DFC00215
+@00000C9D 2821883A
+@00000C9E 2023883A
+@00000C9F 28003226
+@00000CA0 000356C0
+@00000CA1 82BFFE04
+@00000CA2 51400117
+@00000CA3 00BFFF84
+@00000CA4 03000034
+@00000CA5 63128904
+@00000CA6 2892703A
+@00000CA7 524D883A
+@00000CA8 30C00117
+@00000CA9 61000217
+@00000CAA 00BFFF04
+@00000CAB 1896703A
+@00000CAC 21804E26
+@00000CAD 2880004C
+@00000CAE 32C00115
+@00000CAF 000B883A
+@00000CB0 1000091E
+@00000CB1 50C00017
+@00000CB2 60800204
+@00000CB3 50D5C83A
+@00000CB4 51000217
+@00000CB5 48D3883A
+@00000CB6 20807426
+@00000CB7 52000317
+@00000CB8 41000215
+@00000CB9 22000315
+@00000CBA 32C7883A
+@00000CBB 18800117
+@00000CBC 2808C03A
+@00000CBD 1080004C
+@00000CBE 1000061E
+@00000CBF 4AD3883A
+@00000CC0 20001626
+@00000CC1 30C00217
+@00000CC2 32000317
+@00000CC3 40C00215
+@00000CC4 1A000315
+@00000CC5 48800054
+@00000CC6 5247883A
+@00000CC7 50800115
+@00000CC8 1A400015
+@00000CC9 20001726
+@00000CCA 8809883A
+@00000CCB 02000034
+@00000CCC 420D6204
+@00000CCD DFC00217
+@00000CCE DC000117
+@00000CCF DC400017
+@00000CD0 DEC00304
+@00000CD1 4000683A
+@00000CD2 DFC00217
+@00000CD3 DC000117
+@00000CD4 DC400017
+@00000CD5 DEC00304
+@00000CD6 F800283A
+@00000CD7 30C00217
+@00000CD8 00800034
+@00000CD9 10928B04
+@00000CDA 18BFE71E
+@00000CDB 1A800315
+@00000CDC 1A800215
+@00000CDD 01000044
+@00000CDE 50C00215
+@00000CDF 50C00315
+@00000CE0 003FE406
+@00000CE1 00807FC4
+@00000CE2 12402B36
+@00000CE3 4806D0FA
+@00000CE4 01800034
+@00000CE5 31928904
+@00000CE6 00800044
+@00000CE7 180890FA
+@00000CE8 1807D0BA
+@00000CE9 31400117
+@00000CEA 2191883A
+@00000CEB 41C00217
+@00000CEC 10C4983A
+@00000CED 52000315
+@00000CEE 51C00215
+@00000CEF 288AB03A
+@00000CF0 3A800315
+@00000CF1 31400115
+@00000CF2 42800215
+@00000CF3 8809883A
+@00000CF4 02000034
+@00000CF5 420D6204
+@00000CF6 DFC00217
+@00000CF7 DC000117
+@00000CF8 DC400017
+@00000CF9 DEC00304
+@00000CFA 4000683A
+@00000CFB 2880004C
+@00000CFC 4AD3883A
+@00000CFD 1000071E
+@00000CFE 50C00017
+@00000CFF 50D5C83A
+@00000D00 52000317
+@00000D01 51C00217
+@00000D02 48D3883A
+@00000D03 41C00215
+@00000D04 3A000315
+@00000D05 D0A01417
+@00000D06 48C00054
+@00000D07 62800215
+@00000D08 50C00115
+@00000D09 48BFC036
+@00000D0A D1601317
+@00000D0B 8809883A
+@00000D0C 00031400
+@00000D0D 003FBC06
+@00000D0E 4808D27A
+@00000D0F 4806D0FA
+@00000D10 2000151E
+@00000D11 180490FA
+@00000D12 01400034
+@00000D13 29528904
+@00000D14 1311883A
+@00000D15 41C00217
+@00000D16 3A001E26
+@00000D17 38800117
+@00000D18 00FFFF04
+@00000D19 10C4703A
+@00000D1A 4880052E
+@00000D1B 39C00217
+@00000D1C 3A000326
+@00000D1D 38800117
+@00000D1E 10C4703A
+@00000D1F 48BFFB36
+@00000D20 3A000317
+@00000D21 52000315
+@00000D22 51C00215
+@00000D23 3A800315
+@00000D24 42800215
+@00000D25 003FCD06
+@00000D26 00800104
+@00000D27 11000536
+@00000D28 4804D1BA
+@00000D29 10C00E04
+@00000D2A 003FE606
+@00000D2B 01400044
+@00000D2C 003F8D06
+@00000D2D 00800504
+@00000D2E 20C016C4
+@00000D2F 113FE12E
+@00000D30 00801504
+@00000D31 11000A36
+@00000D32 4804D33A
+@00000D33 10C01B84
+@00000D34 003FDC06
+@00000D35 1805D0BA
+@00000D36 00C00044
+@00000D37 29000117
+@00000D38 1886983A
+@00000D39 20C8B03A
+@00000D3A 29000115
+@00000D3B 003FE506
+@00000D3C 00805504
+@00000D3D 11000336
+@00000D3E 4804D3FA
+@00000D3F 10C01DC4
+@00000D40 003FD006
+@00000D41 00815504
+@00000D42 00C01F84
+@00000D43 113FCD36
+@00000D44 4804D4BA
+@00000D45 10C01F04
+@00000D46 003FCA06
+@00000D47 DEFFFD04
+@00000D48 DF000215
+@00000D49 D839883A
+@00000D4A E1000015
+@00000D4B E0800017
+@00000D4C E0800115
+@00000D4D 00C00044
+@00000D4E E0800117
+@00000D4F 180171BA
+@00000D50 DF000217
+@00000D51 DEC00304
+@00000D52 F800283A
+@00000D53 DEFFFD04
+@00000D54 DFC00215
+@00000D55 DF000115
+@00000D56 D839883A
+@00000D57 E1000015
+@00000D58 E1000017
+@00000D59 000351C0
+@00000D5A 003FFF06
+@00000D5B DEFFFE04
+@00000D5C DF000115
+@00000D5D D839883A
+@00000D5E E1000015
+@00000D5F DF000117
+@00000D60 DEC00204
+@00000D61 F800283A
+@00000D62 DEFFFE04
+@00000D63 DF000115
+@00000D64 D839883A
+@00000D65 E1000015
+@00000D66 DF000117
+@00000D67 DEC00204
+@00000D68 F800283A
+@00000D69 DEFFFA04
+@00000D6A DF000515
+@00000D6B D839883A
+@00000D6C E1000015
+@00000D6D 0005303A
+@00000D6E E0800415
+@00000D6F 0001703A
+@00000D70 E0800417
+@00000D71 E0800315
+@00000D72 E0800317
+@00000D73 E0800115
+@00000D74 D0A01517
+@00000D75 10C000C4
+@00000D76 00BFFF04
+@00000D77 1884703A
+@00000D78 D0A01515
+@00000D79 D0A01517
+@00000D7A E0800215
+@00000D7B D0E01517
+@00000D7C E0800017
+@00000D7D 1885883A
+@00000D7E D0A01515
+@00000D7F E0800117
+@00000D80 E0800415
+@00000D81 E0800417
+@00000D82 1001703A
+@00000D83 E0800217
+@00000D84 DF000517
+@00000D85 DEC00604
+@00000D86 F800283A
+@00000D87 2A2A0A0A
+@00000D88 2A2A2A2A
+@00000D89 2A2A2A2A
+@00000D8A 2A2A2A2A
+@00000D8B 2A2A2A2A
+@00000D8C 2A2A2A2A
+@00000D8D 2A2A2A2A
+@00000D8E 0000000A
+@00000D8F 6548202A
+@00000D90 206F6C6C
+@00000D91 6D6F7266
+@00000D92 6F694E20
+@00000D93 49492073
+@00000D94 20202021
+@00000D95 000A2A20
+@00000D96 6F43202A
+@00000D97 69746E75
+@00000D98 6620676E
+@00000D99 206D6F72
+@00000D9A 74203030
+@00000D9B 6666206F
+@00000D9C 000A2A20
+@00000D9D 2A2A2A2A
+@00000D9E 2A2A2A2A
+@00000D9F 2A2A2A2A
+@00000DA0 2A2A2A2A
+@00000DA1 2A2A2A2A
+@00000DA2 2A2A2A2A
+@00000DA3 000A2A2A
+@00000DA4 78323025
+@00000DA5 0020202C
+@00000DA6 74747542
+@00000DA7 31206E6F
+@00000DA8 0000000A
+@00000DA9 74747542
+@00000DAA 32206E6F
+@00000DAB 0000000A
+@00000DAC 74747542
+@00000DAD 33206E6F
+@00000DAE 0000000A
+@00000DAF 74747542
+@00000DB0 34206E6F
+@00000DB1 0000000A
+@00000DB2 6961570A
+@00000DB3 676E6974
+@00000DB4 002E2E2E
+@00000DB5 0000002E
+@00000DB6 756F590A
+@00000DB7 73757020
+@00000DB8 3A646568
+@00000DB9 00002020
+@00000DBA 00000838
+@00000DBB 000007F0
+@00000DBC 000007F0
+@00000DBD 000007F0
+@00000DBE 000007F0
+@00000DBF 000007F0
+@00000DC0 000007F0
+@00000DC1 000007F0
+@00000DC2 000007F0
+@00000DC3 000007F0
+@00000DC4 000007F0
+@00000DC5 0000098C
+@00000DC6 00000848
+@00000DC7 000007F0
+@00000DC8 000007F0
+@00000DC9 000007F0
+@00000DCA 000007F0
+@00000DCB 00000848
+@00000DCC 000007F0
+@00000DCD 000007F0
+@00000DCE 000007F0
+@00000DCF 000007F0
+@00000DD0 000007F0
+@00000DD1 00000A68
+@00000DD2 000007F0
+@00000DD3 000007F0
+@00000DD4 000007F0
+@00000DD5 00000A00
+@00000DD6 000007F0
+@00000DD7 000009F8
+@00000DD8 000007F0
+@00000DD9 000007F0
+@00000DDA 000009EC
+@00000DDB 7665642F
+@00000DDC 61746A2F
+@00000DDD 61755F67
+@00000DDE 305F7472
+@00000DDF 00000000
+@00000DE0 7665642F
+@00000DE1 61746A2F
+@00000DE2 61755F67
+@00000DE3 305F7472
+@00000DE4 00000000
+@00000DE5 7665642F
+@00000DE6 6C756E2F
+@00000DE7 0000006C
+@00000DE8 000037D4
+@00000DE9 000037DC
+@00000DEA 000037E4
+@00000DEB 00000000
+@00000DEC 00000000
+@00000DED 00000000
+@00000DEE 00000000
+@00000DEF 00000000
+@00000DF0 00000000
+@00000DF1 00000000
+@00000DF2 00000000
+@00000DF3 00000000
+@00000DF4 00000000
+@00000DF5 00000004
+@00000DF6 00000000
+@00000DF7 0001000A
+@00000DF8 00000000
+@00000DF9 0002000A
+@00000DFA 00000000
+@00000DFB 00000000
+@00000DFC 00000000
+@00000DFD 00000000
+@00000DFE 00000000
+@00000DFF 00003780
+@00000E00 00000000
+@00000E01 00000000
+@00000E02 00001000
+@00000E03 00001240
+@00000E04 00000000
+@00000E05 00000000
+@00000E06 000016B0
+@00000E07 01000850
+@00000E08 0000000A
+@00000E09 00000000
+@00000E0A 00000000
+@00000E0B 00000000
+@00000E0C 00000000
+@00000E0D 00000000
+@00000E0E 00000000
+@00000E0F 00000000
+@00000E10 00000000
+@00000E11 00000000
+@00000E12 00000000
+@00000E13 00000000
+@00000E14 00000000
+@00000E15 00000000
+@00000E16 00000000
+@00000E17 00000000
+@00000E18 00000000
+@00000E19 00000000
+@00000E1A 00000000
+@00000E1B 00000000
+@00000E1C 00000000
+@00000E1D 00000000
+@00000E1E 00000000
+@00000E1F 00000000
+@00000E20 00000000
+@00000E21 00000000
+@00000E22 00000000
+@00000E23 00000000
+@00000E24 00000000
+@00000E25 00000000
+@00000E26 00000000
+@00000E27 00000000
+@00000E28 00000000
+@00000E29 00000000
+@00000E2A 00000000
+@00000E2B 00000000
+@00000E2C 00000000
+@00000E2D 00000000
+@00000E2E 00000000
+@00000E2F 00000000
+@00000E30 00000000
+@00000E31 00000000
+@00000E32 00000000
+@00000E33 00000000
+@00000E34 00000000
+@00000E35 00000000
+@00000E36 00000000
+@00000E37 00000000
+@00000E38 00000000
+@00000E39 00000000
+@00000E3A 00000000
+@00000E3B 00000000
+@00000E3C 00000000
+@00000E3D 00000000
+@00000E3E 00000000
+@00000E3F 00000000
+@00000E40 00000000
+@00000E41 00000000
+@00000E42 00000000
+@00000E43 00000000
+@00000E44 00000000
+@00000E45 00000000
+@00000E46 00000000
+@00000E47 00000000
+@00000E48 00000000
+@00000E49 00000000
+@00000E4A 00000000
+@00000E4B 00000000
+@00000E4C 00000000
+@00000E4D 00000000
+@00000E4E 00000000
+@00000E4F 00000000
+@00000E50 00000000
+@00000E51 00000000
+@00000E52 00000000
+@00000E53 00000000
+@00000E54 00000000
+@00000E55 00000000
+@00000E56 00000000
+@00000E57 00000000
+@00000E58 00000000
+@00000E59 00000000
+@00000E5A 00000000
+@00000E5B 00000000
+@00000E5C 00000000
+@00000E5D 00000000
+@00000E5E 00000000
+@00000E5F 00000000
+@00000E60 00000000
+@00000E61 00000000
+@00000E62 00000000
+@00000E63 00000000
+@00000E64 00000000
+@00000E65 00000000
+@00000E66 00000000
+@00000E67 00000000
+@00000E68 00000000
+@00000E69 00000000
+@00000E6A 00000000
+@00000E6B 00000000
+@00000E6C 00000000
+@00000E6D 00000000
+@00000E6E 00000000
+@00000E6F 00000000
+@00000E70 00000000
+@00000E71 00000000
+@00000E72 00000000
+@00000E73 00000000
+@00000E74 00000000
+@00000E75 00000000
+@00000E76 00000000
+@00000E77 00000000
+@00000E78 00000000
+@00000E79 00000000
+@00000E7A 00000000
+@00000E7B 00000000
+@00000E7C 00000000
+@00000E7D 00000000
+@00000E7E 00000000
+@00000E7F 00000000
+@00000E80 00000000
+@00000E81 00000000
+@00000E82 00000000
+@00000E83 00000000
+@00000E84 00000000
+@00000E85 00000000
+@00000E86 00000000
+@00000E87 00000000
+@00000E88 00000000
+@00000E89 00000000
+@00000E8A 00000000
+@00000E8B 00000000
+@00000E8C 00000000
+@00000E8D 00000000
+@00000E8E 00000000
+@00000E8F 00000000
+@00000E90 00000000
+@00000E91 00000000
+@00000E92 00000000
+@00000E93 00000000
+@00000E94 00000000
+@00000E95 00000000
+@00000E96 00000000
+@00000E97 00000000
+@00000E98 00000000
+@00000E99 00000000
+@00000E9A 00000000
+@00000E9B 00000000
+@00000E9C 00000000
+@00000E9D 00000000
+@00000E9E 00000000
+@00000E9F 00000000
+@00000EA0 00000000
+@00000EA1 00000000
+@00000EA2 00000000
+@00000EA3 00000000
+@00000EA4 00000000
+@00000EA5 00000000
+@00000EA6 00000000
+@00000EA7 00000000
+@00000EA8 00000000
+@00000EA9 00000000
+@00000EAA 00000000
+@00000EAB 00000000
+@00000EAC 00000000
+@00000EAD 00000000
+@00000EAE 00000000
+@00000EAF 00000000
+@00000EB0 00000000
+@00000EB1 00000000
+@00000EB2 00000000
+@00000EB3 00000000
+@00000EB4 00000000
+@00000EB5 00000000
+@00000EB6 00000000
+@00000EB7 00000000
+@00000EB8 00000000
+@00000EB9 00000000
+@00000EBA 00000000
+@00000EBB 00000000
+@00000EBC 00000000
+@00000EBD 00000000
+@00000EBE 00000000
+@00000EBF 00000000
+@00000EC0 00000000
+@00000EC1 00000000
+@00000EC2 00000000
+@00000EC3 00000000
+@00000EC4 00000000
+@00000EC5 00000000
+@00000EC6 00000000
+@00000EC7 00000000
+@00000EC8 00000000
+@00000EC9 00000000
+@00000ECA 00000000
+@00000ECB 00000000
+@00000ECC 00000000
+@00000ECD 00000000
+@00000ECE 00000000
+@00000ECF 00000000
+@00000ED0 00000000
+@00000ED1 00000000
+@00000ED2 00000000
+@00000ED3 00000000
+@00000ED4 00000000
+@00000ED5 00000000
+@00000ED6 00000000
+@00000ED7 00000000
+@00000ED8 00000000
+@00000ED9 00000000
+@00000EDA 00000000
+@00000EDB 00000000
+@00000EDC 00000000
+@00000EDD 00000000
+@00000EDE 00000000
+@00000EDF 00000000
+@00000EE0 00000000
+@00000EE1 00000000
+@00000EE2 00000000
+@00000EE3 00000000
+@00000EE4 00000000
+@00000EE5 00000000
+@00000EE6 00000000
+@00000EE7 00000000
+@00000EE8 00000000
+@00000EE9 00000000
+@00000EEA 00000000
+@00000EEB 00000000
+@00000EEC 00000000
+@00000EED 00000000
+@00000EEE 00000000
+@00000EEF 00000000
+@00000EF0 00000000
+@00000EF1 00000000
+@00000EF2 00000000
+@00000EF3 00000000
+@00000EF4 00000000
+@00000EF5 00000000
+@00000EF6 00000000
+@00000EF7 00000000
+@00000EF8 00000000
+@00000EF9 00000000
+@00000EFA 00000000
+@00000EFB 00000000
+@00000EFC 00000000
+@00000EFD 00000000
+@00000EFE 00000000
+@00000EFF 00000000
+@00000F00 00000000
+@00000F01 00000000
+@00000F02 00000000
+@00000F03 00000000
+@00000F04 00000000
+@00000F05 00000000
+@00000F06 00000000
+@00000F07 00000000
+@00000F08 00000000
+@00000F09 00000000
+@00000F0A 00000000
+@00000F0B 00000000
+@00000F0C 00000000
+@00000F0D 00000000
+@00000F0E 00000000
+@00000F0F 00000000
+@00000F10 00000000
+@00000F11 00000000
+@00000F12 00000000
+@00000F13 00000000
+@00000F14 00000000
+@00000F15 00000000
+@00000F16 00000000
+@00000F17 00000000
+@00000F18 00000000
+@00000F19 00000000
+@00000F1A 00000000
+@00000F1B 00000000
+@00000F1C 00000000
+@00000F1D 00000000
+@00000F1E 00000000
+@00000F1F 00000000
+@00000F20 00000000
+@00000F21 00000000
+@00000F22 00000000
+@00000F23 00000000
+@00000F24 00000000
+@00000F25 00000000
+@00000F26 00000000
+@00000F27 00000000
+@00000F28 00000000
+@00000F29 00000000
+@00000F2A 00000000
+@00000F2B 00000000
+@00000F2C 00000000
+@00000F2D 00000000
+@00000F2E 00000000
+@00000F2F 00000000
+@00000F30 00000000
+@00000F31 00000000
+@00000F32 00000000
+@00000F33 00000000
+@00000F34 00000000
+@00000F35 00000000
+@00000F36 00000000
+@00000F37 00000000
+@00000F38 00000000
+@00000F39 00000000
+@00000F3A 00000000
+@00000F3B 00000000
+@00000F3C 00000000
+@00000F3D 00000000
+@00000F3E 00000000
+@00000F3F 00000000
+@00000F40 00000000
+@00000F41 00000000
+@00000F42 00000000
+@00000F43 00000000
+@00000F44 00000000
+@00000F45 00000000
+@00000F46 00000000
+@00000F47 00000000
+@00000F48 00000000
+@00000F49 00000000
+@00000F4A 00000000
+@00000F4B 00000000
+@00000F4C 00000000
+@00000F4D 00000000
+@00000F4E 00000000
+@00000F4F 00000000
+@00000F50 00000000
+@00000F51 00000000
+@00000F52 00000000
+@00000F53 00000000
+@00000F54 00000000
+@00000F55 00000000
+@00000F56 00000000
+@00000F57 00000000
+@00000F58 00000000
+@00000F59 00000000
+@00000F5A 00000000
+@00000F5B 00000000
+@00000F5C 00000000
+@00000F5D 00000000
+@00000F5E 00000000
+@00000F5F 00000000
+@00000F60 00000000
+@00000F61 00000000
+@00000F62 00000000
+@00000F63 00000000
+@00000F64 00000000
+@00000F65 00000000
+@00000F66 00000000
+@00000F67 00000000
+@00000F68 00000000
+@00000F69 00000000
+@00000F6A 00000000
+@00000F6B 00000000
+@00000F6C 00000000
+@00000F6D 00000000
+@00000F6E 00000000
+@00000F6F 00000000
+@00000F70 00000000
+@00000F71 00000000
+@00000F72 00000000
+@00000F73 00000000
+@00000F74 00000000
+@00000F75 00000000
+@00000F76 00000000
+@00000F77 00000000
+@00000F78 00000000
+@00000F79 00000000
+@00000F7A 00000000
+@00000F7B 00000000
+@00000F7C 00000000
+@00000F7D 00000000
+@00000F7E 00000000
+@00000F7F 00000000
+@00000F80 00000000
+@00000F81 00000000
+@00000F82 00000000
+@00000F83 00000000
+@00000F84 00000000
+@00000F85 00000000
+@00000F86 00000000
+@00000F87 00000000
+@00000F88 00000000
+@00000F89 00000000
+@00000F8A 00000000
+@00000F8B 00000000
+@00000F8C 00000000
+@00000F8D 00000000
+@00000F8E 00000000
+@00000F8F 00000000
+@00000F90 00000000
+@00000F91 00000000
+@00000F92 00000000
+@00000F93 00000000
+@00000F94 00000000
+@00000F95 00000000
+@00000F96 00000000
+@00000F97 00000000
+@00000F98 00000000
+@00000F99 00000000
+@00000F9A 00000000
+@00000F9B 00000000
+@00000F9C 00000000
+@00000F9D 00000000
+@00000F9E 00000000
+@00000F9F 00000000
+@00000FA0 00000000
+@00000FA1 00000000
+@00000FA2 00000000
+@00000FA3 00000000
+@00000FA4 00000000
+@00000FA5 00000000
+@00000FA6 00000000
+@00000FA7 00000000
+@00000FA8 00000000
+@00000FA9 00000000
+@00000FAA 00000000
+@00000FAB 00000000
+@00000FAC 00000000
+@00000FAD 00000000
+@00000FAE 00000000
+@00000FAF 00000000
+@00000FB0 00000000
+@00000FB1 00000000
+@00000FB2 00000000
+@00000FB3 00000000
+@00000FB4 00000000
+@00000FB5 00000000
+@00000FB6 00000000
+@00000FB7 00000000
+@00000FB8 00000000
+@00000FB9 00000000
+@00000FBA 00000000
+@00000FBB 00000000
+@00000FBC 00000000
+@00000FBD 00000000
+@00000FBE 00000000
+@00000FBF 00000000
+@00000FC0 00000000
+@00000FC1 00000000
+@00000FC2 00000000
+@00000FC3 00000000
+@00000FC4 00000000
+@00000FC5 00000000
+@00000FC6 00000000
+@00000FC7 00000000
+@00000FC8 00000000
+@00000FC9 00000000
+@00000FCA 00000000
+@00000FCB 00000000
+@00000FCC 00000000
+@00000FCD 00000000
+@00000FCE 00000000
+@00000FCF 00000000
+@00000FD0 00000000
+@00000FD1 00000000
+@00000FD2 00000000
+@00000FD3 00000000
+@00000FD4 00000000
+@00000FD5 00000000
+@00000FD6 00000000
+@00000FD7 00000000
+@00000FD8 00000000
+@00000FD9 00000000
+@00000FDA 00000000
+@00000FDB 00000000
+@00000FDC 00000000
+@00000FDD 00000000
+@00000FDE 00000000
+@00000FDF 00000000
+@00000FE0 00000000
+@00000FE1 00000000
+@00000FE2 00000000
+@00000FE3 00000000
+@00000FE4 00000000
+@00000FE5 00000000
+@00000FE6 00000000
+@00000FE7 00000000
+@00000FE8 00000000
+@00000FE9 00000000
+@00000FEA 00000000
+@00000FEB 00000000
+@00000FEC 00000000
+@00000FED 00000000
+@00000FEE 00000000
+@00000FEF 00000000
+@00000FF0 00000000
+@00000FF1 00000000
+@00000FF2 00000000
+@00000FF3 00000000
+@00000FF4 00000000
+@00000FF5 00000000
+@00000FF6 00000000
+@00000FF7 00000000
+@00000FF8 00000000
+@00000FF9 00000000
+@00000FFA 00000000
+@00000FFB 00000000
+@00000FFC 00000000
+@00000FFD 00000000
+@00000FFE 00000000
+@00000FFF 00000000
+@00001000 00000000
+@00001001 00000000
+@00001002 00000000
+@00001003 00000000
+@00001004 00000000
+@00001005 00000000
+@00001006 00000000
+@00001007 00000000
+@00001008 00000000
+@00001009 00000000
+@0000100A 00000000
+@0000100B 00000000
+@0000100C 00000000
+@0000100D 00000000
+@0000100E 00000000
+@0000100F 00000000
+@00001010 00000000
+@00001011 00000000
+@00001012 00000000
+@00001013 00000000
+@00001014 00000000
+@00001015 00000000
+@00001016 00000000
+@00001017 00000000
+@00001018 00000000
+@00001019 00000000
+@0000101A 00000000
+@0000101B 00000000
+@0000101C 00000000
+@0000101D 00000000
+@0000101E 00000000
+@0000101F 00000000
+@00001020 00000000
+@00001021 00000000
+@00001022 00000000
+@00001023 00000000
+@00001024 00000000
+@00001025 00000000
+@00001026 00000000
+@00001027 00000000
+@00001028 00000000
+@00001029 00000000
+@0000102A 00000000
+@0000102B 00000000
+@0000102C 00000000
+@0000102D 00000000
+@0000102E 00000000
+@0000102F 00000000
+@00001030 00000000
+@00001031 00000000
+@00001032 00000000
+@00001033 00000000
+@00001034 00000000
+@00001035 00000000
+@00001036 00000000
+@00001037 00000000
+@00001038 00000000
+@00001039 00000000
+@0000103A 00000000
+@0000103B 00000000
+@0000103C 00000000
+@0000103D 00000000
+@0000103E 00000000
+@0000103F 00000000
+@00001040 00000000
+@00001041 00000000
+@00001042 00000000
+@00001043 00000000
+@00001044 00000000
+@00001045 00000000
+@00001046 00000000
+@00001047 00000000
+@00001048 00000000
+@00001049 00000000
+@0000104A 00000000
+@0000104B 00000000
+@0000104C 00000000
+@0000104D 00000000
+@0000104E 00000000
+@0000104F 00000000
+@00001050 00000000
+@00001051 00000000
+@00001052 00000000
+@00001053 00000000
+@00001054 00000000
+@00001055 00000000
+@00001056 00000000
+@00001057 00000000
+@00001058 00000000
+@00001059 00000000
+@0000105A 00000000
+@0000105B 00000000
+@0000105C 00000000
+@0000105D 00000000
+@0000105E 00000000
+@0000105F 00000000
+@00001060 00000000
+@00001061 00000000
+@00001062 00000000
+@00001063 00000000
+@00001064 00000000
+@00001065 00000000
+@00001066 00000000
+@00001067 00000000
+@00001068 00000000
+@00001069 00000000
+@0000106A 00000000
+@0000106B 00000000
+@0000106C 00000000
+@0000106D 00000000
+@0000106E 00000000
+@0000106F 00000000
+@00001070 00000000
+@00001071 00000000
+@00001072 00000000
+@00001073 00000000
+@00001074 00000000
+@00001075 00000000
+@00001076 00000000
+@00001077 00000000
+@00001078 00000000
+@00001079 00000000
+@0000107A 00000000
+@0000107B 00000000
+@0000107C 00000000
+@0000107D 00000000
+@0000107E 00000000
+@0000107F 00000000
+@00001080 00000000
+@00001081 00000000
+@00001082 00000000
+@00001083 00000000
+@00001084 00000000
+@00001085 00000000
+@00001086 00000000
+@00001087 00000000
+@00001088 00000000
+@00001089 00000000
+@0000108A 00000000
+@0000108B 00000000
+@0000108C 00000000
+@0000108D 00000000
+@0000108E 00000000
+@0000108F 00000000
+@00001090 00000000
+@00001091 00000000
+@00001092 00000000
+@00001093 00000000
+@00001094 00000000
+@00001095 00000000
+@00001096 00000000
+@00001097 00000000
+@00001098 00000000
+@00001099 00000000
+@0000109A 00000000
+@0000109B 00000000
+@0000109C 00000000
+@0000109D 00000000
+@0000109E 00000000
+@0000109F 00000000
+@000010A0 00000000
+@000010A1 00000000
+@000010A2 00000000
+@000010A3 00000000
+@000010A4 00000000
+@000010A5 00000000
+@000010A6 00000000
+@000010A7 00000000
+@000010A8 00000000
+@000010A9 00000000
+@000010AA 00000000
+@000010AB 00000000
+@000010AC 00000000
+@000010AD 00000000
+@000010AE 00000000
+@000010AF 00000000
+@000010B0 00000000
+@000010B1 00000000
+@000010B2 00000000
+@000010B3 00000000
+@000010B4 00000000
+@000010B5 00000000
+@000010B6 00000000
+@000010B7 00000000
+@000010B8 00000000
+@000010B9 00000000
+@000010BA 00000000
+@000010BB 00000000
+@000010BC 00000000
+@000010BD 00000000
+@000010BE 00000000
+@000010BF 00000000
+@000010C0 00000000
+@000010C1 00000000
+@000010C2 00000000
+@000010C3 00000000
+@000010C4 00000000
+@000010C5 00000000
+@000010C6 00000000
+@000010C7 00000000
+@000010C8 00000000
+@000010C9 00000000
+@000010CA 00000000
+@000010CB 00000000
+@000010CC 00000000
+@000010CD 00000000
+@000010CE 00000000
+@000010CF 00000000
+@000010D0 00000000
+@000010D1 00000000
+@000010D2 00000000
+@000010D3 00000000
+@000010D4 00000000
+@000010D5 00000000
+@000010D6 00000000
+@000010D7 00000000
+@000010D8 00000000
+@000010D9 00000000
+@000010DA 00000000
+@000010DB 00000000
+@000010DC 00000000
+@000010DD 00000000
+@000010DE 00000000
+@000010DF 00000000
+@000010E0 00000000
+@000010E1 00000000
+@000010E2 00000000
+@000010E3 00000000
+@000010E4 00000000
+@000010E5 00000000
+@000010E6 00000000
+@000010E7 00000000
+@000010E8 00000000
+@000010E9 00000000
+@000010EA 00000000
+@000010EB 00000000
+@000010EC 00000000
+@000010ED 00000000
+@000010EE 00000000
+@000010EF 00000000
+@000010F0 00000000
+@000010F1 00000000
+@000010F2 00000000
+@000010F3 00000000
+@000010F4 00000000
+@000010F5 00000000
+@000010F6 00000000
+@000010F7 00000000
+@000010F8 00000000
+@000010F9 00000000
+@000010FA 00000000
+@000010FB 00000000
+@000010FC 00000000
+@000010FD 00000000
+@000010FE 00000000
+@000010FF 00000000
+@00001100 00000000
+@00001101 00000000
+@00001102 00000000
+@00001103 00000000
+@00001104 00000000
+@00001105 00000000
+@00001106 00000000
+@00001107 00000000
+@00001108 00000000
+@00001109 00000000
+@0000110A 00000000
+@0000110B 00000000
+@0000110C 00000000
+@0000110D 00000000
+@0000110E 00000000
+@0000110F 00000000
+@00001110 00000000
+@00001111 00000000
+@00001112 00000000
+@00001113 00000000
+@00001114 00000000
+@00001115 00000000
+@00001116 00000000
+@00001117 00000000
+@00001118 00000000
+@00001119 00000000
+@0000111A 00000000
+@0000111B 00000000
+@0000111C 00000000
+@0000111D 00000000
+@0000111E 00000000
+@0000111F 00000000
+@00001120 00000000
+@00001121 00000000
+@00001122 00000000
+@00001123 00000000
+@00001124 00000000
+@00001125 00000000
+@00001126 00000000
+@00001127 00000000
+@00001128 00000000
+@00001129 00000000
+@0000112A 00000000
+@0000112B 00000000
+@0000112C 00000000
+@0000112D 00000000
+@0000112E 00000000
+@0000112F 00000000
+@00001130 00000000
+@00001131 00000000
+@00001132 00000000
+@00001133 00000000
+@00001134 00000000
+@00001135 00000000
+@00001136 00000000
+@00001137 00000000
+@00001138 00000000
+@00001139 00000000
+@0000113A 00000000
+@0000113B 00000000
+@0000113C 00000000
+@0000113D 00000000
+@0000113E 00000000
+@0000113F 00000000
+@00001140 00000000
+@00001141 00000000
+@00001142 00000000
+@00001143 00000000
+@00001144 00000000
+@00001145 00000000
+@00001146 00000000
+@00001147 00000000
+@00001148 00000000
+@00001149 00000000
+@0000114A 00000000
+@0000114B 00000000
+@0000114C 00000000
+@0000114D 00000000
+@0000114E 00000000
+@0000114F 00000000
+@00001150 00000000
+@00001151 00000000
+@00001152 00000000
+@00001153 00000000
+@00001154 00000000
+@00001155 00000000
+@00001156 00000000
+@00001157 00000000
+@00001158 00000000
+@00001159 00000000
+@0000115A 00000000
+@0000115B 00000000
+@0000115C 00000000
+@0000115D 00000000
+@0000115E 00000000
+@0000115F 00000000
+@00001160 00000000
+@00001161 00000000
+@00001162 00000000
+@00001163 00000000
+@00001164 00000000
+@00001165 00000000
+@00001166 00000000
+@00001167 00000000
+@00001168 00000000
+@00001169 00000000
+@0000116A 00000000
+@0000116B 00000000
+@0000116C 00000000
+@0000116D 00000000
+@0000116E 00000000
+@0000116F 00000000
+@00001170 00000000
+@00001171 00000000
+@00001172 00000000
+@00001173 00000000
+@00001174 00000000
+@00001175 00000000
+@00001176 00000000
+@00001177 00000000
+@00001178 00000000
+@00001179 00000000
+@0000117A 00000000
+@0000117B 00000000
+@0000117C 00000000
+@0000117D 00000000
+@0000117E 00000000
+@0000117F 00000000
+@00001180 00000000
+@00001181 00000000
+@00001182 00000000
+@00001183 00000000
+@00001184 00000000
+@00001185 00000000
+@00001186 00000000
+@00001187 00000000
+@00001188 00000000
+@00001189 00000000
+@0000118A 00000000
+@0000118B 00000000
+@0000118C 00000000
+@0000118D 00000000
+@0000118E 00000000
+@0000118F 00000000
+@00001190 00000000
+@00001191 00000000
+@00001192 00000000
+@00001193 00000000
+@00001194 00000000
+@00001195 00000000
+@00001196 00000000
+@00001197 00000000
+@00001198 00000000
+@00001199 00000000
+@0000119A 00000000
+@0000119B 00000000
+@0000119C 00000000
+@0000119D 00000000
+@0000119E 00000000
+@0000119F 00000000
+@000011A0 00000000
+@000011A1 00000000
+@000011A2 00000000
+@000011A3 00000000
+@000011A4 00000000
+@000011A5 00000000
+@000011A6 00000000
+@000011A7 00000000
+@000011A8 00000000
+@000011A9 00000000
+@000011AA 00000000
+@000011AB 00000000
+@000011AC 00000000
+@000011AD 00000000
+@000011AE 00000000
+@000011AF 00000000
+@000011B0 00000000
+@000011B1 00000000
+@000011B2 00000000
+@000011B3 00000000
+@000011B4 00000000
+@000011B5 00000000
+@000011B6 00000000
+@000011B7 00000000
+@000011B8 00000000
+@000011B9 00000000
+@000011BA 00000000
+@000011BB 00000000
+@000011BC 00000000
+@000011BD 00000000
+@000011BE 00000000
+@000011BF 00000000
+@000011C0 00000000
+@000011C1 00000000
+@000011C2 00000000
+@000011C3 00000000
+@000011C4 00000000
+@000011C5 00000000
+@000011C6 00000000
+@000011C7 00000000
+@000011C8 00000000
+@000011C9 00000000
+@000011CA 00000000
+@000011CB 00000000
+@000011CC 00000000
+@000011CD 00000000
+@000011CE 00000000
+@000011CF 00000000
+@000011D0 00000000
+@000011D1 00000000
+@000011D2 00000000
+@000011D3 00000000
+@000011D4 00000000
+@000011D5 00000000
+@000011D6 00000000
+@000011D7 00000000
+@000011D8 00000000
+@000011D9 00000000
+@000011DA 00000000
+@000011DB 00000000
+@000011DC 00000000
+@000011DD 00000000
+@000011DE 00000000
+@000011DF 00000000
+@000011E0 00000000
+@000011E1 00000000
+@000011E2 00000000
+@000011E3 00000000
+@000011E4 00000000
+@000011E5 00000000
+@000011E6 00000000
+@000011E7 00000000
+@000011E8 00000000
+@000011E9 00000000
+@000011EA 00000000
+@000011EB 00000000
+@000011EC 00000000
+@000011ED 00000000
+@000011EE 00000000
+@000011EF 00000000
+@000011F0 00000000
+@000011F1 00000000
+@000011F2 00000000
+@000011F3 00000000
+@000011F4 00000000
+@000011F5 00000000
+@000011F6 00000000
+@000011F7 00000000
+@000011F8 00000000
+@000011F9 00000000
+@000011FA 00000000
+@000011FB 00000000
+@000011FC 00000000
+@000011FD 00000000
+@000011FE 00000000
+@000011FF 00000000
+@00001200 00000000
+@00001201 00000000
+@00001202 00000000
+@00001203 00000000
+@00001204 00000000
+@00001205 00000000
+@00001206 00000000
+@00001207 00000000
+@00001208 00000000
+@00001209 00000000
+@0000120A 00000000
+@0000120B 00000000
+@0000120C 00000000
+@0000120D 00000000
+@0000120E 00000000
+@0000120F 00000000
+@00001210 00000000
+@00001211 00000000
+@00001212 00000000
+@00001213 00000000
+@00001214 00000000
+@00001215 00004E44
+@00001216 00004E44
+@00001217 00003794
+@00001218 00000000
+@00001219 00000000
+@0000121A 00000000
+@0000121B 00001CA8
+@0000121C 00000000
+@0000121D 00000000
+@0000121E 00000000
+@0000121F 00004854
+@00001220 00000000
+@00001221 00000000
+@00001222 00004854
+@00001223 00000000
+@00001224 00000000
+@00001225 00004854
+@00001226 00000000
+@00001227 00000000
+@00001228 00000000
+@00001229 00000000
+@0000122A 00000000
+@0000122B 00000000
+@0000122C 00000000
+@0000122D 00000000
+@0000122E 00000000
+@0000122F 00000000
+@00001230 00000000
+@00001231 00000000
+@00001232 00000000
+@00001233 00000000
+@00001234 00000000
+@00001235 00000000
+@00001236 00000000
+@00001237 00000000
+@00001238 00000000
+@00001239 00000000
+@0000123A 00000000
+@0000123B 00000000
+@0000123C 00000000
+@0000123D 00000000
+@0000123E 00000000
+@0000123F 00000000
+@00001240 00000000
+@00001241 00000000
+@00001242 00000000
+@00001243 00000000
+@00001244 00000000
+@00001245 00000000
+@00001246 00000000
+@00001247 00000000
+@00001248 00000000
+@00001249 00000000
+@0000124A 00000000
+@0000124B 00000000
+@0000124C 00000000
+@0000124D 00000000
+@0000124E 00000000
+@0000124F 00000000
+@00001250 00000000
+@00001251 00000000
+@00001252 00000000
+@00001253 00000000
+@00001254 00000000
+@00001255 00000000
+@00001256 00000000
+@00001257 00000000
+@00001258 00000000
+@00001259 00000000
+@0000125A 00000000
+@0000125B 00000000
+@0000125C 00000000
+@0000125D 00000000
+@0000125E 00000000
+@0000125F 00000000
+@00001260 00000000
+@00001261 00000000
+@00001262 00000000
+@00001263 00000000
+@00001264 00000000
+@00001265 00000000
+@00001266 00000000
+@00001267 00000000
+@00001268 00000000
+@00001269 00000000
+@0000126A 00000000
+@0000126B 00000000
+@0000126C 00000000
+@0000126D 00000000
+@0000126E 00000000
+@0000126F 00000000
+@00001270 00000000
+@00001271 00000000
+@00001272 00000000
+@00001273 00000000
+@00001274 00000000
+@00001275 00000000
+@00001276 00000000
+@00001277 00000000
+@00001278 00000000
+@00001279 00000000
+@0000127A 00000000
+@0000127B 00000000
+@0000127C 00000000
+@0000127D 00000000
+@0000127E 00000000
+@0000127F 00000000
+@00001280 00000000
+@00001281 00000000
+@00001282 00000000
+@00001283 00000000
+@00001284 00000000
+@00001285 00000000
+@00001286 00000000
+@00001287 00000000
+@00001288 00000000
+@00001289 00000000
+@0000128A 00000000
+@0000128B 00004A24
+@0000128C 00004A24
+@0000128D 00004A2C
+@0000128E 00004A2C
+@0000128F 00004A34
+@00001290 00004A34
+@00001291 00004A3C
+@00001292 00004A3C
+@00001293 00004A44
+@00001294 00004A44
+@00001295 00004A4C
+@00001296 00004A4C
+@00001297 00004A54
+@00001298 00004A54
+@00001299 00004A5C
+@0000129A 00004A5C
+@0000129B 00004A64
+@0000129C 00004A64
+@0000129D 00004A6C
+@0000129E 00004A6C
+@0000129F 00004A74
+@000012A0 00004A74
+@000012A1 00004A7C
+@000012A2 00004A7C
+@000012A3 00004A84
+@000012A4 00004A84
+@000012A5 00004A8C
+@000012A6 00004A8C
+@000012A7 00004A94
+@000012A8 00004A94
+@000012A9 00004A9C
+@000012AA 00004A9C
+@000012AB 00004AA4
+@000012AC 00004AA4
+@000012AD 00004AAC
+@000012AE 00004AAC
+@000012AF 00004AB4
+@000012B0 00004AB4
+@000012B1 00004ABC
+@000012B2 00004ABC
+@000012B3 00004AC4
+@000012B4 00004AC4
+@000012B5 00004ACC
+@000012B6 00004ACC
+@000012B7 00004AD4
+@000012B8 00004AD4
+@000012B9 00004ADC
+@000012BA 00004ADC
+@000012BB 00004AE4
+@000012BC 00004AE4
+@000012BD 00004AEC
+@000012BE 00004AEC
+@000012BF 00004AF4
+@000012C0 00004AF4
+@000012C1 00004AFC
+@000012C2 00004AFC
+@000012C3 00004B04
+@000012C4 00004B04
+@000012C5 00004B0C
+@000012C6 00004B0C
+@000012C7 00004B14
+@000012C8 00004B14
+@000012C9 00004B1C
+@000012CA 00004B1C
+@000012CB 00004B24
+@000012CC 00004B24
+@000012CD 00004B2C
+@000012CE 00004B2C
+@000012CF 00004B34
+@000012D0 00004B34
+@000012D1 00004B3C
+@000012D2 00004B3C
+@000012D3 00004B44
+@000012D4 00004B44
+@000012D5 00004B4C
+@000012D6 00004B4C
+@000012D7 00004B54
+@000012D8 00004B54
+@000012D9 00004B5C
+@000012DA 00004B5C
+@000012DB 00004B64
+@000012DC 00004B64
+@000012DD 00004B6C
+@000012DE 00004B6C
+@000012DF 00004B74
+@000012E0 00004B74
+@000012E1 00004B7C
+@000012E2 00004B7C
+@000012E3 00004B84
+@000012E4 00004B84
+@000012E5 00004B8C
+@000012E6 00004B8C
+@000012E7 00004B94
+@000012E8 00004B94
+@000012E9 00004B9C
+@000012EA 00004B9C
+@000012EB 00004BA4
+@000012EC 00004BA4
+@000012ED 00004BAC
+@000012EE 00004BAC
+@000012EF 00004BB4
+@000012F0 00004BB4
+@000012F1 00004BBC
+@000012F2 00004BBC
+@000012F3 00004BC4
+@000012F4 00004BC4
+@000012F5 00004BCC
+@000012F6 00004BCC
+@000012F7 00004BD4
+@000012F8 00004BD4
+@000012F9 00004BDC
+@000012FA 00004BDC
+@000012FB 00004BE4
+@000012FC 00004BE4
+@000012FD 00004BEC
+@000012FE 00004BEC
+@000012FF 00004BF4
+@00001300 00004BF4
+@00001301 00004BFC
+@00001302 00004BFC
+@00001303 00004C04
+@00001304 00004C04
+@00001305 00004C0C
+@00001306 00004C0C
+@00001307 00004C14
+@00001308 00004C14
+@00001309 00004C1C
+@0000130A 00004C1C
+@0000130B 00004C24
+@0000130C 00004C24
+@0000130D 00004C2C
+@0000130E 00004C2C
+@0000130F 00004C34
+@00001310 00004C34
+@00001311 00004C3C
+@00001312 00004C3C
+@00001313 00004C44
+@00001314 00004C44
+@00001315 00004C4C
+@00001316 00004C4C
+@00001317 00004C54
+@00001318 00004C54
+@00001319 00004C5C
+@0000131A 00004C5C
+@0000131B 00004C64
+@0000131C 00004C64
+@0000131D 00004C6C
+@0000131E 00004C6C
+@0000131F 00004C74
+@00001320 00004C74
+@00001321 00004C7C
+@00001322 00004C7C
+@00001323 00004C84
+@00001324 00004C84
+@00001325 00004C8C
+@00001326 00004C8C
+@00001327 00004C94
+@00001328 00004C94
+@00001329 00004C9C
+@0000132A 00004C9C
+@0000132B 00004CA4
+@0000132C 00004CA4
+@0000132D 00004CAC
+@0000132E 00004CAC
+@0000132F 00004CB4
+@00001330 00004CB4
+@00001331 00004CBC
+@00001332 00004CBC
+@00001333 00004CC4
+@00001334 00004CC4
+@00001335 00004CCC
+@00001336 00004CCC
+@00001337 00004CD4
+@00001338 00004CD4
+@00001339 00004CDC
+@0000133A 00004CDC
+@0000133B 00004CE4
+@0000133C 00004CE4
+@0000133D 00004CEC
+@0000133E 00004CEC
+@0000133F 00004CF4
+@00001340 00004CF4
+@00001341 00004CFC
+@00001342 00004CFC
+@00001343 00004D04
+@00001344 00004D04
+@00001345 00004D0C
+@00001346 00004D0C
+@00001347 00004D14
+@00001348 00004D14
+@00001349 00004D1C
+@0000134A 00004D1C
+@0000134B 00004D24
+@0000134C 00004D24
+@0000134D 00004D2C
+@0000134E 00004D2C
+@0000134F 00004D34
+@00001350 00004D34
+@00001351 00004D3C
+@00001352 00004D3C
+@00001353 00004D44
+@00001354 00004D44
+@00001355 00004D4C
+@00001356 00004D4C
+@00001357 00004D54
+@00001358 00004D54
+@00001359 00004D5C
+@0000135A 00004D5C
+@0000135B 00004D64
+@0000135C 00004D64
+@0000135D 00004D6C
+@0000135E 00004D6C
+@0000135F 00004D74
+@00001360 00004D74
+@00001361 00004D7C
+@00001362 00004D7C
+@00001363 00004D84
+@00001364 00004D84
+@00001365 00004D8C
+@00001366 00004D8C
+@00001367 00004D94
+@00001368 00004D94
+@00001369 00004D9C
+@0000136A 00004D9C
+@0000136B 00004DA4
+@0000136C 00004DA4
+@0000136D 00004DAC
+@0000136E 00004DAC
+@0000136F 00004DB4
+@00001370 00004DB4
+@00001371 00004DBC
+@00001372 00004DBC
+@00001373 00004DC4
+@00001374 00004DC4
+@00001375 00004DCC
+@00001376 00004DCC
+@00001377 00004DD4
+@00001378 00004DD4
+@00001379 00004DDC
+@0000137A 00004DDC
+@0000137B 00004DE4
+@0000137C 00004DE4
+@0000137D 00004DEC
+@0000137E 00004DEC
+@0000137F 00004DF4
+@00001380 00004DF4
+@00001381 00004DFC
+@00001382 00004DFC
+@00001383 00004E04
+@00001384 00004E04
+@00001385 00004E0C
+@00001386 00004E0C
+@00001387 00004E14
+@00001388 00004E14
+@00001389 00004E1C
+@0000138A 00004E1C
+@0000138B 000037A0
+@0000138C 00000000
+@0000138D 00000000
+@0000138E 00000000
+@0000138F 00004E3C
+@00001390 00004E3C
+@00001391 00004854
+@00001392 00004854
+@00001393 FFFFFFFF
+@00001394 00000000
+@00001395 00000000
+@00001396 FFFFFFFF
+@00001397 00000000
+@00001398 00000000
+@00001399 00004E64
+@0000139A 00004E64
+@0000139B 00000000
+@0000139C 00000000
+@0000139D FFFFFFFF
+@0000139E 00000000
+@0000139F 00020000
+@000013A0 000050A0
Index: sdram_ctrl/trunk/doc/readme.txt
===================================================================
--- sdram_ctrl/trunk/doc/readme.txt (nonexistent)
+++ sdram_ctrl/trunk/doc/readme.txt (revision 8)
@@ -0,0 +1 @@
+Please look up inside the source.
\ No newline at end of file
Index: sdram_ctrl/trunk/doc/sdram_ctrl.sxw
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: sdram_ctrl/trunk/doc/sdram_ctrl.sxw
===================================================================
--- sdram_ctrl/trunk/doc/sdram_ctrl.sxw (nonexistent)
+++ sdram_ctrl/trunk/doc/sdram_ctrl.sxw (revision 8)
direction: output
signal type: export"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_sdram_ba/width = (int((( ( $H/bank_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_sdram_ba/width = "$"; - } - warning = "{{ if($PORT_sdram_ba/width <= 0)('width of sdram_ba must be greater than zero' ) }}"; - } - EDIT sdram_addr_width - { - id = "sdram_addr_width"; - editable = "0"; - title = "sdram_addr[((row_width - 1)) - (0) + 1]:"; - tooltip = "sdram_addr[((row_width - 1)) - (0) + 1]
direction: output
signal type: export"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_sdram_addr/width = (int((( ( $H/row_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_sdram_addr/width = "$"; - } - warning = "{{ if($PORT_sdram_addr/width <= 0)('width of sdram_addr must be greater than zero' ) }}"; - } - EDIT sdram_dq_width - { - id = "sdram_dq_width"; - editable = "0"; - title = "sdram_dq[((data_width - 1)) - (0) + 1]:"; - tooltip = "sdram_dq[((data_width - 1)) - (0) + 1]
direction: inout
signal type: export"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_sdram_dq/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_sdram_dq/width = "$"; - } - warning = "{{ if($PORT_sdram_dq/width <= 0)('width of sdram_dq must be greater than zero' ) }}"; - } - EDIT sdram_dqm_width - { - id = "sdram_dqm_width"; - editable = "0"; - title = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]:"; - tooltip = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]
direction: output
signal type: export"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_sdram_dqm/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_sdram_dqm/width = "$"; - } - warning = "{{ if($PORT_sdram_dqm/width <= 0)('width of sdram_dqm must be greater than zero' ) }}"; - } - EDIT avs_nios_address_width - { - id = "avs_nios_address_width"; - editable = "0"; - title = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]:"; - tooltip = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]
direction: input
signal type: address"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_avs_nios_address/width = (int((((( ( $H/bank_width ) + ( $H/row_width ) ) + ( $H/column_width ) ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - dummy_dummy = "{{ $SBI_nios/Address_Width = $PORT_avs_nios_address/width; }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_avs_nios_address/width = "$"; - } - warning = "{{ if($PORT_avs_nios_address/width <= 0)('width of avs_nios_address must be greater than zero' ) }}"; - } - EDIT avs_nios_byteenable_width - { - id = "avs_nios_byteenable_width"; - editable = "0"; - title = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]:"; - tooltip = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]
direction: input
signal type: byteenable"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_avs_nios_byteenable/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_avs_nios_byteenable/width = "$"; - } - warning = "{{ if($PORT_avs_nios_byteenable/width <= 0)('width of avs_nios_byteenable must be greater than zero' ) }}"; - } - EDIT avs_nios_writedata_width - { - id = "avs_nios_writedata_width"; - editable = "0"; - title = "avs_nios_writedata[((data_width - 1)) - (0) + 1]:"; - tooltip = "avs_nios_writedata[((data_width - 1)) - (0) + 1]
direction: input
signal type: writedata"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_avs_nios_writedata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_writedata/width - 1) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_avs_nios_writedata/width = "$"; - } - warning = "{{ if($PORT_avs_nios_writedata/width <= 0)('width of avs_nios_writedata must be greater than zero' ) }}"; - } - EDIT avs_nios_readdata_width - { - id = "avs_nios_readdata_width"; - editable = "0"; - title = "avs_nios_readdata[((data_width - 1)) - (0) + 1]:"; - tooltip = "avs_nios_readdata[((data_width - 1)) - (0) + 1]
direction: output
signal type: readdata"; - # This expression should emulate the HDL, and assign the port width - dummy = "{{ $PORT_avs_nios_readdata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; - dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_readdata/width - 1) + 1); }}"; - DATA - { - # The EDIT field is noneditable, so this just reads the current width. - $PORT_avs_nios_readdata/width = "$"; - } - warning = "{{ if($PORT_avs_nios_readdata/width <= 0)('width of avs_nios_readdata must be greater than zero' ) }}"; - } - } - } - } - } - } - SOPC_Builder_Version = "5.10"; - COMPONENT_BUILDER - { - HDL_PARAMETERS - { - # generated by CBDocument.getParameterContainer - # used only by Component Editor - HDL_PARAMETER data_width - { - parameter_name = "data_width"; - type = "integer"; - default_value = "32"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER bank_width - { - parameter_name = "bank_width"; - type = "integer"; - default_value = "4"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER row_width - { - parameter_name = "row_width"; - type = "integer"; - default_value = "12"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER column_width - { - parameter_name = "column_width"; - type = "integer"; - default_value = "8"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER clk_mhz - { - parameter_name = "clk_mhz"; - type = "integer"; - default_value = "120"; - editable = "1"; - tooltip = ""; - } - } - SW_FILES - { - } - built_on = "2006.09.25.10:24:12"; - CACHED_HDL_INFO - { - # cached hdl info, emitted by CBFrameRealtime.getDocumentCachedHDLInfoSection - # used only by Component Builder - FILE sdram_ctrl.vhd - { - file_mod = "Mon Sep 18 18:08:50 EEST 2006"; - quartus_map_start = "Mon Sep 25 10:22:36 EEST 2006"; - quartus_map_finished = "Mon Sep 25 10:22:58 EEST 2006"; - #found 1 valid modules - WRAPPER sdram_ctrl - { - CLASS sdram_ctrl - { - CB_GENERATOR - { - HDL_FILES - { - FILE - { - use_in_simulation = "1"; - use_in_synthesis = "1"; - filepath = "H:/Work/Home_stuff/opencores/sdram_ctrl/src/sdram_ctrl.vhd"; - } - } - top_module_name = "sdram_ctrl"; - emit_system_h = "0"; - LIBRARIES - { - library = "ieee.std_logic_1164.all"; - library = "ieee.numeric_std.all"; - library = "altera_mf.altera_mf_components.all"; - library = "std.standard.all"; - } - } - MODULE_DEFAULTS global_signals - { - class = "sdram_ctrl"; - class_version = "1.0"; - SYSTEM_BUILDER_INFO - { - Instantiate_In_System_Module = "1"; - } - SLAVE nios - { - SYSTEM_BUILDER_INFO - { - Bus_Type = "avalon"; - } - PORT_WIRING - { - PORT avs_nios_chipselect - { - width = "1"; - width_expression = ""; - direction = "input"; - type = "chipselect"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_address - { - width = "-1"; - width_expression = "((((bank_width + row_width) + column_width) - 1)) - (0) + 1"; - direction = "input"; - type = "address"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_byteenable - { - width = "-1"; - width_expression = "(((data_width / 8) - 1)) - (0) + 1"; - direction = "input"; - type = "byteenable"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_writedata - { - width = "-1"; - width_expression = "((data_width - 1)) - (0) + 1"; - direction = "input"; - type = "writedata"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_write - { - width = "1"; - width_expression = ""; - direction = "input"; - type = "write"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_read - { - width = "1"; - width_expression = ""; - direction = "input"; - type = "read"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_waitrequest - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "waitrequest"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_readdata - { - width = "-1"; - width_expression = "((data_width - 1)) - (0) + 1"; - direction = "output"; - type = "readdata"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT avs_nios_readdatavalid - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "readdatavalid"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - } - } - SLAVE avalon_slave_0 - { - SYSTEM_BUILDER_INFO - { - Bus_Type = "avalon"; - } - PORT_WIRING - { - PORT sdram_cke - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_ba - { - width = "-1"; - width_expression = "((bank_width - 1)) - (0) + 1"; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_addr - { - width = "-1"; - width_expression = "((row_width - 1)) - (0) + 1"; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_cs_n - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_ras_n - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_cas_n - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_we_n - { - width = "1"; - width_expression = ""; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_dq - { - width = "-1"; - width_expression = "((data_width - 1)) - (0) + 1"; - direction = "inout"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT sdram_dqm - { - width = "-1"; - width_expression = "(((data_width / 8) - 1)) - (0) + 1"; - direction = "output"; - type = "export"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - } - } - PORT_WIRING - { - PORT clk - { - width = "1"; - width_expression = ""; - direction = "input"; - type = "clk"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - PORT reset - { - width = "1"; - width_expression = ""; - direction = "input"; - type = "reset"; - is_shared = "0"; - vhdl_record_name = ""; - vhdl_record_type = ""; - } - } - } - USER_INTERFACE - { - USER_LABELS - { - name = "sdram_ctrl"; - technology = "imported components"; - } - } - SOPC_Builder_Version = "0.0"; - COMPONENT_BUILDER - { - HDL_PARAMETERS - { - # generated by CBDocument.getParameterContainer - # used only by Component Editor - HDL_PARAMETER data_width - { - parameter_name = "data_width"; - type = "integer"; - default_value = "32"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER bank_width - { - parameter_name = "bank_width"; - type = "integer"; - default_value = "4"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER row_width - { - parameter_name = "row_width"; - type = "integer"; - default_value = "12"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER column_width - { - parameter_name = "column_width"; - type = "integer"; - default_value = "8"; - editable = "1"; - tooltip = ""; - } - HDL_PARAMETER clk_mhz - { - parameter_name = "clk_mhz"; - type = "integer"; - default_value = "120"; - editable = "1"; - tooltip = ""; - } - } - } - } - } - } - } - } - ASSOCIATED_FILES - { - Add_Program = "the_wizard_ui"; - Edit_Program = "the_wizard_ui"; - Generator_Program = "cb_generator.pl"; - } -} Index: trunk/syn/sdram_ctrl/cb_generator.pl =================================================================== --- trunk/syn/sdram_ctrl/cb_generator.pl (revision 7) +++ trunk/syn/sdram_ctrl/cb_generator.pl (nonexistent) @@ -1,1159 +0,0 @@ -# | file: cb_generator.pl -# | -# | This SOPC Builder Generator program is provided by -# | the Component Builder application. It is copied -# | straight across and is data-driven from its command -# | line arguments and the PTF files referenced. -# | -# | Its purpose is to construct an HDL "wrapper" for -# | a particular instance of a particular SOPC Builder -# | peripheral. This wrapper resolves the instance -# | name and any HDL parameterization. -# | -# +------------------------------------------- - - - -# +------------------------------------------- -# | - -use strict; -use format_conversion_utils; -use ptf_parse; -use wiz_utils; -use europa_all; -use run_system_command_utils; - -# | -# +------------------------------------------- - - - -# +------------------------------------------- -# | -# | first pass: include all of generator_libarary.pm RIGHT HERE. -# | dvb04.08.02 -# | then prune down to actual functionality. -# | -# | TODO: Rewrite this whole file into something readable -# | this is much more confusing than I'm comfortable with. dvb04. -# | (though it does seem to work.) -# | - -my $DEBUG_DEFAULT_GEN = 1; - -#This is the global hash of arguments passed in by the generator program - -my $generator_hr = { - wrapper_args => { - make_wrapper => 0, - top_module_name => "", - simulate_hdl => 1, - ports => "", - }, - class_ptf_hr => "", - module_ptf_hr => "", - system_ptf_hr => "", - language => "", - external_args => "", - external_args_hr => "", - project_path_widget => "__PROJECT_DIRECTORY__", - generator_mode => "silent", - }; - - -sub generator_print_verbose -{ - my ($info) = (@_); - - if($generator_hr->{generator_mode} eq "verbose"){ - print("cb_generator.pl: ".$info); - } -} - -sub generator_enable_mode -{ - my ($mode) = (@_); - $generator_hr->{generator_mode} = $mode; -} - -sub generator_get_system_ptf_handle -{ - return $generator_hr->{system_ptf_hr}; -} - -sub generator_get_language -{ - return $generator_hr->{language}; -} - -sub generator_get_class_ptf_handle -{ - return $generator_hr->{class_ptf_hr}; -} - -sub default_ribbit -{ - my ($arg) = (@_); - &ribbit("\n\n--Error: default_gen_lib: $arg\n"); -} - - -sub _copy_files -{ - my ($dest_dir, $source_dir, @files) = (@_); - my $function_name; - - #validate args - &default_ribbit("No target dir for function copy_files!") - unless ($dest_dir ne ""); - - &default_ribbit("No source dir for function copy_files!") - unless ($source_dir ne ""); - - &default_ribbit("No files for function copy_files!") - unless (@files != 0); - - - #check for valid directories - opendir (SDIR, $source_dir) or - &default_ribbit("can't open $source_dir !"); - - opendir (DDIR, $dest_dir) or - &default_ribbit("can't open $dest_dir !"); - - - foreach my $source_file(@files){ - # | - # | Separate out the source subdir and the source filename - # | - my $source_subdir = ""; - my $source_filename = $source_file; - - if($source_filename =~ /^(.*)\/(.*)$/) # break on last slash - { - $source_subdir = "/$1"; # embed its leading slash, for concatty - $source_filename = $2; - } - - my $source_fullpath = "$source_dir$source_subdir/$source_filename"; - my $dest_fullpath = "$dest_dir/$source_filename"; - - &Perlcopy($source_fullpath, $dest_fullpath); - &generator_print_verbose("Copying file: \"$source_fullpath\"" - . " to \"$dest_fullpath\".\n"); - } - - closedir (SDIR); - closedir (DDIR); -} - - -sub get_module_wrapper_arg_hash_from_system_ptf_file -{ - my $module_ptf_hr = $generator_hr->{module_ptf_hr}; - - my @list_of_sections = ("MASTER","SLAVE","PORT_WIRING"); - my @port_list; - foreach my $section(@list_of_sections){ - my $number = get_child_count($module_ptf_hr, $section); - - for(my $initial=0; $initial < $number; $initial++){ - - my $interface_section = get_child($module_ptf_hr, $initial, $section); - my $interface_section_name = get_data($interface_section); - - my $port_wiring_section; - if($section ne "PORT_WIRING"){ - $port_wiring_section = - get_child_by_path($module_ptf_hr, $section." ".$interface_section_name."/PORT_WIRING"); - }else{ - $port_wiring_section = - get_child_by_path($module_ptf_hr, $section); - } - my $num_ports = get_child_count($port_wiring_section, "PORT"); - foreach(my $port_count = 0; $port_count < $num_ports; $port_count++){ - my $port = get_child($port_wiring_section, $port_count, "PORT"); - - my %port_info_struct; - $port_info_struct{name} = get_data($port); - $port_info_struct{direction} = get_data_by_path($port, "direction"); - $port_info_struct{width} = get_data_by_path($port, "width"); - $port_info_struct{vhdl_record_name} = get_data_by_path($port, "vhdl_record_name"); - $port_info_struct{vhdl_record_type} = get_data_by_path($port, "vhdl_record_type"); - - push(@port_list, \%port_info_struct); - - } - } - } - $generator_hr->{wrapper_args}{ports} = \@port_list; -} - - -sub generator_make_module_wrapper -{ - my ($simulate_hdl, $top_module_name, $module_language) = (@_); - - &default_ribbit("generator_make_module_wrapper: no arg0 passed in for simulate_hdl\n") - if($simulate_hdl eq ''); - - &default_ribbit("generator_make_module_wrapper: no arg1 passed in for top_module_name\n") - unless($top_module_name); - - $generator_hr->{wrapper_args}{simulate_hdl} = $simulate_hdl; - $generator_hr->{wrapper_args}{top_module_name} = $top_module_name; - $generator_hr->{wrapper_args}{make_wrapper} = 1; - $generator_hr->{wrapper_args}{module_language} = $module_language; - -} - - - - -# | -# | recognize varous number forms, -# | return 'h0123abcd-ish. -# | -sub turn_anything_into_appropriate_string($$$$) - { - my ($value,$type,$editable,$module_language) = (@_); - - return $value if($value =~ /^\"/); # quoted string: unscathed - return $value if($type eq "string"); # string: anything is ok - - return $value if(!$editable); # and you know, if you can't change it, keep it! - - - # | - # | first, convert to a number - # | - my $base = 10; - my $n = $value; - my $width = 32; - my $number = 0; - - $value = lc($value); # lower case - - if($value =~ /^([0-9]*)\'([hbo])(.*)$/) - { - # | tick notation: AOK for verilog - if($module_language eq "verilog") - { - $number = $value; - } - # | - # | note: at this point, we could notice if the - # | result should be vhdl binary, and convert - # | to that, avoiding the precision-losing - # | integer intermediary - # | - # | (alternatively, we could use a binary string - # | always as the intermediate form, rather than - # | a precision-losing int.) - # | - else - { - $width = $1; - my $baseletter = $2; - my $digits = $3; - - if($baseletter eq "h") - { - $base = 16; - } - elsif($baseletter eq "b") - { - $base = 2; - } - elsif($baseletter eq "o") # must be - { - $base = 8; - } - - $digits =~ s/[ _-]//g; # crush out dividing value - - while(length($digits) > 0) - { - my $digit = substr($digits,0,1); - $digits = substr($digits,1); - my $digitvalue = hex($digit); # how handy - $number = $number * $base + $digitvalue; - } - } - } - elsif($value =~ /^0x(.*)$/) - { - $number = hex($1); - } - else # try for decimal - { - $number = int(1 * $value); - } - - # | - # | ok, we have a number. If our target type - # | is "std_logic_vector(this downto that)" - # | for tricky VHDL, we - # | must quote a binary string out of it. - # | - - if(($module_language eq "vhdl") and ($type =~ /^.*\((\d+) downto (\d+)\).*$/)) - { - my ($high_bit,$low_bit) = ($1,$2); - my $binary = ""; - for(my $bit = $low_bit; $bit <= $high_bit; $bit++) - { - $binary = ($number % 2) . $binary; - $number = int($number >> 1); - } - - $number = '"' . $binary . '"'; - } - - return $number; - } - -# -# return @array of vhdl libraries, if any, from the class.ptf -sub get_libraries() -{ - my $class_ptf = generator_get_class_ptf_handle(); - my @libraries; - my $libraries_ptf = get_child_by_path($class_ptf,"CLASS/CB_GENERATOR/LIBRARIES"); - - if($libraries_ptf) - { - my $library_count = get_child_count($libraries_ptf,"library"); - for(my $i = 0; $i < $library_count; $i++) - { - my $library_ptf = get_child($libraries_ptf,$i,"library"); - my $library_name = get_data($library_ptf); - push(@libraries,$library_name); - } - } - - return @libraries; -} - - - -sub _generator_make_module_wrapper -{ - - my $wrapper_args = $generator_hr->{wrapper_args}; - my $no_black_box = $wrapper_args->{simulate_hdl}; - my $top_module_name = $wrapper_args->{top_module_name}; - my $language = $generator_hr->{language}; - my @external_args = @{$generator_hr->{external_args}}; - my $module_ptf_hr = $generator_hr->{module_ptf_hr}; - - ### Build Module - my $project = e_project->new(@external_args); - my $top = $project->top(); - - # add the ports to the system module - my @ports; - - foreach my $port_hash(@{$wrapper_args->{ports}}){ - my $porto = e_port->new({ - name => $port_hash->{name}, - width => $port_hash->{width}, - direction => $port_hash->{direction}, - vhdl_record_name => $port_hash->{vhdl_record_name}, - vhdl_record_type => $port_hash->{vhdl_record_type} - }); - push(@ports, $porto); - } - $top->add_contents(@ports); - - - - - - # +---------------------------------------- - # | Get parameters from class.ptf - # | create @array of parameters, eacho - # | one like name=>, default=>, type=>, - # | - # | These are the definitions of parameters for - # | ANY instance of this module; we need to - # | have them in the "wrapee" module so that - # | when the system bus is knitted together - # | the parameter types can be properly used. - # | - # | (as it turns out, verilog doesnt need - # | them, but vhld does) - # | - # | dvb2004 - - - my @e_hdl_parameters; # list of e_parameters - - my $class_ptf = generator_get_class_ptf_handle(); - my $hdl_parameter_definitions_ptf = get_child_by_path($class_ptf,"CLASS/COMPONENT_BUILDER/HDL_PARAMETERS"); - - my @libraries = get_libraries(); - - my $hdl_parameter_count = get_child_count($hdl_parameter_definitions_ptf,"HDL_PARAMETER"); - - my $module_language = $generator_hr->{wrapper_args}{module_language}; - - for(my $i = 0; $i < $hdl_parameter_count; $i++) - { - my $a_parameter = get_child($hdl_parameter_definitions_ptf,$i,"HDL_PARAMETER"); - my $parameter_editable = get_data_by_path($a_parameter,"editable"); - if($parameter_editable) - { - my $boring_name = get_data($a_parameter); # legal guinevere-ized - my $name = get_data_by_path($a_parameter,"parameter_name"); # original HDL name - my $default = get_data_by_path($a_parameter,"default_value"); - my $type = get_data_by_path($a_parameter,"type"); - - $default = turn_anything_into_appropriate_string($default,$type,1,$module_language); - - my $a_parameter = e_parameter->new - ({ - name => $name, - default => $default, - type => $type - }); - - push (@e_hdl_parameters,$a_parameter); - } - } - - - - # | and @e_hdl_parameters is used below in the wrapee module - # +-------------------------------------------- - - # +-------------------------------------------- - # | Now, we build a "hdl_parameter_map", which is just - # | your basic hash table with keys (parameters) - # | and values (parameter values). - # | - # | these are the particular values for this instance. - # | - - my %hdl_parameter_map; - my $module_ptf = $generator_hr->{module_ptf_hr}; - my $hdl_parameters_ptf = - get_child_by_path($module_ptf,"WIZARD_SCRIPT_ARGUMENTS/hdl_parameters"); - - my $child_count = get_child_count($hdl_parameters_ptf); - - for(my $i = 0; $i < $child_count; $i++) - { - my $a_parameter = get_child($hdl_parameters_ptf,$i); - - my $boring_name = get_name($a_parameter); - my $value = get_data($a_parameter); - - # refer back to the original HDL name... - my $parameter_definition_ptf = get_child_by_path($hdl_parameter_definitions_ptf,"HDL_PARAMETER $boring_name"); - my $parameter_name = get_data_by_path($parameter_definition_ptf,"parameter_name"); - my $parameter_type = get_data_by_path($parameter_definition_ptf,"type"); - my $parameter_editable = get_data_by_path($parameter_definition_ptf,"editable"); - - $value = turn_anything_into_appropriate_string($value,$parameter_type,$parameter_editable,$module_language); - - # | - # | our internal _dummy assignment shows up here - # | without a corresponding hdl entry. we - # | ignore it. - # | - - if(($parameter_name ne "") and $parameter_editable) - { - $hdl_parameter_map{$parameter_name} = $value; - } - } - - my $wrapee_module; - $wrapee_module = e_module->new({ - name => $top_module_name, - contents => [@ports,@e_hdl_parameters], - do_black_box => 0, - do_ptf => 0, - _hdl_generated => 1, - _explicitly_empty_module => 1, - }); - - # VHDL Libraries, from PTF file... - $wrapee_module->add_vhdl_libraries(@libraries); - $top->add_vhdl_libraries(@libraries); - - - $top->add_contents ( - e_instance->new({ - module => $wrapee_module, - parameter_map => \%hdl_parameter_map - }), - ); - - $project->top()->do_ptf(0); - $project->do_write_ptf(0); - - - my $module_file = $project->_target_module_name().".v"; - $module_file = $project->_target_module_name().".vhd" - if($language eq "vhdl"); - - $module_file = $generator_hr->{project_path_widget}."/".$module_file; - &generator_set_files_in_system_ptf("Synthesis_HDL_Files", ($module_file)); - $project->output(); - - - # if you don't want a simulation model, you don't get a simulation model - if($no_black_box eq "0") - { - my $black_project = e_project->new(@external_args); - $black_project->_target_module_name($top_module_name); - my $black_top = $black_project->top(); - - - - $black_top->add_contents(@ports); - my $black_top_instance; - $black_top_instance = e_module->new({ - name => $wrapper_args->{top_module_name}."_bb", - contents => [@ports], - do_black_box => 1, - do_ptf => 0, - _hdl_generated => 0, - _explicitly_empty_module => 1, - }); - - $black_top->add_contents ( - e_instance->new({ - module => $black_top_instance, - }), - ); - - - - - $black_project->top()->do_ptf(0); - $black_project->do_write_ptf(0); - - my $black_module_file = $black_project->_target_module_name().".v"; - $black_module_file = $black_project->_target_module_name().".vhd" - if($language eq "vhdl"); - - - $black_module_file = $generator_hr->{project_path_widget}."/".$black_module_file; - &generator_set_files_in_system_ptf("Simulation_HDL_Files", ($black_module_file)); - -# &set_data_by_path($module_ptf_hr, "HDL_INFO/Simulation_HDL_Files", $black_module_file); - - - $black_project->output(); - } - -} - -#### -# Args: $file_type : "synthesis", "synthesis_only", "simulation" -# @file_list : an array of files. This list of files is assumed to be relative to the -# component's directory - - -my $decoder_ring_hr = { - quartus_only => { - copy => 1, - copy_to => "project", - ptf_set => 0, - }, - simulation_only => { - copy => 1, - copy_to => "simulation", - ptf_set => 1, - ptf_section => "Simulation_HDL_Files", - }, - simulation_and_quartus => { - copy => 1, - copy_to => "project", - ptf_set => 1, - ptf_section => "Synthesis_HDL_Files", - }, - precompiled_simulation_files => { - copy => 0, - ptf_set => 1, - ptf_section => "Precompiled_Simulation_Library_Files", - }, - }; - - - - -sub generator_copy_files_and_set_system_ptf -{ - my ($hdl_section, @file_list) = (@_); - - my $ptf_path_prefix = ""; - my $external_args_hr = $generator_hr->{external_args_hr}; - my @new_file_array; - - #validate first - my $decoder_hash = $decoder_ring_hr->{$hdl_section}; - &default_ribbit("generator_copy_files_and_set_system_ptf: No understood HDL section passed in for first arg\n") - unless($decoder_ring_hr->{$hdl_section} ne ""); - - &generator_print_verbose("generator_copy_files_and_set_system_ptf: copying files for section ".$hdl_section."\n"); - - #copy second - my @new_file_array; - - # If we need to copy over some files, then we need to make sure we are - # keeping track of what files we copy over. - # Otherwise, we just need to keep track of the files that the user has asked to copy over - # and use these instead. - if($decoder_hash->{copy}){ - my $copy_to_location; - my $copy_from_location; - - if($decoder_hash->{copy_to} eq "project"){ - $copy_to_location = $external_args_hr->{system_directory}; - }elsif($decoder_hash->{copy_to} eq "simulation"){ - $copy_to_location = $external_args_hr->{system_sim_dir}; - }else{ - &default_ribbit("generator_copy_files_and_set_system_ptf: No understood copy files to location\n"); - } - - $copy_from_location = $external_args_hr->{class_directory}; - @new_file_array = &generator_copy_files($copy_to_location, $copy_from_location, @file_list); - }else{ - @new_file_array = @file_list; - } - - #scribble on PTF hash last - if($decoder_hash->{ptf_set}){ - - if($decoder_hash->{copy_to} eq "project"){ - foreach my $file(@new_file_array){ - $file =~ s/^.*\/(.*?)$/$1/; - $file = $generator_hr->{project_path_widget}."/".$file; - } - } - &generator_print_verbose("generator_copy_files_and_set_system_ptf: setting system PTF file in section ".$hdl_section."\n"); - if($decoder_hash->{ptf_section} eq "Precompiled_Simulation_Library_Files"){ - @new_file_array = map{$external_args_hr->{class_directory}."/".$_} @new_file_array; - } - &generator_set_files_in_system_ptf($decoder_hash->{ptf_section}, @new_file_array); - } -} - - - -#### -# Name: generator_set_files_in_system_ptf -# Args: $hdl_section -# @list_of_files -# Returns: 1 or 0 -# Purpose: This is an internal function used to set files in the module's section in the system PTF file -# -sub generator_set_files_in_system_ptf -{ - my ($hdl_section, @list_of_files) = (@_); - - my $file_list = join(",", @list_of_files); - my $previous_data; - - &generator_print_verbose("setting HDL_INFO/".$hdl_section." in system PTF file with ".$file_list."\n"); - my $previous_data = &get_data_by_path($generator_hr->{module_ptf_hr}, "HDL_INFO/".$hdl_section); - if($previous_data){ - $file_list = $previous_data . ", $file_list"; # spr 132177 - # swapping order, dvb 2003 - } - &set_data_by_path($generator_hr->{module_ptf_hr}, "HDL_INFO/".$hdl_section, $file_list); -} - -#### -# Name: generator_copy_files -# Args: $target_directory -# $source_directory -# @list_of_files -# Returns: The list of files which has been copied (suitable for framing!) -# Purpose: This is an internal function used to copy files around in the generator program. -# -sub generator_copy_files -{ - my ($target_directory, $source_directory, @list_of_files) = (@_); - - my @new_file_array; - - foreach my $file_name(@list_of_files){ - $file_name =~ s|\\|\/|g; - if($file_name =~ /\*\.*/){ - $file_name =~ s/\*/$1/; - my @found_list = &_find_all_dir_files_with_ext($source_directory, $file_name); - push(@new_file_array, @found_list); - }else{ - &generator_print_verbose("Copying: ".$file_name."\n"); - push(@new_file_array, $file_name); - } - } - - &_copy_files($target_directory, $source_directory, @new_file_array); - return @new_file_array; -} - - - -sub _find_all_dir_files_with_ext -{ - my ($dir, - $ext) = (@_); - - opendir (DIR, $dir) or - &default_ribbit("can't open $dir !"); - - my @all_files = readdir(DIR); - my @new_file_list; - - - foreach my $file (@all_files){ - if($file =~ /^.*($ext)$/){ - push(@new_file_list, $file); - } - } - - return @new_file_list; -} - -#### -# Name: generator_begin -# Args: Array of generator program launcher args -# Returns: A hash reference to the module's section in the system PTF file -# Purpose: This is the first subroutine a user should call before running the rest of their -# generator program. -# - -sub generator_begin -{ - my @external_args = (@_); - - my ($external_args_hr, - $temp_user_defined, - $temp_db_Module, - $temp_db_PTF_File) = Process_Wizard_Script_Arguments("", @external_args); - - &generator_print_verbose("generator_begin: initializing\n"); - - $generator_hr->{external_args_hr} = $external_args_hr; - $generator_hr->{external_args} = \@external_args; - - # open up class.ptf and - $generator_hr->{class_ptf_hr} = new_ptf_from_file($external_args_hr->{class_directory}."/class.ptf"); - - # get the system.ptf - $generator_hr->{system_ptf_hr} = new_ptf_from_file($external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf"); - $generator_hr->{module_ptf_hr} = &get_child_by_path($generator_hr->{system_ptf_hr}, "SYSTEM $external_args_hr->{system_name}/MODULE $external_args_hr->{target_module_name}"); - my $class_name = get_data_by_path($generator_hr->{module_ptf_hr}, "class"); - - # find the default generator section - $generator_hr->{language} = get_data_by_path($generator_hr->{system_ptf_hr}, "SYSTEM $external_args_hr->{system_name}/WIZARD_SCRIPT_ARGUMENTS/hdl_language"); - - # get some wrapper settings - &get_module_wrapper_arg_hash_from_system_ptf_file(); - - # clear system ptf's HDL section - &delete_child($generator_hr->{module_ptf_hr}, "HDL_INFO"); - - return $generator_hr->{module_ptf_hr}; -} - -#### -# Name: generator_end -# Args: none -# Returns: nothing -# Purpose: This is the last subroutine a user should call from their generator program. -# Not calling this subroutine will make you very sad... =< -# - -sub generator_end -{ - # o.k., time to make the wrapper and output it. - if($generator_hr->{wrapper_args}{make_wrapper}){ - &_generator_make_module_wrapper(); - } - - - my $external_args_hr = $generator_hr->{external_args_hr}; - my $ptf_file_name = $external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf"; - &generator_print_verbose("generator_end: writing PTF file ".$external_args_hr->{system_name}.".ptf to ".$external_args_hr->{system_directory}."\n"); - - default_ribbit("Cannot write PTF file ".$ptf_file_name."!\n") - unless(&write_ptf_file($generator_hr->{system_ptf_hr}, $external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf")); -} - -sub generator_end_read_module_wrapper_string -{ - my $language = &generator_get_language(); - my $ls; - - if($language =~ /vhdl/){ - $ls = ".vhd"; - }elsif($language =~ /verilog/){ - $ls = ".v"; - }else{ - &ribbit("generator_end_read_module_wrapper_string invoked with unkown language"); - } - my $system_dir = $generator_hr->{external_args_hr}->{system_directory}; - my $module_name = $generator_hr->{external_args_hr}->{target_module_name}; - - my $file = $system_dir."/".$module_name.$ls; - &generator_print_verbose("generator library reading file into string: $file\n"); - - open (FILE,"<$file") or ribbit "cannot open file ($file) ($!)\n"; - my $return_string; - while (
sdram_ctrl/trunk/doc/sdram_ctrl.sxw
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: sdram_ctrl/trunk/syn/sdram_ctrl/cb_generator.pl
===================================================================
--- sdram_ctrl/trunk/syn/sdram_ctrl/cb_generator.pl (nonexistent)
+++ sdram_ctrl/trunk/syn/sdram_ctrl/cb_generator.pl (revision 8)
@@ -0,0 +1,1159 @@
+# | file: cb_generator.pl
+# |
+# | This SOPC Builder Generator program is provided by
+# | the Component Builder application. It is copied
+# | straight across and is data-driven from its command
+# | line arguments and the PTF files referenced.
+# |
+# | Its purpose is to construct an HDL "wrapper" for
+# | a particular instance of a particular SOPC Builder
+# | peripheral. This wrapper resolves the instance
+# | name and any HDL parameterization.
+# |
+# +-------------------------------------------
+
+
+
+# +-------------------------------------------
+# |
+
+use strict;
+use format_conversion_utils;
+use ptf_parse;
+use wiz_utils;
+use europa_all;
+use run_system_command_utils;
+
+# |
+# +-------------------------------------------
+
+
+
+# +-------------------------------------------
+# |
+# | first pass: include all of generator_libarary.pm RIGHT HERE.
+# | dvb04.08.02
+# | then prune down to actual functionality.
+# |
+# | TODO: Rewrite this whole file into something readable
+# | this is much more confusing than I'm comfortable with. dvb04.
+# | (though it does seem to work.)
+# |
+
+my $DEBUG_DEFAULT_GEN = 1;
+
+#This is the global hash of arguments passed in by the generator program
+
+my $generator_hr = {
+ wrapper_args => {
+ make_wrapper => 0,
+ top_module_name => "",
+ simulate_hdl => 1,
+ ports => "",
+ },
+ class_ptf_hr => "",
+ module_ptf_hr => "",
+ system_ptf_hr => "",
+ language => "",
+ external_args => "",
+ external_args_hr => "",
+ project_path_widget => "__PROJECT_DIRECTORY__",
+ generator_mode => "silent",
+ };
+
+
+sub generator_print_verbose
+{
+ my ($info) = (@_);
+
+ if($generator_hr->{generator_mode} eq "verbose"){
+ print("cb_generator.pl: ".$info);
+ }
+}
+
+sub generator_enable_mode
+{
+ my ($mode) = (@_);
+ $generator_hr->{generator_mode} = $mode;
+}
+
+sub generator_get_system_ptf_handle
+{
+ return $generator_hr->{system_ptf_hr};
+}
+
+sub generator_get_language
+{
+ return $generator_hr->{language};
+}
+
+sub generator_get_class_ptf_handle
+{
+ return $generator_hr->{class_ptf_hr};
+}
+
+sub default_ribbit
+{
+ my ($arg) = (@_);
+ &ribbit("\n\n--Error: default_gen_lib: $arg\n");
+}
+
+
+sub _copy_files
+{
+ my ($dest_dir, $source_dir, @files) = (@_);
+ my $function_name;
+
+ #validate args
+ &default_ribbit("No target dir for function copy_files!")
+ unless ($dest_dir ne "");
+
+ &default_ribbit("No source dir for function copy_files!")
+ unless ($source_dir ne "");
+
+ &default_ribbit("No files for function copy_files!")
+ unless (@files != 0);
+
+
+ #check for valid directories
+ opendir (SDIR, $source_dir) or
+ &default_ribbit("can't open $source_dir !");
+
+ opendir (DDIR, $dest_dir) or
+ &default_ribbit("can't open $dest_dir !");
+
+
+ foreach my $source_file(@files){
+ # |
+ # | Separate out the source subdir and the source filename
+ # |
+ my $source_subdir = "";
+ my $source_filename = $source_file;
+
+ if($source_filename =~ /^(.*)\/(.*)$/) # break on last slash
+ {
+ $source_subdir = "/$1"; # embed its leading slash, for concatty
+ $source_filename = $2;
+ }
+
+ my $source_fullpath = "$source_dir$source_subdir/$source_filename";
+ my $dest_fullpath = "$dest_dir/$source_filename";
+
+ &Perlcopy($source_fullpath, $dest_fullpath);
+ &generator_print_verbose("Copying file: \"$source_fullpath\""
+ . " to \"$dest_fullpath\".\n");
+ }
+
+ closedir (SDIR);
+ closedir (DDIR);
+}
+
+
+sub get_module_wrapper_arg_hash_from_system_ptf_file
+{
+ my $module_ptf_hr = $generator_hr->{module_ptf_hr};
+
+ my @list_of_sections = ("MASTER","SLAVE","PORT_WIRING");
+ my @port_list;
+ foreach my $section(@list_of_sections){
+ my $number = get_child_count($module_ptf_hr, $section);
+
+ for(my $initial=0; $initial < $number; $initial++){
+
+ my $interface_section = get_child($module_ptf_hr, $initial, $section);
+ my $interface_section_name = get_data($interface_section);
+
+ my $port_wiring_section;
+ if($section ne "PORT_WIRING"){
+ $port_wiring_section =
+ get_child_by_path($module_ptf_hr, $section." ".$interface_section_name."/PORT_WIRING");
+ }else{
+ $port_wiring_section =
+ get_child_by_path($module_ptf_hr, $section);
+ }
+ my $num_ports = get_child_count($port_wiring_section, "PORT");
+ foreach(my $port_count = 0; $port_count < $num_ports; $port_count++){
+ my $port = get_child($port_wiring_section, $port_count, "PORT");
+
+ my %port_info_struct;
+ $port_info_struct{name} = get_data($port);
+ $port_info_struct{direction} = get_data_by_path($port, "direction");
+ $port_info_struct{width} = get_data_by_path($port, "width");
+ $port_info_struct{vhdl_record_name} = get_data_by_path($port, "vhdl_record_name");
+ $port_info_struct{vhdl_record_type} = get_data_by_path($port, "vhdl_record_type");
+
+ push(@port_list, \%port_info_struct);
+
+ }
+ }
+ }
+ $generator_hr->{wrapper_args}{ports} = \@port_list;
+}
+
+
+sub generator_make_module_wrapper
+{
+ my ($simulate_hdl, $top_module_name, $module_language) = (@_);
+
+ &default_ribbit("generator_make_module_wrapper: no arg0 passed in for simulate_hdl\n")
+ if($simulate_hdl eq '');
+
+ &default_ribbit("generator_make_module_wrapper: no arg1 passed in for top_module_name\n")
+ unless($top_module_name);
+
+ $generator_hr->{wrapper_args}{simulate_hdl} = $simulate_hdl;
+ $generator_hr->{wrapper_args}{top_module_name} = $top_module_name;
+ $generator_hr->{wrapper_args}{make_wrapper} = 1;
+ $generator_hr->{wrapper_args}{module_language} = $module_language;
+
+}
+
+
+
+
+# |
+# | recognize varous number forms,
+# | return 'h0123abcd-ish.
+# |
+sub turn_anything_into_appropriate_string($$$$)
+ {
+ my ($value,$type,$editable,$module_language) = (@_);
+
+ return $value if($value =~ /^\"/); # quoted string: unscathed
+ return $value if($type eq "string"); # string: anything is ok
+
+ return $value if(!$editable); # and you know, if you can't change it, keep it!
+
+
+ # |
+ # | first, convert to a number
+ # |
+ my $base = 10;
+ my $n = $value;
+ my $width = 32;
+ my $number = 0;
+
+ $value = lc($value); # lower case
+
+ if($value =~ /^([0-9]*)\'([hbo])(.*)$/)
+ {
+ # | tick notation: AOK for verilog
+ if($module_language eq "verilog")
+ {
+ $number = $value;
+ }
+ # |
+ # | note: at this point, we could notice if the
+ # | result should be vhdl binary, and convert
+ # | to that, avoiding the precision-losing
+ # | integer intermediary
+ # |
+ # | (alternatively, we could use a binary string
+ # | always as the intermediate form, rather than
+ # | a precision-losing int.)
+ # |
+ else
+ {
+ $width = $1;
+ my $baseletter = $2;
+ my $digits = $3;
+
+ if($baseletter eq "h")
+ {
+ $base = 16;
+ }
+ elsif($baseletter eq "b")
+ {
+ $base = 2;
+ }
+ elsif($baseletter eq "o") # must be
+ {
+ $base = 8;
+ }
+
+ $digits =~ s/[ _-]//g; # crush out dividing value
+
+ while(length($digits) > 0)
+ {
+ my $digit = substr($digits,0,1);
+ $digits = substr($digits,1);
+ my $digitvalue = hex($digit); # how handy
+ $number = $number * $base + $digitvalue;
+ }
+ }
+ }
+ elsif($value =~ /^0x(.*)$/)
+ {
+ $number = hex($1);
+ }
+ else # try for decimal
+ {
+ $number = int(1 * $value);
+ }
+
+ # |
+ # | ok, we have a number. If our target type
+ # | is "std_logic_vector(this downto that)"
+ # | for tricky VHDL, we
+ # | must quote a binary string out of it.
+ # |
+
+ if(($module_language eq "vhdl") and ($type =~ /^.*\((\d+) downto (\d+)\).*$/))
+ {
+ my ($high_bit,$low_bit) = ($1,$2);
+ my $binary = "";
+ for(my $bit = $low_bit; $bit <= $high_bit; $bit++)
+ {
+ $binary = ($number % 2) . $binary;
+ $number = int($number >> 1);
+ }
+
+ $number = '"' . $binary . '"';
+ }
+
+ return $number;
+ }
+
+#
+# return @array of vhdl libraries, if any, from the class.ptf
+sub get_libraries()
+{
+ my $class_ptf = generator_get_class_ptf_handle();
+ my @libraries;
+ my $libraries_ptf = get_child_by_path($class_ptf,"CLASS/CB_GENERATOR/LIBRARIES");
+
+ if($libraries_ptf)
+ {
+ my $library_count = get_child_count($libraries_ptf,"library");
+ for(my $i = 0; $i < $library_count; $i++)
+ {
+ my $library_ptf = get_child($libraries_ptf,$i,"library");
+ my $library_name = get_data($library_ptf);
+ push(@libraries,$library_name);
+ }
+ }
+
+ return @libraries;
+}
+
+
+
+sub _generator_make_module_wrapper
+{
+
+ my $wrapper_args = $generator_hr->{wrapper_args};
+ my $no_black_box = $wrapper_args->{simulate_hdl};
+ my $top_module_name = $wrapper_args->{top_module_name};
+ my $language = $generator_hr->{language};
+ my @external_args = @{$generator_hr->{external_args}};
+ my $module_ptf_hr = $generator_hr->{module_ptf_hr};
+
+ ### Build Module
+ my $project = e_project->new(@external_args);
+ my $top = $project->top();
+
+ # add the ports to the system module
+ my @ports;
+
+ foreach my $port_hash(@{$wrapper_args->{ports}}){
+ my $porto = e_port->new({
+ name => $port_hash->{name},
+ width => $port_hash->{width},
+ direction => $port_hash->{direction},
+ vhdl_record_name => $port_hash->{vhdl_record_name},
+ vhdl_record_type => $port_hash->{vhdl_record_type}
+ });
+ push(@ports, $porto);
+ }
+ $top->add_contents(@ports);
+
+
+
+
+
+ # +----------------------------------------
+ # | Get parameters from class.ptf
+ # | create @array of parameters, eacho
+ # | one like name=>, default=>, type=>,
+ # |
+ # | These are the definitions of parameters for
+ # | ANY instance of this module; we need to
+ # | have them in the "wrapee" module so that
+ # | when the system bus is knitted together
+ # | the parameter types can be properly used.
+ # |
+ # | (as it turns out, verilog doesnt need
+ # | them, but vhld does)
+ # |
+ # | dvb2004
+
+
+ my @e_hdl_parameters; # list of e_parameters
+
+ my $class_ptf = generator_get_class_ptf_handle();
+ my $hdl_parameter_definitions_ptf = get_child_by_path($class_ptf,"CLASS/COMPONENT_BUILDER/HDL_PARAMETERS");
+
+ my @libraries = get_libraries();
+
+ my $hdl_parameter_count = get_child_count($hdl_parameter_definitions_ptf,"HDL_PARAMETER");
+
+ my $module_language = $generator_hr->{wrapper_args}{module_language};
+
+ for(my $i = 0; $i < $hdl_parameter_count; $i++)
+ {
+ my $a_parameter = get_child($hdl_parameter_definitions_ptf,$i,"HDL_PARAMETER");
+ my $parameter_editable = get_data_by_path($a_parameter,"editable");
+ if($parameter_editable)
+ {
+ my $boring_name = get_data($a_parameter); # legal guinevere-ized
+ my $name = get_data_by_path($a_parameter,"parameter_name"); # original HDL name
+ my $default = get_data_by_path($a_parameter,"default_value");
+ my $type = get_data_by_path($a_parameter,"type");
+
+ $default = turn_anything_into_appropriate_string($default,$type,1,$module_language);
+
+ my $a_parameter = e_parameter->new
+ ({
+ name => $name,
+ default => $default,
+ type => $type
+ });
+
+ push (@e_hdl_parameters,$a_parameter);
+ }
+ }
+
+
+
+ # | and @e_hdl_parameters is used below in the wrapee module
+ # +--------------------------------------------
+
+ # +--------------------------------------------
+ # | Now, we build a "hdl_parameter_map", which is just
+ # | your basic hash table with keys (parameters)
+ # | and values (parameter values).
+ # |
+ # | these are the particular values for this instance.
+ # |
+
+ my %hdl_parameter_map;
+ my $module_ptf = $generator_hr->{module_ptf_hr};
+ my $hdl_parameters_ptf =
+ get_child_by_path($module_ptf,"WIZARD_SCRIPT_ARGUMENTS/hdl_parameters");
+
+ my $child_count = get_child_count($hdl_parameters_ptf);
+
+ for(my $i = 0; $i < $child_count; $i++)
+ {
+ my $a_parameter = get_child($hdl_parameters_ptf,$i);
+
+ my $boring_name = get_name($a_parameter);
+ my $value = get_data($a_parameter);
+
+ # refer back to the original HDL name...
+ my $parameter_definition_ptf = get_child_by_path($hdl_parameter_definitions_ptf,"HDL_PARAMETER $boring_name");
+ my $parameter_name = get_data_by_path($parameter_definition_ptf,"parameter_name");
+ my $parameter_type = get_data_by_path($parameter_definition_ptf,"type");
+ my $parameter_editable = get_data_by_path($parameter_definition_ptf,"editable");
+
+ $value = turn_anything_into_appropriate_string($value,$parameter_type,$parameter_editable,$module_language);
+
+ # |
+ # | our internal _dummy assignment shows up here
+ # | without a corresponding hdl entry. we
+ # | ignore it.
+ # |
+
+ if(($parameter_name ne "") and $parameter_editable)
+ {
+ $hdl_parameter_map{$parameter_name} = $value;
+ }
+ }
+
+ my $wrapee_module;
+ $wrapee_module = e_module->new({
+ name => $top_module_name,
+ contents => [@ports,@e_hdl_parameters],
+ do_black_box => 0,
+ do_ptf => 0,
+ _hdl_generated => 1,
+ _explicitly_empty_module => 1,
+ });
+
+ # VHDL Libraries, from PTF file...
+ $wrapee_module->add_vhdl_libraries(@libraries);
+ $top->add_vhdl_libraries(@libraries);
+
+
+ $top->add_contents (
+ e_instance->new({
+ module => $wrapee_module,
+ parameter_map => \%hdl_parameter_map
+ }),
+ );
+
+ $project->top()->do_ptf(0);
+ $project->do_write_ptf(0);
+
+
+ my $module_file = $project->_target_module_name().".v";
+ $module_file = $project->_target_module_name().".vhd"
+ if($language eq "vhdl");
+
+ $module_file = $generator_hr->{project_path_widget}."/".$module_file;
+ &generator_set_files_in_system_ptf("Synthesis_HDL_Files", ($module_file));
+ $project->output();
+
+
+ # if you don't want a simulation model, you don't get a simulation model
+ if($no_black_box eq "0")
+ {
+ my $black_project = e_project->new(@external_args);
+ $black_project->_target_module_name($top_module_name);
+ my $black_top = $black_project->top();
+
+
+
+ $black_top->add_contents(@ports);
+ my $black_top_instance;
+ $black_top_instance = e_module->new({
+ name => $wrapper_args->{top_module_name}."_bb",
+ contents => [@ports],
+ do_black_box => 1,
+ do_ptf => 0,
+ _hdl_generated => 0,
+ _explicitly_empty_module => 1,
+ });
+
+ $black_top->add_contents (
+ e_instance->new({
+ module => $black_top_instance,
+ }),
+ );
+
+
+
+
+ $black_project->top()->do_ptf(0);
+ $black_project->do_write_ptf(0);
+
+ my $black_module_file = $black_project->_target_module_name().".v";
+ $black_module_file = $black_project->_target_module_name().".vhd"
+ if($language eq "vhdl");
+
+
+ $black_module_file = $generator_hr->{project_path_widget}."/".$black_module_file;
+ &generator_set_files_in_system_ptf("Simulation_HDL_Files", ($black_module_file));
+
+# &set_data_by_path($module_ptf_hr, "HDL_INFO/Simulation_HDL_Files", $black_module_file);
+
+
+ $black_project->output();
+ }
+
+}
+
+####
+# Args: $file_type : "synthesis", "synthesis_only", "simulation"
+# @file_list : an array of files. This list of files is assumed to be relative to the
+# component's directory
+
+
+my $decoder_ring_hr = {
+ quartus_only => {
+ copy => 1,
+ copy_to => "project",
+ ptf_set => 0,
+ },
+ simulation_only => {
+ copy => 1,
+ copy_to => "simulation",
+ ptf_set => 1,
+ ptf_section => "Simulation_HDL_Files",
+ },
+ simulation_and_quartus => {
+ copy => 1,
+ copy_to => "project",
+ ptf_set => 1,
+ ptf_section => "Synthesis_HDL_Files",
+ },
+ precompiled_simulation_files => {
+ copy => 0,
+ ptf_set => 1,
+ ptf_section => "Precompiled_Simulation_Library_Files",
+ },
+ };
+
+
+
+
+sub generator_copy_files_and_set_system_ptf
+{
+ my ($hdl_section, @file_list) = (@_);
+
+ my $ptf_path_prefix = "";
+ my $external_args_hr = $generator_hr->{external_args_hr};
+ my @new_file_array;
+
+ #validate first
+ my $decoder_hash = $decoder_ring_hr->{$hdl_section};
+ &default_ribbit("generator_copy_files_and_set_system_ptf: No understood HDL section passed in for first arg\n")
+ unless($decoder_ring_hr->{$hdl_section} ne "");
+
+ &generator_print_verbose("generator_copy_files_and_set_system_ptf: copying files for section ".$hdl_section."\n");
+
+ #copy second
+ my @new_file_array;
+
+ # If we need to copy over some files, then we need to make sure we are
+ # keeping track of what files we copy over.
+ # Otherwise, we just need to keep track of the files that the user has asked to copy over
+ # and use these instead.
+ if($decoder_hash->{copy}){
+ my $copy_to_location;
+ my $copy_from_location;
+
+ if($decoder_hash->{copy_to} eq "project"){
+ $copy_to_location = $external_args_hr->{system_directory};
+ }elsif($decoder_hash->{copy_to} eq "simulation"){
+ $copy_to_location = $external_args_hr->{system_sim_dir};
+ }else{
+ &default_ribbit("generator_copy_files_and_set_system_ptf: No understood copy files to location\n");
+ }
+
+ $copy_from_location = $external_args_hr->{class_directory};
+ @new_file_array = &generator_copy_files($copy_to_location, $copy_from_location, @file_list);
+ }else{
+ @new_file_array = @file_list;
+ }
+
+ #scribble on PTF hash last
+ if($decoder_hash->{ptf_set}){
+
+ if($decoder_hash->{copy_to} eq "project"){
+ foreach my $file(@new_file_array){
+ $file =~ s/^.*\/(.*?)$/$1/;
+ $file = $generator_hr->{project_path_widget}."/".$file;
+ }
+ }
+ &generator_print_verbose("generator_copy_files_and_set_system_ptf: setting system PTF file in section ".$hdl_section."\n");
+ if($decoder_hash->{ptf_section} eq "Precompiled_Simulation_Library_Files"){
+ @new_file_array = map{$external_args_hr->{class_directory}."/".$_} @new_file_array;
+ }
+ &generator_set_files_in_system_ptf($decoder_hash->{ptf_section}, @new_file_array);
+ }
+}
+
+
+
+####
+# Name: generator_set_files_in_system_ptf
+# Args: $hdl_section
+# @list_of_files
+# Returns: 1 or 0
+# Purpose: This is an internal function used to set files in the module's section in the system PTF file
+#
+sub generator_set_files_in_system_ptf
+{
+ my ($hdl_section, @list_of_files) = (@_);
+
+ my $file_list = join(",", @list_of_files);
+ my $previous_data;
+
+ &generator_print_verbose("setting HDL_INFO/".$hdl_section." in system PTF file with ".$file_list."\n");
+ my $previous_data = &get_data_by_path($generator_hr->{module_ptf_hr}, "HDL_INFO/".$hdl_section);
+ if($previous_data){
+ $file_list = $previous_data . ", $file_list"; # spr 132177
+ # swapping order, dvb 2003
+ }
+ &set_data_by_path($generator_hr->{module_ptf_hr}, "HDL_INFO/".$hdl_section, $file_list);
+}
+
+####
+# Name: generator_copy_files
+# Args: $target_directory
+# $source_directory
+# @list_of_files
+# Returns: The list of files which has been copied (suitable for framing!)
+# Purpose: This is an internal function used to copy files around in the generator program.
+#
+sub generator_copy_files
+{
+ my ($target_directory, $source_directory, @list_of_files) = (@_);
+
+ my @new_file_array;
+
+ foreach my $file_name(@list_of_files){
+ $file_name =~ s|\\|\/|g;
+ if($file_name =~ /\*\.*/){
+ $file_name =~ s/\*/$1/;
+ my @found_list = &_find_all_dir_files_with_ext($source_directory, $file_name);
+ push(@new_file_array, @found_list);
+ }else{
+ &generator_print_verbose("Copying: ".$file_name."\n");
+ push(@new_file_array, $file_name);
+ }
+ }
+
+ &_copy_files($target_directory, $source_directory, @new_file_array);
+ return @new_file_array;
+}
+
+
+
+sub _find_all_dir_files_with_ext
+{
+ my ($dir,
+ $ext) = (@_);
+
+ opendir (DIR, $dir) or
+ &default_ribbit("can't open $dir !");
+
+ my @all_files = readdir(DIR);
+ my @new_file_list;
+
+
+ foreach my $file (@all_files){
+ if($file =~ /^.*($ext)$/){
+ push(@new_file_list, $file);
+ }
+ }
+
+ return @new_file_list;
+}
+
+####
+# Name: generator_begin
+# Args: Array of generator program launcher args
+# Returns: A hash reference to the module's section in the system PTF file
+# Purpose: This is the first subroutine a user should call before running the rest of their
+# generator program.
+#
+
+sub generator_begin
+{
+ my @external_args = (@_);
+
+ my ($external_args_hr,
+ $temp_user_defined,
+ $temp_db_Module,
+ $temp_db_PTF_File) = Process_Wizard_Script_Arguments("", @external_args);
+
+ &generator_print_verbose("generator_begin: initializing\n");
+
+ $generator_hr->{external_args_hr} = $external_args_hr;
+ $generator_hr->{external_args} = \@external_args;
+
+ # open up class.ptf and
+ $generator_hr->{class_ptf_hr} = new_ptf_from_file($external_args_hr->{class_directory}."/class.ptf");
+
+ # get the system.ptf
+ $generator_hr->{system_ptf_hr} = new_ptf_from_file($external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf");
+ $generator_hr->{module_ptf_hr} = &get_child_by_path($generator_hr->{system_ptf_hr}, "SYSTEM $external_args_hr->{system_name}/MODULE $external_args_hr->{target_module_name}");
+ my $class_name = get_data_by_path($generator_hr->{module_ptf_hr}, "class");
+
+ # find the default generator section
+ $generator_hr->{language} = get_data_by_path($generator_hr->{system_ptf_hr}, "SYSTEM $external_args_hr->{system_name}/WIZARD_SCRIPT_ARGUMENTS/hdl_language");
+
+ # get some wrapper settings
+ &get_module_wrapper_arg_hash_from_system_ptf_file();
+
+ # clear system ptf's HDL section
+ &delete_child($generator_hr->{module_ptf_hr}, "HDL_INFO");
+
+ return $generator_hr->{module_ptf_hr};
+}
+
+####
+# Name: generator_end
+# Args: none
+# Returns: nothing
+# Purpose: This is the last subroutine a user should call from their generator program.
+# Not calling this subroutine will make you very sad... =<
+#
+
+sub generator_end
+{
+ # o.k., time to make the wrapper and output it.
+ if($generator_hr->{wrapper_args}{make_wrapper}){
+ &_generator_make_module_wrapper();
+ }
+
+
+ my $external_args_hr = $generator_hr->{external_args_hr};
+ my $ptf_file_name = $external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf";
+ &generator_print_verbose("generator_end: writing PTF file ".$external_args_hr->{system_name}.".ptf to ".$external_args_hr->{system_directory}."\n");
+
+ default_ribbit("Cannot write PTF file ".$ptf_file_name."!\n")
+ unless(&write_ptf_file($generator_hr->{system_ptf_hr}, $external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf"));
+}
+
+sub generator_end_read_module_wrapper_string
+{
+ my $language = &generator_get_language();
+ my $ls;
+
+ if($language =~ /vhdl/){
+ $ls = ".vhd";
+ }elsif($language =~ /verilog/){
+ $ls = ".v";
+ }else{
+ &ribbit("generator_end_read_module_wrapper_string invoked with unkown language");
+ }
+ my $system_dir = $generator_hr->{external_args_hr}->{system_directory};
+ my $module_name = $generator_hr->{external_args_hr}->{target_module_name};
+
+ my $file = $system_dir."/".$module_name.$ls;
+ &generator_print_verbose("generator library reading file into string: $file\n");
+
+ open (FILE,"<$file") or ribbit "cannot open file ($file) ($!)\n";
+ my $return_string;
+ while ()
+ {
+ $return_string .= $_;
+ }
+ close (FILE);
+ return($return_string);
+}
+
+sub generator_end_write_module_wrapper_string
+{
+ my $string = shift or ribbit "no string specified\n";
+
+ my $language = &generator_get_language();
+ my $ls;
+
+ print $language;
+
+ if($language =~ /vhdl/){
+ $ls = ".vhd";
+ }elsif($language =~ /verilog/){
+ $ls = ".v";
+ }else{
+ &ribbit("generator_end_read_module_wrapper_string invoked with unkown language");
+ }
+ my $system_dir = $generator_hr->{external_args_hr}->{system_directory};
+ my $module_name = $generator_hr->{external_args_hr}->{target_module_name};
+
+ my $file = $system_dir."/".$module_name.$ls;
+ &generator_print_verbose("generator library writing string into file: $file\n");
+
+ open (FILE,">$file") or ribbit "cannot open file ($file) ($!)\n";
+ print FILE $string;
+ close (FILE);
+}
+# end of generator_library.pm
+
+
+
+
+
+#
+#
+#
+#
+# ---------------------------------------------------------------------
+
+# +----------------------------------------------------
+# | emit_system_h
+# |
+# | if "is_cpu", attempt to emit a system.h
+# | memory map.
+# |
+
+sub emit_system_h($$$)
+ {
+ my ($sopc_directory,$master,$system_ptf) = (@_);
+
+ # |
+ # | Build a system.h file for masters.
+ # |
+
+
+# as of quartus 5.0, we prefer gtf-generate in sopc_builder directly
+
+ my $gtf_generate = "$sopc_directory/bin/gtf-generate";
+ my $gtf_filename = "$sopc_directory/bin/gtf/system.h.gtf";
+
+ if(! -f $gtf_generate)
+ {
+ # but if sopc_builder is missing it for whatever reason,
+ # try the one in sopc_kit_nios2
+
+ my $sopc_kit_nios2 = $ENV{SOPC_KIT_NIOS2};
+ if($sopc_kit_nios2 ne "")
+ {
+ $gtf_generate = "$sopc_kit_nios2/bin/gtf-generate";
+ $gtf_filename = "$sopc_kit_nios2/bin/gtf/system.h.gtf";
+ }
+ }
+
+ # |
+ # | xml template
+ # |
+
+ my $stf_template = <
+
+
+
+
+
+
+EOP
+
+ # |
+ # | THINK
+ # |
+
+ my $output_directory = "./${master}_map";
+ my $project_name = "ignored";
+ my $stf_filename = "./${master}_project.stf";
+
+ # |
+ # | build up template variables
+ # |
+
+ my %template_vars;
+ $template_vars{date} = fcu_date_time();
+ $template_vars{whoami} = $0;
+ $template_vars{project_name} = $project_name;
+ $template_vars{system_ptf} = $system_ptf;
+ $template_vars{output_directory} = $output_directory;
+ $template_vars{master} = $master;
+
+ # |
+ # | poke in the values to the template
+ # |
+
+ foreach my $key (sort(keys(%template_vars)))
+ {
+ $stf_template =~ s/--$key--/$template_vars{$key}/gs;
+ }
+
+ ## debug print $stf_template;
+
+ # |
+ # | write out the stf file, so we can soon use it
+ # |
+
+ fcu_write_file($stf_filename,$stf_template);
+
+ # |
+ # | and use it
+ # |
+
+ if(-e $gtf_generate && -e $gtf_filename)
+ {
+
+ my $generate_cmd = $gtf_generate;
+
+ $generate_cmd .= " --output-directory=$output_directory";
+ $generate_cmd .= " --gtf=$gtf_filename";
+ $generate_cmd .= " --stf=$stf_filename";
+
+ r_system($sopc_directory,$generate_cmd);
+
+ # |
+ # | done with it
+ # |
+
+ r_system($sopc_directory,"rm $stf_filename");
+
+ fcu_print_command("Generated memory map \"$output_directory/system.h\"");
+ }
+ else
+ {
+ fcu_print_command("Warning: did NOT emit system.h for $master");
+ }
+
+
+
+
+ }
+
+
+sub r_system($$)
+ {
+ my ($sopc_directory,$cmd) = (@_);
+ fcu_print_command($cmd);
+ return Run_Command_In_Unix_Like_Shell($sopc_directory,$cmd);
+ }
+
+
+
+
+
+
+
+# +------------------------------------------
+# | synthesis and simulation files are are
+# | listed in CLASS/CB_GENERATOR/HDL_FILES.
+# |
+
+sub get_synthesis_files($)
+ {
+ my ($class_ptf) = (@_);
+ my $synthesis_files = "";
+ my $simulation_files = "";
+
+ my $hdl_files = get_child_by_path($class_ptf,"CLASS/CB_GENERATOR/HDL_FILES");
+ my $child_count = get_child_count($hdl_files);
+ for(my $i = 0; $i < $child_count; $i++)
+ {
+ my $hdl_file = get_child($hdl_files,$i);
+ if(get_name($hdl_file) eq "FILE")
+ {
+ my $filename = get_data_by_path($hdl_file,"filepath");
+ my $use_in_synthesis = get_data_by_path($hdl_file,"use_in_synthesis");
+ my $use_in_simulation = get_data_by_path($hdl_file,"use_in_simulation");
+
+ if($use_in_synthesis)
+ {
+ $synthesis_files .= ", " if $synthesis_files;
+ $synthesis_files .= $filename;
+ }
+
+ if($use_in_simulation)
+ {
+ $simulation_files .= ", " if $simulation_files;
+ $simulation_files .= $filename;
+ }
+ }
+ }
+
+ return $synthesis_files;
+ }
+
+
+
+
+
+
+
+
+sub main
+ {
+
+ push(@ARGV,"--verbose=1") if 0;
+ my %args = fcu_parse_args(@ARGV);
+
+ if(0)
+ {
+ foreach my $key (sort(keys(%args)))
+ {
+ print("--$key = $args{$key} \n");
+ }
+ }
+
+ # |
+ # | get the arguments we care about
+ # |
+
+ my $class_dir = fcu_get_switch(\%args,"module_lib_dir");
+
+
+ my $target_module_name = fcu_get_switch(\%args,"target_module_name");
+ my $system_name = fcu_get_switch(\%args,"system_name");
+ my $sopc_directory = fcu_get_switch(\%args,"sopc_directory");
+
+ # |
+ # | preflight the arguments a little
+ # |
+
+ my $error_count = 0;
+
+ my $class_ptf_path = "$class_dir/class.ptf";
+ if(!-f $class_ptf_path)
+ {
+ print "error: no class.ptf at \"$class_dir\"\n";
+ $error_count++;
+ }
+
+ die "$error_count errors" if($error_count > 0);
+
+ # +-------------------------------------------
+ # | ok, let us get to work
+ # |
+
+
+ my $class_ptf = new_ptf_from_file($class_ptf_path);
+
+ # |
+ # | emit system.h for this module
+ # | TODO iff Is_CPU i guess.
+ # |
+
+ my $do_emit_system_h = get_data_by_path($class_ptf,
+ "CLASS/CB_GENERATOR/emit_system_h");
+ if($do_emit_system_h)
+ {
+ emit_system_h($sopc_directory,
+ $target_module_name,
+ "./$system_name.ptf");
+ }
+
+ my $top_module_name = get_data_by_path($class_ptf,
+ "CLASS/CB_GENERATOR/top_module_name");
+ my $file_name = "";
+
+ # | stored as file_name.v:module_name, so we break it open
+ if($top_module_name =~ /^(.*):(.*)$/)
+ {
+ $file_name = $1;
+ my $module_name = $2;
+ $top_module_name = $module_name;
+ }
+
+ # | language of this particular module...
+
+ my $module_language = "verilog";
+ if($file_name =~ /^.*\.vhd$/)
+ {
+ $module_language = "vhdl";
+ }
+
+ # |
+ # | consult the CB_GENERATOR/HDL_FILES section regarding
+ # | where our HDL files for synthesis are.
+ # |
+
+
+ my $synthesis_files = get_synthesis_files($class_ptf);
+
+
+ my $instantiate_in_system_module = get_data_by_path($class_ptf,
+ "CLASS/MODULE_DEFAULTS/SYSTEM_BUILDER_INFO/Instantiate_In_System_Module");
+
+
+
+ if($instantiate_in_system_module)
+ {
+ generator_enable_mode ("terse");
+
+
+ generator_begin (@ARGV);
+
+
+ generator_make_module_wrapper(1,$top_module_name,$module_language);
+
+ generator_copy_files_and_set_system_ptf
+ (
+ "simulation_and_quartus",
+ split(/ *, */,$synthesis_files)
+# "$synthesis_files"
+ );
+
+ generator_end ();
+ }
+
+ exit (0);
+ }
+
+$| = 1; # always polite to flush.
+main()
+
+# end of file
Index: sdram_ctrl/trunk/syn/sdram_ctrl/hdl/sdram_ctrl.vhd
===================================================================
--- sdram_ctrl/trunk/syn/sdram_ctrl/hdl/sdram_ctrl.vhd (nonexistent)
+++ sdram_ctrl/trunk/syn/sdram_ctrl/hdl/sdram_ctrl.vhd (revision 8)
@@ -0,0 +1,440 @@
+------------------------------------------------------------------
+--
+-- sdram_ctrl.vhd
+--
+-- Module Description:
+-- SDRAM small&fast controller
+--
+--
+-- To Do:
+-- configurable times
+-- nios simulation support
+--
+-- Author(s):
+-- Aleksey Kuzmenok, ntpqa@opencores.org
+--
+------------------------------------------------------------------
+--
+-- Copyright (C) 2006 Aleksey Kuzmenok and OPENCORES.ORG
+--
+-- This module is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU Lesser General Public
+-- License as published by the Free Software Foundation; either
+-- version 2.1 of the License, or (at your option) any later version.
+--
+-- This module is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+-- Lesser General Public License for more details.
+--
+-- You should have received a copy of the GNU Lesser General Public
+-- License along with this software; if not, write to the Free Software
+-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+--
+------------------------------------------------------------------
+-- Test results
+-- FPGA SDRAM CLK (not less than)
+-- EP1C12XXXXC8 MT48LC4M32B2TG-7:G 125 MHz
+-- EP1C6XXXXC8 IS42S16100C1-7TL 125 MHz
+--
+------------------------------------------------------------------
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+USE ieee.numeric_std.ALL;
+LIBRARY altera_mf;
+USE altera_mf.altera_mf_components.all;
+
+entity sdram_ctrl is
+ generic(
+ DATA_WIDTH: integer:=32;
+ BANK_WIDTH: integer:=4;
+ ROW_WIDTH: integer:=12;
+ COLUMN_WIDTH: integer:=8;
+
+ clk_MHz: integer:=120
+ );
+ port(
+ signal clk : IN STD_LOGIC;
+ signal reset : IN STD_LOGIC;
+
+ -- IMPORTANT: for this Avalon(tm) interface
+ -- 'Minimum Arbitration Shares'=1
+ -- 'Max Pending Read Transactions'=9
+ signal avs_nios_chipselect : IN STD_LOGIC;
+ signal avs_nios_address : IN STD_LOGIC_VECTOR ((BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH-1) DOWNTO 0);
+ signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0);
+ signal avs_nios_writedata : IN STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal avs_nios_write : IN STD_LOGIC;
+ signal avs_nios_read : IN STD_LOGIC;
+ signal avs_nios_waitrequest : OUT STD_LOGIC;
+ signal avs_nios_readdata : OUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal avs_nios_readdatavalid : OUT STD_LOGIC;
+
+ -- global export signals
+ signal sdram_cke : OUT STD_LOGIC; -- This pin has fixed state '1'
+ signal sdram_ba : OUT STD_LOGIC_VECTOR ((BANK_WIDTH-1) DOWNTO 0);
+ signal sdram_addr : OUT STD_LOGIC_VECTOR ((ROW_WIDTH-1) DOWNTO 0);
+ signal sdram_cs_n : OUT STD_LOGIC; -- This pin has fixed state '0'
+ signal sdram_ras_n : OUT STD_LOGIC;
+ signal sdram_cas_n : OUT STD_LOGIC;
+ signal sdram_we_n : OUT STD_LOGIC;
+ signal sdram_dq : INOUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal sdram_dqm : OUT STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0)
+ );
+end sdram_ctrl;
+
+architecture behaviour of sdram_ctrl is
+
+ CONSTANT FIFO_WIDTH: integer:=BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
+
+ CONSTANT MODE: std_logic_vector(11 downto 0):="000000110000"; -- 1 word burst, CAS latency=3
+ -- Only two times are configurable
+ -- tINIT delay between powerup and load mode register = 100 us
+ -- tREF refresh period = 15.625 us (64ms/4096rows)
+ CONSTANT INIT_PAUSE_CLOCKS: integer:=(clk_MHz*10000)/91; -- 109.9 us just to be on the save side
+ CONSTANT REFRESH_PERIOD_CLOCKS: integer:=(clk_MHz*1000)/65; -- 15.384 us the same purpose
+ CONSTANT CAS_LATENCY: integer:=3; -- other latencies weren't been tested!
+
+ COMPONENT scfifo
+ GENERIC (
+ add_ram_output_register : STRING;
+ intended_device_family : STRING;
+ lpm_numwords : NATURAL;
+ lpm_showahead : STRING;
+ lpm_type : STRING;
+ lpm_width : NATURAL;
+ lpm_widthu : NATURAL;
+ overflow_checking : STRING;
+ underflow_checking : STRING;
+ use_eab : STRING
+ );
+ PORT (
+ rdreq : IN STD_LOGIC ;
+ empty : OUT STD_LOGIC ;
+ aclr : IN STD_LOGIC ;
+ clock : IN STD_LOGIC ;
+ q : OUT STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
+ wrreq : IN STD_LOGIC ;
+ data : IN STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
+ full : OUT STD_LOGIC
+ );
+ END COMPONENT;
+
+ -- If you ask me why there are so many states, I'll answer that all times are fixed.
+ -- The top speed for MT48LC4M32B2TG-7:G is 7 ns, therefore all times were based on it.
+ -- tRP PRECHARGE command period = 3 clocks
+ -- tRFC AUTO REFRESH period = 10 clocks
+ -- tMRD LOAD MODE REGISTER command to ACTIVE or REFRESH command = 2 clocks
+ -- tRCD ACTIVE to READ or WRITE delay = 3 clocks
+ -- tRAS ACTIVE to PRECHARGE command = 7 clocks
+ -- tRC ACTIVE to ACTIVE command period = 10 clocks
+ -- tWR2 Write recovery time = 2 clocks
+ type states is (
+ INIT0,INIT1,INIT2,INIT3,INIT4,INIT5,INIT6,INIT7,
+ INIT8,INIT9,INIT10,INIT11,INIT12,INIT13,INIT14,INIT15,
+ INIT16,INIT17,INIT18,INIT19,INIT20,INIT21,INIT22,INIT23,INIT24,
+ REFRESH0,REFRESH1,REFRESH2,REFRESH3,REFRESH4,REFRESH5,REFRESH6,REFRESH7,
+ REFRESH8,REFRESH9,REFRESH10,REFRESH11,REFRESH12,REFRESH13,REFRESH14,
+ ACTIVE0,ACTIVE1,ACTIVE2,ACTIVE3,ACTIVE4,
+ IDLE,READ0,WRITE0);
+ signal operation: states;
+
+ signal fifo_q: std_logic_vector((FIFO_WIDTH-1) downto 0);
+
+ signal init_counter: unsigned(15 downto 0):=to_unsigned(INIT_PAUSE_CLOCKS,16);
+ signal refresh_counter: unsigned(15 downto 0);
+ signal active_counter: unsigned(2 downto 0);
+ signal active_address: unsigned((BANK_WIDTH+ROW_WIDTH-1) downto 0);
+
+ signal bank: std_logic_vector((sdram_ba'length-1) downto 0);
+ signal row: std_logic_vector((sdram_addr'length-1) downto 0);
+ signal column: std_logic_vector((COLUMN_WIDTH-1) downto 0);
+ signal be: std_logic_vector((sdram_dqm'length-1) downto 0);
+ signal data: std_logic_vector((sdram_dq'length-1) downto 0);
+
+ signal do_init,do_refresh,do_active,read_is_active,ready,tRCD_not_expired: std_logic:='0';
+
+ signal fifo_rdreq,fifo_empty: std_logic;
+
+ signal read_latency: std_logic_vector(CAS_LATENCY downto 0);
+
+ signal fifo_data: std_logic_vector((FIFO_WIDTH-1) downto 0);
+ signal fifo_wrreq,fifo_wrfull: std_logic;
+
+ signal i_command : STD_LOGIC_VECTOR(4 downto 0);
+ CONSTANT NOP: STD_LOGIC_VECTOR(4 downto 0):="10111";
+ CONSTANT ACTIVE: STD_LOGIC_VECTOR(4 downto 0):="10011";
+ CONSTANT READ: STD_LOGIC_VECTOR(4 downto 0):="10101";
+ CONSTANT WRITE: STD_LOGIC_VECTOR(4 downto 0):="10100";
+ CONSTANT PRECHARGE: STD_LOGIC_VECTOR(4 downto 0):="10010";
+ CONSTANT AUTO_REFRESH: STD_LOGIC_VECTOR(4 downto 0):="10001";
+ CONSTANT LOAD_MODE_REGISTER: STD_LOGIC_VECTOR(4 downto 0):="10000";
+
+ signal i_address : STD_LOGIC_VECTOR((sdram_addr'length-1) DOWNTO 0);
+ signal i_bank : STD_LOGIC_VECTOR((sdram_ba'length-1) DOWNTO 0);
+ signal i_dqm : STD_LOGIC_VECTOR((sdram_dqm'length-1) DOWNTO 0);
+ signal i_data : STD_LOGIC_VECTOR((sdram_dq'length-1) DOWNTO 0);
+ attribute ALTERA_ATTRIBUTE : string;
+ attribute ALTERA_ATTRIBUTE of i_command : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_address : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_bank : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_dqm : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_data : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of avs_nios_readdata : signal is "FAST_INPUT_REGISTER=ON";
+begin
+ (sdram_cke,sdram_cs_n,sdram_ras_n,sdram_cas_n,sdram_we_n) <= i_command;
+ sdram_addr <= i_address;
+ sdram_ba <= i_bank;
+ sdram_dqm <= i_dqm;
+ sdram_dq <= i_data;
+
+ fifo_data<=avs_nios_address & avs_nios_writedata & avs_nios_byteenable & avs_nios_write & avs_nios_read;
+ fifo_wrreq<=(avs_nios_write or avs_nios_read) and avs_nios_chipselect and not fifo_wrfull;
+
+ avs_nios_waitrequest<=fifo_wrfull;
+
+ fifo_rdreq<=not fifo_empty and not do_refresh and not do_active and not read_is_active and ready;
+
+ do_active<='0' when active_address=unsigned((fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)))) else '1';
+ read_is_active<='1' when read_latency(CAS_LATENCY-1 downto 0)>"000" and fifo_q(1)='1' else '0';
+ ready<='1' when operation=IDLE or operation=READ0 or operation=WRITE0 else '0';
+
+ operation_machine:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ operation<=INIT0;
+ active_address<=(others=>'1');
+ elsif rising_edge(clk)
+ then
+
+ bank<=fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length));
+ row<=fifo_q((fifo_q'length-bank'length-1) downto (fifo_q'length-bank'length-row'length));
+ column<=fifo_q((column'length+data'length+be'length+2-1) downto (data'length+be'length+2));
+ data<=fifo_q((data'length+be'length+2-1) downto (be'length+2));
+ be<=fifo_q((be'length+2-1) downto 2);
+
+ case operation is
+ when INIT0=>
+ if do_init='1'
+ then operation<=INIT1;row(10)<='1';
+ end if;
+ when INIT1=>operation<=INIT2;
+ when INIT2=>operation<=INIT3;
+ when INIT3=>operation<=INIT4;
+ when INIT4=>operation<=INIT5;
+ when INIT5=>operation<=INIT6;
+ when INIT6=>operation<=INIT7;
+ when INIT7=>operation<=INIT8;
+ when INIT8=>operation<=INIT9;
+ when INIT9=>operation<=INIT10;
+ when INIT10=>operation<=INIT11;
+ when INIT11=>operation<=INIT12;
+ when INIT12=>operation<=INIT13;
+ when INIT13=>operation<=INIT14;
+ when INIT14=>operation<=INIT15;
+ when INIT15=>operation<=INIT16;
+ when INIT16=>operation<=INIT17;
+ when INIT17=>operation<=INIT18;
+ when INIT18=>operation<=INIT19;
+ when INIT19=>operation<=INIT20;
+ when INIT20=>operation<=INIT21;
+ when INIT21=>operation<=INIT22;
+ when INIT22=>operation<=INIT23;
+ when INIT23=>operation<=INIT24;row<=MODE((row'length-1) downto 0);
+ when INIT24=>operation<=IDLE;
+
+ when REFRESH0=>operation<=REFRESH1;
+ when REFRESH1=>operation<=REFRESH2;
+ when REFRESH2=>operation<=REFRESH3;
+ when REFRESH3=>operation<=REFRESH4;
+ when REFRESH4=>operation<=REFRESH5;
+ when REFRESH5=>operation<=REFRESH6;
+ when REFRESH6=>operation<=REFRESH7;
+ when REFRESH7=>operation<=REFRESH8;
+ when REFRESH8=>operation<=REFRESH9;
+ when REFRESH9=>operation<=REFRESH10;
+ when REFRESH10=>operation<=REFRESH11;
+ when REFRESH11=>operation<=REFRESH12;
+ when REFRESH12=>operation<=REFRESH13;
+ active_address<=unsigned(fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)));
+ when REFRESH13=>operation<=REFRESH14;
+ when REFRESH14=>operation<=IDLE;
+
+ when ACTIVE0=>operation<=ACTIVE1;
+ when ACTIVE1=>operation<=ACTIVE2;
+ when ACTIVE2=>operation<=ACTIVE3;
+ active_address<=unsigned(fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)));
+ when ACTIVE3=>operation<=ACTIVE4;
+ when ACTIVE4=>operation<=IDLE;
+
+ when others=>
+ if do_refresh='1'
+ then
+ if tRCD_not_expired='0' and operation=IDLE
+ then operation<=REFRESH0;row(10)<='1';
+ else operation<=IDLE;
+ end if;
+ elsif do_active='1'
+ then
+ if tRCD_not_expired='0' and operation=IDLE
+ then operation<=ACTIVE0;row(10)<='1';
+ else operation<=IDLE;
+ end if;
+ elsif fifo_empty='1'
+ then
+ operation<=IDLE;
+ elsif fifo_q(1)='1' --write
+ then
+ if read_latency(CAS_LATENCY-1 downto 0)>"000"
+ then operation<=IDLE;
+ else operation<=WRITE0;
+ end if;
+ elsif fifo_q(0)='1' --read
+ then
+ operation<=READ0;
+ end if;
+ end case;
+ end if;
+ end process;
+
+ control_latency:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ read_latency<=(others=>'0');
+ elsif rising_edge(clk)
+ then
+ read_latency<=std_logic_vector(unsigned(read_latency) SLL 1);
+ if operation=READ0
+ then read_latency(0)<='1';
+ else read_latency(0)<='0';
+ end if;
+ end if;
+ end process;
+ latch_readdata:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ avs_nios_readdata<=(others=>'0');
+ avs_nios_readdatavalid<='0';
+ elsif rising_edge(clk)
+ then
+ avs_nios_readdata<=sdram_dq;
+ avs_nios_readdatavalid<=read_latency(CAS_LATENCY);
+ end if;
+ end process;
+ initialization:process(reset,clk)
+ begin
+ if rising_edge(clk)
+ then
+ if init_counter>0
+ then
+ init_counter<=init_counter-1;
+ else do_init<='1';
+ end if;
+ end if;
+ end process;
+ refreshing:process(clk,reset)
+ begin
+ if reset='1'
+ then
+ refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
+ do_refresh<='0';
+ elsif rising_edge(clk)
+ then
+ if refresh_counter=to_unsigned(0,refresh_counter'length)
+ then refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
+ do_refresh<='1';
+ else refresh_counter<=refresh_counter-1;
+ end if;
+ if operation=REFRESH0 or operation=REFRESH5
+ then do_refresh<='0';
+ end if;
+ end if;
+ end process;
+ active_period:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ active_counter<=(others=>'0');
+ tRCD_not_expired<='0';
+ elsif rising_edge(clk)
+ then
+ if operation=ACTIVE3 or operation=REFRESH13
+ then active_counter<=to_unsigned(5,active_counter'length);
+ elsif active_counter>0
+ then active_counter<=active_counter-1;
+ end if;
+ end if;
+ if active_counter>0
+ then tRCD_not_expired<='1';
+ else tRCD_not_expired<='0';
+ end if;
+ end process;
+ latch_controls:process(clk,reset)
+ begin
+ if reset='1'
+ then
+ i_command<=NOP;
+ i_address<=(others=>'0');
+ i_bank<=(others=>'0');
+ i_dqm<=(others=>'0');
+ i_data<=(others=>'Z');
+ elsif rising_edge(clk)
+ then
+ i_command<=NOP;
+ i_bank<=bank;
+ i_address<=(others=>'0');
+ i_address((column'length-1) downto 0)<=column;
+ i_data<=(others=>'Z');
+ i_dqm<=(others=>'0');
+
+ case operation is
+ when INIT1|REFRESH0|ACTIVE0 =>
+ i_command<=PRECHARGE;
+ i_address<=row;
+ when INIT4|INIT14|REFRESH3 =>
+ i_command<=AUTO_REFRESH;
+ when INIT24=>
+ i_command<=LOAD_MODE_REGISTER;
+ i_address<=row;
+ when ACTIVE3|REFRESH13 =>
+ i_command<=ACTIVE;
+ i_address<=row;
+ when READ0 =>
+ i_command<=READ;
+ when WRITE0 =>
+ i_command<=WRITE;
+ i_dqm<=not be;
+ i_data<=data;
+ when OTHERS =>
+ end case;
+ end if;
+ end process;
+
+ fifo: scfifo
+ GENERIC MAP (
+ add_ram_output_register => "ON",
+ intended_device_family => "Cyclone",
+ lpm_numwords => 4,
+ lpm_showahead => "ON",
+ lpm_type => "scfifo",
+ lpm_width => FIFO_WIDTH,
+ lpm_widthu => 2,
+ overflow_checking => "ON",
+ underflow_checking => "ON",
+ use_eab => "ON"
+ )
+ PORT MAP (
+ rdreq => fifo_rdreq,
+ aclr => reset,
+ clock => clk,
+ wrreq => fifo_wrreq,
+ data => fifo_data,
+ empty => fifo_empty,
+ q => fifo_q,
+ full => fifo_wrfull
+ );
+end behaviour;
Index: sdram_ctrl/trunk/syn/sdram_ctrl/class.ptf
===================================================================
--- sdram_ctrl/trunk/syn/sdram_ctrl/class.ptf (nonexistent)
+++ sdram_ctrl/trunk/syn/sdram_ctrl/class.ptf (revision 8)
@@ -0,0 +1,972 @@
+#
+# This class.ptf file built by Component Editor
+# 2006.09.25.10:24:12
+#
+# DO NOT MODIFY THIS FILE
+# If you hand-modify this file you will likely
+# interfere with Component Editor's ability to
+# read and edit it. And then Component Editor
+# will overwrite your changes anyway. So, for
+# the very best results, just relax and
+# DO NOT MODIFY THIS FILE
+#
+CLASS sdram_ctrl
+{
+ CB_GENERATOR
+ {
+ HDL_FILES
+ {
+ FILE
+ {
+ use_in_simulation = "1";
+ use_in_synthesis = "1";
+ filepath = "hdl/sdram_ctrl.vhd";
+ }
+ }
+ top_module_name = "sdram_ctrl.vhd:sdram_ctrl";
+ emit_system_h = "0";
+ LIBRARIES
+ {
+ library = "ieee.std_logic_1164.all";
+ library = "ieee.numeric_std.all";
+ library = "altera_mf.altera_mf_components.all";
+ library = "std.standard.all";
+ }
+ }
+ MODULE_DEFAULTS global_signals
+ {
+ class = "sdram_ctrl";
+ class_version = "1.1";
+ SYSTEM_BUILDER_INFO
+ {
+ Instantiate_In_System_Module = "1";
+ Has_Clock = "1";
+ Top_Level_Ports_Are_Enumerated = "1";
+ }
+ COMPONENT_BUILDER
+ {
+ GLS_SETTINGS
+ {
+ }
+ }
+ PORT_WIRING
+ {
+ PORT clk
+ {
+ width = "1";
+ width_expression = "";
+ direction = "input";
+ type = "clk";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT reset
+ {
+ width = "1";
+ width_expression = "";
+ direction = "input";
+ type = "reset";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_cke
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_ba
+ {
+ width = "-1";
+ width_expression = "((bank_width - 1)) - (0) + 1";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_addr
+ {
+ width = "-1";
+ width_expression = "((row_width - 1)) - (0) + 1";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_cs_n
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_ras_n
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_cas_n
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_we_n
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_dq
+ {
+ width = "-1";
+ width_expression = "((data_width - 1)) - (0) + 1";
+ direction = "inout";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_dqm
+ {
+ width = "-1";
+ width_expression = "(((data_width / 8) - 1)) - (0) + 1";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ }
+ WIZARD_SCRIPT_ARGUMENTS
+ {
+ hdl_parameters
+ {
+ data_width = "32";
+ bank_width = "4";
+ row_width = "12";
+ column_width = "8";
+ clk_mhz = "120";
+ }
+ }
+ SIMULATION
+ {
+ DISPLAY
+ {
+ }
+ }
+ SLAVE nios
+ {
+ SYSTEM_BUILDER_INFO
+ {
+ Bus_Type = "avalon";
+ Address_Group = "1";
+ Has_Clock = "0";
+ Address_Width = "-1";
+ Address_Alignment = "dynamic";
+ Data_Width = "8";
+ Has_Base_Address = "1";
+ Has_IRQ = "0";
+ Setup_Time = "0";
+ Hold_Time = "0";
+ Read_Wait_States = "peripheral_controlled";
+ Write_Wait_States = "peripheral_controlled";
+ Read_Latency = "0";
+ Maximum_Pending_Read_Transactions = "9";
+ Active_CS_Through_Read_Latency = "0";
+ Is_Printable_Device = "1";
+ Is_Memory_Device = "1";
+ Is_Readable = "1";
+ Is_Writable = "1";
+ Minimum_Uninterrupted_Run_Length = "1";
+ }
+ COMPONENT_BUILDER
+ {
+ AVS_SETTINGS
+ {
+ Setup_Value = "0";
+ Read_Wait_Value = "1";
+ Write_Wait_Value = "1";
+ Hold_Value = "0";
+ Timing_Units = "cycles";
+ Read_Latency_Value = "0";
+ Minimum_Arbitration_Shares = "1";
+ Active_CS_Through_Read_Latency = "0";
+ Max_Pending_Read_Transactions_Value = "9";
+ Address_Alignment = "dynamic";
+ Is_Printable_Device = "1";
+ interface_name = "Avalon Slave";
+ external_wait = "1";
+ Is_Memory_Device = "1";
+ }
+ }
+ PORT_WIRING
+ {
+ PORT avs_nios_chipselect
+ {
+ width = "1";
+ width_expression = "";
+ direction = "input";
+ type = "chipselect";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_address
+ {
+ width = "-1";
+ width_expression = "((((bank_width + row_width) + column_width) - 1)) - (0) + 1";
+ direction = "input";
+ type = "address";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_byteenable
+ {
+ width = "-1";
+ width_expression = "(((data_width / 8) - 1)) - (0) + 1";
+ direction = "input";
+ type = "byteenable";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_writedata
+ {
+ width = "-1";
+ width_expression = "((data_width - 1)) - (0) + 1";
+ direction = "input";
+ type = "writedata";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_write
+ {
+ width = "1";
+ width_expression = "";
+ direction = "input";
+ type = "write";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_read
+ {
+ width = "1";
+ width_expression = "";
+ direction = "input";
+ type = "read";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_waitrequest
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "waitrequest";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_readdata
+ {
+ width = "-1";
+ width_expression = "((data_width - 1)) - (0) + 1";
+ direction = "output";
+ type = "readdata";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_readdatavalid
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "readdatavalid";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ }
+ }
+ }
+ USER_INTERFACE
+ {
+ USER_LABELS
+ {
+ name = "sdram_ctrl";
+ technology = "Opencores";
+ }
+ WIZARD_UI the_wizard_ui
+ {
+ title = "sdram_ctrl - {{ $MOD }}";
+ CONTEXT
+ {
+ H = "WIZARD_SCRIPT_ARGUMENTS/hdl_parameters";
+ M = "";
+ SBI_global_signals = "SYSTEM_BUILDER_INFO";
+ SBI_nios = "SLAVE nios/SYSTEM_BUILDER_INFO";
+ # The following signals have parameterized widths:
+ PORT_sdram_ba = "PORT_WIRING/PORT sdram_ba";
+ PORT_sdram_addr = "PORT_WIRING/PORT sdram_addr";
+ PORT_sdram_dq = "PORT_WIRING/PORT sdram_dq";
+ PORT_sdram_dqm = "PORT_WIRING/PORT sdram_dqm";
+ PORT_avs_nios_address = "SLAVE nios/PORT_WIRING/PORT avs_nios_address";
+ PORT_avs_nios_byteenable = "SLAVE nios/PORT_WIRING/PORT avs_nios_byteenable";
+ PORT_avs_nios_writedata = "SLAVE nios/PORT_WIRING/PORT avs_nios_writedata";
+ PORT_avs_nios_readdata = "SLAVE nios/PORT_WIRING/PORT avs_nios_readdata";
+ }
+ PAGES main
+ {
+ PAGE 1
+ {
+ align = "left";
+ title = "sdram_ctrl 1.1 Settings";
+ layout = "vertical";
+ TEXT
+ {
+ title = "Built on: 2006.09.25.10:24:12";
+ }
+ TEXT
+ {
+ title = "Class name: sdram_ctrl";
+ }
+ TEXT
+ {
+ title = "Class version: 1.1";
+ }
+ TEXT
+ {
+ title = "Component name: sdram_ctrl";
+ }
+ TEXT
+ {
+ title = "Component Group: Opencores";
+ }
+ GROUP parameters
+ {
+ title = "Parameters";
+ layout = "form";
+ align = "left";
+ EDIT e1
+ {
+ id = "data_width";
+ editable = "1";
+ title = "data_width:";
+ columns = "40";
+ tooltip = "default value: 32";
+ DATA
+ {
+ $H/data_width = "$";
+ }
+ q = "'";
+ warning = "{{ if(!(regexp('ugly_'+$H/data_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/data_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/data_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/data_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/data_width,'ugly_-?[0-9]+')))'data_width must be numeric constant, not '+$H/data_width; }}";
+ }
+ EDIT e2
+ {
+ id = "bank_width";
+ editable = "1";
+ title = "bank_width:";
+ columns = "40";
+ tooltip = "default value: 4";
+ DATA
+ {
+ $H/bank_width = "$";
+ }
+ q = "'";
+ warning = "{{ if(!(regexp('ugly_'+$H/bank_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/bank_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/bank_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/bank_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/bank_width,'ugly_-?[0-9]+')))'bank_width must be numeric constant, not '+$H/bank_width; }}";
+ }
+ EDIT e3
+ {
+ id = "row_width";
+ editable = "1";
+ title = "row_width:";
+ columns = "40";
+ tooltip = "default value: 12";
+ DATA
+ {
+ $H/row_width = "$";
+ }
+ q = "'";
+ warning = "{{ if(!(regexp('ugly_'+$H/row_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/row_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/row_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/row_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/row_width,'ugly_-?[0-9]+')))'row_width must be numeric constant, not '+$H/row_width; }}";
+ }
+ EDIT e4
+ {
+ id = "column_width";
+ editable = "1";
+ title = "column_width:";
+ columns = "40";
+ tooltip = "default value: 8";
+ DATA
+ {
+ $H/column_width = "$";
+ }
+ q = "'";
+ warning = "{{ if(!(regexp('ugly_'+$H/column_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/column_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/column_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/column_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/column_width,'ugly_-?[0-9]+')))'column_width must be numeric constant, not '+$H/column_width; }}";
+ }
+ EDIT e5
+ {
+ id = "clk_mhz";
+ editable = "1";
+ title = "clk_mhz:";
+ columns = "40";
+ tooltip = "default value: 120";
+ DATA
+ {
+ $H/clk_mhz = "$";
+ }
+ q = "'";
+ warning = "{{ if(!(regexp('ugly_'+$H/clk_mhz,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/clk_mhz,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/clk_mhz,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/clk_mhz,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/clk_mhz,'ugly_-?[0-9]+')))'clk_mhz must be numeric constant, not '+$H/clk_mhz; }}";
+ }
+ }
+ GROUP variable_port_widths
+ {
+ # This group is for display only, to preview parameterized port widths
+ title = "Parameterized Signal Widths";
+ layout = "form";
+ align = "left";
+ EDIT sdram_ba_width
+ {
+ id = "sdram_ba_width";
+ editable = "0";
+ title = "sdram_ba[((bank_width - 1)) - (0) + 1]:";
+ tooltip = "sdram_ba[((bank_width - 1)) - (0) + 1]
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_ba/width = (int((( ( $H/bank_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_ba/width = "$"; + } + warning = "{{ if($PORT_sdram_ba/width <= 0)('width of sdram_ba must be greater than zero' ) }}"; + } + EDIT sdram_addr_width + { + id = "sdram_addr_width"; + editable = "0"; + title = "sdram_addr[((row_width - 1)) - (0) + 1]:"; + tooltip = "sdram_addr[((row_width - 1)) - (0) + 1]
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_addr/width = (int((( ( $H/row_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_addr/width = "$"; + } + warning = "{{ if($PORT_sdram_addr/width <= 0)('width of sdram_addr must be greater than zero' ) }}"; + } + EDIT sdram_dq_width + { + id = "sdram_dq_width"; + editable = "0"; + title = "sdram_dq[((data_width - 1)) - (0) + 1]:"; + tooltip = "sdram_dq[((data_width - 1)) - (0) + 1]
direction: inout
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_dq/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_dq/width = "$"; + } + warning = "{{ if($PORT_sdram_dq/width <= 0)('width of sdram_dq must be greater than zero' ) }}"; + } + EDIT sdram_dqm_width + { + id = "sdram_dqm_width"; + editable = "0"; + title = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]:"; + tooltip = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_dqm/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_dqm/width = "$"; + } + warning = "{{ if($PORT_sdram_dqm/width <= 0)('width of sdram_dqm must be greater than zero' ) }}"; + } + EDIT avs_nios_address_width + { + id = "avs_nios_address_width"; + editable = "0"; + title = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]:"; + tooltip = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]
direction: input
signal type: address"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_address/width = (int((((( ( $H/bank_width ) + ( $H/row_width ) ) + ( $H/column_width ) ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Address_Width = $PORT_avs_nios_address/width; }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_address/width = "$"; + } + warning = "{{ if($PORT_avs_nios_address/width <= 0)('width of avs_nios_address must be greater than zero' ) }}"; + } + EDIT avs_nios_byteenable_width + { + id = "avs_nios_byteenable_width"; + editable = "0"; + title = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]:"; + tooltip = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]
direction: input
signal type: byteenable"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_byteenable/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_byteenable/width = "$"; + } + warning = "{{ if($PORT_avs_nios_byteenable/width <= 0)('width of avs_nios_byteenable must be greater than zero' ) }}"; + } + EDIT avs_nios_writedata_width + { + id = "avs_nios_writedata_width"; + editable = "0"; + title = "avs_nios_writedata[((data_width - 1)) - (0) + 1]:"; + tooltip = "avs_nios_writedata[((data_width - 1)) - (0) + 1]
direction: input
signal type: writedata"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_writedata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_writedata/width - 1) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_writedata/width = "$"; + } + warning = "{{ if($PORT_avs_nios_writedata/width <= 0)('width of avs_nios_writedata must be greater than zero' ) }}"; + } + EDIT avs_nios_readdata_width + { + id = "avs_nios_readdata_width"; + editable = "0"; + title = "avs_nios_readdata[((data_width - 1)) - (0) + 1]:"; + tooltip = "avs_nios_readdata[((data_width - 1)) - (0) + 1]
direction: output
signal type: readdata"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_readdata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_readdata/width - 1) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_readdata/width = "$"; + } + warning = "{{ if($PORT_avs_nios_readdata/width <= 0)('width of avs_nios_readdata must be greater than zero' ) }}"; + } + } + } + } + } + } + SOPC_Builder_Version = "5.10"; + COMPONENT_BUILDER + { + HDL_PARAMETERS + { + # generated by CBDocument.getParameterContainer + # used only by Component Editor + HDL_PARAMETER data_width + { + parameter_name = "data_width"; + type = "integer"; + default_value = "32"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER bank_width + { + parameter_name = "bank_width"; + type = "integer"; + default_value = "4"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER row_width + { + parameter_name = "row_width"; + type = "integer"; + default_value = "12"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER column_width + { + parameter_name = "column_width"; + type = "integer"; + default_value = "8"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER clk_mhz + { + parameter_name = "clk_mhz"; + type = "integer"; + default_value = "120"; + editable = "1"; + tooltip = ""; + } + } + SW_FILES + { + } + built_on = "2006.09.25.10:24:12"; + CACHED_HDL_INFO + { + # cached hdl info, emitted by CBFrameRealtime.getDocumentCachedHDLInfoSection + # used only by Component Builder + FILE sdram_ctrl.vhd + { + file_mod = "Mon Sep 18 18:08:50 EEST 2006"; + quartus_map_start = "Mon Sep 25 10:22:36 EEST 2006"; + quartus_map_finished = "Mon Sep 25 10:22:58 EEST 2006"; + #found 1 valid modules + WRAPPER sdram_ctrl + { + CLASS sdram_ctrl + { + CB_GENERATOR + { + HDL_FILES + { + FILE + { + use_in_simulation = "1"; + use_in_synthesis = "1"; + filepath = "H:/Work/Home_stuff/opencores/sdram_ctrl/src/sdram_ctrl.vhd"; + } + } + top_module_name = "sdram_ctrl"; + emit_system_h = "0"; + LIBRARIES + { + library = "ieee.std_logic_1164.all"; + library = "ieee.numeric_std.all"; + library = "altera_mf.altera_mf_components.all"; + library = "std.standard.all"; + } + } + MODULE_DEFAULTS global_signals + { + class = "sdram_ctrl"; + class_version = "1.0"; + SYSTEM_BUILDER_INFO + { + Instantiate_In_System_Module = "1"; + } + SLAVE nios + { + SYSTEM_BUILDER_INFO + { + Bus_Type = "avalon"; + } + PORT_WIRING + { + PORT avs_nios_chipselect + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "chipselect"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_address + { + width = "-1"; + width_expression = "((((bank_width + row_width) + column_width) - 1)) - (0) + 1"; + direction = "input"; + type = "address"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_byteenable + { + width = "-1"; + width_expression = "(((data_width / 8) - 1)) - (0) + 1"; + direction = "input"; + type = "byteenable"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_writedata + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "input"; + type = "writedata"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_write + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "write"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_read + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "read"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_waitrequest + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "waitrequest"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_readdata + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "output"; + type = "readdata"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_readdatavalid + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "readdatavalid"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + SLAVE avalon_slave_0 + { + SYSTEM_BUILDER_INFO + { + Bus_Type = "avalon"; + } + PORT_WIRING + { + PORT sdram_cke + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_ba + { + width = "-1"; + width_expression = "((bank_width - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_addr + { + width = "-1"; + width_expression = "((row_width - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_cs_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_ras_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_cas_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_we_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_dq + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "inout"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_dqm + { + width = "-1"; + width_expression = "(((data_width / 8) - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + PORT_WIRING + { + PORT clk + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "clk"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT reset + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "reset"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + USER_INTERFACE + { + USER_LABELS + { + name = "sdram_ctrl"; + technology = "imported components"; + } + } + SOPC_Builder_Version = "0.0"; + COMPONENT_BUILDER + { + HDL_PARAMETERS + { + # generated by CBDocument.getParameterContainer + # used only by Component Editor + HDL_PARAMETER data_width + { + parameter_name = "data_width"; + type = "integer"; + default_value = "32"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER bank_width + { + parameter_name = "bank_width"; + type = "integer"; + default_value = "4"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER row_width + { + parameter_name = "row_width"; + type = "integer"; + default_value = "12"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER column_width + { + parameter_name = "column_width"; + type = "integer"; + default_value = "8"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER clk_mhz + { + parameter_name = "clk_mhz"; + type = "integer"; + default_value = "120"; + editable = "1"; + tooltip = ""; + } + } + } + } + } + } + } + } + ASSOCIATED_FILES + { + Add_Program = "the_wizard_ui"; + Edit_Program = "the_wizard_ui"; + Generator_Program = "cb_generator.pl"; + } +} Index: sdram_ctrl/trunk =================================================================== --- sdram_ctrl/trunk (nonexistent) +++ sdram_ctrl/trunk (revision 8)
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_ba/width = (int((( ( $H/bank_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_ba/width = "$"; + } + warning = "{{ if($PORT_sdram_ba/width <= 0)('width of sdram_ba must be greater than zero' ) }}"; + } + EDIT sdram_addr_width + { + id = "sdram_addr_width"; + editable = "0"; + title = "sdram_addr[((row_width - 1)) - (0) + 1]:"; + tooltip = "sdram_addr[((row_width - 1)) - (0) + 1]
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_addr/width = (int((( ( $H/row_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_addr/width = "$"; + } + warning = "{{ if($PORT_sdram_addr/width <= 0)('width of sdram_addr must be greater than zero' ) }}"; + } + EDIT sdram_dq_width + { + id = "sdram_dq_width"; + editable = "0"; + title = "sdram_dq[((data_width - 1)) - (0) + 1]:"; + tooltip = "sdram_dq[((data_width - 1)) - (0) + 1]
direction: inout
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_dq/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_dq/width = "$"; + } + warning = "{{ if($PORT_sdram_dq/width <= 0)('width of sdram_dq must be greater than zero' ) }}"; + } + EDIT sdram_dqm_width + { + id = "sdram_dqm_width"; + editable = "0"; + title = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]:"; + tooltip = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_dqm/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_dqm/width = "$"; + } + warning = "{{ if($PORT_sdram_dqm/width <= 0)('width of sdram_dqm must be greater than zero' ) }}"; + } + EDIT avs_nios_address_width + { + id = "avs_nios_address_width"; + editable = "0"; + title = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]:"; + tooltip = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]
direction: input
signal type: address"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_address/width = (int((((( ( $H/bank_width ) + ( $H/row_width ) ) + ( $H/column_width ) ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Address_Width = $PORT_avs_nios_address/width; }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_address/width = "$"; + } + warning = "{{ if($PORT_avs_nios_address/width <= 0)('width of avs_nios_address must be greater than zero' ) }}"; + } + EDIT avs_nios_byteenable_width + { + id = "avs_nios_byteenable_width"; + editable = "0"; + title = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]:"; + tooltip = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]
direction: input
signal type: byteenable"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_byteenable/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_byteenable/width = "$"; + } + warning = "{{ if($PORT_avs_nios_byteenable/width <= 0)('width of avs_nios_byteenable must be greater than zero' ) }}"; + } + EDIT avs_nios_writedata_width + { + id = "avs_nios_writedata_width"; + editable = "0"; + title = "avs_nios_writedata[((data_width - 1)) - (0) + 1]:"; + tooltip = "avs_nios_writedata[((data_width - 1)) - (0) + 1]
direction: input
signal type: writedata"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_writedata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_writedata/width - 1) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_writedata/width = "$"; + } + warning = "{{ if($PORT_avs_nios_writedata/width <= 0)('width of avs_nios_writedata must be greater than zero' ) }}"; + } + EDIT avs_nios_readdata_width + { + id = "avs_nios_readdata_width"; + editable = "0"; + title = "avs_nios_readdata[((data_width - 1)) - (0) + 1]:"; + tooltip = "avs_nios_readdata[((data_width - 1)) - (0) + 1]
direction: output
signal type: readdata"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_readdata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_readdata/width - 1) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_readdata/width = "$"; + } + warning = "{{ if($PORT_avs_nios_readdata/width <= 0)('width of avs_nios_readdata must be greater than zero' ) }}"; + } + } + } + } + } + } + SOPC_Builder_Version = "5.10"; + COMPONENT_BUILDER + { + HDL_PARAMETERS + { + # generated by CBDocument.getParameterContainer + # used only by Component Editor + HDL_PARAMETER data_width + { + parameter_name = "data_width"; + type = "integer"; + default_value = "32"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER bank_width + { + parameter_name = "bank_width"; + type = "integer"; + default_value = "4"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER row_width + { + parameter_name = "row_width"; + type = "integer"; + default_value = "12"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER column_width + { + parameter_name = "column_width"; + type = "integer"; + default_value = "8"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER clk_mhz + { + parameter_name = "clk_mhz"; + type = "integer"; + default_value = "120"; + editable = "1"; + tooltip = ""; + } + } + SW_FILES + { + } + built_on = "2006.09.25.10:24:12"; + CACHED_HDL_INFO + { + # cached hdl info, emitted by CBFrameRealtime.getDocumentCachedHDLInfoSection + # used only by Component Builder + FILE sdram_ctrl.vhd + { + file_mod = "Mon Sep 18 18:08:50 EEST 2006"; + quartus_map_start = "Mon Sep 25 10:22:36 EEST 2006"; + quartus_map_finished = "Mon Sep 25 10:22:58 EEST 2006"; + #found 1 valid modules + WRAPPER sdram_ctrl + { + CLASS sdram_ctrl + { + CB_GENERATOR + { + HDL_FILES + { + FILE + { + use_in_simulation = "1"; + use_in_synthesis = "1"; + filepath = "H:/Work/Home_stuff/opencores/sdram_ctrl/src/sdram_ctrl.vhd"; + } + } + top_module_name = "sdram_ctrl"; + emit_system_h = "0"; + LIBRARIES + { + library = "ieee.std_logic_1164.all"; + library = "ieee.numeric_std.all"; + library = "altera_mf.altera_mf_components.all"; + library = "std.standard.all"; + } + } + MODULE_DEFAULTS global_signals + { + class = "sdram_ctrl"; + class_version = "1.0"; + SYSTEM_BUILDER_INFO + { + Instantiate_In_System_Module = "1"; + } + SLAVE nios + { + SYSTEM_BUILDER_INFO + { + Bus_Type = "avalon"; + } + PORT_WIRING + { + PORT avs_nios_chipselect + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "chipselect"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_address + { + width = "-1"; + width_expression = "((((bank_width + row_width) + column_width) - 1)) - (0) + 1"; + direction = "input"; + type = "address"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_byteenable + { + width = "-1"; + width_expression = "(((data_width / 8) - 1)) - (0) + 1"; + direction = "input"; + type = "byteenable"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_writedata + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "input"; + type = "writedata"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_write + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "write"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_read + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "read"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_waitrequest + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "waitrequest"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_readdata + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "output"; + type = "readdata"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_readdatavalid + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "readdatavalid"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + SLAVE avalon_slave_0 + { + SYSTEM_BUILDER_INFO + { + Bus_Type = "avalon"; + } + PORT_WIRING + { + PORT sdram_cke + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_ba + { + width = "-1"; + width_expression = "((bank_width - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_addr + { + width = "-1"; + width_expression = "((row_width - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_cs_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_ras_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_cas_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_we_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_dq + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "inout"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_dqm + { + width = "-1"; + width_expression = "(((data_width / 8) - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + PORT_WIRING + { + PORT clk + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "clk"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT reset + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "reset"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + USER_INTERFACE + { + USER_LABELS + { + name = "sdram_ctrl"; + technology = "imported components"; + } + } + SOPC_Builder_Version = "0.0"; + COMPONENT_BUILDER + { + HDL_PARAMETERS + { + # generated by CBDocument.getParameterContainer + # used only by Component Editor + HDL_PARAMETER data_width + { + parameter_name = "data_width"; + type = "integer"; + default_value = "32"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER bank_width + { + parameter_name = "bank_width"; + type = "integer"; + default_value = "4"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER row_width + { + parameter_name = "row_width"; + type = "integer"; + default_value = "12"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER column_width + { + parameter_name = "column_width"; + type = "integer"; + default_value = "8"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER clk_mhz + { + parameter_name = "clk_mhz"; + type = "integer"; + default_value = "120"; + editable = "1"; + tooltip = ""; + } + } + } + } + } + } + } + } + ASSOCIATED_FILES + { + Add_Program = "the_wizard_ui"; + Edit_Program = "the_wizard_ui"; + Generator_Program = "cb_generator.pl"; + } +} Index: sdram_ctrl/trunk =================================================================== --- sdram_ctrl/trunk (nonexistent) +++ sdram_ctrl/trunk (revision 8)
sdram_ctrl/trunk
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: sdram_ctrl/web_uploads
===================================================================
--- sdram_ctrl/web_uploads (nonexistent)
+++ sdram_ctrl/web_uploads (revision 8)
sdram_ctrl/web_uploads
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: sdram_ctrl/branches
===================================================================
--- sdram_ctrl/branches (nonexistent)
+++ sdram_ctrl/branches (revision 8)
sdram_ctrl/branches
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: sdram_ctrl/tags/V10/doc/sdram_ctrl.sxw
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: sdram_ctrl/tags/V10/doc/sdram_ctrl.sxw
===================================================================
--- sdram_ctrl/tags/V10/doc/sdram_ctrl.sxw (nonexistent)
+++ sdram_ctrl/tags/V10/doc/sdram_ctrl.sxw (revision 8)
sdram_ctrl/tags/V10/doc/sdram_ctrl.sxw
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: sdram_ctrl/tags/V10/src/sdram_ctrl.vhd
===================================================================
--- sdram_ctrl/tags/V10/src/sdram_ctrl.vhd (nonexistent)
+++ sdram_ctrl/tags/V10/src/sdram_ctrl.vhd (revision 8)
@@ -0,0 +1,441 @@
+------------------------------------------------------------------
+--
+-- sdram_ctrl.vhd
+--
+-- Module Description:
+-- SDRAM small&fast controller
+--
+--
+-- To Do:
+-- multichipselect support
+-- configurable times
+-- nios simulation support
+--
+-- Author(s):
+-- Aleksey Kuzmenok, ntpqa@opencores.org
+--
+------------------------------------------------------------------
+--
+-- Copyright (C) 2006 Aleksey Kuzmenok and OPENCORES.ORG
+--
+-- This module is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU Lesser General Public
+-- License as published by the Free Software Foundation; either
+-- version 2.1 of the License, or (at your option) any later version.
+--
+-- This module is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+-- Lesser General Public License for more details.
+--
+-- You should have received a copy of the GNU Lesser General Public
+-- License along with this software; if not, write to the Free Software
+-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+--
+------------------------------------------------------------------
+-- Test results
+-- FPGA SDRAM CLK (not less than)
+-- EP1C12XXXXC8 MT48LC4M32B2TG-7:G 125 MHz
+-- EP1C6XXXXC8 IS42S16100C1-7TL 125 MHz
+--
+------------------------------------------------------------------
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+USE ieee.numeric_std.ALL;
+LIBRARY altera_mf;
+USE altera_mf.altera_mf_components.all;
+
+entity sdram_ctrl is
+ generic(
+ DATA_WIDTH: integer:=32;
+ BANK_WIDTH: integer:=4;
+ ROW_WIDTH: integer:=12;
+ COLUMN_WIDTH: integer:=8;
+
+ clk_MHz: integer:=120
+ );
+ port(
+ signal clk : IN STD_LOGIC;
+ signal reset : IN STD_LOGIC;
+
+ -- IMPORTANT: for this Avalon(tm) interface
+ -- 'Minimum Arbitration Shares'=1
+ -- 'Max Pending Read Transactions'=9
+ signal avs_nios_chipselect : IN STD_LOGIC;
+ signal avs_nios_address : IN STD_LOGIC_VECTOR ((BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH-1) DOWNTO 0);
+ signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0);
+ signal avs_nios_writedata : IN STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal avs_nios_write : IN STD_LOGIC;
+ signal avs_nios_read : IN STD_LOGIC;
+ signal avs_nios_waitrequest : OUT STD_LOGIC;
+ signal avs_nios_readdata : OUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal avs_nios_readdatavalid : OUT STD_LOGIC;
+
+ -- global export signals
+ signal sdram_cke : OUT STD_LOGIC; -- This pin has fixed state '1'
+ signal sdram_ba : OUT STD_LOGIC_VECTOR ((BANK_WIDTH-1) DOWNTO 0);
+ signal sdram_addr : OUT STD_LOGIC_VECTOR ((ROW_WIDTH-1) DOWNTO 0);
+ signal sdram_cs_n : OUT STD_LOGIC; -- This pin has fixed state '0'
+ signal sdram_ras_n : OUT STD_LOGIC;
+ signal sdram_cas_n : OUT STD_LOGIC;
+ signal sdram_we_n : OUT STD_LOGIC;
+ signal sdram_dq : INOUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal sdram_dqm : OUT STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0)
+ );
+end sdram_ctrl;
+
+architecture behaviour of sdram_ctrl is
+
+ CONSTANT FIFO_WIDTH: integer:=BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
+
+ CONSTANT MODE: std_logic_vector(11 downto 0):="000000110000"; -- 1 word burst, CAS latency=3
+ -- Only two times are configurable
+ -- tINIT delay between powerup and load mode register = 100 us
+ -- tREF refresh period = 15.625 us (64ms/4096rows)
+ CONSTANT INIT_PAUSE_CLOCKS: integer:=(clk_MHz*10000)/91; -- 109.9 us just to be on the save side
+ CONSTANT REFRESH_PERIOD_CLOCKS: integer:=(clk_MHz*1000)/65; -- 15.384 us the same purpose
+ CONSTANT CAS_LATENCY: integer:=3; -- other latencies weren't been tested!
+
+ COMPONENT scfifo
+ GENERIC (
+ add_ram_output_register : STRING;
+ intended_device_family : STRING;
+ lpm_numwords : NATURAL;
+ lpm_showahead : STRING;
+ lpm_type : STRING;
+ lpm_width : NATURAL;
+ lpm_widthu : NATURAL;
+ overflow_checking : STRING;
+ underflow_checking : STRING;
+ use_eab : STRING
+ );
+ PORT (
+ rdreq : IN STD_LOGIC ;
+ empty : OUT STD_LOGIC ;
+ aclr : IN STD_LOGIC ;
+ clock : IN STD_LOGIC ;
+ q : OUT STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
+ wrreq : IN STD_LOGIC ;
+ data : IN STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
+ full : OUT STD_LOGIC
+ );
+ END COMPONENT;
+
+ -- If you ask me why there are so many states, I'll answer that all times are fixed.
+ -- The top speed for MT48LC4M32B2TG-7:G is 7 ns, therefore all times were based on it.
+ -- tRP PRECHARGE command period = 3 clocks
+ -- tRFC AUTO REFRESH period = 10 clocks
+ -- tMRD LOAD MODE REGISTER command to ACTIVE or REFRESH command = 2 clocks
+ -- tRCD ACTIVE to READ or WRITE delay = 3 clocks
+ -- tRAS ACTIVE to PRECHARGE command = 7 clocks
+ -- tRC ACTIVE to ACTIVE command period = 10 clocks
+ -- tWR2 Write recovery time = 2 clocks
+ type states is (
+ INIT0,INIT1,INIT2,INIT3,INIT4,INIT5,INIT6,INIT7,
+ INIT8,INIT9,INIT10,INIT11,INIT12,INIT13,INIT14,INIT15,
+ INIT16,INIT17,INIT18,INIT19,INIT20,INIT21,INIT22,INIT23,INIT24,
+ REFRESH0,REFRESH1,REFRESH2,REFRESH3,REFRESH4,REFRESH5,REFRESH6,REFRESH7,
+ REFRESH8,REFRESH9,REFRESH10,REFRESH11,REFRESH12,REFRESH13,REFRESH14,
+ ACTIVE0,ACTIVE1,ACTIVE2,ACTIVE3,ACTIVE4,
+ IDLE,READ0,WRITE0);
+ signal operation: states;
+
+ signal fifo_q: std_logic_vector((FIFO_WIDTH-1) downto 0);
+
+ signal init_counter: unsigned(15 downto 0):=to_unsigned(INIT_PAUSE_CLOCKS,16);
+ signal refresh_counter: unsigned(15 downto 0);
+ signal active_counter: unsigned(2 downto 0);
+ signal active_address: unsigned((BANK_WIDTH+ROW_WIDTH-1) downto 0);
+
+ signal bank: std_logic_vector((sdram_ba'length-1) downto 0);
+ signal row: std_logic_vector((sdram_addr'length-1) downto 0);
+ signal column: std_logic_vector((COLUMN_WIDTH-1) downto 0);
+ signal be: std_logic_vector((sdram_dqm'length-1) downto 0);
+ signal data: std_logic_vector((sdram_dq'length-1) downto 0);
+
+ signal do_init,do_refresh,do_active,read_is_active,ready,tRCD_not_expired: std_logic:='0';
+
+ signal fifo_rdreq,fifo_empty: std_logic;
+
+ signal read_latency: std_logic_vector(CAS_LATENCY downto 0);
+
+ signal fifo_data: std_logic_vector((FIFO_WIDTH-1) downto 0);
+ signal fifo_wrreq,fifo_wrfull: std_logic;
+
+ signal i_command : STD_LOGIC_VECTOR(4 downto 0);
+ CONSTANT NOP: STD_LOGIC_VECTOR(4 downto 0):="10111";
+ CONSTANT ACTIVE: STD_LOGIC_VECTOR(4 downto 0):="10011";
+ CONSTANT READ: STD_LOGIC_VECTOR(4 downto 0):="10101";
+ CONSTANT WRITE: STD_LOGIC_VECTOR(4 downto 0):="10100";
+ CONSTANT PRECHARGE: STD_LOGIC_VECTOR(4 downto 0):="10010";
+ CONSTANT AUTO_REFRESH: STD_LOGIC_VECTOR(4 downto 0):="10001";
+ CONSTANT LOAD_MODE_REGISTER: STD_LOGIC_VECTOR(4 downto 0):="10000";
+
+ signal i_address : STD_LOGIC_VECTOR((sdram_addr'length-1) DOWNTO 0);
+ signal i_bank : STD_LOGIC_VECTOR((sdram_ba'length-1) DOWNTO 0);
+ signal i_dqm : STD_LOGIC_VECTOR((sdram_dqm'length-1) DOWNTO 0);
+ signal i_data : STD_LOGIC_VECTOR((sdram_dq'length-1) DOWNTO 0);
+ attribute ALTERA_ATTRIBUTE : string;
+ attribute ALTERA_ATTRIBUTE of i_command : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_address : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_bank : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_dqm : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_data : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of avs_nios_readdata : signal is "FAST_INPUT_REGISTER=ON";
+begin
+ (sdram_cke,sdram_cs_n,sdram_ras_n,sdram_cas_n,sdram_we_n) <= i_command;
+ sdram_addr <= i_address;
+ sdram_ba <= i_bank;
+ sdram_dqm <= i_dqm;
+ sdram_dq <= i_data;
+
+ fifo_data<=avs_nios_address & avs_nios_writedata & avs_nios_byteenable & avs_nios_write & avs_nios_read;
+ fifo_wrreq<=(avs_nios_write or avs_nios_read) and avs_nios_chipselect and not fifo_wrfull;
+
+ avs_nios_waitrequest<=fifo_wrfull;
+
+ fifo_rdreq<=not fifo_empty and not do_refresh and not do_active and not read_is_active and ready;
+
+ do_active<='0' when active_address=unsigned((fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)))) else '1';
+ read_is_active<='1' when read_latency(CAS_LATENCY-1 downto 0)>"000" and fifo_q(1)='1' else '0';
+ ready<='1' when operation=IDLE or operation=READ0 or operation=WRITE0 else '0';
+
+ operation_machine:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ operation<=INIT0;
+ active_address<=(others=>'1');
+ elsif rising_edge(clk)
+ then
+
+ bank<=fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length));
+ row<=fifo_q((fifo_q'length-bank'length-1) downto (fifo_q'length-bank'length-row'length));
+ column<=fifo_q((column'length+data'length+be'length+2-1) downto (data'length+be'length+2));
+ data<=fifo_q((data'length+be'length+2-1) downto (be'length+2));
+ be<=fifo_q((be'length+2-1) downto 2);
+
+ case operation is
+ when INIT0=>
+ if do_init='1'
+ then operation<=INIT1;row(10)<='1';
+ end if;
+ when INIT1=>operation<=INIT2;
+ when INIT2=>operation<=INIT3;
+ when INIT3=>operation<=INIT4;
+ when INIT4=>operation<=INIT5;
+ when INIT5=>operation<=INIT6;
+ when INIT6=>operation<=INIT7;
+ when INIT7=>operation<=INIT8;
+ when INIT8=>operation<=INIT9;
+ when INIT9=>operation<=INIT10;
+ when INIT10=>operation<=INIT11;
+ when INIT11=>operation<=INIT12;
+ when INIT12=>operation<=INIT13;
+ when INIT13=>operation<=INIT14;
+ when INIT14=>operation<=INIT15;
+ when INIT15=>operation<=INIT16;
+ when INIT16=>operation<=INIT17;
+ when INIT17=>operation<=INIT18;
+ when INIT18=>operation<=INIT19;
+ when INIT19=>operation<=INIT20;
+ when INIT20=>operation<=INIT21;
+ when INIT21=>operation<=INIT22;
+ when INIT22=>operation<=INIT23;
+ when INIT23=>operation<=INIT24;row<=MODE((row'length-1) downto 0);
+ when INIT24=>operation<=IDLE;
+
+ when REFRESH0=>operation<=REFRESH1;
+ when REFRESH1=>operation<=REFRESH2;
+ when REFRESH2=>operation<=REFRESH3;
+ when REFRESH3=>operation<=REFRESH4;
+ when REFRESH4=>operation<=REFRESH5;
+ when REFRESH5=>operation<=REFRESH6;
+ when REFRESH6=>operation<=REFRESH7;
+ when REFRESH7=>operation<=REFRESH8;
+ when REFRESH8=>operation<=REFRESH9;
+ when REFRESH9=>operation<=REFRESH10;
+ when REFRESH10=>operation<=REFRESH11;
+ when REFRESH11=>operation<=REFRESH12;
+ when REFRESH12=>operation<=REFRESH13;
+ active_address<=unsigned(fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)));
+ when REFRESH13=>operation<=REFRESH14;
+ when REFRESH14=>operation<=IDLE;
+
+ when ACTIVE0=>operation<=ACTIVE1;
+ when ACTIVE1=>operation<=ACTIVE2;
+ when ACTIVE2=>operation<=ACTIVE3;
+ active_address<=unsigned(fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)));
+ when ACTIVE3=>operation<=ACTIVE4;
+ when ACTIVE4=>operation<=IDLE;
+
+ when others=>
+ if do_refresh='1'
+ then
+ if tRCD_not_expired='0' and operation=IDLE
+ then operation<=REFRESH0;row(10)<='1';
+ else operation<=IDLE;
+ end if;
+ elsif do_active='1'
+ then
+ if tRCD_not_expired='0' and operation=IDLE
+ then operation<=ACTIVE0;row(10)<='1';
+ else operation<=IDLE;
+ end if;
+ elsif fifo_empty='1'
+ then
+ operation<=IDLE;
+ elsif fifo_q(1)='1' --write
+ then
+ if read_latency(CAS_LATENCY-1 downto 0)>"000"
+ then operation<=IDLE;
+ else operation<=WRITE0;
+ end if;
+ elsif fifo_q(0)='1' --read
+ then
+ operation<=READ0;
+ end if;
+ end case;
+ end if;
+ end process;
+
+ control_latency:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ read_latency<=(others=>'0');
+ elsif rising_edge(clk)
+ then
+ read_latency<=std_logic_vector(unsigned(read_latency) SLL 1);
+ if operation=READ0
+ then read_latency(0)<='1';
+ else read_latency(0)<='0';
+ end if;
+ end if;
+ end process;
+ latch_readdata:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ avs_nios_readdata<=(others=>'0');
+ avs_nios_readdatavalid<='0';
+ elsif rising_edge(clk)
+ then
+ avs_nios_readdata<=sdram_dq;
+ avs_nios_readdatavalid<=read_latency(CAS_LATENCY);
+ end if;
+ end process;
+ initialization:process(reset,clk)
+ begin
+ if rising_edge(clk)
+ then
+ if init_counter>0
+ then
+ init_counter<=init_counter-1;
+ else do_init<='1';
+ end if;
+ end if;
+ end process;
+ refreshing:process(clk,reset)
+ begin
+ if reset='1'
+ then
+ refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
+ do_refresh<='0';
+ elsif rising_edge(clk)
+ then
+ if refresh_counter=to_unsigned(0,refresh_counter'length)
+ then refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
+ do_refresh<='1';
+ else refresh_counter<=refresh_counter-1;
+ end if;
+ if operation=REFRESH0 or operation=REFRESH5
+ then do_refresh<='0';
+ end if;
+ end if;
+ end process;
+ active_period:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ active_counter<=(others=>'0');
+ tRCD_not_expired<='0';
+ elsif rising_edge(clk)
+ then
+ if operation=ACTIVE3 or operation=REFRESH13
+ then active_counter<=to_unsigned(5,active_counter'length);
+ elsif active_counter>0
+ then active_counter<=active_counter-1;
+ end if;
+ end if;
+ if active_counter>0
+ then tRCD_not_expired<='1';
+ else tRCD_not_expired<='0';
+ end if;
+ end process;
+ latch_controls:process(clk,reset)
+ begin
+ if reset='1'
+ then
+ i_command<=NOP;
+ i_address<=(others=>'0');
+ i_bank<=(others=>'0');
+ i_dqm<=(others=>'0');
+ i_data<=(others=>'Z');
+ elsif rising_edge(clk)
+ then
+ i_command<=NOP;
+ i_bank<=bank;
+ i_address<=(others=>'0');
+ i_address((column'length-1) downto 0)<=column;
+ i_data<=(others=>'Z');
+ i_dqm<=(others=>'0');
+
+ case operation is
+ when INIT1|REFRESH0|ACTIVE0 =>
+ i_command<=PRECHARGE;
+ i_address<=row;
+ when INIT4|INIT14|REFRESH3 =>
+ i_command<=AUTO_REFRESH;
+ when INIT24=>
+ i_command<=LOAD_MODE_REGISTER;
+ i_address<=row;
+ when ACTIVE3|REFRESH13 =>
+ i_command<=ACTIVE;
+ i_address<=row;
+ when READ0 =>
+ i_command<=READ;
+ when WRITE0 =>
+ i_command<=WRITE;
+ i_dqm<=not be;
+ i_data<=data;
+ when OTHERS =>
+ end case;
+ end if;
+ end process;
+
+ fifo: scfifo
+ GENERIC MAP (
+ add_ram_output_register => "ON",
+ intended_device_family => "Cyclone",
+ lpm_numwords => 4,
+ lpm_showahead => "ON",
+ lpm_type => "scfifo",
+ lpm_width => FIFO_WIDTH,
+ lpm_widthu => 2,
+ overflow_checking => "ON",
+ underflow_checking => "ON",
+ use_eab => "ON"
+ )
+ PORT MAP (
+ rdreq => fifo_rdreq,
+ aclr => reset,
+ clock => clk,
+ wrreq => fifo_wrreq,
+ data => fifo_data,
+ empty => fifo_empty,
+ q => fifo_q,
+ full => fifo_wrfull
+ );
+end behaviour;
Index: sdram_ctrl/tags/V10/syn/sdram_ctrl/cb_generator.pl
===================================================================
--- sdram_ctrl/tags/V10/syn/sdram_ctrl/cb_generator.pl (nonexistent)
+++ sdram_ctrl/tags/V10/syn/sdram_ctrl/cb_generator.pl (revision 8)
@@ -0,0 +1,1159 @@
+# | file: cb_generator.pl
+# |
+# | This SOPC Builder Generator program is provided by
+# | the Component Builder application. It is copied
+# | straight across and is data-driven from its command
+# | line arguments and the PTF files referenced.
+# |
+# | Its purpose is to construct an HDL "wrapper" for
+# | a particular instance of a particular SOPC Builder
+# | peripheral. This wrapper resolves the instance
+# | name and any HDL parameterization.
+# |
+# +-------------------------------------------
+
+
+
+# +-------------------------------------------
+# |
+
+use strict;
+use format_conversion_utils;
+use ptf_parse;
+use wiz_utils;
+use europa_all;
+use run_system_command_utils;
+
+# |
+# +-------------------------------------------
+
+
+
+# +-------------------------------------------
+# |
+# | first pass: include all of generator_libarary.pm RIGHT HERE.
+# | dvb04.08.02
+# | then prune down to actual functionality.
+# |
+# | TODO: Rewrite this whole file into something readable
+# | this is much more confusing than I'm comfortable with. dvb04.
+# | (though it does seem to work.)
+# |
+
+my $DEBUG_DEFAULT_GEN = 1;
+
+#This is the global hash of arguments passed in by the generator program
+
+my $generator_hr = {
+ wrapper_args => {
+ make_wrapper => 0,
+ top_module_name => "",
+ simulate_hdl => 1,
+ ports => "",
+ },
+ class_ptf_hr => "",
+ module_ptf_hr => "",
+ system_ptf_hr => "",
+ language => "",
+ external_args => "",
+ external_args_hr => "",
+ project_path_widget => "__PROJECT_DIRECTORY__",
+ generator_mode => "silent",
+ };
+
+
+sub generator_print_verbose
+{
+ my ($info) = (@_);
+
+ if($generator_hr->{generator_mode} eq "verbose"){
+ print("cb_generator.pl: ".$info);
+ }
+}
+
+sub generator_enable_mode
+{
+ my ($mode) = (@_);
+ $generator_hr->{generator_mode} = $mode;
+}
+
+sub generator_get_system_ptf_handle
+{
+ return $generator_hr->{system_ptf_hr};
+}
+
+sub generator_get_language
+{
+ return $generator_hr->{language};
+}
+
+sub generator_get_class_ptf_handle
+{
+ return $generator_hr->{class_ptf_hr};
+}
+
+sub default_ribbit
+{
+ my ($arg) = (@_);
+ &ribbit("\n\n--Error: default_gen_lib: $arg\n");
+}
+
+
+sub _copy_files
+{
+ my ($dest_dir, $source_dir, @files) = (@_);
+ my $function_name;
+
+ #validate args
+ &default_ribbit("No target dir for function copy_files!")
+ unless ($dest_dir ne "");
+
+ &default_ribbit("No source dir for function copy_files!")
+ unless ($source_dir ne "");
+
+ &default_ribbit("No files for function copy_files!")
+ unless (@files != 0);
+
+
+ #check for valid directories
+ opendir (SDIR, $source_dir) or
+ &default_ribbit("can't open $source_dir !");
+
+ opendir (DDIR, $dest_dir) or
+ &default_ribbit("can't open $dest_dir !");
+
+
+ foreach my $source_file(@files){
+ # |
+ # | Separate out the source subdir and the source filename
+ # |
+ my $source_subdir = "";
+ my $source_filename = $source_file;
+
+ if($source_filename =~ /^(.*)\/(.*)$/) # break on last slash
+ {
+ $source_subdir = "/$1"; # embed its leading slash, for concatty
+ $source_filename = $2;
+ }
+
+ my $source_fullpath = "$source_dir$source_subdir/$source_filename";
+ my $dest_fullpath = "$dest_dir/$source_filename";
+
+ &Perlcopy($source_fullpath, $dest_fullpath);
+ &generator_print_verbose("Copying file: \"$source_fullpath\""
+ . " to \"$dest_fullpath\".\n");
+ }
+
+ closedir (SDIR);
+ closedir (DDIR);
+}
+
+
+sub get_module_wrapper_arg_hash_from_system_ptf_file
+{
+ my $module_ptf_hr = $generator_hr->{module_ptf_hr};
+
+ my @list_of_sections = ("MASTER","SLAVE","PORT_WIRING");
+ my @port_list;
+ foreach my $section(@list_of_sections){
+ my $number = get_child_count($module_ptf_hr, $section);
+
+ for(my $initial=0; $initial < $number; $initial++){
+
+ my $interface_section = get_child($module_ptf_hr, $initial, $section);
+ my $interface_section_name = get_data($interface_section);
+
+ my $port_wiring_section;
+ if($section ne "PORT_WIRING"){
+ $port_wiring_section =
+ get_child_by_path($module_ptf_hr, $section." ".$interface_section_name."/PORT_WIRING");
+ }else{
+ $port_wiring_section =
+ get_child_by_path($module_ptf_hr, $section);
+ }
+ my $num_ports = get_child_count($port_wiring_section, "PORT");
+ foreach(my $port_count = 0; $port_count < $num_ports; $port_count++){
+ my $port = get_child($port_wiring_section, $port_count, "PORT");
+
+ my %port_info_struct;
+ $port_info_struct{name} = get_data($port);
+ $port_info_struct{direction} = get_data_by_path($port, "direction");
+ $port_info_struct{width} = get_data_by_path($port, "width");
+ $port_info_struct{vhdl_record_name} = get_data_by_path($port, "vhdl_record_name");
+ $port_info_struct{vhdl_record_type} = get_data_by_path($port, "vhdl_record_type");
+
+ push(@port_list, \%port_info_struct);
+
+ }
+ }
+ }
+ $generator_hr->{wrapper_args}{ports} = \@port_list;
+}
+
+
+sub generator_make_module_wrapper
+{
+ my ($simulate_hdl, $top_module_name, $module_language) = (@_);
+
+ &default_ribbit("generator_make_module_wrapper: no arg0 passed in for simulate_hdl\n")
+ if($simulate_hdl eq '');
+
+ &default_ribbit("generator_make_module_wrapper: no arg1 passed in for top_module_name\n")
+ unless($top_module_name);
+
+ $generator_hr->{wrapper_args}{simulate_hdl} = $simulate_hdl;
+ $generator_hr->{wrapper_args}{top_module_name} = $top_module_name;
+ $generator_hr->{wrapper_args}{make_wrapper} = 1;
+ $generator_hr->{wrapper_args}{module_language} = $module_language;
+
+}
+
+
+
+
+# |
+# | recognize varous number forms,
+# | return 'h0123abcd-ish.
+# |
+sub turn_anything_into_appropriate_string($$$$)
+ {
+ my ($value,$type,$editable,$module_language) = (@_);
+
+ return $value if($value =~ /^\"/); # quoted string: unscathed
+ return $value if($type eq "string"); # string: anything is ok
+
+ return $value if(!$editable); # and you know, if you can't change it, keep it!
+
+
+ # |
+ # | first, convert to a number
+ # |
+ my $base = 10;
+ my $n = $value;
+ my $width = 32;
+ my $number = 0;
+
+ $value = lc($value); # lower case
+
+ if($value =~ /^([0-9]*)\'([hbo])(.*)$/)
+ {
+ # | tick notation: AOK for verilog
+ if($module_language eq "verilog")
+ {
+ $number = $value;
+ }
+ # |
+ # | note: at this point, we could notice if the
+ # | result should be vhdl binary, and convert
+ # | to that, avoiding the precision-losing
+ # | integer intermediary
+ # |
+ # | (alternatively, we could use a binary string
+ # | always as the intermediate form, rather than
+ # | a precision-losing int.)
+ # |
+ else
+ {
+ $width = $1;
+ my $baseletter = $2;
+ my $digits = $3;
+
+ if($baseletter eq "h")
+ {
+ $base = 16;
+ }
+ elsif($baseletter eq "b")
+ {
+ $base = 2;
+ }
+ elsif($baseletter eq "o") # must be
+ {
+ $base = 8;
+ }
+
+ $digits =~ s/[ _-]//g; # crush out dividing value
+
+ while(length($digits) > 0)
+ {
+ my $digit = substr($digits,0,1);
+ $digits = substr($digits,1);
+ my $digitvalue = hex($digit); # how handy
+ $number = $number * $base + $digitvalue;
+ }
+ }
+ }
+ elsif($value =~ /^0x(.*)$/)
+ {
+ $number = hex($1);
+ }
+ else # try for decimal
+ {
+ $number = int(1 * $value);
+ }
+
+ # |
+ # | ok, we have a number. If our target type
+ # | is "std_logic_vector(this downto that)"
+ # | for tricky VHDL, we
+ # | must quote a binary string out of it.
+ # |
+
+ if(($module_language eq "vhdl") and ($type =~ /^.*\((\d+) downto (\d+)\).*$/))
+ {
+ my ($high_bit,$low_bit) = ($1,$2);
+ my $binary = "";
+ for(my $bit = $low_bit; $bit <= $high_bit; $bit++)
+ {
+ $binary = ($number % 2) . $binary;
+ $number = int($number >> 1);
+ }
+
+ $number = '"' . $binary . '"';
+ }
+
+ return $number;
+ }
+
+#
+# return @array of vhdl libraries, if any, from the class.ptf
+sub get_libraries()
+{
+ my $class_ptf = generator_get_class_ptf_handle();
+ my @libraries;
+ my $libraries_ptf = get_child_by_path($class_ptf,"CLASS/CB_GENERATOR/LIBRARIES");
+
+ if($libraries_ptf)
+ {
+ my $library_count = get_child_count($libraries_ptf,"library");
+ for(my $i = 0; $i < $library_count; $i++)
+ {
+ my $library_ptf = get_child($libraries_ptf,$i,"library");
+ my $library_name = get_data($library_ptf);
+ push(@libraries,$library_name);
+ }
+ }
+
+ return @libraries;
+}
+
+
+
+sub _generator_make_module_wrapper
+{
+
+ my $wrapper_args = $generator_hr->{wrapper_args};
+ my $no_black_box = $wrapper_args->{simulate_hdl};
+ my $top_module_name = $wrapper_args->{top_module_name};
+ my $language = $generator_hr->{language};
+ my @external_args = @{$generator_hr->{external_args}};
+ my $module_ptf_hr = $generator_hr->{module_ptf_hr};
+
+ ### Build Module
+ my $project = e_project->new(@external_args);
+ my $top = $project->top();
+
+ # add the ports to the system module
+ my @ports;
+
+ foreach my $port_hash(@{$wrapper_args->{ports}}){
+ my $porto = e_port->new({
+ name => $port_hash->{name},
+ width => $port_hash->{width},
+ direction => $port_hash->{direction},
+ vhdl_record_name => $port_hash->{vhdl_record_name},
+ vhdl_record_type => $port_hash->{vhdl_record_type}
+ });
+ push(@ports, $porto);
+ }
+ $top->add_contents(@ports);
+
+
+
+
+
+ # +----------------------------------------
+ # | Get parameters from class.ptf
+ # | create @array of parameters, eacho
+ # | one like name=>, default=>, type=>,
+ # |
+ # | These are the definitions of parameters for
+ # | ANY instance of this module; we need to
+ # | have them in the "wrapee" module so that
+ # | when the system bus is knitted together
+ # | the parameter types can be properly used.
+ # |
+ # | (as it turns out, verilog doesnt need
+ # | them, but vhld does)
+ # |
+ # | dvb2004
+
+
+ my @e_hdl_parameters; # list of e_parameters
+
+ my $class_ptf = generator_get_class_ptf_handle();
+ my $hdl_parameter_definitions_ptf = get_child_by_path($class_ptf,"CLASS/COMPONENT_BUILDER/HDL_PARAMETERS");
+
+ my @libraries = get_libraries();
+
+ my $hdl_parameter_count = get_child_count($hdl_parameter_definitions_ptf,"HDL_PARAMETER");
+
+ my $module_language = $generator_hr->{wrapper_args}{module_language};
+
+ for(my $i = 0; $i < $hdl_parameter_count; $i++)
+ {
+ my $a_parameter = get_child($hdl_parameter_definitions_ptf,$i,"HDL_PARAMETER");
+ my $parameter_editable = get_data_by_path($a_parameter,"editable");
+ if($parameter_editable)
+ {
+ my $boring_name = get_data($a_parameter); # legal guinevere-ized
+ my $name = get_data_by_path($a_parameter,"parameter_name"); # original HDL name
+ my $default = get_data_by_path($a_parameter,"default_value");
+ my $type = get_data_by_path($a_parameter,"type");
+
+ $default = turn_anything_into_appropriate_string($default,$type,1,$module_language);
+
+ my $a_parameter = e_parameter->new
+ ({
+ name => $name,
+ default => $default,
+ type => $type
+ });
+
+ push (@e_hdl_parameters,$a_parameter);
+ }
+ }
+
+
+
+ # | and @e_hdl_parameters is used below in the wrapee module
+ # +--------------------------------------------
+
+ # +--------------------------------------------
+ # | Now, we build a "hdl_parameter_map", which is just
+ # | your basic hash table with keys (parameters)
+ # | and values (parameter values).
+ # |
+ # | these are the particular values for this instance.
+ # |
+
+ my %hdl_parameter_map;
+ my $module_ptf = $generator_hr->{module_ptf_hr};
+ my $hdl_parameters_ptf =
+ get_child_by_path($module_ptf,"WIZARD_SCRIPT_ARGUMENTS/hdl_parameters");
+
+ my $child_count = get_child_count($hdl_parameters_ptf);
+
+ for(my $i = 0; $i < $child_count; $i++)
+ {
+ my $a_parameter = get_child($hdl_parameters_ptf,$i);
+
+ my $boring_name = get_name($a_parameter);
+ my $value = get_data($a_parameter);
+
+ # refer back to the original HDL name...
+ my $parameter_definition_ptf = get_child_by_path($hdl_parameter_definitions_ptf,"HDL_PARAMETER $boring_name");
+ my $parameter_name = get_data_by_path($parameter_definition_ptf,"parameter_name");
+ my $parameter_type = get_data_by_path($parameter_definition_ptf,"type");
+ my $parameter_editable = get_data_by_path($parameter_definition_ptf,"editable");
+
+ $value = turn_anything_into_appropriate_string($value,$parameter_type,$parameter_editable,$module_language);
+
+ # |
+ # | our internal _dummy assignment shows up here
+ # | without a corresponding hdl entry. we
+ # | ignore it.
+ # |
+
+ if(($parameter_name ne "") and $parameter_editable)
+ {
+ $hdl_parameter_map{$parameter_name} = $value;
+ }
+ }
+
+ my $wrapee_module;
+ $wrapee_module = e_module->new({
+ name => $top_module_name,
+ contents => [@ports,@e_hdl_parameters],
+ do_black_box => 0,
+ do_ptf => 0,
+ _hdl_generated => 1,
+ _explicitly_empty_module => 1,
+ });
+
+ # VHDL Libraries, from PTF file...
+ $wrapee_module->add_vhdl_libraries(@libraries);
+ $top->add_vhdl_libraries(@libraries);
+
+
+ $top->add_contents (
+ e_instance->new({
+ module => $wrapee_module,
+ parameter_map => \%hdl_parameter_map
+ }),
+ );
+
+ $project->top()->do_ptf(0);
+ $project->do_write_ptf(0);
+
+
+ my $module_file = $project->_target_module_name().".v";
+ $module_file = $project->_target_module_name().".vhd"
+ if($language eq "vhdl");
+
+ $module_file = $generator_hr->{project_path_widget}."/".$module_file;
+ &generator_set_files_in_system_ptf("Synthesis_HDL_Files", ($module_file));
+ $project->output();
+
+
+ # if you don't want a simulation model, you don't get a simulation model
+ if($no_black_box eq "0")
+ {
+ my $black_project = e_project->new(@external_args);
+ $black_project->_target_module_name($top_module_name);
+ my $black_top = $black_project->top();
+
+
+
+ $black_top->add_contents(@ports);
+ my $black_top_instance;
+ $black_top_instance = e_module->new({
+ name => $wrapper_args->{top_module_name}."_bb",
+ contents => [@ports],
+ do_black_box => 1,
+ do_ptf => 0,
+ _hdl_generated => 0,
+ _explicitly_empty_module => 1,
+ });
+
+ $black_top->add_contents (
+ e_instance->new({
+ module => $black_top_instance,
+ }),
+ );
+
+
+
+
+ $black_project->top()->do_ptf(0);
+ $black_project->do_write_ptf(0);
+
+ my $black_module_file = $black_project->_target_module_name().".v";
+ $black_module_file = $black_project->_target_module_name().".vhd"
+ if($language eq "vhdl");
+
+
+ $black_module_file = $generator_hr->{project_path_widget}."/".$black_module_file;
+ &generator_set_files_in_system_ptf("Simulation_HDL_Files", ($black_module_file));
+
+# &set_data_by_path($module_ptf_hr, "HDL_INFO/Simulation_HDL_Files", $black_module_file);
+
+
+ $black_project->output();
+ }
+
+}
+
+####
+# Args: $file_type : "synthesis", "synthesis_only", "simulation"
+# @file_list : an array of files. This list of files is assumed to be relative to the
+# component's directory
+
+
+my $decoder_ring_hr = {
+ quartus_only => {
+ copy => 1,
+ copy_to => "project",
+ ptf_set => 0,
+ },
+ simulation_only => {
+ copy => 1,
+ copy_to => "simulation",
+ ptf_set => 1,
+ ptf_section => "Simulation_HDL_Files",
+ },
+ simulation_and_quartus => {
+ copy => 1,
+ copy_to => "project",
+ ptf_set => 1,
+ ptf_section => "Synthesis_HDL_Files",
+ },
+ precompiled_simulation_files => {
+ copy => 0,
+ ptf_set => 1,
+ ptf_section => "Precompiled_Simulation_Library_Files",
+ },
+ };
+
+
+
+
+sub generator_copy_files_and_set_system_ptf
+{
+ my ($hdl_section, @file_list) = (@_);
+
+ my $ptf_path_prefix = "";
+ my $external_args_hr = $generator_hr->{external_args_hr};
+ my @new_file_array;
+
+ #validate first
+ my $decoder_hash = $decoder_ring_hr->{$hdl_section};
+ &default_ribbit("generator_copy_files_and_set_system_ptf: No understood HDL section passed in for first arg\n")
+ unless($decoder_ring_hr->{$hdl_section} ne "");
+
+ &generator_print_verbose("generator_copy_files_and_set_system_ptf: copying files for section ".$hdl_section."\n");
+
+ #copy second
+ my @new_file_array;
+
+ # If we need to copy over some files, then we need to make sure we are
+ # keeping track of what files we copy over.
+ # Otherwise, we just need to keep track of the files that the user has asked to copy over
+ # and use these instead.
+ if($decoder_hash->{copy}){
+ my $copy_to_location;
+ my $copy_from_location;
+
+ if($decoder_hash->{copy_to} eq "project"){
+ $copy_to_location = $external_args_hr->{system_directory};
+ }elsif($decoder_hash->{copy_to} eq "simulation"){
+ $copy_to_location = $external_args_hr->{system_sim_dir};
+ }else{
+ &default_ribbit("generator_copy_files_and_set_system_ptf: No understood copy files to location\n");
+ }
+
+ $copy_from_location = $external_args_hr->{class_directory};
+ @new_file_array = &generator_copy_files($copy_to_location, $copy_from_location, @file_list);
+ }else{
+ @new_file_array = @file_list;
+ }
+
+ #scribble on PTF hash last
+ if($decoder_hash->{ptf_set}){
+
+ if($decoder_hash->{copy_to} eq "project"){
+ foreach my $file(@new_file_array){
+ $file =~ s/^.*\/(.*?)$/$1/;
+ $file = $generator_hr->{project_path_widget}."/".$file;
+ }
+ }
+ &generator_print_verbose("generator_copy_files_and_set_system_ptf: setting system PTF file in section ".$hdl_section."\n");
+ if($decoder_hash->{ptf_section} eq "Precompiled_Simulation_Library_Files"){
+ @new_file_array = map{$external_args_hr->{class_directory}."/".$_} @new_file_array;
+ }
+ &generator_set_files_in_system_ptf($decoder_hash->{ptf_section}, @new_file_array);
+ }
+}
+
+
+
+####
+# Name: generator_set_files_in_system_ptf
+# Args: $hdl_section
+# @list_of_files
+# Returns: 1 or 0
+# Purpose: This is an internal function used to set files in the module's section in the system PTF file
+#
+sub generator_set_files_in_system_ptf
+{
+ my ($hdl_section, @list_of_files) = (@_);
+
+ my $file_list = join(",", @list_of_files);
+ my $previous_data;
+
+ &generator_print_verbose("setting HDL_INFO/".$hdl_section." in system PTF file with ".$file_list."\n");
+ my $previous_data = &get_data_by_path($generator_hr->{module_ptf_hr}, "HDL_INFO/".$hdl_section);
+ if($previous_data){
+ $file_list = $previous_data . ", $file_list"; # spr 132177
+ # swapping order, dvb 2003
+ }
+ &set_data_by_path($generator_hr->{module_ptf_hr}, "HDL_INFO/".$hdl_section, $file_list);
+}
+
+####
+# Name: generator_copy_files
+# Args: $target_directory
+# $source_directory
+# @list_of_files
+# Returns: The list of files which has been copied (suitable for framing!)
+# Purpose: This is an internal function used to copy files around in the generator program.
+#
+sub generator_copy_files
+{
+ my ($target_directory, $source_directory, @list_of_files) = (@_);
+
+ my @new_file_array;
+
+ foreach my $file_name(@list_of_files){
+ $file_name =~ s|\\|\/|g;
+ if($file_name =~ /\*\.*/){
+ $file_name =~ s/\*/$1/;
+ my @found_list = &_find_all_dir_files_with_ext($source_directory, $file_name);
+ push(@new_file_array, @found_list);
+ }else{
+ &generator_print_verbose("Copying: ".$file_name."\n");
+ push(@new_file_array, $file_name);
+ }
+ }
+
+ &_copy_files($target_directory, $source_directory, @new_file_array);
+ return @new_file_array;
+}
+
+
+
+sub _find_all_dir_files_with_ext
+{
+ my ($dir,
+ $ext) = (@_);
+
+ opendir (DIR, $dir) or
+ &default_ribbit("can't open $dir !");
+
+ my @all_files = readdir(DIR);
+ my @new_file_list;
+
+
+ foreach my $file (@all_files){
+ if($file =~ /^.*($ext)$/){
+ push(@new_file_list, $file);
+ }
+ }
+
+ return @new_file_list;
+}
+
+####
+# Name: generator_begin
+# Args: Array of generator program launcher args
+# Returns: A hash reference to the module's section in the system PTF file
+# Purpose: This is the first subroutine a user should call before running the rest of their
+# generator program.
+#
+
+sub generator_begin
+{
+ my @external_args = (@_);
+
+ my ($external_args_hr,
+ $temp_user_defined,
+ $temp_db_Module,
+ $temp_db_PTF_File) = Process_Wizard_Script_Arguments("", @external_args);
+
+ &generator_print_verbose("generator_begin: initializing\n");
+
+ $generator_hr->{external_args_hr} = $external_args_hr;
+ $generator_hr->{external_args} = \@external_args;
+
+ # open up class.ptf and
+ $generator_hr->{class_ptf_hr} = new_ptf_from_file($external_args_hr->{class_directory}."/class.ptf");
+
+ # get the system.ptf
+ $generator_hr->{system_ptf_hr} = new_ptf_from_file($external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf");
+ $generator_hr->{module_ptf_hr} = &get_child_by_path($generator_hr->{system_ptf_hr}, "SYSTEM $external_args_hr->{system_name}/MODULE $external_args_hr->{target_module_name}");
+ my $class_name = get_data_by_path($generator_hr->{module_ptf_hr}, "class");
+
+ # find the default generator section
+ $generator_hr->{language} = get_data_by_path($generator_hr->{system_ptf_hr}, "SYSTEM $external_args_hr->{system_name}/WIZARD_SCRIPT_ARGUMENTS/hdl_language");
+
+ # get some wrapper settings
+ &get_module_wrapper_arg_hash_from_system_ptf_file();
+
+ # clear system ptf's HDL section
+ &delete_child($generator_hr->{module_ptf_hr}, "HDL_INFO");
+
+ return $generator_hr->{module_ptf_hr};
+}
+
+####
+# Name: generator_end
+# Args: none
+# Returns: nothing
+# Purpose: This is the last subroutine a user should call from their generator program.
+# Not calling this subroutine will make you very sad... =<
+#
+
+sub generator_end
+{
+ # o.k., time to make the wrapper and output it.
+ if($generator_hr->{wrapper_args}{make_wrapper}){
+ &_generator_make_module_wrapper();
+ }
+
+
+ my $external_args_hr = $generator_hr->{external_args_hr};
+ my $ptf_file_name = $external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf";
+ &generator_print_verbose("generator_end: writing PTF file ".$external_args_hr->{system_name}.".ptf to ".$external_args_hr->{system_directory}."\n");
+
+ default_ribbit("Cannot write PTF file ".$ptf_file_name."!\n")
+ unless(&write_ptf_file($generator_hr->{system_ptf_hr}, $external_args_hr->{system_directory}."/".$external_args_hr->{system_name}.".ptf"));
+}
+
+sub generator_end_read_module_wrapper_string
+{
+ my $language = &generator_get_language();
+ my $ls;
+
+ if($language =~ /vhdl/){
+ $ls = ".vhd";
+ }elsif($language =~ /verilog/){
+ $ls = ".v";
+ }else{
+ &ribbit("generator_end_read_module_wrapper_string invoked with unkown language");
+ }
+ my $system_dir = $generator_hr->{external_args_hr}->{system_directory};
+ my $module_name = $generator_hr->{external_args_hr}->{target_module_name};
+
+ my $file = $system_dir."/".$module_name.$ls;
+ &generator_print_verbose("generator library reading file into string: $file\n");
+
+ open (FILE,"<$file") or ribbit "cannot open file ($file) ($!)\n";
+ my $return_string;
+ while ()
+ {
+ $return_string .= $_;
+ }
+ close (FILE);
+ return($return_string);
+}
+
+sub generator_end_write_module_wrapper_string
+{
+ my $string = shift or ribbit "no string specified\n";
+
+ my $language = &generator_get_language();
+ my $ls;
+
+ print $language;
+
+ if($language =~ /vhdl/){
+ $ls = ".vhd";
+ }elsif($language =~ /verilog/){
+ $ls = ".v";
+ }else{
+ &ribbit("generator_end_read_module_wrapper_string invoked with unkown language");
+ }
+ my $system_dir = $generator_hr->{external_args_hr}->{system_directory};
+ my $module_name = $generator_hr->{external_args_hr}->{target_module_name};
+
+ my $file = $system_dir."/".$module_name.$ls;
+ &generator_print_verbose("generator library writing string into file: $file\n");
+
+ open (FILE,">$file") or ribbit "cannot open file ($file) ($!)\n";
+ print FILE $string;
+ close (FILE);
+}
+# end of generator_library.pm
+
+
+
+
+
+#
+#
+#
+#
+# ---------------------------------------------------------------------
+
+# +----------------------------------------------------
+# | emit_system_h
+# |
+# | if "is_cpu", attempt to emit a system.h
+# | memory map.
+# |
+
+sub emit_system_h($$$)
+ {
+ my ($sopc_directory,$master,$system_ptf) = (@_);
+
+ # |
+ # | Build a system.h file for masters.
+ # |
+
+
+# as of quartus 5.0, we prefer gtf-generate in sopc_builder directly
+
+ my $gtf_generate = "$sopc_directory/bin/gtf-generate";
+ my $gtf_filename = "$sopc_directory/bin/gtf/system.h.gtf";
+
+ if(! -f $gtf_generate)
+ {
+ # but if sopc_builder is missing it for whatever reason,
+ # try the one in sopc_kit_nios2
+
+ my $sopc_kit_nios2 = $ENV{SOPC_KIT_NIOS2};
+ if($sopc_kit_nios2 ne "")
+ {
+ $gtf_generate = "$sopc_kit_nios2/bin/gtf-generate";
+ $gtf_filename = "$sopc_kit_nios2/bin/gtf/system.h.gtf";
+ }
+ }
+
+ # |
+ # | xml template
+ # |
+
+ my $stf_template = <
+
+
+
+
+
+
+EOP
+
+ # |
+ # | THINK
+ # |
+
+ my $output_directory = "./${master}_map";
+ my $project_name = "ignored";
+ my $stf_filename = "./${master}_project.stf";
+
+ # |
+ # | build up template variables
+ # |
+
+ my %template_vars;
+ $template_vars{date} = fcu_date_time();
+ $template_vars{whoami} = $0;
+ $template_vars{project_name} = $project_name;
+ $template_vars{system_ptf} = $system_ptf;
+ $template_vars{output_directory} = $output_directory;
+ $template_vars{master} = $master;
+
+ # |
+ # | poke in the values to the template
+ # |
+
+ foreach my $key (sort(keys(%template_vars)))
+ {
+ $stf_template =~ s/--$key--/$template_vars{$key}/gs;
+ }
+
+ ## debug print $stf_template;
+
+ # |
+ # | write out the stf file, so we can soon use it
+ # |
+
+ fcu_write_file($stf_filename,$stf_template);
+
+ # |
+ # | and use it
+ # |
+
+ if(-e $gtf_generate && -e $gtf_filename)
+ {
+
+ my $generate_cmd = $gtf_generate;
+
+ $generate_cmd .= " --output-directory=$output_directory";
+ $generate_cmd .= " --gtf=$gtf_filename";
+ $generate_cmd .= " --stf=$stf_filename";
+
+ r_system($sopc_directory,$generate_cmd);
+
+ # |
+ # | done with it
+ # |
+
+ r_system($sopc_directory,"rm $stf_filename");
+
+ fcu_print_command("Generated memory map \"$output_directory/system.h\"");
+ }
+ else
+ {
+ fcu_print_command("Warning: did NOT emit system.h for $master");
+ }
+
+
+
+
+ }
+
+
+sub r_system($$)
+ {
+ my ($sopc_directory,$cmd) = (@_);
+ fcu_print_command($cmd);
+ return Run_Command_In_Unix_Like_Shell($sopc_directory,$cmd);
+ }
+
+
+
+
+
+
+
+# +------------------------------------------
+# | synthesis and simulation files are are
+# | listed in CLASS/CB_GENERATOR/HDL_FILES.
+# |
+
+sub get_synthesis_files($)
+ {
+ my ($class_ptf) = (@_);
+ my $synthesis_files = "";
+ my $simulation_files = "";
+
+ my $hdl_files = get_child_by_path($class_ptf,"CLASS/CB_GENERATOR/HDL_FILES");
+ my $child_count = get_child_count($hdl_files);
+ for(my $i = 0; $i < $child_count; $i++)
+ {
+ my $hdl_file = get_child($hdl_files,$i);
+ if(get_name($hdl_file) eq "FILE")
+ {
+ my $filename = get_data_by_path($hdl_file,"filepath");
+ my $use_in_synthesis = get_data_by_path($hdl_file,"use_in_synthesis");
+ my $use_in_simulation = get_data_by_path($hdl_file,"use_in_simulation");
+
+ if($use_in_synthesis)
+ {
+ $synthesis_files .= ", " if $synthesis_files;
+ $synthesis_files .= $filename;
+ }
+
+ if($use_in_simulation)
+ {
+ $simulation_files .= ", " if $simulation_files;
+ $simulation_files .= $filename;
+ }
+ }
+ }
+
+ return $synthesis_files;
+ }
+
+
+
+
+
+
+
+
+sub main
+ {
+
+ push(@ARGV,"--verbose=1") if 0;
+ my %args = fcu_parse_args(@ARGV);
+
+ if(0)
+ {
+ foreach my $key (sort(keys(%args)))
+ {
+ print("--$key = $args{$key} \n");
+ }
+ }
+
+ # |
+ # | get the arguments we care about
+ # |
+
+ my $class_dir = fcu_get_switch(\%args,"module_lib_dir");
+
+
+ my $target_module_name = fcu_get_switch(\%args,"target_module_name");
+ my $system_name = fcu_get_switch(\%args,"system_name");
+ my $sopc_directory = fcu_get_switch(\%args,"sopc_directory");
+
+ # |
+ # | preflight the arguments a little
+ # |
+
+ my $error_count = 0;
+
+ my $class_ptf_path = "$class_dir/class.ptf";
+ if(!-f $class_ptf_path)
+ {
+ print "error: no class.ptf at \"$class_dir\"\n";
+ $error_count++;
+ }
+
+ die "$error_count errors" if($error_count > 0);
+
+ # +-------------------------------------------
+ # | ok, let us get to work
+ # |
+
+
+ my $class_ptf = new_ptf_from_file($class_ptf_path);
+
+ # |
+ # | emit system.h for this module
+ # | TODO iff Is_CPU i guess.
+ # |
+
+ my $do_emit_system_h = get_data_by_path($class_ptf,
+ "CLASS/CB_GENERATOR/emit_system_h");
+ if($do_emit_system_h)
+ {
+ emit_system_h($sopc_directory,
+ $target_module_name,
+ "./$system_name.ptf");
+ }
+
+ my $top_module_name = get_data_by_path($class_ptf,
+ "CLASS/CB_GENERATOR/top_module_name");
+ my $file_name = "";
+
+ # | stored as file_name.v:module_name, so we break it open
+ if($top_module_name =~ /^(.*):(.*)$/)
+ {
+ $file_name = $1;
+ my $module_name = $2;
+ $top_module_name = $module_name;
+ }
+
+ # | language of this particular module...
+
+ my $module_language = "verilog";
+ if($file_name =~ /^.*\.vhd$/)
+ {
+ $module_language = "vhdl";
+ }
+
+ # |
+ # | consult the CB_GENERATOR/HDL_FILES section regarding
+ # | where our HDL files for synthesis are.
+ # |
+
+
+ my $synthesis_files = get_synthesis_files($class_ptf);
+
+
+ my $instantiate_in_system_module = get_data_by_path($class_ptf,
+ "CLASS/MODULE_DEFAULTS/SYSTEM_BUILDER_INFO/Instantiate_In_System_Module");
+
+
+
+ if($instantiate_in_system_module)
+ {
+ generator_enable_mode ("terse");
+
+
+ generator_begin (@ARGV);
+
+
+ generator_make_module_wrapper(1,$top_module_name,$module_language);
+
+ generator_copy_files_and_set_system_ptf
+ (
+ "simulation_and_quartus",
+ split(/ *, */,$synthesis_files)
+# "$synthesis_files"
+ );
+
+ generator_end ();
+ }
+
+ exit (0);
+ }
+
+$| = 1; # always polite to flush.
+main()
+
+# end of file
Index: sdram_ctrl/tags/V10/syn/sdram_ctrl/hdl/sdram_ctrl.vhd
===================================================================
--- sdram_ctrl/tags/V10/syn/sdram_ctrl/hdl/sdram_ctrl.vhd (nonexistent)
+++ sdram_ctrl/tags/V10/syn/sdram_ctrl/hdl/sdram_ctrl.vhd (revision 8)
@@ -0,0 +1,440 @@
+------------------------------------------------------------------
+--
+-- sdram_ctrl.vhd
+--
+-- Module Description:
+-- SDRAM small&fast controller
+--
+--
+-- To Do:
+-- configurable times
+-- nios simulation support
+--
+-- Author(s):
+-- Aleksey Kuzmenok, ntpqa@opencores.org
+--
+------------------------------------------------------------------
+--
+-- Copyright (C) 2006 Aleksey Kuzmenok and OPENCORES.ORG
+--
+-- This module is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU Lesser General Public
+-- License as published by the Free Software Foundation; either
+-- version 2.1 of the License, or (at your option) any later version.
+--
+-- This module is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+-- Lesser General Public License for more details.
+--
+-- You should have received a copy of the GNU Lesser General Public
+-- License along with this software; if not, write to the Free Software
+-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+--
+------------------------------------------------------------------
+-- Test results
+-- FPGA SDRAM CLK (not less than)
+-- EP1C12XXXXC8 MT48LC4M32B2TG-7:G 125 MHz
+-- EP1C6XXXXC8 IS42S16100C1-7TL 125 MHz
+--
+------------------------------------------------------------------
+
+LIBRARY ieee;
+USE ieee.std_logic_1164.ALL;
+USE ieee.numeric_std.ALL;
+LIBRARY altera_mf;
+USE altera_mf.altera_mf_components.all;
+
+entity sdram_ctrl is
+ generic(
+ DATA_WIDTH: integer:=32;
+ BANK_WIDTH: integer:=4;
+ ROW_WIDTH: integer:=12;
+ COLUMN_WIDTH: integer:=8;
+
+ clk_MHz: integer:=120
+ );
+ port(
+ signal clk : IN STD_LOGIC;
+ signal reset : IN STD_LOGIC;
+
+ -- IMPORTANT: for this Avalon(tm) interface
+ -- 'Minimum Arbitration Shares'=1
+ -- 'Max Pending Read Transactions'=9
+ signal avs_nios_chipselect : IN STD_LOGIC;
+ signal avs_nios_address : IN STD_LOGIC_VECTOR ((BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH-1) DOWNTO 0);
+ signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0);
+ signal avs_nios_writedata : IN STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal avs_nios_write : IN STD_LOGIC;
+ signal avs_nios_read : IN STD_LOGIC;
+ signal avs_nios_waitrequest : OUT STD_LOGIC;
+ signal avs_nios_readdata : OUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal avs_nios_readdatavalid : OUT STD_LOGIC;
+
+ -- global export signals
+ signal sdram_cke : OUT STD_LOGIC; -- This pin has fixed state '1'
+ signal sdram_ba : OUT STD_LOGIC_VECTOR ((BANK_WIDTH-1) DOWNTO 0);
+ signal sdram_addr : OUT STD_LOGIC_VECTOR ((ROW_WIDTH-1) DOWNTO 0);
+ signal sdram_cs_n : OUT STD_LOGIC; -- This pin has fixed state '0'
+ signal sdram_ras_n : OUT STD_LOGIC;
+ signal sdram_cas_n : OUT STD_LOGIC;
+ signal sdram_we_n : OUT STD_LOGIC;
+ signal sdram_dq : INOUT STD_LOGIC_VECTOR ((DATA_WIDTH-1) DOWNTO 0);
+ signal sdram_dqm : OUT STD_LOGIC_VECTOR (((DATA_WIDTH/8)-1) DOWNTO 0)
+ );
+end sdram_ctrl;
+
+architecture behaviour of sdram_ctrl is
+
+ CONSTANT FIFO_WIDTH: integer:=BANK_WIDTH+ROW_WIDTH+COLUMN_WIDTH+DATA_WIDTH+(DATA_WIDTH/8)+2;
+
+ CONSTANT MODE: std_logic_vector(11 downto 0):="000000110000"; -- 1 word burst, CAS latency=3
+ -- Only two times are configurable
+ -- tINIT delay between powerup and load mode register = 100 us
+ -- tREF refresh period = 15.625 us (64ms/4096rows)
+ CONSTANT INIT_PAUSE_CLOCKS: integer:=(clk_MHz*10000)/91; -- 109.9 us just to be on the save side
+ CONSTANT REFRESH_PERIOD_CLOCKS: integer:=(clk_MHz*1000)/65; -- 15.384 us the same purpose
+ CONSTANT CAS_LATENCY: integer:=3; -- other latencies weren't been tested!
+
+ COMPONENT scfifo
+ GENERIC (
+ add_ram_output_register : STRING;
+ intended_device_family : STRING;
+ lpm_numwords : NATURAL;
+ lpm_showahead : STRING;
+ lpm_type : STRING;
+ lpm_width : NATURAL;
+ lpm_widthu : NATURAL;
+ overflow_checking : STRING;
+ underflow_checking : STRING;
+ use_eab : STRING
+ );
+ PORT (
+ rdreq : IN STD_LOGIC ;
+ empty : OUT STD_LOGIC ;
+ aclr : IN STD_LOGIC ;
+ clock : IN STD_LOGIC ;
+ q : OUT STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
+ wrreq : IN STD_LOGIC ;
+ data : IN STD_LOGIC_VECTOR ((FIFO_WIDTH-1) DOWNTO 0);
+ full : OUT STD_LOGIC
+ );
+ END COMPONENT;
+
+ -- If you ask me why there are so many states, I'll answer that all times are fixed.
+ -- The top speed for MT48LC4M32B2TG-7:G is 7 ns, therefore all times were based on it.
+ -- tRP PRECHARGE command period = 3 clocks
+ -- tRFC AUTO REFRESH period = 10 clocks
+ -- tMRD LOAD MODE REGISTER command to ACTIVE or REFRESH command = 2 clocks
+ -- tRCD ACTIVE to READ or WRITE delay = 3 clocks
+ -- tRAS ACTIVE to PRECHARGE command = 7 clocks
+ -- tRC ACTIVE to ACTIVE command period = 10 clocks
+ -- tWR2 Write recovery time = 2 clocks
+ type states is (
+ INIT0,INIT1,INIT2,INIT3,INIT4,INIT5,INIT6,INIT7,
+ INIT8,INIT9,INIT10,INIT11,INIT12,INIT13,INIT14,INIT15,
+ INIT16,INIT17,INIT18,INIT19,INIT20,INIT21,INIT22,INIT23,INIT24,
+ REFRESH0,REFRESH1,REFRESH2,REFRESH3,REFRESH4,REFRESH5,REFRESH6,REFRESH7,
+ REFRESH8,REFRESH9,REFRESH10,REFRESH11,REFRESH12,REFRESH13,REFRESH14,
+ ACTIVE0,ACTIVE1,ACTIVE2,ACTIVE3,ACTIVE4,
+ IDLE,READ0,WRITE0);
+ signal operation: states;
+
+ signal fifo_q: std_logic_vector((FIFO_WIDTH-1) downto 0);
+
+ signal init_counter: unsigned(15 downto 0):=to_unsigned(INIT_PAUSE_CLOCKS,16);
+ signal refresh_counter: unsigned(15 downto 0);
+ signal active_counter: unsigned(2 downto 0);
+ signal active_address: unsigned((BANK_WIDTH+ROW_WIDTH-1) downto 0);
+
+ signal bank: std_logic_vector((sdram_ba'length-1) downto 0);
+ signal row: std_logic_vector((sdram_addr'length-1) downto 0);
+ signal column: std_logic_vector((COLUMN_WIDTH-1) downto 0);
+ signal be: std_logic_vector((sdram_dqm'length-1) downto 0);
+ signal data: std_logic_vector((sdram_dq'length-1) downto 0);
+
+ signal do_init,do_refresh,do_active,read_is_active,ready,tRCD_not_expired: std_logic:='0';
+
+ signal fifo_rdreq,fifo_empty: std_logic;
+
+ signal read_latency: std_logic_vector(CAS_LATENCY downto 0);
+
+ signal fifo_data: std_logic_vector((FIFO_WIDTH-1) downto 0);
+ signal fifo_wrreq,fifo_wrfull: std_logic;
+
+ signal i_command : STD_LOGIC_VECTOR(4 downto 0);
+ CONSTANT NOP: STD_LOGIC_VECTOR(4 downto 0):="10111";
+ CONSTANT ACTIVE: STD_LOGIC_VECTOR(4 downto 0):="10011";
+ CONSTANT READ: STD_LOGIC_VECTOR(4 downto 0):="10101";
+ CONSTANT WRITE: STD_LOGIC_VECTOR(4 downto 0):="10100";
+ CONSTANT PRECHARGE: STD_LOGIC_VECTOR(4 downto 0):="10010";
+ CONSTANT AUTO_REFRESH: STD_LOGIC_VECTOR(4 downto 0):="10001";
+ CONSTANT LOAD_MODE_REGISTER: STD_LOGIC_VECTOR(4 downto 0):="10000";
+
+ signal i_address : STD_LOGIC_VECTOR((sdram_addr'length-1) DOWNTO 0);
+ signal i_bank : STD_LOGIC_VECTOR((sdram_ba'length-1) DOWNTO 0);
+ signal i_dqm : STD_LOGIC_VECTOR((sdram_dqm'length-1) DOWNTO 0);
+ signal i_data : STD_LOGIC_VECTOR((sdram_dq'length-1) DOWNTO 0);
+ attribute ALTERA_ATTRIBUTE : string;
+ attribute ALTERA_ATTRIBUTE of i_command : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_address : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_bank : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_dqm : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of i_data : signal is "FAST_OUTPUT_REGISTER=ON";
+ attribute ALTERA_ATTRIBUTE of avs_nios_readdata : signal is "FAST_INPUT_REGISTER=ON";
+begin
+ (sdram_cke,sdram_cs_n,sdram_ras_n,sdram_cas_n,sdram_we_n) <= i_command;
+ sdram_addr <= i_address;
+ sdram_ba <= i_bank;
+ sdram_dqm <= i_dqm;
+ sdram_dq <= i_data;
+
+ fifo_data<=avs_nios_address & avs_nios_writedata & avs_nios_byteenable & avs_nios_write & avs_nios_read;
+ fifo_wrreq<=(avs_nios_write or avs_nios_read) and avs_nios_chipselect and not fifo_wrfull;
+
+ avs_nios_waitrequest<=fifo_wrfull;
+
+ fifo_rdreq<=not fifo_empty and not do_refresh and not do_active and not read_is_active and ready;
+
+ do_active<='0' when active_address=unsigned((fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)))) else '1';
+ read_is_active<='1' when read_latency(CAS_LATENCY-1 downto 0)>"000" and fifo_q(1)='1' else '0';
+ ready<='1' when operation=IDLE or operation=READ0 or operation=WRITE0 else '0';
+
+ operation_machine:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ operation<=INIT0;
+ active_address<=(others=>'1');
+ elsif rising_edge(clk)
+ then
+
+ bank<=fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length));
+ row<=fifo_q((fifo_q'length-bank'length-1) downto (fifo_q'length-bank'length-row'length));
+ column<=fifo_q((column'length+data'length+be'length+2-1) downto (data'length+be'length+2));
+ data<=fifo_q((data'length+be'length+2-1) downto (be'length+2));
+ be<=fifo_q((be'length+2-1) downto 2);
+
+ case operation is
+ when INIT0=>
+ if do_init='1'
+ then operation<=INIT1;row(10)<='1';
+ end if;
+ when INIT1=>operation<=INIT2;
+ when INIT2=>operation<=INIT3;
+ when INIT3=>operation<=INIT4;
+ when INIT4=>operation<=INIT5;
+ when INIT5=>operation<=INIT6;
+ when INIT6=>operation<=INIT7;
+ when INIT7=>operation<=INIT8;
+ when INIT8=>operation<=INIT9;
+ when INIT9=>operation<=INIT10;
+ when INIT10=>operation<=INIT11;
+ when INIT11=>operation<=INIT12;
+ when INIT12=>operation<=INIT13;
+ when INIT13=>operation<=INIT14;
+ when INIT14=>operation<=INIT15;
+ when INIT15=>operation<=INIT16;
+ when INIT16=>operation<=INIT17;
+ when INIT17=>operation<=INIT18;
+ when INIT18=>operation<=INIT19;
+ when INIT19=>operation<=INIT20;
+ when INIT20=>operation<=INIT21;
+ when INIT21=>operation<=INIT22;
+ when INIT22=>operation<=INIT23;
+ when INIT23=>operation<=INIT24;row<=MODE((row'length-1) downto 0);
+ when INIT24=>operation<=IDLE;
+
+ when REFRESH0=>operation<=REFRESH1;
+ when REFRESH1=>operation<=REFRESH2;
+ when REFRESH2=>operation<=REFRESH3;
+ when REFRESH3=>operation<=REFRESH4;
+ when REFRESH4=>operation<=REFRESH5;
+ when REFRESH5=>operation<=REFRESH6;
+ when REFRESH6=>operation<=REFRESH7;
+ when REFRESH7=>operation<=REFRESH8;
+ when REFRESH8=>operation<=REFRESH9;
+ when REFRESH9=>operation<=REFRESH10;
+ when REFRESH10=>operation<=REFRESH11;
+ when REFRESH11=>operation<=REFRESH12;
+ when REFRESH12=>operation<=REFRESH13;
+ active_address<=unsigned(fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)));
+ when REFRESH13=>operation<=REFRESH14;
+ when REFRESH14=>operation<=IDLE;
+
+ when ACTIVE0=>operation<=ACTIVE1;
+ when ACTIVE1=>operation<=ACTIVE2;
+ when ACTIVE2=>operation<=ACTIVE3;
+ active_address<=unsigned(fifo_q((fifo_q'length-1) downto (fifo_q'length-bank'length-row'length)));
+ when ACTIVE3=>operation<=ACTIVE4;
+ when ACTIVE4=>operation<=IDLE;
+
+ when others=>
+ if do_refresh='1'
+ then
+ if tRCD_not_expired='0' and operation=IDLE
+ then operation<=REFRESH0;row(10)<='1';
+ else operation<=IDLE;
+ end if;
+ elsif do_active='1'
+ then
+ if tRCD_not_expired='0' and operation=IDLE
+ then operation<=ACTIVE0;row(10)<='1';
+ else operation<=IDLE;
+ end if;
+ elsif fifo_empty='1'
+ then
+ operation<=IDLE;
+ elsif fifo_q(1)='1' --write
+ then
+ if read_latency(CAS_LATENCY-1 downto 0)>"000"
+ then operation<=IDLE;
+ else operation<=WRITE0;
+ end if;
+ elsif fifo_q(0)='1' --read
+ then
+ operation<=READ0;
+ end if;
+ end case;
+ end if;
+ end process;
+
+ control_latency:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ read_latency<=(others=>'0');
+ elsif rising_edge(clk)
+ then
+ read_latency<=std_logic_vector(unsigned(read_latency) SLL 1);
+ if operation=READ0
+ then read_latency(0)<='1';
+ else read_latency(0)<='0';
+ end if;
+ end if;
+ end process;
+ latch_readdata:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ avs_nios_readdata<=(others=>'0');
+ avs_nios_readdatavalid<='0';
+ elsif rising_edge(clk)
+ then
+ avs_nios_readdata<=sdram_dq;
+ avs_nios_readdatavalid<=read_latency(CAS_LATENCY);
+ end if;
+ end process;
+ initialization:process(reset,clk)
+ begin
+ if rising_edge(clk)
+ then
+ if init_counter>0
+ then
+ init_counter<=init_counter-1;
+ else do_init<='1';
+ end if;
+ end if;
+ end process;
+ refreshing:process(clk,reset)
+ begin
+ if reset='1'
+ then
+ refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
+ do_refresh<='0';
+ elsif rising_edge(clk)
+ then
+ if refresh_counter=to_unsigned(0,refresh_counter'length)
+ then refresh_counter<=to_unsigned(REFRESH_PERIOD_CLOCKS,16);
+ do_refresh<='1';
+ else refresh_counter<=refresh_counter-1;
+ end if;
+ if operation=REFRESH0 or operation=REFRESH5
+ then do_refresh<='0';
+ end if;
+ end if;
+ end process;
+ active_period:process(reset,clk)
+ begin
+ if reset='1'
+ then
+ active_counter<=(others=>'0');
+ tRCD_not_expired<='0';
+ elsif rising_edge(clk)
+ then
+ if operation=ACTIVE3 or operation=REFRESH13
+ then active_counter<=to_unsigned(5,active_counter'length);
+ elsif active_counter>0
+ then active_counter<=active_counter-1;
+ end if;
+ end if;
+ if active_counter>0
+ then tRCD_not_expired<='1';
+ else tRCD_not_expired<='0';
+ end if;
+ end process;
+ latch_controls:process(clk,reset)
+ begin
+ if reset='1'
+ then
+ i_command<=NOP;
+ i_address<=(others=>'0');
+ i_bank<=(others=>'0');
+ i_dqm<=(others=>'0');
+ i_data<=(others=>'Z');
+ elsif rising_edge(clk)
+ then
+ i_command<=NOP;
+ i_bank<=bank;
+ i_address<=(others=>'0');
+ i_address((column'length-1) downto 0)<=column;
+ i_data<=(others=>'Z');
+ i_dqm<=(others=>'0');
+
+ case operation is
+ when INIT1|REFRESH0|ACTIVE0 =>
+ i_command<=PRECHARGE;
+ i_address<=row;
+ when INIT4|INIT14|REFRESH3 =>
+ i_command<=AUTO_REFRESH;
+ when INIT24=>
+ i_command<=LOAD_MODE_REGISTER;
+ i_address<=row;
+ when ACTIVE3|REFRESH13 =>
+ i_command<=ACTIVE;
+ i_address<=row;
+ when READ0 =>
+ i_command<=READ;
+ when WRITE0 =>
+ i_command<=WRITE;
+ i_dqm<=not be;
+ i_data<=data;
+ when OTHERS =>
+ end case;
+ end if;
+ end process;
+
+ fifo: scfifo
+ GENERIC MAP (
+ add_ram_output_register => "ON",
+ intended_device_family => "Cyclone",
+ lpm_numwords => 4,
+ lpm_showahead => "ON",
+ lpm_type => "scfifo",
+ lpm_width => FIFO_WIDTH,
+ lpm_widthu => 2,
+ overflow_checking => "ON",
+ underflow_checking => "ON",
+ use_eab => "ON"
+ )
+ PORT MAP (
+ rdreq => fifo_rdreq,
+ aclr => reset,
+ clock => clk,
+ wrreq => fifo_wrreq,
+ data => fifo_data,
+ empty => fifo_empty,
+ q => fifo_q,
+ full => fifo_wrfull
+ );
+end behaviour;
Index: sdram_ctrl/tags/V10/syn/sdram_ctrl/class.ptf
===================================================================
--- sdram_ctrl/tags/V10/syn/sdram_ctrl/class.ptf (nonexistent)
+++ sdram_ctrl/tags/V10/syn/sdram_ctrl/class.ptf (revision 8)
@@ -0,0 +1,972 @@
+#
+# This class.ptf file built by Component Editor
+# 2006.09.25.10:24:12
+#
+# DO NOT MODIFY THIS FILE
+# If you hand-modify this file you will likely
+# interfere with Component Editor's ability to
+# read and edit it. And then Component Editor
+# will overwrite your changes anyway. So, for
+# the very best results, just relax and
+# DO NOT MODIFY THIS FILE
+#
+CLASS sdram_ctrl
+{
+ CB_GENERATOR
+ {
+ HDL_FILES
+ {
+ FILE
+ {
+ use_in_simulation = "1";
+ use_in_synthesis = "1";
+ filepath = "hdl/sdram_ctrl.vhd";
+ }
+ }
+ top_module_name = "sdram_ctrl.vhd:sdram_ctrl";
+ emit_system_h = "0";
+ LIBRARIES
+ {
+ library = "ieee.std_logic_1164.all";
+ library = "ieee.numeric_std.all";
+ library = "altera_mf.altera_mf_components.all";
+ library = "std.standard.all";
+ }
+ }
+ MODULE_DEFAULTS global_signals
+ {
+ class = "sdram_ctrl";
+ class_version = "1.1";
+ SYSTEM_BUILDER_INFO
+ {
+ Instantiate_In_System_Module = "1";
+ Has_Clock = "1";
+ Top_Level_Ports_Are_Enumerated = "1";
+ }
+ COMPONENT_BUILDER
+ {
+ GLS_SETTINGS
+ {
+ }
+ }
+ PORT_WIRING
+ {
+ PORT clk
+ {
+ width = "1";
+ width_expression = "";
+ direction = "input";
+ type = "clk";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT reset
+ {
+ width = "1";
+ width_expression = "";
+ direction = "input";
+ type = "reset";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_cke
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_ba
+ {
+ width = "-1";
+ width_expression = "((bank_width - 1)) - (0) + 1";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_addr
+ {
+ width = "-1";
+ width_expression = "((row_width - 1)) - (0) + 1";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_cs_n
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_ras_n
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_cas_n
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_we_n
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_dq
+ {
+ width = "-1";
+ width_expression = "((data_width - 1)) - (0) + 1";
+ direction = "inout";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT sdram_dqm
+ {
+ width = "-1";
+ width_expression = "(((data_width / 8) - 1)) - (0) + 1";
+ direction = "output";
+ type = "export";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ }
+ WIZARD_SCRIPT_ARGUMENTS
+ {
+ hdl_parameters
+ {
+ data_width = "32";
+ bank_width = "4";
+ row_width = "12";
+ column_width = "8";
+ clk_mhz = "120";
+ }
+ }
+ SIMULATION
+ {
+ DISPLAY
+ {
+ }
+ }
+ SLAVE nios
+ {
+ SYSTEM_BUILDER_INFO
+ {
+ Bus_Type = "avalon";
+ Address_Group = "1";
+ Has_Clock = "0";
+ Address_Width = "-1";
+ Address_Alignment = "dynamic";
+ Data_Width = "8";
+ Has_Base_Address = "1";
+ Has_IRQ = "0";
+ Setup_Time = "0";
+ Hold_Time = "0";
+ Read_Wait_States = "peripheral_controlled";
+ Write_Wait_States = "peripheral_controlled";
+ Read_Latency = "0";
+ Maximum_Pending_Read_Transactions = "9";
+ Active_CS_Through_Read_Latency = "0";
+ Is_Printable_Device = "1";
+ Is_Memory_Device = "1";
+ Is_Readable = "1";
+ Is_Writable = "1";
+ Minimum_Uninterrupted_Run_Length = "1";
+ }
+ COMPONENT_BUILDER
+ {
+ AVS_SETTINGS
+ {
+ Setup_Value = "0";
+ Read_Wait_Value = "1";
+ Write_Wait_Value = "1";
+ Hold_Value = "0";
+ Timing_Units = "cycles";
+ Read_Latency_Value = "0";
+ Minimum_Arbitration_Shares = "1";
+ Active_CS_Through_Read_Latency = "0";
+ Max_Pending_Read_Transactions_Value = "9";
+ Address_Alignment = "dynamic";
+ Is_Printable_Device = "1";
+ interface_name = "Avalon Slave";
+ external_wait = "1";
+ Is_Memory_Device = "1";
+ }
+ }
+ PORT_WIRING
+ {
+ PORT avs_nios_chipselect
+ {
+ width = "1";
+ width_expression = "";
+ direction = "input";
+ type = "chipselect";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_address
+ {
+ width = "-1";
+ width_expression = "((((bank_width + row_width) + column_width) - 1)) - (0) + 1";
+ direction = "input";
+ type = "address";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_byteenable
+ {
+ width = "-1";
+ width_expression = "(((data_width / 8) - 1)) - (0) + 1";
+ direction = "input";
+ type = "byteenable";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_writedata
+ {
+ width = "-1";
+ width_expression = "((data_width - 1)) - (0) + 1";
+ direction = "input";
+ type = "writedata";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_write
+ {
+ width = "1";
+ width_expression = "";
+ direction = "input";
+ type = "write";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_read
+ {
+ width = "1";
+ width_expression = "";
+ direction = "input";
+ type = "read";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_waitrequest
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "waitrequest";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_readdata
+ {
+ width = "-1";
+ width_expression = "((data_width - 1)) - (0) + 1";
+ direction = "output";
+ type = "readdata";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ PORT avs_nios_readdatavalid
+ {
+ width = "1";
+ width_expression = "";
+ direction = "output";
+ type = "readdatavalid";
+ is_shared = "0";
+ vhdl_record_name = "";
+ vhdl_record_type = "";
+ }
+ }
+ }
+ }
+ USER_INTERFACE
+ {
+ USER_LABELS
+ {
+ name = "sdram_ctrl";
+ technology = "Opencores";
+ }
+ WIZARD_UI the_wizard_ui
+ {
+ title = "sdram_ctrl - {{ $MOD }}";
+ CONTEXT
+ {
+ H = "WIZARD_SCRIPT_ARGUMENTS/hdl_parameters";
+ M = "";
+ SBI_global_signals = "SYSTEM_BUILDER_INFO";
+ SBI_nios = "SLAVE nios/SYSTEM_BUILDER_INFO";
+ # The following signals have parameterized widths:
+ PORT_sdram_ba = "PORT_WIRING/PORT sdram_ba";
+ PORT_sdram_addr = "PORT_WIRING/PORT sdram_addr";
+ PORT_sdram_dq = "PORT_WIRING/PORT sdram_dq";
+ PORT_sdram_dqm = "PORT_WIRING/PORT sdram_dqm";
+ PORT_avs_nios_address = "SLAVE nios/PORT_WIRING/PORT avs_nios_address";
+ PORT_avs_nios_byteenable = "SLAVE nios/PORT_WIRING/PORT avs_nios_byteenable";
+ PORT_avs_nios_writedata = "SLAVE nios/PORT_WIRING/PORT avs_nios_writedata";
+ PORT_avs_nios_readdata = "SLAVE nios/PORT_WIRING/PORT avs_nios_readdata";
+ }
+ PAGES main
+ {
+ PAGE 1
+ {
+ align = "left";
+ title = "sdram_ctrl 1.1 Settings";
+ layout = "vertical";
+ TEXT
+ {
+ title = "Built on: 2006.09.25.10:24:12";
+ }
+ TEXT
+ {
+ title = "Class name: sdram_ctrl";
+ }
+ TEXT
+ {
+ title = "Class version: 1.1";
+ }
+ TEXT
+ {
+ title = "Component name: sdram_ctrl";
+ }
+ TEXT
+ {
+ title = "Component Group: Opencores";
+ }
+ GROUP parameters
+ {
+ title = "Parameters";
+ layout = "form";
+ align = "left";
+ EDIT e1
+ {
+ id = "data_width";
+ editable = "1";
+ title = "data_width:";
+ columns = "40";
+ tooltip = "default value: 32";
+ DATA
+ {
+ $H/data_width = "$";
+ }
+ q = "'";
+ warning = "{{ if(!(regexp('ugly_'+$H/data_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/data_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/data_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/data_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/data_width,'ugly_-?[0-9]+')))'data_width must be numeric constant, not '+$H/data_width; }}";
+ }
+ EDIT e2
+ {
+ id = "bank_width";
+ editable = "1";
+ title = "bank_width:";
+ columns = "40";
+ tooltip = "default value: 4";
+ DATA
+ {
+ $H/bank_width = "$";
+ }
+ q = "'";
+ warning = "{{ if(!(regexp('ugly_'+$H/bank_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/bank_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/bank_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/bank_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/bank_width,'ugly_-?[0-9]+')))'bank_width must be numeric constant, not '+$H/bank_width; }}";
+ }
+ EDIT e3
+ {
+ id = "row_width";
+ editable = "1";
+ title = "row_width:";
+ columns = "40";
+ tooltip = "default value: 12";
+ DATA
+ {
+ $H/row_width = "$";
+ }
+ q = "'";
+ warning = "{{ if(!(regexp('ugly_'+$H/row_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/row_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/row_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/row_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/row_width,'ugly_-?[0-9]+')))'row_width must be numeric constant, not '+$H/row_width; }}";
+ }
+ EDIT e4
+ {
+ id = "column_width";
+ editable = "1";
+ title = "column_width:";
+ columns = "40";
+ tooltip = "default value: 8";
+ DATA
+ {
+ $H/column_width = "$";
+ }
+ q = "'";
+ warning = "{{ if(!(regexp('ugly_'+$H/column_width,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/column_width,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/column_width,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/column_width,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/column_width,'ugly_-?[0-9]+')))'column_width must be numeric constant, not '+$H/column_width; }}";
+ }
+ EDIT e5
+ {
+ id = "clk_mhz";
+ editable = "1";
+ title = "clk_mhz:";
+ columns = "40";
+ tooltip = "default value: 120";
+ DATA
+ {
+ $H/clk_mhz = "$";
+ }
+ q = "'";
+ warning = "{{ if(!(regexp('ugly_'+$H/clk_mhz,'ugly_[0-9]*'+$q+'[bB][01][_01]*')||regexp('ugly_'+$H/clk_mhz,'ugly_[0-9]*'+$q+'[hH][0-9a-fA-F][_0-9a-fA-F]*')||regexp('ugly_'+$H/clk_mhz,'ugly_[0-9]*'+$q+'[oO][0-7][_0-7]*')||regexp('ugly_'+$H/clk_mhz,'ugly_0x[0-9a-fA-F]+')||regexp('ugly_'+$H/clk_mhz,'ugly_-?[0-9]+')))'clk_mhz must be numeric constant, not '+$H/clk_mhz; }}";
+ }
+ }
+ GROUP variable_port_widths
+ {
+ # This group is for display only, to preview parameterized port widths
+ title = "Parameterized Signal Widths";
+ layout = "form";
+ align = "left";
+ EDIT sdram_ba_width
+ {
+ id = "sdram_ba_width";
+ editable = "0";
+ title = "sdram_ba[((bank_width - 1)) - (0) + 1]:";
+ tooltip = "sdram_ba[((bank_width - 1)) - (0) + 1]
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_ba/width = (int((( ( $H/bank_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_ba/width = "$"; + } + warning = "{{ if($PORT_sdram_ba/width <= 0)('width of sdram_ba must be greater than zero' ) }}"; + } + EDIT sdram_addr_width + { + id = "sdram_addr_width"; + editable = "0"; + title = "sdram_addr[((row_width - 1)) - (0) + 1]:"; + tooltip = "sdram_addr[((row_width - 1)) - (0) + 1]
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_addr/width = (int((( ( $H/row_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_addr/width = "$"; + } + warning = "{{ if($PORT_sdram_addr/width <= 0)('width of sdram_addr must be greater than zero' ) }}"; + } + EDIT sdram_dq_width + { + id = "sdram_dq_width"; + editable = "0"; + title = "sdram_dq[((data_width - 1)) - (0) + 1]:"; + tooltip = "sdram_dq[((data_width - 1)) - (0) + 1]
direction: inout
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_dq/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_dq/width = "$"; + } + warning = "{{ if($PORT_sdram_dq/width <= 0)('width of sdram_dq must be greater than zero' ) }}"; + } + EDIT sdram_dqm_width + { + id = "sdram_dqm_width"; + editable = "0"; + title = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]:"; + tooltip = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_dqm/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_dqm/width = "$"; + } + warning = "{{ if($PORT_sdram_dqm/width <= 0)('width of sdram_dqm must be greater than zero' ) }}"; + } + EDIT avs_nios_address_width + { + id = "avs_nios_address_width"; + editable = "0"; + title = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]:"; + tooltip = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]
direction: input
signal type: address"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_address/width = (int((((( ( $H/bank_width ) + ( $H/row_width ) ) + ( $H/column_width ) ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Address_Width = $PORT_avs_nios_address/width; }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_address/width = "$"; + } + warning = "{{ if($PORT_avs_nios_address/width <= 0)('width of avs_nios_address must be greater than zero' ) }}"; + } + EDIT avs_nios_byteenable_width + { + id = "avs_nios_byteenable_width"; + editable = "0"; + title = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]:"; + tooltip = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]
direction: input
signal type: byteenable"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_byteenable/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_byteenable/width = "$"; + } + warning = "{{ if($PORT_avs_nios_byteenable/width <= 0)('width of avs_nios_byteenable must be greater than zero' ) }}"; + } + EDIT avs_nios_writedata_width + { + id = "avs_nios_writedata_width"; + editable = "0"; + title = "avs_nios_writedata[((data_width - 1)) - (0) + 1]:"; + tooltip = "avs_nios_writedata[((data_width - 1)) - (0) + 1]
direction: input
signal type: writedata"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_writedata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_writedata/width - 1) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_writedata/width = "$"; + } + warning = "{{ if($PORT_avs_nios_writedata/width <= 0)('width of avs_nios_writedata must be greater than zero' ) }}"; + } + EDIT avs_nios_readdata_width + { + id = "avs_nios_readdata_width"; + editable = "0"; + title = "avs_nios_readdata[((data_width - 1)) - (0) + 1]:"; + tooltip = "avs_nios_readdata[((data_width - 1)) - (0) + 1]
direction: output
signal type: readdata"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_readdata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_readdata/width - 1) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_readdata/width = "$"; + } + warning = "{{ if($PORT_avs_nios_readdata/width <= 0)('width of avs_nios_readdata must be greater than zero' ) }}"; + } + } + } + } + } + } + SOPC_Builder_Version = "5.10"; + COMPONENT_BUILDER + { + HDL_PARAMETERS + { + # generated by CBDocument.getParameterContainer + # used only by Component Editor + HDL_PARAMETER data_width + { + parameter_name = "data_width"; + type = "integer"; + default_value = "32"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER bank_width + { + parameter_name = "bank_width"; + type = "integer"; + default_value = "4"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER row_width + { + parameter_name = "row_width"; + type = "integer"; + default_value = "12"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER column_width + { + parameter_name = "column_width"; + type = "integer"; + default_value = "8"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER clk_mhz + { + parameter_name = "clk_mhz"; + type = "integer"; + default_value = "120"; + editable = "1"; + tooltip = ""; + } + } + SW_FILES + { + } + built_on = "2006.09.25.10:24:12"; + CACHED_HDL_INFO + { + # cached hdl info, emitted by CBFrameRealtime.getDocumentCachedHDLInfoSection + # used only by Component Builder + FILE sdram_ctrl.vhd + { + file_mod = "Mon Sep 18 18:08:50 EEST 2006"; + quartus_map_start = "Mon Sep 25 10:22:36 EEST 2006"; + quartus_map_finished = "Mon Sep 25 10:22:58 EEST 2006"; + #found 1 valid modules + WRAPPER sdram_ctrl + { + CLASS sdram_ctrl + { + CB_GENERATOR + { + HDL_FILES + { + FILE + { + use_in_simulation = "1"; + use_in_synthesis = "1"; + filepath = "H:/Work/Home_stuff/opencores/sdram_ctrl/src/sdram_ctrl.vhd"; + } + } + top_module_name = "sdram_ctrl"; + emit_system_h = "0"; + LIBRARIES + { + library = "ieee.std_logic_1164.all"; + library = "ieee.numeric_std.all"; + library = "altera_mf.altera_mf_components.all"; + library = "std.standard.all"; + } + } + MODULE_DEFAULTS global_signals + { + class = "sdram_ctrl"; + class_version = "1.0"; + SYSTEM_BUILDER_INFO + { + Instantiate_In_System_Module = "1"; + } + SLAVE nios + { + SYSTEM_BUILDER_INFO + { + Bus_Type = "avalon"; + } + PORT_WIRING + { + PORT avs_nios_chipselect + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "chipselect"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_address + { + width = "-1"; + width_expression = "((((bank_width + row_width) + column_width) - 1)) - (0) + 1"; + direction = "input"; + type = "address"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_byteenable + { + width = "-1"; + width_expression = "(((data_width / 8) - 1)) - (0) + 1"; + direction = "input"; + type = "byteenable"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_writedata + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "input"; + type = "writedata"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_write + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "write"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_read + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "read"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_waitrequest + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "waitrequest"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_readdata + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "output"; + type = "readdata"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_readdatavalid + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "readdatavalid"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + SLAVE avalon_slave_0 + { + SYSTEM_BUILDER_INFO + { + Bus_Type = "avalon"; + } + PORT_WIRING + { + PORT sdram_cke + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_ba + { + width = "-1"; + width_expression = "((bank_width - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_addr + { + width = "-1"; + width_expression = "((row_width - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_cs_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_ras_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_cas_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_we_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_dq + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "inout"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_dqm + { + width = "-1"; + width_expression = "(((data_width / 8) - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + PORT_WIRING + { + PORT clk + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "clk"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT reset + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "reset"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + USER_INTERFACE + { + USER_LABELS + { + name = "sdram_ctrl"; + technology = "imported components"; + } + } + SOPC_Builder_Version = "0.0"; + COMPONENT_BUILDER + { + HDL_PARAMETERS + { + # generated by CBDocument.getParameterContainer + # used only by Component Editor + HDL_PARAMETER data_width + { + parameter_name = "data_width"; + type = "integer"; + default_value = "32"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER bank_width + { + parameter_name = "bank_width"; + type = "integer"; + default_value = "4"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER row_width + { + parameter_name = "row_width"; + type = "integer"; + default_value = "12"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER column_width + { + parameter_name = "column_width"; + type = "integer"; + default_value = "8"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER clk_mhz + { + parameter_name = "clk_mhz"; + type = "integer"; + default_value = "120"; + editable = "1"; + tooltip = ""; + } + } + } + } + } + } + } + } + ASSOCIATED_FILES + { + Add_Program = "the_wizard_ui"; + Edit_Program = "the_wizard_ui"; + Generator_Program = "cb_generator.pl"; + } +} Index: sdram_ctrl/tags/V10/test_bench/sdram_ctrl_tb.vhd =================================================================== --- sdram_ctrl/tags/V10/test_bench/sdram_ctrl_tb.vhd (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/sdram_ctrl_tb.vhd (revision 8) @@ -0,0 +1,169 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +entity sdram_ctrl_tb is +end sdram_ctrl_tb; + +architecture structure of sdram_ctrl_tb is + component pll + port ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + e0 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ) ; + end component ; + component sdram_ctrl is + port( + signal clk : IN STD_LOGIC; + signal reset : IN STD_LOGIC; + + signal avs_nios_chipselect : IN STD_LOGIC; + signal avs_nios_address : IN STD_LOGIC_VECTOR (21 DOWNTO 0); + signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + signal avs_nios_writedata : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + signal avs_nios_write : IN STD_LOGIC; + signal avs_nios_read : IN STD_LOGIC; + signal avs_nios_readdata : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + signal avs_nios_readdatavalid : OUT STD_LOGIC; + signal avs_nios_waitrequest : OUT STD_LOGIC; + + signal sdram_addr : OUT STD_LOGIC_VECTOR (11 DOWNTO 0); + signal sdram_ba : OUT STD_LOGIC_VECTOR (1 DOWNTO 0); + signal sdram_cas_n : OUT STD_LOGIC; + signal sdram_cke : OUT STD_LOGIC; + signal sdram_cs_n : OUT STD_LOGIC; + signal sdram_dq : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0); + signal sdram_dqm : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); + signal sdram_ras_n : OUT STD_LOGIC; + signal sdram_we_n : OUT STD_LOGIC + ); + end component; + + component mt48lc4m32b2 IS + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0) := (OTHERS => 'Z'); + Addr : IN STD_LOGIC_VECTOR (11 DOWNTO 0) := (OTHERS => '0'); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + Clk : IN STD_LOGIC := '0'; + Cke : IN STD_LOGIC := '1'; + Cs_n : IN STD_LOGIC := '1'; + Ras_n : IN STD_LOGIC := '1'; + Cas_n : IN STD_LOGIC := '1'; + We_n : IN STD_LOGIC := '1'; + Dqm : IN STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000" + ); + END component; + + component cpu_simulator IS + PORT(clk, reset: IN std_logic; + address : OUT std_logic_vector(21 downto 0):=(others=>'0'); + writedata : out std_logic_vector(31 downto 0):=(others=>'0'); + byteenable : out std_logic_vector(3 downto 0):=(others=>'0'); + write : out std_logic:='0'; + read : out std_logic:='0'; + readdata : in std_logic_vector(31 downto 0); + waitrequest : in std_logic; + readdatavalid : in std_logic + ); + END component; + + signal reset, clk_ok: std_logic; + signal run_nios_n : std_logic:='1'; + signal clk,i_clk: std_logic:='0'; + + signal SDRAM_CLK : std_logic; + signal SDRAM_CKE : std_logic; + signal SDRAM_NCS : std_logic; + signal SDRAM_NRAS : std_logic; + signal SDRAM_NCAS : std_logic; + signal SDRAM_NWE : std_logic; + signal SDRAM_ADDRESS : std_logic_vector(11 downto 0); + signal SDRAM_BANK : std_logic_vector(1 downto 0); + signal SDRAM_DQM : std_logic_vector(3 downto 0); + signal SDRAM_DATA : std_logic_vector(31 downto 0); + + signal address : std_logic_vector(21 downto 0); + signal writedata : std_logic_vector(31 downto 0):=(others=>'0'); + signal byteenable : std_logic_vector(3 downto 0):=(others=>'0'); + signal write : std_logic; + signal read : std_logic; + signal chipselect : std_logic:='1'; + signal readdata : std_logic_vector(31 downto 0); + signal waitrequest : std_logic; + signal readdatavalid : std_logic; + +begin + + reset<= not clk_ok; + run_nios_n<= reset after 140 us; + + UUT: sdram_ctrl + port map( + clk => i_clk, + reset => reset, + + avs_nios_chipselect => chipselect, + avs_nios_address => address, + avs_nios_byteenable => byteenable, + avs_nios_writedata => writedata, + avs_nios_write => write, + avs_nios_read => read, + avs_nios_readdata => readdata, + avs_nios_readdatavalid => readdatavalid, + avs_nios_waitrequest => waitrequest, + + sdram_addr => SDRAM_ADDRESS, + sdram_ba => SDRAM_BANK, + sdram_cas_n => SDRAM_NCAS, + sdram_cke => SDRAM_CKE, + sdram_cs_n => SDRAM_NCS, + sdram_dq => SDRAM_DATA, + sdram_dqm => SDRAM_DQM, + sdram_ras_n => SDRAM_NRAS, + sdram_we_n => SDRAM_NWE + ); + + sdram:mt48lc4m32b2 + PORT MAP( + Dq => SDRAM_DATA, + Addr => SDRAM_ADDRESS, + Ba => SDRAM_BANK, + Clk => SDRAM_CLK, + Cke => SDRAM_CKE, + Cs_n => SDRAM_NCS, + Ras_n => SDRAM_NRAS, + Cas_n => SDRAM_NCAS, + We_n => SDRAM_NWE, + Dqm => SDRAM_DQM + ); + + cpu: cpu_simulator + PORT MAP( + clk => i_clk, + reset => run_nios_n, + address => address, + writedata => writedata, + byteenable => byteenable, + write => write, + read => read, + readdata => readdata, + waitrequest => waitrequest, + readdatavalid => readdatavalid + ); + + U1 : pll + port map( + inclk0 => clk, + c0 => i_clk, + e0 => SDRAM_CLK, + locked =>clk_ok + ); + + clock_generator:process + begin + wait for 21 ns; + clk<= clk xor '1'; + end process; +end structure; Index: sdram_ctrl/tags/V10/test_bench/mt48lc4m32b2.vhd =================================================================== --- sdram_ctrl/tags/V10/test_bench/mt48lc4m32b2.vhd (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/mt48lc4m32b2.vhd (revision 8) @@ -0,0 +1,1134 @@ +----------------------------------------------------------------------------------------- +-- +-- File Name: MT48LC4M32B2.VHD +-- Version: 2.0 +-- Date: January 24th, 2002 +-- Model: Behavioral +-- Simulator: Model Technology +-- +-- Dependencies: None +-- +-- Email: modelsupport@micron.com +-- Company: Micron Technology, Inc. +-- Part Number: MT48LC4M32A2 (1Mb x 32 x 4 Banks) +-- +-- Description: Micron 128Mb SDRAM +-- +-- Limitation: - Doesn't check for 4096-cycle refresh +-- +-- Note: - Set simulator resolution to "ps" accuracy +-- +-- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY +-- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY +-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR +-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT. +-- +-- Copyright (c) 1998 Micron Semiconductor Products, Inc. +-- All rights researved +-- +-- Rev Author Date Changes +-- --- -------------------------- ------------------------------------- +-- 2.0 SH 01/24/2002 - Second Release +-- Micron Technology Inc. +-- +-------------------------------------------------------------------------- + +LIBRARY IEEE; + USE IEEE.STD_LOGIC_1164.ALL; + USE IEEE.STD_LOGIC_UNSIGNED.ALL; + USE IEEE.STD_LOGIC_ARITH.ALL; + +ENTITY mt48lc4m32b2 IS + GENERIC ( + -- Timing Parameters for -75 (PC133) and CL = 3 + tAC : TIME := 5.4 ns; + tHZ : TIME := 5.4 ns; + tOH : TIME := 2.7 ns; + tMRD : INTEGER := 2; -- 2 Clk Cycles + tRAS : TIME := 44.0 ns; + tRC : TIME := 66.0 ns; + tRCD : TIME := 20.0 ns; + tRFC : TIME := 66.0 ns; + tRP : TIME := 20.0 ns; + tRRD : TIME := 15.0 ns; + tWRa : TIME := 7.5 ns; -- Auto precharge + tWRm : TIME := 15.0 ns; -- Manual Precharge + + tAH : TIME := 0.8 ns; + tAS : TIME := 1.5 ns; + tCH : TIME := 2.5 ns; + tCL : TIME := 2.5 ns; + tCK : TIME := 7.5 ns; + tDH : TIME := 0.8 ns; + tDS : TIME := 1.5 ns; + tCKH : TIME := 0.8 ns; + tCKS : TIME := 1.5 ns; + tCMH : TIME := 0.8 ns; + tCMS : TIME := 1.5 ns; + + addr_bits : INTEGER := 12; + data_bits : INTEGER := 32; + col_bits : INTEGER := 8 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + Clk : IN STD_LOGIC := '0'; + Cke : IN STD_LOGIC := '1'; + Cs_n : IN STD_LOGIC := '1'; + Ras_n : IN STD_LOGIC := '1'; + Cas_n : IN STD_LOGIC := '1'; + We_n : IN STD_LOGIC := '1'; + Dqm : IN STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000" + ); +END mt48lc4m32b2; + +ARCHITECTURE behave OF mt48lc4m32b2 IS + TYPE State IS (BST, NOP, PRECH, READ, WRITE); + TYPE Array4xI IS ARRAY (3 DOWNTO 0) OF INTEGER; + TYPE Array4xT IS ARRAY (3 DOWNTO 0) OF TIME; + TYPE Array4xB IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; + TYPE Array4x2BV IS ARRAY (3 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array4xCBV IS ARRAY (4 DOWNTO 0) OF STD_LOGIC_VECTOR (Col_bits - 1 DOWNTO 0); + TYPE Array_state IS ARRAY (4 DOWNTO 0) OF State; + SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + SIGNAL Active_enable, Aref_enable, Burst_term : STD_LOGIC := '0'; + SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0'; + SIGNAL Burst_length_1, Burst_length_2, Burst_length_4, Burst_length_8 : STD_LOGIC := '0'; + SIGNAL Cas_latency_1, Cas_latency_2, Cas_latency_3 : STD_LOGIC := '0'; + SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0'; + SIGNAL Write_burst_mode : STD_LOGIC := '0'; + SIGNAL Sys_clk, CkeZ : STD_LOGIC := '0'; + +BEGIN + -- Strip the strength + Cs_in <= To_X01 (Cs_n); + Ras_in <= To_X01 (Ras_n); + Cas_in <= To_X01 (Cas_n); + We_in <= To_X01 (We_n); + + -- Commands Decode + Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in; + Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in; + Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in); + Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in); + Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in); + Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in; + Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in); + + -- Burst Length Decode + Burst_length_1 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND NOT(Mode_reg(0)); + Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0); + Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0)); + Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + + -- CAS Latency Decode + Cas_latency_1 <= NOT(Mode_reg(6)) AND NOT(Mode_reg(5)) AND Mode_reg(4); + Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4); + + -- Write Burst Mode + Write_burst_mode <= Mode_reg(9); + + -- System Clock + int_clk : PROCESS (Clk) + BEGIN + IF Clk'LAST_VALUE = '0' AND Clk = '1' THEN + CkeZ <= Cke; + END IF; + Sys_clk <= CkeZ AND Clk; + END PROCESS; + + state_register : PROCESS + TYPE ram_type IS ARRAY (2**col_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); + TYPE ram_pntr IS ACCESS ram_type; + TYPE ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF ram_pntr; + VARIABLE Bank0 : ram_stor; + VARIABLE Bank1 : ram_stor; + VARIABLE Bank2 : ram_stor; + VARIABLE Bank3 : ram_stor; + VARIABLE Row_index, Col_index : INTEGER := 0; + VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => '0'); + + VARIABLE Col_addr : Array4xCBV; + VARIABLE Bank_addr : Array4x2BV; + VARIABLE Dqm_reg0, Dqm_reg1 : STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000"; + + VARIABLE Bank, Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE B0_row_addr, B1_row_addr, B2_row_addr, B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Col_brst : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Row : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Col : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Burst_counter : INTEGER := 0; + + VARIABLE Command : Array_state; + VARIABLE Bank_precharge : Array4x2BV; + VARIABLE A10_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE Auto_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE Read_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE Write_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE RW_interrupt_read : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE RW_interrupt_write : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE RW_interrupt_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE RW_interrupt_counter : Array4xI := (0 & 0 & 0 & 0); + VARIABLE Count_precharge : Array4xI := (0 & 0 & 0 & 0); + + VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0'; + VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0'; + VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1'; + + -- Timing Check + VARIABLE MRD_chk : INTEGER := 0; + VARIABLE RFC_chk : TIME := 0 ns; + VARIABLE RRD_chk : TIME := 0 ns; + VARIABLE WR_chkm : Array4xT := (0 ns & 0 ns & 0 ns & 0 ns); + VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns; + VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns; + VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns; + VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns; + + -- Initialize empty rows + PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR (1 DOWNTO 0); Row_index : INTEGER) IS + VARIABLE i, j : INTEGER := 0; + BEGIN + IF Bank = "00" THEN + IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty + Bank0 (Row_index) := NEW ram_type; -- Open new row for access + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank0 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "01" THEN + IF Bank1 (Row_index) = NULL THEN + Bank1 (Row_index) := NEW ram_type; + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank1 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "10" THEN + IF Bank2 (Row_index) = NULL THEN + Bank2 (Row_index) := NEW ram_type; + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank2 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "11" THEN + IF Bank3 (Row_index) = NULL THEN + Bank3 (Row_index) := NEW ram_type; + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank3 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + END IF; + END; + + -- Burst Counter + PROCEDURE Burst_decode IS + VARIABLE Col_int : INTEGER := 0; + VARIABLE Col_vec, Col_temp : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0'); + BEGIN + -- Advance Burst Counter + Burst_counter := Burst_counter + 1; + + -- Burst Type + IF Mode_reg (3) = '0' THEN + Col_int := conv_integer(Col) + 1; + Col_temp := CONV_STD_LOGIC_VECTOR(Col_int, col_bits); + ELSIF Mode_reg (3) = '1' THEN + Col_vec := CONV_STD_LOGIC_VECTOR(Burst_counter, col_bits); + Col_temp (2) := Col_vec (2) XOR Col_brst (2); + Col_temp (1) := Col_vec (1) XOR Col_brst (1); + Col_temp (0) := Col_vec (0) XOR Col_brst (0); + END IF; + + -- Burst Length + IF Burst_length_2 = '1' THEN + Col (0) := Col_temp (0); + ELSIF Burst_length_4 = '1' THEN + Col (1 DOWNTO 0) := Col_temp (1 DOWNTO 0); + ELSIF Burst_length_8 = '1' THEN + Col (2 DOWNTO 0) := Col_temp (2 DOWNTO 0); + ELSE + Col := Col_temp; + END IF; + + -- Burst Read Single Write + IF Write_burst_mode = '1' AND Data_in_enable = '1' THEN + Data_in_enable := '0'; + END IF; + + -- Data counter + IF Burst_length_1 = '1' THEN + IF Burst_counter >= 1 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_2 = '1' THEN + IF Burst_counter >= 2 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_4 = '1' THEN + IF Burst_counter >= 4 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_8 = '1' THEN + IF Burst_counter >= 8 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + END IF; + END; + + BEGIN + WAIT ON Sys_clk; + IF Sys_clk'event AND Sys_clk = '1' THEN + -- Internal Pipeline + Command(0) := Command(1); + Command(1) := Command(2); + Command(2) := Command(3); + Command(3) := NOP; + + Col_addr(0) := Col_addr(1); + Col_addr(1) := Col_addr(2); + Col_addr(2) := Col_addr(3); + Col_addr(3) := (OTHERS => '0'); + + Bank_addr(0) := Bank_addr(1); + Bank_addr(1) := Bank_addr(2); + Bank_addr(2) := Bank_addr(3); + Bank_addr(3) := "00"; + + Bank_precharge(0) := Bank_precharge(1); + Bank_precharge(1) := Bank_precharge(2); + Bank_precharge(2) := Bank_precharge(3); + Bank_precharge(3) := "00"; + + A10_precharge(0) := A10_precharge(1); + A10_precharge(1) := A10_precharge(2); + A10_precharge(2) := A10_precharge(3); + A10_precharge(3) := '0'; + + -- Dqm pipeline for Read + Dqm_reg0 := Dqm_reg1; + Dqm_reg1 := Dqm; + + -- Read or Write with Auto Precharge Counter + IF Auto_precharge (0) = '1' THEN + Count_precharge (0) := Count_precharge (0) + 1; + END IF; + IF Auto_precharge (1) = '1' THEN + Count_precharge (1) := Count_precharge (1) + 1; + END IF; + IF Auto_precharge (2) = '1' THEN + Count_precharge (2) := Count_precharge (2) + 1; + END IF; + IF Auto_precharge (3) = '1' THEN + Count_precharge (3) := Count_precharge (3) + 1; + END IF; + + -- Read or Write Interrupt Counter + IF RW_interrupt_write (0) = '1' THEN + RW_interrupt_counter (0) := RW_interrupt_counter (0) + 1; + END IF; + IF RW_interrupt_write (1) = '1' THEN + RW_interrupt_counter (1) := RW_interrupt_counter (1) + 1; + END IF; + IF RW_interrupt_write (2) = '1' THEN + RW_interrupt_counter (2) := RW_interrupt_counter (2) + 1; + END IF; + IF RW_interrupt_write (3) = '1' THEN + RW_interrupt_counter (3) := RW_interrupt_counter (3) + 1; + END IF; + + -- tMRD Counter + MRD_chk := MRD_chk + 1; + + -- Auto Refresh + IF Aref_enable = '1' THEN + -- Auto Refresh to Auto Refresh + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT ((NOW - RP_chk0 >= tRP) OR (NOW - RP_chk1 >= tRP) OR + (NOW - RP_chk2 >= tRP) OR (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT (Pc_b0 ='1' AND Pc_b1 = '1' AND Pc_b2 ='1' AND Pc_b3 = '1') + REPORT "All banks must be Precharge before Auto Refresh" + SEVERITY WARNING; + + -- Load Mode Register to Auto Refresh + ASSERT (MRD_chk >= tMRD) + REPORT "tMRD violation during Auto Refresh" + SEVERITY WARNING; + + -- Record current tRFC time + RFC_chk := NOW; + END IF; + + -- Load Mode Register + IF Mode_reg_enable = '1' THEN + -- Register Mode + Mode_reg <= Addr; + + -- Precharge to Load Mode Register + ASSERT (Pc_b0 ='1' AND Pc_b1 = '1' AND Pc_b2 ='1' AND Pc_b3 = '1') + REPORT "All banks must be Precharge before Load Mode Register" + SEVERITY WARNING; + + -- Precharge to Load Mode Register + ASSERT ((NOW - RP_chk0 >= tRP) OR (NOW - RP_chk1 >= tRP) OR + (NOW - RP_chk2 >= tRP) OR (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Load Mode Register" + SEVERITY WARNING; + + -- Auto Refresh to Load Mode Register + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Load Mode Register" + SEVERITY WARNING; + + -- Load Mode Register to Load Mode Register + ASSERT (MRD_chk >= tMRD) + REPORT "tMRD violation during Load Mode Register" + SEVERITY WARNING; + + -- Record current tMRD time + MRD_chk := 0; + END IF; + + -- Active Block (Latch Bank and Row Address) + IF Active_enable = '1' THEN + -- Activate an OPEN bank can corrupt data + ASSERT ((Ba = "00" AND Act_b0 = '0') OR (Ba = "01" AND Act_b1 = '0') OR + (Ba = "10" AND Act_b2 = '0') OR (Ba = "11" AND Act_b3 = '0')) + REPORT "Bank is already activated - data can be corrupted" + SEVERITY WARNING; + + -- Activate Bank 0 + IF Ba = "00" AND Pc_b0 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk0 >= tRC) + REPORT "tRC violation during Activate Bank 0" + SEVERITY WARNING; + + -- Precharge to Activate + ASSERT (NOW - RP_chk0 >= tRP) + REPORT "tRP violation during Activate Bank 0" + SEVERITY WARNING; + + -- Record variables for checking violation + Act_b0 := '1'; + Pc_b0 := '0'; + B0_row_addr := Addr; + RAS_chk0 := NOW; + RC_chk0 := NOW; + RCD_chk0 := NOW; + END IF; + + -- Activate Bank 1 + IF Ba = "01" AND Pc_b1 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk1 >= tRC) + REPORT "tRC violation during Activate Bank 1" + SEVERITY WARNING; + + -- Precharge to Activate + ASSERT (NOW - RP_chk1 >= tRP) + REPORT "tRP violation during Activate Bank 1" + SEVERITY WARNING; + + -- Record variables for checking violation + Act_b1 := '1'; + Pc_b1 := '0'; + B1_row_addr := Addr; + RAS_chk1 := NOW; + RC_chk1 := NOW; + RCD_chk1 := NOW; + END IF; + + -- Activate Bank 2 + IF Ba = "10" AND Pc_b2 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk2 >= tRC) + REPORT "tRC violation during Activate Bank 2" + SEVERITY WARNING; + + -- Precharge to Activate + ASSERT (NOW - RP_chk2 >= tRP) + REPORT "tRP violation during Activate Bank 2" + SEVERITY WARNING; + + -- Record variables for checking violation + Act_b2 := '1'; + Pc_b2 := '0'; + B2_row_addr := Addr; + RAS_chk2 := NOW; + RC_chk2 := NOW; + RCD_chk2 := NOW; + END IF; + + -- Activate Bank 3 + IF Ba = "11" AND Pc_b3 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk3 >= tRC) + REPORT "tRC violation during Activate Bank 3" + SEVERITY WARNING; + + -- Precharge to Activate + ASSERT (NOW - RP_chk3 >= tRP) + REPORT "tRP violation during Activate Bank 3" + SEVERITY WARNING; + + -- Record variables for checking violation + Act_b3 := '1'; + Pc_b3 := '0'; + B3_row_addr := Addr; + RAS_chk3 := NOW; + RC_chk3 := NOW; + RCD_chk3 := NOW; + END IF; + + -- Activate to Activate (different bank) + IF (Prev_bank /= Ba) THEN + ASSERT (NOW - RRD_chk >= tRRD) + REPORT "tRRD violation during Activate" + SEVERITY WARNING; + END IF; + + -- Auto Refresh to Activate + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Activate" + SEVERITY WARNING; + + -- Load Mode Register to Activate + ASSERT (MRD_chk >= tMRD) + REPORT "tMRD violation during Activate" + SEVERITY WARNING; + + -- Record variable for checking violation + RRD_chk := NOW; + Prev_Bank := Ba; + END IF; + + -- Precharge Block + IF Prech_enable = '1' THEN + -- Load Mode Register to Precharge + ASSERT (MRD_chk >= tMRD) + REPORT "tMRD violation during Precharge" + SEVERITY WARNING; + + -- Precharge Bank 0 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN + Act_b0 := '0'; + Pc_b0 := '1'; + RP_chk0 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk0 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chkm(0) >= tWRm) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 1 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN + Act_b1 := '0'; + Pc_b1 := '1'; + RP_chk1 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk1 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chkm(1) >= tWRm) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 2 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN + Act_b2 := '0'; + Pc_b2 := '1'; + RP_chk2 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk2 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chkm(2) >= tWRm) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 3 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN + Act_b3 := '0'; + Pc_b3 := '1'; + RP_chk3 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk3 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chkm(3) >= tWRm) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Terminate a Write Immediately (if same bank or all banks) + IF (Data_in_enable = '1' AND (Bank = Ba OR Addr(10) = '1')) THEN + Data_in_enable := '0'; + END IF; + + -- Precharge Command Pipeline for READ + IF CAS_latency_3 = '1' THEN + Command(2) := PRECH; + Bank_precharge(2) := Ba; + A10_precharge(2) := Addr(10); + ELSIF CAS_latency_2 = '1' THEN + Command(1) := PRECH; + Bank_precharge(1) := Ba; + A10_precharge(1) := Addr(10); + END IF; + END IF; + + -- Burst Terminate + IF Burst_term = '1' THEN + -- Terminate a Write immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + END IF; + + -- Terminate a Read depend on CAS Latency + IF CAS_latency_3 = '1' THEN + Command(2) := BST; + ELSIF CAS_latency_2 = '1' THEN + Command(1) := BST; + END IF; + END IF; + + -- Read Command + IF Read_enable = '1' THEN + -- Activate to Read + ASSERT ((Ba="00" AND Act_b0='1') OR (Ba="01" AND Act_b1='1') OR + (Ba="10" AND Act_b2='1') OR (Ba="11" AND Act_b3='1')) + REPORT "Bank is not Activated for Read" + SEVERITY WARNING; + + -- Activate to Read + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Read" + SEVERITY WARNING; + + -- CAS Latency Pipeline + IF Cas_latency_3 = '1' THEN + Command(2) := READ; + Col_addr (2) := Addr(col_bits - 1 DOWNTO 0); + Bank_addr (2) := Ba; + ELSIF Cas_latency_2 = '1' THEN + Command(1) := READ; + Col_addr (1) := Addr(col_bits - 1 DOWNTO 0); + Bank_addr (1) := Ba; + ELSIF Cas_latency_1 = '1' THEN + Command(0) := READ; + Col_addr (0) := Addr(col_bits - 1 DOWNTO 0); + Bank_addr (0) := Ba; + END IF; + + -- Read Terminate Write Immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + -- Interrupt a Write with Auto Precharge + IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Write_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN + RW_interrupt_write(CONV_INTEGER(RW_Interrupt_Bank)) := '1'; + RW_interrupt_counter (CONV_INTEGER(RW_Interrupt_Bank)) := 0; + ASSERT FALSE REPORT "Read interrupt a Write with Auto Precharge." SEVERITY NOTE; + END IF; + END IF; + + -- Read Terminate Read after CL - 1 + IF (Data_out_enable = '1' AND ((Cas_latency_2 = '1' AND ((Burst_length_2 = '1' AND Burst_counter < 1) OR + (Burst_length_4 = '1' AND Burst_counter < 3) OR + (Burst_length_8 = '1' AND Burst_counter < 7))) OR + (Cas_latency_3 = '1' AND ((Burst_length_4 = '1' AND Burst_counter < 2) OR + (Burst_length_8 = '1' AND Burst_counter < 6))))) THEN + -- Interrupt a Read with Auto Precharge + IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Read_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN + RW_interrupt_read(CONV_INTEGER(RW_Interrupt_Bank)) := '1'; + ASSERT FALSE REPORT "Read interrupt a Read with Auto Precharge." SEVERITY NOTE; + END IF; + END IF; + + -- Auto Precharge + IF Addr(10) = '1' THEN + Auto_precharge (CONV_INTEGER(Ba)) := '1'; + Count_precharge (CONV_INTEGER(Ba)) := 0; + RW_Interrupt_Bank := Ba; + Read_precharge (CONV_INTEGER(Ba)) := '1'; + END IF; + END IF; + + -- Write Command + IF Write_enable = '1' THEN + -- Activate to Write + ASSERT ((Ba="00" AND Act_b0='1') OR (Ba="01" AND Act_b1='1') OR + (Ba="10" AND Act_b2='1') OR (Ba="11" AND Act_b3='1')) + REPORT "Bank is not Activated for Write" + SEVERITY WARNING; + + -- Activate to Write + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Write" + SEVERITY WARNING; + + -- Latch write command, bank, column + Command(0) := WRITE; + Col_addr (0) := Addr(col_bits - 1 DOWNTO 0); + Bank_addr (0) := Ba; + + -- Write Terminate Write Immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + + -- Interrupt a Write with Auto Precharge + IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Write_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN + RW_interrupt_write(CONV_INTEGER(RW_Interrupt_Bank)) := '1'; + RW_interrupt_counter (CONV_INTEGER(RW_Interrupt_Bank)) := 0; + ASSERT FALSE REPORT "Write interrupt a Write with Auto Precharge." SEVERITY NOTE; + END IF; + END IF; + + -- Write Terminate Read Immediately + IF Data_out_enable = '1' THEN + Data_out_enable := '0'; + + -- Interrupt a Read with Auto Precharge + IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Read_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN + RW_interrupt_read(CONV_INTEGER(RW_Interrupt_Bank)) := '1'; + ASSERT FALSE REPORT "Write interrupt a Read with Auto Precharge." SEVERITY NOTE; + END IF; + END IF; + + -- Auto Precharge + IF Addr(10) = '1' THEN + Auto_precharge (CONV_INTEGER(Ba)) := '1'; + Count_precharge (CONV_INTEGER(Ba)) := 0; + RW_Interrupt_Bank := Ba; + Write_precharge (CONV_INTEGER(Ba)) := '1'; + END IF; + END IF; + + -- Write with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet tRAS requirement + -- and 2. tWR cycle(s) after last valid data + -- or 3. Interrupt by a Read or Write (with or without Auto Precharge) + -- + -- Note: Model is starting the internal precharge 1 cycle after they meet all the + -- requirement but tRP will be compensate for the time after the 1 cycle. + IF ((Auto_precharge(0) = '1') AND (Write_precharge(0) = '1')) THEN + IF (((NOW - RAS_chk0 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(0) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(0) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(0) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(0) >= 8))) OR + (RW_interrupt_write(0) = '1' AND RW_interrupt_counter(0) >= 1)) THEN + Auto_precharge(0) := '0'; + Write_precharge(0) := '0'; + RW_interrupt_write(0) := '0'; + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW + tWRa; + END IF; + END IF; + IF ((Auto_precharge(1) = '1') AND (Write_precharge(1) = '1')) THEN + IF (((NOW - RAS_chk1 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(1) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(1) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(1) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(1) >= 8))) OR + (RW_interrupt_write(1) = '1' AND RW_interrupt_counter(1) >= 1)) THEN + Auto_precharge(1) := '0'; + Write_precharge(1) := '0'; + RW_interrupt_write(1) := '0'; + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW + tWRa; + END IF; + END IF; + IF ((Auto_precharge(2) = '1') AND (Write_precharge(2) = '1')) THEN + IF (((NOW - RAS_chk2 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(2) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(2) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(2) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(2) >= 8))) OR + (RW_interrupt_write(2) = '1' AND RW_interrupt_counter(2) >= 1)) THEN + Auto_precharge(2) := '0'; + Write_precharge(2) := '0'; + RW_interrupt_write(2) := '0'; + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW + tWRa; + END IF; + END IF; + IF ((Auto_precharge(3) = '1') AND (Write_precharge(3) = '1')) THEN + IF (((NOW - RAS_chk3 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(3) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(3) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(3) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(3) >= 8))) OR + (RW_interrupt_write(0) = '1' AND RW_interrupt_counter(3) >= 1)) THEN + Auto_precharge(3) := '0'; + Write_precharge(3) := '0'; + RW_interrupt_write(3) := '0'; + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW + tWRa; + END IF; + END IF; + + -- Read with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet minimum tRAS requirement + -- and 2. CL - 1 cycle(s) before last valid data + -- or 3. Interrupt by a Read or Write (with or without Auto Precharge) + IF ((Auto_precharge(0) = '1') AND (Read_precharge(0) = '1')) THEN + IF (((NOW - RAS_chk0 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(0) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(0) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(0) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(0) >= 8))) OR + (RW_interrupt_read(0) = '1')) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW; + Auto_precharge(0) := '0'; + Read_precharge(0) := '0'; + RW_interrupt_read(0) := '0'; + END IF; + END IF; + IF ((Auto_precharge(1) = '1') AND (Read_precharge(1) = '1')) THEN + IF (((NOW - RAS_chk1 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(1) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(1) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(1) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(1) >= 8))) OR + (RW_interrupt_read(1) = '1')) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW; + Auto_precharge(1) := '0'; + Read_precharge(1) := '0'; + RW_interrupt_read(1) := '0'; + END IF; + END IF; + IF ((Auto_precharge(2) = '1') AND (Read_precharge(2) = '1')) THEN + IF (((NOW - RAS_chk2 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(2) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(2) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(2) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(2) >= 8))) OR + (RW_interrupt_read(2) = '1')) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW; + Auto_precharge(2) := '0'; + Read_precharge(2) := '0'; + RW_interrupt_read(2) := '0'; + END IF; + END IF; + IF ((Auto_precharge(3) = '1') AND (Read_precharge(3) = '1')) THEN + IF (((NOW - RAS_chk3 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(3) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(3) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(3) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(3) >= 8))) OR + (RW_interrupt_read(3) = '1')) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW; + Auto_precharge(3) := '0'; + Read_precharge(3) := '0'; + RW_interrupt_read(3) := '0'; + END IF; + END IF; + + -- Internal Precharge or Bst + IF Command(0) = PRECH THEN -- PRECH terminate a read if same bank or all banks + IF Bank_precharge(0) = Bank OR A10_precharge(0) = '1' THEN + IF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Command(0) = BST THEN -- BST terminate a read regardless of bank + IF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + + IF Data_out_enable = '0' THEN + Dq <= TRANSPORT (OTHERS => 'Z') AFTER tOH; + END IF; + + -- Detect Read or Write Command + IF Command(0) = READ THEN + Bank := Bank_addr (0); + Col := Col_addr (0); + Col_brst := Col_addr (0); + IF Bank_addr (0) = "00" THEN + Row := B0_row_addr; + ELSIF Bank_addr (0) = "01" THEN + Row := B1_row_addr; + ELSIF Bank_addr (0) = "10" THEN + Row := B2_row_addr; + ELSE + Row := B3_row_addr; + END IF; + Burst_counter := 0; + Data_in_enable := '0'; + Data_out_enable := '1'; + ELSIF Command(0) = WRITE THEN + Bank := Bank_addr(0); + Col := Col_addr(0); + Col_brst := Col_addr(0); + IF Bank_addr (0) = "00" THEN + Row := B0_row_addr; + ELSIF Bank_addr (0) = "01" THEN + Row := B1_row_addr; + ELSIF Bank_addr (0) = "10" THEN + Row := B2_row_addr; + ELSE + Row := B3_row_addr; + END IF; + Burst_counter := 0; + Data_in_enable := '1'; + Data_out_enable := '0'; + END IF; + + -- DQ (Driver / Receiver) + Row_index := CONV_INTEGER (Row); + Col_index := CONV_INTEGER (Col); + + IF Data_in_enable = '1' THEN + IF Dqm /= "1111" THEN + -- Initialize Memory + Init_mem (Bank, Row_index); + + -- Array Buffer + CASE Bank IS + WHEN "00" => Dq_temp := Bank0 (Row_index) (Col_index); + WHEN "01" => Dq_temp := Bank1 (Row_index) (Col_index); + WHEN "10" => Dq_temp := Bank2 (Row_index) (Col_index); + WHEN OTHERS => Dq_temp := Bank3 (Row_index) (Col_index); + END CASE; + + -- Dqm Operation + IF Dqm (0) = '0' THEN + Dq_temp ( 7 DOWNTO 0) := Dq ( 7 DOWNTO 0); + END IF; + IF Dqm (1) = '0' THEN + Dq_temp (15 DOWNTO 8) := Dq (15 DOWNTO 8); + END IF; + IF Dqm (2) = '0' THEN + Dq_temp (23 DOWNTO 16) := Dq (23 DOWNTO 16); + END IF; + IF Dqm (3) = '0' THEN + Dq_temp (31 DOWNTO 24) := Dq (31 DOWNTO 24); + END IF; + + -- Write to Memory + CASE Bank IS + WHEN "00" => Bank0 (Row_index) (Col_index) := Dq_temp; + WHEN "01" => Bank1 (Row_index) (Col_index) := Dq_temp; + WHEN "10" => Bank2 (Row_index) (Col_index) := Dq_temp; + WHEN OTHERS => Bank3 (Row_index) (Col_index) := Dq_temp; + END CASE; + + -- Record tWR for manual precharge + WR_chkm(CONV_INTEGER(Bank)) := NOW; + END IF; + + -- Advance Burst Counter + Burst_decode; + + ELSIF Data_out_enable = '1' THEN + IF Dqm_reg0 /= "1111" THEN + -- Initialize Memory + Init_mem (Bank, Row_index); + + -- Array Buffer + CASE Bank IS + WHEN "00" => Dq_temp := Bank0 (Row_index) (Col_index); + WHEN "01" => Dq_temp := Bank1 (Row_index) (Col_index); + WHEN "10" => Dq_temp := Bank2 (Row_index) (Col_index); + WHEN OTHERS => Dq_temp := Bank3 (Row_index) (Col_index); + END CASE; + + -- Dqm Operation + IF Dqm_reg0 (0) = '1' THEN + Dq_temp ( 7 DOWNTO 0) := (OTHERS => 'Z'); + END IF; + IF Dqm_reg0 (1) = '1' THEN + Dq_temp (15 DOWNTO 8) := (OTHERS => 'Z'); + END IF; + IF Dqm_reg0 (2) = '1' THEN + Dq_temp (23 DOWNTO 16) := (OTHERS => 'Z'); + END IF; + IF Dqm_reg0 (3) = '1' THEN + Dq_temp (31 DOWNTO 24) := (OTHERS => 'Z'); + END IF; + + -- Output + Dq <= TRANSPORT Dq_temp AFTER tAC; + ELSE + Dq <= TRANSPORT (OTHERS => 'Z') AFTER tHZ; + END IF; + + -- Advance Burst Counter + Burst_decode; + END IF; + END IF; + + END PROCESS; + + -- Clock timing checks + Clock_check : PROCESS + VARIABLE Clk_low, Clk_high : TIME := 0 ns; + BEGIN + WAIT ON Clk; + IF (Clk = '1' AND NOW >= 10 ns) THEN + ASSERT (NOW - Clk_low >= tCL) + REPORT "tCL violation" + SEVERITY WARNING; + ASSERT (NOW - Clk_high >= tCK) + REPORT "tCK violation" + SEVERITY WARNING; + Clk_high := NOW; + ELSIF (Clk = '0' AND NOW /= 0 ns) THEN + ASSERT (NOW - Clk_high >= tCH) + REPORT "tCH violation" + SEVERITY WARNING; + Clk_low := NOW; + END IF; + END PROCESS; + + -- Setup timing checks + Setup_check : PROCESS + BEGIN + WAIT ON Clk; + IF Clk = '1' THEN + ASSERT(Cke'LAST_EVENT >= tCKS) + REPORT "CKE Setup time violation -- tCKS" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tCMS) + REPORT "CS# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tCMS) + REPORT "CAS# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tCMS) + REPORT "RAS# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tCMS) + REPORT "WE# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Dqm'LAST_EVENT >= tCMS) + REPORT "Dqm Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tAS) + REPORT "ADDR Setup time violation -- tAS" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tAS) + REPORT "BA Setup time violation -- tAS" + SEVERITY WARNING; + ASSERT(Dq'LAST_EVENT >= tDS) + REPORT "Dq Setup time violation -- tDS" + SEVERITY WARNING; + END IF; + END PROCESS; + + -- Hold timing checks + Hold_check : PROCESS + BEGIN + WAIT ON Clk'DELAYED (tCKH), Clk'DELAYED (tCMH), Clk'DELAYED (tAH), Clk'DELAYED (tDH); + IF Clk'DELAYED (tCKH) = '1' THEN + ASSERT(Cke'LAST_EVENT > tCKH) + REPORT "CKE Hold time violation -- tCKH" + SEVERITY WARNING; + END IF; + IF Clk'DELAYED (tCMH) = '1' THEN + ASSERT(Cs_n'LAST_EVENT > tCMH) + REPORT "CS# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT > tCMH) + REPORT "CAS# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT > tCMH) + REPORT "RAS# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT > tCMH) + REPORT "WE# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(Dqm'LAST_EVENT > tCMH) + REPORT "Dqm Hold time violation -- tCMH" + SEVERITY WARNING; + END IF; + IF Clk'DELAYED (tAH) = '1' THEN + ASSERT(Addr'LAST_EVENT > tAH) + REPORT "ADDR Hold time violation -- tAH" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT > tAH) + REPORT "BA Hold time violation -- tAH" + SEVERITY WARNING; + END IF; + IF Clk'DELAYED (tDH) = '1' THEN + ASSERT(Dq'LAST_EVENT > tDH) + REPORT "Dq Hold time violation -- tDH" + SEVERITY WARNING; + END IF; + END PROCESS; + +END behave; Index: sdram_ctrl/tags/V10/test_bench/cpu_simulator.vhd =================================================================== --- sdram_ctrl/tags/V10/test_bench/cpu_simulator.vhd (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/cpu_simulator.vhd (revision 8) @@ -0,0 +1,72 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +ENTITY cpu_simulator IS + PORT(clk, reset: in std_logic; + + address : out std_logic_vector(21 downto 0); + writedata : out std_logic_vector(31 downto 0); + byteenable : out std_logic_vector(3 downto 0); + write : out std_logic; + read : out std_logic; + readdata : in std_logic_vector(31 downto 0); + waitrequest : in std_logic; + readdatavalid : in std_logic + ); +END cpu_simulator; + +ARCHITECTURE behaviour OF cpu_simulator IS + signal counter: unsigned(3 downto 0); + type vector is + record + address: integer; + writedata: integer; + byteenable: std_logic_vector(3 downto 0); + write: std_logic; + read: std_logic; + end record; + type script is array(0 to (2**counter'length)-1) of vector; + signal wave_form: script:=( + (0,0,"1111",'1','0'), + (1,1,"1111",'1','0'), + (2,2,"1111",'1','0'), + (3,3,"1111",'1','0'), + (1024,1024,"1111",'0','1'), + (1025,1025,"1111",'0','1'), + (1026,1026,"1111",'0','1'), + (1027,1027,"1111",'0','1'), + (1024,1024,"1111",'1','0'), + (1025,1025,"1111",'1','0'), + (1026,1026,"1111",'1','0'), + (1027,1027,"1111",'1','0'), + (0,0,"1111",'0','1'), + (1,1,"1111",'0','1'), + (2,2,"1111",'0','1'), + (3,3,"1111",'0','1') + ); +BEGIN + process(clk,reset) + begin + if reset='1' + then + counter<=(others=>'0'); + address<=(others=>'0'); + writedata<=(others=>'0'); + byteenable<=(others=>'0'); + write<='0'; + read<='0'; + elsif rising_edge(clk) + then + if waitrequest='0' + then + counter<=counter+1; + address<=std_logic_vector(to_unsigned(wave_form(to_integer(counter)).address,address'length)); + writedata<=std_logic_vector(to_unsigned(wave_form(to_integer(counter)).writedata,writedata'length)); + byteenable<=wave_form(to_integer(counter)).byteenable; + write<=wave_form(to_integer(counter)).write; + read<=wave_form(to_integer(counter)).read; + end if; + end if; + end process; +END behaviour; \ No newline at end of file Index: sdram_ctrl/tags/V10/test_bench/pll.vhd =================================================================== --- sdram_ctrl/tags/V10/test_bench/pll.vhd (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/pll.vhd (revision 8) @@ -0,0 +1,256 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: pll.vhd +-- Megafunction Name(s): +-- altpll +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 5.1 Build 213 01/19/2006 SP 1 SJ Full Version +-- ************************************************************ + + +--Copyright (C) 1991-2006 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.altera_mf_components.all; + +ENTITY pll IS + PORT + ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + e0 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +END pll; + + +ARCHITECTURE SYN OF pll IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (3 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC ; + SIGNAL sub_wire6 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire7_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altpll + GENERIC ( + clk0_divide_by : NATURAL; + clk0_duty_cycle : NATURAL; + clk0_multiply_by : NATURAL; + clk0_phase_shift : STRING; + compensate_clock : STRING; + extclk0_divide_by : NATURAL; + extclk0_duty_cycle : NATURAL; + extclk0_multiply_by : NATURAL; + extclk0_phase_shift : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + invalid_lock_multiplier : NATURAL; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + valid_lock_multiplier : NATURAL + ); + PORT ( + extclk : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + locked : OUT STD_LOGIC ; + clk : OUT STD_LOGIC_VECTOR (5 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire7_bv(0 DOWNTO 0) <= "0"; + sub_wire7 <= To_stdlogicvector(sub_wire7_bv); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + locked <= sub_wire2; + sub_wire4 <= sub_wire3(0); + e0 <= sub_wire4; + sub_wire5 <= inclk0; + sub_wire6 <= sub_wire7(0 DOWNTO 0) & sub_wire5; + + altpll_component : altpll + GENERIC MAP ( + clk0_divide_by => 2, + clk0_duty_cycle => 50, + clk0_multiply_by => 11, + clk0_phase_shift => "0", + compensate_clock => "CLK0", + extclk0_divide_by => 2, + extclk0_duty_cycle => 50, + extclk0_multiply_by => 11, + extclk0_phase_shift => "5682", + inclk0_input_frequency => 41666, + intended_device_family => "Cyclone", + invalid_lock_multiplier => 5, + lpm_type => "altpll", + operation_mode => "NORMAL", + pll_type => "AUTO", + valid_lock_multiplier => 1 + ) + PORT MAP ( + inclk => sub_wire6, + clk => sub_wire0, + locked => sub_wire2, + extclk => sub_wire3 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0" +-- Retrieval info: PRIVATE: DEVICE_FAMILY NUMERIC "11" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: DEV_FAMILY STRING "Cyclone" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR6 NUMERIC "1" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE6 STRING "50.00000000" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "24.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: LOCK_LOSS_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "504.000" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT6 STRING "deg" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK6 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: MULT_FACTOR6 NUMERIC "1" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "132.000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ6 STRING "100.000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE6 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT6 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT6 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT6 STRING "deg" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK6 STRING "0" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK6 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA6 STRING "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "2" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "11" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: EXTCLK0_DIVIDE_BY NUMERIC "2" +-- Retrieval info: CONSTANT: EXTCLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: EXTCLK0_MULTIPLY_BY NUMERIC "11" +-- Retrieval info: CONSTANT: EXTCLK0_PHASE_SHIFT STRING "5682" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "41666" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone" +-- Retrieval info: CONSTANT: INVALID_LOCK_MULTIPLIER NUMERIC "5" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: VALID_LOCK_MULTIPLIER NUMERIC "1" +-- Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT VCC "@clk[5..0]" +-- Retrieval info: USED_PORT: @extclk 0 0 4 0 OUTPUT VCC "@extclk[3..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT VCC "c0" +-- Retrieval info: USED_PORT: e0 0 0 0 0 OUTPUT VCC "e0" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT GND "inclk0" +-- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" +-- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: e0 0 0 0 0 @extclk 0 0 1 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.vhd FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_waveforms.html FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_wave*.jpg FALSE FALSE Index: sdram_ctrl/tags/V10/test_bench/old/nios.dat =================================================================== --- sdram_ctrl/tags/V10/test_bench/old/nios.dat (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/old/nios.dat (revision 8) @@ -0,0 +1 @@ + ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ \ No newline at end of file Index: sdram_ctrl/tags/V10/test_bench/old/Hello_LED_sdram_0.dat =================================================================== --- sdram_ctrl/tags/V10/test_bench/old/Hello_LED_sdram_0.dat (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/old/Hello_LED_sdram_0.dat (revision 8) @@ -0,0 +1,49 @@ +@00000000 00400034 +@00000001 08400804 +@00000002 0800683A +@00000003 00000000 +@00000004 00000000 +@00000005 00000000 +@00000006 00000000 +@00000007 00000000 +@00000008 06C04034 +@00000009 DEC00004 +@0000000A 06800074 +@0000000B D6A03104 +@0000000C 00000340 +@0000000D DEFFFD04 +@0000000E DF000215 +@0000000F D839883A +@00000010 00800084 +@00000011 E0800005 +@00000012 E0000045 +@00000013 E0800003 +@00000014 1080204C +@00000015 1005003A +@00000016 1000031E +@00000017 E0800043 +@00000018 1080005C +@00000019 E0800045 +@0000001A E0800043 +@0000001B 1005003A +@0000001C 1000041E +@0000001D E0800003 +@0000001E 1004D07A +@0000001F E0800005 +@00000020 00000306 +@00000021 E0800003 +@00000022 1085883A +@00000023 E0800005 +@00000024 00C04034 +@00000025 18C21004 +@00000026 E0800003 +@00000027 18800035 +@00000028 E0000115 +@00000029 E0C00117 +@0000002A 008000F4 +@0000002B 10834FC4 +@0000002C 10FFE616 +@0000002D E0800117 +@0000002E 10800044 +@0000002F E0800115 +@00000030 003FF806 Index: sdram_ctrl/tags/V10/test_bench/old/cpu_simulator_file_based.vhd =================================================================== --- sdram_ctrl/tags/V10/test_bench/old/cpu_simulator_file_based.vhd (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/old/cpu_simulator_file_based.vhd (revision 8) @@ -0,0 +1,79 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +ENTITY cpu_simulator IS + PORT(clk, reset: in std_logic; + + address : out std_logic_vector(21 downto 0); + writedata : out std_logic_vector(31 downto 0); + byteenable : out std_logic_vector(3 downto 0); + write : out std_logic; + read : out std_logic; + readdata : in std_logic_vector(31 downto 0); + waitrequest : in std_logic; + readdatavalid : in std_logic + ); +END cpu_simulator; + +ARCHITECTURE behaviour OF cpu_simulator IS + signal address: std_logic_vector(21 downto 0); + signal writedata: std_logic_vector(31 downto 0); + signal byteenable: std_logic_vector(3 downto 0); + signal write: std_logic; + signal read: std_logic; + +BEGIN + process(clk,reset) + variable service: std_logic_vector(7 downto 0); + variable b0,b1,b2,b3,b4,b5,b6,b7: BYTE; + begin + if reset='1' + then + file_close(NIOS); + file_open(NIOS, FILES_PATH&"nios.dat", READ_MODE); + elsif rising_edge(clk) + then + if waitrequest='0' + then + if Endfile(NIOS) + then + file_close(NIOS); + file_open(NIOS, FILES_PATH&"nios.dat", READ_MODE); + else + Read(NIOS,b0); + Read(NIOS,b1); + Read(NIOS,b2); + Read(NIOS,b3); + Read(NIOS,b4); + Read(NIOS,b5); + Read(NIOS,b6); + Read(NIOS,b7); + service:=char2std_logic_vector(b0); + address<=service(5 downto 0)&char2std_logic_vector(b1)&char2std_logic_vector(b2); + writedata<=char2std_logic_vector(b3)&char2std_logic_vector(b4)&char2std_logic_vector(b5)&char2std_logic_vector(b6); + service:=char2std_logic_vector(b7); + byteenable<=not service(7 downto 4); + write<=service(3); + read<=service(2); + end if; + end if; + end if; + end process; + + process(clk,reset) + begin + if reset='1' + then + readed<=(others=>'0'); + new_data<='0'; + elsif rising_edge(clk) + then + new_data<=readdatavalid; + if readdatavalid='1' + then + readed<=readdata; + end if; + end if; + end process; +END behaviour; \ No newline at end of file Index: sdram_ctrl/tags/V10/test_bench/old/Count_Binary_sdram_0.dat =================================================================== --- sdram_ctrl/tags/V10/test_bench/old/Count_Binary_sdram_0.dat (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/old/Count_Binary_sdram_0.dat (revision 8) @@ -0,0 +1,5026 @@ +;Count Binary +@00000000 00820014 +@00000001 1001483A +@00000002 10BFF804 +@00000003 00BFFD16 +@00000004 00400034 +@00000005 08407204 +@00000006 0800683A +@00000007 00000000 +@00000008 DEFFED04 +@00000009 DFC00015 +@0000000A D8400215 +@0000000B D8800315 +@0000000C D8C00415 +@0000000D D9000515 +@0000000E D9400615 +@0000000F D9800715 +@00000010 D9C00815 +@00000011 000B307A +@00000012 DA000915 +@00000013 DA400A15 +@00000014 DA800B15 +@00000015 DAC00C15 +@00000016 DB000D15 +@00000017 DB400E15 +@00000018 DB800F15 +@00000019 DBC01015 +@0000001A D9401115 +@0000001B EBFFFF04 +@0000001C DBC01215 +@0000001D 0009313A +@0000001E 2880004C +@0000001F 10000326 +@00000020 20000226 +@00000021 00000EC0 +@00000022 00000306 +@00000023 DF401215 +@00000024 E8BFFF17 +@00000025 003DA03A +@00000026 D9401117 +@00000027 DF401217 +@00000028 DFC00017 +@00000029 2801707A +@0000002A D8400217 +@0000002B D8800317 +@0000002C D8C00417 +@0000002D D9000517 +@0000002E D9400617 +@0000002F D9800717 +@00000030 D9C00817 +@00000031 DA000917 +@00000032 DA400A17 +@00000033 DA800B17 +@00000034 DAC00C17 +@00000035 DB000D17 +@00000036 DB400E17 +@00000037 DB800F17 +@00000038 DBC01017 +@00000039 DEC01304 +@0000003A E800083A +@0000003B DEFFF904 +@0000003C DFC00615 +@0000003D DF000515 +@0000003E D839883A +@0000003F 0005313A +@00000040 E0800415 +@00000041 E0800417 +@00000042 E0800315 +@00000043 E0800317 +@00000044 E0800015 +@00000045 E0000215 +@00000046 00800044 +@00000047 E0800115 +@00000048 E0C00017 +@00000049 E0800117 +@0000004A 1884703A +@0000004B 1005003A +@0000004C 1000101E +@0000004D 00C00034 +@0000004E 18D3A504 +@0000004F E0800217 +@00000050 100490FA +@00000051 10C9883A +@00000052 00C00034 +@00000053 18D3A504 +@00000054 E0800217 +@00000055 100490FA +@00000056 10C5883A +@00000057 10800104 +@00000058 20C00017 +@00000059 11000017 +@0000005A E1400217 +@0000005B 183EE83A +@0000005C 00000706 +@0000005D E0800117 +@0000005E 1085883A +@0000005F E0800115 +@00000060 E0800217 +@00000061 10800044 +@00000062 E0800215 +@00000063 003FE406 +@00000064 0005313A +@00000065 E0800315 +@00000066 E0800317 +@00000067 E0800415 +@00000068 E0800417 +@00000069 E0800015 +@0000006A E0800017 +@0000006B 1005003A +@0000006C 1000011E +@0000006D 003FD706 +@0000006E DFC00617 +@0000006F DF000517 +@00000070 DEC00704 +@00000071 F800283A +@00000072 06C04034 +@00000073 DEC00004 +@00000074 06800074 +@00000075 D6B38B04 +@00000076 00800034 +@00000077 1093A104 +@00000078 00C00034 +@00000079 18D42804 +@0000007A 10C00326 +@0000007B 10000015 +@0000007C 10800104 +@0000007D 10FFFD36 +@0000007E 0000DB40 +@0000007F DEFFFE04 +@00000080 DFC00115 +@00000081 DF000015 +@00000082 D839883A +@00000083 01000034 +@00000084 210D8704 +@00000085 00005100 +@00000086 01000034 +@00000087 210D8F04 +@00000088 00005100 +@00000089 01000034 +@0000008A 210D9604 +@0000008B 00005100 +@0000008C 01000034 +@0000008D 210D9D04 +@0000008E 00005100 +@0000008F DFC00117 +@00000090 DF000017 +@00000091 DEC00204 +@00000092 F800283A +@00000093 DEFFFF04 +@00000094 DF000015 +@00000095 D839883A +@00000096 00C04034 +@00000097 18C21004 +@00000098 D0A01603 +@00000099 18800035 +@0000009A DF000017 +@0000009B DEC00104 +@0000009C F800283A +@0000009D DEFFFF04 +@0000009E DF000015 +@0000009F D839883A +@000000A0 DF000017 +@000000A1 DEC00104 +@000000A2 F800283A +@000000A3 DEFFFE04 +@000000A4 DF000115 +@000000A5 D839883A +@000000A6 E1000015 +@000000A7 DF000117 +@000000A8 DEC00204 +@000000A9 F800283A +@000000AA DEFFFD04 +@000000AB DFC00215 +@000000AC DF000115 +@000000AD D839883A +@000000AE E1000015 +@000000AF 000024C0 +@000000B0 00002740 +@000000B1 E1000017 +@000000B2 000028C0 +@000000B3 D1601603 +@000000B4 01000034 +@000000B5 210DA404 +@000000B6 00005100 +@000000B7 DFC00217 +@000000B8 DF000117 +@000000B9 DEC00304 +@000000BA F800283A +@000000BB DEFFFA04 +@000000BC DFC00515 +@000000BD DF000415 +@000000BE D839883A +@000000BF E1400115 +@000000C0 E1000005 +@000000C1 E0800003 +@000000C2 108018D8 +@000000C3 1000201E +@000000C4 D0A01717 +@000000C5 E0800215 +@000000C6 E0C00217 +@000000C7 188000A0 +@000000C8 1000101E +@000000C9 E0C00217 +@000000CA 188000C8 +@000000CB 1000041E +@000000CC E0C00217 +@000000CD 18800060 +@000000CE 1000081E +@000000CF 00001106 +@000000D0 E0C00217 +@000000D1 18800120 +@000000D2 1000081E +@000000D3 E0C00217 +@000000D4 18800220 +@000000D5 1000081E +@000000D6 00000A06 +@000000D7 000024C0 +@000000D8 00003106 +@000000D9 00002740 +@000000DA 00002F06 +@000000DB E1000117 +@000000DC 000028C0 +@000000DD 00002C06 +@000000DE E1000117 +@000000DF 00002A80 +@000000E0 00002906 +@000000E1 E1000117 +@000000E2 00002A80 +@000000E3 00002606 +@000000E4 D0A01717 +@000000E5 E0800315 +@000000E6 E0C00317 +@000000E7 188000A0 +@000000E8 1000131E +@000000E9 E0C00317 +@000000EA 188000C8 +@000000EB 1000041E +@000000EC E0C00317 +@000000ED 18800060 +@000000EE 1000081E +@000000EF 00001A06 +@000000F0 E0C00317 +@000000F1 18800120 +@000000F2 10000E1E +@000000F3 E0C00317 +@000000F4 18800220 +@000000F5 1000101E +@000000F6 00001306 +@000000F7 01000034 +@000000F8 210DA604 +@000000F9 00005100 +@000000FA D0201715 +@000000FB 00000E06 +@000000FC 01000034 +@000000FD 210DA904 +@000000FE 00005100 +@000000FF D0201715 +@00000100 00000906 +@00000101 01000034 +@00000102 210DAC04 +@00000103 00005100 +@00000104 D0201715 +@00000105 00000406 +@00000106 01000034 +@00000107 210DAF04 +@00000108 00005100 +@00000109 D0201715 +@0000010A DFC00517 +@0000010B DF000417 +@0000010C DEC00604 +@0000010D F800283A +@0000010E DEFFFB04 +@0000010F DFC00415 +@00000110 DF000315 +@00000111 D839883A +@00000112 D0201605 +@00000113 00001FC0 +@00000114 010000B4 +@00000115 2121A804 +@00000116 0000E6C0 +@00000117 D0A01717 +@00000118 1005003A +@00000119 1000041E +@0000011A 010018C4 +@0000011B E1400217 +@0000011C 00002EC0 +@0000011D 00000206 +@0000011E E1000217 +@0000011F 00002A80 +@00000120 D0A01603 +@00000121 10803FD8 +@00000122 10001D1E +@00000123 01000034 +@00000124 210DB204 +@00000125 00005100 +@00000126 D0201715 +@00000127 E0000115 +@00000128 E0000015 +@00000129 E0800017 +@0000012A 10801188 +@0000012B 1000131E +@0000012C 01000034 +@0000012D 210DB504 +@0000012E 00005100 +@0000012F D0A01717 +@00000130 1005003A +@00000131 1000061E +@00000132 01000034 +@00000133 210DB604 +@00000134 00005100 +@00000135 01001DC4 +@00000136 E1400217 +@00000137 00002EC0 +@00000138 010000B4 +@00000139 2121A804 +@0000013A 0000E6C0 +@0000013B E0800017 +@0000013C 10800044 +@0000013D E0800015 +@0000013E 003FEA06 +@0000013F 00001FC0 +@00000140 D0A01603 +@00000141 10800044 +@00000142 D0A01605 +@00000143 003FD006 +@00000144 DEFFFC04 +@00000145 DFC00015 +@00000146 D9400115 +@00000147 D9800215 +@00000148 D9C00315 +@00000149 D0A00017 +@0000014A 200B883A +@0000014B D9800104 +@0000014C 11000117 +@0000014D 00800034 +@0000014E 1082C604 +@0000014F 20800115 +@00000150 0000AF40 +@00000151 DFC00017 +@00000152 DEC00404 +@00000153 F800283A +@00000154 DEFFFB04 +@00000155 DC000315 +@00000156 DC400215 +@00000157 DC800115 +@00000158 DFC00415 +@00000159 D9800005 +@0000015A 2025883A +@0000015B 2823883A +@0000015C 3C3FFFC4 +@0000015D 01C00A0E +@0000015E 88C00117 +@0000015F 9009883A +@00000160 880B883A +@00000161 D80D883A +@00000162 01C00044 +@00000163 183EE83A +@00000164 8007883A +@00000165 843FFFC4 +@00000166 1000081E +@00000167 00FFF616 +@00000168 0005883A +@00000169 DFC00417 +@0000016A DC000317 +@0000016B DC400217 +@0000016C DC800117 +@0000016D DEC00504 +@0000016E F800283A +@0000016F 00BFFFC4 +@00000170 DFC00417 +@00000171 DC000317 +@00000172 DC400217 +@00000173 DC800117 +@00000174 DEC00504 +@00000175 F800283A +@00000176 DEFFEC04 +@00000177 DF001215 +@00000178 DC001115 +@00000179 DC401015 +@0000017A DC800F15 +@0000017B DD000D15 +@0000017C DD800B15 +@0000017D DDC00A15 +@0000017E DFC01315 +@0000017F DCC00E15 +@00000180 DD400C15 +@00000181 30800003 +@00000182 202F883A +@00000183 2829883A +@00000184 1021883A +@00000185 D9C00215 +@00000186 34800044 +@00000187 D8000315 +@00000188 D8000415 +@00000189 D8000515 +@0000018A D8000615 +@0000018B 0039883A +@0000018C D8000715 +@0000018D D8000815 +@0000018E 002D883A +@0000018F 0023883A +@00000190 1000061E +@00000191 00002206 +@00000192 88002E26 +@00000193 90800003 +@00000194 94800044 +@00000195 1021883A +@00000196 10001D26 +@00000197 01C00044 +@00000198 89C03626 +@00000199 3C7FF80E +@0000019A 00800084 +@0000019B 88BFF71E +@0000019C 81003FCC +@0000019D 2100201C +@0000019E 213FE004 +@0000019F 00800B84 +@000001A0 20803826 +@000001A1 817FF404 +@000001A2 28C03FCC +@000001A3 00800244 +@000001A4 10C03636 +@000001A5 D8C00617 +@000001A6 2821883A +@000001A7 18005916 +@000001A8 D9000617 +@000001A9 01400284 +@000001AA 0000D8C0 +@000001AB 80C03FCC +@000001AC 18C0201C +@000001AD 18FFE004 +@000001AE 10C5883A +@000001AF D8800615 +@000001B0 90800003 +@000001B1 94800044 +@000001B2 1021883A +@000001B3 103FE31E +@000001B4 B005883A +@000001B5 DFC01317 +@000001B6 DF001217 +@000001B7 DC001117 +@000001B8 DC401017 +@000001B9 DC800F17 +@000001BA DCC00E17 +@000001BB DD000D17 +@000001BC DD400C17 +@000001BD DD800B17 +@000001BE DDC00A17 +@000001BF DEC01404 +@000001C0 F800283A +@000001C1 80C03FCC +@000001C2 18C0201C +@000001C3 18FFE004 +@000001C4 00800944 +@000001C5 18802026 +@000001C6 A0C00117 +@000001C7 B809883A +@000001C8 DC000005 +@000001C9 A00B883A +@000001CA D80D883A +@000001CB 183EE83A +@000001CC 1000E81E +@000001CD B5800044 +@000001CE 003FC406 +@000001CF 81003FCC +@000001D0 2100201C +@000001D1 213FE004 +@000001D2 00800C04 +@000001D3 20801C26 +@000001D4 00800944 +@000001D5 20801D26 +@000001D6 00800B84 +@000001D7 04400084 +@000001D8 20BFC81E +@000001D9 D8000615 +@000001DA 003FB806 +@000001DB 00801B04 +@000001DC 20802126 +@000001DD 20FFEA04 +@000001DE 00800804 +@000001DF 10C01C36 +@000001E0 180490BA +@000001E1 00C00034 +@000001E2 18CDBA04 +@000001E3 10C5883A +@000001E4 11000017 +@000001E5 2000683A +@000001E6 00BFFFC4 +@000001E7 07000284 +@000001E8 3823883A +@000001E9 D9C00715 +@000001EA D8800515 +@000001EB D8000315 +@000001EC D8000415 +@000001ED D8000815 +@000001EE D8800615 +@000001EF 003FA306 +@000001F0 DC400315 +@000001F1 04400084 +@000001F2 003FA006 +@000001F3 A0C00117 +@000001F4 B809883A +@000001F5 DC000045 +@000001F6 A00B883A +@000001F7 D9800044 +@000001F8 880F883A +@000001F9 183EE83A +@000001FA 1000BA1E +@000001FB B46D883A +@000001FC 0023883A +@000001FD 003F9506 +@000001FE 00800044 +@000001FF D8800415 +@00000200 003F9206 +@00000201 D8800517 +@00000202 1000B416 +@00000203 D9000517 +@00000204 01400284 +@00000205 0000D8C0 +@00000206 D8800515 +@00000207 D8C00517 +@00000208 80803FCC +@00000209 1080201C +@0000020A 10BFE004 +@0000020B 1887883A +@0000020C D8C00515 +@0000020D 003F8506 +@0000020E 00C00044 +@0000020F D8000715 +@00000210 07000404 +@00000211 D8C00815 +@00000212 D8800717 +@00000213 D8000915 +@00000214 1007003A +@00000215 D8800217 +@00000216 15400017 +@00000217 10800104 +@00000218 D8800215 +@00000219 1800011E +@0000021A A8009E16 +@0000021B 04C00044 +@0000021C A821883A +@0000021D 9823883A +@0000021E 00000506 +@0000021F 9809883A +@00000220 E00B883A +@00000221 0000D8C0 +@00000222 1027883A +@00000223 8C400044 +@00000224 8009883A +@00000225 E00B883A +@00000226 0000D6C0 +@00000227 1021883A +@00000228 103FF61E +@00000229 D8800517 +@0000022A D8C00317 +@0000022B 1445C83A +@0000022C D8800515 +@0000022D 18006F26 +@0000022E D8800917 +@0000022F 10000D26 +@00000230 A0C00117 +@00000231 00800B44 +@00000232 D8800085 +@00000233 B809883A +@00000234 A00B883A +@00000235 D9800084 +@00000236 01C00044 +@00000237 183EE83A +@00000238 10007C1E +@00000239 D8C00517 +@0000023A B5800044 +@0000023B 18FFFFC4 +@0000023C D8C00515 +@0000023D D9C00517 +@0000023E B809883A +@0000023F A00B883A +@00000240 01800C04 +@00000241 00005500 +@00000242 1000721E +@00000243 D8800517 +@00000244 B0AD883A +@00000245 983FB626 +@00000246 A809883A +@00000247 980B883A +@00000248 0000D6C0 +@00000249 11000C04 +@0000024A 20C03FCC +@0000024B 00800E44 +@0000024C 10C0042E +@0000024D D8800817 +@0000024E 190001C4 +@0000024F 1000011E +@00000250 190009C4 +@00000251 A0C00117 +@00000252 A00B883A +@00000253 D9000105 +@00000254 D9800104 +@00000255 B809883A +@00000256 01C00044 +@00000257 183EE83A +@00000258 10005C1E +@00000259 A809883A +@0000025A 980B883A +@0000025B 0000D7C0 +@0000025C 9809883A +@0000025D E00B883A +@0000025E 102B883A +@0000025F 0000D6C0 +@00000260 1027883A +@00000261 B5800044 +@00000262 003FE206 +@00000263 D8800517 +@00000264 B809883A +@00000265 A00B883A +@00000266 01800804 +@00000267 11FFFFC4 +@00000268 00005500 +@00000269 10004B1E +@0000026A D8800217 +@0000026B A2000117 +@0000026C B809883A +@0000026D 10C00017 +@0000026E 10800104 +@0000026F A00B883A +@00000270 D8C00145 +@00000271 D8C00517 +@00000272 D9800144 +@00000273 01C00044 +@00000274 D8800215 +@00000275 1DA1883A +@00000276 403EE83A +@00000277 10003D1E +@00000278 802D883A +@00000279 0023883A +@0000027A 003F1806 +@0000027B 07000404 +@0000027C D8000715 +@0000027D 003F9406 +@0000027E D8000715 +@0000027F 003F9206 +@00000280 D8800217 +@00000281 14400017 +@00000282 10C00104 +@00000283 D8C00215 +@00000284 8809883A +@00000285 0000BEC0 +@00000286 1021883A +@00000287 D8800517 +@00000288 B809883A +@00000289 A00B883A +@0000028A 1427C83A +@0000028B 01800804 +@0000028C 980F883A +@0000028D 00005500 +@0000028E 1000261E +@0000028F A0C00117 +@00000290 880D883A +@00000291 B809883A +@00000292 A00B883A +@00000293 800F883A +@00000294 B4ED883A +@00000295 183EE83A +@00000296 10001E1E +@00000297 B42D883A +@00000298 0023883A +@00000299 003EF906 +@0000029A 07000204 +@0000029B D8000715 +@0000029C 003F7506 +@0000029D D8C00917 +@0000029E 1821003A +@0000029F 8000031E +@000002A0 D8800517 +@000002A1 10BFFFC4 +@000002A2 D8800515 +@000002A3 D9C00517 +@000002A4 B809883A +@000002A5 A00B883A +@000002A6 01800804 +@000002A7 00005500 +@000002A8 10000C1E +@000002A9 D8C00517 +@000002AA B0ED883A +@000002AB 803F991E +@000002AC A0C00117 +@000002AD 00800B44 +@000002AE D88000C5 +@000002AF B809883A +@000002B0 A00B883A +@000002B1 D98000C4 +@000002B2 01C00044 +@000002B3 183EE83A +@000002B4 103FAC26 +@000002B5 00BFFFC4 +@000002B6 003EFE06 +@000002B7 D8000515 +@000002B8 003F4E06 +@000002B9 00C00044 +@000002BA 056BC83A +@000002BB D8C00915 +@000002BC 003F5E06 +@000002BD 2013883A +@000002BE D1200017 +@000002BF 2807883A +@000002C0 300F883A +@000002C1 480B883A +@000002C2 180D883A +@000002C3 02000034 +@000002C4 42017604 +@000002C5 4000683A +@000002C6 DEFFFA04 +@000002C7 DC400315 +@000002C8 DC800215 +@000002C9 DCC00115 +@000002CA DFC00515 +@000002CB DC000415 +@000002CC DD000015 +@000002CD 28C0000B +@000002CE 2027883A +@000002CF 2825883A +@000002D0 1804D0FA +@000002D1 3023883A +@000002D2 013FFFC4 +@000002D3 1080004C +@000002D4 10001B26 +@000002D5 2940008B +@000002D6 28BFFFCC +@000002D7 10A0001C +@000002D8 10A00004 +@000002D9 10001316 +@000002DA 3821883A +@000002DB 05010004 +@000002DC 01C00316 +@000002DD 00001B06 +@000002DE 04001A0E +@000002DF 9140008B +@000002E0 297FFFCC +@000002E1 2960001C +@000002E2 880D883A +@000002E3 9809883A +@000002E4 29600004 +@000002E5 800F883A +@000002E6 A400010E +@000002E7 01C10004 +@000002E8 0000C0C0 +@000002E9 80A1C83A +@000002EA 88A3883A +@000002EB 00BFF216 +@000002EC 90C0000B +@000002ED 18801014 +@000002EE 9080000D +@000002EF 013FFFC4 +@000002F0 2005883A +@000002F1 DFC00517 +@000002F2 DC000417 +@000002F3 DC400317 +@000002F4 DC800217 +@000002F5 DCC00117 +@000002F6 DD000017 +@000002F7 DEC00604 +@000002F8 F800283A +@000002F9 0009883A +@000002FA 003FF506 +@000002FB 20800007 +@000002FC 2007883A +@000002FD 10000326 +@000002FE 21000044 +@000002FF 20800007 +@00000300 103FFD1E +@00000301 20C5C83A +@00000302 F800283A +@00000303 DEFFFE04 +@00000304 DC000015 +@00000305 2021883A +@00000306 2809883A +@00000307 300B883A +@00000308 380D883A +@00000309 DFC00115 +@0000030A D0201815 +@0000030B 0000E980 +@0000030C 1007883A +@0000030D 00BFFFC4 +@0000030E 18800526 +@0000030F 1805883A +@00000310 DFC00117 +@00000311 DC000017 +@00000312 DEC00204 +@00000313 F800283A +@00000314 D0A01817 +@00000315 103FF926 +@00000316 80800315 +@00000317 1805883A +@00000318 DFC00117 +@00000319 DC000017 +@0000031A DEC00204 +@0000031B F800283A +@0000031C 00800044 +@0000031D 000F883A +@0000031E 2900082E +@0000031F 28000716 +@00000320 294B883A +@00000321 1085883A +@00000322 29000E2E +@00000323 1007003A +@00000324 1800081E +@00000325 283FFA0E +@00000326 1800061E +@00000327 21400236 +@00000328 2149C83A +@00000329 388EB03A +@0000032A 1004D07A +@0000032B 280AD07A +@0000032C 103FFA1E +@0000032D 3000011E +@0000032E 3809883A +@0000032F 2005883A +@00000330 F800283A +@00000331 1007003A +@00000332 183FF426 +@00000333 003FF906 +@00000334 DEFFFE04 +@00000335 DC000015 +@00000336 DFC00115 +@00000337 000D883A +@00000338 0021883A +@00000339 20000816 +@0000033A 28000A16 +@0000033B 0000C700 +@0000033C 80000126 +@0000033D 0085C83A +@0000033E DFC00117 +@0000033F DC000017 +@00000340 DEC00204 +@00000341 F800283A +@00000342 0109C83A +@00000343 0021003A +@00000344 283FF60E +@00000345 014BC83A +@00000346 8021003A +@00000347 003FF306 +@00000348 DEFFFE04 +@00000349 DC000015 +@0000034A DFC00115 +@0000034B 01800044 +@0000034C 0021883A +@0000034D 20000816 +@0000034E 28000A16 +@0000034F 0000C700 +@00000350 80000126 +@00000351 0085C83A +@00000352 DFC00117 +@00000353 DC000017 +@00000354 DEC00204 +@00000355 F800283A +@00000356 0109C83A +@00000357 3021883A +@00000358 283FF60E +@00000359 014BC83A +@0000035A 003FF406 +@0000035B 000D883A +@0000035C 02000034 +@0000035D 42031C04 +@0000035E 4000683A +@0000035F 01800044 +@00000360 02000034 +@00000361 42031C04 +@00000362 4000683A +@00000363 0007883A +@00000364 20000626 +@00000365 2080004C +@00000366 2008D07A +@00000367 10000126 +@00000368 1947883A +@00000369 294B883A +@0000036A 203FFA1E +@0000036B 1805883A +@0000036C F800283A +@0000036D DEFFFD04 +@0000036E DFC00215 +@0000036F DF000115 +@00000370 D839883A +@00000371 E0000015 +@00000372 000170FA +@00000373 00800044 +@00000374 1001703A +@00000375 E0000015 +@00000376 0000E200 +@00000377 01000034 +@00000378 210DDB04 +@00000379 01400034 +@0000037A 294DDB04 +@0000037B 01800034 +@0000037C 318DDB04 +@0000037D 0001F540 +@0000037E 0001DC80 +@0000037F 01000034 +@00000380 21078804 +@00000381 000283C0 +@00000382 D1200117 +@00000383 D1600217 +@00000384 D1A00317 +@00000385 00004380 +@00000386 1009883A +@00000387 00028D80 +@00000388 DEFFFE04 +@00000389 DFC00115 +@0000038A DF000015 +@0000038B D839883A +@0000038C 01004034 +@0000038D 21020004 +@0000038E 01400044 +@0000038F 0180FA04 +@00000390 00019880 +@00000391 01000034 +@00000392 210DFD04 +@00000393 01404034 +@00000394 29421404 +@00000395 01800404 +@00000396 00018600 +@00000397 DFC00117 +@00000398 DF000017 +@00000399 DEC00204 +@0000039A F800283A +@0000039B DEFFFD04 +@0000039C DFC00215 +@0000039D DF000115 +@0000039E D839883A +@0000039F E1000015 +@000003A0 E1000017 +@000003A1 0001B500 +@000003A2 DFC00217 +@000003A3 DF000117 +@000003A4 DEC00304 +@000003A5 F800283A +@000003A6 DEFFF704 +@000003A7 DFC00815 +@000003A8 DF000715 +@000003A9 D839883A +@000003AA E1000015 +@000003AB E1400115 +@000003AC E1800215 +@000003AD E0800017 +@000003AE 1004803A +@000003AF 1000091E +@000003B0 E1000017 +@000003B1 01400304 +@000003B2 0000D8C0 +@000003B3 1007883A +@000003B4 00800034 +@000003B5 10921F04 +@000003B6 1887883A +@000003B7 E0C00615 +@000003B8 00000106 +@000003B9 E0000615 +@000003BA E0800617 +@000003BB E0800315 +@000003BC E0800317 +@000003BD 1005003A +@000003BE 1000241E +@000003BF E0800317 +@000003C0 10800217 +@000003C1 108000CC +@000003C2 1005003A +@000003C3 10001A1E +@000003C4 E0800317 +@000003C5 10800017 +@000003C6 10800617 +@000003C7 1005003A +@000003C8 1000151E +@000003C9 E0800317 +@000003CA 10800017 +@000003CB 10800617 +@000003CC E1000317 +@000003CD E1400117 +@000003CE E1800217 +@000003CF 103EE83A +@000003D0 E0800415 +@000003D1 E0800417 +@000003D2 1004403A +@000003D3 1000071E +@000003D4 0000FB80 +@000003D5 E0C00417 +@000003D6 00C7C83A +@000003D7 10C00015 +@000003D8 00BFFFC4 +@000003D9 E0800515 +@000003DA 00000E06 +@000003DB E0800417 +@000003DC E0800515 +@000003DD 00000B06 +@000003DE 0000FB80 +@000003DF 1007883A +@000003E0 00800344 +@000003E1 18800015 +@000003E2 00000406 +@000003E3 0000FB80 +@000003E4 1007883A +@000003E5 00801444 +@000003E6 18800015 +@000003E7 00BFFFC4 +@000003E8 E0800515 +@000003E9 E0800517 +@000003EA DFC00817 +@000003EB DF000717 +@000003EC DEC00904 +@000003ED F800283A +@000003EE DEFFFD04 +@000003EF DFC00215 +@000003F0 DF000115 +@000003F1 D839883A +@000003F2 D0A00917 +@000003F3 1005003A +@000003F4 1000041E +@000003F5 D0A00917 +@000003F6 103EE83A +@000003F7 E0800015 +@000003F8 00000206 +@000003F9 D0A01804 +@000003FA E0800015 +@000003FB E0800017 +@000003FC DFC00217 +@000003FD DF000117 +@000003FE DEC00304 +@000003FF F800283A +@00000400 DEFFF204 +@00000401 DFC00D15 +@00000402 DF000C15 +@00000403 D839883A +@00000404 E1000015 +@00000405 E1400115 +@00000406 E1800215 +@00000407 E0800017 +@00000408 10800017 +@00000409 E0800315 +@0000040A E0800117 +@0000040B E0800415 +@0000040C E0000715 +@0000040D E0800217 +@0000040E 10800050 +@0000040F 10004D1E +@00000410 E0800317 +@00000411 10801417 +@00000412 E0800815 +@00000413 E0800317 +@00000414 10801517 +@00000415 E0800915 +@00000416 E0C00817 +@00000417 E0800917 +@00000418 18800536 +@00000419 E0800817 +@0000041A E0C00917 +@0000041B 10C5C83A +@0000041C E0800615 +@0000041D 00000406 +@0000041E 00820004 +@0000041F E0C00917 +@00000420 10C5C83A +@00000421 E0800615 +@00000422 E0800617 +@00000423 1004C03A +@00000424 1000011E +@00000425 00001E06 +@00000426 E0C00217 +@00000427 E0800617 +@00000428 1880022E +@00000429 E0800217 +@0000042A E0800615 +@0000042B E0C00317 +@0000042C E0800917 +@0000042D 1885883A +@0000042E 11401804 +@0000042F E1000417 +@00000430 E1800617 +@00000431 00030C00 +@00000432 E0C00417 +@00000433 E0800617 +@00000434 1885883A +@00000435 E0800415 +@00000436 E0C00217 +@00000437 E0800617 +@00000438 1885C83A +@00000439 E0800215 +@0000043A E1000317 +@0000043B E0C00917 +@0000043C E0800617 +@0000043D 1885883A +@0000043E 1081FFCC +@0000043F 20801515 +@00000440 E0800217 +@00000441 10800050 +@00000442 1000011E +@00000443 003FCC06 +@00000444 E0C00417 +@00000445 E0800117 +@00000446 18800126 +@00000447 00001506 +@00000448 E0800017 +@00000449 10800217 +@0000044A 1004D3BA +@0000044B 1080004C +@0000044C 1005003A +@0000044D 1000011E +@0000044E 00000E06 +@0000044F E0800317 +@00000450 10C01417 +@00000451 E0800817 +@00000452 1880061E +@00000453 E0800317 +@00000454 E0C00317 +@00000455 11001317 +@00000456 18800B17 +@00000457 2080012E +@00000458 003FF606 +@00000459 E0800317 +@0000045A 10C01417 +@0000045B E0800817 +@0000045C 18BFB01E +@0000045D E0000915 +@0000045E E0C00417 +@0000045F E0800117 +@00000460 18801726 +@00000461 0005303A +@00000462 E0800A15 +@00000463 0001703A +@00000464 E0800A17 +@00000465 E0800815 +@00000466 E0800817 +@00000467 E0800515 +@00000468 E0C00317 +@00000469 E0800317 +@0000046A 10801217 +@0000046B 10800054 +@0000046C 18801215 +@0000046D E0800317 +@0000046E 10800A17 +@0000046F 10800104 +@00000470 1007883A +@00000471 E0800317 +@00000472 10801217 +@00000473 18800035 +@00000474 E0800517 +@00000475 E0800A15 +@00000476 E0800A17 +@00000477 1001703A +@00000478 E0C00417 +@00000479 E0800117 +@0000047A 18800526 +@0000047B E0800417 +@0000047C E0C00117 +@0000047D 10C5C83A +@0000047E E0800B15 +@0000047F 00000B06 +@00000480 E0800017 +@00000481 10800217 +@00000482 1004D3BA +@00000483 1080004C +@00000484 1005003A +@00000485 1000031E +@00000486 00BFFD44 +@00000487 E0800B15 +@00000488 00000206 +@00000489 00BFFEC4 +@0000048A E0800B15 +@0000048B E0800B17 +@0000048C DFC00D17 +@0000048D DF000C17 +@0000048E DEC00E04 +@0000048F F800283A +@00000490 DEFFF104 +@00000491 DFC00E15 +@00000492 DF000D15 +@00000493 D839883A +@00000494 E1000015 +@00000495 E1400115 +@00000496 E1800215 +@00000497 E0000415 +@00000498 E0800017 +@00000499 10800017 +@0000049A E0800715 +@0000049B E0800117 +@0000049C E0800815 +@0000049D E0000915 +@0000049E E0800217 +@0000049F 10800050 +@000004A0 10003A1E +@000004A1 E0800717 +@000004A2 10801617 +@000004A3 E0800315 +@000004A4 E0800717 +@000004A5 10801717 +@000004A6 E0800415 +@000004A7 E0C00317 +@000004A8 E0800417 +@000004A9 1880062E +@000004AA E0C00417 +@000004AB E0800317 +@000004AC 1885C83A +@000004AD 10BFFFC4 +@000004AE E0800515 +@000004AF 00000C06 +@000004B0 E0800417 +@000004B1 1005003A +@000004B2 1000051E +@000004B3 00820004 +@000004B4 E0C00317 +@000004B5 10C5C83A +@000004B6 E0800515 +@000004B7 00000406 +@000004B8 0081FFC4 +@000004B9 E0C00317 +@000004BA 10C5C83A +@000004BB E0800515 +@000004BC E0800517 +@000004BD 1004C03A +@000004BE 1000011E +@000004BF 00001B06 +@000004C0 E0C00217 +@000004C1 E0800517 +@000004C2 1880022E +@000004C3 E0800217 +@000004C4 E0800515 +@000004C5 E0C00717 +@000004C6 E0800317 +@000004C7 1885883A +@000004C8 11021804 +@000004C9 E1400117 +@000004CA E1800517 +@000004CB 00030C00 +@000004CC E0C00117 +@000004CD E0800517 +@000004CE 1885883A +@000004CF E0800115 +@000004D0 E0C00217 +@000004D1 E0800517 +@000004D2 1885C83A +@000004D3 E0800215 +@000004D4 E1000717 +@000004D5 E0C00317 +@000004D6 E0800517 +@000004D7 1885883A +@000004D8 1081FFCC +@000004D9 20801615 +@000004DA 003FC306 +@000004DB 0005303A +@000004DC E0800B15 +@000004DD 0001703A +@000004DE E0800B17 +@000004DF E0800A15 +@000004E0 E0800A17 +@000004E1 E0800615 +@000004E2 E0C00717 +@000004E3 E0800717 +@000004E4 10801217 +@000004E5 10800094 +@000004E6 18801215 +@000004E7 E0800717 +@000004E8 10800A17 +@000004E9 10800104 +@000004EA 1007883A +@000004EB E0800717 +@000004EC 10801217 +@000004ED 18800035 +@000004EE E0800617 +@000004EF E0800B15 +@000004F0 E0800B17 +@000004F1 1001703A +@000004F2 E0800217 +@000004F3 10800050 +@000004F4 1000161E +@000004F5 E0800017 +@000004F6 10800217 +@000004F7 1004D3BA +@000004F8 1080004C +@000004F9 1005003A +@000004FA 1000011E +@000004FB 00001306 +@000004FC E0800717 +@000004FD 10C01717 +@000004FE E0800417 +@000004FF 1880061E +@00000500 E0800717 +@00000501 E0C00717 +@00000502 11001317 +@00000503 18800B17 +@00000504 2080012E +@00000505 003FF606 +@00000506 E0800717 +@00000507 10C01717 +@00000508 E0800417 +@00000509 1880011E +@0000050A 00000406 +@0000050B E0800217 +@0000050C 10800050 +@0000050D 1000011E +@0000050E 003F8F06 +@0000050F E0000B15 +@00000510 E0C00117 +@00000511 E0800817 +@00000512 18800526 +@00000513 E0800117 +@00000514 E0C00817 +@00000515 10C5C83A +@00000516 E0800C15 +@00000517 00000B06 +@00000518 E0800017 +@00000519 10800217 +@0000051A 1004D3BA +@0000051B 1080004C +@0000051C 1005003A +@0000051D 1000031E +@0000051E 00BFFD44 +@0000051F E0800C15 +@00000520 00000206 +@00000521 00BFFEC4 +@00000522 E0800C15 +@00000523 E0800C17 +@00000524 DFC00E17 +@00000525 DF000D17 +@00000526 DEC00F04 +@00000527 F800283A +@00000528 DEFFF804 +@00000529 DF000715 +@0000052A D839883A +@0000052B E1000015 +@0000052C E1400115 +@0000052D E0800017 +@0000052E E0800215 +@0000052F E0800217 +@00000530 10800A17 +@00000531 E0800315 +@00000532 E0800317 +@00000533 10800104 +@00000534 10800037 +@00000535 E0800415 +@00000536 E0800417 +@00000537 1080C00C +@00000538 1004C03A +@00000539 1000011E +@0000053A 00006E06 +@0000053B E0800417 +@0000053C 1004D23A +@0000053D 1080004C +@0000053E 1005003A +@0000053F 1000351E +@00000540 00800074 +@00000541 10800004 +@00000542 E0800515 +@00000543 E0800217 +@00000544 10801417 +@00000545 10800044 +@00000546 1081FFCC +@00000547 E0800615 +@00000548 E0800217 +@00000549 10C01517 +@0000054A E0800617 +@0000054B 1880011E +@0000054C 00001806 +@0000054D E0800317 +@0000054E 10800037 +@0000054F E0800515 +@00000550 E0800517 +@00000551 1004D3FA +@00000552 1080005C +@00000553 1080004C +@00000554 1005003A +@00000555 1000011E +@00000556 00000E06 +@00000557 E0C00217 +@00000558 E0800217 +@00000559 10801417 +@0000055A 1885883A +@0000055B 10C01804 +@0000055C E0800517 +@0000055D 18800005 +@0000055E E0C00217 +@0000055F E0800217 +@00000560 10801417 +@00000561 10800044 +@00000562 1081FFCC +@00000563 18801415 +@00000564 003FDE06 +@00000565 E0800517 +@00000566 10BFFFEC +@00000567 1005003A +@00000568 10000C1E +@00000569 E1000217 +@0000056A E0800217 +@0000056B 10C01217 +@0000056C 00BFFF84 +@0000056D 1884703A +@0000056E 20801215 +@0000056F E0800317 +@00000570 10800104 +@00000571 1007883A +@00000572 E0800217 +@00000573 10801217 +@00000574 18800035 +@00000575 E0800417 +@00000576 1004D27A +@00000577 1080004C +@00000578 1005003A +@00000579 103FB81E +@0000057A E0800417 +@0000057B 10BFFFEC +@0000057C 1004D43A +@0000057D E0800615 +@0000057E E0800617 +@0000057F 1005003A +@00000580 1000171E +@00000581 E0800217 +@00000582 E0C00217 +@00000583 11001717 +@00000584 18801617 +@00000585 20801226 +@00000586 E1000317 +@00000587 E0C00217 +@00000588 E0800217 +@00000589 10801717 +@0000058A 1885883A +@0000058B 10821804 +@0000058C 10800007 +@0000058D 20800035 +@0000058E E0C00217 +@0000058F E0800217 +@00000590 10801717 +@00000591 10800044 +@00000592 1081FFCC +@00000593 18801715 +@00000594 E0800617 +@00000595 10BFFFC4 +@00000596 E0800615 +@00000597 003FE606 +@00000598 E0800617 +@00000599 1005003A +@0000059A 103F971E +@0000059B E1000217 +@0000059C E0800217 +@0000059D 10C01217 +@0000059E 00BFFF44 +@0000059F 1884703A +@000005A0 20801215 +@000005A1 E0800217 +@000005A2 10800A17 +@000005A3 10800104 +@000005A4 1007883A +@000005A5 E0800217 +@000005A6 10801217 +@000005A7 18800035 +@000005A8 003F8906 +@000005A9 DF000717 +@000005AA DEC00804 +@000005AB F800283A +@000005AC DEFFF604 +@000005AD DF000915 +@000005AE D839883A +@000005AF E1000015 +@000005B0 E1400115 +@000005B1 E1800215 +@000005B2 E0800017 +@000005B3 10800017 +@000005B4 E0800315 +@000005B5 00BFF9C4 +@000005B6 E0800415 +@000005B7 E0800117 +@000005B8 E0800815 +@000005B9 E0C00817 +@000005BA 189A8060 +@000005BB 1000041E +@000005BC E0C00817 +@000005BD 189A80A0 +@000005BE 10001D1E +@000005BF 00002906 +@000005C0 E0800317 +@000005C1 10C00B17 +@000005C2 00A00034 +@000005C3 10BFFFC4 +@000005C4 18802426 +@000005C5 E0800217 +@000005C6 10800017 +@000005C7 E0800515 +@000005C8 E0800317 +@000005C9 E0800615 +@000005CA E0800517 +@000005CB 10800090 +@000005CC 1000071E +@000005CD E0C00517 +@000005CE 00A00034 +@000005CF 10BFFFC4 +@000005D0 18800326 +@000005D1 E0C00517 +@000005D2 E0C00715 +@000005D3 00000306 +@000005D4 00A00034 +@000005D5 10BFFF84 +@000005D6 E0800715 +@000005D7 E0C00717 +@000005D8 E0800617 +@000005D9 10C00B15 +@000005DA E0000415 +@000005DB 00000D06 +@000005DC E0800317 +@000005DD 10C00B17 +@000005DE 00A00034 +@000005DF 10BFFFC4 +@000005E0 18800826 +@000005E1 E1400217 +@000005E2 E0800317 +@000005E3 E0C00317 +@000005E4 11001317 +@000005E5 18800B17 +@000005E6 2085803A +@000005E7 28800015 +@000005E8 E0000415 +@000005E9 E0800417 +@000005EA DF000917 +@000005EB DEC00A04 +@000005EC F800283A +@000005ED DEFFFB04 +@000005EE DF000415 +@000005EF D839883A +@000005F0 E1000015 +@000005F1 E0800017 +@000005F2 E0800215 +@000005F3 E0800217 +@000005F4 10800A17 +@000005F5 10800104 +@000005F6 10800037 +@000005F7 E0800115 +@000005F8 E0800117 +@000005F9 1004D2BA +@000005FA 1080004C +@000005FB 1005003A +@000005FC 10000B1E +@000005FD E0800217 +@000005FE 10800A17 +@000005FF 10800104 +@00000600 1007883A +@00000601 E0800217 +@00000602 10801217 +@00000603 10810014 +@00000604 18800035 +@00000605 E0800217 +@00000606 10001315 +@00000607 00000A06 +@00000608 E0800217 +@00000609 10C01317 +@0000060A 00A00034 +@0000060B 10BFFF04 +@0000060C 10C00536 +@0000060D E0C00217 +@0000060E E0800217 +@0000060F 10801317 +@00000610 10800044 +@00000611 18801315 +@00000612 D0A00C17 +@00000613 E0800315 +@00000614 E0800317 +@00000615 DF000417 +@00000616 DEC00504 +@00000617 F800283A +@00000618 DEFFF704 +@00000619 DFC00815 +@0000061A DF000715 +@0000061B D839883A +@0000061C E1000015 +@0000061D E1400115 +@0000061E E1800215 +@0000061F E0000315 +@00000620 E0000415 +@00000621 E0000515 +@00000622 E0C00017 +@00000623 00800044 +@00000624 18801215 +@00000625 E0800117 +@00000626 10800104 +@00000627 1007883A +@00000628 E0800017 +@00000629 10801217 +@0000062A 18800035 +@0000062B E1000217 +@0000062C E1400017 +@0000062D 01800034 +@0000062E 31852804 +@0000062F 0001FC80 +@00000630 1004803A +@00000631 1000021E +@00000632 E1000017 +@00000633 00019240 +@00000634 E0800017 +@00000635 10001315 +@00000636 D0A00C17 +@00000637 E0800615 +@00000638 E1400617 +@00000639 E0800017 +@0000063A 11000C04 +@0000063B 01800034 +@0000063C 3185ED04 +@0000063D E1C00017 +@0000063E 0001A080 +@0000063F 1004403A +@00000640 1000041E +@00000641 E0C00017 +@00000642 00A00034 +@00000643 10BFFFC4 +@00000644 18800B15 +@00000645 DFC00817 +@00000646 DF000717 +@00000647 DEC00904 +@00000648 F800283A +@00000649 DEFFFD04 +@0000064A DFC00215 +@0000064B DF000115 +@0000064C D839883A +@0000064D E1000015 +@0000064E E1000017 +@0000064F D1600604 +@00000650 0001CD00 +@00000651 DFC00217 +@00000652 DF000117 +@00000653 DEC00304 +@00000654 F800283A +@00000655 DEFFFC04 +@00000656 DFC00315 +@00000657 DF000215 +@00000658 D839883A +@00000659 E1000015 +@0000065A E1400115 +@0000065B E0800017 +@0000065C 10000035 +@0000065D 00025040 +@0000065E DFC00317 +@0000065F DF000217 +@00000660 DEC00404 +@00000661 F800283A +@00000662 DEFFF904 +@00000663 DFC00615 +@00000664 DF000515 +@00000665 D839883A +@00000666 E1000015 +@00000667 E1400115 +@00000668 E1800215 +@00000669 E0800217 +@0000066A E0800315 +@0000066B D0A00C17 +@0000066C 1004C03A +@0000066D 1000041E +@0000066E E0800317 +@0000066F D0A00C15 +@00000670 E0000415 +@00000671 00000206 +@00000672 00BFFFC4 +@00000673 E0800415 +@00000674 E0800017 +@00000675 10800104 +@00000676 1007883A +@00000677 008001C4 +@00000678 18800035 +@00000679 E1000117 +@0000067A E1400017 +@0000067B 01800034 +@0000067C 31865504 +@0000067D 0001FC80 +@0000067E DFC00617 +@0000067F DF000517 +@00000680 DEC00704 +@00000681 F800283A +@00000682 DEFFF504 +@00000683 DF000A15 +@00000684 D839883A +@00000685 E1000015 +@00000686 E1400115 +@00000687 E1800215 +@00000688 E1C00315 +@00000689 E0000515 +@0000068A D0A00C17 +@0000068B E0800615 +@0000068C E0800617 +@0000068D 1005003A +@0000068E 10003F1E +@0000068F E0800017 +@00000690 1005003A +@00000691 1000391E +@00000692 E0C00017 +@00000693 E0800217 +@00000694 18800315 +@00000695 E0C00017 +@00000696 E0800317 +@00000697 18800515 +@00000698 0005303A +@00000699 E0800815 +@0000069A 0001703A +@0000069B E0800817 +@0000069C E0800715 +@0000069D E0800717 +@0000069E E0800415 +@0000069F D0A00D17 +@000006A0 E0800815 +@000006A1 E0800817 +@000006A2 E0800515 +@000006A3 E1000017 +@000006A4 E0C00117 +@000006A5 E0800517 +@000006A6 1885883A +@000006A7 10800044 +@000006A8 20800215 +@000006A9 E0800017 +@000006AA 10C00217 +@000006AB E0800517 +@000006AC 1880042E +@000006AD E0C00017 +@000006AE 00800044 +@000006AF 18800405 +@000006B0 00000206 +@000006B1 E0800017 +@000006B2 10000405 +@000006B3 D0A00E04 +@000006B4 E0800815 +@000006B5 E0800017 +@000006B6 E0800715 +@000006B7 E0C00717 +@000006B8 E0800817 +@000006B9 18800115 +@000006BA E0C00717 +@000006BB E0800817 +@000006BC 10800017 +@000006BD 18800015 +@000006BE E0800817 +@000006BF 10C00017 +@000006C0 E0800717 +@000006C1 18800115 +@000006C2 E0C00817 +@000006C3 E0800717 +@000006C4 18800015 +@000006C5 E0800417 +@000006C6 E0800815 +@000006C7 E0800817 +@000006C8 1001703A +@000006C9 E0000915 +@000006CA 00000506 +@000006CB 00BFFA84 +@000006CC E0800915 +@000006CD 00000206 +@000006CE 00BFDE84 +@000006CF E0800915 +@000006D0 E0800917 +@000006D1 DF000A17 +@000006D2 DEC00B04 +@000006D3 F800283A +@000006D4 DEFFFA04 +@000006D5 DFC00515 +@000006D6 DF000415 +@000006D7 D839883A +@000006D8 E1000015 +@000006D9 008000C4 +@000006DA E0800315 +@000006DB E1000317 +@000006DC 014003F4 +@000006DD 29509004 +@000006DE 0000D8C0 +@000006DF 100B883A +@000006E0 01005BB4 +@000006E1 210D8004 +@000006E2 0000D6C0 +@000006E3 100B883A +@000006E4 01200034 +@000006E5 213FFFC4 +@000006E6 0000D6C0 +@000006E7 100B883A +@000006E8 E1000017 +@000006E9 0000D6C0 +@000006EA E0800215 +@000006EB E0800217 +@000006EC 1005003A +@000006ED 10002A1E +@000006EE E0000115 +@000006EF E0C00117 +@000006F0 E0800217 +@000006F1 1880180E +@000006F2 00A00034 +@000006F3 10BFFFC4 +@000006F4 10BFFFC4 +@000006F5 103FFE1E +@000006F6 E1000317 +@000006F7 014003F4 +@000006F8 29509004 +@000006F9 0000D8C0 +@000006FA 100B883A +@000006FB 01005BB4 +@000006FC 210D8004 +@000006FD 0000D6C0 +@000006FE 100B883A +@000006FF 01200034 +@00000700 213FFFC4 +@00000701 0000D6C0 +@00000702 1007883A +@00000703 E0800017 +@00000704 10C5C83A +@00000705 E0800015 +@00000706 E0800117 +@00000707 10800044 +@00000708 E0800115 +@00000709 003FE506 +@0000070A E1000317 +@0000070B 014003F4 +@0000070C 29509004 +@0000070D 0000D8C0 +@0000070E 100B883A +@0000070F 01005BB4 +@00000710 210D8004 +@00000711 0000D6C0 +@00000712 1009883A +@00000713 E1400017 +@00000714 0000D8C0 +@00000715 10BFFFC4 +@00000716 103FFE1E +@00000717 00000D06 +@00000718 E1000317 +@00000719 014003F4 +@0000071A 29509004 +@0000071B 0000D8C0 +@0000071C 100B883A +@0000071D 01005BB4 +@0000071E 210D8004 +@0000071F 0000D6C0 +@00000720 1009883A +@00000721 E1400017 +@00000722 0000D8C0 +@00000723 10BFFFC4 +@00000724 00BFFE16 +@00000725 0005883A +@00000726 DFC00517 +@00000727 DF000417 +@00000728 DEC00604 +@00000729 F800283A +@0000072A DEFFFC04 +@0000072B DF000315 +@0000072C D839883A +@0000072D E1000015 +@0000072E E1400115 +@0000072F E1800215 +@00000730 E0800217 +@00000731 DF000317 +@00000732 DEC00404 +@00000733 F800283A +@00000734 DEFFF904 +@00000735 DFC00615 +@00000736 DF000515 +@00000737 D839883A +@00000738 E1000015 +@00000739 E1400115 +@0000073A E0800017 +@0000073B 1005003A +@0000073C 1000041E +@0000073D E0800017 +@0000073E 10800217 +@0000073F 1004C03A +@00000740 1000071E +@00000741 0001D800 +@00000742 1007883A +@00000743 00800584 +@00000744 18800015 +@00000745 00BFFA84 +@00000746 E0800415 +@00000747 00001306 +@00000748 E0800117 +@00000749 E0800215 +@0000074A E0800017 +@0000074B E0800315 +@0000074C E0C00317 +@0000074D E0800217 +@0000074E 18800115 +@0000074F E0C00317 +@00000750 E0800217 +@00000751 10800017 +@00000752 18800015 +@00000753 E0800217 +@00000754 10C00017 +@00000755 E0800317 +@00000756 18800115 +@00000757 E0C00217 +@00000758 E0800317 +@00000759 18800015 +@0000075A E0000415 +@0000075B E0800417 +@0000075C DFC00617 +@0000075D DF000517 +@0000075E DEC00704 +@0000075F F800283A +@00000760 DEFFFD04 +@00000761 DFC00215 +@00000762 DF000115 +@00000763 D839883A +@00000764 D0A00917 +@00000765 1005003A +@00000766 1000041E +@00000767 D0A00917 +@00000768 103EE83A +@00000769 E0800015 +@0000076A 00000206 +@0000076B D0A01804 +@0000076C E0800015 +@0000076D E0800017 +@0000076E DFC00217 +@0000076F DF000117 +@00000770 DEC00304 +@00000771 F800283A +@00000772 DEFFFD04 +@00000773 DFC00215 +@00000774 DF000115 +@00000775 D839883A +@00000776 00800034 +@00000777 108D8604 +@00000778 E0800015 +@00000779 E0C00017 +@0000077A 00800034 +@0000077B 108D8704 +@0000077C 18800736 +@0000077D E0800017 +@0000077E 10800017 +@0000077F 103EE83A +@00000780 E0800017 +@00000781 10BFFF04 +@00000782 E0800015 +@00000783 003FF506 +@00000784 DFC00217 +@00000785 DF000117 +@00000786 DEC00304 +@00000787 F800283A +@00000788 DEFFFD04 +@00000789 DFC00215 +@0000078A DF000115 +@0000078B D839883A +@0000078C 00800034 +@0000078D 108D8604 +@0000078E E0800015 +@0000078F E0C00017 +@00000790 00800034 +@00000791 108D8704 +@00000792 18800736 +@00000793 E0800017 +@00000794 10800017 +@00000795 103EE83A +@00000796 E0800017 +@00000797 10BFFF04 +@00000798 E0800015 +@00000799 003FF506 +@0000079A DFC00217 +@0000079B DF000117 +@0000079C DEC00304 +@0000079D F800283A +@0000079E DEFFF704 +@0000079F DFC00815 +@000007A0 DF000715 +@000007A1 DC000615 +@000007A2 DC400515 +@000007A3 D839883A +@000007A4 E1000015 +@000007A5 E1400115 +@000007A6 E1800215 +@000007A7 E1C00315 +@000007A8 E1000117 +@000007A9 E1400217 +@000007AA E1800317 +@000007AB 00022300 +@000007AC E0800415 +@000007AD E0800417 +@000007AE 1004803A +@000007AF 10001F1E +@000007B0 E4000017 +@000007B1 04400034 +@000007B2 8C521F04 +@000007B3 E1000417 +@000007B4 01400304 +@000007B5 0000D8C0 +@000007B6 1445883A +@000007B7 10800017 +@000007B8 80800015 +@000007B9 E4000017 +@000007BA 04400034 +@000007BB 8C521F04 +@000007BC E1000417 +@000007BD 01400304 +@000007BE 0000D8C0 +@000007BF 1445883A +@000007C0 10800104 +@000007C1 10800017 +@000007C2 80800115 +@000007C3 E4000017 +@000007C4 04400034 +@000007C5 8C521F04 +@000007C6 E1000417 +@000007C7 01400304 +@000007C8 0000D8C0 +@000007C9 1445883A +@000007CA 10800204 +@000007CB 10800017 +@000007CC 80800215 +@000007CD E1000417 +@000007CE 00024000 +@000007CF DFC00817 +@000007D0 DF000717 +@000007D1 DC000617 +@000007D2 DC400517 +@000007D3 DEC00904 +@000007D4 F800283A +@000007D5 DEFFFB04 +@000007D6 DFC00415 +@000007D7 DF000315 +@000007D8 D839883A +@000007D9 E1000015 +@000007DA E1400115 +@000007DB E1800215 +@000007DC 01000034 +@000007DD 21122204 +@000007DE E1400017 +@000007DF 01800044 +@000007E0 01C07FC4 +@000007E1 0001E780 +@000007E2 01000034 +@000007E3 21121F04 +@000007E4 E1400117 +@000007E5 000D883A +@000007E6 01C07FC4 +@000007E7 0001E780 +@000007E8 01000034 +@000007E9 21122504 +@000007EA E1400217 +@000007EB 01800044 +@000007EC 01C07FC4 +@000007ED 0001E780 +@000007EE DFC00417 +@000007EF DF000317 +@000007F0 DEC00504 +@000007F1 F800283A +@000007F2 DEFFF304 +@000007F3 DF000C15 +@000007F4 D839883A +@000007F5 E1000015 +@000007F6 E1400115 +@000007F7 E1800215 +@000007F8 00BFFA84 +@000007F9 E0800315 +@000007FA E0800017 +@000007FB 10800828 +@000007FC 1000511E +@000007FD 0005303A +@000007FE E0800615 +@000007FF 0001703A +@00000800 E0800617 +@00000801 E0800515 +@00000802 E0800517 +@00000803 E0800415 +@00000804 00C00034 +@00000805 18D3A504 +@00000806 E0800017 +@00000807 100490FA +@00000808 10C7883A +@00000809 E0800217 +@0000080A 18800015 +@0000080B 00C00034 +@0000080C 18D3A504 +@0000080D E0800017 +@0000080E 100490FA +@0000080F 10C5883A +@00000810 10C00104 +@00000811 E0800117 +@00000812 18800015 +@00000813 E0800217 +@00000814 1005003A +@00000815 1000191E +@00000816 E0800017 +@00000817 E0800615 +@00000818 0005303A +@00000819 E0800915 +@0000081A 0001703A +@0000081B E0800917 +@0000081C E0800815 +@0000081D E0800817 +@0000081E E0800715 +@0000081F 00C00044 +@00000820 E0800617 +@00000821 1886983A +@00000822 D0A00A17 +@00000823 10C4B03A +@00000824 D0A00A15 +@00000825 D0A00A17 +@00000826 100170FA +@00000827 E0800717 +@00000828 E0800915 +@00000829 E0800917 +@0000082A 1001703A +@0000082B E0000515 +@0000082C E0800517 +@0000082D E0800B15 +@0000082E 00001906 +@0000082F E0800017 +@00000830 E0800915 +@00000831 0005303A +@00000832 E0800A15 +@00000833 0001703A +@00000834 E0800A17 +@00000835 E0800615 +@00000836 E0800617 +@00000837 E0800715 +@00000838 00C00044 +@00000839 E0800917 +@0000083A 1884983A +@0000083B 0086303A +@0000083C D0A00A17 +@0000083D 10C4703A +@0000083E D0A00A15 +@0000083F D0A00A17 +@00000840 100170FA +@00000841 E0800717 +@00000842 E0800A15 +@00000843 E0800A17 +@00000844 1001703A +@00000845 E0000815 +@00000846 E0800817 +@00000847 E0800B15 +@00000848 E0800B17 +@00000849 E0800315 +@0000084A E0800417 +@0000084B E0800A15 +@0000084C E0800A17 +@0000084D 1001703A +@0000084E E0800317 +@0000084F DF000C17 +@00000850 DEC00D04 +@00000851 F800283A +@00000852 DEFFFA04 +@00000853 DFC00515 +@00000854 DF000415 +@00000855 DC000315 +@00000856 D839883A +@00000857 E1000015 +@00000858 E0C00017 +@00000859 E0800017 +@0000085A 10800217 +@0000085B 10900034 +@0000085C 18800215 +@0000085D E0000115 +@0000085E D0E00817 +@0000085F E0800117 +@00000860 18802436 +@00000861 04000034 +@00000862 84121F04 +@00000863 E1000117 +@00000864 01400304 +@00000865 0000D8C0 +@00000866 1405883A +@00000867 E0C00017 +@00000868 11000017 +@00000869 18800017 +@0000086A 2080161E +@0000086B 04000034 +@0000086C 84121F04 +@0000086D E1000117 +@0000086E 01400304 +@0000086F 0000D8C0 +@00000870 1405883A +@00000871 10800204 +@00000872 10800017 +@00000873 1004403A +@00000874 10000C1E +@00000875 E1000117 +@00000876 01400304 +@00000877 0000D8C0 +@00000878 1007883A +@00000879 00800034 +@0000087A 10921F04 +@0000087B 1887883A +@0000087C E0800017 +@0000087D 18800326 +@0000087E 00BFFCC4 +@0000087F E0800215 +@00000880 00000506 +@00000881 E0800117 +@00000882 10800044 +@00000883 E0800115 +@00000884 003FD906 +@00000885 E0000215 +@00000886 E0800217 +@00000887 DFC00517 +@00000888 DF000417 +@00000889 DC000317 +@0000088A DEC00604 +@0000088B F800283A +@0000088C DEFFF404 +@0000088D DFC00B15 +@0000088E DF000A15 +@0000088F D839883A +@00000890 E1000015 +@00000891 E1400115 +@00000892 E1800215 +@00000893 00BFFFC4 +@00000894 E0800515 +@00000895 00BFFB44 +@00000896 E0800615 +@00000897 E0000715 +@00000898 E1000017 +@00000899 D1600604 +@0000089A 00026040 +@0000089B E0800315 +@0000089C E0800317 +@0000089D 1004C03A +@0000089E 1000051E +@0000089F E1000017 +@000008A0 00026940 +@000008A1 E0800315 +@000008A2 00800044 +@000008A3 E0800715 +@000008A4 E0800317 +@000008A5 1005003A +@000008A6 1000321E +@000008A7 E1000317 +@000008A8 00027780 +@000008A9 E0800515 +@000008AA E0800517 +@000008AB 1004403A +@000008AC 1000031E +@000008AD E0800517 +@000008AE E0800615 +@000008AF 00002B06 +@000008B0 E1000517 +@000008B1 01400304 +@000008B2 0000D8C0 +@000008B3 1007883A +@000008B4 00800034 +@000008B5 10921F04 +@000008B6 1885883A +@000008B7 E0800415 +@000008B8 E1000417 +@000008B9 E0C00117 +@000008BA 00900034 +@000008BB 10BFFFC4 +@000008BC 1884703A +@000008BD 20800215 +@000008BE E0800717 +@000008BF 1004C03A +@000008C0 1000071E +@000008C1 E1000417 +@000008C2 00021480 +@000008C3 E0800615 +@000008C4 E0800617 +@000008C5 1004403A +@000008C6 1000011E +@000008C7 00001306 +@000008C8 E0800317 +@000008C9 10800317 +@000008CA 1005003A +@000008CB 1000091E +@000008CC E0800317 +@000008CD 10800317 +@000008CE E1000417 +@000008CF E1400017 +@000008D0 E1800117 +@000008D1 E1C00217 +@000008D2 103EE83A +@000008D3 E0800915 +@000008D4 00000106 +@000008D5 E0000915 +@000008D6 E0800917 +@000008D7 E0800615 +@000008D8 00000206 +@000008D9 00BFFB44 +@000008DA E0800615 +@000008DB E0800617 +@000008DC 1004403A +@000008DD 1000091E +@000008DE E1000517 +@000008DF 00024000 +@000008E0 00023B80 +@000008E1 E0C00617 +@000008E2 00C7C83A +@000008E3 10C00015 +@000008E4 00BFFFC4 +@000008E5 E0800815 +@000008E6 00000206 +@000008E7 E0800517 +@000008E8 E0800815 +@000008E9 E0800817 +@000008EA DFC00B17 +@000008EB DF000A17 +@000008EC DEC00C04 +@000008ED F800283A +@000008EE DEFFFD04 +@000008EF DFC00215 +@000008F0 DF000115 +@000008F1 D839883A +@000008F2 D0A00917 +@000008F3 1005003A +@000008F4 1000041E +@000008F5 D0A00917 +@000008F6 103EE83A +@000008F7 E0800015 +@000008F8 00000206 +@000008F9 D0A01804 +@000008FA E0800015 +@000008FB E0800017 +@000008FC DFC00217 +@000008FD DF000117 +@000008FE DEC00304 +@000008FF F800283A +@00000900 DEFFFC04 +@00000901 DFC00315 +@00000902 DF000215 +@00000903 DC000115 +@00000904 D839883A +@00000905 E1000015 +@00000906 E0800017 +@00000907 108000D0 +@00000908 10000F1E +@00000909 04000034 +@0000090A 84121F04 +@0000090B E1000017 +@0000090C 01400304 +@0000090D 0000D8C0 +@0000090E 1405883A +@0000090F 10800204 +@00000910 10000015 +@00000911 04000034 +@00000912 84121F04 +@00000913 E1000017 +@00000914 01400304 +@00000915 0000D8C0 +@00000916 1405883A +@00000917 10000015 +@00000918 DFC00317 +@00000919 DF000217 +@0000091A DC000117 +@0000091B DEC00404 +@0000091C F800283A +@0000091D DEFFFB04 +@0000091E DF000415 +@0000091F D839883A +@00000920 E1000015 +@00000921 0005303A +@00000922 E0800315 +@00000923 0001703A +@00000924 E0800317 +@00000925 E0800215 +@00000926 E0800217 +@00000927 E0800115 +@00000928 E0800017 +@00000929 E0800315 +@0000092A E0800317 +@0000092B 10C00017 +@0000092C E0800317 +@0000092D 10800117 +@0000092E 18800115 +@0000092F E0800317 +@00000930 10C00117 +@00000931 E0800317 +@00000932 10800017 +@00000933 18800015 +@00000934 E0C00317 +@00000935 E0800317 +@00000936 18800115 +@00000937 E0C00317 +@00000938 E0800317 +@00000939 18800015 +@0000093A E0800117 +@0000093B E0800315 +@0000093C E0800317 +@0000093D 1001703A +@0000093E DF000417 +@0000093F DEC00504 +@00000940 F800283A +@00000941 DEFFFB04 +@00000942 DFC00415 +@00000943 DF000315 +@00000944 D839883A +@00000945 D0A00E17 +@00000946 E0800115 +@00000947 D0A00D17 +@00000948 10800044 +@00000949 D0A00D15 +@0000094A E0C00117 +@0000094B D0A00E04 +@0000094C 18803026 +@0000094D E0800117 +@0000094E 10800017 +@0000094F E0800015 +@00000950 E0800117 +@00000951 10800403 +@00000952 1005003A +@00000953 1000051E +@00000954 D0A00D17 +@00000955 1004C03A +@00000956 1000021E +@00000957 E0800117 +@00000958 10000405 +@00000959 E0800117 +@0000095A 10C00217 +@0000095B D0A00D17 +@0000095C 10C01D36 +@0000095D E0800117 +@0000095E 10800403 +@0000095F 1004C03A +@00000960 1000191E +@00000961 E0800117 +@00000962 E0C00117 +@00000963 10800317 +@00000964 19000517 +@00000965 103EE83A +@00000966 E0800215 +@00000967 E0800217 +@00000968 1004C03A +@00000969 1000031E +@0000096A E1000117 +@0000096B 00024740 +@0000096C 00000D06 +@0000096D E1000117 +@0000096E E0800117 +@0000096F 10C00217 +@00000970 E0800217 +@00000971 1885883A +@00000972 20800215 +@00000973 E0800117 +@00000974 10C00217 +@00000975 D0A00D17 +@00000976 1880032E +@00000977 E0C00117 +@00000978 00800044 +@00000979 18800405 +@0000097A E0800017 +@0000097B E0800115 +@0000097C 003FCD06 +@0000097D DFC00417 +@0000097E DF000317 +@0000097F DEC00504 +@00000980 F800283A +@00000981 DEFFF904 +@00000982 DFC00615 +@00000983 DF000515 +@00000984 D839883A +@00000985 E1000015 +@00000986 E1400115 +@00000987 E0800117 +@00000988 10800017 +@00000989 E0800215 +@0000098A E1000017 +@0000098B 0000BEC0 +@0000098C 10800044 +@0000098D E0800315 +@0000098E E0C00217 +@0000098F E0800117 +@00000990 18800E26 +@00000991 E0800217 +@00000992 11000217 +@00000993 E1400017 +@00000994 E1800317 +@00000995 00030840 +@00000996 1004C03A +@00000997 1000031E +@00000998 E0800217 +@00000999 E0800415 +@0000099A 00000506 +@0000099B E0800217 +@0000099C 10800017 +@0000099D E0800215 +@0000099E 003FEF06 +@0000099F E0000415 +@000009A0 E0800417 +@000009A1 DFC00617 +@000009A2 DF000517 +@000009A3 DEC00704 +@000009A4 F800283A +@000009A5 DEFFFA04 +@000009A6 DFC00515 +@000009A7 DF000415 +@000009A8 D839883A +@000009A9 E1000015 +@000009AA D0A00417 +@000009AB E0800115 +@000009AC E0C00117 +@000009AD D0A00404 +@000009AE 18802926 +@000009AF E0800117 +@000009B0 11000217 +@000009B1 0000BEC0 +@000009B2 E0800215 +@000009B3 E0800117 +@000009B4 10C00217 +@000009B5 E0800217 +@000009B6 1885883A +@000009B7 10BFFFC4 +@000009B8 10800007 +@000009B9 10800BD8 +@000009BA 1000031E +@000009BB E0800217 +@000009BC 10BFFFC4 +@000009BD E0800215 +@000009BE E0C00017 +@000009BF E0800217 +@000009C0 1885883A +@000009C1 10800007 +@000009C2 10800BE0 +@000009C3 1000061E +@000009C4 E0C00017 +@000009C5 E0800217 +@000009C6 1885883A +@000009C7 10800007 +@000009C8 1004C03A +@000009C9 10000A1E +@000009CA E0800117 +@000009CB 11000217 +@000009CC E1400017 +@000009CD E1800217 +@000009CE 00030840 +@000009CF 1004C03A +@000009D0 1000031E +@000009D1 E0800117 +@000009D2 E0800315 +@000009D3 00000506 +@000009D4 E0800117 +@000009D5 10800017 +@000009D6 E0800115 +@000009D7 003FD406 +@000009D8 E0000315 +@000009D9 E0800317 +@000009DA DFC00517 +@000009DB DF000417 +@000009DC DEC00604 +@000009DD F800283A +@000009DE DEFFF804 +@000009DF DFC00715 +@000009E0 DF000615 +@000009E1 DC000515 +@000009E2 D839883A +@000009E3 E1000015 +@000009E4 00BFFA04 +@000009E5 E0800215 +@000009E6 E0000315 +@000009E7 E0000115 +@000009E8 E0800117 +@000009E9 10800808 +@000009EA 10001D1E +@000009EB 04000034 +@000009EC 84121F04 +@000009ED E1000117 +@000009EE 01400304 +@000009EF 0000D8C0 +@000009F0 1405883A +@000009F1 10800017 +@000009F2 1004C03A +@000009F3 1000101E +@000009F4 04000034 +@000009F5 84121F04 +@000009F6 E1000117 +@000009F7 01400304 +@000009F8 0000D8C0 +@000009F9 1407883A +@000009FA E0800017 +@000009FB 18800015 +@000009FC E0C00117 +@000009FD D0A00817 +@000009FE 10C0020E +@000009FF E0800117 +@00000A00 D0A00815 +@00000A01 E0800117 +@00000A02 E0800215 +@00000A03 00000406 +@00000A04 E0800117 +@00000A05 10800044 +@00000A06 E0800115 +@00000A07 003FE006 +@00000A08 E0000415 +@00000A09 E0800217 +@00000A0A DFC00717 +@00000A0B DF000617 +@00000A0C DC000517 +@00000A0D DEC00804 +@00000A0E F800283A +@00000A0F D0A00017 +@00000A10 DEFFFE04 +@00000A11 DC000015 +@00000A12 DFC00115 +@00000A13 11400C17 +@00000A14 2021883A +@00000A15 01004304 +@00000A16 28001B26 +@00000A17 28C00117 +@00000A18 008007C4 +@00000A19 10C00D16 +@00000A1A 28800104 +@00000A1B 10C00017 +@00000A1C 000D883A +@00000A1D 180890BA +@00000A1E 18C00044 +@00000A1F 10C00015 +@00000A20 2149883A +@00000A21 24000215 +@00000A22 3005883A +@00000A23 DFC00117 +@00000A24 DC000017 +@00000A25 DEC00204 +@00000A26 F800283A +@00000A27 00029A40 +@00000A28 100B883A +@00000A29 01BFFFC4 +@00000A2A 103FF726 +@00000A2B D0E00017 +@00000A2C 10004215 +@00000A2D 10000115 +@00000A2E 18800C17 +@00000A2F 28800015 +@00000A30 19400C15 +@00000A31 003FE806 +@00000A32 01400034 +@00000A33 2953E504 +@00000A34 11400C15 +@00000A35 003FE106 +@00000A36 D0A00017 +@00000A37 DEFFF804 +@00000A38 DD800015 +@00000A39 DFC00715 +@00000A3A DC000615 +@00000A3B DC400515 +@00000A3C DC800415 +@00000A3D DCC00315 +@00000A3E DD000215 +@00000A3F DD400115 +@00000A40 15000C17 +@00000A41 202D883A +@00000A42 A0002426 +@00000A43 A0800117 +@00000A44 A5402204 +@00000A45 0027883A +@00000A46 14BFFFC4 +@00000A47 9006803A +@00000A48 1800021E +@00000A49 00800044 +@00000A4A 14A6983A +@00000A4B 1800191E +@00000A4C 900690BA +@00000A4D 1D05883A +@00000A4E 14400204 +@00000A4F 1821883A +@00000A50 00000806 +@00000A51 88800017 +@00000A52 29400017 +@00000A53 94BFFFC4 +@00000A54 843FFF04 +@00000A55 103EE83A +@00000A56 8C7FFF04 +@00000A57 9827D07A +@00000A58 90000C16 +@00000A59 A8802017 +@00000A5A 854B883A +@00000A5B B009883A +@00000A5C 14C4703A +@00000A5D 103FF31E +@00000A5E 88800017 +@00000A5F 94BFFFC4 +@00000A60 843FFF04 +@00000A61 103EE83A +@00000A62 8C7FFF04 +@00000A63 9827D07A +@00000A64 903FF40E +@00000A65 A5000017 +@00000A66 A03FDC1E +@00000A67 B009883A +@00000A68 000354C0 +@00000A69 200B883A +@00000A6A D1200017 +@00000A6B 02000034 +@00000A6C 420A7304 +@00000A6D 4000683A +@00000A6E 200B883A +@00000A6F D1200017 +@00000A70 02000034 +@00000A71 420C9904 +@00000A72 4000683A +@00000A73 DEFFF504 +@00000A74 28C002C4 +@00000A75 00800584 +@00000A76 DC400715 +@00000A77 DC800615 +@00000A78 DFC00A15 +@00000A79 DF000915 +@00000A7A DC000815 +@00000A7B DCC00515 +@00000A7C DD000415 +@00000A7D DD400315 +@00000A7E DD800215 +@00000A7F DDC00115 +@00000A80 2025883A +@00000A81 04400404 +@00000A82 10C0032E +@00000A83 00BFFE04 +@00000A84 18A2703A +@00000A85 88000116 +@00000A86 89400D2E +@00000A87 0005883A +@00000A88 DFC00A17 +@00000A89 DF000917 +@00000A8A DC000817 +@00000A8B DC400717 +@00000A8C DC800617 +@00000A8D DCC00517 +@00000A8E DD000417 +@00000A8F DD400317 +@00000A90 DD800217 +@00000A91 DDC00117 +@00000A92 DEC00B04 +@00000A93 F800283A +@00000A94 9009883A +@00000A95 000356C0 +@00000A96 00807DC4 +@00000A97 14401536 +@00000A98 03400034 +@00000A99 6B528904 +@00000A9A 8B4D883A +@00000A9B 34000317 +@00000A9C 8812D0FA +@00000A9D 81803E26 +@00000A9E 80C00117 +@00000A9F 00BFFF04 +@00000AA0 82000317 +@00000AA1 1886703A +@00000AA2 80CB883A +@00000AA3 28800117 +@00000AA4 81C00217 +@00000AA5 9009883A +@00000AA6 10800054 +@00000AA7 41C00215 +@00000AA8 28800115 +@00000AA9 3A000315 +@00000AAA 00035880 +@00000AAB 80800204 +@00000AAC 003FDB06 +@00000AAD 8806D27A +@00000AAE 8812D0FA +@00000AAF 18000926 +@00000AB0 00800104 +@00000AB1 10C02F2E +@00000AB2 00800504 +@00000AB3 1A4016C4 +@00000AB4 10C0042E +@00000AB5 00801504 +@00000AB6 10C11536 +@00000AB7 8804D33A +@00000AB8 12401B84 +@00000AB9 480490FA +@00000ABA 03400034 +@00000ABB 6B528904 +@00000ABC 134B883A +@00000ABD 2C000317 +@00000ABE 81400926 +@00000ABF 01FFFF04 +@00000AC0 018003C4 +@00000AC1 80800117 +@00000AC2 11C6703A +@00000AC3 1C49C83A +@00000AC4 3100AA16 +@00000AC5 2000690E +@00000AC6 84000317 +@00000AC7 817FF91E +@00000AC8 4A400044 +@00000AC9 03000034 +@00000ACA 63128B04 +@00000ACB 64000217 +@00000ACC 83002826 +@00000ACD 80800117 +@00000ACE 00FFFF04 +@00000ACF 10C6703A +@00000AD0 1C49C83A +@00000AD1 008003C4 +@00000AD2 11006616 +@00000AD3 63000315 +@00000AD4 63000215 +@00000AD5 20000E16 +@00000AD6 80C7883A +@00000AD7 18800117 +@00000AD8 9009883A +@00000AD9 10800054 +@00000ADA 18800115 +@00000ADB 003FCE06 +@00000ADC 81800204 +@00000ADD 34000317 +@00000ADE 81BFBF1E +@00000ADF 4A400084 +@00000AE0 003FE806 +@00000AE1 8804D1BA +@00000AE2 12400E04 +@00000AE3 003FD506 +@00000AE4 00807FC4 +@00000AE5 10C09436 +@00000AE6 1808D0FA +@00000AE7 61BFFE04 +@00000AE8 00800044 +@00000AE9 200A90FA +@00000AEA 2007D0BA +@00000AEB 31000117 +@00000AEC 2991883A +@00000AED 41C00217 +@00000AEE 10C4983A +@00000AEF 82000315 +@00000AF0 81C00215 +@00000AF1 2088B03A +@00000AF2 3C000315 +@00000AF3 31000115 +@00000AF4 44000215 +@00000AF5 4807883A +@00000AF6 4800A616 +@00000AF7 1807D0BA +@00000AF8 03400034 +@00000AF9 6B528904 +@00000AFA 00800044 +@00000AFB 10CE983A +@00000AFC 69000117 +@00000AFD 21C04836 +@00000AFE 21C4703A +@00000AFF 10000A1E +@00000B00 39CF883A +@00000B01 00BFFF04 +@00000B02 4884703A +@00000B03 21C6703A +@00000B04 12400104 +@00000B05 1800041E +@00000B06 39CF883A +@00000B07 4A400104 +@00000B08 21C4703A +@00000B09 103FFC26 +@00000B0A 480490FA +@00000B0B 4817883A +@00000B0C 134D883A +@00000B0D 300B883A +@00000B0E 2C000317 +@00000B0F 81400926 +@00000B10 02BFFF04 +@00000B11 020003C4 +@00000B12 80800117 +@00000B13 1286703A +@00000B14 1C49C83A +@00000B15 41008016 +@00000B16 2000180E +@00000B17 84000317 +@00000B18 817FF91E +@00000B19 4A400044 +@00000B1A 488000CC +@00000B1B 29400204 +@00000B1C 103FF11E +@00000B1D 588000CC +@00000B1E 31BFFE04 +@00000B1F 5AFFFFC4 +@00000B20 1000E526 +@00000B21 30800217 +@00000B22 11BFFA26 +@00000B23 03400034 +@00000B24 6B528904 +@00000B25 39CF883A +@00000B26 68C00117 +@00000B27 19C01E36 +@00000B28 3800031E +@00000B29 00001C06 +@00000B2A 39CF883A +@00000B2B 4A400104 +@00000B2C 19C4703A +@00000B2D 103FFC26 +@00000B2E 003FDB06 +@00000B2F 80C7883A +@00000B30 18800117 +@00000B31 82000317 +@00000B32 81C00217 +@00000B33 10800054 +@00000B34 9009883A +@00000B35 18800115 +@00000B36 41C00215 +@00000B37 3A000315 +@00000B38 003F7106 +@00000B39 88800054 +@00000B3A 844B883A +@00000B3B 80800115 +@00000B3C 2905883A +@00000B3D 20C00054 +@00000B3E 61400315 +@00000B3F 61400215 +@00000B40 11000015 +@00000B41 9009883A +@00000B42 2B000215 +@00000B43 28C00115 +@00000B44 2B000315 +@00000B45 003F6406 +@00000B46 6D400217 +@00000B47 00BFFF04 +@00000B48 A8C00117 +@00000B49 18AC703A +@00000B4A B449C83A +@00000B4B B4400236 +@00000B4C 008003C4 +@00000B4D 11002316 +@00000B4E D0A01317 +@00000B4F 073FFFC4 +@00000B50 B02F883A +@00000B51 8887883A +@00000B52 D0A01217 +@00000B53 ADA7883A +@00000B54 1D000404 +@00000B55 17000326 +@00000B56 18C023C4 +@00000B57 00BFE004 +@00000B58 18A8703A +@00000B59 9009883A +@00000B5A A00B883A +@00000B5B DB400015 +@00000B5C 00030F40 +@00000B5D 1021883A +@00000B5E DB400017 +@00000B5F 17000426 +@00000B60 14C03E2E +@00000B61 00800034 +@00000B62 10928904 +@00000B63 A8803B26 +@00000B64 68800217 +@00000B65 013FFF04 +@00000B66 10C00117 +@00000B67 1906703A +@00000B68 1C49C83A +@00000B69 1C400236 +@00000B6A 008003C4 +@00000B6B 11000516 +@00000B6C 9009883A +@00000B6D 00035880 +@00000B6E 003F1806 +@00000B6F 4A7FFFC4 +@00000B70 003F5706 +@00000B71 6C000217 +@00000B72 88800054 +@00000B73 21000054 +@00000B74 8447883A +@00000B75 80800115 +@00000B76 19000115 +@00000B77 9009883A +@00000B78 68C00215 +@00000B79 003F3006 +@00000B7A 180AD27A +@00000B7B 1808D0FA +@00000B7C 28000426 +@00000B7D 00800104 +@00000B7E 11405836 +@00000B7F 1804D1BA +@00000B80 11000E04 +@00000B81 200490FA +@00000B82 01400034 +@00000B83 29528904 +@00000B84 1351883A +@00000B85 41C00217 +@00000B86 3A006D26 +@00000B87 38800117 +@00000B88 013FFF04 +@00000B89 1104703A +@00000B8A 1880052E +@00000B8B 39C00217 +@00000B8C 3A000326 +@00000B8D 38800117 +@00000B8E 1104703A +@00000B8F 18BFFB36 +@00000B90 3A000317 +@00000B91 82000315 +@00000B92 81C00215 +@00000B93 3C000315 +@00000B94 44000215 +@00000B95 003F5F06 +@00000B96 82000317 +@00000B97 81C00217 +@00000B98 88800054 +@00000B99 844B883A +@00000B9A 41C00215 +@00000B9B 3A000315 +@00000B9C 003F9E06 +@00000B9D 48C000C4 +@00000B9E 003F5806 +@00000B9F 07000034 +@00000BA0 E7127F04 +@00000BA1 E0800017 +@00000BA2 1505883A +@00000BA3 E0800015 +@00000BA4 84C05826 +@00000BA5 D0E01217 +@00000BA6 00BFFFC4 +@00000BA7 18805326 +@00000BA8 E0800017 +@00000BA9 84C7C83A +@00000BAA 10C5883A +@00000BAB E0800015 +@00000BAC 80C001CC +@00000BAD 0027883A +@00000BAE 18000326 +@00000BAF 00800204 +@00000BB0 10E7C83A +@00000BB1 84E1883A +@00000BB2 8505883A +@00000BB3 10801FCC +@00000BB4 00C02004 +@00000BB5 1887C83A +@00000BB6 98E7883A +@00000BB7 9009883A +@00000BB8 980B883A +@00000BB9 DB400015 +@00000BBA 00030F40 +@00000BBB 1007883A +@00000BBC 00BFFFC4 +@00000BBD DB400017 +@00000BBE 18804E26 +@00000BBF E0800017 +@00000BC0 1C07C83A +@00000BC1 1CC9883A +@00000BC2 14C5883A +@00000BC3 E0800015 +@00000BC4 6C000215 +@00000BC5 20800054 +@00000BC6 AB404426 +@00000BC7 014003C4 +@00000BC8 2D801636 +@00000BC9 00800044 +@00000BCA 80800115 +@00000BCB 003F9806 +@00000BCC 00805504 +@00000BCD 10C00336 +@00000BCE 8804D3FA +@00000BCF 12401DC4 +@00000BD0 003EE806 +@00000BD1 00815504 +@00000BD2 02401F84 +@00000BD3 10FEE536 +@00000BD4 8804D4BA +@00000BD5 12401F04 +@00000BD6 003EE206 +@00000BD7 00800504 +@00000BD8 290016C4 +@00000BD9 117FA72E +@00000BDA 00801504 +@00000BDB 11403A36 +@00000BDC 1804D33A +@00000BDD 11001B84 +@00000BDE 003FA206 +@00000BDF 80800115 +@00000BE0 A8800117 +@00000BE1 00FFFE04 +@00000BE2 B13FFD04 +@00000BE3 20EE703A +@00000BE4 1080004C +@00000BE5 15C4B03A +@00000BE6 A8800115 +@00000BE7 ADC7883A +@00000BE8 00800144 +@00000BE9 18800215 +@00000BEA 18800115 +@00000BEB 2DC02436 +@00000BEC E0C00017 +@00000BED D0A01117 +@00000BEE 10C0012E +@00000BEF D0E01115 +@00000BF0 D0A01017 +@00000BF1 10FF722E +@00000BF2 D0E01015 +@00000BF3 003F7006 +@00000BF4 2005D0BA +@00000BF5 00C00044 +@00000BF6 29000117 +@00000BF7 1886983A +@00000BF8 20C8B03A +@00000BF9 29000115 +@00000BFA 003F9606 +@00000BFB D4201215 +@00000BFC 003FAF06 +@00000BFD 80801FCC +@00000BFE 103FA61E +@00000BFF 00800034 +@00000C00 10928904 +@00000C01 10C00217 +@00000C02 A5C9883A +@00000C03 20800054 +@00000C04 18800115 +@00000C05 003FE606 +@00000C06 68800117 +@00000C07 01C6303A +@00000C08 10C4703A +@00000C09 68800115 +@00000C0A 003F1806 +@00000C0B 80800115 +@00000C0C 003FDF06 +@00000C0D 0027883A +@00000C0E 8007883A +@00000C0F 003FAF06 +@00000C10 A9400204 +@00000C11 9009883A +@00000C12 DB400015 +@00000C13 00032640 +@00000C14 DB400017 +@00000C15 003FD606 +@00000C16 00805504 +@00000C17 11400336 +@00000C18 1804D3FA +@00000C19 11001DC4 +@00000C1A 003F6606 +@00000C1B 00815504 +@00000C1C 01001F84 +@00000C1D 117F6336 +@00000C1E 1804D4BA +@00000C1F 11001F04 +@00000C20 003F6006 +@00000C21 31BFFFC4 +@00000C22 00BFFFC4 +@00000C23 30800826 +@00000C24 100F883A +@00000C25 20C00003 +@00000C26 28800003 +@00000C27 31BFFFC4 +@00000C28 21000044 +@00000C29 29400044 +@00000C2A 1880031E +@00000C2B 31FFF91E +@00000C2C 0005883A +@00000C2D F800283A +@00000C2E 1885C83A +@00000C2F F800283A +@00000C30 31BFFFC4 +@00000C31 00BFFFC4 +@00000C32 2007883A +@00000C33 30800726 +@00000C34 100F883A +@00000C35 28800003 +@00000C36 31BFFFC4 +@00000C37 29400044 +@00000C38 18800005 +@00000C39 18C00044 +@00000C3A 31FFFA1E +@00000C3B 2005883A +@00000C3C F800283A +@00000C3D DEFFFE04 +@00000C3E DC000015 +@00000C3F 2021883A +@00000C40 2809883A +@00000C41 DFC00115 +@00000C42 D0201815 +@00000C43 00035A40 +@00000C44 1007883A +@00000C45 00BFFFC4 +@00000C46 18800526 +@00000C47 1805883A +@00000C48 DFC00117 +@00000C49 DC000017 +@00000C4A DEC00204 +@00000C4B F800283A +@00000C4C D0A01817 +@00000C4D 103FF926 +@00000C4E 80800315 +@00000C4F 003FF706 +@00000C50 DEFFFB04 +@00000C51 DCC00015 +@00000C52 04C00034 +@00000C53 9CD28904 +@00000C54 DC000315 +@00000C55 DC400215 +@00000C56 DC800115 +@00000C57 2823883A +@00000C58 2021883A +@00000C59 DFC00415 +@00000C5A 000356C0 +@00000C5B 98800217 +@00000C5C 8009883A +@00000C5D 000B883A +@00000C5E 10C00117 +@00000C5F 00BFFF04 +@00000C60 18A4703A +@00000C61 9463C83A +@00000C62 8C401BC4 +@00000C63 8822D1FA +@00000C64 00802004 +@00000C65 8C7FFFC4 +@00000C66 882291FA +@00000C67 88800616 +@00000C68 00030F40 +@00000C69 98C00217 +@00000C6A 8009883A +@00000C6B 044BC83A +@00000C6C 1C87883A +@00000C6D 18800926 +@00000C6E 00035880 +@00000C6F 0005883A +@00000C70 DFC00417 +@00000C71 DC000317 +@00000C72 DC400217 +@00000C73 DC800117 +@00000C74 DCC00017 +@00000C75 DEC00504 +@00000C76 F800283A +@00000C77 8009883A +@00000C78 00030F40 +@00000C79 944DC83A +@00000C7A 00FFFFC4 +@00000C7B 8009883A +@00000C7C 000B883A +@00000C7D 01C00034 +@00000C7E 39D27F04 +@00000C7F 31800054 +@00000C80 10C00926 +@00000C81 38800017 +@00000C82 98C00217 +@00000C83 8009883A +@00000C84 1445C83A +@00000C85 38800015 +@00000C86 19800115 +@00000C87 00035880 +@00000C88 00800044 +@00000C89 003FE606 +@00000C8A 00030F40 +@00000C8B 99400217 +@00000C8C 100D883A +@00000C8D 8009883A +@00000C8E 1165C83A +@00000C8F 008003C4 +@00000C90 90C00054 +@00000C91 14BFDC0E +@00000C92 28C00115 +@00000C93 D0E01217 +@00000C94 00800034 +@00000C95 10927F04 +@00000C96 30C7C83A +@00000C97 10C00015 +@00000C98 003FD506 +@00000C99 DEFFFD04 +@00000C9A DC000115 +@00000C9B DC400015 +@00000C9C DFC00215 +@00000C9D 2821883A +@00000C9E 2023883A +@00000C9F 28003226 +@00000CA0 000356C0 +@00000CA1 82BFFE04 +@00000CA2 51400117 +@00000CA3 00BFFF84 +@00000CA4 03000034 +@00000CA5 63128904 +@00000CA6 2892703A +@00000CA7 524D883A +@00000CA8 30C00117 +@00000CA9 61000217 +@00000CAA 00BFFF04 +@00000CAB 1896703A +@00000CAC 21804E26 +@00000CAD 2880004C +@00000CAE 32C00115 +@00000CAF 000B883A +@00000CB0 1000091E +@00000CB1 50C00017 +@00000CB2 60800204 +@00000CB3 50D5C83A +@00000CB4 51000217 +@00000CB5 48D3883A +@00000CB6 20807426 +@00000CB7 52000317 +@00000CB8 41000215 +@00000CB9 22000315 +@00000CBA 32C7883A +@00000CBB 18800117 +@00000CBC 2808C03A +@00000CBD 1080004C +@00000CBE 1000061E +@00000CBF 4AD3883A +@00000CC0 20001626 +@00000CC1 30C00217 +@00000CC2 32000317 +@00000CC3 40C00215 +@00000CC4 1A000315 +@00000CC5 48800054 +@00000CC6 5247883A +@00000CC7 50800115 +@00000CC8 1A400015 +@00000CC9 20001726 +@00000CCA 8809883A +@00000CCB 02000034 +@00000CCC 420D6204 +@00000CCD DFC00217 +@00000CCE DC000117 +@00000CCF DC400017 +@00000CD0 DEC00304 +@00000CD1 4000683A +@00000CD2 DFC00217 +@00000CD3 DC000117 +@00000CD4 DC400017 +@00000CD5 DEC00304 +@00000CD6 F800283A +@00000CD7 30C00217 +@00000CD8 00800034 +@00000CD9 10928B04 +@00000CDA 18BFE71E +@00000CDB 1A800315 +@00000CDC 1A800215 +@00000CDD 01000044 +@00000CDE 50C00215 +@00000CDF 50C00315 +@00000CE0 003FE406 +@00000CE1 00807FC4 +@00000CE2 12402B36 +@00000CE3 4806D0FA +@00000CE4 01800034 +@00000CE5 31928904 +@00000CE6 00800044 +@00000CE7 180890FA +@00000CE8 1807D0BA +@00000CE9 31400117 +@00000CEA 2191883A +@00000CEB 41C00217 +@00000CEC 10C4983A +@00000CED 52000315 +@00000CEE 51C00215 +@00000CEF 288AB03A +@00000CF0 3A800315 +@00000CF1 31400115 +@00000CF2 42800215 +@00000CF3 8809883A +@00000CF4 02000034 +@00000CF5 420D6204 +@00000CF6 DFC00217 +@00000CF7 DC000117 +@00000CF8 DC400017 +@00000CF9 DEC00304 +@00000CFA 4000683A +@00000CFB 2880004C +@00000CFC 4AD3883A +@00000CFD 1000071E +@00000CFE 50C00017 +@00000CFF 50D5C83A +@00000D00 52000317 +@00000D01 51C00217 +@00000D02 48D3883A +@00000D03 41C00215 +@00000D04 3A000315 +@00000D05 D0A01417 +@00000D06 48C00054 +@00000D07 62800215 +@00000D08 50C00115 +@00000D09 48BFC036 +@00000D0A D1601317 +@00000D0B 8809883A +@00000D0C 00031400 +@00000D0D 003FBC06 +@00000D0E 4808D27A +@00000D0F 4806D0FA +@00000D10 2000151E +@00000D11 180490FA +@00000D12 01400034 +@00000D13 29528904 +@00000D14 1311883A +@00000D15 41C00217 +@00000D16 3A001E26 +@00000D17 38800117 +@00000D18 00FFFF04 +@00000D19 10C4703A +@00000D1A 4880052E +@00000D1B 39C00217 +@00000D1C 3A000326 +@00000D1D 38800117 +@00000D1E 10C4703A +@00000D1F 48BFFB36 +@00000D20 3A000317 +@00000D21 52000315 +@00000D22 51C00215 +@00000D23 3A800315 +@00000D24 42800215 +@00000D25 003FCD06 +@00000D26 00800104 +@00000D27 11000536 +@00000D28 4804D1BA +@00000D29 10C00E04 +@00000D2A 003FE606 +@00000D2B 01400044 +@00000D2C 003F8D06 +@00000D2D 00800504 +@00000D2E 20C016C4 +@00000D2F 113FE12E +@00000D30 00801504 +@00000D31 11000A36 +@00000D32 4804D33A +@00000D33 10C01B84 +@00000D34 003FDC06 +@00000D35 1805D0BA +@00000D36 00C00044 +@00000D37 29000117 +@00000D38 1886983A +@00000D39 20C8B03A +@00000D3A 29000115 +@00000D3B 003FE506 +@00000D3C 00805504 +@00000D3D 11000336 +@00000D3E 4804D3FA +@00000D3F 10C01DC4 +@00000D40 003FD006 +@00000D41 00815504 +@00000D42 00C01F84 +@00000D43 113FCD36 +@00000D44 4804D4BA +@00000D45 10C01F04 +@00000D46 003FCA06 +@00000D47 DEFFFD04 +@00000D48 DF000215 +@00000D49 D839883A +@00000D4A E1000015 +@00000D4B E0800017 +@00000D4C E0800115 +@00000D4D 00C00044 +@00000D4E E0800117 +@00000D4F 180171BA +@00000D50 DF000217 +@00000D51 DEC00304 +@00000D52 F800283A +@00000D53 DEFFFD04 +@00000D54 DFC00215 +@00000D55 DF000115 +@00000D56 D839883A +@00000D57 E1000015 +@00000D58 E1000017 +@00000D59 000351C0 +@00000D5A 003FFF06 +@00000D5B DEFFFE04 +@00000D5C DF000115 +@00000D5D D839883A +@00000D5E E1000015 +@00000D5F DF000117 +@00000D60 DEC00204 +@00000D61 F800283A +@00000D62 DEFFFE04 +@00000D63 DF000115 +@00000D64 D839883A +@00000D65 E1000015 +@00000D66 DF000117 +@00000D67 DEC00204 +@00000D68 F800283A +@00000D69 DEFFFA04 +@00000D6A DF000515 +@00000D6B D839883A +@00000D6C E1000015 +@00000D6D 0005303A +@00000D6E E0800415 +@00000D6F 0001703A +@00000D70 E0800417 +@00000D71 E0800315 +@00000D72 E0800317 +@00000D73 E0800115 +@00000D74 D0A01517 +@00000D75 10C000C4 +@00000D76 00BFFF04 +@00000D77 1884703A +@00000D78 D0A01515 +@00000D79 D0A01517 +@00000D7A E0800215 +@00000D7B D0E01517 +@00000D7C E0800017 +@00000D7D 1885883A +@00000D7E D0A01515 +@00000D7F E0800117 +@00000D80 E0800415 +@00000D81 E0800417 +@00000D82 1001703A +@00000D83 E0800217 +@00000D84 DF000517 +@00000D85 DEC00604 +@00000D86 F800283A +@00000D87 2A2A0A0A +@00000D88 2A2A2A2A +@00000D89 2A2A2A2A +@00000D8A 2A2A2A2A +@00000D8B 2A2A2A2A +@00000D8C 2A2A2A2A +@00000D8D 2A2A2A2A +@00000D8E 0000000A +@00000D8F 6548202A +@00000D90 206F6C6C +@00000D91 6D6F7266 +@00000D92 6F694E20 +@00000D93 49492073 +@00000D94 20202021 +@00000D95 000A2A20 +@00000D96 6F43202A +@00000D97 69746E75 +@00000D98 6620676E +@00000D99 206D6F72 +@00000D9A 74203030 +@00000D9B 6666206F +@00000D9C 000A2A20 +@00000D9D 2A2A2A2A +@00000D9E 2A2A2A2A +@00000D9F 2A2A2A2A +@00000DA0 2A2A2A2A +@00000DA1 2A2A2A2A +@00000DA2 2A2A2A2A +@00000DA3 000A2A2A +@00000DA4 78323025 +@00000DA5 0020202C +@00000DA6 74747542 +@00000DA7 31206E6F +@00000DA8 0000000A +@00000DA9 74747542 +@00000DAA 32206E6F +@00000DAB 0000000A +@00000DAC 74747542 +@00000DAD 33206E6F +@00000DAE 0000000A +@00000DAF 74747542 +@00000DB0 34206E6F +@00000DB1 0000000A +@00000DB2 6961570A +@00000DB3 676E6974 +@00000DB4 002E2E2E +@00000DB5 0000002E +@00000DB6 756F590A +@00000DB7 73757020 +@00000DB8 3A646568 +@00000DB9 00002020 +@00000DBA 00000838 +@00000DBB 000007F0 +@00000DBC 000007F0 +@00000DBD 000007F0 +@00000DBE 000007F0 +@00000DBF 000007F0 +@00000DC0 000007F0 +@00000DC1 000007F0 +@00000DC2 000007F0 +@00000DC3 000007F0 +@00000DC4 000007F0 +@00000DC5 0000098C +@00000DC6 00000848 +@00000DC7 000007F0 +@00000DC8 000007F0 +@00000DC9 000007F0 +@00000DCA 000007F0 +@00000DCB 00000848 +@00000DCC 000007F0 +@00000DCD 000007F0 +@00000DCE 000007F0 +@00000DCF 000007F0 +@00000DD0 000007F0 +@00000DD1 00000A68 +@00000DD2 000007F0 +@00000DD3 000007F0 +@00000DD4 000007F0 +@00000DD5 00000A00 +@00000DD6 000007F0 +@00000DD7 000009F8 +@00000DD8 000007F0 +@00000DD9 000007F0 +@00000DDA 000009EC +@00000DDB 7665642F +@00000DDC 61746A2F +@00000DDD 61755F67 +@00000DDE 305F7472 +@00000DDF 00000000 +@00000DE0 7665642F +@00000DE1 61746A2F +@00000DE2 61755F67 +@00000DE3 305F7472 +@00000DE4 00000000 +@00000DE5 7665642F +@00000DE6 6C756E2F +@00000DE7 0000006C +@00000DE8 000037D4 +@00000DE9 000037DC +@00000DEA 000037E4 +@00000DEB 00000000 +@00000DEC 00000000 +@00000DED 00000000 +@00000DEE 00000000 +@00000DEF 00000000 +@00000DF0 00000000 +@00000DF1 00000000 +@00000DF2 00000000 +@00000DF3 00000000 +@00000DF4 00000000 +@00000DF5 00000004 +@00000DF6 00000000 +@00000DF7 0001000A +@00000DF8 00000000 +@00000DF9 0002000A +@00000DFA 00000000 +@00000DFB 00000000 +@00000DFC 00000000 +@00000DFD 00000000 +@00000DFE 00000000 +@00000DFF 00003780 +@00000E00 00000000 +@00000E01 00000000 +@00000E02 00001000 +@00000E03 00001240 +@00000E04 00000000 +@00000E05 00000000 +@00000E06 000016B0 +@00000E07 01000850 +@00000E08 0000000A +@00000E09 00000000 +@00000E0A 00000000 +@00000E0B 00000000 +@00000E0C 00000000 +@00000E0D 00000000 +@00000E0E 00000000 +@00000E0F 00000000 +@00000E10 00000000 +@00000E11 00000000 +@00000E12 00000000 +@00000E13 00000000 +@00000E14 00000000 +@00000E15 00000000 +@00000E16 00000000 +@00000E17 00000000 +@00000E18 00000000 +@00000E19 00000000 +@00000E1A 00000000 +@00000E1B 00000000 +@00000E1C 00000000 +@00000E1D 00000000 +@00000E1E 00000000 +@00000E1F 00000000 +@00000E20 00000000 +@00000E21 00000000 +@00000E22 00000000 +@00000E23 00000000 +@00000E24 00000000 +@00000E25 00000000 +@00000E26 00000000 +@00000E27 00000000 +@00000E28 00000000 +@00000E29 00000000 +@00000E2A 00000000 +@00000E2B 00000000 +@00000E2C 00000000 +@00000E2D 00000000 +@00000E2E 00000000 +@00000E2F 00000000 +@00000E30 00000000 +@00000E31 00000000 +@00000E32 00000000 +@00000E33 00000000 +@00000E34 00000000 +@00000E35 00000000 +@00000E36 00000000 +@00000E37 00000000 +@00000E38 00000000 +@00000E39 00000000 +@00000E3A 00000000 +@00000E3B 00000000 +@00000E3C 00000000 +@00000E3D 00000000 +@00000E3E 00000000 +@00000E3F 00000000 +@00000E40 00000000 +@00000E41 00000000 +@00000E42 00000000 +@00000E43 00000000 +@00000E44 00000000 +@00000E45 00000000 +@00000E46 00000000 +@00000E47 00000000 +@00000E48 00000000 +@00000E49 00000000 +@00000E4A 00000000 +@00000E4B 00000000 +@00000E4C 00000000 +@00000E4D 00000000 +@00000E4E 00000000 +@00000E4F 00000000 +@00000E50 00000000 +@00000E51 00000000 +@00000E52 00000000 +@00000E53 00000000 +@00000E54 00000000 +@00000E55 00000000 +@00000E56 00000000 +@00000E57 00000000 +@00000E58 00000000 +@00000E59 00000000 +@00000E5A 00000000 +@00000E5B 00000000 +@00000E5C 00000000 +@00000E5D 00000000 +@00000E5E 00000000 +@00000E5F 00000000 +@00000E60 00000000 +@00000E61 00000000 +@00000E62 00000000 +@00000E63 00000000 +@00000E64 00000000 +@00000E65 00000000 +@00000E66 00000000 +@00000E67 00000000 +@00000E68 00000000 +@00000E69 00000000 +@00000E6A 00000000 +@00000E6B 00000000 +@00000E6C 00000000 +@00000E6D 00000000 +@00000E6E 00000000 +@00000E6F 00000000 +@00000E70 00000000 +@00000E71 00000000 +@00000E72 00000000 +@00000E73 00000000 +@00000E74 00000000 +@00000E75 00000000 +@00000E76 00000000 +@00000E77 00000000 +@00000E78 00000000 +@00000E79 00000000 +@00000E7A 00000000 +@00000E7B 00000000 +@00000E7C 00000000 +@00000E7D 00000000 +@00000E7E 00000000 +@00000E7F 00000000 +@00000E80 00000000 +@00000E81 00000000 +@00000E82 00000000 +@00000E83 00000000 +@00000E84 00000000 +@00000E85 00000000 +@00000E86 00000000 +@00000E87 00000000 +@00000E88 00000000 +@00000E89 00000000 +@00000E8A 00000000 +@00000E8B 00000000 +@00000E8C 00000000 +@00000E8D 00000000 +@00000E8E 00000000 +@00000E8F 00000000 +@00000E90 00000000 +@00000E91 00000000 +@00000E92 00000000 +@00000E93 00000000 +@00000E94 00000000 +@00000E95 00000000 +@00000E96 00000000 +@00000E97 00000000 +@00000E98 00000000 +@00000E99 00000000 +@00000E9A 00000000 +@00000E9B 00000000 +@00000E9C 00000000 +@00000E9D 00000000 +@00000E9E 00000000 +@00000E9F 00000000 +@00000EA0 00000000 +@00000EA1 00000000 +@00000EA2 00000000 +@00000EA3 00000000 +@00000EA4 00000000 +@00000EA5 00000000 +@00000EA6 00000000 +@00000EA7 00000000 +@00000EA8 00000000 +@00000EA9 00000000 +@00000EAA 00000000 +@00000EAB 00000000 +@00000EAC 00000000 +@00000EAD 00000000 +@00000EAE 00000000 +@00000EAF 00000000 +@00000EB0 00000000 +@00000EB1 00000000 +@00000EB2 00000000 +@00000EB3 00000000 +@00000EB4 00000000 +@00000EB5 00000000 +@00000EB6 00000000 +@00000EB7 00000000 +@00000EB8 00000000 +@00000EB9 00000000 +@00000EBA 00000000 +@00000EBB 00000000 +@00000EBC 00000000 +@00000EBD 00000000 +@00000EBE 00000000 +@00000EBF 00000000 +@00000EC0 00000000 +@00000EC1 00000000 +@00000EC2 00000000 +@00000EC3 00000000 +@00000EC4 00000000 +@00000EC5 00000000 +@00000EC6 00000000 +@00000EC7 00000000 +@00000EC8 00000000 +@00000EC9 00000000 +@00000ECA 00000000 +@00000ECB 00000000 +@00000ECC 00000000 +@00000ECD 00000000 +@00000ECE 00000000 +@00000ECF 00000000 +@00000ED0 00000000 +@00000ED1 00000000 +@00000ED2 00000000 +@00000ED3 00000000 +@00000ED4 00000000 +@00000ED5 00000000 +@00000ED6 00000000 +@00000ED7 00000000 +@00000ED8 00000000 +@00000ED9 00000000 +@00000EDA 00000000 +@00000EDB 00000000 +@00000EDC 00000000 +@00000EDD 00000000 +@00000EDE 00000000 +@00000EDF 00000000 +@00000EE0 00000000 +@00000EE1 00000000 +@00000EE2 00000000 +@00000EE3 00000000 +@00000EE4 00000000 +@00000EE5 00000000 +@00000EE6 00000000 +@00000EE7 00000000 +@00000EE8 00000000 +@00000EE9 00000000 +@00000EEA 00000000 +@00000EEB 00000000 +@00000EEC 00000000 +@00000EED 00000000 +@00000EEE 00000000 +@00000EEF 00000000 +@00000EF0 00000000 +@00000EF1 00000000 +@00000EF2 00000000 +@00000EF3 00000000 +@00000EF4 00000000 +@00000EF5 00000000 +@00000EF6 00000000 +@00000EF7 00000000 +@00000EF8 00000000 +@00000EF9 00000000 +@00000EFA 00000000 +@00000EFB 00000000 +@00000EFC 00000000 +@00000EFD 00000000 +@00000EFE 00000000 +@00000EFF 00000000 +@00000F00 00000000 +@00000F01 00000000 +@00000F02 00000000 +@00000F03 00000000 +@00000F04 00000000 +@00000F05 00000000 +@00000F06 00000000 +@00000F07 00000000 +@00000F08 00000000 +@00000F09 00000000 +@00000F0A 00000000 +@00000F0B 00000000 +@00000F0C 00000000 +@00000F0D 00000000 +@00000F0E 00000000 +@00000F0F 00000000 +@00000F10 00000000 +@00000F11 00000000 +@00000F12 00000000 +@00000F13 00000000 +@00000F14 00000000 +@00000F15 00000000 +@00000F16 00000000 +@00000F17 00000000 +@00000F18 00000000 +@00000F19 00000000 +@00000F1A 00000000 +@00000F1B 00000000 +@00000F1C 00000000 +@00000F1D 00000000 +@00000F1E 00000000 +@00000F1F 00000000 +@00000F20 00000000 +@00000F21 00000000 +@00000F22 00000000 +@00000F23 00000000 +@00000F24 00000000 +@00000F25 00000000 +@00000F26 00000000 +@00000F27 00000000 +@00000F28 00000000 +@00000F29 00000000 +@00000F2A 00000000 +@00000F2B 00000000 +@00000F2C 00000000 +@00000F2D 00000000 +@00000F2E 00000000 +@00000F2F 00000000 +@00000F30 00000000 +@00000F31 00000000 +@00000F32 00000000 +@00000F33 00000000 +@00000F34 00000000 +@00000F35 00000000 +@00000F36 00000000 +@00000F37 00000000 +@00000F38 00000000 +@00000F39 00000000 +@00000F3A 00000000 +@00000F3B 00000000 +@00000F3C 00000000 +@00000F3D 00000000 +@00000F3E 00000000 +@00000F3F 00000000 +@00000F40 00000000 +@00000F41 00000000 +@00000F42 00000000 +@00000F43 00000000 +@00000F44 00000000 +@00000F45 00000000 +@00000F46 00000000 +@00000F47 00000000 +@00000F48 00000000 +@00000F49 00000000 +@00000F4A 00000000 +@00000F4B 00000000 +@00000F4C 00000000 +@00000F4D 00000000 +@00000F4E 00000000 +@00000F4F 00000000 +@00000F50 00000000 +@00000F51 00000000 +@00000F52 00000000 +@00000F53 00000000 +@00000F54 00000000 +@00000F55 00000000 +@00000F56 00000000 +@00000F57 00000000 +@00000F58 00000000 +@00000F59 00000000 +@00000F5A 00000000 +@00000F5B 00000000 +@00000F5C 00000000 +@00000F5D 00000000 +@00000F5E 00000000 +@00000F5F 00000000 +@00000F60 00000000 +@00000F61 00000000 +@00000F62 00000000 +@00000F63 00000000 +@00000F64 00000000 +@00000F65 00000000 +@00000F66 00000000 +@00000F67 00000000 +@00000F68 00000000 +@00000F69 00000000 +@00000F6A 00000000 +@00000F6B 00000000 +@00000F6C 00000000 +@00000F6D 00000000 +@00000F6E 00000000 +@00000F6F 00000000 +@00000F70 00000000 +@00000F71 00000000 +@00000F72 00000000 +@00000F73 00000000 +@00000F74 00000000 +@00000F75 00000000 +@00000F76 00000000 +@00000F77 00000000 +@00000F78 00000000 +@00000F79 00000000 +@00000F7A 00000000 +@00000F7B 00000000 +@00000F7C 00000000 +@00000F7D 00000000 +@00000F7E 00000000 +@00000F7F 00000000 +@00000F80 00000000 +@00000F81 00000000 +@00000F82 00000000 +@00000F83 00000000 +@00000F84 00000000 +@00000F85 00000000 +@00000F86 00000000 +@00000F87 00000000 +@00000F88 00000000 +@00000F89 00000000 +@00000F8A 00000000 +@00000F8B 00000000 +@00000F8C 00000000 +@00000F8D 00000000 +@00000F8E 00000000 +@00000F8F 00000000 +@00000F90 00000000 +@00000F91 00000000 +@00000F92 00000000 +@00000F93 00000000 +@00000F94 00000000 +@00000F95 00000000 +@00000F96 00000000 +@00000F97 00000000 +@00000F98 00000000 +@00000F99 00000000 +@00000F9A 00000000 +@00000F9B 00000000 +@00000F9C 00000000 +@00000F9D 00000000 +@00000F9E 00000000 +@00000F9F 00000000 +@00000FA0 00000000 +@00000FA1 00000000 +@00000FA2 00000000 +@00000FA3 00000000 +@00000FA4 00000000 +@00000FA5 00000000 +@00000FA6 00000000 +@00000FA7 00000000 +@00000FA8 00000000 +@00000FA9 00000000 +@00000FAA 00000000 +@00000FAB 00000000 +@00000FAC 00000000 +@00000FAD 00000000 +@00000FAE 00000000 +@00000FAF 00000000 +@00000FB0 00000000 +@00000FB1 00000000 +@00000FB2 00000000 +@00000FB3 00000000 +@00000FB4 00000000 +@00000FB5 00000000 +@00000FB6 00000000 +@00000FB7 00000000 +@00000FB8 00000000 +@00000FB9 00000000 +@00000FBA 00000000 +@00000FBB 00000000 +@00000FBC 00000000 +@00000FBD 00000000 +@00000FBE 00000000 +@00000FBF 00000000 +@00000FC0 00000000 +@00000FC1 00000000 +@00000FC2 00000000 +@00000FC3 00000000 +@00000FC4 00000000 +@00000FC5 00000000 +@00000FC6 00000000 +@00000FC7 00000000 +@00000FC8 00000000 +@00000FC9 00000000 +@00000FCA 00000000 +@00000FCB 00000000 +@00000FCC 00000000 +@00000FCD 00000000 +@00000FCE 00000000 +@00000FCF 00000000 +@00000FD0 00000000 +@00000FD1 00000000 +@00000FD2 00000000 +@00000FD3 00000000 +@00000FD4 00000000 +@00000FD5 00000000 +@00000FD6 00000000 +@00000FD7 00000000 +@00000FD8 00000000 +@00000FD9 00000000 +@00000FDA 00000000 +@00000FDB 00000000 +@00000FDC 00000000 +@00000FDD 00000000 +@00000FDE 00000000 +@00000FDF 00000000 +@00000FE0 00000000 +@00000FE1 00000000 +@00000FE2 00000000 +@00000FE3 00000000 +@00000FE4 00000000 +@00000FE5 00000000 +@00000FE6 00000000 +@00000FE7 00000000 +@00000FE8 00000000 +@00000FE9 00000000 +@00000FEA 00000000 +@00000FEB 00000000 +@00000FEC 00000000 +@00000FED 00000000 +@00000FEE 00000000 +@00000FEF 00000000 +@00000FF0 00000000 +@00000FF1 00000000 +@00000FF2 00000000 +@00000FF3 00000000 +@00000FF4 00000000 +@00000FF5 00000000 +@00000FF6 00000000 +@00000FF7 00000000 +@00000FF8 00000000 +@00000FF9 00000000 +@00000FFA 00000000 +@00000FFB 00000000 +@00000FFC 00000000 +@00000FFD 00000000 +@00000FFE 00000000 +@00000FFF 00000000 +@00001000 00000000 +@00001001 00000000 +@00001002 00000000 +@00001003 00000000 +@00001004 00000000 +@00001005 00000000 +@00001006 00000000 +@00001007 00000000 +@00001008 00000000 +@00001009 00000000 +@0000100A 00000000 +@0000100B 00000000 +@0000100C 00000000 +@0000100D 00000000 +@0000100E 00000000 +@0000100F 00000000 +@00001010 00000000 +@00001011 00000000 +@00001012 00000000 +@00001013 00000000 +@00001014 00000000 +@00001015 00000000 +@00001016 00000000 +@00001017 00000000 +@00001018 00000000 +@00001019 00000000 +@0000101A 00000000 +@0000101B 00000000 +@0000101C 00000000 +@0000101D 00000000 +@0000101E 00000000 +@0000101F 00000000 +@00001020 00000000 +@00001021 00000000 +@00001022 00000000 +@00001023 00000000 +@00001024 00000000 +@00001025 00000000 +@00001026 00000000 +@00001027 00000000 +@00001028 00000000 +@00001029 00000000 +@0000102A 00000000 +@0000102B 00000000 +@0000102C 00000000 +@0000102D 00000000 +@0000102E 00000000 +@0000102F 00000000 +@00001030 00000000 +@00001031 00000000 +@00001032 00000000 +@00001033 00000000 +@00001034 00000000 +@00001035 00000000 +@00001036 00000000 +@00001037 00000000 +@00001038 00000000 +@00001039 00000000 +@0000103A 00000000 +@0000103B 00000000 +@0000103C 00000000 +@0000103D 00000000 +@0000103E 00000000 +@0000103F 00000000 +@00001040 00000000 +@00001041 00000000 +@00001042 00000000 +@00001043 00000000 +@00001044 00000000 +@00001045 00000000 +@00001046 00000000 +@00001047 00000000 +@00001048 00000000 +@00001049 00000000 +@0000104A 00000000 +@0000104B 00000000 +@0000104C 00000000 +@0000104D 00000000 +@0000104E 00000000 +@0000104F 00000000 +@00001050 00000000 +@00001051 00000000 +@00001052 00000000 +@00001053 00000000 +@00001054 00000000 +@00001055 00000000 +@00001056 00000000 +@00001057 00000000 +@00001058 00000000 +@00001059 00000000 +@0000105A 00000000 +@0000105B 00000000 +@0000105C 00000000 +@0000105D 00000000 +@0000105E 00000000 +@0000105F 00000000 +@00001060 00000000 +@00001061 00000000 +@00001062 00000000 +@00001063 00000000 +@00001064 00000000 +@00001065 00000000 +@00001066 00000000 +@00001067 00000000 +@00001068 00000000 +@00001069 00000000 +@0000106A 00000000 +@0000106B 00000000 +@0000106C 00000000 +@0000106D 00000000 +@0000106E 00000000 +@0000106F 00000000 +@00001070 00000000 +@00001071 00000000 +@00001072 00000000 +@00001073 00000000 +@00001074 00000000 +@00001075 00000000 +@00001076 00000000 +@00001077 00000000 +@00001078 00000000 +@00001079 00000000 +@0000107A 00000000 +@0000107B 00000000 +@0000107C 00000000 +@0000107D 00000000 +@0000107E 00000000 +@0000107F 00000000 +@00001080 00000000 +@00001081 00000000 +@00001082 00000000 +@00001083 00000000 +@00001084 00000000 +@00001085 00000000 +@00001086 00000000 +@00001087 00000000 +@00001088 00000000 +@00001089 00000000 +@0000108A 00000000 +@0000108B 00000000 +@0000108C 00000000 +@0000108D 00000000 +@0000108E 00000000 +@0000108F 00000000 +@00001090 00000000 +@00001091 00000000 +@00001092 00000000 +@00001093 00000000 +@00001094 00000000 +@00001095 00000000 +@00001096 00000000 +@00001097 00000000 +@00001098 00000000 +@00001099 00000000 +@0000109A 00000000 +@0000109B 00000000 +@0000109C 00000000 +@0000109D 00000000 +@0000109E 00000000 +@0000109F 00000000 +@000010A0 00000000 +@000010A1 00000000 +@000010A2 00000000 +@000010A3 00000000 +@000010A4 00000000 +@000010A5 00000000 +@000010A6 00000000 +@000010A7 00000000 +@000010A8 00000000 +@000010A9 00000000 +@000010AA 00000000 +@000010AB 00000000 +@000010AC 00000000 +@000010AD 00000000 +@000010AE 00000000 +@000010AF 00000000 +@000010B0 00000000 +@000010B1 00000000 +@000010B2 00000000 +@000010B3 00000000 +@000010B4 00000000 +@000010B5 00000000 +@000010B6 00000000 +@000010B7 00000000 +@000010B8 00000000 +@000010B9 00000000 +@000010BA 00000000 +@000010BB 00000000 +@000010BC 00000000 +@000010BD 00000000 +@000010BE 00000000 +@000010BF 00000000 +@000010C0 00000000 +@000010C1 00000000 +@000010C2 00000000 +@000010C3 00000000 +@000010C4 00000000 +@000010C5 00000000 +@000010C6 00000000 +@000010C7 00000000 +@000010C8 00000000 +@000010C9 00000000 +@000010CA 00000000 +@000010CB 00000000 +@000010CC 00000000 +@000010CD 00000000 +@000010CE 00000000 +@000010CF 00000000 +@000010D0 00000000 +@000010D1 00000000 +@000010D2 00000000 +@000010D3 00000000 +@000010D4 00000000 +@000010D5 00000000 +@000010D6 00000000 +@000010D7 00000000 +@000010D8 00000000 +@000010D9 00000000 +@000010DA 00000000 +@000010DB 00000000 +@000010DC 00000000 +@000010DD 00000000 +@000010DE 00000000 +@000010DF 00000000 +@000010E0 00000000 +@000010E1 00000000 +@000010E2 00000000 +@000010E3 00000000 +@000010E4 00000000 +@000010E5 00000000 +@000010E6 00000000 +@000010E7 00000000 +@000010E8 00000000 +@000010E9 00000000 +@000010EA 00000000 +@000010EB 00000000 +@000010EC 00000000 +@000010ED 00000000 +@000010EE 00000000 +@000010EF 00000000 +@000010F0 00000000 +@000010F1 00000000 +@000010F2 00000000 +@000010F3 00000000 +@000010F4 00000000 +@000010F5 00000000 +@000010F6 00000000 +@000010F7 00000000 +@000010F8 00000000 +@000010F9 00000000 +@000010FA 00000000 +@000010FB 00000000 +@000010FC 00000000 +@000010FD 00000000 +@000010FE 00000000 +@000010FF 00000000 +@00001100 00000000 +@00001101 00000000 +@00001102 00000000 +@00001103 00000000 +@00001104 00000000 +@00001105 00000000 +@00001106 00000000 +@00001107 00000000 +@00001108 00000000 +@00001109 00000000 +@0000110A 00000000 +@0000110B 00000000 +@0000110C 00000000 +@0000110D 00000000 +@0000110E 00000000 +@0000110F 00000000 +@00001110 00000000 +@00001111 00000000 +@00001112 00000000 +@00001113 00000000 +@00001114 00000000 +@00001115 00000000 +@00001116 00000000 +@00001117 00000000 +@00001118 00000000 +@00001119 00000000 +@0000111A 00000000 +@0000111B 00000000 +@0000111C 00000000 +@0000111D 00000000 +@0000111E 00000000 +@0000111F 00000000 +@00001120 00000000 +@00001121 00000000 +@00001122 00000000 +@00001123 00000000 +@00001124 00000000 +@00001125 00000000 +@00001126 00000000 +@00001127 00000000 +@00001128 00000000 +@00001129 00000000 +@0000112A 00000000 +@0000112B 00000000 +@0000112C 00000000 +@0000112D 00000000 +@0000112E 00000000 +@0000112F 00000000 +@00001130 00000000 +@00001131 00000000 +@00001132 00000000 +@00001133 00000000 +@00001134 00000000 +@00001135 00000000 +@00001136 00000000 +@00001137 00000000 +@00001138 00000000 +@00001139 00000000 +@0000113A 00000000 +@0000113B 00000000 +@0000113C 00000000 +@0000113D 00000000 +@0000113E 00000000 +@0000113F 00000000 +@00001140 00000000 +@00001141 00000000 +@00001142 00000000 +@00001143 00000000 +@00001144 00000000 +@00001145 00000000 +@00001146 00000000 +@00001147 00000000 +@00001148 00000000 +@00001149 00000000 +@0000114A 00000000 +@0000114B 00000000 +@0000114C 00000000 +@0000114D 00000000 +@0000114E 00000000 +@0000114F 00000000 +@00001150 00000000 +@00001151 00000000 +@00001152 00000000 +@00001153 00000000 +@00001154 00000000 +@00001155 00000000 +@00001156 00000000 +@00001157 00000000 +@00001158 00000000 +@00001159 00000000 +@0000115A 00000000 +@0000115B 00000000 +@0000115C 00000000 +@0000115D 00000000 +@0000115E 00000000 +@0000115F 00000000 +@00001160 00000000 +@00001161 00000000 +@00001162 00000000 +@00001163 00000000 +@00001164 00000000 +@00001165 00000000 +@00001166 00000000 +@00001167 00000000 +@00001168 00000000 +@00001169 00000000 +@0000116A 00000000 +@0000116B 00000000 +@0000116C 00000000 +@0000116D 00000000 +@0000116E 00000000 +@0000116F 00000000 +@00001170 00000000 +@00001171 00000000 +@00001172 00000000 +@00001173 00000000 +@00001174 00000000 +@00001175 00000000 +@00001176 00000000 +@00001177 00000000 +@00001178 00000000 +@00001179 00000000 +@0000117A 00000000 +@0000117B 00000000 +@0000117C 00000000 +@0000117D 00000000 +@0000117E 00000000 +@0000117F 00000000 +@00001180 00000000 +@00001181 00000000 +@00001182 00000000 +@00001183 00000000 +@00001184 00000000 +@00001185 00000000 +@00001186 00000000 +@00001187 00000000 +@00001188 00000000 +@00001189 00000000 +@0000118A 00000000 +@0000118B 00000000 +@0000118C 00000000 +@0000118D 00000000 +@0000118E 00000000 +@0000118F 00000000 +@00001190 00000000 +@00001191 00000000 +@00001192 00000000 +@00001193 00000000 +@00001194 00000000 +@00001195 00000000 +@00001196 00000000 +@00001197 00000000 +@00001198 00000000 +@00001199 00000000 +@0000119A 00000000 +@0000119B 00000000 +@0000119C 00000000 +@0000119D 00000000 +@0000119E 00000000 +@0000119F 00000000 +@000011A0 00000000 +@000011A1 00000000 +@000011A2 00000000 +@000011A3 00000000 +@000011A4 00000000 +@000011A5 00000000 +@000011A6 00000000 +@000011A7 00000000 +@000011A8 00000000 +@000011A9 00000000 +@000011AA 00000000 +@000011AB 00000000 +@000011AC 00000000 +@000011AD 00000000 +@000011AE 00000000 +@000011AF 00000000 +@000011B0 00000000 +@000011B1 00000000 +@000011B2 00000000 +@000011B3 00000000 +@000011B4 00000000 +@000011B5 00000000 +@000011B6 00000000 +@000011B7 00000000 +@000011B8 00000000 +@000011B9 00000000 +@000011BA 00000000 +@000011BB 00000000 +@000011BC 00000000 +@000011BD 00000000 +@000011BE 00000000 +@000011BF 00000000 +@000011C0 00000000 +@000011C1 00000000 +@000011C2 00000000 +@000011C3 00000000 +@000011C4 00000000 +@000011C5 00000000 +@000011C6 00000000 +@000011C7 00000000 +@000011C8 00000000 +@000011C9 00000000 +@000011CA 00000000 +@000011CB 00000000 +@000011CC 00000000 +@000011CD 00000000 +@000011CE 00000000 +@000011CF 00000000 +@000011D0 00000000 +@000011D1 00000000 +@000011D2 00000000 +@000011D3 00000000 +@000011D4 00000000 +@000011D5 00000000 +@000011D6 00000000 +@000011D7 00000000 +@000011D8 00000000 +@000011D9 00000000 +@000011DA 00000000 +@000011DB 00000000 +@000011DC 00000000 +@000011DD 00000000 +@000011DE 00000000 +@000011DF 00000000 +@000011E0 00000000 +@000011E1 00000000 +@000011E2 00000000 +@000011E3 00000000 +@000011E4 00000000 +@000011E5 00000000 +@000011E6 00000000 +@000011E7 00000000 +@000011E8 00000000 +@000011E9 00000000 +@000011EA 00000000 +@000011EB 00000000 +@000011EC 00000000 +@000011ED 00000000 +@000011EE 00000000 +@000011EF 00000000 +@000011F0 00000000 +@000011F1 00000000 +@000011F2 00000000 +@000011F3 00000000 +@000011F4 00000000 +@000011F5 00000000 +@000011F6 00000000 +@000011F7 00000000 +@000011F8 00000000 +@000011F9 00000000 +@000011FA 00000000 +@000011FB 00000000 +@000011FC 00000000 +@000011FD 00000000 +@000011FE 00000000 +@000011FF 00000000 +@00001200 00000000 +@00001201 00000000 +@00001202 00000000 +@00001203 00000000 +@00001204 00000000 +@00001205 00000000 +@00001206 00000000 +@00001207 00000000 +@00001208 00000000 +@00001209 00000000 +@0000120A 00000000 +@0000120B 00000000 +@0000120C 00000000 +@0000120D 00000000 +@0000120E 00000000 +@0000120F 00000000 +@00001210 00000000 +@00001211 00000000 +@00001212 00000000 +@00001213 00000000 +@00001214 00000000 +@00001215 00004E44 +@00001216 00004E44 +@00001217 00003794 +@00001218 00000000 +@00001219 00000000 +@0000121A 00000000 +@0000121B 00001CA8 +@0000121C 00000000 +@0000121D 00000000 +@0000121E 00000000 +@0000121F 00004854 +@00001220 00000000 +@00001221 00000000 +@00001222 00004854 +@00001223 00000000 +@00001224 00000000 +@00001225 00004854 +@00001226 00000000 +@00001227 00000000 +@00001228 00000000 +@00001229 00000000 +@0000122A 00000000 +@0000122B 00000000 +@0000122C 00000000 +@0000122D 00000000 +@0000122E 00000000 +@0000122F 00000000 +@00001230 00000000 +@00001231 00000000 +@00001232 00000000 +@00001233 00000000 +@00001234 00000000 +@00001235 00000000 +@00001236 00000000 +@00001237 00000000 +@00001238 00000000 +@00001239 00000000 +@0000123A 00000000 +@0000123B 00000000 +@0000123C 00000000 +@0000123D 00000000 +@0000123E 00000000 +@0000123F 00000000 +@00001240 00000000 +@00001241 00000000 +@00001242 00000000 +@00001243 00000000 +@00001244 00000000 +@00001245 00000000 +@00001246 00000000 +@00001247 00000000 +@00001248 00000000 +@00001249 00000000 +@0000124A 00000000 +@0000124B 00000000 +@0000124C 00000000 +@0000124D 00000000 +@0000124E 00000000 +@0000124F 00000000 +@00001250 00000000 +@00001251 00000000 +@00001252 00000000 +@00001253 00000000 +@00001254 00000000 +@00001255 00000000 +@00001256 00000000 +@00001257 00000000 +@00001258 00000000 +@00001259 00000000 +@0000125A 00000000 +@0000125B 00000000 +@0000125C 00000000 +@0000125D 00000000 +@0000125E 00000000 +@0000125F 00000000 +@00001260 00000000 +@00001261 00000000 +@00001262 00000000 +@00001263 00000000 +@00001264 00000000 +@00001265 00000000 +@00001266 00000000 +@00001267 00000000 +@00001268 00000000 +@00001269 00000000 +@0000126A 00000000 +@0000126B 00000000 +@0000126C 00000000 +@0000126D 00000000 +@0000126E 00000000 +@0000126F 00000000 +@00001270 00000000 +@00001271 00000000 +@00001272 00000000 +@00001273 00000000 +@00001274 00000000 +@00001275 00000000 +@00001276 00000000 +@00001277 00000000 +@00001278 00000000 +@00001279 00000000 +@0000127A 00000000 +@0000127B 00000000 +@0000127C 00000000 +@0000127D 00000000 +@0000127E 00000000 +@0000127F 00000000 +@00001280 00000000 +@00001281 00000000 +@00001282 00000000 +@00001283 00000000 +@00001284 00000000 +@00001285 00000000 +@00001286 00000000 +@00001287 00000000 +@00001288 00000000 +@00001289 00000000 +@0000128A 00000000 +@0000128B 00004A24 +@0000128C 00004A24 +@0000128D 00004A2C +@0000128E 00004A2C +@0000128F 00004A34 +@00001290 00004A34 +@00001291 00004A3C +@00001292 00004A3C +@00001293 00004A44 +@00001294 00004A44 +@00001295 00004A4C +@00001296 00004A4C +@00001297 00004A54 +@00001298 00004A54 +@00001299 00004A5C +@0000129A 00004A5C +@0000129B 00004A64 +@0000129C 00004A64 +@0000129D 00004A6C +@0000129E 00004A6C +@0000129F 00004A74 +@000012A0 00004A74 +@000012A1 00004A7C +@000012A2 00004A7C +@000012A3 00004A84 +@000012A4 00004A84 +@000012A5 00004A8C +@000012A6 00004A8C +@000012A7 00004A94 +@000012A8 00004A94 +@000012A9 00004A9C +@000012AA 00004A9C +@000012AB 00004AA4 +@000012AC 00004AA4 +@000012AD 00004AAC +@000012AE 00004AAC +@000012AF 00004AB4 +@000012B0 00004AB4 +@000012B1 00004ABC +@000012B2 00004ABC +@000012B3 00004AC4 +@000012B4 00004AC4 +@000012B5 00004ACC +@000012B6 00004ACC +@000012B7 00004AD4 +@000012B8 00004AD4 +@000012B9 00004ADC +@000012BA 00004ADC +@000012BB 00004AE4 +@000012BC 00004AE4 +@000012BD 00004AEC +@000012BE 00004AEC +@000012BF 00004AF4 +@000012C0 00004AF4 +@000012C1 00004AFC +@000012C2 00004AFC +@000012C3 00004B04 +@000012C4 00004B04 +@000012C5 00004B0C +@000012C6 00004B0C +@000012C7 00004B14 +@000012C8 00004B14 +@000012C9 00004B1C +@000012CA 00004B1C +@000012CB 00004B24 +@000012CC 00004B24 +@000012CD 00004B2C +@000012CE 00004B2C +@000012CF 00004B34 +@000012D0 00004B34 +@000012D1 00004B3C +@000012D2 00004B3C +@000012D3 00004B44 +@000012D4 00004B44 +@000012D5 00004B4C +@000012D6 00004B4C +@000012D7 00004B54 +@000012D8 00004B54 +@000012D9 00004B5C +@000012DA 00004B5C +@000012DB 00004B64 +@000012DC 00004B64 +@000012DD 00004B6C +@000012DE 00004B6C +@000012DF 00004B74 +@000012E0 00004B74 +@000012E1 00004B7C +@000012E2 00004B7C +@000012E3 00004B84 +@000012E4 00004B84 +@000012E5 00004B8C +@000012E6 00004B8C +@000012E7 00004B94 +@000012E8 00004B94 +@000012E9 00004B9C +@000012EA 00004B9C +@000012EB 00004BA4 +@000012EC 00004BA4 +@000012ED 00004BAC +@000012EE 00004BAC +@000012EF 00004BB4 +@000012F0 00004BB4 +@000012F1 00004BBC +@000012F2 00004BBC +@000012F3 00004BC4 +@000012F4 00004BC4 +@000012F5 00004BCC +@000012F6 00004BCC +@000012F7 00004BD4 +@000012F8 00004BD4 +@000012F9 00004BDC +@000012FA 00004BDC +@000012FB 00004BE4 +@000012FC 00004BE4 +@000012FD 00004BEC +@000012FE 00004BEC +@000012FF 00004BF4 +@00001300 00004BF4 +@00001301 00004BFC +@00001302 00004BFC +@00001303 00004C04 +@00001304 00004C04 +@00001305 00004C0C +@00001306 00004C0C +@00001307 00004C14 +@00001308 00004C14 +@00001309 00004C1C +@0000130A 00004C1C +@0000130B 00004C24 +@0000130C 00004C24 +@0000130D 00004C2C +@0000130E 00004C2C +@0000130F 00004C34 +@00001310 00004C34 +@00001311 00004C3C +@00001312 00004C3C +@00001313 00004C44 +@00001314 00004C44 +@00001315 00004C4C +@00001316 00004C4C +@00001317 00004C54 +@00001318 00004C54 +@00001319 00004C5C +@0000131A 00004C5C +@0000131B 00004C64 +@0000131C 00004C64 +@0000131D 00004C6C +@0000131E 00004C6C +@0000131F 00004C74 +@00001320 00004C74 +@00001321 00004C7C +@00001322 00004C7C +@00001323 00004C84 +@00001324 00004C84 +@00001325 00004C8C +@00001326 00004C8C +@00001327 00004C94 +@00001328 00004C94 +@00001329 00004C9C +@0000132A 00004C9C +@0000132B 00004CA4 +@0000132C 00004CA4 +@0000132D 00004CAC +@0000132E 00004CAC +@0000132F 00004CB4 +@00001330 00004CB4 +@00001331 00004CBC +@00001332 00004CBC +@00001333 00004CC4 +@00001334 00004CC4 +@00001335 00004CCC +@00001336 00004CCC +@00001337 00004CD4 +@00001338 00004CD4 +@00001339 00004CDC +@0000133A 00004CDC +@0000133B 00004CE4 +@0000133C 00004CE4 +@0000133D 00004CEC +@0000133E 00004CEC +@0000133F 00004CF4 +@00001340 00004CF4 +@00001341 00004CFC +@00001342 00004CFC +@00001343 00004D04 +@00001344 00004D04 +@00001345 00004D0C +@00001346 00004D0C +@00001347 00004D14 +@00001348 00004D14 +@00001349 00004D1C +@0000134A 00004D1C +@0000134B 00004D24 +@0000134C 00004D24 +@0000134D 00004D2C +@0000134E 00004D2C +@0000134F 00004D34 +@00001350 00004D34 +@00001351 00004D3C +@00001352 00004D3C +@00001353 00004D44 +@00001354 00004D44 +@00001355 00004D4C +@00001356 00004D4C +@00001357 00004D54 +@00001358 00004D54 +@00001359 00004D5C +@0000135A 00004D5C +@0000135B 00004D64 +@0000135C 00004D64 +@0000135D 00004D6C +@0000135E 00004D6C +@0000135F 00004D74 +@00001360 00004D74 +@00001361 00004D7C +@00001362 00004D7C +@00001363 00004D84 +@00001364 00004D84 +@00001365 00004D8C +@00001366 00004D8C +@00001367 00004D94 +@00001368 00004D94 +@00001369 00004D9C +@0000136A 00004D9C +@0000136B 00004DA4 +@0000136C 00004DA4 +@0000136D 00004DAC +@0000136E 00004DAC +@0000136F 00004DB4 +@00001370 00004DB4 +@00001371 00004DBC +@00001372 00004DBC +@00001373 00004DC4 +@00001374 00004DC4 +@00001375 00004DCC +@00001376 00004DCC +@00001377 00004DD4 +@00001378 00004DD4 +@00001379 00004DDC +@0000137A 00004DDC +@0000137B 00004DE4 +@0000137C 00004DE4 +@0000137D 00004DEC +@0000137E 00004DEC +@0000137F 00004DF4 +@00001380 00004DF4 +@00001381 00004DFC +@00001382 00004DFC +@00001383 00004E04 +@00001384 00004E04 +@00001385 00004E0C +@00001386 00004E0C +@00001387 00004E14 +@00001388 00004E14 +@00001389 00004E1C +@0000138A 00004E1C +@0000138B 000037A0 +@0000138C 00000000 +@0000138D 00000000 +@0000138E 00000000 +@0000138F 00004E3C +@00001390 00004E3C +@00001391 00004854 +@00001392 00004854 +@00001393 FFFFFFFF +@00001394 00000000 +@00001395 00000000 +@00001396 FFFFFFFF +@00001397 00000000 +@00001398 00000000 +@00001399 00004E64 +@0000139A 00004E64 +@0000139B 00000000 +@0000139C 00000000 +@0000139D FFFFFFFF +@0000139E 00000000 +@0000139F 00020000 +@000013A0 000050A0 Index: sdram_ctrl/tags =================================================================== --- sdram_ctrl/tags (nonexistent) +++ sdram_ctrl/tags (revision 8)
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_ba/width = (int((( ( $H/bank_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_ba/width = "$"; + } + warning = "{{ if($PORT_sdram_ba/width <= 0)('width of sdram_ba must be greater than zero' ) }}"; + } + EDIT sdram_addr_width + { + id = "sdram_addr_width"; + editable = "0"; + title = "sdram_addr[((row_width - 1)) - (0) + 1]:"; + tooltip = "sdram_addr[((row_width - 1)) - (0) + 1]
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_addr/width = (int((( ( $H/row_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_addr/width = "$"; + } + warning = "{{ if($PORT_sdram_addr/width <= 0)('width of sdram_addr must be greater than zero' ) }}"; + } + EDIT sdram_dq_width + { + id = "sdram_dq_width"; + editable = "0"; + title = "sdram_dq[((data_width - 1)) - (0) + 1]:"; + tooltip = "sdram_dq[((data_width - 1)) - (0) + 1]
direction: inout
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_dq/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_dq/width = "$"; + } + warning = "{{ if($PORT_sdram_dq/width <= 0)('width of sdram_dq must be greater than zero' ) }}"; + } + EDIT sdram_dqm_width + { + id = "sdram_dqm_width"; + editable = "0"; + title = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]:"; + tooltip = "sdram_dqm[(((data_width / 8) - 1)) - (0) + 1]
direction: output
signal type: export"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_sdram_dqm/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_sdram_dqm/width = "$"; + } + warning = "{{ if($PORT_sdram_dqm/width <= 0)('width of sdram_dqm must be greater than zero' ) }}"; + } + EDIT avs_nios_address_width + { + id = "avs_nios_address_width"; + editable = "0"; + title = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]:"; + tooltip = "avs_nios_address[((((bank_width + row_width) + column_width) - 1)) - (0) + 1]
direction: input
signal type: address"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_address/width = (int((((( ( $H/bank_width ) + ( $H/row_width ) ) + ( $H/column_width ) ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Address_Width = $PORT_avs_nios_address/width; }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_address/width = "$"; + } + warning = "{{ if($PORT_avs_nios_address/width <= 0)('width of avs_nios_address must be greater than zero' ) }}"; + } + EDIT avs_nios_byteenable_width + { + id = "avs_nios_byteenable_width"; + editable = "0"; + title = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]:"; + tooltip = "avs_nios_byteenable[(((data_width / 8) - 1)) - (0) + 1]
direction: input
signal type: byteenable"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_byteenable/width = (int(((( ( $H/data_width ) / 8) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_byteenable/width = "$"; + } + warning = "{{ if($PORT_avs_nios_byteenable/width <= 0)('width of avs_nios_byteenable must be greater than zero' ) }}"; + } + EDIT avs_nios_writedata_width + { + id = "avs_nios_writedata_width"; + editable = "0"; + title = "avs_nios_writedata[((data_width - 1)) - (0) + 1]:"; + tooltip = "avs_nios_writedata[((data_width - 1)) - (0) + 1]
direction: input
signal type: writedata"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_writedata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_writedata/width - 1) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_writedata/width = "$"; + } + warning = "{{ if($PORT_avs_nios_writedata/width <= 0)('width of avs_nios_writedata must be greater than zero' ) }}"; + } + EDIT avs_nios_readdata_width + { + id = "avs_nios_readdata_width"; + editable = "0"; + title = "avs_nios_readdata[((data_width - 1)) - (0) + 1]:"; + tooltip = "avs_nios_readdata[((data_width - 1)) - (0) + 1]
direction: output
signal type: readdata"; + # This expression should emulate the HDL, and assign the port width + dummy = "{{ $PORT_avs_nios_readdata/width = (int((( ( $H/data_width ) - 1)) - (0) + 1-1) - int(0) + 1); }}"; + dummy_dummy = "{{ $SBI_nios/Data_Width = 2 ^ int(log2($PORT_avs_nios_readdata/width - 1) + 1); }}"; + DATA + { + # The EDIT field is noneditable, so this just reads the current width. + $PORT_avs_nios_readdata/width = "$"; + } + warning = "{{ if($PORT_avs_nios_readdata/width <= 0)('width of avs_nios_readdata must be greater than zero' ) }}"; + } + } + } + } + } + } + SOPC_Builder_Version = "5.10"; + COMPONENT_BUILDER + { + HDL_PARAMETERS + { + # generated by CBDocument.getParameterContainer + # used only by Component Editor + HDL_PARAMETER data_width + { + parameter_name = "data_width"; + type = "integer"; + default_value = "32"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER bank_width + { + parameter_name = "bank_width"; + type = "integer"; + default_value = "4"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER row_width + { + parameter_name = "row_width"; + type = "integer"; + default_value = "12"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER column_width + { + parameter_name = "column_width"; + type = "integer"; + default_value = "8"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER clk_mhz + { + parameter_name = "clk_mhz"; + type = "integer"; + default_value = "120"; + editable = "1"; + tooltip = ""; + } + } + SW_FILES + { + } + built_on = "2006.09.25.10:24:12"; + CACHED_HDL_INFO + { + # cached hdl info, emitted by CBFrameRealtime.getDocumentCachedHDLInfoSection + # used only by Component Builder + FILE sdram_ctrl.vhd + { + file_mod = "Mon Sep 18 18:08:50 EEST 2006"; + quartus_map_start = "Mon Sep 25 10:22:36 EEST 2006"; + quartus_map_finished = "Mon Sep 25 10:22:58 EEST 2006"; + #found 1 valid modules + WRAPPER sdram_ctrl + { + CLASS sdram_ctrl + { + CB_GENERATOR + { + HDL_FILES + { + FILE + { + use_in_simulation = "1"; + use_in_synthesis = "1"; + filepath = "H:/Work/Home_stuff/opencores/sdram_ctrl/src/sdram_ctrl.vhd"; + } + } + top_module_name = "sdram_ctrl"; + emit_system_h = "0"; + LIBRARIES + { + library = "ieee.std_logic_1164.all"; + library = "ieee.numeric_std.all"; + library = "altera_mf.altera_mf_components.all"; + library = "std.standard.all"; + } + } + MODULE_DEFAULTS global_signals + { + class = "sdram_ctrl"; + class_version = "1.0"; + SYSTEM_BUILDER_INFO + { + Instantiate_In_System_Module = "1"; + } + SLAVE nios + { + SYSTEM_BUILDER_INFO + { + Bus_Type = "avalon"; + } + PORT_WIRING + { + PORT avs_nios_chipselect + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "chipselect"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_address + { + width = "-1"; + width_expression = "((((bank_width + row_width) + column_width) - 1)) - (0) + 1"; + direction = "input"; + type = "address"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_byteenable + { + width = "-1"; + width_expression = "(((data_width / 8) - 1)) - (0) + 1"; + direction = "input"; + type = "byteenable"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_writedata + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "input"; + type = "writedata"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_write + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "write"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_read + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "read"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_waitrequest + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "waitrequest"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_readdata + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "output"; + type = "readdata"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT avs_nios_readdatavalid + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "readdatavalid"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + SLAVE avalon_slave_0 + { + SYSTEM_BUILDER_INFO + { + Bus_Type = "avalon"; + } + PORT_WIRING + { + PORT sdram_cke + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_ba + { + width = "-1"; + width_expression = "((bank_width - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_addr + { + width = "-1"; + width_expression = "((row_width - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_cs_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_ras_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_cas_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_we_n + { + width = "1"; + width_expression = ""; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_dq + { + width = "-1"; + width_expression = "((data_width - 1)) - (0) + 1"; + direction = "inout"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT sdram_dqm + { + width = "-1"; + width_expression = "(((data_width / 8) - 1)) - (0) + 1"; + direction = "output"; + type = "export"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + PORT_WIRING + { + PORT clk + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "clk"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + PORT reset + { + width = "1"; + width_expression = ""; + direction = "input"; + type = "reset"; + is_shared = "0"; + vhdl_record_name = ""; + vhdl_record_type = ""; + } + } + } + USER_INTERFACE + { + USER_LABELS + { + name = "sdram_ctrl"; + technology = "imported components"; + } + } + SOPC_Builder_Version = "0.0"; + COMPONENT_BUILDER + { + HDL_PARAMETERS + { + # generated by CBDocument.getParameterContainer + # used only by Component Editor + HDL_PARAMETER data_width + { + parameter_name = "data_width"; + type = "integer"; + default_value = "32"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER bank_width + { + parameter_name = "bank_width"; + type = "integer"; + default_value = "4"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER row_width + { + parameter_name = "row_width"; + type = "integer"; + default_value = "12"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER column_width + { + parameter_name = "column_width"; + type = "integer"; + default_value = "8"; + editable = "1"; + tooltip = ""; + } + HDL_PARAMETER clk_mhz + { + parameter_name = "clk_mhz"; + type = "integer"; + default_value = "120"; + editable = "1"; + tooltip = ""; + } + } + } + } + } + } + } + } + ASSOCIATED_FILES + { + Add_Program = "the_wizard_ui"; + Edit_Program = "the_wizard_ui"; + Generator_Program = "cb_generator.pl"; + } +} Index: sdram_ctrl/tags/V10/test_bench/sdram_ctrl_tb.vhd =================================================================== --- sdram_ctrl/tags/V10/test_bench/sdram_ctrl_tb.vhd (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/sdram_ctrl_tb.vhd (revision 8) @@ -0,0 +1,169 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +entity sdram_ctrl_tb is +end sdram_ctrl_tb; + +architecture structure of sdram_ctrl_tb is + component pll + port ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + e0 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ) ; + end component ; + component sdram_ctrl is + port( + signal clk : IN STD_LOGIC; + signal reset : IN STD_LOGIC; + + signal avs_nios_chipselect : IN STD_LOGIC; + signal avs_nios_address : IN STD_LOGIC_VECTOR (21 DOWNTO 0); + signal avs_nios_byteenable : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + signal avs_nios_writedata : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + signal avs_nios_write : IN STD_LOGIC; + signal avs_nios_read : IN STD_LOGIC; + signal avs_nios_readdata : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + signal avs_nios_readdatavalid : OUT STD_LOGIC; + signal avs_nios_waitrequest : OUT STD_LOGIC; + + signal sdram_addr : OUT STD_LOGIC_VECTOR (11 DOWNTO 0); + signal sdram_ba : OUT STD_LOGIC_VECTOR (1 DOWNTO 0); + signal sdram_cas_n : OUT STD_LOGIC; + signal sdram_cke : OUT STD_LOGIC; + signal sdram_cs_n : OUT STD_LOGIC; + signal sdram_dq : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0); + signal sdram_dqm : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); + signal sdram_ras_n : OUT STD_LOGIC; + signal sdram_we_n : OUT STD_LOGIC + ); + end component; + + component mt48lc4m32b2 IS + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0) := (OTHERS => 'Z'); + Addr : IN STD_LOGIC_VECTOR (11 DOWNTO 0) := (OTHERS => '0'); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + Clk : IN STD_LOGIC := '0'; + Cke : IN STD_LOGIC := '1'; + Cs_n : IN STD_LOGIC := '1'; + Ras_n : IN STD_LOGIC := '1'; + Cas_n : IN STD_LOGIC := '1'; + We_n : IN STD_LOGIC := '1'; + Dqm : IN STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000" + ); + END component; + + component cpu_simulator IS + PORT(clk, reset: IN std_logic; + address : OUT std_logic_vector(21 downto 0):=(others=>'0'); + writedata : out std_logic_vector(31 downto 0):=(others=>'0'); + byteenable : out std_logic_vector(3 downto 0):=(others=>'0'); + write : out std_logic:='0'; + read : out std_logic:='0'; + readdata : in std_logic_vector(31 downto 0); + waitrequest : in std_logic; + readdatavalid : in std_logic + ); + END component; + + signal reset, clk_ok: std_logic; + signal run_nios_n : std_logic:='1'; + signal clk,i_clk: std_logic:='0'; + + signal SDRAM_CLK : std_logic; + signal SDRAM_CKE : std_logic; + signal SDRAM_NCS : std_logic; + signal SDRAM_NRAS : std_logic; + signal SDRAM_NCAS : std_logic; + signal SDRAM_NWE : std_logic; + signal SDRAM_ADDRESS : std_logic_vector(11 downto 0); + signal SDRAM_BANK : std_logic_vector(1 downto 0); + signal SDRAM_DQM : std_logic_vector(3 downto 0); + signal SDRAM_DATA : std_logic_vector(31 downto 0); + + signal address : std_logic_vector(21 downto 0); + signal writedata : std_logic_vector(31 downto 0):=(others=>'0'); + signal byteenable : std_logic_vector(3 downto 0):=(others=>'0'); + signal write : std_logic; + signal read : std_logic; + signal chipselect : std_logic:='1'; + signal readdata : std_logic_vector(31 downto 0); + signal waitrequest : std_logic; + signal readdatavalid : std_logic; + +begin + + reset<= not clk_ok; + run_nios_n<= reset after 140 us; + + UUT: sdram_ctrl + port map( + clk => i_clk, + reset => reset, + + avs_nios_chipselect => chipselect, + avs_nios_address => address, + avs_nios_byteenable => byteenable, + avs_nios_writedata => writedata, + avs_nios_write => write, + avs_nios_read => read, + avs_nios_readdata => readdata, + avs_nios_readdatavalid => readdatavalid, + avs_nios_waitrequest => waitrequest, + + sdram_addr => SDRAM_ADDRESS, + sdram_ba => SDRAM_BANK, + sdram_cas_n => SDRAM_NCAS, + sdram_cke => SDRAM_CKE, + sdram_cs_n => SDRAM_NCS, + sdram_dq => SDRAM_DATA, + sdram_dqm => SDRAM_DQM, + sdram_ras_n => SDRAM_NRAS, + sdram_we_n => SDRAM_NWE + ); + + sdram:mt48lc4m32b2 + PORT MAP( + Dq => SDRAM_DATA, + Addr => SDRAM_ADDRESS, + Ba => SDRAM_BANK, + Clk => SDRAM_CLK, + Cke => SDRAM_CKE, + Cs_n => SDRAM_NCS, + Ras_n => SDRAM_NRAS, + Cas_n => SDRAM_NCAS, + We_n => SDRAM_NWE, + Dqm => SDRAM_DQM + ); + + cpu: cpu_simulator + PORT MAP( + clk => i_clk, + reset => run_nios_n, + address => address, + writedata => writedata, + byteenable => byteenable, + write => write, + read => read, + readdata => readdata, + waitrequest => waitrequest, + readdatavalid => readdatavalid + ); + + U1 : pll + port map( + inclk0 => clk, + c0 => i_clk, + e0 => SDRAM_CLK, + locked =>clk_ok + ); + + clock_generator:process + begin + wait for 21 ns; + clk<= clk xor '1'; + end process; +end structure; Index: sdram_ctrl/tags/V10/test_bench/mt48lc4m32b2.vhd =================================================================== --- sdram_ctrl/tags/V10/test_bench/mt48lc4m32b2.vhd (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/mt48lc4m32b2.vhd (revision 8) @@ -0,0 +1,1134 @@ +----------------------------------------------------------------------------------------- +-- +-- File Name: MT48LC4M32B2.VHD +-- Version: 2.0 +-- Date: January 24th, 2002 +-- Model: Behavioral +-- Simulator: Model Technology +-- +-- Dependencies: None +-- +-- Email: modelsupport@micron.com +-- Company: Micron Technology, Inc. +-- Part Number: MT48LC4M32A2 (1Mb x 32 x 4 Banks) +-- +-- Description: Micron 128Mb SDRAM +-- +-- Limitation: - Doesn't check for 4096-cycle refresh +-- +-- Note: - Set simulator resolution to "ps" accuracy +-- +-- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY +-- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY +-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR +-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT. +-- +-- Copyright (c) 1998 Micron Semiconductor Products, Inc. +-- All rights researved +-- +-- Rev Author Date Changes +-- --- -------------------------- ------------------------------------- +-- 2.0 SH 01/24/2002 - Second Release +-- Micron Technology Inc. +-- +-------------------------------------------------------------------------- + +LIBRARY IEEE; + USE IEEE.STD_LOGIC_1164.ALL; + USE IEEE.STD_LOGIC_UNSIGNED.ALL; + USE IEEE.STD_LOGIC_ARITH.ALL; + +ENTITY mt48lc4m32b2 IS + GENERIC ( + -- Timing Parameters for -75 (PC133) and CL = 3 + tAC : TIME := 5.4 ns; + tHZ : TIME := 5.4 ns; + tOH : TIME := 2.7 ns; + tMRD : INTEGER := 2; -- 2 Clk Cycles + tRAS : TIME := 44.0 ns; + tRC : TIME := 66.0 ns; + tRCD : TIME := 20.0 ns; + tRFC : TIME := 66.0 ns; + tRP : TIME := 20.0 ns; + tRRD : TIME := 15.0 ns; + tWRa : TIME := 7.5 ns; -- Auto precharge + tWRm : TIME := 15.0 ns; -- Manual Precharge + + tAH : TIME := 0.8 ns; + tAS : TIME := 1.5 ns; + tCH : TIME := 2.5 ns; + tCL : TIME := 2.5 ns; + tCK : TIME := 7.5 ns; + tDH : TIME := 0.8 ns; + tDS : TIME := 1.5 ns; + tCKH : TIME := 0.8 ns; + tCKS : TIME := 1.5 ns; + tCMH : TIME := 0.8 ns; + tCMS : TIME := 1.5 ns; + + addr_bits : INTEGER := 12; + data_bits : INTEGER := 32; + col_bits : INTEGER := 8 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + Clk : IN STD_LOGIC := '0'; + Cke : IN STD_LOGIC := '1'; + Cs_n : IN STD_LOGIC := '1'; + Ras_n : IN STD_LOGIC := '1'; + Cas_n : IN STD_LOGIC := '1'; + We_n : IN STD_LOGIC := '1'; + Dqm : IN STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000" + ); +END mt48lc4m32b2; + +ARCHITECTURE behave OF mt48lc4m32b2 IS + TYPE State IS (BST, NOP, PRECH, READ, WRITE); + TYPE Array4xI IS ARRAY (3 DOWNTO 0) OF INTEGER; + TYPE Array4xT IS ARRAY (3 DOWNTO 0) OF TIME; + TYPE Array4xB IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; + TYPE Array4x2BV IS ARRAY (3 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array4xCBV IS ARRAY (4 DOWNTO 0) OF STD_LOGIC_VECTOR (Col_bits - 1 DOWNTO 0); + TYPE Array_state IS ARRAY (4 DOWNTO 0) OF State; + SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + SIGNAL Active_enable, Aref_enable, Burst_term : STD_LOGIC := '0'; + SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0'; + SIGNAL Burst_length_1, Burst_length_2, Burst_length_4, Burst_length_8 : STD_LOGIC := '0'; + SIGNAL Cas_latency_1, Cas_latency_2, Cas_latency_3 : STD_LOGIC := '0'; + SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0'; + SIGNAL Write_burst_mode : STD_LOGIC := '0'; + SIGNAL Sys_clk, CkeZ : STD_LOGIC := '0'; + +BEGIN + -- Strip the strength + Cs_in <= To_X01 (Cs_n); + Ras_in <= To_X01 (Ras_n); + Cas_in <= To_X01 (Cas_n); + We_in <= To_X01 (We_n); + + -- Commands Decode + Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in; + Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in; + Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in); + Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in); + Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in); + Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in; + Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in); + + -- Burst Length Decode + Burst_length_1 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND NOT(Mode_reg(0)); + Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0); + Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0)); + Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + + -- CAS Latency Decode + Cas_latency_1 <= NOT(Mode_reg(6)) AND NOT(Mode_reg(5)) AND Mode_reg(4); + Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4); + + -- Write Burst Mode + Write_burst_mode <= Mode_reg(9); + + -- System Clock + int_clk : PROCESS (Clk) + BEGIN + IF Clk'LAST_VALUE = '0' AND Clk = '1' THEN + CkeZ <= Cke; + END IF; + Sys_clk <= CkeZ AND Clk; + END PROCESS; + + state_register : PROCESS + TYPE ram_type IS ARRAY (2**col_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); + TYPE ram_pntr IS ACCESS ram_type; + TYPE ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF ram_pntr; + VARIABLE Bank0 : ram_stor; + VARIABLE Bank1 : ram_stor; + VARIABLE Bank2 : ram_stor; + VARIABLE Bank3 : ram_stor; + VARIABLE Row_index, Col_index : INTEGER := 0; + VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => '0'); + + VARIABLE Col_addr : Array4xCBV; + VARIABLE Bank_addr : Array4x2BV; + VARIABLE Dqm_reg0, Dqm_reg1 : STD_LOGIC_VECTOR (3 DOWNTO 0) := "0000"; + + VARIABLE Bank, Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE B0_row_addr, B1_row_addr, B2_row_addr, B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Col_brst : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Row : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Col : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Burst_counter : INTEGER := 0; + + VARIABLE Command : Array_state; + VARIABLE Bank_precharge : Array4x2BV; + VARIABLE A10_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE Auto_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE Read_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE Write_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE RW_interrupt_read : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE RW_interrupt_write : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE RW_interrupt_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE RW_interrupt_counter : Array4xI := (0 & 0 & 0 & 0); + VARIABLE Count_precharge : Array4xI := (0 & 0 & 0 & 0); + + VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0'; + VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0'; + VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1'; + + -- Timing Check + VARIABLE MRD_chk : INTEGER := 0; + VARIABLE RFC_chk : TIME := 0 ns; + VARIABLE RRD_chk : TIME := 0 ns; + VARIABLE WR_chkm : Array4xT := (0 ns & 0 ns & 0 ns & 0 ns); + VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns; + VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns; + VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns; + VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns; + + -- Initialize empty rows + PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR (1 DOWNTO 0); Row_index : INTEGER) IS + VARIABLE i, j : INTEGER := 0; + BEGIN + IF Bank = "00" THEN + IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty + Bank0 (Row_index) := NEW ram_type; -- Open new row for access + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank0 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "01" THEN + IF Bank1 (Row_index) = NULL THEN + Bank1 (Row_index) := NEW ram_type; + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank1 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "10" THEN + IF Bank2 (Row_index) = NULL THEN + Bank2 (Row_index) := NEW ram_type; + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank2 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "11" THEN + IF Bank3 (Row_index) = NULL THEN + Bank3 (Row_index) := NEW ram_type; + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank3 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + END IF; + END; + + -- Burst Counter + PROCEDURE Burst_decode IS + VARIABLE Col_int : INTEGER := 0; + VARIABLE Col_vec, Col_temp : STD_LOGIC_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0'); + BEGIN + -- Advance Burst Counter + Burst_counter := Burst_counter + 1; + + -- Burst Type + IF Mode_reg (3) = '0' THEN + Col_int := conv_integer(Col) + 1; + Col_temp := CONV_STD_LOGIC_VECTOR(Col_int, col_bits); + ELSIF Mode_reg (3) = '1' THEN + Col_vec := CONV_STD_LOGIC_VECTOR(Burst_counter, col_bits); + Col_temp (2) := Col_vec (2) XOR Col_brst (2); + Col_temp (1) := Col_vec (1) XOR Col_brst (1); + Col_temp (0) := Col_vec (0) XOR Col_brst (0); + END IF; + + -- Burst Length + IF Burst_length_2 = '1' THEN + Col (0) := Col_temp (0); + ELSIF Burst_length_4 = '1' THEN + Col (1 DOWNTO 0) := Col_temp (1 DOWNTO 0); + ELSIF Burst_length_8 = '1' THEN + Col (2 DOWNTO 0) := Col_temp (2 DOWNTO 0); + ELSE + Col := Col_temp; + END IF; + + -- Burst Read Single Write + IF Write_burst_mode = '1' AND Data_in_enable = '1' THEN + Data_in_enable := '0'; + END IF; + + -- Data counter + IF Burst_length_1 = '1' THEN + IF Burst_counter >= 1 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_2 = '1' THEN + IF Burst_counter >= 2 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_4 = '1' THEN + IF Burst_counter >= 4 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_8 = '1' THEN + IF Burst_counter >= 8 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + END IF; + END; + + BEGIN + WAIT ON Sys_clk; + IF Sys_clk'event AND Sys_clk = '1' THEN + -- Internal Pipeline + Command(0) := Command(1); + Command(1) := Command(2); + Command(2) := Command(3); + Command(3) := NOP; + + Col_addr(0) := Col_addr(1); + Col_addr(1) := Col_addr(2); + Col_addr(2) := Col_addr(3); + Col_addr(3) := (OTHERS => '0'); + + Bank_addr(0) := Bank_addr(1); + Bank_addr(1) := Bank_addr(2); + Bank_addr(2) := Bank_addr(3); + Bank_addr(3) := "00"; + + Bank_precharge(0) := Bank_precharge(1); + Bank_precharge(1) := Bank_precharge(2); + Bank_precharge(2) := Bank_precharge(3); + Bank_precharge(3) := "00"; + + A10_precharge(0) := A10_precharge(1); + A10_precharge(1) := A10_precharge(2); + A10_precharge(2) := A10_precharge(3); + A10_precharge(3) := '0'; + + -- Dqm pipeline for Read + Dqm_reg0 := Dqm_reg1; + Dqm_reg1 := Dqm; + + -- Read or Write with Auto Precharge Counter + IF Auto_precharge (0) = '1' THEN + Count_precharge (0) := Count_precharge (0) + 1; + END IF; + IF Auto_precharge (1) = '1' THEN + Count_precharge (1) := Count_precharge (1) + 1; + END IF; + IF Auto_precharge (2) = '1' THEN + Count_precharge (2) := Count_precharge (2) + 1; + END IF; + IF Auto_precharge (3) = '1' THEN + Count_precharge (3) := Count_precharge (3) + 1; + END IF; + + -- Read or Write Interrupt Counter + IF RW_interrupt_write (0) = '1' THEN + RW_interrupt_counter (0) := RW_interrupt_counter (0) + 1; + END IF; + IF RW_interrupt_write (1) = '1' THEN + RW_interrupt_counter (1) := RW_interrupt_counter (1) + 1; + END IF; + IF RW_interrupt_write (2) = '1' THEN + RW_interrupt_counter (2) := RW_interrupt_counter (2) + 1; + END IF; + IF RW_interrupt_write (3) = '1' THEN + RW_interrupt_counter (3) := RW_interrupt_counter (3) + 1; + END IF; + + -- tMRD Counter + MRD_chk := MRD_chk + 1; + + -- Auto Refresh + IF Aref_enable = '1' THEN + -- Auto Refresh to Auto Refresh + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT ((NOW - RP_chk0 >= tRP) OR (NOW - RP_chk1 >= tRP) OR + (NOW - RP_chk2 >= tRP) OR (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT (Pc_b0 ='1' AND Pc_b1 = '1' AND Pc_b2 ='1' AND Pc_b3 = '1') + REPORT "All banks must be Precharge before Auto Refresh" + SEVERITY WARNING; + + -- Load Mode Register to Auto Refresh + ASSERT (MRD_chk >= tMRD) + REPORT "tMRD violation during Auto Refresh" + SEVERITY WARNING; + + -- Record current tRFC time + RFC_chk := NOW; + END IF; + + -- Load Mode Register + IF Mode_reg_enable = '1' THEN + -- Register Mode + Mode_reg <= Addr; + + -- Precharge to Load Mode Register + ASSERT (Pc_b0 ='1' AND Pc_b1 = '1' AND Pc_b2 ='1' AND Pc_b3 = '1') + REPORT "All banks must be Precharge before Load Mode Register" + SEVERITY WARNING; + + -- Precharge to Load Mode Register + ASSERT ((NOW - RP_chk0 >= tRP) OR (NOW - RP_chk1 >= tRP) OR + (NOW - RP_chk2 >= tRP) OR (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Load Mode Register" + SEVERITY WARNING; + + -- Auto Refresh to Load Mode Register + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Load Mode Register" + SEVERITY WARNING; + + -- Load Mode Register to Load Mode Register + ASSERT (MRD_chk >= tMRD) + REPORT "tMRD violation during Load Mode Register" + SEVERITY WARNING; + + -- Record current tMRD time + MRD_chk := 0; + END IF; + + -- Active Block (Latch Bank and Row Address) + IF Active_enable = '1' THEN + -- Activate an OPEN bank can corrupt data + ASSERT ((Ba = "00" AND Act_b0 = '0') OR (Ba = "01" AND Act_b1 = '0') OR + (Ba = "10" AND Act_b2 = '0') OR (Ba = "11" AND Act_b3 = '0')) + REPORT "Bank is already activated - data can be corrupted" + SEVERITY WARNING; + + -- Activate Bank 0 + IF Ba = "00" AND Pc_b0 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk0 >= tRC) + REPORT "tRC violation during Activate Bank 0" + SEVERITY WARNING; + + -- Precharge to Activate + ASSERT (NOW - RP_chk0 >= tRP) + REPORT "tRP violation during Activate Bank 0" + SEVERITY WARNING; + + -- Record variables for checking violation + Act_b0 := '1'; + Pc_b0 := '0'; + B0_row_addr := Addr; + RAS_chk0 := NOW; + RC_chk0 := NOW; + RCD_chk0 := NOW; + END IF; + + -- Activate Bank 1 + IF Ba = "01" AND Pc_b1 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk1 >= tRC) + REPORT "tRC violation during Activate Bank 1" + SEVERITY WARNING; + + -- Precharge to Activate + ASSERT (NOW - RP_chk1 >= tRP) + REPORT "tRP violation during Activate Bank 1" + SEVERITY WARNING; + + -- Record variables for checking violation + Act_b1 := '1'; + Pc_b1 := '0'; + B1_row_addr := Addr; + RAS_chk1 := NOW; + RC_chk1 := NOW; + RCD_chk1 := NOW; + END IF; + + -- Activate Bank 2 + IF Ba = "10" AND Pc_b2 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk2 >= tRC) + REPORT "tRC violation during Activate Bank 2" + SEVERITY WARNING; + + -- Precharge to Activate + ASSERT (NOW - RP_chk2 >= tRP) + REPORT "tRP violation during Activate Bank 2" + SEVERITY WARNING; + + -- Record variables for checking violation + Act_b2 := '1'; + Pc_b2 := '0'; + B2_row_addr := Addr; + RAS_chk2 := NOW; + RC_chk2 := NOW; + RCD_chk2 := NOW; + END IF; + + -- Activate Bank 3 + IF Ba = "11" AND Pc_b3 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk3 >= tRC) + REPORT "tRC violation during Activate Bank 3" + SEVERITY WARNING; + + -- Precharge to Activate + ASSERT (NOW - RP_chk3 >= tRP) + REPORT "tRP violation during Activate Bank 3" + SEVERITY WARNING; + + -- Record variables for checking violation + Act_b3 := '1'; + Pc_b3 := '0'; + B3_row_addr := Addr; + RAS_chk3 := NOW; + RC_chk3 := NOW; + RCD_chk3 := NOW; + END IF; + + -- Activate to Activate (different bank) + IF (Prev_bank /= Ba) THEN + ASSERT (NOW - RRD_chk >= tRRD) + REPORT "tRRD violation during Activate" + SEVERITY WARNING; + END IF; + + -- Auto Refresh to Activate + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Activate" + SEVERITY WARNING; + + -- Load Mode Register to Activate + ASSERT (MRD_chk >= tMRD) + REPORT "tMRD violation during Activate" + SEVERITY WARNING; + + -- Record variable for checking violation + RRD_chk := NOW; + Prev_Bank := Ba; + END IF; + + -- Precharge Block + IF Prech_enable = '1' THEN + -- Load Mode Register to Precharge + ASSERT (MRD_chk >= tMRD) + REPORT "tMRD violation during Precharge" + SEVERITY WARNING; + + -- Precharge Bank 0 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN + Act_b0 := '0'; + Pc_b0 := '1'; + RP_chk0 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk0 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chkm(0) >= tWRm) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 1 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN + Act_b1 := '0'; + Pc_b1 := '1'; + RP_chk1 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk1 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chkm(1) >= tWRm) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 2 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN + Act_b2 := '0'; + Pc_b2 := '1'; + RP_chk2 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk2 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chkm(2) >= tWRm) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 3 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN + Act_b3 := '0'; + Pc_b3 := '1'; + RP_chk3 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk3 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chkm(3) >= tWRm) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Terminate a Write Immediately (if same bank or all banks) + IF (Data_in_enable = '1' AND (Bank = Ba OR Addr(10) = '1')) THEN + Data_in_enable := '0'; + END IF; + + -- Precharge Command Pipeline for READ + IF CAS_latency_3 = '1' THEN + Command(2) := PRECH; + Bank_precharge(2) := Ba; + A10_precharge(2) := Addr(10); + ELSIF CAS_latency_2 = '1' THEN + Command(1) := PRECH; + Bank_precharge(1) := Ba; + A10_precharge(1) := Addr(10); + END IF; + END IF; + + -- Burst Terminate + IF Burst_term = '1' THEN + -- Terminate a Write immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + END IF; + + -- Terminate a Read depend on CAS Latency + IF CAS_latency_3 = '1' THEN + Command(2) := BST; + ELSIF CAS_latency_2 = '1' THEN + Command(1) := BST; + END IF; + END IF; + + -- Read Command + IF Read_enable = '1' THEN + -- Activate to Read + ASSERT ((Ba="00" AND Act_b0='1') OR (Ba="01" AND Act_b1='1') OR + (Ba="10" AND Act_b2='1') OR (Ba="11" AND Act_b3='1')) + REPORT "Bank is not Activated for Read" + SEVERITY WARNING; + + -- Activate to Read + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Read" + SEVERITY WARNING; + + -- CAS Latency Pipeline + IF Cas_latency_3 = '1' THEN + Command(2) := READ; + Col_addr (2) := Addr(col_bits - 1 DOWNTO 0); + Bank_addr (2) := Ba; + ELSIF Cas_latency_2 = '1' THEN + Command(1) := READ; + Col_addr (1) := Addr(col_bits - 1 DOWNTO 0); + Bank_addr (1) := Ba; + ELSIF Cas_latency_1 = '1' THEN + Command(0) := READ; + Col_addr (0) := Addr(col_bits - 1 DOWNTO 0); + Bank_addr (0) := Ba; + END IF; + + -- Read Terminate Write Immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + -- Interrupt a Write with Auto Precharge + IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Write_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN + RW_interrupt_write(CONV_INTEGER(RW_Interrupt_Bank)) := '1'; + RW_interrupt_counter (CONV_INTEGER(RW_Interrupt_Bank)) := 0; + ASSERT FALSE REPORT "Read interrupt a Write with Auto Precharge." SEVERITY NOTE; + END IF; + END IF; + + -- Read Terminate Read after CL - 1 + IF (Data_out_enable = '1' AND ((Cas_latency_2 = '1' AND ((Burst_length_2 = '1' AND Burst_counter < 1) OR + (Burst_length_4 = '1' AND Burst_counter < 3) OR + (Burst_length_8 = '1' AND Burst_counter < 7))) OR + (Cas_latency_3 = '1' AND ((Burst_length_4 = '1' AND Burst_counter < 2) OR + (Burst_length_8 = '1' AND Burst_counter < 6))))) THEN + -- Interrupt a Read with Auto Precharge + IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Read_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN + RW_interrupt_read(CONV_INTEGER(RW_Interrupt_Bank)) := '1'; + ASSERT FALSE REPORT "Read interrupt a Read with Auto Precharge." SEVERITY NOTE; + END IF; + END IF; + + -- Auto Precharge + IF Addr(10) = '1' THEN + Auto_precharge (CONV_INTEGER(Ba)) := '1'; + Count_precharge (CONV_INTEGER(Ba)) := 0; + RW_Interrupt_Bank := Ba; + Read_precharge (CONV_INTEGER(Ba)) := '1'; + END IF; + END IF; + + -- Write Command + IF Write_enable = '1' THEN + -- Activate to Write + ASSERT ((Ba="00" AND Act_b0='1') OR (Ba="01" AND Act_b1='1') OR + (Ba="10" AND Act_b2='1') OR (Ba="11" AND Act_b3='1')) + REPORT "Bank is not Activated for Write" + SEVERITY WARNING; + + -- Activate to Write + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Write" + SEVERITY WARNING; + + -- Latch write command, bank, column + Command(0) := WRITE; + Col_addr (0) := Addr(col_bits - 1 DOWNTO 0); + Bank_addr (0) := Ba; + + -- Write Terminate Write Immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + + -- Interrupt a Write with Auto Precharge + IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Write_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN + RW_interrupt_write(CONV_INTEGER(RW_Interrupt_Bank)) := '1'; + RW_interrupt_counter (CONV_INTEGER(RW_Interrupt_Bank)) := 0; + ASSERT FALSE REPORT "Write interrupt a Write with Auto Precharge." SEVERITY NOTE; + END IF; + END IF; + + -- Write Terminate Read Immediately + IF Data_out_enable = '1' THEN + Data_out_enable := '0'; + + -- Interrupt a Read with Auto Precharge + IF Auto_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' AND Read_precharge(CONV_INTEGER(RW_Interrupt_Bank)) = '1' THEN + RW_interrupt_read(CONV_INTEGER(RW_Interrupt_Bank)) := '1'; + ASSERT FALSE REPORT "Write interrupt a Read with Auto Precharge." SEVERITY NOTE; + END IF; + END IF; + + -- Auto Precharge + IF Addr(10) = '1' THEN + Auto_precharge (CONV_INTEGER(Ba)) := '1'; + Count_precharge (CONV_INTEGER(Ba)) := 0; + RW_Interrupt_Bank := Ba; + Write_precharge (CONV_INTEGER(Ba)) := '1'; + END IF; + END IF; + + -- Write with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet tRAS requirement + -- and 2. tWR cycle(s) after last valid data + -- or 3. Interrupt by a Read or Write (with or without Auto Precharge) + -- + -- Note: Model is starting the internal precharge 1 cycle after they meet all the + -- requirement but tRP will be compensate for the time after the 1 cycle. + IF ((Auto_precharge(0) = '1') AND (Write_precharge(0) = '1')) THEN + IF (((NOW - RAS_chk0 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(0) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(0) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(0) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(0) >= 8))) OR + (RW_interrupt_write(0) = '1' AND RW_interrupt_counter(0) >= 1)) THEN + Auto_precharge(0) := '0'; + Write_precharge(0) := '0'; + RW_interrupt_write(0) := '0'; + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW + tWRa; + END IF; + END IF; + IF ((Auto_precharge(1) = '1') AND (Write_precharge(1) = '1')) THEN + IF (((NOW - RAS_chk1 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(1) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(1) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(1) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(1) >= 8))) OR + (RW_interrupt_write(1) = '1' AND RW_interrupt_counter(1) >= 1)) THEN + Auto_precharge(1) := '0'; + Write_precharge(1) := '0'; + RW_interrupt_write(1) := '0'; + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW + tWRa; + END IF; + END IF; + IF ((Auto_precharge(2) = '1') AND (Write_precharge(2) = '1')) THEN + IF (((NOW - RAS_chk2 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(2) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(2) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(2) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(2) >= 8))) OR + (RW_interrupt_write(2) = '1' AND RW_interrupt_counter(2) >= 1)) THEN + Auto_precharge(2) := '0'; + Write_precharge(2) := '0'; + RW_interrupt_write(2) := '0'; + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW + tWRa; + END IF; + END IF; + IF ((Auto_precharge(3) = '1') AND (Write_precharge(3) = '1')) THEN + IF (((NOW - RAS_chk3 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(3) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(3) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(3) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(3) >= 8))) OR + (RW_interrupt_write(0) = '1' AND RW_interrupt_counter(3) >= 1)) THEN + Auto_precharge(3) := '0'; + Write_precharge(3) := '0'; + RW_interrupt_write(3) := '0'; + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW + tWRa; + END IF; + END IF; + + -- Read with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet minimum tRAS requirement + -- and 2. CL - 1 cycle(s) before last valid data + -- or 3. Interrupt by a Read or Write (with or without Auto Precharge) + IF ((Auto_precharge(0) = '1') AND (Read_precharge(0) = '1')) THEN + IF (((NOW - RAS_chk0 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(0) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(0) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(0) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(0) >= 8))) OR + (RW_interrupt_read(0) = '1')) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW; + Auto_precharge(0) := '0'; + Read_precharge(0) := '0'; + RW_interrupt_read(0) := '0'; + END IF; + END IF; + IF ((Auto_precharge(1) = '1') AND (Read_precharge(1) = '1')) THEN + IF (((NOW - RAS_chk1 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(1) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(1) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(1) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(1) >= 8))) OR + (RW_interrupt_read(1) = '1')) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW; + Auto_precharge(1) := '0'; + Read_precharge(1) := '0'; + RW_interrupt_read(1) := '0'; + END IF; + END IF; + IF ((Auto_precharge(2) = '1') AND (Read_precharge(2) = '1')) THEN + IF (((NOW - RAS_chk2 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(2) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(2) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(2) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(2) >= 8))) OR + (RW_interrupt_read(2) = '1')) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW; + Auto_precharge(2) := '0'; + Read_precharge(2) := '0'; + RW_interrupt_read(2) := '0'; + END IF; + END IF; + IF ((Auto_precharge(3) = '1') AND (Read_precharge(3) = '1')) THEN + IF (((NOW - RAS_chk3 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(3) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(3) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(3) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(3) >= 8))) OR + (RW_interrupt_read(3) = '1')) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW; + Auto_precharge(3) := '0'; + Read_precharge(3) := '0'; + RW_interrupt_read(3) := '0'; + END IF; + END IF; + + -- Internal Precharge or Bst + IF Command(0) = PRECH THEN -- PRECH terminate a read if same bank or all banks + IF Bank_precharge(0) = Bank OR A10_precharge(0) = '1' THEN + IF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Command(0) = BST THEN -- BST terminate a read regardless of bank + IF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + + IF Data_out_enable = '0' THEN + Dq <= TRANSPORT (OTHERS => 'Z') AFTER tOH; + END IF; + + -- Detect Read or Write Command + IF Command(0) = READ THEN + Bank := Bank_addr (0); + Col := Col_addr (0); + Col_brst := Col_addr (0); + IF Bank_addr (0) = "00" THEN + Row := B0_row_addr; + ELSIF Bank_addr (0) = "01" THEN + Row := B1_row_addr; + ELSIF Bank_addr (0) = "10" THEN + Row := B2_row_addr; + ELSE + Row := B3_row_addr; + END IF; + Burst_counter := 0; + Data_in_enable := '0'; + Data_out_enable := '1'; + ELSIF Command(0) = WRITE THEN + Bank := Bank_addr(0); + Col := Col_addr(0); + Col_brst := Col_addr(0); + IF Bank_addr (0) = "00" THEN + Row := B0_row_addr; + ELSIF Bank_addr (0) = "01" THEN + Row := B1_row_addr; + ELSIF Bank_addr (0) = "10" THEN + Row := B2_row_addr; + ELSE + Row := B3_row_addr; + END IF; + Burst_counter := 0; + Data_in_enable := '1'; + Data_out_enable := '0'; + END IF; + + -- DQ (Driver / Receiver) + Row_index := CONV_INTEGER (Row); + Col_index := CONV_INTEGER (Col); + + IF Data_in_enable = '1' THEN + IF Dqm /= "1111" THEN + -- Initialize Memory + Init_mem (Bank, Row_index); + + -- Array Buffer + CASE Bank IS + WHEN "00" => Dq_temp := Bank0 (Row_index) (Col_index); + WHEN "01" => Dq_temp := Bank1 (Row_index) (Col_index); + WHEN "10" => Dq_temp := Bank2 (Row_index) (Col_index); + WHEN OTHERS => Dq_temp := Bank3 (Row_index) (Col_index); + END CASE; + + -- Dqm Operation + IF Dqm (0) = '0' THEN + Dq_temp ( 7 DOWNTO 0) := Dq ( 7 DOWNTO 0); + END IF; + IF Dqm (1) = '0' THEN + Dq_temp (15 DOWNTO 8) := Dq (15 DOWNTO 8); + END IF; + IF Dqm (2) = '0' THEN + Dq_temp (23 DOWNTO 16) := Dq (23 DOWNTO 16); + END IF; + IF Dqm (3) = '0' THEN + Dq_temp (31 DOWNTO 24) := Dq (31 DOWNTO 24); + END IF; + + -- Write to Memory + CASE Bank IS + WHEN "00" => Bank0 (Row_index) (Col_index) := Dq_temp; + WHEN "01" => Bank1 (Row_index) (Col_index) := Dq_temp; + WHEN "10" => Bank2 (Row_index) (Col_index) := Dq_temp; + WHEN OTHERS => Bank3 (Row_index) (Col_index) := Dq_temp; + END CASE; + + -- Record tWR for manual precharge + WR_chkm(CONV_INTEGER(Bank)) := NOW; + END IF; + + -- Advance Burst Counter + Burst_decode; + + ELSIF Data_out_enable = '1' THEN + IF Dqm_reg0 /= "1111" THEN + -- Initialize Memory + Init_mem (Bank, Row_index); + + -- Array Buffer + CASE Bank IS + WHEN "00" => Dq_temp := Bank0 (Row_index) (Col_index); + WHEN "01" => Dq_temp := Bank1 (Row_index) (Col_index); + WHEN "10" => Dq_temp := Bank2 (Row_index) (Col_index); + WHEN OTHERS => Dq_temp := Bank3 (Row_index) (Col_index); + END CASE; + + -- Dqm Operation + IF Dqm_reg0 (0) = '1' THEN + Dq_temp ( 7 DOWNTO 0) := (OTHERS => 'Z'); + END IF; + IF Dqm_reg0 (1) = '1' THEN + Dq_temp (15 DOWNTO 8) := (OTHERS => 'Z'); + END IF; + IF Dqm_reg0 (2) = '1' THEN + Dq_temp (23 DOWNTO 16) := (OTHERS => 'Z'); + END IF; + IF Dqm_reg0 (3) = '1' THEN + Dq_temp (31 DOWNTO 24) := (OTHERS => 'Z'); + END IF; + + -- Output + Dq <= TRANSPORT Dq_temp AFTER tAC; + ELSE + Dq <= TRANSPORT (OTHERS => 'Z') AFTER tHZ; + END IF; + + -- Advance Burst Counter + Burst_decode; + END IF; + END IF; + + END PROCESS; + + -- Clock timing checks + Clock_check : PROCESS + VARIABLE Clk_low, Clk_high : TIME := 0 ns; + BEGIN + WAIT ON Clk; + IF (Clk = '1' AND NOW >= 10 ns) THEN + ASSERT (NOW - Clk_low >= tCL) + REPORT "tCL violation" + SEVERITY WARNING; + ASSERT (NOW - Clk_high >= tCK) + REPORT "tCK violation" + SEVERITY WARNING; + Clk_high := NOW; + ELSIF (Clk = '0' AND NOW /= 0 ns) THEN + ASSERT (NOW - Clk_high >= tCH) + REPORT "tCH violation" + SEVERITY WARNING; + Clk_low := NOW; + END IF; + END PROCESS; + + -- Setup timing checks + Setup_check : PROCESS + BEGIN + WAIT ON Clk; + IF Clk = '1' THEN + ASSERT(Cke'LAST_EVENT >= tCKS) + REPORT "CKE Setup time violation -- tCKS" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tCMS) + REPORT "CS# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tCMS) + REPORT "CAS# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tCMS) + REPORT "RAS# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tCMS) + REPORT "WE# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Dqm'LAST_EVENT >= tCMS) + REPORT "Dqm Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tAS) + REPORT "ADDR Setup time violation -- tAS" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tAS) + REPORT "BA Setup time violation -- tAS" + SEVERITY WARNING; + ASSERT(Dq'LAST_EVENT >= tDS) + REPORT "Dq Setup time violation -- tDS" + SEVERITY WARNING; + END IF; + END PROCESS; + + -- Hold timing checks + Hold_check : PROCESS + BEGIN + WAIT ON Clk'DELAYED (tCKH), Clk'DELAYED (tCMH), Clk'DELAYED (tAH), Clk'DELAYED (tDH); + IF Clk'DELAYED (tCKH) = '1' THEN + ASSERT(Cke'LAST_EVENT > tCKH) + REPORT "CKE Hold time violation -- tCKH" + SEVERITY WARNING; + END IF; + IF Clk'DELAYED (tCMH) = '1' THEN + ASSERT(Cs_n'LAST_EVENT > tCMH) + REPORT "CS# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT > tCMH) + REPORT "CAS# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT > tCMH) + REPORT "RAS# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT > tCMH) + REPORT "WE# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(Dqm'LAST_EVENT > tCMH) + REPORT "Dqm Hold time violation -- tCMH" + SEVERITY WARNING; + END IF; + IF Clk'DELAYED (tAH) = '1' THEN + ASSERT(Addr'LAST_EVENT > tAH) + REPORT "ADDR Hold time violation -- tAH" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT > tAH) + REPORT "BA Hold time violation -- tAH" + SEVERITY WARNING; + END IF; + IF Clk'DELAYED (tDH) = '1' THEN + ASSERT(Dq'LAST_EVENT > tDH) + REPORT "Dq Hold time violation -- tDH" + SEVERITY WARNING; + END IF; + END PROCESS; + +END behave; Index: sdram_ctrl/tags/V10/test_bench/cpu_simulator.vhd =================================================================== --- sdram_ctrl/tags/V10/test_bench/cpu_simulator.vhd (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/cpu_simulator.vhd (revision 8) @@ -0,0 +1,72 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +ENTITY cpu_simulator IS + PORT(clk, reset: in std_logic; + + address : out std_logic_vector(21 downto 0); + writedata : out std_logic_vector(31 downto 0); + byteenable : out std_logic_vector(3 downto 0); + write : out std_logic; + read : out std_logic; + readdata : in std_logic_vector(31 downto 0); + waitrequest : in std_logic; + readdatavalid : in std_logic + ); +END cpu_simulator; + +ARCHITECTURE behaviour OF cpu_simulator IS + signal counter: unsigned(3 downto 0); + type vector is + record + address: integer; + writedata: integer; + byteenable: std_logic_vector(3 downto 0); + write: std_logic; + read: std_logic; + end record; + type script is array(0 to (2**counter'length)-1) of vector; + signal wave_form: script:=( + (0,0,"1111",'1','0'), + (1,1,"1111",'1','0'), + (2,2,"1111",'1','0'), + (3,3,"1111",'1','0'), + (1024,1024,"1111",'0','1'), + (1025,1025,"1111",'0','1'), + (1026,1026,"1111",'0','1'), + (1027,1027,"1111",'0','1'), + (1024,1024,"1111",'1','0'), + (1025,1025,"1111",'1','0'), + (1026,1026,"1111",'1','0'), + (1027,1027,"1111",'1','0'), + (0,0,"1111",'0','1'), + (1,1,"1111",'0','1'), + (2,2,"1111",'0','1'), + (3,3,"1111",'0','1') + ); +BEGIN + process(clk,reset) + begin + if reset='1' + then + counter<=(others=>'0'); + address<=(others=>'0'); + writedata<=(others=>'0'); + byteenable<=(others=>'0'); + write<='0'; + read<='0'; + elsif rising_edge(clk) + then + if waitrequest='0' + then + counter<=counter+1; + address<=std_logic_vector(to_unsigned(wave_form(to_integer(counter)).address,address'length)); + writedata<=std_logic_vector(to_unsigned(wave_form(to_integer(counter)).writedata,writedata'length)); + byteenable<=wave_form(to_integer(counter)).byteenable; + write<=wave_form(to_integer(counter)).write; + read<=wave_form(to_integer(counter)).read; + end if; + end if; + end process; +END behaviour; \ No newline at end of file Index: sdram_ctrl/tags/V10/test_bench/pll.vhd =================================================================== --- sdram_ctrl/tags/V10/test_bench/pll.vhd (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/pll.vhd (revision 8) @@ -0,0 +1,256 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: pll.vhd +-- Megafunction Name(s): +-- altpll +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 5.1 Build 213 01/19/2006 SP 1 SJ Full Version +-- ************************************************************ + + +--Copyright (C) 1991-2006 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.altera_mf_components.all; + +ENTITY pll IS + PORT + ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + e0 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +END pll; + + +ARCHITECTURE SYN OF pll IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (3 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC ; + SIGNAL sub_wire6 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire7_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altpll + GENERIC ( + clk0_divide_by : NATURAL; + clk0_duty_cycle : NATURAL; + clk0_multiply_by : NATURAL; + clk0_phase_shift : STRING; + compensate_clock : STRING; + extclk0_divide_by : NATURAL; + extclk0_duty_cycle : NATURAL; + extclk0_multiply_by : NATURAL; + extclk0_phase_shift : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + invalid_lock_multiplier : NATURAL; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + valid_lock_multiplier : NATURAL + ); + PORT ( + extclk : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + locked : OUT STD_LOGIC ; + clk : OUT STD_LOGIC_VECTOR (5 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire7_bv(0 DOWNTO 0) <= "0"; + sub_wire7 <= To_stdlogicvector(sub_wire7_bv); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + locked <= sub_wire2; + sub_wire4 <= sub_wire3(0); + e0 <= sub_wire4; + sub_wire5 <= inclk0; + sub_wire6 <= sub_wire7(0 DOWNTO 0) & sub_wire5; + + altpll_component : altpll + GENERIC MAP ( + clk0_divide_by => 2, + clk0_duty_cycle => 50, + clk0_multiply_by => 11, + clk0_phase_shift => "0", + compensate_clock => "CLK0", + extclk0_divide_by => 2, + extclk0_duty_cycle => 50, + extclk0_multiply_by => 11, + extclk0_phase_shift => "5682", + inclk0_input_frequency => 41666, + intended_device_family => "Cyclone", + invalid_lock_multiplier => 5, + lpm_type => "altpll", + operation_mode => "NORMAL", + pll_type => "AUTO", + valid_lock_multiplier => 1 + ) + PORT MAP ( + inclk => sub_wire6, + clk => sub_wire0, + locked => sub_wire2, + extclk => sub_wire3 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0" +-- Retrieval info: PRIVATE: DEVICE_FAMILY NUMERIC "11" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: DEV_FAMILY STRING "Cyclone" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR6 NUMERIC "1" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE6 STRING "50.00000000" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "24.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: LOCK_LOSS_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "504.000" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT6 STRING "deg" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK6 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: MULT_FACTOR6 NUMERIC "1" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "132.000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ6 STRING "100.000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE6 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT6 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT6 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT6 STRING "deg" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK6 STRING "0" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK6 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA6 STRING "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "2" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "11" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: EXTCLK0_DIVIDE_BY NUMERIC "2" +-- Retrieval info: CONSTANT: EXTCLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: EXTCLK0_MULTIPLY_BY NUMERIC "11" +-- Retrieval info: CONSTANT: EXTCLK0_PHASE_SHIFT STRING "5682" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "41666" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone" +-- Retrieval info: CONSTANT: INVALID_LOCK_MULTIPLIER NUMERIC "5" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: VALID_LOCK_MULTIPLIER NUMERIC "1" +-- Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT VCC "@clk[5..0]" +-- Retrieval info: USED_PORT: @extclk 0 0 4 0 OUTPUT VCC "@extclk[3..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT VCC "c0" +-- Retrieval info: USED_PORT: e0 0 0 0 0 OUTPUT VCC "e0" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT GND "inclk0" +-- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" +-- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: e0 0 0 0 0 @extclk 0 0 1 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.vhd FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_waveforms.html FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_wave*.jpg FALSE FALSE Index: sdram_ctrl/tags/V10/test_bench/old/nios.dat =================================================================== --- sdram_ctrl/tags/V10/test_bench/old/nios.dat (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/old/nios.dat (revision 8) @@ -0,0 +1 @@ + ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿÿÿ \ No newline at end of file Index: sdram_ctrl/tags/V10/test_bench/old/Hello_LED_sdram_0.dat =================================================================== --- sdram_ctrl/tags/V10/test_bench/old/Hello_LED_sdram_0.dat (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/old/Hello_LED_sdram_0.dat (revision 8) @@ -0,0 +1,49 @@ +@00000000 00400034 +@00000001 08400804 +@00000002 0800683A +@00000003 00000000 +@00000004 00000000 +@00000005 00000000 +@00000006 00000000 +@00000007 00000000 +@00000008 06C04034 +@00000009 DEC00004 +@0000000A 06800074 +@0000000B D6A03104 +@0000000C 00000340 +@0000000D DEFFFD04 +@0000000E DF000215 +@0000000F D839883A +@00000010 00800084 +@00000011 E0800005 +@00000012 E0000045 +@00000013 E0800003 +@00000014 1080204C +@00000015 1005003A +@00000016 1000031E +@00000017 E0800043 +@00000018 1080005C +@00000019 E0800045 +@0000001A E0800043 +@0000001B 1005003A +@0000001C 1000041E +@0000001D E0800003 +@0000001E 1004D07A +@0000001F E0800005 +@00000020 00000306 +@00000021 E0800003 +@00000022 1085883A +@00000023 E0800005 +@00000024 00C04034 +@00000025 18C21004 +@00000026 E0800003 +@00000027 18800035 +@00000028 E0000115 +@00000029 E0C00117 +@0000002A 008000F4 +@0000002B 10834FC4 +@0000002C 10FFE616 +@0000002D E0800117 +@0000002E 10800044 +@0000002F E0800115 +@00000030 003FF806 Index: sdram_ctrl/tags/V10/test_bench/old/cpu_simulator_file_based.vhd =================================================================== --- sdram_ctrl/tags/V10/test_bench/old/cpu_simulator_file_based.vhd (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/old/cpu_simulator_file_based.vhd (revision 8) @@ -0,0 +1,79 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +ENTITY cpu_simulator IS + PORT(clk, reset: in std_logic; + + address : out std_logic_vector(21 downto 0); + writedata : out std_logic_vector(31 downto 0); + byteenable : out std_logic_vector(3 downto 0); + write : out std_logic; + read : out std_logic; + readdata : in std_logic_vector(31 downto 0); + waitrequest : in std_logic; + readdatavalid : in std_logic + ); +END cpu_simulator; + +ARCHITECTURE behaviour OF cpu_simulator IS + signal address: std_logic_vector(21 downto 0); + signal writedata: std_logic_vector(31 downto 0); + signal byteenable: std_logic_vector(3 downto 0); + signal write: std_logic; + signal read: std_logic; + +BEGIN + process(clk,reset) + variable service: std_logic_vector(7 downto 0); + variable b0,b1,b2,b3,b4,b5,b6,b7: BYTE; + begin + if reset='1' + then + file_close(NIOS); + file_open(NIOS, FILES_PATH&"nios.dat", READ_MODE); + elsif rising_edge(clk) + then + if waitrequest='0' + then + if Endfile(NIOS) + then + file_close(NIOS); + file_open(NIOS, FILES_PATH&"nios.dat", READ_MODE); + else + Read(NIOS,b0); + Read(NIOS,b1); + Read(NIOS,b2); + Read(NIOS,b3); + Read(NIOS,b4); + Read(NIOS,b5); + Read(NIOS,b6); + Read(NIOS,b7); + service:=char2std_logic_vector(b0); + address<=service(5 downto 0)&char2std_logic_vector(b1)&char2std_logic_vector(b2); + writedata<=char2std_logic_vector(b3)&char2std_logic_vector(b4)&char2std_logic_vector(b5)&char2std_logic_vector(b6); + service:=char2std_logic_vector(b7); + byteenable<=not service(7 downto 4); + write<=service(3); + read<=service(2); + end if; + end if; + end if; + end process; + + process(clk,reset) + begin + if reset='1' + then + readed<=(others=>'0'); + new_data<='0'; + elsif rising_edge(clk) + then + new_data<=readdatavalid; + if readdatavalid='1' + then + readed<=readdata; + end if; + end if; + end process; +END behaviour; \ No newline at end of file Index: sdram_ctrl/tags/V10/test_bench/old/Count_Binary_sdram_0.dat =================================================================== --- sdram_ctrl/tags/V10/test_bench/old/Count_Binary_sdram_0.dat (nonexistent) +++ sdram_ctrl/tags/V10/test_bench/old/Count_Binary_sdram_0.dat (revision 8) @@ -0,0 +1,5026 @@ +;Count Binary +@00000000 00820014 +@00000001 1001483A +@00000002 10BFF804 +@00000003 00BFFD16 +@00000004 00400034 +@00000005 08407204 +@00000006 0800683A +@00000007 00000000 +@00000008 DEFFED04 +@00000009 DFC00015 +@0000000A D8400215 +@0000000B D8800315 +@0000000C D8C00415 +@0000000D D9000515 +@0000000E D9400615 +@0000000F D9800715 +@00000010 D9C00815 +@00000011 000B307A +@00000012 DA000915 +@00000013 DA400A15 +@00000014 DA800B15 +@00000015 DAC00C15 +@00000016 DB000D15 +@00000017 DB400E15 +@00000018 DB800F15 +@00000019 DBC01015 +@0000001A D9401115 +@0000001B EBFFFF04 +@0000001C DBC01215 +@0000001D 0009313A +@0000001E 2880004C +@0000001F 10000326 +@00000020 20000226 +@00000021 00000EC0 +@00000022 00000306 +@00000023 DF401215 +@00000024 E8BFFF17 +@00000025 003DA03A +@00000026 D9401117 +@00000027 DF401217 +@00000028 DFC00017 +@00000029 2801707A +@0000002A D8400217 +@0000002B D8800317 +@0000002C D8C00417 +@0000002D D9000517 +@0000002E D9400617 +@0000002F D9800717 +@00000030 D9C00817 +@00000031 DA000917 +@00000032 DA400A17 +@00000033 DA800B17 +@00000034 DAC00C17 +@00000035 DB000D17 +@00000036 DB400E17 +@00000037 DB800F17 +@00000038 DBC01017 +@00000039 DEC01304 +@0000003A E800083A +@0000003B DEFFF904 +@0000003C DFC00615 +@0000003D DF000515 +@0000003E D839883A +@0000003F 0005313A +@00000040 E0800415 +@00000041 E0800417 +@00000042 E0800315 +@00000043 E0800317 +@00000044 E0800015 +@00000045 E0000215 +@00000046 00800044 +@00000047 E0800115 +@00000048 E0C00017 +@00000049 E0800117 +@0000004A 1884703A +@0000004B 1005003A +@0000004C 1000101E +@0000004D 00C00034 +@0000004E 18D3A504 +@0000004F E0800217 +@00000050 100490FA +@00000051 10C9883A +@00000052 00C00034 +@00000053 18D3A504 +@00000054 E0800217 +@00000055 100490FA +@00000056 10C5883A +@00000057 10800104 +@00000058 20C00017 +@00000059 11000017 +@0000005A E1400217 +@0000005B 183EE83A +@0000005C 00000706 +@0000005D E0800117 +@0000005E 1085883A +@0000005F E0800115 +@00000060 E0800217 +@00000061 10800044 +@00000062 E0800215 +@00000063 003FE406 +@00000064 0005313A +@00000065 E0800315 +@00000066 E0800317 +@00000067 E0800415 +@00000068 E0800417 +@00000069 E0800015 +@0000006A E0800017 +@0000006B 1005003A +@0000006C 1000011E +@0000006D 003FD706 +@0000006E DFC00617 +@0000006F DF000517 +@00000070 DEC00704 +@00000071 F800283A +@00000072 06C04034 +@00000073 DEC00004 +@00000074 06800074 +@00000075 D6B38B04 +@00000076 00800034 +@00000077 1093A104 +@00000078 00C00034 +@00000079 18D42804 +@0000007A 10C00326 +@0000007B 10000015 +@0000007C 10800104 +@0000007D 10FFFD36 +@0000007E 0000DB40 +@0000007F DEFFFE04 +@00000080 DFC00115 +@00000081 DF000015 +@00000082 D839883A +@00000083 01000034 +@00000084 210D8704 +@00000085 00005100 +@00000086 01000034 +@00000087 210D8F04 +@00000088 00005100 +@00000089 01000034 +@0000008A 210D9604 +@0000008B 00005100 +@0000008C 01000034 +@0000008D 210D9D04 +@0000008E 00005100 +@0000008F DFC00117 +@00000090 DF000017 +@00000091 DEC00204 +@00000092 F800283A +@00000093 DEFFFF04 +@00000094 DF000015 +@00000095 D839883A +@00000096 00C04034 +@00000097 18C21004 +@00000098 D0A01603 +@00000099 18800035 +@0000009A DF000017 +@0000009B DEC00104 +@0000009C F800283A +@0000009D DEFFFF04 +@0000009E DF000015 +@0000009F D839883A +@000000A0 DF000017 +@000000A1 DEC00104 +@000000A2 F800283A +@000000A3 DEFFFE04 +@000000A4 DF000115 +@000000A5 D839883A +@000000A6 E1000015 +@000000A7 DF000117 +@000000A8 DEC00204 +@000000A9 F800283A +@000000AA DEFFFD04 +@000000AB DFC00215 +@000000AC DF000115 +@000000AD D839883A +@000000AE E1000015 +@000000AF 000024C0 +@000000B0 00002740 +@000000B1 E1000017 +@000000B2 000028C0 +@000000B3 D1601603 +@000000B4 01000034 +@000000B5 210DA404 +@000000B6 00005100 +@000000B7 DFC00217 +@000000B8 DF000117 +@000000B9 DEC00304 +@000000BA F800283A +@000000BB DEFFFA04 +@000000BC DFC00515 +@000000BD DF000415 +@000000BE D839883A +@000000BF E1400115 +@000000C0 E1000005 +@000000C1 E0800003 +@000000C2 108018D8 +@000000C3 1000201E +@000000C4 D0A01717 +@000000C5 E0800215 +@000000C6 E0C00217 +@000000C7 188000A0 +@000000C8 1000101E +@000000C9 E0C00217 +@000000CA 188000C8 +@000000CB 1000041E +@000000CC E0C00217 +@000000CD 18800060 +@000000CE 1000081E +@000000CF 00001106 +@000000D0 E0C00217 +@000000D1 18800120 +@000000D2 1000081E +@000000D3 E0C00217 +@000000D4 18800220 +@000000D5 1000081E +@000000D6 00000A06 +@000000D7 000024C0 +@000000D8 00003106 +@000000D9 00002740 +@000000DA 00002F06 +@000000DB E1000117 +@000000DC 000028C0 +@000000DD 00002C06 +@000000DE E1000117 +@000000DF 00002A80 +@000000E0 00002906 +@000000E1 E1000117 +@000000E2 00002A80 +@000000E3 00002606 +@000000E4 D0A01717 +@000000E5 E0800315 +@000000E6 E0C00317 +@000000E7 188000A0 +@000000E8 1000131E +@000000E9 E0C00317 +@000000EA 188000C8 +@000000EB 1000041E +@000000EC E0C00317 +@000000ED 18800060 +@000000EE 1000081E +@000000EF 00001A06 +@000000F0 E0C00317 +@000000F1 18800120 +@000000F2 10000E1E +@000000F3 E0C00317 +@000000F4 18800220 +@000000F5 1000101E +@000000F6 00001306 +@000000F7 01000034 +@000000F8 210DA604 +@000000F9 00005100 +@000000FA D0201715 +@000000FB 00000E06 +@000000FC 01000034 +@000000FD 210DA904 +@000000FE 00005100 +@000000FF D0201715 +@00000100 00000906 +@00000101 01000034 +@00000102 210DAC04 +@00000103 00005100 +@00000104 D0201715 +@00000105 00000406 +@00000106 01000034 +@00000107 210DAF04 +@00000108 00005100 +@00000109 D0201715 +@0000010A DFC00517 +@0000010B DF000417 +@0000010C DEC00604 +@0000010D F800283A +@0000010E DEFFFB04 +@0000010F DFC00415 +@00000110 DF000315 +@00000111 D839883A +@00000112 D0201605 +@00000113 00001FC0 +@00000114 010000B4 +@00000115 2121A804 +@00000116 0000E6C0 +@00000117 D0A01717 +@00000118 1005003A +@00000119 1000041E +@0000011A 010018C4 +@0000011B E1400217 +@0000011C 00002EC0 +@0000011D 00000206 +@0000011E E1000217 +@0000011F 00002A80 +@00000120 D0A01603 +@00000121 10803FD8 +@00000122 10001D1E +@00000123 01000034 +@00000124 210DB204 +@00000125 00005100 +@00000126 D0201715 +@00000127 E0000115 +@00000128 E0000015 +@00000129 E0800017 +@0000012A 10801188 +@0000012B 1000131E +@0000012C 01000034 +@0000012D 210DB504 +@0000012E 00005100 +@0000012F D0A01717 +@00000130 1005003A +@00000131 1000061E +@00000132 01000034 +@00000133 210DB604 +@00000134 00005100 +@00000135 01001DC4 +@00000136 E1400217 +@00000137 00002EC0 +@00000138 010000B4 +@00000139 2121A804 +@0000013A 0000E6C0 +@0000013B E0800017 +@0000013C 10800044 +@0000013D E0800015 +@0000013E 003FEA06 +@0000013F 00001FC0 +@00000140 D0A01603 +@00000141 10800044 +@00000142 D0A01605 +@00000143 003FD006 +@00000144 DEFFFC04 +@00000145 DFC00015 +@00000146 D9400115 +@00000147 D9800215 +@00000148 D9C00315 +@00000149 D0A00017 +@0000014A 200B883A +@0000014B D9800104 +@0000014C 11000117 +@0000014D 00800034 +@0000014E 1082C604 +@0000014F 20800115 +@00000150 0000AF40 +@00000151 DFC00017 +@00000152 DEC00404 +@00000153 F800283A +@00000154 DEFFFB04 +@00000155 DC000315 +@00000156 DC400215 +@00000157 DC800115 +@00000158 DFC00415 +@00000159 D9800005 +@0000015A 2025883A +@0000015B 2823883A +@0000015C 3C3FFFC4 +@0000015D 01C00A0E +@0000015E 88C00117 +@0000015F 9009883A +@00000160 880B883A +@00000161 D80D883A +@00000162 01C00044 +@00000163 183EE83A +@00000164 8007883A +@00000165 843FFFC4 +@00000166 1000081E +@00000167 00FFF616 +@00000168 0005883A +@00000169 DFC00417 +@0000016A DC000317 +@0000016B DC400217 +@0000016C DC800117 +@0000016D DEC00504 +@0000016E F800283A +@0000016F 00BFFFC4 +@00000170 DFC00417 +@00000171 DC000317 +@00000172 DC400217 +@00000173 DC800117 +@00000174 DEC00504 +@00000175 F800283A +@00000176 DEFFEC04 +@00000177 DF001215 +@00000178 DC001115 +@00000179 DC401015 +@0000017A DC800F15 +@0000017B DD000D15 +@0000017C DD800B15 +@0000017D DDC00A15 +@0000017E DFC01315 +@0000017F DCC00E15 +@00000180 DD400C15 +@00000181 30800003 +@00000182 202F883A +@00000183 2829883A +@00000184 1021883A +@00000185 D9C00215 +@00000186 34800044 +@00000187 D8000315 +@00000188 D8000415 +@00000189 D8000515 +@0000018A D8000615 +@0000018B 0039883A +@0000018C D8000715 +@0000018D D8000815 +@0000018E 002D883A +@0000018F 0023883A +@00000190 1000061E +@00000191 00002206 +@00000192 88002E26 +@00000193 90800003 +@00000194 94800044 +@00000195 1021883A +@00000196 10001D26 +@00000197 01C00044 +@00000198 89C03626 +@00000199 3C7FF80E +@0000019A 00800084 +@0000019B 88BFF71E +@0000019C 81003FCC +@0000019D 2100201C +@0000019E 213FE004 +@0000019F 00800B84 +@000001A0 20803826 +@000001A1 817FF404 +@000001A2 28C03FCC +@000001A3 00800244 +@000001A4 10C03636 +@000001A5 D8C00617 +@000001A6 2821883A +@000001A7 18005916 +@000001A8 D9000617 +@000001A9 01400284 +@000001AA 0000D8C0 +@000001AB 80C03FCC +@000001AC 18C0201C +@000001AD 18FFE004 +@000001AE 10C5883A +@000001AF D8800615 +@000001B0 90800003 +@000001B1 94800044 +@000001B2 1021883A +@000001B3 103FE31E +@000001B4 B005883A +@000001B5 DFC01317 +@000001B6 DF001217 +@000001B7 DC001117 +@000001B8 DC401017 +@000001B9 DC800F17 +@000001BA DCC00E17 +@000001BB DD000D17 +@000001BC DD400C17 +@000001BD DD800B17 +@000001BE DDC00A17 +@000001BF DEC01404 +@000001C0 F800283A +@000001C1 80C03FCC +@000001C2 18C0201C +@000001C3 18FFE004 +@000001C4 00800944 +@000001C5 18802026 +@000001C6 A0C00117 +@000001C7 B809883A +@000001C8 DC000005 +@000001C9 A00B883A +@000001CA D80D883A +@000001CB 183EE83A +@000001CC 1000E81E +@000001CD B5800044 +@000001CE 003FC406 +@000001CF 81003FCC +@000001D0 2100201C +@000001D1 213FE004 +@000001D2 00800C04 +@000001D3 20801C26 +@000001D4 00800944 +@000001D5 20801D26 +@000001D6 00800B84 +@000001D7 04400084 +@000001D8 20BFC81E +@000001D9 D8000615 +@000001DA 003FB806 +@000001DB 00801B04 +@000001DC 20802126 +@000001DD 20FFEA04 +@000001DE 00800804 +@000001DF 10C01C36 +@000001E0 180490BA +@000001E1 00C00034 +@000001E2 18CDBA04 +@000001E3 10C5883A +@000001E4 11000017 +@000001E5 2000683A +@000001E6 00BFFFC4 +@000001E7 07000284 +@000001E8 3823883A +@000001E9 D9C00715 +@000001EA D8800515 +@000001EB D8000315 +@000001EC D8000415 +@000001ED D8000815 +@000001EE D8800615 +@000001EF 003FA306 +@000001F0 DC400315 +@000001F1 04400084 +@000001F2 003FA006 +@000001F3 A0C00117 +@000001F4 B809883A +@000001F5 DC000045 +@000001F6 A00B883A +@000001F7 D9800044 +@000001F8 880F883A +@000001F9 183EE83A +@000001FA 1000BA1E +@000001FB B46D883A +@000001FC 0023883A +@000001FD 003F9506 +@000001FE 00800044 +@000001FF D8800415 +@00000200 003F9206 +@00000201 D8800517 +@00000202 1000B416 +@00000203 D9000517 +@00000204 01400284 +@00000205 0000D8C0 +@00000206 D8800515 +@00000207 D8C00517 +@00000208 80803FCC +@00000209 1080201C +@0000020A 10BFE004 +@0000020B 1887883A +@0000020C D8C00515 +@0000020D 003F8506 +@0000020E 00C00044 +@0000020F D8000715 +@00000210 07000404 +@00000211 D8C00815 +@00000212 D8800717 +@00000213 D8000915 +@00000214 1007003A +@00000215 D8800217 +@00000216 15400017 +@00000217 10800104 +@00000218 D8800215 +@00000219 1800011E +@0000021A A8009E16 +@0000021B 04C00044 +@0000021C A821883A +@0000021D 9823883A +@0000021E 00000506 +@0000021F 9809883A +@00000220 E00B883A +@00000221 0000D8C0 +@00000222 1027883A +@00000223 8C400044 +@00000224 8009883A +@00000225 E00B883A +@00000226 0000D6C0 +@00000227 1021883A +@00000228 103FF61E +@00000229 D8800517 +@0000022A D8C00317 +@0000022B 1445C83A +@0000022C D8800515 +@0000022D 18006F26 +@0000022E D8800917 +@0000022F 10000D26 +@00000230 A0C00117 +@00000231 00800B44 +@00000232 D8800085 +@00000233 B809883A +@00000234 A00B883A +@00000235 D9800084 +@00000236 01C00044 +@00000237 183EE83A +@00000238 10007C1E +@00000239 D8C00517 +@0000023A B5800044 +@0000023B 18FFFFC4 +@0000023C D8C00515 +@0000023D D9C00517 +@0000023E B809883A +@0000023F A00B883A +@00000240 01800C04 +@00000241 00005500 +@00000242 1000721E +@00000243 D8800517 +@00000244 B0AD883A +@00000245 983FB626 +@00000246 A809883A +@00000247 980B883A +@00000248 0000D6C0 +@00000249 11000C04 +@0000024A 20C03FCC +@0000024B 00800E44 +@0000024C 10C0042E +@0000024D D8800817 +@0000024E 190001C4 +@0000024F 1000011E +@00000250 190009C4 +@00000251 A0C00117 +@00000252 A00B883A +@00000253 D9000105 +@00000254 D9800104 +@00000255 B809883A +@00000256 01C00044 +@00000257 183EE83A +@00000258 10005C1E +@00000259 A809883A +@0000025A 980B883A +@0000025B 0000D7C0 +@0000025C 9809883A +@0000025D E00B883A +@0000025E 102B883A +@0000025F 0000D6C0 +@00000260 1027883A +@00000261 B5800044 +@00000262 003FE206 +@00000263 D8800517 +@00000264 B809883A +@00000265 A00B883A +@00000266 01800804 +@00000267 11FFFFC4 +@00000268 00005500 +@00000269 10004B1E +@0000026A D8800217 +@0000026B A2000117 +@0000026C B809883A +@0000026D 10C00017 +@0000026E 10800104 +@0000026F A00B883A +@00000270 D8C00145 +@00000271 D8C00517 +@00000272 D9800144 +@00000273 01C00044 +@00000274 D8800215 +@00000275 1DA1883A +@00000276 403EE83A +@00000277 10003D1E +@00000278 802D883A +@00000279 0023883A +@0000027A 003F1806 +@0000027B 07000404 +@0000027C D8000715 +@0000027D 003F9406 +@0000027E D8000715 +@0000027F 003F9206 +@00000280 D8800217 +@00000281 14400017 +@00000282 10C00104 +@00000283 D8C00215 +@00000284 8809883A +@00000285 0000BEC0 +@00000286 1021883A +@00000287 D8800517 +@00000288 B809883A +@00000289 A00B883A +@0000028A 1427C83A +@0000028B 01800804 +@0000028C 980F883A +@0000028D 00005500 +@0000028E 1000261E +@0000028F A0C00117 +@00000290 880D883A +@00000291 B809883A +@00000292 A00B883A +@00000293 800F883A +@00000294 B4ED883A +@00000295 183EE83A +@00000296 10001E1E +@00000297 B42D883A +@00000298 0023883A +@00000299 003EF906 +@0000029A 07000204 +@0000029B D8000715 +@0000029C 003F7506 +@0000029D D8C00917 +@0000029E 1821003A +@0000029F 8000031E +@000002A0 D8800517 +@000002A1 10BFFFC4 +@000002A2 D8800515 +@000002A3 D9C00517 +@000002A4 B809883A +@000002A5 A00B883A +@000002A6 01800804 +@000002A7 00005500 +@000002A8 10000C1E +@000002A9 D8C00517 +@000002AA B0ED883A +@000002AB 803F991E +@000002AC A0C00117 +@000002AD 00800B44 +@000002AE D88000C5 +@000002AF B809883A +@000002B0 A00B883A +@000002B1 D98000C4 +@000002B2 01C00044 +@000002B3 183EE83A +@000002B4 103FAC26 +@000002B5 00BFFFC4 +@000002B6 003EFE06 +@000002B7 D8000515 +@000002B8 003F4E06 +@000002B9 00C00044 +@000002BA 056BC83A +@000002BB D8C00915 +@000002BC 003F5E06 +@000002BD 2013883A +@000002BE D1200017 +@000002BF 2807883A +@000002C0 300F883A +@000002C1 480B883A +@000002C2 180D883A +@000002C3 02000034 +@000002C4 42017604 +@000002C5 4000683A +@000002C6 DEFFFA04 +@000002C7 DC400315 +@000002C8 DC800215 +@000002C9 DCC00115 +@000002CA DFC00515 +@000002CB DC000415 +@000002CC DD000015 +@000002CD 28C0000B +@000002CE 2027883A +@000002CF 2825883A +@000002D0 1804D0FA +@000002D1 3023883A +@000002D2 013FFFC4 +@000002D3 1080004C +@000002D4 10001B26 +@000002D5 2940008B +@000002D6 28BFFFCC +@000002D7 10A0001C +@000002D8 10A00004 +@000002D9 10001316 +@000002DA 3821883A +@000002DB 05010004 +@000002DC 01C00316 +@000002DD 00001B06 +@000002DE 04001A0E +@000002DF 9140008B +@000002E0 297FFFCC +@000002E1 2960001C +@000002E2 880D883A +@000002E3 9809883A +@000002E4 29600004 +@000002E5 800F883A +@000002E6 A400010E +@000002E7 01C10004 +@000002E8 0000C0C0 +@000002E9 80A1C83A +@000002EA 88A3883A +@000002EB 00BFF216 +@000002EC 90C0000B +@000002ED 18801014 +@000002EE 9080000D +@000002EF 013FFFC4 +@000002F0 2005883A +@000002F1 DFC00517 +@000002F2 DC000417 +@000002F3 DC400317 +@000002F4 DC800217 +@000002F5 DCC00117 +@000002F6 DD000017 +@000002F7 DEC00604 +@000002F8 F800283A +@000002F9 0009883A +@000002FA 003FF506 +@000002FB 20800007 +@000002FC 2007883A +@000002FD 10000326 +@000002FE 21000044 +@000002FF 20800007 +@00000300 103FFD1E +@00000301 20C5C83A +@00000302 F800283A +@00000303 DEFFFE04 +@00000304 DC000015 +@00000305 2021883A +@00000306 2809883A +@00000307 300B883A +@00000308 380D883A +@00000309 DFC00115 +@0000030A D0201815 +@0000030B 0000E980 +@0000030C 1007883A +@0000030D 00BFFFC4 +@0000030E 18800526 +@0000030F 1805883A +@00000310 DFC00117 +@00000311 DC000017 +@00000312 DEC00204 +@00000313 F800283A +@00000314 D0A01817 +@00000315 103FF926 +@00000316 80800315 +@00000317 1805883A +@00000318 DFC00117 +@00000319 DC000017 +@0000031A DEC00204 +@0000031B F800283A +@0000031C 00800044 +@0000031D 000F883A +@0000031E 2900082E +@0000031F 28000716 +@00000320 294B883A +@00000321 1085883A +@00000322 29000E2E +@00000323 1007003A +@00000324 1800081E +@00000325 283FFA0E +@00000326 1800061E +@00000327 21400236 +@00000328 2149C83A +@00000329 388EB03A +@0000032A 1004D07A +@0000032B 280AD07A +@0000032C 103FFA1E +@0000032D 3000011E +@0000032E 3809883A +@0000032F 2005883A +@00000330 F800283A +@00000331 1007003A +@00000332 183FF426 +@00000333 003FF906 +@00000334 DEFFFE04 +@00000335 DC000015 +@00000336 DFC00115 +@00000337 000D883A +@00000338 0021883A +@00000339 20000816 +@0000033A 28000A16 +@0000033B 0000C700 +@0000033C 80000126 +@0000033D 0085C83A +@0000033E DFC00117 +@0000033F DC000017 +@00000340 DEC00204 +@00000341 F800283A +@00000342 0109C83A +@00000343 0021003A +@00000344 283FF60E +@00000345 014BC83A +@00000346 8021003A +@00000347 003FF306 +@00000348 DEFFFE04 +@00000349 DC000015 +@0000034A DFC00115 +@0000034B 01800044 +@0000034C 0021883A +@0000034D 20000816 +@0000034E 28000A16 +@0000034F 0000C700 +@00000350 80000126 +@00000351 0085C83A +@00000352 DFC00117 +@00000353 DC000017 +@00000354 DEC00204 +@00000355 F800283A +@00000356 0109C83A +@00000357 3021883A +@00000358 283FF60E +@00000359 014BC83A +@0000035A 003FF406 +@0000035B 000D883A +@0000035C 02000034 +@0000035D 42031C04 +@0000035E 4000683A +@0000035F 01800044 +@00000360 02000034 +@00000361 42031C04 +@00000362 4000683A +@00000363 0007883A +@00000364 20000626 +@00000365 2080004C +@00000366 2008D07A +@00000367 10000126 +@00000368 1947883A +@00000369 294B883A +@0000036A 203FFA1E +@0000036B 1805883A +@0000036C F800283A +@0000036D DEFFFD04 +@0000036E DFC00215 +@0000036F DF000115 +@00000370 D839883A +@00000371 E0000015 +@00000372 000170FA +@00000373 00800044 +@00000374 1001703A +@00000375 E0000015 +@00000376 0000E200 +@00000377 01000034 +@00000378 210DDB04 +@00000379 01400034 +@0000037A 294DDB04 +@0000037B 01800034 +@0000037C 318DDB04 +@0000037D 0001F540 +@0000037E 0001DC80 +@0000037F 01000034 +@00000380 21078804 +@00000381 000283C0 +@00000382 D1200117 +@00000383 D1600217 +@00000384 D1A00317 +@00000385 00004380 +@00000386 1009883A +@00000387 00028D80 +@00000388 DEFFFE04 +@00000389 DFC00115 +@0000038A DF000015 +@0000038B D839883A +@0000038C 01004034 +@0000038D 21020004 +@0000038E 01400044 +@0000038F 0180FA04 +@00000390 00019880 +@00000391 01000034 +@00000392 210DFD04 +@00000393 01404034 +@00000394 29421404 +@00000395 01800404 +@00000396 00018600 +@00000397 DFC00117 +@00000398 DF000017 +@00000399 DEC00204 +@0000039A F800283A +@0000039B DEFFFD04 +@0000039C DFC00215 +@0000039D DF000115 +@0000039E D839883A +@0000039F E1000015 +@000003A0 E1000017 +@000003A1 0001B500 +@000003A2 DFC00217 +@000003A3 DF000117 +@000003A4 DEC00304 +@000003A5 F800283A +@000003A6 DEFFF704 +@000003A7 DFC00815 +@000003A8 DF000715 +@000003A9 D839883A +@000003AA E1000015 +@000003AB E1400115 +@000003AC E1800215 +@000003AD E0800017 +@000003AE 1004803A +@000003AF 1000091E +@000003B0 E1000017 +@000003B1 01400304 +@000003B2 0000D8C0 +@000003B3 1007883A +@000003B4 00800034 +@000003B5 10921F04 +@000003B6 1887883A +@000003B7 E0C00615 +@000003B8 00000106 +@000003B9 E0000615 +@000003BA E0800617 +@000003BB E0800315 +@000003BC E0800317 +@000003BD 1005003A +@000003BE 1000241E +@000003BF E0800317 +@000003C0 10800217 +@000003C1 108000CC +@000003C2 1005003A +@000003C3 10001A1E +@000003C4 E0800317 +@000003C5 10800017 +@000003C6 10800617 +@000003C7 1005003A +@000003C8 1000151E +@000003C9 E0800317 +@000003CA 10800017 +@000003CB 10800617 +@000003CC E1000317 +@000003CD E1400117 +@000003CE E1800217 +@000003CF 103EE83A +@000003D0 E0800415 +@000003D1 E0800417 +@000003D2 1004403A +@000003D3 1000071E +@000003D4 0000FB80 +@000003D5 E0C00417 +@000003D6 00C7C83A +@000003D7 10C00015 +@000003D8 00BFFFC4 +@000003D9 E0800515 +@000003DA 00000E06 +@000003DB E0800417 +@000003DC E0800515 +@000003DD 00000B06 +@000003DE 0000FB80 +@000003DF 1007883A +@000003E0 00800344 +@000003E1 18800015 +@000003E2 00000406 +@000003E3 0000FB80 +@000003E4 1007883A +@000003E5 00801444 +@000003E6 18800015 +@000003E7 00BFFFC4 +@000003E8 E0800515 +@000003E9 E0800517 +@000003EA DFC00817 +@000003EB DF000717 +@000003EC DEC00904 +@000003ED F800283A +@000003EE DEFFFD04 +@000003EF DFC00215 +@000003F0 DF000115 +@000003F1 D839883A +@000003F2 D0A00917 +@000003F3 1005003A +@000003F4 1000041E +@000003F5 D0A00917 +@000003F6 103EE83A +@000003F7 E0800015 +@000003F8 00000206 +@000003F9 D0A01804 +@000003FA E0800015 +@000003FB E0800017 +@000003FC DFC00217 +@000003FD DF000117 +@000003FE DEC00304 +@000003FF F800283A +@00000400 DEFFF204 +@00000401 DFC00D15 +@00000402 DF000C15 +@00000403 D839883A +@00000404 E1000015 +@00000405 E1400115 +@00000406 E1800215 +@00000407 E0800017 +@00000408 10800017 +@00000409 E0800315 +@0000040A E0800117 +@0000040B E0800415 +@0000040C E0000715 +@0000040D E0800217 +@0000040E 10800050 +@0000040F 10004D1E +@00000410 E0800317 +@00000411 10801417 +@00000412 E0800815 +@00000413 E0800317 +@00000414 10801517 +@00000415 E0800915 +@00000416 E0C00817 +@00000417 E0800917 +@00000418 18800536 +@00000419 E0800817 +@0000041A E0C00917 +@0000041B 10C5C83A +@0000041C E0800615 +@0000041D 00000406 +@0000041E 00820004 +@0000041F E0C00917 +@00000420 10C5C83A +@00000421 E0800615 +@00000422 E0800617 +@00000423 1004C03A +@00000424 1000011E +@00000425 00001E06 +@00000426 E0C00217 +@00000427 E0800617 +@00000428 1880022E +@00000429 E0800217 +@0000042A E0800615 +@0000042B E0C00317 +@0000042C E0800917 +@0000042D 1885883A +@0000042E 11401804 +@0000042F E1000417 +@00000430 E1800617 +@00000431 00030C00 +@00000432 E0C00417 +@00000433 E0800617 +@00000434 1885883A +@00000435 E0800415 +@00000436 E0C00217 +@00000437 E0800617 +@00000438 1885C83A +@00000439 E0800215 +@0000043A E1000317 +@0000043B E0C00917 +@0000043C E0800617 +@0000043D 1885883A +@0000043E 1081FFCC +@0000043F 20801515 +@00000440 E0800217 +@00000441 10800050 +@00000442 1000011E +@00000443 003FCC06 +@00000444 E0C00417 +@00000445 E0800117 +@00000446 18800126 +@00000447 00001506 +@00000448 E0800017 +@00000449 10800217 +@0000044A 1004D3BA +@0000044B 1080004C +@0000044C 1005003A +@0000044D 1000011E +@0000044E 00000E06 +@0000044F E0800317 +@00000450 10C01417 +@00000451 E0800817 +@00000452 1880061E +@00000453 E0800317 +@00000454 E0C00317 +@00000455 11001317 +@00000456 18800B17 +@00000457 2080012E +@00000458 003FF606 +@00000459 E0800317 +@0000045A 10C01417 +@0000045B E0800817 +@0000045C 18BFB01E +@0000045D E0000915 +@0000045E E0C00417 +@0000045F E0800117 +@00000460 18801726 +@00000461 0005303A +@00000462 E0800A15 +@00000463 0001703A +@00000464 E0800A17 +@00000465 E0800815 +@00000466 E0800817 +@00000467 E0800515 +@00000468 E0C00317 +@00000469 E0800317 +@0000046A 10801217 +@0000046B 10800054 +@0000046C 18801215 +@0000046D E0800317 +@0000046E 10800A17 +@0000046F 10800104 +@00000470 1007883A +@00000471 E0800317 +@00000472 10801217 +@00000473 18800035 +@00000474 E0800517 +@00000475 E0800A15 +@00000476 E0800A17 +@00000477 1001703A +@00000478 E0C00417 +@00000479 E0800117 +@0000047A 18800526 +@0000047B E0800417 +@0000047C E0C00117 +@0000047D 10C5C83A +@0000047E E0800B15 +@0000047F 00000B06 +@00000480 E0800017 +@00000481 10800217 +@00000482 1004D3BA +@00000483 1080004C +@00000484 1005003A +@00000485 1000031E +@00000486 00BFFD44 +@00000487 E0800B15 +@00000488 00000206 +@00000489 00BFFEC4 +@0000048A E0800B15 +@0000048B E0800B17 +@0000048C DFC00D17 +@0000048D DF000C17 +@0000048E DEC00E04 +@0000048F F800283A +@00000490 DEFFF104 +@00000491 DFC00E15 +@00000492 DF000D15 +@00000493 D839883A +@00000494 E1000015 +@00000495 E1400115 +@00000496 E1800215 +@00000497 E0000415 +@00000498 E0800017 +@00000499 10800017 +@0000049A E0800715 +@0000049B E0800117 +@0000049C E0800815 +@0000049D E0000915 +@0000049E E0800217 +@0000049F 10800050 +@000004A0 10003A1E +@000004A1 E0800717 +@000004A2 10801617 +@000004A3 E0800315 +@000004A4 E0800717 +@000004A5 10801717 +@000004A6 E0800415 +@000004A7 E0C00317 +@000004A8 E0800417 +@000004A9 1880062E +@000004AA E0C00417 +@000004AB E0800317 +@000004AC 1885C83A +@000004AD 10BFFFC4 +@000004AE E0800515 +@000004AF 00000C06 +@000004B0 E0800417 +@000004B1 1005003A +@000004B2 1000051E +@000004B3 00820004 +@000004B4 E0C00317 +@000004B5 10C5C83A +@000004B6 E0800515 +@000004B7 00000406 +@000004B8 0081FFC4 +@000004B9 E0C00317 +@000004BA 10C5C83A +@000004BB E0800515 +@000004BC E0800517 +@000004BD 1004C03A +@000004BE 1000011E +@000004BF 00001B06 +@000004C0 E0C00217 +@000004C1 E0800517 +@000004C2 1880022E +@000004C3 E0800217 +@000004C4 E0800515 +@000004C5 E0C00717 +@000004C6 E0800317 +@000004C7 1885883A +@000004C8 11021804 +@000004C9 E1400117 +@000004CA E1800517 +@000004CB 00030C00 +@000004CC E0C00117 +@000004CD E0800517 +@000004CE 1885883A +@000004CF E0800115 +@000004D0 E0C00217 +@000004D1 E0800517 +@000004D2 1885C83A +@000004D3 E0800215 +@000004D4 E1000717 +@000004D5 E0C00317 +@000004D6 E0800517 +@000004D7 1885883A +@000004D8 1081FFCC +@000004D9 20801615 +@000004DA 003FC306 +@000004DB 0005303A +@000004DC E0800B15 +@000004DD 0001703A +@000004DE E0800B17 +@000004DF E0800A15 +@000004E0 E0800A17 +@000004E1 E0800615 +@000004E2 E0C00717 +@000004E3 E0800717 +@000004E4 10801217 +@000004E5 10800094 +@000004E6 18801215 +@000004E7 E0800717 +@000004E8 10800A17 +@000004E9 10800104 +@000004EA 1007883A +@000004EB E0800717 +@000004EC 10801217 +@000004ED 18800035 +@000004EE E0800617 +@000004EF E0800B15 +@000004F0 E0800B17 +@000004F1 1001703A +@000004F2 E0800217 +@000004F3 10800050 +@000004F4 1000161E +@000004F5 E0800017 +@000004F6 10800217 +@000004F7 1004D3BA +@000004F8 1080004C +@000004F9 1005003A +@000004FA 1000011E +@000004FB 00001306 +@000004FC E0800717 +@000004FD 10C01717 +@000004FE E0800417 +@000004FF 1880061E +@00000500 E0800717 +@00000501 E0C00717 +@00000502 11001317 +@00000503 18800B17 +@00000504 2080012E +@00000505 003FF606 +@00000506 E0800717 +@00000507 10C01717 +@00000508 E0800417 +@00000509 1880011E +@0000050A 00000406 +@0000050B E0800217 +@0000050C 10800050 +@0000050D 1000011E +@0000050E 003F8F06 +@0000050F E0000B15 +@00000510 E0C00117 +@00000511 E0800817 +@00000512 18800526 +@00000513 E0800117 +@00000514 E0C00817 +@00000515 10C5C83A +@00000516 E0800C15 +@00000517 00000B06 +@00000518 E0800017 +@00000519 10800217 +@0000051A 1004D3BA +@0000051B 1080004C +@0000051C 1005003A +@0000051D 1000031E +@0000051E 00BFFD44 +@0000051F E0800C15 +@00000520 00000206 +@00000521 00BFFEC4 +@00000522 E0800C15 +@00000523 E0800C17 +@00000524 DFC00E17 +@00000525 DF000D17 +@00000526 DEC00F04 +@00000527 F800283A +@00000528 DEFFF804 +@00000529 DF000715 +@0000052A D839883A +@0000052B E1000015 +@0000052C E1400115 +@0000052D E0800017 +@0000052E E0800215 +@0000052F E0800217 +@00000530 10800A17 +@00000531 E0800315 +@00000532 E0800317 +@00000533 10800104 +@00000534 10800037 +@00000535 E0800415 +@00000536 E0800417 +@00000537 1080C00C +@00000538 1004C03A +@00000539 1000011E +@0000053A 00006E06 +@0000053B E0800417 +@0000053C 1004D23A +@0000053D 1080004C +@0000053E 1005003A +@0000053F 1000351E +@00000540 00800074 +@00000541 10800004 +@00000542 E0800515 +@00000543 E0800217 +@00000544 10801417 +@00000545 10800044 +@00000546 1081FFCC +@00000547 E0800615 +@00000548 E0800217 +@00000549 10C01517 +@0000054A E0800617 +@0000054B 1880011E +@0000054C 00001806 +@0000054D E0800317 +@0000054E 10800037 +@0000054F E0800515 +@00000550 E0800517 +@00000551 1004D3FA +@00000552 1080005C +@00000553 1080004C +@00000554 1005003A +@00000555 1000011E +@00000556 00000E06 +@00000557 E0C00217 +@00000558 E0800217 +@00000559 10801417 +@0000055A 1885883A +@0000055B 10C01804 +@0000055C E0800517 +@0000055D 18800005 +@0000055E E0C00217 +@0000055F E0800217 +@00000560 10801417 +@00000561 10800044 +@00000562 1081FFCC +@00000563 18801415 +@00000564 003FDE06 +@00000565 E0800517 +@00000566 10BFFFEC +@00000567 1005003A +@00000568 10000C1E +@00000569 E1000217 +@0000056A E0800217 +@0000056B 10C01217 +@0000056C 00BFFF84 +@0000056D 1884703A +@0000056E 20801215 +@0000056F E0800317 +@00000570 10800104 +@00000571 1007883A +@00000572 E0800217 +@00000573 10801217 +@00000574 18800035 +@00000575 E0800417 +@00000576 1004D27A +@00000577 1080004C +@00000578 1005003A +@00000579 103FB81E +@0000057A E0800417 +@0000057B 10BFFFEC +@0000057C 1004D43A +@0000057D E0800615 +@0000057E E0800617 +@0000057F 1005003A +@00000580 1000171E +@00000581 E0800217 +@00000582 E0C00217 +@00000583 11001717 +@00000584 18801617 +@00000585 20801226 +@00000586 E1000317 +@00000587 E0C00217 +@00000588 E0800217 +@00000589 10801717 +@0000058A 1885883A +@0000058B 10821804 +@0000058C 10800007 +@0000058D 20800035 +@0000058E E0C00217 +@0000058F E0800217 +@00000590 10801717 +@00000591 10800044 +@00000592 1081FFCC +@00000593 18801715 +@00000594 E0800617 +@00000595 10BFFFC4 +@00000596 E0800615 +@00000597 003FE606 +@00000598 E0800617 +@00000599 1005003A +@0000059A 103F971E +@0000059B E1000217 +@0000059C E0800217 +@0000059D 10C01217 +@0000059E 00BFFF44 +@0000059F 1884703A +@000005A0 20801215 +@000005A1 E0800217 +@000005A2 10800A17 +@000005A3 10800104 +@000005A4 1007883A +@000005A5 E0800217 +@000005A6 10801217 +@000005A7 18800035 +@000005A8 003F8906 +@000005A9 DF000717 +@000005AA DEC00804 +@000005AB F800283A +@000005AC DEFFF604 +@000005AD DF000915 +@000005AE D839883A +@000005AF E1000015 +@000005B0 E1400115 +@000005B1 E1800215 +@000005B2 E0800017 +@000005B3 10800017 +@000005B4 E0800315 +@000005B5 00BFF9C4 +@000005B6 E0800415 +@000005B7 E0800117 +@000005B8 E0800815 +@000005B9 E0C00817 +@000005BA 189A8060 +@000005BB 1000041E +@000005BC E0C00817 +@000005BD 189A80A0 +@000005BE 10001D1E +@000005BF 00002906 +@000005C0 E0800317 +@000005C1 10C00B17 +@000005C2 00A00034 +@000005C3 10BFFFC4 +@000005C4 18802426 +@000005C5 E0800217 +@000005C6 10800017 +@000005C7 E0800515 +@000005C8 E0800317 +@000005C9 E0800615 +@000005CA E0800517 +@000005CB 10800090 +@000005CC 1000071E +@000005CD E0C00517 +@000005CE 00A00034 +@000005CF 10BFFFC4 +@000005D0 18800326 +@000005D1 E0C00517 +@000005D2 E0C00715 +@000005D3 00000306 +@000005D4 00A00034 +@000005D5 10BFFF84 +@000005D6 E0800715 +@000005D7 E0C00717 +@000005D8 E0800617 +@000005D9 10C00B15 +@000005DA E0000415 +@000005DB 00000D06 +@000005DC E0800317 +@000005DD 10C00B17 +@000005DE 00A00034 +@000005DF 10BFFFC4 +@000005E0 18800826 +@000005E1 E1400217 +@000005E2 E0800317 +@000005E3 E0C00317 +@000005E4 11001317 +@000005E5 18800B17 +@000005E6 2085803A +@000005E7 28800015 +@000005E8 E0000415 +@000005E9 E0800417 +@000005EA DF000917 +@000005EB DEC00A04 +@000005EC F800283A +@000005ED DEFFFB04 +@000005EE DF000415 +@000005EF D839883A +@000005F0 E1000015 +@000005F1 E0800017 +@000005F2 E0800215 +@000005F3 E0800217 +@000005F4 10800A17 +@000005F5 10800104 +@000005F6 10800037 +@000005F7 E0800115 +@000005F8 E0800117 +@000005F9 1004D2BA +@000005FA 1080004C +@000005FB 1005003A +@000005FC 10000B1E +@000005FD E0800217 +@000005FE 10800A17 +@000005FF 10800104 +@00000600 1007883A +@00000601 E0800217 +@00000602 10801217 +@00000603 10810014 +@00000604 18800035 +@00000605 E0800217 +@00000606 10001315 +@00000607 00000A06 +@00000608 E0800217 +@00000609 10C01317 +@0000060A 00A00034 +@0000060B 10BFFF04 +@0000060C 10C00536 +@0000060D E0C00217 +@0000060E E0800217 +@0000060F 10801317 +@00000610 10800044 +@00000611 18801315 +@00000612 D0A00C17 +@00000613 E0800315 +@00000614 E0800317 +@00000615 DF000417 +@00000616 DEC00504 +@00000617 F800283A +@00000618 DEFFF704 +@00000619 DFC00815 +@0000061A DF000715 +@0000061B D839883A +@0000061C E1000015 +@0000061D E1400115 +@0000061E E1800215 +@0000061F E0000315 +@00000620 E0000415 +@00000621 E0000515 +@00000622 E0C00017 +@00000623 00800044 +@00000624 18801215 +@00000625 E0800117 +@00000626 10800104 +@00000627 1007883A +@00000628 E0800017 +@00000629 10801217 +@0000062A 18800035 +@0000062B E1000217 +@0000062C E1400017 +@0000062D 01800034 +@0000062E 31852804 +@0000062F 0001FC80 +@00000630 1004803A +@00000631 1000021E +@00000632 E1000017 +@00000633 00019240 +@00000634 E0800017 +@00000635 10001315 +@00000636 D0A00C17 +@00000637 E0800615 +@00000638 E1400617 +@00000639 E0800017 +@0000063A 11000C04 +@0000063B 01800034 +@0000063C 3185ED04 +@0000063D E1C00017 +@0000063E 0001A080 +@0000063F 1004403A +@00000640 1000041E +@00000641 E0C00017 +@00000642 00A00034 +@00000643 10BFFFC4 +@00000644 18800B15 +@00000645 DFC00817 +@00000646 DF000717 +@00000647 DEC00904 +@00000648 F800283A +@00000649 DEFFFD04 +@0000064A DFC00215 +@0000064B DF000115 +@0000064C D839883A +@0000064D E1000015 +@0000064E E1000017 +@0000064F D1600604 +@00000650 0001CD00 +@00000651 DFC00217 +@00000652 DF000117 +@00000653 DEC00304 +@00000654 F800283A +@00000655 DEFFFC04 +@00000656 DFC00315 +@00000657 DF000215 +@00000658 D839883A +@00000659 E1000015 +@0000065A E1400115 +@0000065B E0800017 +@0000065C 10000035 +@0000065D 00025040 +@0000065E DFC00317 +@0000065F DF000217 +@00000660 DEC00404 +@00000661 F800283A +@00000662 DEFFF904 +@00000663 DFC00615 +@00000664 DF000515 +@00000665 D839883A +@00000666 E1000015 +@00000667 E1400115 +@00000668 E1800215 +@00000669 E0800217 +@0000066A E0800315 +@0000066B D0A00C17 +@0000066C 1004C03A +@0000066D 1000041E +@0000066E E0800317 +@0000066F D0A00C15 +@00000670 E0000415 +@00000671 00000206 +@00000672 00BFFFC4 +@00000673 E0800415 +@00000674 E0800017 +@00000675 10800104 +@00000676 1007883A +@00000677 008001C4 +@00000678 18800035 +@00000679 E1000117 +@0000067A E1400017 +@0000067B 01800034 +@0000067C 31865504 +@0000067D 0001FC80 +@0000067E DFC00617 +@0000067F DF000517 +@00000680 DEC00704 +@00000681 F800283A +@00000682 DEFFF504 +@00000683 DF000A15 +@00000684 D839883A +@00000685 E1000015 +@00000686 E1400115 +@00000687 E1800215 +@00000688 E1C00315 +@00000689 E0000515 +@0000068A D0A00C17 +@0000068B E0800615 +@0000068C E0800617 +@0000068D 1005003A +@0000068E 10003F1E +@0000068F E0800017 +@00000690 1005003A +@00000691 1000391E +@00000692 E0C00017 +@00000693 E0800217 +@00000694 18800315 +@00000695 E0C00017 +@00000696 E0800317 +@00000697 18800515 +@00000698 0005303A +@00000699 E0800815 +@0000069A 0001703A +@0000069B E0800817 +@0000069C E0800715 +@0000069D E0800717 +@0000069E E0800415 +@0000069F D0A00D17 +@000006A0 E0800815 +@000006A1 E0800817 +@000006A2 E0800515 +@000006A3 E1000017 +@000006A4 E0C00117 +@000006A5 E0800517 +@000006A6 1885883A +@000006A7 10800044 +@000006A8 20800215 +@000006A9 E0800017 +@000006AA 10C00217 +@000006AB E0800517 +@000006AC 1880042E +@000006AD E0C00017 +@000006AE 00800044 +@000006AF 18800405 +@000006B0 00000206 +@000006B1 E0800017 +@000006B2 10000405 +@000006B3 D0A00E04 +@000006B4 E0800815 +@000006B5 E0800017 +@000006B6 E0800715 +@000006B7 E0C00717 +@000006B8 E0800817 +@000006B9 18800115 +@000006BA E0C00717 +@000006BB E0800817 +@000006BC 10800017 +@000006BD 18800015 +@000006BE E0800817 +@000006BF 10C00017 +@000006C0 E0800717 +@000006C1 18800115 +@000006C2 E0C00817 +@000006C3 E0800717 +@000006C4 18800015 +@000006C5 E0800417 +@000006C6 E0800815 +@000006C7 E0800817 +@000006C8 1001703A +@000006C9 E0000915 +@000006CA 00000506 +@000006CB 00BFFA84 +@000006CC E0800915 +@000006CD 00000206 +@000006CE 00BFDE84 +@000006CF E0800915 +@000006D0 E0800917 +@000006D1 DF000A17 +@000006D2 DEC00B04 +@000006D3 F800283A +@000006D4 DEFFFA04 +@000006D5 DFC00515 +@000006D6 DF000415 +@000006D7 D839883A +@000006D8 E1000015 +@000006D9 008000C4 +@000006DA E0800315 +@000006DB E1000317 +@000006DC 014003F4 +@000006DD 29509004 +@000006DE 0000D8C0 +@000006DF 100B883A +@000006E0 01005BB4 +@000006E1 210D8004 +@000006E2 0000D6C0 +@000006E3 100B883A +@000006E4 01200034 +@000006E5 213FFFC4 +@000006E6 0000D6C0 +@000006E7 100B883A +@000006E8 E1000017 +@000006E9 0000D6C0 +@000006EA E0800215 +@000006EB E0800217 +@000006EC 1005003A +@000006ED 10002A1E +@000006EE E0000115 +@000006EF E0C00117 +@000006F0 E0800217 +@000006F1 1880180E +@000006F2 00A00034 +@000006F3 10BFFFC4 +@000006F4 10BFFFC4 +@000006F5 103FFE1E +@000006F6 E1000317 +@000006F7 014003F4 +@000006F8 29509004 +@000006F9 0000D8C0 +@000006FA 100B883A +@000006FB 01005BB4 +@000006FC 210D8004 +@000006FD 0000D6C0 +@000006FE 100B883A +@000006FF 01200034 +@00000700 213FFFC4 +@00000701 0000D6C0 +@00000702 1007883A +@00000703 E0800017 +@00000704 10C5C83A +@00000705 E0800015 +@00000706 E0800117 +@00000707 10800044 +@00000708 E0800115 +@00000709 003FE506 +@0000070A E1000317 +@0000070B 014003F4 +@0000070C 29509004 +@0000070D 0000D8C0 +@0000070E 100B883A +@0000070F 01005BB4 +@00000710 210D8004 +@00000711 0000D6C0 +@00000712 1009883A +@00000713 E1400017 +@00000714 0000D8C0 +@00000715 10BFFFC4 +@00000716 103FFE1E +@00000717 00000D06 +@00000718 E1000317 +@00000719 014003F4 +@0000071A 29509004 +@0000071B 0000D8C0 +@0000071C 100B883A +@0000071D 01005BB4 +@0000071E 210D8004 +@0000071F 0000D6C0 +@00000720 1009883A +@00000721 E1400017 +@00000722 0000D8C0 +@00000723 10BFFFC4 +@00000724 00BFFE16 +@00000725 0005883A +@00000726 DFC00517 +@00000727 DF000417 +@00000728 DEC00604 +@00000729 F800283A +@0000072A DEFFFC04 +@0000072B DF000315 +@0000072C D839883A +@0000072D E1000015 +@0000072E E1400115 +@0000072F E1800215 +@00000730 E0800217 +@00000731 DF000317 +@00000732 DEC00404 +@00000733 F800283A +@00000734 DEFFF904 +@00000735 DFC00615 +@00000736 DF000515 +@00000737 D839883A +@00000738 E1000015 +@00000739 E1400115 +@0000073A E0800017 +@0000073B 1005003A +@0000073C 1000041E +@0000073D E0800017 +@0000073E 10800217 +@0000073F 1004C03A +@00000740 1000071E +@00000741 0001D800 +@00000742 1007883A +@00000743 00800584 +@00000744 18800015 +@00000745 00BFFA84 +@00000746 E0800415 +@00000747 00001306 +@00000748 E0800117 +@00000749 E0800215 +@0000074A E0800017 +@0000074B E0800315 +@0000074C E0C00317 +@0000074D E0800217 +@0000074E 18800115 +@0000074F E0C00317 +@00000750 E0800217 +@00000751 10800017 +@00000752 18800015 +@00000753 E0800217 +@00000754 10C00017 +@00000755 E0800317 +@00000756 18800115 +@00000757 E0C00217 +@00000758 E0800317 +@00000759 18800015 +@0000075A E0000415 +@0000075B E0800417 +@0000075C DFC00617 +@0000075D DF000517 +@0000075E DEC00704 +@0000075F F800283A +@00000760 DEFFFD04 +@00000761 DFC00215 +@00000762 DF000115 +@00000763 D839883A +@00000764 D0A00917 +@00000765 1005003A +@00000766 1000041E +@00000767 D0A00917 +@00000768 103EE83A +@00000769 E0800015 +@0000076A 00000206 +@0000076B D0A01804 +@0000076C E0800015 +@0000076D E0800017 +@0000076E DFC00217 +@0000076F DF000117 +@00000770 DEC00304 +@00000771 F800283A +@00000772 DEFFFD04 +@00000773 DFC00215 +@00000774 DF000115 +@00000775 D839883A +@00000776 00800034 +@00000777 108D8604 +@00000778 E0800015 +@00000779 E0C00017 +@0000077A 00800034 +@0000077B 108D8704 +@0000077C 18800736 +@0000077D E0800017 +@0000077E 10800017 +@0000077F 103EE83A +@00000780 E0800017 +@00000781 10BFFF04 +@00000782 E0800015 +@00000783 003FF506 +@00000784 DFC00217 +@00000785 DF000117 +@00000786 DEC00304 +@00000787 F800283A +@00000788 DEFFFD04 +@00000789 DFC00215 +@0000078A DF000115 +@0000078B D839883A +@0000078C 00800034 +@0000078D 108D8604 +@0000078E E0800015 +@0000078F E0C00017 +@00000790 00800034 +@00000791 108D8704 +@00000792 18800736 +@00000793 E0800017 +@00000794 10800017 +@00000795 103EE83A +@00000796 E0800017 +@00000797 10BFFF04 +@00000798 E0800015 +@00000799 003FF506 +@0000079A DFC00217 +@0000079B DF000117 +@0000079C DEC00304 +@0000079D F800283A +@0000079E DEFFF704 +@0000079F DFC00815 +@000007A0 DF000715 +@000007A1 DC000615 +@000007A2 DC400515 +@000007A3 D839883A +@000007A4 E1000015 +@000007A5 E1400115 +@000007A6 E1800215 +@000007A7 E1C00315 +@000007A8 E1000117 +@000007A9 E1400217 +@000007AA E1800317 +@000007AB 00022300 +@000007AC E0800415 +@000007AD E0800417 +@000007AE 1004803A +@000007AF 10001F1E +@000007B0 E4000017 +@000007B1 04400034 +@000007B2 8C521F04 +@000007B3 E1000417 +@000007B4 01400304 +@000007B5 0000D8C0 +@000007B6 1445883A +@000007B7 10800017 +@000007B8 80800015 +@000007B9 E4000017 +@000007BA 04400034 +@000007BB 8C521F04 +@000007BC E1000417 +@000007BD 01400304 +@000007BE 0000D8C0 +@000007BF 1445883A +@000007C0 10800104 +@000007C1 10800017 +@000007C2 80800115 +@000007C3 E4000017 +@000007C4 04400034 +@000007C5 8C521F04 +@000007C6 E1000417 +@000007C7 01400304 +@000007C8 0000D8C0 +@000007C9 1445883A +@000007CA 10800204 +@000007CB 10800017 +@000007CC 80800215 +@000007CD E1000417 +@000007CE 00024000 +@000007CF DFC00817 +@000007D0 DF000717 +@000007D1 DC000617 +@000007D2 DC400517 +@000007D3 DEC00904 +@000007D4 F800283A +@000007D5 DEFFFB04 +@000007D6 DFC00415 +@000007D7 DF000315 +@000007D8 D839883A +@000007D9 E1000015 +@000007DA E1400115 +@000007DB E1800215 +@000007DC 01000034 +@000007DD 21122204 +@000007DE E1400017 +@000007DF 01800044 +@000007E0 01C07FC4 +@000007E1 0001E780 +@000007E2 01000034 +@000007E3 21121F04 +@000007E4 E1400117 +@000007E5 000D883A +@000007E6 01C07FC4 +@000007E7 0001E780 +@000007E8 01000034 +@000007E9 21122504 +@000007EA E1400217 +@000007EB 01800044 +@000007EC 01C07FC4 +@000007ED 0001E780 +@000007EE DFC00417 +@000007EF DF000317 +@000007F0 DEC00504 +@000007F1 F800283A +@000007F2 DEFFF304 +@000007F3 DF000C15 +@000007F4 D839883A +@000007F5 E1000015 +@000007F6 E1400115 +@000007F7 E1800215 +@000007F8 00BFFA84 +@000007F9 E0800315 +@000007FA E0800017 +@000007FB 10800828 +@000007FC 1000511E +@000007FD 0005303A +@000007FE E0800615 +@000007FF 0001703A +@00000800 E0800617 +@00000801 E0800515 +@00000802 E0800517 +@00000803 E0800415 +@00000804 00C00034 +@00000805 18D3A504 +@00000806 E0800017 +@00000807 100490FA +@00000808 10C7883A +@00000809 E0800217 +@0000080A 18800015 +@0000080B 00C00034 +@0000080C 18D3A504 +@0000080D E0800017 +@0000080E 100490FA +@0000080F 10C5883A +@00000810 10C00104 +@00000811 E0800117 +@00000812 18800015 +@00000813 E0800217 +@00000814 1005003A +@00000815 1000191E +@00000816 E0800017 +@00000817 E0800615 +@00000818 0005303A +@00000819 E0800915 +@0000081A 0001703A +@0000081B E0800917 +@0000081C E0800815 +@0000081D E0800817 +@0000081E E0800715 +@0000081F 00C00044 +@00000820 E0800617 +@00000821 1886983A +@00000822 D0A00A17 +@00000823 10C4B03A +@00000824 D0A00A15 +@00000825 D0A00A17 +@00000826 100170FA +@00000827 E0800717 +@00000828 E0800915 +@00000829 E0800917 +@0000082A 1001703A +@0000082B E0000515 +@0000082C E0800517 +@0000082D E0800B15 +@0000082E 00001906 +@0000082F E0800017 +@00000830 E0800915 +@00000831 0005303A +@00000832 E0800A15 +@00000833 0001703A +@00000834 E0800A17 +@00000835 E0800615 +@00000836 E0800617 +@00000837 E0800715 +@00000838 00C00044 +@00000839 E0800917 +@0000083A 1884983A +@0000083B 0086303A +@0000083C D0A00A17 +@0000083D 10C4703A +@0000083E D0A00A15 +@0000083F D0A00A17 +@00000840 100170FA +@00000841 E0800717 +@00000842 E0800A15 +@00000843 E0800A17 +@00000844 1001703A +@00000845 E0000815 +@00000846 E0800817 +@00000847 E0800B15 +@00000848 E0800B17 +@00000849 E0800315 +@0000084A E0800417 +@0000084B E0800A15 +@0000084C E0800A17 +@0000084D 1001703A +@0000084E E0800317 +@0000084F DF000C17 +@00000850 DEC00D04 +@00000851 F800283A +@00000852 DEFFFA04 +@00000853 DFC00515 +@00000854 DF000415 +@00000855 DC000315 +@00000856 D839883A +@00000857 E1000015 +@00000858 E0C00017 +@00000859 E0800017 +@0000085A 10800217 +@0000085B 10900034 +@0000085C 18800215 +@0000085D E0000115 +@0000085E D0E00817 +@0000085F E0800117 +@00000860 18802436 +@00000861 04000034 +@00000862 84121F04 +@00000863 E1000117 +@00000864 01400304 +@00000865 0000D8C0 +@00000866 1405883A +@00000867 E0C00017 +@00000868 11000017 +@00000869 18800017 +@0000086A 2080161E +@0000086B 04000034 +@0000086C 84121F04 +@0000086D E1000117 +@0000086E 01400304 +@0000086F 0000D8C0 +@00000870 1405883A +@00000871 10800204 +@00000872 10800017 +@00000873 1004403A +@00000874 10000C1E +@00000875 E1000117 +@00000876 01400304 +@00000877 0000D8C0 +@00000878 1007883A +@00000879 00800034 +@0000087A 10921F04 +@0000087B 1887883A +@0000087C E0800017 +@0000087D 18800326 +@0000087E 00BFFCC4 +@0000087F E0800215 +@00000880 00000506 +@00000881 E0800117 +@00000882 10800044 +@00000883 E0800115 +@00000884 003FD906 +@00000885 E0000215 +@00000886 E0800217 +@00000887 DFC00517 +@00000888 DF000417 +@00000889 DC000317 +@0000088A DEC00604 +@0000088B F800283A +@0000088C DEFFF404 +@0000088D DFC00B15 +@0000088E DF000A15 +@0000088F D839883A +@00000890 E1000015 +@00000891 E1400115 +@00000892 E1800215 +@00000893 00BFFFC4 +@00000894 E0800515 +@00000895 00BFFB44 +@00000896 E0800615 +@00000897 E0000715 +@00000898 E1000017 +@00000899 D1600604 +@0000089A 00026040 +@0000089B E0800315 +@0000089C E0800317 +@0000089D 1004C03A +@0000089E 1000051E +@0000089F E1000017 +@000008A0 00026940 +@000008A1 E0800315 +@000008A2 00800044 +@000008A3 E0800715 +@000008A4 E0800317 +@000008A5 1005003A +@000008A6 1000321E +@000008A7 E1000317 +@000008A8 00027780 +@000008A9 E0800515 +@000008AA E0800517 +@000008AB 1004403A +@000008AC 1000031E +@000008AD E0800517 +@000008AE E0800615 +@000008AF 00002B06 +@000008B0 E1000517 +@000008B1 01400304 +@000008B2 0000D8C0 +@000008B3 1007883A +@000008B4 00800034 +@000008B5 10921F04 +@000008B6 1885883A +@000008B7 E0800415 +@000008B8 E1000417 +@000008B9 E0C00117 +@000008BA 00900034 +@000008BB 10BFFFC4 +@000008BC 1884703A +@000008BD 20800215 +@000008BE E0800717 +@000008BF 1004C03A +@000008C0 1000071E +@000008C1 E1000417 +@000008C2 00021480 +@000008C3 E0800615 +@000008C4 E0800617 +@000008C5 1004403A +@000008C6 1000011E +@000008C7 00001306 +@000008C8 E0800317 +@000008C9 10800317 +@000008CA 1005003A +@000008CB 1000091E +@000008CC E0800317 +@000008CD 10800317 +@000008CE E1000417 +@000008CF E1400017 +@000008D0 E1800117 +@000008D1 E1C00217 +@000008D2 103EE83A +@000008D3 E0800915 +@000008D4 00000106 +@000008D5 E0000915 +@000008D6 E0800917 +@000008D7 E0800615 +@000008D8 00000206 +@000008D9 00BFFB44 +@000008DA E0800615 +@000008DB E0800617 +@000008DC 1004403A +@000008DD 1000091E +@000008DE E1000517 +@000008DF 00024000 +@000008E0 00023B80 +@000008E1 E0C00617 +@000008E2 00C7C83A +@000008E3 10C00015 +@000008E4 00BFFFC4 +@000008E5 E0800815 +@000008E6 00000206 +@000008E7 E0800517 +@000008E8 E0800815 +@000008E9 E0800817 +@000008EA DFC00B17 +@000008EB DF000A17 +@000008EC DEC00C04 +@000008ED F800283A +@000008EE DEFFFD04 +@000008EF DFC00215 +@000008F0 DF000115 +@000008F1 D839883A +@000008F2 D0A00917 +@000008F3 1005003A +@000008F4 1000041E +@000008F5 D0A00917 +@000008F6 103EE83A +@000008F7 E0800015 +@000008F8 00000206 +@000008F9 D0A01804 +@000008FA E0800015 +@000008FB E0800017 +@000008FC DFC00217 +@000008FD DF000117 +@000008FE DEC00304 +@000008FF F800283A +@00000900 DEFFFC04 +@00000901 DFC00315 +@00000902 DF000215 +@00000903 DC000115 +@00000904 D839883A +@00000905 E1000015 +@00000906 E0800017 +@00000907 108000D0 +@00000908 10000F1E +@00000909 04000034 +@0000090A 84121F04 +@0000090B E1000017 +@0000090C 01400304 +@0000090D 0000D8C0 +@0000090E 1405883A +@0000090F 10800204 +@00000910 10000015 +@00000911 04000034 +@00000912 84121F04 +@00000913 E1000017 +@00000914 01400304 +@00000915 0000D8C0 +@00000916 1405883A +@00000917 10000015 +@00000918 DFC00317 +@00000919 DF000217 +@0000091A DC000117 +@0000091B DEC00404 +@0000091C F800283A +@0000091D DEFFFB04 +@0000091E DF000415 +@0000091F D839883A +@00000920 E1000015 +@00000921 0005303A +@00000922 E0800315 +@00000923 0001703A +@00000924 E0800317 +@00000925 E0800215 +@00000926 E0800217 +@00000927 E0800115 +@00000928 E0800017 +@00000929 E0800315 +@0000092A E0800317 +@0000092B 10C00017 +@0000092C E0800317 +@0000092D 10800117 +@0000092E 18800115 +@0000092F E0800317 +@00000930 10C00117 +@00000931 E0800317 +@00000932 10800017 +@00000933 18800015 +@00000934 E0C00317 +@00000935 E0800317 +@00000936 18800115 +@00000937 E0C00317 +@00000938 E0800317 +@00000939 18800015 +@0000093A E0800117 +@0000093B E0800315 +@0000093C E0800317 +@0000093D 1001703A +@0000093E DF000417 +@0000093F DEC00504 +@00000940 F800283A +@00000941 DEFFFB04 +@00000942 DFC00415 +@00000943 DF000315 +@00000944 D839883A +@00000945 D0A00E17 +@00000946 E0800115 +@00000947 D0A00D17 +@00000948 10800044 +@00000949 D0A00D15 +@0000094A E0C00117 +@0000094B D0A00E04 +@0000094C 18803026 +@0000094D E0800117 +@0000094E 10800017 +@0000094F E0800015 +@00000950 E0800117 +@00000951 10800403 +@00000952 1005003A +@00000953 1000051E +@00000954 D0A00D17 +@00000955 1004C03A +@00000956 1000021E +@00000957 E0800117 +@00000958 10000405 +@00000959 E0800117 +@0000095A 10C00217 +@0000095B D0A00D17 +@0000095C 10C01D36 +@0000095D E0800117 +@0000095E 10800403 +@0000095F 1004C03A +@00000960 1000191E +@00000961 E0800117 +@00000962 E0C00117 +@00000963 10800317 +@00000964 19000517 +@00000965 103EE83A +@00000966 E0800215 +@00000967 E0800217 +@00000968 1004C03A +@00000969 1000031E +@0000096A E1000117 +@0000096B 00024740 +@0000096C 00000D06 +@0000096D E1000117 +@0000096E E0800117 +@0000096F 10C00217 +@00000970 E0800217 +@00000971 1885883A +@00000972 20800215 +@00000973 E0800117 +@00000974 10C00217 +@00000975 D0A00D17 +@00000976 1880032E +@00000977 E0C00117 +@00000978 00800044 +@00000979 18800405 +@0000097A E0800017 +@0000097B E0800115 +@0000097C 003FCD06 +@0000097D DFC00417 +@0000097E DF000317 +@0000097F DEC00504 +@00000980 F800283A +@00000981 DEFFF904 +@00000982 DFC00615 +@00000983 DF000515 +@00000984 D839883A +@00000985 E1000015 +@00000986 E1400115 +@00000987 E0800117 +@00000988 10800017 +@00000989 E0800215 +@0000098A E1000017 +@0000098B 0000BEC0 +@0000098C 10800044 +@0000098D E0800315 +@0000098E E0C00217 +@0000098F E0800117 +@00000990 18800E26 +@00000991 E0800217 +@00000992 11000217 +@00000993 E1400017 +@00000994 E1800317 +@00000995 00030840 +@00000996 1004C03A +@00000997 1000031E +@00000998 E0800217 +@00000999 E0800415 +@0000099A 00000506 +@0000099B E0800217 +@0000099C 10800017 +@0000099D E0800215 +@0000099E 003FEF06 +@0000099F E0000415 +@000009A0 E0800417 +@000009A1 DFC00617 +@000009A2 DF000517 +@000009A3 DEC00704 +@000009A4 F800283A +@000009A5 DEFFFA04 +@000009A6 DFC00515 +@000009A7 DF000415 +@000009A8 D839883A +@000009A9 E1000015 +@000009AA D0A00417 +@000009AB E0800115 +@000009AC E0C00117 +@000009AD D0A00404 +@000009AE 18802926 +@000009AF E0800117 +@000009B0 11000217 +@000009B1 0000BEC0 +@000009B2 E0800215 +@000009B3 E0800117 +@000009B4 10C00217 +@000009B5 E0800217 +@000009B6 1885883A +@000009B7 10BFFFC4 +@000009B8 10800007 +@000009B9 10800BD8 +@000009BA 1000031E +@000009BB E0800217 +@000009BC 10BFFFC4 +@000009BD E0800215 +@000009BE E0C00017 +@000009BF E0800217 +@000009C0 1885883A +@000009C1 10800007 +@000009C2 10800BE0 +@000009C3 1000061E +@000009C4 E0C00017 +@000009C5 E0800217 +@000009C6 1885883A +@000009C7 10800007 +@000009C8 1004C03A +@000009C9 10000A1E +@000009CA E0800117 +@000009CB 11000217 +@000009CC E1400017 +@000009CD E1800217 +@000009CE 00030840 +@000009CF 1004C03A +@000009D0 1000031E +@000009D1 E0800117 +@000009D2 E0800315 +@000009D3 00000506 +@000009D4 E0800117 +@000009D5 10800017 +@000009D6 E0800115 +@000009D7 003FD406 +@000009D8 E0000315 +@000009D9 E0800317 +@000009DA DFC00517 +@000009DB DF000417 +@000009DC DEC00604 +@000009DD F800283A +@000009DE DEFFF804 +@000009DF DFC00715 +@000009E0 DF000615 +@000009E1 DC000515 +@000009E2 D839883A +@000009E3 E1000015 +@000009E4 00BFFA04 +@000009E5 E0800215 +@000009E6 E0000315 +@000009E7 E0000115 +@000009E8 E0800117 +@000009E9 10800808 +@000009EA 10001D1E +@000009EB 04000034 +@000009EC 84121F04 +@000009ED E1000117 +@000009EE 01400304 +@000009EF 0000D8C0 +@000009F0 1405883A +@000009F1 10800017 +@000009F2 1004C03A +@000009F3 1000101E +@000009F4 04000034 +@000009F5 84121F04 +@000009F6 E1000117 +@000009F7 01400304 +@000009F8 0000D8C0 +@000009F9 1407883A +@000009FA E0800017 +@000009FB 18800015 +@000009FC E0C00117 +@000009FD D0A00817 +@000009FE 10C0020E +@000009FF E0800117 +@00000A00 D0A00815 +@00000A01 E0800117 +@00000A02 E0800215 +@00000A03 00000406 +@00000A04 E0800117 +@00000A05 10800044 +@00000A06 E0800115 +@00000A07 003FE006 +@00000A08 E0000415 +@00000A09 E0800217 +@00000A0A DFC00717 +@00000A0B DF000617 +@00000A0C DC000517 +@00000A0D DEC00804 +@00000A0E F800283A +@00000A0F D0A00017 +@00000A10 DEFFFE04 +@00000A11 DC000015 +@00000A12 DFC00115 +@00000A13 11400C17 +@00000A14 2021883A +@00000A15 01004304 +@00000A16 28001B26 +@00000A17 28C00117 +@00000A18 008007C4 +@00000A19 10C00D16 +@00000A1A 28800104 +@00000A1B 10C00017 +@00000A1C 000D883A +@00000A1D 180890BA +@00000A1E 18C00044 +@00000A1F 10C00015 +@00000A20 2149883A +@00000A21 24000215 +@00000A22 3005883A +@00000A23 DFC00117 +@00000A24 DC000017 +@00000A25 DEC00204 +@00000A26 F800283A +@00000A27 00029A40 +@00000A28 100B883A +@00000A29 01BFFFC4 +@00000A2A 103FF726 +@00000A2B D0E00017 +@00000A2C 10004215 +@00000A2D 10000115 +@00000A2E 18800C17 +@00000A2F 28800015 +@00000A30 19400C15 +@00000A31 003FE806 +@00000A32 01400034 +@00000A33 2953E504 +@00000A34 11400C15 +@00000A35 003FE106 +@00000A36 D0A00017 +@00000A37 DEFFF804 +@00000A38 DD800015 +@00000A39 DFC00715 +@00000A3A DC000615 +@00000A3B DC400515 +@00000A3C DC800415 +@00000A3D DCC00315 +@00000A3E DD000215 +@00000A3F DD400115 +@00000A40 15000C17 +@00000A41 202D883A +@00000A42 A0002426 +@00000A43 A0800117 +@00000A44 A5402204 +@00000A45 0027883A +@00000A46 14BFFFC4 +@00000A47 9006803A +@00000A48 1800021E +@00000A49 00800044 +@00000A4A 14A6983A +@00000A4B 1800191E +@00000A4C 900690BA +@00000A4D 1D05883A +@00000A4E 14400204 +@00000A4F 1821883A +@00000A50 00000806 +@00000A51 88800017 +@00000A52 29400017 +@00000A53 94BFFFC4 +@00000A54 843FFF04 +@00000A55 103EE83A +@00000A56 8C7FFF04 +@00000A57 9827D07A +@00000A58 90000C16 +@00000A59 A8802017 +@00000A5A 854B883A +@00000A5B B009883A +@00000A5C 14C4703A +@00000A5D 103FF31E +@00000A5E 88800017 +@00000A5F 94BFFFC4 +@00000A60 843FFF04 +@00000A61 103EE83A +@00000A62 8C7FFF04 +@00000A63 9827D07A +@00000A64 903FF40E +@00000A65 A5000017 +@00000A66 A03FDC1E +@00000A67 B009883A +@00000A68 000354C0 +@00000A69 200B883A +@00000A6A D1200017 +@00000A6B 02000034 +@00000A6C 420A7304 +@00000A6D 4000683A +@00000A6E 200B883A +@00000A6F D1200017 +@00000A70 02000034 +@00000A71 420C9904 +@00000A72 4000683A +@00000A73 DEFFF504 +@00000A74 28C002C4 +@00000A75 00800584 +@00000A76 DC400715 +@00000A77 DC800615 +@00000A78 DFC00A15 +@00000A79 DF000915 +@00000A7A DC000815 +@00000A7B DCC00515 +@00000A7C DD000415 +@00000A7D DD400315 +@00000A7E DD800215 +@00000A7F DDC00115 +@00000A80 2025883A +@00000A81 04400404 +@00000A82 10C0032E +@00000A83 00BFFE04 +@00000A84 18A2703A +@00000A85 88000116 +@00000A86 89400D2E +@00000A87 0005883A +@00000A88 DFC00A17 +@00000A89 DF000917 +@00000A8A DC000817 +@00000A8B DC400717 +@00000A8C DC800617 +@00000A8D DCC00517 +@00000A8E DD000417 +@00000A8F DD400317 +@00000A90 DD800217 +@00000A91 DDC00117 +@00000A92 DEC00B04 +@00000A93 F800283A +@00000A94 9009883A +@00000A95 000356C0 +@00000A96 00807DC4 +@00000A97 14401536 +@00000A98 03400034 +@00000A99 6B528904 +@00000A9A 8B4D883A +@00000A9B 34000317 +@00000A9C 8812D0FA +@00000A9D 81803E26 +@00000A9E 80C00117 +@00000A9F 00BFFF04 +@00000AA0 82000317 +@00000AA1 1886703A +@00000AA2 80CB883A +@00000AA3 28800117 +@00000AA4 81C00217 +@00000AA5 9009883A +@00000AA6 10800054 +@00000AA7 41C00215 +@00000AA8 28800115 +@00000AA9 3A000315 +@00000AAA 00035880 +@00000AAB 80800204 +@00000AAC 003FDB06 +@00000AAD 8806D27A +@00000AAE 8812D0FA +@00000AAF 18000926 +@00000AB0 00800104 +@00000AB1 10C02F2E +@00000AB2 00800504 +@00000AB3 1A4016C4 +@00000AB4 10C0042E +@00000AB5 00801504 +@00000AB6 10C11536 +@00000AB7 8804D33A +@00000AB8 12401B84 +@00000AB9 480490FA +@00000ABA 03400034 +@00000ABB 6B528904 +@00000ABC 134B883A +@00000ABD 2C000317 +@00000ABE 81400926 +@00000ABF 01FFFF04 +@00000AC0 018003C4 +@00000AC1 80800117 +@00000AC2 11C6703A +@00000AC3 1C49C83A +@00000AC4 3100AA16 +@00000AC5 2000690E +@00000AC6 84000317 +@00000AC7 817FF91E +@00000AC8 4A400044 +@00000AC9 03000034 +@00000ACA 63128B04 +@00000ACB 64000217 +@00000ACC 83002826 +@00000ACD 80800117 +@00000ACE 00FFFF04 +@00000ACF 10C6703A +@00000AD0 1C49C83A +@00000AD1 008003C4 +@00000AD2 11006616 +@00000AD3 63000315 +@00000AD4 63000215 +@00000AD5 20000E16 +@00000AD6 80C7883A +@00000AD7 18800117 +@00000AD8 9009883A +@00000AD9 10800054 +@00000ADA 18800115 +@00000ADB 003FCE06 +@00000ADC 81800204 +@00000ADD 34000317 +@00000ADE 81BFBF1E +@00000ADF 4A400084 +@00000AE0 003FE806 +@00000AE1 8804D1BA +@00000AE2 12400E04 +@00000AE3 003FD506 +@00000AE4 00807FC4 +@00000AE5 10C09436 +@00000AE6 1808D0FA +@00000AE7 61BFFE04 +@00000AE8 00800044 +@00000AE9 200A90FA +@00000AEA 2007D0BA +@00000AEB 31000117 +@00000AEC 2991883A +@00000AED 41C00217 +@00000AEE 10C4983A +@00000AEF 82000315 +@00000AF0 81C00215 +@00000AF1 2088B03A +@00000AF2 3C000315 +@00000AF3 31000115 +@00000AF4 44000215 +@00000AF5 4807883A +@00000AF6 4800A616 +@00000AF7 1807D0BA +@00000AF8 03400034 +@00000AF9 6B528904 +@00000AFA 00800044 +@00000AFB 10CE983A +@00000AFC 69000117 +@00000AFD 21C04836 +@00000AFE 21C4703A +@00000AFF 10000A1E +@00000B00 39CF883A +@00000B01 00BFFF04 +@00000B02 4884703A +@00000B03 21C6703A +@00000B04 12400104 +@00000B05 1800041E +@00000B06 39CF883A +@00000B07 4A400104 +@00000B08 21C4703A +@00000B09 103FFC26 +@00000B0A 480490FA +@00000B0B 4817883A +@00000B0C 134D883A +@00000B0D 300B883A +@00000B0E 2C000317 +@00000B0F 81400926 +@00000B10 02BFFF04 +@00000B11 020003C4 +@00000B12 80800117 +@00000B13 1286703A +@00000B14 1C49C83A +@00000B15 41008016 +@00000B16 2000180E +@00000B17 84000317 +@00000B18 817FF91E +@00000B19 4A400044 +@00000B1A 488000CC +@00000B1B 29400204 +@00000B1C 103FF11E +@00000B1D 588000CC +@00000B1E 31BFFE04 +@00000B1F 5AFFFFC4 +@00000B20 1000E526 +@00000B21 30800217 +@00000B22 11BFFA26 +@00000B23 03400034 +@00000B24 6B528904 +@00000B25 39CF883A +@00000B26 68C00117 +@00000B27 19C01E36 +@00000B28 3800031E +@00000B29 00001C06 +@00000B2A 39CF883A +@00000B2B 4A400104 +@00000B2C 19C4703A +@00000B2D 103FFC26 +@00000B2E 003FDB06 +@00000B2F 80C7883A +@00000B30 18800117 +@00000B31 82000317 +@00000B32 81C00217 +@00000B33 10800054 +@00000B34 9009883A +@00000B35 18800115 +@00000B36 41C00215 +@00000B37 3A000315 +@00000B38 003F7106 +@00000B39 88800054 +@00000B3A 844B883A +@00000B3B 80800115 +@00000B3C 2905883A +@00000B3D 20C00054 +@00000B3E 61400315 +@00000B3F 61400215 +@00000B40 11000015 +@00000B41 9009883A +@00000B42 2B000215 +@00000B43 28C00115 +@00000B44 2B000315 +@00000B45 003F6406 +@00000B46 6D400217 +@00000B47 00BFFF04 +@00000B48 A8C00117 +@00000B49 18AC703A +@00000B4A B449C83A +@00000B4B B4400236 +@00000B4C 008003C4 +@00000B4D 11002316 +@00000B4E D0A01317 +@00000B4F 073FFFC4 +@00000B50 B02F883A +@00000B51 8887883A +@00000B52 D0A01217 +@00000B53 ADA7883A +@00000B54 1D000404 +@00000B55 17000326 +@00000B56 18C023C4 +@00000B57 00BFE004 +@00000B58 18A8703A +@00000B59 9009883A +@00000B5A A00B883A +@00000B5B DB400015 +@00000B5C 00030F40 +@00000B5D 1021883A +@00000B5E DB400017 +@00000B5F 17000426 +@00000B60 14C03E2E +@00000B61 00800034 +@00000B62 10928904 +@00000B63 A8803B26 +@00000B64 68800217 +@00000B65 013FFF04 +@00000B66 10C00117 +@00000B67 1906703A +@00000B68 1C49C83A +@00000B69 1C400236 +@00000B6A 008003C4 +@00000B6B 11000516 +@00000B6C 9009883A +@00000B6D 00035880 +@00000B6E 003F1806 +@00000B6F 4A7FFFC4 +@00000B70 003F5706 +@00000B71 6C000217 +@00000B72 88800054 +@00000B73 21000054 +@00000B74 8447883A +@00000B75 80800115 +@00000B76 19000115 +@00000B77 9009883A +@00000B78 68C00215 +@00000B79 003F3006 +@00000B7A 180AD27A +@00000B7B 1808D0FA +@00000B7C 28000426 +@00000B7D 00800104 +@00000B7E 11405836 +@00000B7F 1804D1BA +@00000B80 11000E04 +@00000B81 200490FA +@00000B82 01400034 +@00000B83 29528904 +@00000B84 1351883A +@00000B85 41C00217 +@00000B86 3A006D26 +@00000B87 38800117 +@00000B88 013FFF04 +@00000B89 1104703A +@00000B8A 1880052E +@00000B8B 39C00217 +@00000B8C 3A000326 +@00000B8D 38800117 +@00000B8E 1104703A +@00000B8F 18BFFB36 +@00000B90 3A000317 +@00000B91 82000315 +@00000B92 81C00215 +@00000B93 3C000315 +@00000B94 44000215 +@00000B95 003F5F06 +@00000B96 82000317 +@00000B97 81C00217 +@00000B98 88800054 +@00000B99 844B883A +@00000B9A 41C00215 +@00000B9B 3A000315 +@00000B9C 003F9E06 +@00000B9D 48C000C4 +@00000B9E 003F5806 +@00000B9F 07000034 +@00000BA0 E7127F04 +@00000BA1 E0800017 +@00000BA2 1505883A +@00000BA3 E0800015 +@00000BA4 84C05826 +@00000BA5 D0E01217 +@00000BA6 00BFFFC4 +@00000BA7 18805326 +@00000BA8 E0800017 +@00000BA9 84C7C83A +@00000BAA 10C5883A +@00000BAB E0800015 +@00000BAC 80C001CC +@00000BAD 0027883A +@00000BAE 18000326 +@00000BAF 00800204 +@00000BB0 10E7C83A +@00000BB1 84E1883A +@00000BB2 8505883A +@00000BB3 10801FCC +@00000BB4 00C02004 +@00000BB5 1887C83A +@00000BB6 98E7883A +@00000BB7 9009883A +@00000BB8 980B883A +@00000BB9 DB400015 +@00000BBA 00030F40 +@00000BBB 1007883A +@00000BBC 00BFFFC4 +@00000BBD DB400017 +@00000BBE 18804E26 +@00000BBF E0800017 +@00000BC0 1C07C83A +@00000BC1 1CC9883A +@00000BC2 14C5883A +@00000BC3 E0800015 +@00000BC4 6C000215 +@00000BC5 20800054 +@00000BC6 AB404426 +@00000BC7 014003C4 +@00000BC8 2D801636 +@00000BC9 00800044 +@00000BCA 80800115 +@00000BCB 003F9806 +@00000BCC 00805504 +@00000BCD 10C00336 +@00000BCE 8804D3FA +@00000BCF 12401DC4 +@00000BD0 003EE806 +@00000BD1 00815504 +@00000BD2 02401F84 +@00000BD3 10FEE536 +@00000BD4 8804D4BA +@00000BD5 12401F04 +@00000BD6 003EE206 +@00000BD7 00800504 +@00000BD8 290016C4 +@00000BD9 117FA72E +@00000BDA 00801504 +@00000BDB 11403A36 +@00000BDC 1804D33A +@00000BDD 11001B84 +@00000BDE 003FA206 +@00000BDF 80800115 +@00000BE0 A8800117 +@00000BE1 00FFFE04 +@00000BE2 B13FFD04 +@00000BE3 20EE703A +@00000BE4 1080004C +@00000BE5 15C4B03A +@00000BE6 A8800115 +@00000BE7 ADC7883A +@00000BE8 00800144 +@00000BE9 18800215 +@00000BEA 18800115 +@00000BEB 2DC02436 +@00000BEC E0C00017 +@00000BED D0A01117 +@00000BEE 10C0012E +@00000BEF D0E01115 +@00000BF0 D0A01017 +@00000BF1 10FF722E +@00000BF2 D0E01015 +@00000BF3 003F7006 +@00000BF4 2005D0BA +@00000BF5 00C00044 +@00000BF6 29000117 +@00000BF7 1886983A +@00000BF8 20C8B03A +@00000BF9 29000115 +@00000BFA 003F9606 +@00000BFB D4201215 +@00000BFC 003FAF06 +@00000BFD 80801FCC +@00000BFE 103FA61E +@00000BFF 00800034 +@00000C00 10928904 +@00000C01 10C00217 +@00000C02 A5C9883A +@00000C03 20800054 +@00000C04 18800115 +@00000C05 003FE606 +@00000C06 68800117 +@00000C07 01C6303A +@00000C08 10C4703A +@00000C09 68800115 +@00000C0A 003F1806 +@00000C0B 80800115 +@00000C0C 003FDF06 +@00000C0D 0027883A +@00000C0E 8007883A +@00000C0F 003FAF06 +@00000C10 A9400204 +@00000C11 9009883A +@00000C12 DB400015 +@00000C13 00032640 +@00000C14 DB400017 +@00000C15 003FD606 +@00000C16 00805504 +@00000C17 11400336 +@00000C18 1804D3FA +@00000C19 11001DC4 +@00000C1A 003F6606 +@00000C1B 00815504 +@00000C1C 01001F84 +@00000C1D 117F6336 +@00000C1E 1804D4BA +@00000C1F 11001F04 +@00000C20 003F6006 +@00000C21 31BFFFC4 +@00000C22 00BFFFC4 +@00000C23 30800826 +@00000C24 100F883A +@00000C25 20C00003 +@00000C26 28800003 +@00000C27 31BFFFC4 +@00000C28 21000044 +@00000C29 29400044 +@00000C2A 1880031E +@00000C2B 31FFF91E +@00000C2C 0005883A +@00000C2D F800283A +@00000C2E 1885C83A +@00000C2F F800283A +@00000C30 31BFFFC4 +@00000C31 00BFFFC4 +@00000C32 2007883A +@00000C33 30800726 +@00000C34 100F883A +@00000C35 28800003 +@00000C36 31BFFFC4 +@00000C37 29400044 +@00000C38 18800005 +@00000C39 18C00044 +@00000C3A 31FFFA1E +@00000C3B 2005883A +@00000C3C F800283A +@00000C3D DEFFFE04 +@00000C3E DC000015 +@00000C3F 2021883A +@00000C40 2809883A +@00000C41 DFC00115 +@00000C42 D0201815 +@00000C43 00035A40 +@00000C44 1007883A +@00000C45 00BFFFC4 +@00000C46 18800526 +@00000C47 1805883A +@00000C48 DFC00117 +@00000C49 DC000017 +@00000C4A DEC00204 +@00000C4B F800283A +@00000C4C D0A01817 +@00000C4D 103FF926 +@00000C4E 80800315 +@00000C4F 003FF706 +@00000C50 DEFFFB04 +@00000C51 DCC00015 +@00000C52 04C00034 +@00000C53 9CD28904 +@00000C54 DC000315 +@00000C55 DC400215 +@00000C56 DC800115 +@00000C57 2823883A +@00000C58 2021883A +@00000C59 DFC00415 +@00000C5A 000356C0 +@00000C5B 98800217 +@00000C5C 8009883A +@00000C5D 000B883A +@00000C5E 10C00117 +@00000C5F 00BFFF04 +@00000C60 18A4703A +@00000C61 9463C83A +@00000C62 8C401BC4 +@00000C63 8822D1FA +@00000C64 00802004 +@00000C65 8C7FFFC4 +@00000C66 882291FA +@00000C67 88800616 +@00000C68 00030F40 +@00000C69 98C00217 +@00000C6A 8009883A +@00000C6B 044BC83A +@00000C6C 1C87883A +@00000C6D 18800926 +@00000C6E 00035880 +@00000C6F 0005883A +@00000C70 DFC00417 +@00000C71 DC000317 +@00000C72 DC400217 +@00000C73 DC800117 +@00000C74 DCC00017 +@00000C75 DEC00504 +@00000C76 F800283A +@00000C77 8009883A +@00000C78 00030F40 +@00000C79 944DC83A +@00000C7A 00FFFFC4 +@00000C7B 8009883A +@00000C7C 000B883A +@00000C7D 01C00034 +@00000C7E 39D27F04 +@00000C7F 31800054 +@00000C80 10C00926 +@00000C81 38800017 +@00000C82 98C00217 +@00000C83 8009883A +@00000C84 1445C83A +@00000C85 38800015 +@00000C86 19800115 +@00000C87 00035880 +@00000C88 00800044 +@00000C89 003FE606 +@00000C8A 00030F40 +@00000C8B 99400217 +@00000C8C 100D883A +@00000C8D 8009883A +@00000C8E 1165C83A +@00000C8F 008003C4 +@00000C90 90C00054 +@00000C91 14BFDC0E +@00000C92 28C00115 +@00000C93 D0E01217 +@00000C94 00800034 +@00000C95 10927F04 +@00000C96 30C7C83A +@00000C97 10C00015 +@00000C98 003FD506 +@00000C99 DEFFFD04 +@00000C9A DC000115 +@00000C9B DC400015 +@00000C9C DFC00215 +@00000C9D 2821883A +@00000C9E 2023883A +@00000C9F 28003226 +@00000CA0 000356C0 +@00000CA1 82BFFE04 +@00000CA2 51400117 +@00000CA3 00BFFF84 +@00000CA4 03000034 +@00000CA5 63128904 +@00000CA6 2892703A +@00000CA7 524D883A +@00000CA8 30C00117 +@00000CA9 61000217 +@00000CAA 00BFFF04 +@00000CAB 1896703A +@00000CAC 21804E26 +@00000CAD 2880004C +@00000CAE 32C00115 +@00000CAF 000B883A +@00000CB0 1000091E +@00000CB1 50C00017 +@00000CB2 60800204 +@00000CB3 50D5C83A +@00000CB4 51000217 +@00000CB5 48D3883A +@00000CB6 20807426 +@00000CB7 52000317 +@00000CB8 41000215 +@00000CB9 22000315 +@00000CBA 32C7883A +@00000CBB 18800117 +@00000CBC 2808C03A +@00000CBD 1080004C +@00000CBE 1000061E +@00000CBF 4AD3883A +@00000CC0 20001626 +@00000CC1 30C00217 +@00000CC2 32000317 +@00000CC3 40C00215 +@00000CC4 1A000315 +@00000CC5 48800054 +@00000CC6 5247883A +@00000CC7 50800115 +@00000CC8 1A400015 +@00000CC9 20001726 +@00000CCA 8809883A +@00000CCB 02000034 +@00000CCC 420D6204 +@00000CCD DFC00217 +@00000CCE DC000117 +@00000CCF DC400017 +@00000CD0 DEC00304 +@00000CD1 4000683A +@00000CD2 DFC00217 +@00000CD3 DC000117 +@00000CD4 DC400017 +@00000CD5 DEC00304 +@00000CD6 F800283A +@00000CD7 30C00217 +@00000CD8 00800034 +@00000CD9 10928B04 +@00000CDA 18BFE71E +@00000CDB 1A800315 +@00000CDC 1A800215 +@00000CDD 01000044 +@00000CDE 50C00215 +@00000CDF 50C00315 +@00000CE0 003FE406 +@00000CE1 00807FC4 +@00000CE2 12402B36 +@00000CE3 4806D0FA +@00000CE4 01800034 +@00000CE5 31928904 +@00000CE6 00800044 +@00000CE7 180890FA +@00000CE8 1807D0BA +@00000CE9 31400117 +@00000CEA 2191883A +@00000CEB 41C00217 +@00000CEC 10C4983A +@00000CED 52000315 +@00000CEE 51C00215 +@00000CEF 288AB03A +@00000CF0 3A800315 +@00000CF1 31400115 +@00000CF2 42800215 +@00000CF3 8809883A +@00000CF4 02000034 +@00000CF5 420D6204 +@00000CF6 DFC00217 +@00000CF7 DC000117 +@00000CF8 DC400017 +@00000CF9 DEC00304 +@00000CFA 4000683A +@00000CFB 2880004C +@00000CFC 4AD3883A +@00000CFD 1000071E +@00000CFE 50C00017 +@00000CFF 50D5C83A +@00000D00 52000317 +@00000D01 51C00217 +@00000D02 48D3883A +@00000D03 41C00215 +@00000D04 3A000315 +@00000D05 D0A01417 +@00000D06 48C00054 +@00000D07 62800215 +@00000D08 50C00115 +@00000D09 48BFC036 +@00000D0A D1601317 +@00000D0B 8809883A +@00000D0C 00031400 +@00000D0D 003FBC06 +@00000D0E 4808D27A +@00000D0F 4806D0FA +@00000D10 2000151E +@00000D11 180490FA +@00000D12 01400034 +@00000D13 29528904 +@00000D14 1311883A +@00000D15 41C00217 +@00000D16 3A001E26 +@00000D17 38800117 +@00000D18 00FFFF04 +@00000D19 10C4703A +@00000D1A 4880052E +@00000D1B 39C00217 +@00000D1C 3A000326 +@00000D1D 38800117 +@00000D1E 10C4703A +@00000D1F 48BFFB36 +@00000D20 3A000317 +@00000D21 52000315 +@00000D22 51C00215 +@00000D23 3A800315 +@00000D24 42800215 +@00000D25 003FCD06 +@00000D26 00800104 +@00000D27 11000536 +@00000D28 4804D1BA +@00000D29 10C00E04 +@00000D2A 003FE606 +@00000D2B 01400044 +@00000D2C 003F8D06 +@00000D2D 00800504 +@00000D2E 20C016C4 +@00000D2F 113FE12E +@00000D30 00801504 +@00000D31 11000A36 +@00000D32 4804D33A +@00000D33 10C01B84 +@00000D34 003FDC06 +@00000D35 1805D0BA +@00000D36 00C00044 +@00000D37 29000117 +@00000D38 1886983A +@00000D39 20C8B03A +@00000D3A 29000115 +@00000D3B 003FE506 +@00000D3C 00805504 +@00000D3D 11000336 +@00000D3E 4804D3FA +@00000D3F 10C01DC4 +@00000D40 003FD006 +@00000D41 00815504 +@00000D42 00C01F84 +@00000D43 113FCD36 +@00000D44 4804D4BA +@00000D45 10C01F04 +@00000D46 003FCA06 +@00000D47 DEFFFD04 +@00000D48 DF000215 +@00000D49 D839883A +@00000D4A E1000015 +@00000D4B E0800017 +@00000D4C E0800115 +@00000D4D 00C00044 +@00000D4E E0800117 +@00000D4F 180171BA +@00000D50 DF000217 +@00000D51 DEC00304 +@00000D52 F800283A +@00000D53 DEFFFD04 +@00000D54 DFC00215 +@00000D55 DF000115 +@00000D56 D839883A +@00000D57 E1000015 +@00000D58 E1000017 +@00000D59 000351C0 +@00000D5A 003FFF06 +@00000D5B DEFFFE04 +@00000D5C DF000115 +@00000D5D D839883A +@00000D5E E1000015 +@00000D5F DF000117 +@00000D60 DEC00204 +@00000D61 F800283A +@00000D62 DEFFFE04 +@00000D63 DF000115 +@00000D64 D839883A +@00000D65 E1000015 +@00000D66 DF000117 +@00000D67 DEC00204 +@00000D68 F800283A +@00000D69 DEFFFA04 +@00000D6A DF000515 +@00000D6B D839883A +@00000D6C E1000015 +@00000D6D 0005303A +@00000D6E E0800415 +@00000D6F 0001703A +@00000D70 E0800417 +@00000D71 E0800315 +@00000D72 E0800317 +@00000D73 E0800115 +@00000D74 D0A01517 +@00000D75 10C000C4 +@00000D76 00BFFF04 +@00000D77 1884703A +@00000D78 D0A01515 +@00000D79 D0A01517 +@00000D7A E0800215 +@00000D7B D0E01517 +@00000D7C E0800017 +@00000D7D 1885883A +@00000D7E D0A01515 +@00000D7F E0800117 +@00000D80 E0800415 +@00000D81 E0800417 +@00000D82 1001703A +@00000D83 E0800217 +@00000D84 DF000517 +@00000D85 DEC00604 +@00000D86 F800283A +@00000D87 2A2A0A0A +@00000D88 2A2A2A2A +@00000D89 2A2A2A2A +@00000D8A 2A2A2A2A +@00000D8B 2A2A2A2A +@00000D8C 2A2A2A2A +@00000D8D 2A2A2A2A +@00000D8E 0000000A +@00000D8F 6548202A +@00000D90 206F6C6C +@00000D91 6D6F7266 +@00000D92 6F694E20 +@00000D93 49492073 +@00000D94 20202021 +@00000D95 000A2A20 +@00000D96 6F43202A +@00000D97 69746E75 +@00000D98 6620676E +@00000D99 206D6F72 +@00000D9A 74203030 +@00000D9B 6666206F +@00000D9C 000A2A20 +@00000D9D 2A2A2A2A +@00000D9E 2A2A2A2A +@00000D9F 2A2A2A2A +@00000DA0 2A2A2A2A +@00000DA1 2A2A2A2A +@00000DA2 2A2A2A2A +@00000DA3 000A2A2A +@00000DA4 78323025 +@00000DA5 0020202C +@00000DA6 74747542 +@00000DA7 31206E6F +@00000DA8 0000000A +@00000DA9 74747542 +@00000DAA 32206E6F +@00000DAB 0000000A +@00000DAC 74747542 +@00000DAD 33206E6F +@00000DAE 0000000A +@00000DAF 74747542 +@00000DB0 34206E6F +@00000DB1 0000000A +@00000DB2 6961570A +@00000DB3 676E6974 +@00000DB4 002E2E2E +@00000DB5 0000002E +@00000DB6 756F590A +@00000DB7 73757020 +@00000DB8 3A646568 +@00000DB9 00002020 +@00000DBA 00000838 +@00000DBB 000007F0 +@00000DBC 000007F0 +@00000DBD 000007F0 +@00000DBE 000007F0 +@00000DBF 000007F0 +@00000DC0 000007F0 +@00000DC1 000007F0 +@00000DC2 000007F0 +@00000DC3 000007F0 +@00000DC4 000007F0 +@00000DC5 0000098C +@00000DC6 00000848 +@00000DC7 000007F0 +@00000DC8 000007F0 +@00000DC9 000007F0 +@00000DCA 000007F0 +@00000DCB 00000848 +@00000DCC 000007F0 +@00000DCD 000007F0 +@00000DCE 000007F0 +@00000DCF 000007F0 +@00000DD0 000007F0 +@00000DD1 00000A68 +@00000DD2 000007F0 +@00000DD3 000007F0 +@00000DD4 000007F0 +@00000DD5 00000A00 +@00000DD6 000007F0 +@00000DD7 000009F8 +@00000DD8 000007F0 +@00000DD9 000007F0 +@00000DDA 000009EC +@00000DDB 7665642F +@00000DDC 61746A2F +@00000DDD 61755F67 +@00000DDE 305F7472 +@00000DDF 00000000 +@00000DE0 7665642F +@00000DE1 61746A2F +@00000DE2 61755F67 +@00000DE3 305F7472 +@00000DE4 00000000 +@00000DE5 7665642F +@00000DE6 6C756E2F +@00000DE7 0000006C +@00000DE8 000037D4 +@00000DE9 000037DC +@00000DEA 000037E4 +@00000DEB 00000000 +@00000DEC 00000000 +@00000DED 00000000 +@00000DEE 00000000 +@00000DEF 00000000 +@00000DF0 00000000 +@00000DF1 00000000 +@00000DF2 00000000 +@00000DF3 00000000 +@00000DF4 00000000 +@00000DF5 00000004 +@00000DF6 00000000 +@00000DF7 0001000A +@00000DF8 00000000 +@00000DF9 0002000A +@00000DFA 00000000 +@00000DFB 00000000 +@00000DFC 00000000 +@00000DFD 00000000 +@00000DFE 00000000 +@00000DFF 00003780 +@00000E00 00000000 +@00000E01 00000000 +@00000E02 00001000 +@00000E03 00001240 +@00000E04 00000000 +@00000E05 00000000 +@00000E06 000016B0 +@00000E07 01000850 +@00000E08 0000000A +@00000E09 00000000 +@00000E0A 00000000 +@00000E0B 00000000 +@00000E0C 00000000 +@00000E0D 00000000 +@00000E0E 00000000 +@00000E0F 00000000 +@00000E10 00000000 +@00000E11 00000000 +@00000E12 00000000 +@00000E13 00000000 +@00000E14 00000000 +@00000E15 00000000 +@00000E16 00000000 +@00000E17 00000000 +@00000E18 00000000 +@00000E19 00000000 +@00000E1A 00000000 +@00000E1B 00000000 +@00000E1C 00000000 +@00000E1D 00000000 +@00000E1E 00000000 +@00000E1F 00000000 +@00000E20 00000000 +@00000E21 00000000 +@00000E22 00000000 +@00000E23 00000000 +@00000E24 00000000 +@00000E25 00000000 +@00000E26 00000000 +@00000E27 00000000 +@00000E28 00000000 +@00000E29 00000000 +@00000E2A 00000000 +@00000E2B 00000000 +@00000E2C 00000000 +@00000E2D 00000000 +@00000E2E 00000000 +@00000E2F 00000000 +@00000E30 00000000 +@00000E31 00000000 +@00000E32 00000000 +@00000E33 00000000 +@00000E34 00000000 +@00000E35 00000000 +@00000E36 00000000 +@00000E37 00000000 +@00000E38 00000000 +@00000E39 00000000 +@00000E3A 00000000 +@00000E3B 00000000 +@00000E3C 00000000 +@00000E3D 00000000 +@00000E3E 00000000 +@00000E3F 00000000 +@00000E40 00000000 +@00000E41 00000000 +@00000E42 00000000 +@00000E43 00000000 +@00000E44 00000000 +@00000E45 00000000 +@00000E46 00000000 +@00000E47 00000000 +@00000E48 00000000 +@00000E49 00000000 +@00000E4A 00000000 +@00000E4B 00000000 +@00000E4C 00000000 +@00000E4D 00000000 +@00000E4E 00000000 +@00000E4F 00000000 +@00000E50 00000000 +@00000E51 00000000 +@00000E52 00000000 +@00000E53 00000000 +@00000E54 00000000 +@00000E55 00000000 +@00000E56 00000000 +@00000E57 00000000 +@00000E58 00000000 +@00000E59 00000000 +@00000E5A 00000000 +@00000E5B 00000000 +@00000E5C 00000000 +@00000E5D 00000000 +@00000E5E 00000000 +@00000E5F 00000000 +@00000E60 00000000 +@00000E61 00000000 +@00000E62 00000000 +@00000E63 00000000 +@00000E64 00000000 +@00000E65 00000000 +@00000E66 00000000 +@00000E67 00000000 +@00000E68 00000000 +@00000E69 00000000 +@00000E6A 00000000 +@00000E6B 00000000 +@00000E6C 00000000 +@00000E6D 00000000 +@00000E6E 00000000 +@00000E6F 00000000 +@00000E70 00000000 +@00000E71 00000000 +@00000E72 00000000 +@00000E73 00000000 +@00000E74 00000000 +@00000E75 00000000 +@00000E76 00000000 +@00000E77 00000000 +@00000E78 00000000 +@00000E79 00000000 +@00000E7A 00000000 +@00000E7B 00000000 +@00000E7C 00000000 +@00000E7D 00000000 +@00000E7E 00000000 +@00000E7F 00000000 +@00000E80 00000000 +@00000E81 00000000 +@00000E82 00000000 +@00000E83 00000000 +@00000E84 00000000 +@00000E85 00000000 +@00000E86 00000000 +@00000E87 00000000 +@00000E88 00000000 +@00000E89 00000000 +@00000E8A 00000000 +@00000E8B 00000000 +@00000E8C 00000000 +@00000E8D 00000000 +@00000E8E 00000000 +@00000E8F 00000000 +@00000E90 00000000 +@00000E91 00000000 +@00000E92 00000000 +@00000E93 00000000 +@00000E94 00000000 +@00000E95 00000000 +@00000E96 00000000 +@00000E97 00000000 +@00000E98 00000000 +@00000E99 00000000 +@00000E9A 00000000 +@00000E9B 00000000 +@00000E9C 00000000 +@00000E9D 00000000 +@00000E9E 00000000 +@00000E9F 00000000 +@00000EA0 00000000 +@00000EA1 00000000 +@00000EA2 00000000 +@00000EA3 00000000 +@00000EA4 00000000 +@00000EA5 00000000 +@00000EA6 00000000 +@00000EA7 00000000 +@00000EA8 00000000 +@00000EA9 00000000 +@00000EAA 00000000 +@00000EAB 00000000 +@00000EAC 00000000 +@00000EAD 00000000 +@00000EAE 00000000 +@00000EAF 00000000 +@00000EB0 00000000 +@00000EB1 00000000 +@00000EB2 00000000 +@00000EB3 00000000 +@00000EB4 00000000 +@00000EB5 00000000 +@00000EB6 00000000 +@00000EB7 00000000 +@00000EB8 00000000 +@00000EB9 00000000 +@00000EBA 00000000 +@00000EBB 00000000 +@00000EBC 00000000 +@00000EBD 00000000 +@00000EBE 00000000 +@00000EBF 00000000 +@00000EC0 00000000 +@00000EC1 00000000 +@00000EC2 00000000 +@00000EC3 00000000 +@00000EC4 00000000 +@00000EC5 00000000 +@00000EC6 00000000 +@00000EC7 00000000 +@00000EC8 00000000 +@00000EC9 00000000 +@00000ECA 00000000 +@00000ECB 00000000 +@00000ECC 00000000 +@00000ECD 00000000 +@00000ECE 00000000 +@00000ECF 00000000 +@00000ED0 00000000 +@00000ED1 00000000 +@00000ED2 00000000 +@00000ED3 00000000 +@00000ED4 00000000 +@00000ED5 00000000 +@00000ED6 00000000 +@00000ED7 00000000 +@00000ED8 00000000 +@00000ED9 00000000 +@00000EDA 00000000 +@00000EDB 00000000 +@00000EDC 00000000 +@00000EDD 00000000 +@00000EDE 00000000 +@00000EDF 00000000 +@00000EE0 00000000 +@00000EE1 00000000 +@00000EE2 00000000 +@00000EE3 00000000 +@00000EE4 00000000 +@00000EE5 00000000 +@00000EE6 00000000 +@00000EE7 00000000 +@00000EE8 00000000 +@00000EE9 00000000 +@00000EEA 00000000 +@00000EEB 00000000 +@00000EEC 00000000 +@00000EED 00000000 +@00000EEE 00000000 +@00000EEF 00000000 +@00000EF0 00000000 +@00000EF1 00000000 +@00000EF2 00000000 +@00000EF3 00000000 +@00000EF4 00000000 +@00000EF5 00000000 +@00000EF6 00000000 +@00000EF7 00000000 +@00000EF8 00000000 +@00000EF9 00000000 +@00000EFA 00000000 +@00000EFB 00000000 +@00000EFC 00000000 +@00000EFD 00000000 +@00000EFE 00000000 +@00000EFF 00000000 +@00000F00 00000000 +@00000F01 00000000 +@00000F02 00000000 +@00000F03 00000000 +@00000F04 00000000 +@00000F05 00000000 +@00000F06 00000000 +@00000F07 00000000 +@00000F08 00000000 +@00000F09 00000000 +@00000F0A 00000000 +@00000F0B 00000000 +@00000F0C 00000000 +@00000F0D 00000000 +@00000F0E 00000000 +@00000F0F 00000000 +@00000F10 00000000 +@00000F11 00000000 +@00000F12 00000000 +@00000F13 00000000 +@00000F14 00000000 +@00000F15 00000000 +@00000F16 00000000 +@00000F17 00000000 +@00000F18 00000000 +@00000F19 00000000 +@00000F1A 00000000 +@00000F1B 00000000 +@00000F1C 00000000 +@00000F1D 00000000 +@00000F1E 00000000 +@00000F1F 00000000 +@00000F20 00000000 +@00000F21 00000000 +@00000F22 00000000 +@00000F23 00000000 +@00000F24 00000000 +@00000F25 00000000 +@00000F26 00000000 +@00000F27 00000000 +@00000F28 00000000 +@00000F29 00000000 +@00000F2A 00000000 +@00000F2B 00000000 +@00000F2C 00000000 +@00000F2D 00000000 +@00000F2E 00000000 +@00000F2F 00000000 +@00000F30 00000000 +@00000F31 00000000 +@00000F32 00000000 +@00000F33 00000000 +@00000F34 00000000 +@00000F35 00000000 +@00000F36 00000000 +@00000F37 00000000 +@00000F38 00000000 +@00000F39 00000000 +@00000F3A 00000000 +@00000F3B 00000000 +@00000F3C 00000000 +@00000F3D 00000000 +@00000F3E 00000000 +@00000F3F 00000000 +@00000F40 00000000 +@00000F41 00000000 +@00000F42 00000000 +@00000F43 00000000 +@00000F44 00000000 +@00000F45 00000000 +@00000F46 00000000 +@00000F47 00000000 +@00000F48 00000000 +@00000F49 00000000 +@00000F4A 00000000 +@00000F4B 00000000 +@00000F4C 00000000 +@00000F4D 00000000 +@00000F4E 00000000 +@00000F4F 00000000 +@00000F50 00000000 +@00000F51 00000000 +@00000F52 00000000 +@00000F53 00000000 +@00000F54 00000000 +@00000F55 00000000 +@00000F56 00000000 +@00000F57 00000000 +@00000F58 00000000 +@00000F59 00000000 +@00000F5A 00000000 +@00000F5B 00000000 +@00000F5C 00000000 +@00000F5D 00000000 +@00000F5E 00000000 +@00000F5F 00000000 +@00000F60 00000000 +@00000F61 00000000 +@00000F62 00000000 +@00000F63 00000000 +@00000F64 00000000 +@00000F65 00000000 +@00000F66 00000000 +@00000F67 00000000 +@00000F68 00000000 +@00000F69 00000000 +@00000F6A 00000000 +@00000F6B 00000000 +@00000F6C 00000000 +@00000F6D 00000000 +@00000F6E 00000000 +@00000F6F 00000000 +@00000F70 00000000 +@00000F71 00000000 +@00000F72 00000000 +@00000F73 00000000 +@00000F74 00000000 +@00000F75 00000000 +@00000F76 00000000 +@00000F77 00000000 +@00000F78 00000000 +@00000F79 00000000 +@00000F7A 00000000 +@00000F7B 00000000 +@00000F7C 00000000 +@00000F7D 00000000 +@00000F7E 00000000 +@00000F7F 00000000 +@00000F80 00000000 +@00000F81 00000000 +@00000F82 00000000 +@00000F83 00000000 +@00000F84 00000000 +@00000F85 00000000 +@00000F86 00000000 +@00000F87 00000000 +@00000F88 00000000 +@00000F89 00000000 +@00000F8A 00000000 +@00000F8B 00000000 +@00000F8C 00000000 +@00000F8D 00000000 +@00000F8E 00000000 +@00000F8F 00000000 +@00000F90 00000000 +@00000F91 00000000 +@00000F92 00000000 +@00000F93 00000000 +@00000F94 00000000 +@00000F95 00000000 +@00000F96 00000000 +@00000F97 00000000 +@00000F98 00000000 +@00000F99 00000000 +@00000F9A 00000000 +@00000F9B 00000000 +@00000F9C 00000000 +@00000F9D 00000000 +@00000F9E 00000000 +@00000F9F 00000000 +@00000FA0 00000000 +@00000FA1 00000000 +@00000FA2 00000000 +@00000FA3 00000000 +@00000FA4 00000000 +@00000FA5 00000000 +@00000FA6 00000000 +@00000FA7 00000000 +@00000FA8 00000000 +@00000FA9 00000000 +@00000FAA 00000000 +@00000FAB 00000000 +@00000FAC 00000000 +@00000FAD 00000000 +@00000FAE 00000000 +@00000FAF 00000000 +@00000FB0 00000000 +@00000FB1 00000000 +@00000FB2 00000000 +@00000FB3 00000000 +@00000FB4 00000000 +@00000FB5 00000000 +@00000FB6 00000000 +@00000FB7 00000000 +@00000FB8 00000000 +@00000FB9 00000000 +@00000FBA 00000000 +@00000FBB 00000000 +@00000FBC 00000000 +@00000FBD 00000000 +@00000FBE 00000000 +@00000FBF 00000000 +@00000FC0 00000000 +@00000FC1 00000000 +@00000FC2 00000000 +@00000FC3 00000000 +@00000FC4 00000000 +@00000FC5 00000000 +@00000FC6 00000000 +@00000FC7 00000000 +@00000FC8 00000000 +@00000FC9 00000000 +@00000FCA 00000000 +@00000FCB 00000000 +@00000FCC 00000000 +@00000FCD 00000000 +@00000FCE 00000000 +@00000FCF 00000000 +@00000FD0 00000000 +@00000FD1 00000000 +@00000FD2 00000000 +@00000FD3 00000000 +@00000FD4 00000000 +@00000FD5 00000000 +@00000FD6 00000000 +@00000FD7 00000000 +@00000FD8 00000000 +@00000FD9 00000000 +@00000FDA 00000000 +@00000FDB 00000000 +@00000FDC 00000000 +@00000FDD 00000000 +@00000FDE 00000000 +@00000FDF 00000000 +@00000FE0 00000000 +@00000FE1 00000000 +@00000FE2 00000000 +@00000FE3 00000000 +@00000FE4 00000000 +@00000FE5 00000000 +@00000FE6 00000000 +@00000FE7 00000000 +@00000FE8 00000000 +@00000FE9 00000000 +@00000FEA 00000000 +@00000FEB 00000000 +@00000FEC 00000000 +@00000FED 00000000 +@00000FEE 00000000 +@00000FEF 00000000 +@00000FF0 00000000 +@00000FF1 00000000 +@00000FF2 00000000 +@00000FF3 00000000 +@00000FF4 00000000 +@00000FF5 00000000 +@00000FF6 00000000 +@00000FF7 00000000 +@00000FF8 00000000 +@00000FF9 00000000 +@00000FFA 00000000 +@00000FFB 00000000 +@00000FFC 00000000 +@00000FFD 00000000 +@00000FFE 00000000 +@00000FFF 00000000 +@00001000 00000000 +@00001001 00000000 +@00001002 00000000 +@00001003 00000000 +@00001004 00000000 +@00001005 00000000 +@00001006 00000000 +@00001007 00000000 +@00001008 00000000 +@00001009 00000000 +@0000100A 00000000 +@0000100B 00000000 +@0000100C 00000000 +@0000100D 00000000 +@0000100E 00000000 +@0000100F 00000000 +@00001010 00000000 +@00001011 00000000 +@00001012 00000000 +@00001013 00000000 +@00001014 00000000 +@00001015 00000000 +@00001016 00000000 +@00001017 00000000 +@00001018 00000000 +@00001019 00000000 +@0000101A 00000000 +@0000101B 00000000 +@0000101C 00000000 +@0000101D 00000000 +@0000101E 00000000 +@0000101F 00000000 +@00001020 00000000 +@00001021 00000000 +@00001022 00000000 +@00001023 00000000 +@00001024 00000000 +@00001025 00000000 +@00001026 00000000 +@00001027 00000000 +@00001028 00000000 +@00001029 00000000 +@0000102A 00000000 +@0000102B 00000000 +@0000102C 00000000 +@0000102D 00000000 +@0000102E 00000000 +@0000102F 00000000 +@00001030 00000000 +@00001031 00000000 +@00001032 00000000 +@00001033 00000000 +@00001034 00000000 +@00001035 00000000 +@00001036 00000000 +@00001037 00000000 +@00001038 00000000 +@00001039 00000000 +@0000103A 00000000 +@0000103B 00000000 +@0000103C 00000000 +@0000103D 00000000 +@0000103E 00000000 +@0000103F 00000000 +@00001040 00000000 +@00001041 00000000 +@00001042 00000000 +@00001043 00000000 +@00001044 00000000 +@00001045 00000000 +@00001046 00000000 +@00001047 00000000 +@00001048 00000000 +@00001049 00000000 +@0000104A 00000000 +@0000104B 00000000 +@0000104C 00000000 +@0000104D 00000000 +@0000104E 00000000 +@0000104F 00000000 +@00001050 00000000 +@00001051 00000000 +@00001052 00000000 +@00001053 00000000 +@00001054 00000000 +@00001055 00000000 +@00001056 00000000 +@00001057 00000000 +@00001058 00000000 +@00001059 00000000 +@0000105A 00000000 +@0000105B 00000000 +@0000105C 00000000 +@0000105D 00000000 +@0000105E 00000000 +@0000105F 00000000 +@00001060 00000000 +@00001061 00000000 +@00001062 00000000 +@00001063 00000000 +@00001064 00000000 +@00001065 00000000 +@00001066 00000000 +@00001067 00000000 +@00001068 00000000 +@00001069 00000000 +@0000106A 00000000 +@0000106B 00000000 +@0000106C 00000000 +@0000106D 00000000 +@0000106E 00000000 +@0000106F 00000000 +@00001070 00000000 +@00001071 00000000 +@00001072 00000000 +@00001073 00000000 +@00001074 00000000 +@00001075 00000000 +@00001076 00000000 +@00001077 00000000 +@00001078 00000000 +@00001079 00000000 +@0000107A 00000000 +@0000107B 00000000 +@0000107C 00000000 +@0000107D 00000000 +@0000107E 00000000 +@0000107F 00000000 +@00001080 00000000 +@00001081 00000000 +@00001082 00000000 +@00001083 00000000 +@00001084 00000000 +@00001085 00000000 +@00001086 00000000 +@00001087 00000000 +@00001088 00000000 +@00001089 00000000 +@0000108A 00000000 +@0000108B 00000000 +@0000108C 00000000 +@0000108D 00000000 +@0000108E 00000000 +@0000108F 00000000 +@00001090 00000000 +@00001091 00000000 +@00001092 00000000 +@00001093 00000000 +@00001094 00000000 +@00001095 00000000 +@00001096 00000000 +@00001097 00000000 +@00001098 00000000 +@00001099 00000000 +@0000109A 00000000 +@0000109B 00000000 +@0000109C 00000000 +@0000109D 00000000 +@0000109E 00000000 +@0000109F 00000000 +@000010A0 00000000 +@000010A1 00000000 +@000010A2 00000000 +@000010A3 00000000 +@000010A4 00000000 +@000010A5 00000000 +@000010A6 00000000 +@000010A7 00000000 +@000010A8 00000000 +@000010A9 00000000 +@000010AA 00000000 +@000010AB 00000000 +@000010AC 00000000 +@000010AD 00000000 +@000010AE 00000000 +@000010AF 00000000 +@000010B0 00000000 +@000010B1 00000000 +@000010B2 00000000 +@000010B3 00000000 +@000010B4 00000000 +@000010B5 00000000 +@000010B6 00000000 +@000010B7 00000000 +@000010B8 00000000 +@000010B9 00000000 +@000010BA 00000000 +@000010BB 00000000 +@000010BC 00000000 +@000010BD 00000000 +@000010BE 00000000 +@000010BF 00000000 +@000010C0 00000000 +@000010C1 00000000 +@000010C2 00000000 +@000010C3 00000000 +@000010C4 00000000 +@000010C5 00000000 +@000010C6 00000000 +@000010C7 00000000 +@000010C8 00000000 +@000010C9 00000000 +@000010CA 00000000 +@000010CB 00000000 +@000010CC 00000000 +@000010CD 00000000 +@000010CE 00000000 +@000010CF 00000000 +@000010D0 00000000 +@000010D1 00000000 +@000010D2 00000000 +@000010D3 00000000 +@000010D4 00000000 +@000010D5 00000000 +@000010D6 00000000 +@000010D7 00000000 +@000010D8 00000000 +@000010D9 00000000 +@000010DA 00000000 +@000010DB 00000000 +@000010DC 00000000 +@000010DD 00000000 +@000010DE 00000000 +@000010DF 00000000 +@000010E0 00000000 +@000010E1 00000000 +@000010E2 00000000 +@000010E3 00000000 +@000010E4 00000000 +@000010E5 00000000 +@000010E6 00000000 +@000010E7 00000000 +@000010E8 00000000 +@000010E9 00000000 +@000010EA 00000000 +@000010EB 00000000 +@000010EC 00000000 +@000010ED 00000000 +@000010EE 00000000 +@000010EF 00000000 +@000010F0 00000000 +@000010F1 00000000 +@000010F2 00000000 +@000010F3 00000000 +@000010F4 00000000 +@000010F5 00000000 +@000010F6 00000000 +@000010F7 00000000 +@000010F8 00000000 +@000010F9 00000000 +@000010FA 00000000 +@000010FB 00000000 +@000010FC 00000000 +@000010FD 00000000 +@000010FE 00000000 +@000010FF 00000000 +@00001100 00000000 +@00001101 00000000 +@00001102 00000000 +@00001103 00000000 +@00001104 00000000 +@00001105 00000000 +@00001106 00000000 +@00001107 00000000 +@00001108 00000000 +@00001109 00000000 +@0000110A 00000000 +@0000110B 00000000 +@0000110C 00000000 +@0000110D 00000000 +@0000110E 00000000 +@0000110F 00000000 +@00001110 00000000 +@00001111 00000000 +@00001112 00000000 +@00001113 00000000 +@00001114 00000000 +@00001115 00000000 +@00001116 00000000 +@00001117 00000000 +@00001118 00000000 +@00001119 00000000 +@0000111A 00000000 +@0000111B 00000000 +@0000111C 00000000 +@0000111D 00000000 +@0000111E 00000000 +@0000111F 00000000 +@00001120 00000000 +@00001121 00000000 +@00001122 00000000 +@00001123 00000000 +@00001124 00000000 +@00001125 00000000 +@00001126 00000000 +@00001127 00000000 +@00001128 00000000 +@00001129 00000000 +@0000112A 00000000 +@0000112B 00000000 +@0000112C 00000000 +@0000112D 00000000 +@0000112E 00000000 +@0000112F 00000000 +@00001130 00000000 +@00001131 00000000 +@00001132 00000000 +@00001133 00000000 +@00001134 00000000 +@00001135 00000000 +@00001136 00000000 +@00001137 00000000 +@00001138 00000000 +@00001139 00000000 +@0000113A 00000000 +@0000113B 00000000 +@0000113C 00000000 +@0000113D 00000000 +@0000113E 00000000 +@0000113F 00000000 +@00001140 00000000 +@00001141 00000000 +@00001142 00000000 +@00001143 00000000 +@00001144 00000000 +@00001145 00000000 +@00001146 00000000 +@00001147 00000000 +@00001148 00000000 +@00001149 00000000 +@0000114A 00000000 +@0000114B 00000000 +@0000114C 00000000 +@0000114D 00000000 +@0000114E 00000000 +@0000114F 00000000 +@00001150 00000000 +@00001151 00000000 +@00001152 00000000 +@00001153 00000000 +@00001154 00000000 +@00001155 00000000 +@00001156 00000000 +@00001157 00000000 +@00001158 00000000 +@00001159 00000000 +@0000115A 00000000 +@0000115B 00000000 +@0000115C 00000000 +@0000115D 00000000 +@0000115E 00000000 +@0000115F 00000000 +@00001160 00000000 +@00001161 00000000 +@00001162 00000000 +@00001163 00000000 +@00001164 00000000 +@00001165 00000000 +@00001166 00000000 +@00001167 00000000 +@00001168 00000000 +@00001169 00000000 +@0000116A 00000000 +@0000116B 00000000 +@0000116C 00000000 +@0000116D 00000000 +@0000116E 00000000 +@0000116F 00000000 +@00001170 00000000 +@00001171 00000000 +@00001172 00000000 +@00001173 00000000 +@00001174 00000000 +@00001175 00000000 +@00001176 00000000 +@00001177 00000000 +@00001178 00000000 +@00001179 00000000 +@0000117A 00000000 +@0000117B 00000000 +@0000117C 00000000 +@0000117D 00000000 +@0000117E 00000000 +@0000117F 00000000 +@00001180 00000000 +@00001181 00000000 +@00001182 00000000 +@00001183 00000000 +@00001184 00000000 +@00001185 00000000 +@00001186 00000000 +@00001187 00000000 +@00001188 00000000 +@00001189 00000000 +@0000118A 00000000 +@0000118B 00000000 +@0000118C 00000000 +@0000118D 00000000 +@0000118E 00000000 +@0000118F 00000000 +@00001190 00000000 +@00001191 00000000 +@00001192 00000000 +@00001193 00000000 +@00001194 00000000 +@00001195 00000000 +@00001196 00000000 +@00001197 00000000 +@00001198 00000000 +@00001199 00000000 +@0000119A 00000000 +@0000119B 00000000 +@0000119C 00000000 +@0000119D 00000000 +@0000119E 00000000 +@0000119F 00000000 +@000011A0 00000000 +@000011A1 00000000 +@000011A2 00000000 +@000011A3 00000000 +@000011A4 00000000 +@000011A5 00000000 +@000011A6 00000000 +@000011A7 00000000 +@000011A8 00000000 +@000011A9 00000000 +@000011AA 00000000 +@000011AB 00000000 +@000011AC 00000000 +@000011AD 00000000 +@000011AE 00000000 +@000011AF 00000000 +@000011B0 00000000 +@000011B1 00000000 +@000011B2 00000000 +@000011B3 00000000 +@000011B4 00000000 +@000011B5 00000000 +@000011B6 00000000 +@000011B7 00000000 +@000011B8 00000000 +@000011B9 00000000 +@000011BA 00000000 +@000011BB 00000000 +@000011BC 00000000 +@000011BD 00000000 +@000011BE 00000000 +@000011BF 00000000 +@000011C0 00000000 +@000011C1 00000000 +@000011C2 00000000 +@000011C3 00000000 +@000011C4 00000000 +@000011C5 00000000 +@000011C6 00000000 +@000011C7 00000000 +@000011C8 00000000 +@000011C9 00000000 +@000011CA 00000000 +@000011CB 00000000 +@000011CC 00000000 +@000011CD 00000000 +@000011CE 00000000 +@000011CF 00000000 +@000011D0 00000000 +@000011D1 00000000 +@000011D2 00000000 +@000011D3 00000000 +@000011D4 00000000 +@000011D5 00000000 +@000011D6 00000000 +@000011D7 00000000 +@000011D8 00000000 +@000011D9 00000000 +@000011DA 00000000 +@000011DB 00000000 +@000011DC 00000000 +@000011DD 00000000 +@000011DE 00000000 +@000011DF 00000000 +@000011E0 00000000 +@000011E1 00000000 +@000011E2 00000000 +@000011E3 00000000 +@000011E4 00000000 +@000011E5 00000000 +@000011E6 00000000 +@000011E7 00000000 +@000011E8 00000000 +@000011E9 00000000 +@000011EA 00000000 +@000011EB 00000000 +@000011EC 00000000 +@000011ED 00000000 +@000011EE 00000000 +@000011EF 00000000 +@000011F0 00000000 +@000011F1 00000000 +@000011F2 00000000 +@000011F3 00000000 +@000011F4 00000000 +@000011F5 00000000 +@000011F6 00000000 +@000011F7 00000000 +@000011F8 00000000 +@000011F9 00000000 +@000011FA 00000000 +@000011FB 00000000 +@000011FC 00000000 +@000011FD 00000000 +@000011FE 00000000 +@000011FF 00000000 +@00001200 00000000 +@00001201 00000000 +@00001202 00000000 +@00001203 00000000 +@00001204 00000000 +@00001205 00000000 +@00001206 00000000 +@00001207 00000000 +@00001208 00000000 +@00001209 00000000 +@0000120A 00000000 +@0000120B 00000000 +@0000120C 00000000 +@0000120D 00000000 +@0000120E 00000000 +@0000120F 00000000 +@00001210 00000000 +@00001211 00000000 +@00001212 00000000 +@00001213 00000000 +@00001214 00000000 +@00001215 00004E44 +@00001216 00004E44 +@00001217 00003794 +@00001218 00000000 +@00001219 00000000 +@0000121A 00000000 +@0000121B 00001CA8 +@0000121C 00000000 +@0000121D 00000000 +@0000121E 00000000 +@0000121F 00004854 +@00001220 00000000 +@00001221 00000000 +@00001222 00004854 +@00001223 00000000 +@00001224 00000000 +@00001225 00004854 +@00001226 00000000 +@00001227 00000000 +@00001228 00000000 +@00001229 00000000 +@0000122A 00000000 +@0000122B 00000000 +@0000122C 00000000 +@0000122D 00000000 +@0000122E 00000000 +@0000122F 00000000 +@00001230 00000000 +@00001231 00000000 +@00001232 00000000 +@00001233 00000000 +@00001234 00000000 +@00001235 00000000 +@00001236 00000000 +@00001237 00000000 +@00001238 00000000 +@00001239 00000000 +@0000123A 00000000 +@0000123B 00000000 +@0000123C 00000000 +@0000123D 00000000 +@0000123E 00000000 +@0000123F 00000000 +@00001240 00000000 +@00001241 00000000 +@00001242 00000000 +@00001243 00000000 +@00001244 00000000 +@00001245 00000000 +@00001246 00000000 +@00001247 00000000 +@00001248 00000000 +@00001249 00000000 +@0000124A 00000000 +@0000124B 00000000 +@0000124C 00000000 +@0000124D 00000000 +@0000124E 00000000 +@0000124F 00000000 +@00001250 00000000 +@00001251 00000000 +@00001252 00000000 +@00001253 00000000 +@00001254 00000000 +@00001255 00000000 +@00001256 00000000 +@00001257 00000000 +@00001258 00000000 +@00001259 00000000 +@0000125A 00000000 +@0000125B 00000000 +@0000125C 00000000 +@0000125D 00000000 +@0000125E 00000000 +@0000125F 00000000 +@00001260 00000000 +@00001261 00000000 +@00001262 00000000 +@00001263 00000000 +@00001264 00000000 +@00001265 00000000 +@00001266 00000000 +@00001267 00000000 +@00001268 00000000 +@00001269 00000000 +@0000126A 00000000 +@0000126B 00000000 +@0000126C 00000000 +@0000126D 00000000 +@0000126E 00000000 +@0000126F 00000000 +@00001270 00000000 +@00001271 00000000 +@00001272 00000000 +@00001273 00000000 +@00001274 00000000 +@00001275 00000000 +@00001276 00000000 +@00001277 00000000 +@00001278 00000000 +@00001279 00000000 +@0000127A 00000000 +@0000127B 00000000 +@0000127C 00000000 +@0000127D 00000000 +@0000127E 00000000 +@0000127F 00000000 +@00001280 00000000 +@00001281 00000000 +@00001282 00000000 +@00001283 00000000 +@00001284 00000000 +@00001285 00000000 +@00001286 00000000 +@00001287 00000000 +@00001288 00000000 +@00001289 00000000 +@0000128A 00000000 +@0000128B 00004A24 +@0000128C 00004A24 +@0000128D 00004A2C +@0000128E 00004A2C +@0000128F 00004A34 +@00001290 00004A34 +@00001291 00004A3C +@00001292 00004A3C +@00001293 00004A44 +@00001294 00004A44 +@00001295 00004A4C +@00001296 00004A4C +@00001297 00004A54 +@00001298 00004A54 +@00001299 00004A5C +@0000129A 00004A5C +@0000129B 00004A64 +@0000129C 00004A64 +@0000129D 00004A6C +@0000129E 00004A6C +@0000129F 00004A74 +@000012A0 00004A74 +@000012A1 00004A7C +@000012A2 00004A7C +@000012A3 00004A84 +@000012A4 00004A84 +@000012A5 00004A8C +@000012A6 00004A8C +@000012A7 00004A94 +@000012A8 00004A94 +@000012A9 00004A9C +@000012AA 00004A9C +@000012AB 00004AA4 +@000012AC 00004AA4 +@000012AD 00004AAC +@000012AE 00004AAC +@000012AF 00004AB4 +@000012B0 00004AB4 +@000012B1 00004ABC +@000012B2 00004ABC +@000012B3 00004AC4 +@000012B4 00004AC4 +@000012B5 00004ACC +@000012B6 00004ACC +@000012B7 00004AD4 +@000012B8 00004AD4 +@000012B9 00004ADC +@000012BA 00004ADC +@000012BB 00004AE4 +@000012BC 00004AE4 +@000012BD 00004AEC +@000012BE 00004AEC +@000012BF 00004AF4 +@000012C0 00004AF4 +@000012C1 00004AFC +@000012C2 00004AFC +@000012C3 00004B04 +@000012C4 00004B04 +@000012C5 00004B0C +@000012C6 00004B0C +@000012C7 00004B14 +@000012C8 00004B14 +@000012C9 00004B1C +@000012CA 00004B1C +@000012CB 00004B24 +@000012CC 00004B24 +@000012CD 00004B2C +@000012CE 00004B2C +@000012CF 00004B34 +@000012D0 00004B34 +@000012D1 00004B3C +@000012D2 00004B3C +@000012D3 00004B44 +@000012D4 00004B44 +@000012D5 00004B4C +@000012D6 00004B4C +@000012D7 00004B54 +@000012D8 00004B54 +@000012D9 00004B5C +@000012DA 00004B5C +@000012DB 00004B64 +@000012DC 00004B64 +@000012DD 00004B6C +@000012DE 00004B6C +@000012DF 00004B74 +@000012E0 00004B74 +@000012E1 00004B7C +@000012E2 00004B7C +@000012E3 00004B84 +@000012E4 00004B84 +@000012E5 00004B8C +@000012E6 00004B8C +@000012E7 00004B94 +@000012E8 00004B94 +@000012E9 00004B9C +@000012EA 00004B9C +@000012EB 00004BA4 +@000012EC 00004BA4 +@000012ED 00004BAC +@000012EE 00004BAC +@000012EF 00004BB4 +@000012F0 00004BB4 +@000012F1 00004BBC +@000012F2 00004BBC +@000012F3 00004BC4 +@000012F4 00004BC4 +@000012F5 00004BCC +@000012F6 00004BCC +@000012F7 00004BD4 +@000012F8 00004BD4 +@000012F9 00004BDC +@000012FA 00004BDC +@000012FB 00004BE4 +@000012FC 00004BE4 +@000012FD 00004BEC +@000012FE 00004BEC +@000012FF 00004BF4 +@00001300 00004BF4 +@00001301 00004BFC +@00001302 00004BFC +@00001303 00004C04 +@00001304 00004C04 +@00001305 00004C0C +@00001306 00004C0C +@00001307 00004C14 +@00001308 00004C14 +@00001309 00004C1C +@0000130A 00004C1C +@0000130B 00004C24 +@0000130C 00004C24 +@0000130D 00004C2C +@0000130E 00004C2C +@0000130F 00004C34 +@00001310 00004C34 +@00001311 00004C3C +@00001312 00004C3C +@00001313 00004C44 +@00001314 00004C44 +@00001315 00004C4C +@00001316 00004C4C +@00001317 00004C54 +@00001318 00004C54 +@00001319 00004C5C +@0000131A 00004C5C +@0000131B 00004C64 +@0000131C 00004C64 +@0000131D 00004C6C +@0000131E 00004C6C +@0000131F 00004C74 +@00001320 00004C74 +@00001321 00004C7C +@00001322 00004C7C +@00001323 00004C84 +@00001324 00004C84 +@00001325 00004C8C +@00001326 00004C8C +@00001327 00004C94 +@00001328 00004C94 +@00001329 00004C9C +@0000132A 00004C9C +@0000132B 00004CA4 +@0000132C 00004CA4 +@0000132D 00004CAC +@0000132E 00004CAC +@0000132F 00004CB4 +@00001330 00004CB4 +@00001331 00004CBC +@00001332 00004CBC +@00001333 00004CC4 +@00001334 00004CC4 +@00001335 00004CCC +@00001336 00004CCC +@00001337 00004CD4 +@00001338 00004CD4 +@00001339 00004CDC +@0000133A 00004CDC +@0000133B 00004CE4 +@0000133C 00004CE4 +@0000133D 00004CEC +@0000133E 00004CEC +@0000133F 00004CF4 +@00001340 00004CF4 +@00001341 00004CFC +@00001342 00004CFC +@00001343 00004D04 +@00001344 00004D04 +@00001345 00004D0C +@00001346 00004D0C +@00001347 00004D14 +@00001348 00004D14 +@00001349 00004D1C +@0000134A 00004D1C +@0000134B 00004D24 +@0000134C 00004D24 +@0000134D 00004D2C +@0000134E 00004D2C +@0000134F 00004D34 +@00001350 00004D34 +@00001351 00004D3C +@00001352 00004D3C +@00001353 00004D44 +@00001354 00004D44 +@00001355 00004D4C +@00001356 00004D4C +@00001357 00004D54 +@00001358 00004D54 +@00001359 00004D5C +@0000135A 00004D5C +@0000135B 00004D64 +@0000135C 00004D64 +@0000135D 00004D6C +@0000135E 00004D6C +@0000135F 00004D74 +@00001360 00004D74 +@00001361 00004D7C +@00001362 00004D7C +@00001363 00004D84 +@00001364 00004D84 +@00001365 00004D8C +@00001366 00004D8C +@00001367 00004D94 +@00001368 00004D94 +@00001369 00004D9C +@0000136A 00004D9C +@0000136B 00004DA4 +@0000136C 00004DA4 +@0000136D 00004DAC +@0000136E 00004DAC +@0000136F 00004DB4 +@00001370 00004DB4 +@00001371 00004DBC +@00001372 00004DBC +@00001373 00004DC4 +@00001374 00004DC4 +@00001375 00004DCC +@00001376 00004DCC +@00001377 00004DD4 +@00001378 00004DD4 +@00001379 00004DDC +@0000137A 00004DDC +@0000137B 00004DE4 +@0000137C 00004DE4 +@0000137D 00004DEC +@0000137E 00004DEC +@0000137F 00004DF4 +@00001380 00004DF4 +@00001381 00004DFC +@00001382 00004DFC +@00001383 00004E04 +@00001384 00004E04 +@00001385 00004E0C +@00001386 00004E0C +@00001387 00004E14 +@00001388 00004E14 +@00001389 00004E1C +@0000138A 00004E1C +@0000138B 000037A0 +@0000138C 00000000 +@0000138D 00000000 +@0000138E 00000000 +@0000138F 00004E3C +@00001390 00004E3C +@00001391 00004854 +@00001392 00004854 +@00001393 FFFFFFFF +@00001394 00000000 +@00001395 00000000 +@00001396 FFFFFFFF +@00001397 00000000 +@00001398 00000000 +@00001399 00004E64 +@0000139A 00004E64 +@0000139B 00000000 +@0000139C 00000000 +@0000139D FFFFFFFF +@0000139E 00000000 +@0000139F 00020000 +@000013A0 000050A0 Index: sdram_ctrl/tags =================================================================== --- sdram_ctrl/tags (nonexistent) +++ sdram_ctrl/tags (revision 8)
sdram_ctrl/tags
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##