From 9eebf9222d8c3be13db2fbec66839a2be5260e56 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Thu, 15 Oct 2009 20:05:21 +0200 Subject: [PATCH] init aus gzip --- bsp1/Angabe/dide_16.sof | Bin 0 -> 966463 bytes bsp1/Angabe/dide_16_1.txt | 1 + bsp1/Protokolle/DigitalDesign_prot.sty | 225 ++ bsp1/Protokolle/DigitalDesign_prot.tex | 36 + bsp1/Protokolle/chapter1.tex | 10 + bsp1/Protokolle/chapter2.tex | 6 + bsp1/Protokolle/chapter3.tex | 1 + bsp1/Protokolle/chapter4.tex | 13 + bsp1/Protokolle/prot_1.txt | 6 + bsp1/Protokolle/prot_2.txt | 1 + bsp1/Protokolle/prot_4.txt | 9 + bsp2/Angabe/board_driver_arc.vhd | 102 + bsp2/Angabe/board_driver_ent.vhd | 42 + bsp2/Angabe/dide_16_2.txt | 1 + bsp2/Angabe/vga.hex | 4097 ++++++++++++++++++++++++ bsp2/Angabe/vga_arc.vhd | 223 ++ bsp2/Angabe/vga_beh_tb.vhd | 194 ++ bsp2/Angabe/vga_control_arc.vhd | 128 + bsp2/Angabe/vga_control_ent.vhd | 53 + bsp2/Angabe/vga_driver_arc.vhd | 402 +++ bsp2/Angabe/vga_driver_ent.vhd | 60 + bsp2/Angabe/vga_ent.vhd | 73 + bsp2/Angabe/vga_pak.vhd | 85 + bsp2/Angabe/vga_pll.bdf | 847 +++++ bsp2/Angabe/vga_pll.tcl | 184 ++ bsp2/Angabe/vga_pos_tb.vhd | 198 ++ bsp2/Angabe/vga_pre_tb.vhd | 197 ++ bsp2/Angabe/vpll.bsf | 49 + bsp2/Angabe/vpll.vhd | 274 ++ bsp2/Protokolle/DigitalDesign_prot.sty | 225 ++ bsp2/Protokolle/DigitalDesign_prot.tex | 36 + bsp2/Protokolle/chapter1.tex | 10 + bsp2/Protokolle/chapter2.tex | 6 + bsp2/Protokolle/chapter3.tex | 1 + bsp2/Protokolle/chapter4.tex | 13 + bsp2/Protokolle/prot_1.txt | 6 + bsp2/Protokolle/prot_2.txt | 1 + bsp2/Protokolle/prot_4.txt | 9 + bsp3/Angabe/board_driver_arc.vhd | 102 + bsp3/Angabe/board_driver_ent.vhd | 42 + bsp3/Angabe/dide_16_3.txt | 4 + bsp3/Angabe/vga_arc.vhd | 219 ++ bsp3/Angabe/vga_beh_tb.vhd | 189 ++ bsp3/Angabe/vga_beh_tb.vhd~ | 194 ++ bsp3/Angabe/vga_control_arc.vhd | 54 + bsp3/Angabe/vga_control_ent.vhd | 51 + bsp3/Angabe/vga_driver_arc.vhd | 402 +++ bsp3/Angabe/vga_driver_ent.vhd | 60 + bsp3/Angabe/vga_ent.vhd | 71 + bsp3/Angabe/vga_pak.vhd | 85 + bsp3/Angabe/vga_pll.bdf | 799 +++++ bsp3/Angabe/vga_pll.tcl | 172 + bsp3/Angabe/vga_pos_tb.vhd | 192 ++ bsp3/Angabe/vga_pos_tb.vhd~ | 198 ++ bsp3/Angabe/vga_pre_tb.vhd | 191 ++ bsp3/Angabe/vga_pre_tb.vhd~ | 197 ++ bsp3/Angabe/vpll.bsf | 49 + bsp3/Angabe/vpll.vhd | 274 ++ bsp3/Protokolle/DigitalDesign_prot.sty | 225 ++ bsp3/Protokolle/DigitalDesign_prot.tex | 36 + bsp3/Protokolle/chapter1.tex | 10 + bsp3/Protokolle/chapter2.tex | 6 + bsp3/Protokolle/chapter3.tex | 1 + bsp3/Protokolle/chapter4.tex | 13 + bsp3/Protokolle/prot_1.txt | 6 + bsp3/Protokolle/prot_2.txt | 1 + bsp3/Protokolle/prot_4.txt | 9 + bsp4/Angabe/board_driver_arc.vhd | 102 + bsp4/Angabe/board_driver_ent.vhd | 42 + bsp4/Angabe/dide_16_4.txt | 3 + bsp4/Angabe/vga.hex | 4097 ++++++++++++++++++++++++ bsp4/Angabe/vga_arc.vhd | 223 ++ bsp4/Angabe/vga_beh_tb.vhd | 194 ++ bsp4/Angabe/vga_control_arc.vhd | 128 + bsp4/Angabe/vga_control_ent.vhd | 53 + bsp4/Angabe/vga_driver_arc.vhd | 402 +++ bsp4/Angabe/vga_driver_ent.vhd | 60 + bsp4/Angabe/vga_ent.vhd | 73 + bsp4/Angabe/vga_pak.vhd | 85 + bsp4/Angabe/vga_pll.bdf | 847 +++++ bsp4/Angabe/vga_pll.tcl | 184 ++ bsp4/Angabe/vga_pos_tb.vhd | 198 ++ bsp4/Angabe/vga_pre_tb.vhd | 197 ++ bsp4/Angabe/vpll.bsf | 49 + bsp4/Angabe/vpll.vhd | 274 ++ bsp4/Protokolle/DigitalDesign_prot.sty | 225 ++ bsp4/Protokolle/DigitalDesign_prot.tex | 36 + bsp4/Protokolle/chapter1.tex | 10 + bsp4/Protokolle/chapter2.tex | 6 + bsp4/Protokolle/chapter3.tex | 1 + bsp4/Protokolle/chapter4.tex | 13 + bsp4/Protokolle/prot_1.txt | 6 + bsp4/Protokolle/prot_2.txt | 1 + bsp4/Protokolle/prot_4.txt | 9 + 94 files changed, 19194 insertions(+) create mode 100644 bsp1/Angabe/dide_16.sof create mode 100644 bsp1/Angabe/dide_16_1.txt create mode 100644 bsp1/Protokolle/DigitalDesign_prot.sty create mode 100644 bsp1/Protokolle/DigitalDesign_prot.tex create mode 100644 bsp1/Protokolle/chapter1.tex create mode 100644 bsp1/Protokolle/chapter2.tex create mode 100644 bsp1/Protokolle/chapter3.tex create mode 100644 bsp1/Protokolle/chapter4.tex create mode 100644 bsp1/Protokolle/prot_1.txt create mode 100644 bsp1/Protokolle/prot_2.txt create mode 100644 bsp1/Protokolle/prot_4.txt create mode 100644 bsp2/Angabe/board_driver_arc.vhd create mode 100644 bsp2/Angabe/board_driver_ent.vhd create mode 100644 bsp2/Angabe/dide_16_2.txt create mode 100644 bsp2/Angabe/vga.hex create mode 100644 bsp2/Angabe/vga_arc.vhd create mode 100644 bsp2/Angabe/vga_beh_tb.vhd create mode 100644 bsp2/Angabe/vga_control_arc.vhd create mode 100644 bsp2/Angabe/vga_control_ent.vhd create mode 100644 bsp2/Angabe/vga_driver_arc.vhd create mode 100644 bsp2/Angabe/vga_driver_ent.vhd create mode 100644 bsp2/Angabe/vga_ent.vhd create mode 100644 bsp2/Angabe/vga_pak.vhd create mode 100755 bsp2/Angabe/vga_pll.bdf create mode 100755 bsp2/Angabe/vga_pll.tcl create mode 100644 bsp2/Angabe/vga_pos_tb.vhd create mode 100644 bsp2/Angabe/vga_pre_tb.vhd create mode 100644 bsp2/Angabe/vpll.bsf create mode 100644 bsp2/Angabe/vpll.vhd create mode 100644 bsp2/Protokolle/DigitalDesign_prot.sty create mode 100644 bsp2/Protokolle/DigitalDesign_prot.tex create mode 100644 bsp2/Protokolle/chapter1.tex create mode 100644 bsp2/Protokolle/chapter2.tex create mode 100644 bsp2/Protokolle/chapter3.tex create mode 100644 bsp2/Protokolle/chapter4.tex create mode 100644 bsp2/Protokolle/prot_1.txt create mode 100644 bsp2/Protokolle/prot_2.txt create mode 100644 bsp2/Protokolle/prot_4.txt create mode 100644 bsp3/Angabe/board_driver_arc.vhd create mode 100644 bsp3/Angabe/board_driver_ent.vhd create mode 100644 bsp3/Angabe/dide_16_3.txt create mode 100755 bsp3/Angabe/vga_arc.vhd create mode 100644 bsp3/Angabe/vga_beh_tb.vhd create mode 100644 bsp3/Angabe/vga_beh_tb.vhd~ create mode 100644 bsp3/Angabe/vga_control_arc.vhd create mode 100644 bsp3/Angabe/vga_control_ent.vhd create mode 100644 bsp3/Angabe/vga_driver_arc.vhd create mode 100644 bsp3/Angabe/vga_driver_ent.vhd create mode 100644 bsp3/Angabe/vga_ent.vhd create mode 100644 bsp3/Angabe/vga_pak.vhd create mode 100755 bsp3/Angabe/vga_pll.bdf create mode 100755 bsp3/Angabe/vga_pll.tcl create mode 100644 bsp3/Angabe/vga_pos_tb.vhd create mode 100644 bsp3/Angabe/vga_pos_tb.vhd~ create mode 100644 bsp3/Angabe/vga_pre_tb.vhd create mode 100644 bsp3/Angabe/vga_pre_tb.vhd~ create mode 100644 bsp3/Angabe/vpll.bsf create mode 100644 bsp3/Angabe/vpll.vhd create mode 100644 bsp3/Protokolle/DigitalDesign_prot.sty create mode 100644 bsp3/Protokolle/DigitalDesign_prot.tex create mode 100644 bsp3/Protokolle/chapter1.tex create mode 100644 bsp3/Protokolle/chapter2.tex create mode 100644 bsp3/Protokolle/chapter3.tex create mode 100644 bsp3/Protokolle/chapter4.tex create mode 100644 bsp3/Protokolle/prot_1.txt create mode 100644 bsp3/Protokolle/prot_2.txt create mode 100644 bsp3/Protokolle/prot_4.txt create mode 100644 bsp4/Angabe/board_driver_arc.vhd create mode 100644 bsp4/Angabe/board_driver_ent.vhd create mode 100644 bsp4/Angabe/dide_16_4.txt create mode 100644 bsp4/Angabe/vga.hex create mode 100644 bsp4/Angabe/vga_arc.vhd create mode 100644 bsp4/Angabe/vga_beh_tb.vhd create mode 100644 bsp4/Angabe/vga_control_arc.vhd create mode 100644 bsp4/Angabe/vga_control_ent.vhd create mode 100644 bsp4/Angabe/vga_driver_arc.vhd create mode 100644 bsp4/Angabe/vga_driver_ent.vhd create mode 100644 bsp4/Angabe/vga_ent.vhd create mode 100644 bsp4/Angabe/vga_pak.vhd create mode 100755 bsp4/Angabe/vga_pll.bdf create mode 100755 bsp4/Angabe/vga_pll.tcl create mode 100644 bsp4/Angabe/vga_pos_tb.vhd create mode 100644 bsp4/Angabe/vga_pre_tb.vhd create mode 100644 bsp4/Angabe/vpll.bsf create mode 100644 bsp4/Angabe/vpll.vhd create mode 100644 bsp4/Protokolle/DigitalDesign_prot.sty create mode 100644 bsp4/Protokolle/DigitalDesign_prot.tex create mode 100644 bsp4/Protokolle/chapter1.tex create mode 100644 bsp4/Protokolle/chapter2.tex create mode 100644 bsp4/Protokolle/chapter3.tex create mode 100644 bsp4/Protokolle/chapter4.tex create mode 100644 bsp4/Protokolle/prot_1.txt create mode 100644 bsp4/Protokolle/prot_2.txt create mode 100644 bsp4/Protokolle/prot_4.txt diff --git a/bsp1/Angabe/dide_16.sof b/bsp1/Angabe/dide_16.sof new file mode 100644 index 0000000000000000000000000000000000000000..db16564bf98f5db385771e13deed1054942cde69 GIT binary patch literal 966463 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�{051$GQxb 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 digit_right <= DIGIT_ZERO; -- ...to translation table + when "0001" => digit_right <= DIGIT_ONE; + when "0010" => digit_right <= DIGIT_TWO; + when "0011" => digit_right <= DIGIT_THREE; + when "0100" => digit_right <= DIGIT_FOUR; + when "0101" => digit_right <= DIGIT_FIVE; + when "0110" => digit_right <= DIGIT_SIX; + when "0111" => digit_right <= DIGIT_SEVEN; + when "1000" => digit_right <= DIGIT_EIGHT; + when "1001" => digit_right <= DIGIT_NINE; + when others => digit_right <= DIGIT_F; -- use "F" as overflow + end case; + + case ten_value is -- same for "ten" position + when "0000" => digit_left <= DIGIT_ZERO; + when "0001" => digit_left <= DIGIT_ONE; + when "0010" => digit_left <= DIGIT_TWO; + when "0011" => digit_left <= DIGIT_THREE; + when "0100" => digit_left <= DIGIT_FOUR; + when "0101" => digit_left <= DIGIT_FIVE; + when "0110" => digit_left <= DIGIT_SIX; + when "0111" => digit_left <= DIGIT_SEVEN; + when "1000" => digit_left <= DIGIT_EIGHT; + when "1001" => digit_left <= DIGIT_NINE; + when others => digit_left <= DIGIT_F; + end case; + end if; + end process; + + +-- combine the two digits to one bus + seven_seg(SEG_WIDTH-1 downto 0) <= digit_right; + seven_seg(2*SEG_WIDTH-1 downto SEG_WIDTH) <= digit_left; + +end behav; diff --git a/bsp2/Angabe/board_driver_ent.vhd b/bsp2/Angabe/board_driver_ent.vhd new file mode 100644 index 0000000..17e5cf7 --- /dev/null +++ b/bsp2/Angabe/board_driver_ent.vhd @@ -0,0 +1,42 @@ +------------------------------------------------------------------------------- +-- Title : board_driver entity +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : board_driver_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: display number on 7-segment display +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + +entity board_driver is + + port ( + reset : in std_logic; + seven_seg : out std_logic_vector(2*SEG_WIDTH-1 downto 0) + ); +end board_driver; diff --git a/bsp2/Angabe/dide_16_2.txt b/bsp2/Angabe/dide_16_2.txt new file mode 100644 index 0000000..29c2cf3 --- /dev/null +++ b/bsp2/Angabe/dide_16_2.txt @@ -0,0 +1 @@ +Periodendauer: 0.12 Sekunden diff --git a/bsp2/Angabe/vga.hex b/bsp2/Angabe/vga.hex new file mode 100644 index 0000000..b3c05bd --- /dev/null +++ b/bsp2/Angabe/vga.hex @@ -0,0 +1,4097 @@ +:010000001ce3 +:010001001ce2 +:010002001ce1 +:010003001ce0 +:010004001cdf +:010005001cde +:010006001cdd +:010007001cdc +:010008001cdb +:010009001cda +:01000a001cd9 +:01000b001cd8 +:01000c001cd7 +:01000d001cd6 +:01000e001cd5 +:01000f001cd4 +:010010001cd3 +:010011001cd2 +:010012001cd1 +:010013001cd0 +:010014001ccf +:010015001cce +:010016001ccd +:010017001ccc +:010018001ccb +:010019001cca +:01001a001cc9 +:01001b001cc8 +:01001c001cc7 +:01001d001cc6 +:01001e001cc5 +:01001f001cc4 +:010020001cc3 +:010021001cc2 +:010022001cc1 +:010023001cc0 +:010024001cbf +:010025001cbe +:010026001cbd +:010027001cbc +:010028001cbb +:010029001cba +:01002a001cb9 +:01002b001cb8 +:01002c001cb7 +:01002d001cb6 +:01002e001cb5 +:01002f001cb4 +:010030001cb3 +:010031001cb2 +:010032001cb1 +:010033001cb0 +:010034001caf +:010035001cae +:010036001cad +:010037001cac +:010038001cab +:010039001caa +:01003a001ca9 +:01003b001ca8 +:01003c001ca7 +:01003d001ca6 +:01003e001ca5 +:01003f001ca4 +:0100400003bc +:0100410000be +:0100420000bd +:0100430000bc +:0100440000bb +:0100450000ba +:0100460000b9 +:0100470000b8 +:0100480000b7 +:0100490000b6 +:01004a0000b5 +:01004b0000b4 +:01004c0000b3 +:01004d0000b2 +:01004e0000b1 +:01004f0000b0 +:0100500000af +:0100510000ae +:0100520000ad +:0100530000ac +:0100540000ab +:0100550000aa +:0100560000a9 +:0100570000a8 +:0100580000a7 +:0100590000a6 +:01005a0000a5 +:01005b0000a4 +:01005c0000a3 +:01005d0000a2 +:01005e0000a1 +:01005f0000a0 +:01006000009f +:01006100009e +:01006200009d +:01006300009c +:01006400009b +:01006500009a +:010066000099 +:010067000098 +:010068000097 +:010069000096 +:01006a000095 +:01006b000094 +:01006c000093 +:01006d000092 +:01006e000091 +:01006f000090 +:01007000008f +:01007100008e +:01007200008d +:01007300008c +:01007400008b +:01007500008a +:010076000089 +:010077000088 +:010078000087 +:010079000086 +:01007a000085 +:01007b000084 +:01007c000083 +:01007d000082 +:01007e000081 +:01007f0090f0 +:01008000037c +:01008100007e +:01008200007d +:01008300007c +:01008400007b +:01008500007a +:010086000079 +:010087000078 +:010088000077 +:010089000076 +:01008a000075 +:01008b000074 +:01008c000073 +:01008d000072 +:01008e000071 +:01008f000070 +:01009000006f +:01009100006e +:01009200006d +:01009300006c +:01009400006b +:01009500006a +:010096000069 +:010097000068 +:010098000067 +:010099000066 +:01009a000065 +:01009b000064 +:01009c000063 +:01009d000062 +:01009e000061 +:01009f000060 +:0100a000005f +:0100a100005e +:0100a200005d +:0100a300005c +:0100a400005b +:0100a500005a +:0100a6000059 +:0100a7000058 +:0100a8000057 +:0100a9000056 +:0100aa000055 +:0100ab000054 +:0100ac000053 +:0100ad000052 +:0100ae000051 +:0100af000050 +:0100b000004f +:0100b100004e +:0100b200004d +:0100b300004c +:0100b400004b +:0100b500004a +:0100b6000049 +:0100b7000048 +:0100b8000047 +:0100b9000046 +:0100ba000045 +:0100bb000044 +:0100bc000043 +:0100bd000042 +:0100be000041 +:0100bf0090b0 +:0100c000033c +:0100c100003e +:0100c200003d +:0100c300003c +:0100c400003b +:0100c500003a +:0100c6000039 +:0100c7000038 +:0100c8000037 +:0100c9000036 +:0100ca000035 +:0100cb000034 +:0100cc000033 +:0100cd000032 +:0100ce000031 +:0100cf000030 +:0100d000002f +:0100d100002e +:0100d200002d +:0100d300002c +:0100d400002b +:0100d500002a +:0100d6000029 +:0100d7000028 +:0100d8000027 +:0100d9000026 +:0100da000025 +:0100db000024 +:0100dc000023 +:0100dd000022 +:0100de000021 +:0100df000020 +:0100e000001f +:0100e100001e +:0100e200001d +:0100e300001c +:0100e400001b +:0100e500001a +:0100e6000019 +:0100e7000018 +:0100e8000017 +:0100e9000016 +:0100ea000015 +:0100eb000014 +:0100ec000013 +:0100ed000012 +:0100ee000011 +:0100ef000010 +:0100f000000f +:0100f100000e +:0100f200000d +:0100f300000c +:0100f400000b +:0100f500000a +:0100f6000009 +:0100f7000008 +:0100f8000007 +:0100f9000006 +:0100fa000005 +:0100fb000004 +:0100fc000003 +:0100fd000002 +:0100fe000001 +:0100ff009070 +:0101000003fb +:0101010000fd +:0101020000fc +:0101030000fb +:0101040000fa +:0101050000f9 +:0101060000f8 +:0101070000f7 +:0101080000f6 +:0101090000f5 +:01010a0000f4 +:01010b0000f3 +:01010c0000f2 +:01010d0000f1 +:01010e0000f0 +:01010f0000ef +:0101100000ee +:0101110000ed +:0101120000ec +:0101130000eb +:0101140000ea +:0101150000e9 +:0101160000e8 +:0101170000e7 +:0101180000e6 +:0101190000e5 +:01011a0000e4 +:01011b0000e3 +:01011c0000e2 +:01011d0000e1 +:01011e0000e0 +:01011f0000df +:0101200000de +:0101210000dd +:0101220000dc +:0101230000db +:0101240000da +:0101250000d9 +:0101260000d8 +:0101270000d7 +:0101280000d6 +:0101290000d5 +:01012a0000d4 +:01012b0000d3 +:01012c0000d2 +:01012d0000d1 +:01012e0000d0 +:01012f0000cf +:0101300000ce +:0101310000cd +:0101320000cc +:0101330000cb +:0101340000ca +:0101350000c9 +:0101360000c8 +:0101370000c7 +:0101380000c6 +:0101390000c5 +:01013a0000c4 +:01013b0000c3 +:01013c0000c2 +:01013d0000c1 +:01013e0000c0 +:01013f00902f +:0101400003bb +:0101410000bd +:0101420000bc +:0101430000bb +:0101440000ba +:0101450000b9 +:0101460000b8 +:0101470000b7 +:0101480000b6 +:0101490000b5 +:01014a0000b4 +:01014b0000b3 +:01014c0000b2 +:01014d0000b1 +:01014e0000b0 +:01014f0000af +:0101500000ae +:0101510000ad +:0101520000ac +:0101530000ab +:0101540000aa +:0101550000a9 +:0101560000a8 +:0101570000a7 +:0101580000a6 +:0101590000a5 +:01015a0000a4 +:01015b0000a3 +:01015c0000a2 +:01015d0000a1 +:01015e0000a0 +:01015f00009f +:01016000009e +:01016100009d +:01016200009c +:01016300009b +:01016400009a +:010165000099 +:010166000098 +:010167000097 +:010168000096 +:010169000095 +:01016a000094 +:01016b000093 +:01016c000092 +:01016d000091 +:01016e000090 +:01016f00008f +:01017000008e +:01017100008d +:01017200008c +:01017300008b +:01017400008a +:010175000089 +:010176000088 +:010177000087 +:010178000086 +:010179000085 +:01017a000084 +:01017b000083 +:01017c000082 +:01017d000081 +:01017e000080 +:01017f0090ef +:01018000037b +:01018100007d +:01018200007c +:01018300007b +:01018400007a +:010185000079 +:010186000078 +:010187000077 +:010188000076 +:010189000075 +:01018a000074 +:01018b000073 +:01018c000072 +:01018d000071 +:01018e000070 +:01018f00006f +:01019000006e +:01019100006d +:01019200006c +:01019300006b +:01019400006a +:010195000069 +:010196000068 +:010197000067 +:010198000066 +:010199000065 +:01019a000064 +:01019b000063 +:01019c000062 +:01019d000061 +:01019e000060 +:01019f00005f +:0101a000005e +:0101a100005d +:0101a200005c +:0101a300005b +:0101a400005a +:0101a5000059 +:0101a6000058 +:0101a7000057 +:0101a8000056 +:0101a9000055 +:0101aa000054 +:0101ab000053 +:0101ac000052 +:0101ad000051 +:0101ae000050 +:0101af00004f +:0101b000004e +:0101b100004d +:0101b200004c +:0101b300004b +:0101b400004a +:0101b5000049 +:0101b6000048 +:0101b7000047 +:0101b8000046 +:0101b9000045 +:0101ba000044 +:0101bb000043 +:0101bc000042 +:0101bd000041 +:0101be000040 +:0101bf0090af +:0101c000033b +:0101c100003d +:0101c200003c +:0101c300003b +:0101c400003a +:0101c5000039 +:0101c6000038 +:0101c7000037 +:0101c8000036 +:0101c9000035 +:0101ca000034 +:0101cb000033 +:0101cc000032 +:0101cd000031 +:0101ce000030 +:0101cf00002f +:0101d000002e +:0101d100002d +:0101d200002c +:0101d300002b +:0101d400002a +:0101d5000029 +:0101d6000028 +:0101d7000027 +:0101d8000026 +:0101d9000025 +:0101da000024 +:0101db000023 +:0101dc000022 +:0101dd000021 +:0101de000020 +:0101df00001f +:0101e000001e +:0101e100001d +:0101e200001c +:0101e300001b +:0101e400001a +:0101e5000019 +:0101e6000018 +:0101e7000017 +:0101e8000016 +:0101e9000015 +:0101ea000014 +:0101eb000013 +:0101ec000012 +:0101ed000011 +:0101ee000010 +:0101ef00000f +:0101f000000e +:0101f100000d +:0101f200000c +:0101f300000b +:0101f400000a +:0101f5000009 +:0101f6000008 +:0101f7000007 +:0101f8000006 +:0101f9000005 +:0101fa000004 +:0101fb000003 +:0101fc000002 +:0101fd000001 +:0101fe000000 +:0101ff00906f +:0102000003fa +:0102010000fc +:0102020000fb +:0102030000fa +:0102040000f9 +:0102050000f8 +:0102060000f7 +:0102070000f6 +:0102080000f5 +:0102090000f4 +:01020a0000f3 +:01020b0000f2 +:01020c0000f1 +:01020d0000f0 +:01020e0000ef +:01020f0000ee +:0102100000ed +:0102110000ec +:0102120000eb +:0102130000ea +:0102140000e9 +:0102150000e8 +:0102160000e7 +:0102170000e6 +:0102180000e5 +:0102190000e4 +:01021a0000e3 +:01021b0000e2 +:01021c0000e1 +:01021d0000e0 +:01021e0000df +:01021f0000de +:0102200000dd +:0102210000dc +:0102220000db +:0102230000da +:0102240000d9 +:0102250000d8 +:0102260000d7 +:0102270000d6 +:0102280000d5 +:0102290000d4 +:01022a0000d3 +:01022b0000d2 +:01022c0000d1 +:01022d0000d0 +:01022e0000cf +:01022f0000ce +:0102300000cd +:0102310000cc +:0102320000cb +:0102330000ca +:0102340000c9 +:0102350000c8 +:0102360000c7 +:0102370000c6 +:0102380000c5 +:0102390000c4 +:01023a0000c3 +:01023b0000c2 +:01023c0000c1 +:01023d0000c0 +:01023e0000bf +:01023f00902e +:0102400003ba +:0102410000bc +:0102420000bb +:0102430000ba +:0102440000b9 +:0102450000b8 +:0102460000b7 +:0102470000b6 +:0102480000b5 +:0102490000b4 +:01024a0000b3 +:01024b0000b2 +:01024c0000b1 +:01024d0000b0 +:01024e0000af +:01024f0000ae +:0102500000ad +:0102510000ac +:0102520000ab +:0102530000aa +:0102540000a9 +:0102550000a8 +:0102560000a7 +:0102570000a6 +:0102580000a5 +:0102590000a4 +:01025a0000a3 +:01025b0000a2 +:01025c0000a1 +:01025d0000a0 +:01025e00009f +:01025f00009e +:01026000009d +:01026100009c +:01026200009b +:01026300009a +:010264000099 +:010265000098 +:010266000097 +:010267000096 +:010268000095 +:010269000094 +:01026a000093 +:01026b000092 +:01026c000091 +:01026d000090 +:01026e00008f +:01026f00008e +:01027000008d +:01027100008c +:01027200008b +:01027300008a +:010274000089 +:010275000088 +:010276000087 +:010277000086 +:010278000085 +:010279000084 +:01027a000083 +:01027b000082 +:01027c000081 +:01027d000080 +:01027e00007f +:01027f0090ee +:01028000037a +:01028100007c +:01028200007b +:01028300007a +:010284000079 +:010285000078 +:010286000077 +:010287000076 +:010288000075 +:010289000074 +:01028a000073 +:01028b000072 +:01028c000071 +:01028d000070 +:01028e00006f +:01028f00006e +:01029000006d +:01029100006c +:01029200006b +:01029300006a +:010294000069 +:010295000068 +:010296000067 +:010297000066 +:010298000065 +:010299000064 +:01029a000063 +:01029b000062 +:01029c000061 +:01029d000060 +:01029e00005f +:01029f00005e +:0102a000005d +:0102a100005c +:0102a200005b +:0102a300005a +:0102a4000059 +:0102a5000058 +:0102a6000057 +:0102a7000056 +:0102a8000055 +:0102a9000054 +:0102aa000053 +:0102ab000052 +:0102ac000051 +:0102ad000050 +:0102ae00004f +:0102af00004e +:0102b000004d +:0102b100004c +:0102b200004b +:0102b300004a +:0102b4000049 +:0102b5000048 +:0102b6000047 +:0102b7000046 +:0102b8000045 +:0102b9000044 +:0102ba000043 +:0102bb000042 +:0102bc000041 +:0102bd000040 +:0102be00003f +:0102bf0090ae +:0102c000033a +:0102c100003c +:0102c200003b +:0102c300003a +:0102c4000039 +:0102c5000038 +:0102c6000037 +:0102c7000036 +:0102c8000035 +:0102c9000034 +:0102ca000033 +:0102cb000032 +:0102cc000031 +:0102cd000030 +:0102ce00002f +:0102cf00002e +:0102d000002d +:0102d100002c +:0102d200002b +:0102d300002a +:0102d4000029 +:0102d5000028 +:0102d6000027 +:0102d7000026 +:0102d8000025 +:0102d9000024 +:0102da000023 +:0102db000022 +:0102dc000021 +:0102dd000020 +:0102de00001f +:0102df00001e +:0102e000001d +:0102e100001c +:0102e200001b +:0102e300001a +:0102e4000019 +:0102e5000018 +:0102e6000017 +:0102e7000016 +:0102e8000015 +:0102e9000014 +:0102ea000013 +:0102eb000012 +:0102ec000011 +:0102ed000010 +:0102ee00000f +:0102ef00000e +:0102f000000d +:0102f100000c +:0102f200000b +:0102f300000a +:0102f4000009 +:0102f5000008 +:0102f6000007 +:0102f7000006 +:0102f8000005 +:0102f9000004 +:0102fa000003 +:0102fb000002 +:0102fc000001 +:0102fd000000 +:0102fe0000ff +:0102ff00906e +:0103000003f9 +:0103010000fb +:0103020000fa +:0103030000f9 +:0103040000f8 +:0103050000f7 +:0103060000f6 +:0103070000f5 +:0103080000f4 +:0103090000f3 +:01030a0000f2 +:01030b0000f1 +:01030c0000f0 +:01030d0000ef +:01030e0000ee +:01030f0000ed +:0103100000ec +:0103110000eb +:0103120000ea +:0103130000e9 +:0103140000e8 +:0103150000e7 +:0103160000e6 +:0103170000e5 +:0103180000e4 +:0103190000e3 +:01031a0000e2 +:01031b0000e1 +:01031c0000e0 +:01031d0000df +:01031e0000de +:01031f0000dd +:0103200000dc +:0103210000db +:0103220000da +:0103230000d9 +:0103240000d8 +:0103250000d7 +:0103260000d6 +:0103270000d5 +:0103280000d4 +:0103290000d3 +:01032a0000d2 +:01032b0000d1 +:01032c0000d0 +:01032d0000cf +:01032e0000ce +:01032f0000cd +:0103300000cc +:0103310000cb +:0103320000ca +:0103330000c9 +:0103340000c8 +:0103350000c7 +:0103360000c6 +:0103370000c5 +:0103380000c4 +:0103390000c3 +:01033a0000c2 +:01033b0000c1 +:01033c0000c0 +:01033d0000bf +:01033e0000be +:01033f00902d +:0103400003b9 +:0103410000bb +:0103420000ba +:0103430000b9 +:0103440000b8 +:0103450000b7 +:0103460000b6 +:0103470000b5 +:0103480000b4 +:0103490000b3 +:01034a0000b2 +:01034b0000b1 +:01034c0000b0 +:01034d0000af +:01034e0000ae +:01034f0000ad +:0103500000ac +:0103510000ab +:0103520000aa +:0103530000a9 +:0103540000a8 +:0103550000a7 +:0103560000a6 +:0103570000a5 +:0103580000a4 +:0103590000a3 +:01035a0000a2 +:01035b0000a1 +:01035c0000a0 +:01035d00009f +:01035e00009e +:01035f00009d +:01036000009c +:01036100009b +:01036200009a +:010363000099 +:010364000098 +:010365000097 +:010366000096 +:010367000095 +:010368000094 +:010369000093 +:01036a000092 +:01036b000091 +:01036c000090 +:01036d00008f +:01036e00008e +:01036f00008d +:01037000008c +:01037100008b +:01037200008a +:010373000089 +:010374000088 +:010375000087 +:010376000086 +:010377000085 +:010378000084 +:010379000083 +:01037a000082 +:01037b000081 +:01037c000080 +:01037d00007f +:01037e00007e +:01037f0090ed +:010380000379 +:01038100007b +:01038200007a +:010383000079 +:010384000078 +:010385000077 +:010386000076 +:010387000075 +:010388000074 +:010389000073 +:01038a000072 +:01038b000071 +:01038c000070 +:01038d00006f +:01038e00006e +:01038f00006d +:01039000006c +:01039100006b +:01039200006a +:010393000069 +:010394000068 +:010395000067 +:010396000066 +:010397000065 +:010398000064 +:010399000063 +:01039a000062 +:01039b000061 +:01039c000060 +:01039d00005f +:01039e00005e +:01039f00005d +:0103a000005c +:0103a100005b +:0103a200005a +:0103a3000059 +:0103a4000058 +:0103a5000057 +:0103a6000056 +:0103a7000055 +:0103a8000054 +:0103a9000053 +:0103aa000052 +:0103ab000051 +:0103ac000050 +:0103ad00004f +:0103ae00004e +:0103af00004d +:0103b000004c +:0103b100004b +:0103b200004a +:0103b3000049 +:0103b4000048 +:0103b5000047 +:0103b6000046 +:0103b7000045 +:0103b8000044 +:0103b9000043 +:0103ba000042 +:0103bb000041 +:0103bc000040 +:0103bd00003f +:0103be00003e +:0103bf0090ad +:0103c0000339 +:0103c100003b +:0103c200003a +:0103c3000039 +:0103c4000038 +:0103c5000037 +:0103c6000036 +:0103c7000035 +:0103c8000034 +:0103c9000033 +:0103ca000032 +:0103cb000031 +:0103cc000030 +:0103cd00002f +:0103ce00002e +:0103cf00002d +:0103d000002c +:0103d100002b +:0103d200002a +:0103d3000029 +:0103d4000028 +:0103d5000027 +:0103d6000026 +:0103d7000025 +:0103d8000024 +:0103d9000023 +:0103da000022 +:0103db000021 +:0103dc000020 +:0103dd00001f +:0103de00001e +:0103df00001d +:0103e000001c +:0103e100001b +:0103e200001a +:0103e3000019 +:0103e4000018 +:0103e5000017 +:0103e6000016 +:0103e7000015 +:0103e8000014 +:0103e9000013 +:0103ea000012 +:0103eb000011 +:0103ec000010 +:0103ed00000f +:0103ee00000e +:0103ef00000d +:0103f000000c +:0103f100000b +:0103f200000a +:0103f3000009 +:0103f4000008 +:0103f5000007 +:0103f6000006 +:0103f7000005 +:0103f8000004 +:0103f9000003 +:0103fa000002 +:0103fb000001 +:0103fc000000 +:0103fd0000ff +:0103fe0000fe +:0103ff00906d +:0104000003f8 +:0104010000fa +:0104020000f9 +:0104030000f8 +:0104040000f7 +:0104050000f6 +:0104060000f5 +:0104070000f4 +:0104080000f3 +:0104090000f2 +:01040a0000f1 +:01040b0000f0 +:01040c0000ef +:01040d0000ee +:01040e0000ed +:01040f0000ec +:0104100000eb +:0104110000ea +:0104120000e9 +:0104130000e8 +:0104140000e7 +:0104150000e6 +:0104160000e5 +:0104170000e4 +:0104180000e3 +:0104190000e2 +:01041a0000e1 +:01041b0000e0 +:01041c0000df +:01041d0000de +:01041e0000dd +:01041f0000dc +:0104200000db +:0104210000da +:0104220000d9 +:0104230000d8 +:0104240000d7 +:0104250000d6 +:0104260000d5 +:0104270000d4 +:0104280000d3 +:0104290000d2 +:01042a0000d1 +:01042b0000d0 +:01042c0000cf +:01042d0000ce +:01042e0000cd +:01042f0000cc +:0104300000cb +:0104310000ca +:0104320000c9 +:0104330000c8 +:0104340000c7 +:0104350000c6 +:0104360000c5 +:0104370000c4 +:0104380000c3 +:0104390000c2 +:01043a0000c1 +:01043b0000c0 +:01043c0000bf +:01043d0000be +:01043e0000bd +:01043f00902c +:0104400003b8 +:0104410000ba +:0104420000b9 +:0104430000b8 +:0104440000b7 +:0104450000b6 +:0104460000b5 +:0104470000b4 +:0104480000b3 +:0104490000b2 +:01044a0000b1 +:01044b0000b0 +:01044c0000af +:01044d0000ae +:01044e0000ad +:01044f0000ac +:0104500000ab +:0104510000aa +:0104520000a9 +:0104530000a8 +:0104540000a7 +:0104550000a6 +:0104560000a5 +:0104570000a4 +:0104580000a3 +:0104590000a2 +:01045a0000a1 +:01045b0000a0 +:01045c00009f +:01045d00009e +:01045e00009d +:01045f00009c +:01046000009b +:01046100009a +:010462000099 +:010463000098 +:010464000097 +:010465000096 +:010466000095 +:010467000094 +:010468000093 +:010469000092 +:01046a000091 +:01046b000090 +:01046c00008f +:01046d00008e +:01046e00008d +:01046f00008c +:01047000008b +:01047100008a +:010472000089 +:010473000088 +:010474000087 +:010475000086 +:010476000085 +:010477000084 +:010478000083 +:010479000082 +:01047a000081 +:01047b000080 +:01047c00007f +:01047d00007e +:01047e00007d +:01047f0090ec +:010480000378 +:01048100007a +:010482000079 +:010483000078 +:010484000077 +:010485000076 +:010486000075 +:010487000074 +:010488000073 +:010489000072 +:01048a000071 +:01048b000070 +:01048c00006f +:01048d00006e +:01048e00006d +:01048f00006c +:01049000006b +:01049100006a +:010492000069 +:010493000068 +:010494000067 +:010495000066 +:010496000065 +:010497000064 +:010498000063 +:010499000062 +:01049a000061 +:01049b000060 +:01049c00005f +:01049d00005e +:01049e00005d +:01049f00005c +:0104a000005b +:0104a100005a +:0104a2000059 +:0104a3000058 +:0104a4000057 +:0104a5000056 +:0104a6000055 +:0104a7000054 +:0104a8000053 +:0104a9000052 +:0104aa000051 +:0104ab000050 +:0104ac00004f +:0104ad00004e +:0104ae00004d +:0104af00004c +:0104b000004b +:0104b100004a +:0104b2000049 +:0104b3000048 +:0104b4000047 +:0104b5000046 +:0104b6000045 +:0104b7000044 +:0104b8000043 +:0104b9000042 +:0104ba000041 +:0104bb000040 +:0104bc00003f +:0104bd00003e +:0104be00003d +:0104bf0090ac +:0104c0000338 +:0104c100003a +:0104c2000039 +:0104c3000038 +:0104c4000037 +:0104c5000036 +:0104c6000035 +:0104c7000034 +:0104c8000033 +:0104c9000032 +:0104ca000031 +:0104cb000030 +:0104cc00002f +:0104cd00002e +:0104ce00002d +:0104cf00002c +:0104d000002b +:0104d100002a +:0104d2000029 +:0104d3000028 +:0104d4000027 +:0104d5000026 +:0104d6000025 +:0104d7000024 +:0104d8000023 +:0104d9000022 +:0104da000021 +:0104db000020 +:0104dc00001f +:0104dd00001e +:0104de00001d +:0104df00001c +:0104e000001b +:0104e100001a +:0104e2000019 +:0104e3000018 +:0104e4000017 +:0104e5000016 +:0104e6000015 +:0104e7000014 +:0104e8000013 +:0104e9000012 +:0104ea000011 +:0104eb000010 +:0104ec00000f +:0104ed00000e +:0104ee00000d +:0104ef00000c +:0104f000000b +:0104f100000a +:0104f2000009 +:0104f3000008 +:0104f4000007 +:0104f5000006 +:0104f6000005 +:0104f7000004 +:0104f8000003 +:0104f9000002 +:0104fa000001 +:0104fb000000 +:0104fc0000ff +:0104fd0000fe +:0104fe0000fd +:0104ff00906c +:0105000003f7 +:0105010000f9 +:0105020000f8 +:0105030000f7 +:0105040000f6 +:0105050000f5 +:0105060000f4 +:0105070000f3 +:0105080000f2 +:0105090000f1 +:01050a0000f0 +:01050b0000ef +:01050c0000ee +:01050d0000ed +:01050e0000ec +:01050f0000eb +:0105100000ea +:0105110000e9 +:0105120000e8 +:0105130000e7 +:0105140000e6 +:0105150000e5 +:0105160000e4 +:0105170000e3 +:0105180000e2 +:0105190000e1 +:01051a0000e0 +:01051b0000df +:01051c0000de +:01051d0000dd +:01051e0000dc +:01051f0000db +:0105200000da +:0105210000d9 +:0105220000d8 +:0105230000d7 +:0105240000d6 +:0105250000d5 +:0105260000d4 +:0105270000d3 +:0105280000d2 +:0105290000d1 +:01052a0000d0 +:01052b0000cf +:01052c0000ce +:01052d0000cd +:01052e0000cc +:01052f0000cb +:0105300000ca +:0105310000c9 +:0105320000c8 +:0105330000c7 +:0105340000c6 +:0105350000c5 +:0105360000c4 +:0105370000c3 +:0105380000c2 +:0105390000c1 +:01053a0000c0 +:01053b0000bf +:01053c0000be +:01053d0000bd +:01053e0000bc +:01053f00902b +:0105400003b7 +:0105410000b9 +:0105420000b8 +:0105430000b7 +:0105440000b6 +:0105450000b5 +:0105460000b4 +:0105470000b3 +:0105480000b2 +:0105490000b1 +:01054a0000b0 +:01054b0000af +:01054c0000ae +:01054d0000ad +:01054e0000ac +:01054f0000ab +:0105500000aa +:0105510000a9 +:0105520000a8 +:0105530000a7 +:0105540000a6 +:0105550000a5 +:0105560000a4 +:0105570000a3 +:0105580000a2 +:0105590000a1 +:01055a0000a0 +:01055b00009f +:01055c00009e +:01055d00009d +:01055e00009c +:01055f00009b +:01056000009a +:010561000099 +:010562000098 +:010563000097 +:010564000096 +:010565000095 +:010566000094 +:010567000093 +:010568000092 +:010569000091 +:01056a000090 +:01056b00008f +:01056c00008e +:01056d00008d +:01056e00008c +:01056f00008b +:01057000008a +:010571000089 +:010572000088 +:010573000087 +:010574000086 +:010575000085 +:010576000084 +:010577000083 +:010578000082 +:010579000081 +:01057a000080 +:01057b00007f +:01057c00007e +:01057d00007d +:01057e00007c +:01057f0090eb +:010580000377 +:010581000079 +:010582000078 +:010583000077 +:010584000076 +:010585000075 +:010586000074 +:010587000073 +:010588000072 +:010589000071 +:01058a000070 +:01058b00006f +:01058c00006e +:01058d00006d +:01058e00006c +:01058f00006b +:01059000006a +:010591000069 +:010592000068 +:010593000067 +:010594000066 +:010595000065 +:010596000064 +:010597000063 +:010598000062 +:010599000061 +:01059a000060 +:01059b00005f +:01059c00005e +:01059d00005d +:01059e00005c +:01059f00005b +:0105a000005a +:0105a1000059 +:0105a2000058 +:0105a3000057 +:0105a4000056 +:0105a5000055 +:0105a6000054 +:0105a7000053 +:0105a8000052 +:0105a9000051 +:0105aa000050 +:0105ab00004f +:0105ac00004e +:0105ad00004d +:0105ae00004c +:0105af00004b +:0105b000004a +:0105b1000049 +:0105b2000048 +:0105b3000047 +:0105b4000046 +:0105b5000045 +:0105b6000044 +:0105b7000043 +:0105b8000042 +:0105b9000041 +:0105ba000040 +:0105bb00003f +:0105bc00003e +:0105bd00003d +:0105be00003c +:0105bf0090ab +:0105c0000337 +:0105c1000039 +:0105c2000038 +:0105c3000037 +:0105c4000036 +:0105c5000035 +:0105c6000034 +:0105c7000033 +:0105c8000032 +:0105c9000031 +:0105ca000030 +:0105cb00002f +:0105cc00002e +:0105cd00002d +:0105ce00002c +:0105cf00002b +:0105d000002a +:0105d1000029 +:0105d2000028 +:0105d3000027 +:0105d4000026 +:0105d5000025 +:0105d6000024 +:0105d7000023 +:0105d8000022 +:0105d9000021 +:0105da000020 +:0105db00001f +:0105dc00001e +:0105dd00001d +:0105de00001c +:0105df00001b +:0105e000001a +:0105e1000019 +:0105e2000018 +:0105e3000017 +:0105e4000016 +:0105e5000015 +:0105e6000014 +:0105e7000013 +:0105e8000012 +:0105e9000011 +:0105ea000010 +:0105eb00000f +:0105ec00000e +:0105ed00000d +:0105ee00000c +:0105ef00000b +:0105f000000a +:0105f1000009 +:0105f2000008 +:0105f3000007 +:0105f4000006 +:0105f5000005 +:0105f6000004 +:0105f7000003 +:0105f8000002 +:0105f9000001 +:0105fa000000 +:0105fb0000ff +:0105fc0000fe +:0105fd0000fd +:0105fe0000fc +:0105ff00906b +:0106000003f6 +:0106010000f8 +:0106020000f7 +:0106030000f6 +:0106040000f5 +:0106050000f4 +:0106060000f3 +:0106070000f2 +:0106080000f1 +:0106090000f0 +:01060a0000ef +:01060b0000ee +:01060c0000ed +:01060d0000ec +:01060e0000eb +:01060f0000ea +:0106100000e9 +:0106110000e8 +:0106120000e7 +:0106130000e6 +:0106140000e5 +:0106150000e4 +:0106160000e3 +:0106170000e2 +:0106180000e1 +:0106190000e0 +:01061a0000df +:01061b0000de +:01061c0000dd +:01061d0000dc +:01061e0000db +:01061f0000da +:0106200000d9 +:0106210000d8 +:0106220000d7 +:0106230000d6 +:0106240000d5 +:0106250000d4 +:0106260000d3 +:0106270000d2 +:0106280000d1 +:0106290000d0 +:01062a0000cf +:01062b0000ce +:01062c0000cd +:01062d0000cc +:01062e0000cb +:01062f0000ca +:0106300000c9 +:0106310000c8 +:0106320000c7 +:0106330000c6 +:0106340000c5 +:0106350000c4 +:0106360000c3 +:0106370000c2 +:0106380000c1 +:0106390000c0 +:01063a0000bf +:01063b0000be +:01063c0000bd +:01063d0000bc +:01063e0000bb +:01063f00902a +:0106400003b6 +:0106410000b8 +:0106420000b7 +:0106430000b6 +:0106440000b5 +:0106450000b4 +:0106460000b3 +:0106470000b2 +:0106480000b1 +:0106490000b0 +:01064a0000af +:01064b0000ae +:01064c0000ad +:01064d0000ac +:01064e0000ab +:01064f0000aa +:0106500000a9 +:0106510000a8 +:0106520000a7 +:0106530000a6 +:0106540000a5 +:0106550000a4 +:0106560000a3 +:0106570000a2 +:0106580000a1 +:0106590000a0 +:01065a00009f +:01065b00009e +:01065c00009d +:01065d00009c +:01065e00009b +:01065f00009a +:010660000099 +:010661000098 +:010662000097 +:010663000096 +:010664000095 +:010665000094 +:010666000093 +:010667000092 +:010668000091 +:010669000090 +:01066a00008f +:01066b00008e +:01066c00008d +:01066d00008c +:01066e00008b +:01066f00008a +:010670000089 +:010671000088 +:010672000087 +:010673000086 +:010674000085 +:010675000084 +:010676000083 +:010677000082 +:010678000081 +:010679000080 +:01067a00007f +:01067b00007e +:01067c00007d +:01067d00007c +:01067e00007b +:01067f0090ea +:010680000376 +:010681000078 +:010682000077 +:010683000076 +:010684000075 +:010685000074 +:010686000073 +:010687000072 +:010688000071 +:010689000070 +:01068a00006f +:01068b00006e +:01068c00006d +:01068d00006c +:01068e00006b +:01068f00006a +:010690000069 +:010691000068 +:010692000067 +:010693000066 +:010694000065 +:010695000064 +:010696000063 +:010697000062 +:010698000061 +:010699000060 +:01069a00005f +:01069b00005e +:01069c00005d +:01069d00005c +:01069e00005b +:01069f00005a +:0106a0000059 +:0106a1000058 +:0106a2000057 +:0106a3000056 +:0106a4000055 +:0106a5000054 +:0106a6000053 +:0106a7000052 +:0106a8000051 +:0106a9000050 +:0106aa00004f +:0106ab00004e +:0106ac00004d +:0106ad00004c +:0106ae00004b +:0106af00004a +:0106b0000049 +:0106b1000048 +:0106b2000047 +:0106b3000046 +:0106b4000045 +:0106b5000044 +:0106b6000043 +:0106b7000042 +:0106b8000041 +:0106b9000040 +:0106ba00003f +:0106bb00003e +:0106bc00003d +:0106bd00003c +:0106be00003b +:0106bf0090aa +:0106c0000336 +:0106c1000038 +:0106c2000037 +:0106c3000036 +:0106c4000035 +:0106c5000034 +:0106c6000033 +:0106c7000032 +:0106c8000031 +:0106c9000030 +:0106ca00002f +:0106cb00002e +:0106cc00002d +:0106cd00002c +:0106ce00002b +:0106cf00002a +:0106d0000029 +:0106d1000028 +:0106d2000027 +:0106d3000026 +:0106d4000025 +:0106d5000024 +:0106d6000023 +:0106d7000022 +:0106d8000021 +:0106d9000020 +:0106da00001f +:0106db00001e +:0106dc00001d +:0106dd00001c +:0106de00001b +:0106df00001a +:0106e0000019 +:0106e1000018 +:0106e2000017 +:0106e3000016 +:0106e4000015 +:0106e5000014 +:0106e6000013 +:0106e7000012 +:0106e8000011 +:0106e9000010 +:0106ea00000f +:0106eb00000e +:0106ec00000d +:0106ed00000c +:0106ee00000b +:0106ef00000a +:0106f0000009 +:0106f1000008 +:0106f2000007 +:0106f3000006 +:0106f4000005 +:0106f5000004 +:0106f6000003 +:0106f7000002 +:0106f8000001 +:0106f9000000 +:0106fa0000ff +:0106fb0000fe +:0106fc0000fd +:0106fd0000fc +:0106fe0000fb +:0106ff00906a +:0107000003f5 +:0107010000f7 +:0107020000f6 +:0107030000f5 +:0107040000f4 +:0107050000f3 +:0107060000f2 +:0107070000f1 +:0107080000f0 +:0107090000ef +:01070a0000ee +:01070b0000ed +:01070c0000ec +:01070d0000eb +:01070e0000ea +:01070f0000e9 +:0107100000e8 +:0107110000e7 +:0107120000e6 +:0107130000e5 +:0107140000e4 +:0107150000e3 +:0107160000e2 +:0107170000e1 +:0107180000e0 +:0107190000df +:01071a0000de +:01071b0000dd +:01071c0000dc +:01071d0000db +:01071e0000da +:01071f0000d9 +:0107200000d8 +:0107210000d7 +:0107220000d6 +:0107230000d5 +:0107240000d4 +:0107250000d3 +:0107260000d2 +:0107270000d1 +:0107280000d0 +:0107290000cf +:01072a0000ce +:01072b0000cd +:01072c0000cc +:01072d0000cb +:01072e0000ca +:01072f0000c9 +:0107300000c8 +:0107310000c7 +:0107320000c6 +:0107330000c5 +:0107340000c4 +:0107350000c3 +:0107360000c2 +:0107370000c1 +:0107380000c0 +:0107390000bf +:01073a0000be +:01073b0000bd +:01073c0000bc +:01073d0000bb +:01073e0000ba +:01073f009029 +:0107400003b5 +:0107410000b7 +:0107420000b6 +:0107430000b5 +:0107440000b4 +:0107450000b3 +:0107460000b2 +:0107470000b1 +:0107480000b0 +:0107490000af +:01074a0000ae +:01074b0000ad +:01074c0000ac +:01074d0000ab +:01074e0000aa +:01074f0000a9 +:0107500000a8 +:0107510000a7 +:0107520000a6 +:0107530000a5 +:0107540000a4 +:0107550000a3 +:0107560000a2 +:0107570000a1 +:0107580000a0 +:01075900009f +:01075a00009e +:01075b00009d +:01075c00009c +:01075d00009b +:01075e00009a +:01075f000099 +:010760000098 +:010761000097 +:010762000096 +:010763000095 +:010764000094 +:010765000093 +:010766000092 +:010767000091 +:010768000090 +:01076900008f +:01076a00008e +:01076b00008d +:01076c00008c +:01076d00008b +:01076e00008a +:01076f000089 +:010770000088 +:010771000087 +:010772000086 +:010773000085 +:010774000084 +:010775000083 +:010776000082 +:010777000081 +:010778000080 +:01077900007f +:01077a00007e +:01077b00007d +:01077c00007c +:01077d00007b +:01077e00007a +:01077f0090e9 +:010780000375 +:010781000077 +:010782000076 +:010783000075 +:010784000074 +:010785000073 +:010786000072 +:010787000071 +:010788000070 +:01078900006f +:01078a00006e +:01078b00006d +:01078c00006c +:01078d00006b +:01078e00006a +:01078f000069 +:010790000068 +:010791000067 +:010792000066 +:010793000065 +:010794000064 +:010795000063 +:010796000062 +:010797000061 +:010798000060 +:01079900005f +:01079a00005e +:01079b00005d +:01079c00005c +:01079d00005b +:01079e00005a +:01079f000059 +:0107a0000058 +:0107a1000057 +:0107a2000056 +:0107a3000055 +:0107a4000054 +:0107a5000053 +:0107a6000052 +:0107a7000051 +:0107a8000050 +:0107a900004f +:0107aa00004e +:0107ab00004d +:0107ac00004c +:0107ad00004b +:0107ae00004a +:0107af000049 +:0107b0000048 +:0107b1000047 +:0107b2000046 +:0107b3000045 +:0107b4000044 +:0107b5000043 +:0107b6000042 +:0107b7000041 +:0107b8000040 +:0107b900003f +:0107ba00003e +:0107bb00003d +:0107bc00003c +:0107bd00003b +:0107be00003a +:0107bf0090a9 +:0107c0000335 +:0107c1000037 +:0107c2000036 +:0107c3000035 +:0107c4000034 +:0107c5000033 +:0107c6000032 +:0107c7000031 +:0107c8000030 +:0107c900002f +:0107ca00002e +:0107cb00002d +:0107cc00002c +:0107cd00002b +:0107ce00002a +:0107cf000029 +:0107d0000028 +:0107d1000027 +:0107d2000026 +:0107d3000025 +:0107d4000024 +:0107d5000023 +:0107d6000022 +:0107d7000021 +:0107d8000020 +:0107d900001f +:0107da00001e +:0107db00001d +:0107dc00001c +:0107dd00001b +:0107de00001a +:0107df000019 +:0107e0000018 +:0107e1000017 +:0107e2000016 +:0107e3000015 +:0107e4000014 +:0107e5000013 +:0107e6000012 +:0107e7000011 +:0107e8000010 +:0107e900000f +:0107ea00000e +:0107eb00000d +:0107ec00000c +:0107ed00000b +:0107ee00000a +:0107ef000009 +:0107f0000008 +:0107f1000007 +:0107f2000006 +:0107f3000005 +:0107f4000004 +:0107f5000003 +:0107f6000002 +:0107f7000001 +:0107f8000000 +:0107f90000ff +:0107fa0000fe +:0107fb0000fd +:0107fc0000fc +:0107fd0000fb +:0107fe0000fa +:0107ff009069 +:0108000003f4 +:0108010000f6 +:0108020000f5 +:0108030000f4 +:0108040000f3 +:0108050000f2 +:0108060000f1 +:0108070000f0 +:0108080000ef +:0108090000ee +:01080a0000ed +:01080b0000ec +:01080c0000eb +:01080d0000ea +:01080e0000e9 +:01080f0000e8 +:0108100000e7 +:0108110000e6 +:0108120000e5 +:0108130000e4 +:0108140000e3 +:0108150000e2 +:0108160000e1 +:0108170000e0 +:0108180000df +:0108190000de +:01081a0000dd +:01081b0000dc +:01081c0000db +:01081d0000da +:01081e0000d9 +:01081f0000d8 +:0108200000d7 +:0108210000d6 +:0108220000d5 +:0108230000d4 +:0108240000d3 +:0108250000d2 +:0108260000d1 +:0108270000d0 +:0108280000cf +:0108290000ce +:01082a0000cd +:01082b0000cc +:01082c0000cb +:01082d0000ca +:01082e0000c9 +:01082f0000c8 +:0108300000c7 +:0108310000c6 +:0108320000c5 +:0108330000c4 +:0108340000c3 +:0108350000c2 +:0108360000c1 +:0108370000c0 +:0108380000bf +:0108390000be +:01083a0000bd +:01083b0000bc +:01083c0000bb +:01083d0000ba +:01083e0000b9 +:01083f009028 +:0108400003b4 +:0108410000b6 +:0108420000b5 +:0108430000b4 +:0108440000b3 +:0108450000b2 +:0108460000b1 +:0108470000b0 +:0108480000af +:0108490000ae +:01084a0000ad +:01084b0000ac +:01084c0000ab +:01084d0000aa +:01084e0000a9 +:01084f0000a8 +:0108500000a7 +:0108510000a6 +:0108520000a5 +:0108530000a4 +:0108540000a3 +:0108550000a2 +:0108560000a1 +:0108570000a0 +:01085800009f +:01085900009e +:01085a00009d +:01085b00009c +:01085c00009b +:01085d00009a +:01085e000099 +:01085f000098 +:010860000097 +:010861000096 +:010862000095 +:010863000094 +:010864000093 +:010865000092 +:010866000091 +:010867000090 +:01086800008f +:01086900008e +:01086a00008d +:01086b00008c +:01086c00008b +:01086d00008a +:01086e000089 +:01086f000088 +:010870000087 +:010871000086 +:010872000085 +:010873000084 +:010874000083 +:010875000082 +:010876000081 +:010877000080 +:01087800007f +:01087900007e +:01087a00007d +:01087b00007c +:01087c00007b +:01087d00007a +:01087e000079 +:01087f0090e8 +:010880000374 +:010881000076 +:010882000075 +:010883000074 +:010884000073 +:010885000072 +:010886000071 +:010887000070 +:01088800006f +:01088900006e +:01088a00006d +:01088b00006c +:01088c00006b +:01088d00006a +:01088e000069 +:01088f000068 +:010890000067 +:010891000066 +:010892000065 +:010893000064 +:010894000063 +:010895000062 +:010896000061 +:010897000060 +:01089800005f +:01089900005e +:01089a00005d +:01089b00005c +:01089c00005b +:01089d00005a +:01089e000059 +:01089f000058 +:0108a0000057 +:0108a1000056 +:0108a2000055 +:0108a3000054 +:0108a4000053 +:0108a5000052 +:0108a6000051 +:0108a7000050 +:0108a800004f +:0108a900004e +:0108aa00004d +:0108ab00004c +:0108ac00004b +:0108ad00004a +:0108ae000049 +:0108af000048 +:0108b0000047 +:0108b1000046 +:0108b2000045 +:0108b3000044 +:0108b4000043 +:0108b5000042 +:0108b6000041 +:0108b7000040 +:0108b800003f +:0108b900003e +:0108ba00003d +:0108bb00003c +:0108bc00003b +:0108bd00003a +:0108be000039 +:0108bf0090a8 +:0108c0000334 +:0108c1000036 +:0108c2000035 +:0108c3000034 +:0108c4000033 +:0108c5000032 +:0108c6000031 +:0108c7000030 +:0108c800002f +:0108c900002e +:0108ca00002d +:0108cb00002c +:0108cc00002b +:0108cd00002a +:0108ce000029 +:0108cf000028 +:0108d0000027 +:0108d1000026 +:0108d2000025 +:0108d3000024 +:0108d4000023 +:0108d5000022 +:0108d6000021 +:0108d7000020 +:0108d800001f +:0108d900001e +:0108da00001d +:0108db00001c +:0108dc00001b +:0108dd00001a +:0108de000019 +:0108df000018 +:0108e0000017 +:0108e1000016 +:0108e2000015 +:0108e3000014 +:0108e4000013 +:0108e5000012 +:0108e6000011 +:0108e7000010 +:0108e800000f +:0108e900000e +:0108ea00000d +:0108eb00000c +:0108ec00000b +:0108ed00000a +:0108ee000009 +:0108ef000008 +:0108f0000007 +:0108f1000006 +:0108f2000005 +:0108f3000004 +:0108f4000003 +:0108f5000002 +:0108f6000001 +:0108f7000000 +:0108f80000ff +:0108f90000fe +:0108fa0000fd +:0108fb0000fc +:0108fc0000fb +:0108fd0000fa +:0108fe0000f9 +:0108ff009068 +:0109000003f3 +:0109010000f5 +:0109020000f4 +:0109030000f3 +:0109040000f2 +:0109050000f1 +:0109060000f0 +:0109070000ef +:0109080000ee +:0109090000ed +:01090a0000ec +:01090b0000eb +:01090c0000ea +:01090d0000e9 +:01090e0000e8 +:01090f0000e7 +:0109100000e6 +:0109110000e5 +:0109120000e4 +:0109130000e3 +:0109140000e2 +:0109150000e1 +:0109160000e0 +:0109170000df +:0109180000de +:0109190000dd +:01091a0000dc +:01091b0000db +:01091c0000da +:01091d0000d9 +:01091e0000d8 +:01091f0000d7 +:0109200000d6 +:0109210000d5 +:0109220000d4 +:0109230000d3 +:0109240000d2 +:0109250000d1 +:0109260000d0 +:0109270000cf +:0109280000ce +:0109290000cd +:01092a0000cc +:01092b0000cb +:01092c0000ca +:01092d0000c9 +:01092e0000c8 +:01092f0000c7 +:0109300000c6 +:0109310000c5 +:0109320000c4 +:0109330000c3 +:0109340000c2 +:0109350000c1 +:0109360000c0 +:0109370000bf +:0109380000be +:0109390000bd +:01093a0000bc +:01093b0000bb +:01093c0000ba +:01093d0000b9 +:01093e0000b8 +:01093f009027 +:0109400003b3 +:0109410000b5 +:0109420000b4 +:0109430000b3 +:0109440000b2 +:0109450000b1 +:0109460000b0 +:0109470000af +:0109480000ae +:0109490000ad +:01094a0000ac +:01094b0000ab +:01094c0000aa +:01094d0000a9 +:01094e0000a8 +:01094f0000a7 +:0109500000a6 +:0109510000a5 +:0109520000a4 +:0109530000a3 +:0109540000a2 +:0109550000a1 +:0109560000a0 +:01095700009f +:01095800009e +:01095900009d +:01095a00009c +:01095b00009b +:01095c00009a +:01095d000099 +:01095e000098 +:01095f000097 +:010960000096 +:010961000095 +:010962000094 +:010963000093 +:010964000092 +:010965000091 +:010966000090 +:01096700008f +:01096800008e +:01096900008d +:01096a00008c +:01096b00008b +:01096c00008a +:01096d000089 +:01096e000088 +:01096f000087 +:010970000086 +:010971000085 +:010972000084 +:010973000083 +:010974000082 +:010975000081 +:010976000080 +:01097700007f +:01097800007e +:01097900007d +:01097a00007c +:01097b00007b +:01097c00007a +:01097d000079 +:01097e000078 +:01097f0090e7 +:010980000373 +:010981000075 +:010982000074 +:010983000073 +:010984000072 +:010985000071 +:010986000070 +:01098700006f +:01098800006e +:01098900006d +:01098a00006c +:01098b00006b +:01098c00006a +:01098d000069 +:01098e000068 +:01098f000067 +:010990000066 +:010991000065 +:010992000064 +:010993000063 +:010994000062 +:010995000061 +:010996000060 +:01099700005f +:01099800005e +:01099900005d +:01099a00005c +:01099b00005b +:01099c00005a +:01099d000059 +:01099e000058 +:01099f000057 +:0109a0000056 +:0109a1000055 +:0109a2000054 +:0109a3000053 +:0109a4000052 +:0109a5000051 +:0109a6000050 +:0109a700004f +:0109a800004e +:0109a900004d +:0109aa00004c +:0109ab00004b +:0109ac00004a +:0109ad000049 +:0109ae000048 +:0109af000047 +:0109b0000046 +:0109b1000045 +:0109b2000044 +:0109b3000043 +:0109b4000042 +:0109b5000041 +:0109b6000040 +:0109b700003f +:0109b800003e +:0109b900003d +:0109ba00003c +:0109bb00003b +:0109bc00003a +:0109bd000039 +:0109be000038 +:0109bf0090a7 +:0109c0000333 +:0109c1000035 +:0109c2000034 +:0109c3000033 +:0109c4000032 +:0109c5000031 +:0109c6000030 +:0109c700002f +:0109c800002e +:0109c900002d +:0109ca00002c +:0109cb00002b +:0109cc00002a +:0109cd000029 +:0109ce000028 +:0109cf000027 +:0109d0000026 +:0109d1000025 +:0109d2000024 +:0109d3000023 +:0109d4000022 +:0109d5000021 +:0109d6000020 +:0109d700001f +:0109d800001e +:0109d900001d +:0109da00001c +:0109db00001b +:0109dc00001a +:0109dd000019 +:0109de000018 +:0109df000017 +:0109e0000016 +:0109e1000015 +:0109e2000014 +:0109e3000013 +:0109e4000012 +:0109e5000011 +:0109e6000010 +:0109e700000f +:0109e800000e +:0109e900000d +:0109ea00000c +:0109eb00000b +:0109ec00000a +:0109ed000009 +:0109ee000008 +:0109ef000007 +:0109f0000006 +:0109f1000005 +:0109f2000004 +:0109f3000003 +:0109f4000002 +:0109f5000001 +:0109f6000000 +:0109f70000ff +:0109f80000fe +:0109f90000fd +:0109fa0000fc +:0109fb0000fb +:0109fc0000fa +:0109fd0000f9 +:0109fe0000f8 +:0109ff009067 +:010a000003f2 +:010a010000f4 +:010a020000f3 +:010a030000f2 +:010a040000f1 +:010a050000f0 +:010a060000ef +:010a070000ee +:010a080000ed +:010a090000ec +:010a0a0000eb +:010a0b0000ea +:010a0c0000e9 +:010a0d0000e8 +:010a0e0000e7 +:010a0f0000e6 +:010a100000e5 +:010a110000e4 +:010a120000e3 +:010a130000e2 +:010a140000e1 +:010a150000e0 +:010a160000df +:010a170000de +:010a180000dd +:010a190000dc +:010a1a0000db +:010a1b0000da +:010a1c0000d9 +:010a1d0000d8 +:010a1e0000d7 +:010a1f0000d6 +:010a200000d5 +:010a210000d4 +:010a220000d3 +:010a230000d2 +:010a240000d1 +:010a250000d0 +:010a260000cf +:010a270000ce +:010a280000cd +:010a290000cc +:010a2a0000cb +:010a2b0000ca +:010a2c0000c9 +:010a2d0000c8 +:010a2e0000c7 +:010a2f0000c6 +:010a300000c5 +:010a310000c4 +:010a320000c3 +:010a330000c2 +:010a340000c1 +:010a350000c0 +:010a360000bf +:010a370000be +:010a380000bd +:010a390000bc +:010a3a0000bb +:010a3b0000ba +:010a3c0000b9 +:010a3d0000b8 +:010a3e0000b7 +:010a3f009026 +:010a400003b2 +:010a410000b4 +:010a420000b3 +:010a430000b2 +:010a440000b1 +:010a450000b0 +:010a460000af +:010a470000ae +:010a480000ad +:010a490000ac +:010a4a0000ab +:010a4b0000aa +:010a4c0000a9 +:010a4d0000a8 +:010a4e0000a7 +:010a4f0000a6 +:010a500000a5 +:010a510000a4 +:010a520000a3 +:010a530000a2 +:010a540000a1 +:010a550000a0 +:010a5600009f +:010a5700009e +:010a5800009d +:010a5900009c +:010a5a00009b +:010a5b00009a +:010a5c000099 +:010a5d000098 +:010a5e000097 +:010a5f000096 +:010a60000095 +:010a61000094 +:010a62000093 +:010a63000092 +:010a64000091 +:010a65000090 +:010a6600008f +:010a6700008e +:010a6800008d +:010a6900008c +:010a6a00008b +:010a6b00008a +:010a6c000089 +:010a6d000088 +:010a6e000087 +:010a6f000086 +:010a70000085 +:010a71000084 +:010a72000083 +:010a73000082 +:010a74000081 +:010a75000080 +:010a7600007f +:010a7700007e +:010a7800007d +:010a7900007c +:010a7a00007b +:010a7b00007a +:010a7c000079 +:010a7d000078 +:010a7e000077 +:010a7f0090e6 +:010a80000372 +:010a81000074 +:010a82000073 +:010a83000072 +:010a84000071 +:010a85000070 +:010a8600006f +:010a8700006e +:010a8800006d +:010a8900006c +:010a8a00006b +:010a8b00006a +:010a8c000069 +:010a8d000068 +:010a8e000067 +:010a8f000066 +:010a90000065 +:010a91000064 +:010a92000063 +:010a93000062 +:010a94000061 +:010a95000060 +:010a9600005f +:010a9700005e +:010a9800005d +:010a9900005c +:010a9a00005b +:010a9b00005a +:010a9c000059 +:010a9d000058 +:010a9e000057 +:010a9f000056 +:010aa0000055 +:010aa1000054 +:010aa2000053 +:010aa3000052 +:010aa4000051 +:010aa5000050 +:010aa600004f +:010aa700004e +:010aa800004d +:010aa900004c +:010aaa00004b +:010aab00004a +:010aac000049 +:010aad000048 +:010aae000047 +:010aaf000046 +:010ab0000045 +:010ab1000044 +:010ab2000043 +:010ab3000042 +:010ab4000041 +:010ab5000040 +:010ab600003f +:010ab700003e +:010ab800003d +:010ab900003c +:010aba00003b +:010abb00003a +:010abc000039 +:010abd000038 +:010abe000037 +:010abf0090a6 +:010ac0000332 +:010ac1000034 +:010ac2000033 +:010ac3000032 +:010ac4000031 +:010ac5000030 +:010ac600002f +:010ac700002e +:010ac800002d +:010ac900002c +:010aca00002b +:010acb00002a +:010acc000029 +:010acd000028 +:010ace000027 +:010acf000026 +:010ad0000025 +:010ad1000024 +:010ad2000023 +:010ad3000022 +:010ad4000021 +:010ad5000020 +:010ad600001f +:010ad700001e +:010ad800001d +:010ad900001c +:010ada00001b +:010adb00001a +:010adc000019 +:010add000018 +:010ade000017 +:010adf000016 +:010ae0000015 +:010ae1000014 +:010ae2000013 +:010ae3000012 +:010ae4000011 +:010ae5000010 +:010ae600000f +:010ae700000e +:010ae800000d +:010ae900000c +:010aea00000b +:010aeb00000a +:010aec000009 +:010aed000008 +:010aee000007 +:010aef000006 +:010af0000005 +:010af1000004 +:010af2000003 +:010af3000002 +:010af4000001 +:010af5000000 +:010af60000ff +:010af70000fe +:010af80000fd +:010af90000fc +:010afa0000fb +:010afb0000fa +:010afc0000f9 +:010afd0000f8 +:010afe0000f7 +:010aff009066 +:010b000003f1 +:010b010000f3 +:010b020000f2 +:010b030000f1 +:010b040000f0 +:010b050000ef +:010b060000ee +:010b070000ed +:010b080000ec +:010b090000eb +:010b0a0000ea +:010b0b0000e9 +:010b0c0000e8 +:010b0d0000e7 +:010b0e0000e6 +:010b0f0000e5 +:010b100000e4 +:010b110000e3 +:010b120000e2 +:010b130000e1 +:010b140000e0 +:010b150000df +:010b160000de +:010b170000dd +:010b180000dc +:010b190000db +:010b1a0000da +:010b1b0000d9 +:010b1c0000d8 +:010b1d0000d7 +:010b1e0000d6 +:010b1f0000d5 +:010b200000d4 +:010b210000d3 +:010b220000d2 +:010b230000d1 +:010b240000d0 +:010b250000cf +:010b260000ce +:010b270000cd +:010b280000cc +:010b290000cb +:010b2a0000ca +:010b2b0000c9 +:010b2c0000c8 +:010b2d0000c7 +:010b2e0000c6 +:010b2f0000c5 +:010b300000c4 +:010b310000c3 +:010b320000c2 +:010b330000c1 +:010b340000c0 +:010b350000bf +:010b360000be +:010b370000bd +:010b380000bc +:010b390000bb +:010b3a0000ba +:010b3b0000b9 +:010b3c0000b8 +:010b3d0000b7 +:010b3e0000b6 +:010b3f009025 +:010b400003b1 +:010b410000b3 +:010b420000b2 +:010b430000b1 +:010b440000b0 +:010b450000af +:010b460000ae +:010b470000ad +:010b480000ac +:010b490000ab +:010b4a0000aa +:010b4b0000a9 +:010b4c0000a8 +:010b4d0000a7 +:010b4e0000a6 +:010b4f0000a5 +:010b500000a4 +:010b510000a3 +:010b520000a2 +:010b530000a1 +:010b540000a0 +:010b5500009f +:010b5600009e +:010b5700009d +:010b5800009c +:010b5900009b +:010b5a00009a +:010b5b000099 +:010b5c000098 +:010b5d000097 +:010b5e000096 +:010b5f000095 +:010b60000094 +:010b61000093 +:010b62000092 +:010b63000091 +:010b64000090 +:010b6500008f +:010b6600008e +:010b6700008d +:010b6800008c +:010b6900008b +:010b6a00008a +:010b6b000089 +:010b6c000088 +:010b6d000087 +:010b6e000086 +:010b6f000085 +:010b70000084 +:010b71000083 +:010b72000082 +:010b73000081 +:010b74000080 +:010b7500007f +:010b7600007e +:010b7700007d +:010b7800007c +:010b7900007b +:010b7a00007a +:010b7b000079 +:010b7c000078 +:010b7d000077 +:010b7e000076 +:010b7f0090e5 +:010b80000371 +:010b81000073 +:010b82000072 +:010b83000071 +:010b84000070 +:010b8500006f +:010b8600006e +:010b8700006d +:010b8800006c +:010b8900006b +:010b8a00006a +:010b8b000069 +:010b8c000068 +:010b8d000067 +:010b8e000066 +:010b8f000065 +:010b90000064 +:010b91000063 +:010b92000062 +:010b93000061 +:010b94000060 +:010b9500005f +:010b9600005e +:010b9700005d +:010b9800005c +:010b9900005b +:010b9a00005a +:010b9b000059 +:010b9c000058 +:010b9d000057 +:010b9e000056 +:010b9f000055 +:010ba0000054 +:010ba1000053 +:010ba2000052 +:010ba3000051 +:010ba4000050 +:010ba500004f +:010ba600004e +:010ba700004d +:010ba800004c +:010ba900004b +:010baa00004a +:010bab000049 +:010bac000048 +:010bad000047 +:010bae000046 +:010baf000045 +:010bb0000044 +:010bb1000043 +:010bb2000042 +:010bb3000041 +:010bb4000040 +:010bb500003f +:010bb600003e +:010bb700003d +:010bb800003c +:010bb900003b +:010bba00003a +:010bbb000039 +:010bbc000038 +:010bbd000037 +:010bbe000036 +:010bbf0090a5 +:010bc0000331 +:010bc1000033 +:010bc2000032 +:010bc3000031 +:010bc4000030 +:010bc500002f +:010bc600002e +:010bc700002d +:010bc800002c +:010bc900002b +:010bca00002a +:010bcb000029 +:010bcc000028 +:010bcd000027 +:010bce000026 +:010bcf000025 +:010bd0000024 +:010bd1000023 +:010bd2000022 +:010bd3000021 +:010bd4000020 +:010bd500001f +:010bd600001e +:010bd700001d +:010bd800001c +:010bd900001b +:010bda00001a +:010bdb000019 +:010bdc000018 +:010bdd000017 +:010bde000016 +:010bdf000015 +:010be0000014 +:010be1000013 +:010be2000012 +:010be3000011 +:010be4000010 +:010be500000f +:010be600000e +:010be700000d +:010be800000c +:010be900000b +:010bea00000a +:010beb000009 +:010bec000008 +:010bed000007 +:010bee000006 +:010bef000005 +:010bf0000004 +:010bf1000003 +:010bf2000002 +:010bf3000001 +:010bf4000000 +:010bf50000ff +:010bf60000fe +:010bf70000fd +:010bf80000fc +:010bf90000fb +:010bfa0000fa +:010bfb0000f9 +:010bfc0000f8 +:010bfd0000f7 +:010bfe0000f6 +:010bff009065 +:010c000003f0 +:010c010000f2 +:010c020000f1 +:010c030000f0 +:010c040000ef +:010c050000ee +:010c060000ed +:010c070000ec +:010c080000eb +:010c090000ea +:010c0a0000e9 +:010c0b0000e8 +:010c0c0000e7 +:010c0d0000e6 +:010c0e0000e5 +:010c0f0000e4 +:010c100000e3 +:010c110000e2 +:010c120000e1 +:010c130000e0 +:010c140000df +:010c150000de +:010c160000dd +:010c170000dc +:010c180000db +:010c190000da +:010c1a0000d9 +:010c1b0000d8 +:010c1c0000d7 +:010c1d0000d6 +:010c1e0000d5 +:010c1f0000d4 +:010c200000d3 +:010c210000d2 +:010c220000d1 +:010c230000d0 +:010c240000cf +:010c250000ce +:010c260000cd +:010c270000cc +:010c280000cb +:010c290000ca +:010c2a0000c9 +:010c2b0000c8 +:010c2c0000c7 +:010c2d0000c6 +:010c2e0000c5 +:010c2f0000c4 +:010c300000c3 +:010c310000c2 +:010c320000c1 +:010c330000c0 +:010c340000bf +:010c350000be +:010c360000bd +:010c370000bc +:010c380000bb +:010c390000ba +:010c3a0000b9 +:010c3b0000b8 +:010c3c0000b7 +:010c3d0000b6 +:010c3e0000b5 +:010c3f009024 +:010c400003b0 +:010c410000b2 +:010c420000b1 +:010c430000b0 +:010c440000af +:010c450000ae +:010c460000ad +:010c470000ac +:010c480000ab +:010c490000aa +:010c4a0000a9 +:010c4b0000a8 +:010c4c0000a7 +:010c4d0000a6 +:010c4e0000a5 +:010c4f0000a4 +:010c500000a3 +:010c510000a2 +:010c520000a1 +:010c530000a0 +:010c5400009f +:010c5500009e +:010c5600009d +:010c5700009c +:010c5800009b +:010c5900009a +:010c5a000099 +:010c5b000098 +:010c5c000097 +:010c5d000096 +:010c5e000095 +:010c5f000094 +:010c60000093 +:010c61000092 +:010c62000091 +:010c63000090 +:010c6400008f +:010c6500008e +:010c6600008d +:010c6700008c +:010c6800008b +:010c6900008a +:010c6a000089 +:010c6b000088 +:010c6c000087 +:010c6d000086 +:010c6e000085 +:010c6f000084 +:010c70000083 +:010c71000082 +:010c72000081 +:010c73000080 +:010c7400007f +:010c7500007e +:010c7600007d +:010c7700007c +:010c7800007b +:010c7900007a +:010c7a000079 +:010c7b000078 +:010c7c000077 +:010c7d000076 +:010c7e000075 +:010c7f0090e4 +:010c80000370 +:010c81000072 +:010c82000071 +:010c83000070 +:010c8400006f +:010c8500006e +:010c8600006d +:010c8700006c +:010c8800006b +:010c8900006a +:010c8a000069 +:010c8b000068 +:010c8c000067 +:010c8d000066 +:010c8e000065 +:010c8f000064 +:010c90000063 +:010c91000062 +:010c92000061 +:010c93000060 +:010c9400005f +:010c9500005e +:010c9600005d +:010c9700005c +:010c9800005b +:010c9900005a +:010c9a000059 +:010c9b000058 +:010c9c000057 +:010c9d000056 +:010c9e000055 +:010c9f000054 +:010ca0000053 +:010ca1000052 +:010ca2000051 +:010ca3000050 +:010ca400004f +:010ca500004e +:010ca600004d +:010ca700004c +:010ca800004b +:010ca900004a +:010caa000049 +:010cab000048 +:010cac000047 +:010cad000046 +:010cae000045 +:010caf000044 +:010cb0000043 +:010cb1000042 +:010cb2000041 +:010cb3000040 +:010cb400003f +:010cb500003e +:010cb600003d +:010cb700003c +:010cb800003b +:010cb900003a +:010cba000039 +:010cbb000038 +:010cbc000037 +:010cbd000036 +:010cbe000035 +:010cbf0090a4 +:010cc0000330 +:010cc1000032 +:010cc2000031 +:010cc3000030 +:010cc400002f +:010cc500002e +:010cc600002d +:010cc700002c +:010cc800002b +:010cc900002a +:010cca000029 +:010ccb000028 +:010ccc000027 +:010ccd000026 +:010cce000025 +:010ccf000024 +:010cd0000023 +:010cd1000022 +:010cd2000021 +:010cd3000020 +:010cd400001f +:010cd500001e +:010cd600001d +:010cd700001c +:010cd800001b +:010cd900001a +:010cda000019 +:010cdb000018 +:010cdc000017 +:010cdd000016 +:010cde000015 +:010cdf000014 +:010ce0000013 +:010ce1000012 +:010ce2000011 +:010ce3000010 +:010ce400000f +:010ce500000e +:010ce600000d +:010ce700000c +:010ce800000b +:010ce900000a +:010cea000009 +:010ceb000008 +:010cec000007 +:010ced000006 +:010cee000005 +:010cef000004 +:010cf0000003 +:010cf1000002 +:010cf2000001 +:010cf3000000 +:010cf40000ff +:010cf50000fe +:010cf60000fd +:010cf70000fc +:010cf80000fb +:010cf90000fa +:010cfa0000f9 +:010cfb0000f8 +:010cfc0000f7 +:010cfd0000f6 +:010cfe0000f5 +:010cff009064 +:010d000003ef +:010d010000f1 +:010d020000f0 +:010d030000ef +:010d040000ee +:010d050000ed +:010d060000ec +:010d070000eb +:010d080000ea +:010d090000e9 +:010d0a0000e8 +:010d0b0000e7 +:010d0c0000e6 +:010d0d0000e5 +:010d0e0000e4 +:010d0f0000e3 +:010d100000e2 +:010d110000e1 +:010d120000e0 +:010d130000df +:010d140000de +:010d150000dd +:010d160000dc +:010d170000db +:010d180000da +:010d190000d9 +:010d1a0000d8 +:010d1b0000d7 +:010d1c0000d6 +:010d1d0000d5 +:010d1e0000d4 +:010d1f0000d3 +:010d200000d2 +:010d210000d1 +:010d220000d0 +:010d230000cf +:010d240000ce +:010d250000cd +:010d260000cc +:010d270000cb +:010d280000ca +:010d290000c9 +:010d2a0000c8 +:010d2b0000c7 +:010d2c0000c6 +:010d2d0000c5 +:010d2e0000c4 +:010d2f0000c3 +:010d300000c2 +:010d310000c1 +:010d320000c0 +:010d330000bf +:010d340000be +:010d350000bd +:010d360000bc +:010d370000bb +:010d380000ba +:010d390000b9 +:010d3a0000b8 +:010d3b0000b7 +:010d3c0000b6 +:010d3d0000b5 +:010d3e0000b4 +:010d3f009023 +:010d400003af +:010d410000b1 +:010d420000b0 +:010d430000af +:010d440000ae +:010d450000ad +:010d460000ac +:010d470000ab +:010d480000aa +:010d490000a9 +:010d4a0000a8 +:010d4b0000a7 +:010d4c0000a6 +:010d4d0000a5 +:010d4e0000a4 +:010d4f0000a3 +:010d500000a2 +:010d510000a1 +:010d520000a0 +:010d5300009f +:010d5400009e +:010d5500009d +:010d5600009c +:010d5700009b +:010d5800009a +:010d59000099 +:010d5a000098 +:010d5b000097 +:010d5c000096 +:010d5d000095 +:010d5e000094 +:010d5f000093 +:010d60000092 +:010d61000091 +:010d62000090 +:010d6300008f +:010d6400008e +:010d6500008d +:010d6600008c +:010d6700008b +:010d6800008a +:010d69000089 +:010d6a000088 +:010d6b000087 +:010d6c000086 +:010d6d000085 +:010d6e000084 +:010d6f000083 +:010d70000082 +:010d71000081 +:010d72000080 +:010d7300007f +:010d7400007e +:010d7500007d +:010d7600007c +:010d7700007b +:010d7800007a +:010d79000079 +:010d7a000078 +:010d7b000077 +:010d7c000076 +:010d7d000075 +:010d7e000074 +:010d7f0090e3 +:010d8000036f +:010d81000071 +:010d82000070 +:010d8300006f +:010d8400006e +:010d8500006d +:010d8600006c +:010d8700006b +:010d8800006a +:010d89000069 +:010d8a000068 +:010d8b000067 +:010d8c000066 +:010d8d000065 +:010d8e000064 +:010d8f000063 +:010d90000062 +:010d91000061 +:010d92000060 +:010d9300005f +:010d9400005e +:010d9500005d +:010d9600005c +:010d9700005b +:010d9800005a +:010d99000059 +:010d9a000058 +:010d9b000057 +:010d9c000056 +:010d9d000055 +:010d9e000054 +:010d9f000053 +:010da0000052 +:010da1000051 +:010da2000050 +:010da300004f +:010da400004e +:010da500004d +:010da600004c +:010da700004b +:010da800004a +:010da9000049 +:010daa000048 +:010dab000047 +:010dac000046 +:010dad000045 +:010dae000044 +:010daf000043 +:010db0000042 +:010db1000041 +:010db2000040 +:010db300003f +:010db400003e +:010db500003d +:010db600003c +:010db700003b +:010db800003a +:010db9000039 +:010dba000038 +:010dbb000037 +:010dbc000036 +:010dbd000035 +:010dbe000034 +:010dbf0090a3 +:010dc000032f +:010dc1000031 +:010dc2000030 +:010dc300002f +:010dc400002e +:010dc500002d +:010dc600002c +:010dc700002b +:010dc800002a +:010dc9000029 +:010dca000028 +:010dcb000027 +:010dcc000026 +:010dcd000025 +:010dce000024 +:010dcf000023 +:010dd0000022 +:010dd1000021 +:010dd2000020 +:010dd300001f +:010dd400001e +:010dd500001d +:010dd600001c +:010dd700001b +:010dd800001a +:010dd9000019 +:010dda000018 +:010ddb000017 +:010ddc000016 +:010ddd000015 +:010dde000014 +:010ddf000013 +:010de0000012 +:010de1000011 +:010de2000010 +:010de300000f +:010de400000e +:010de500000d +:010de600000c +:010de700000b +:010de800000a +:010de9000009 +:010dea000008 +:010deb000007 +:010dec000006 +:010ded000005 +:010dee000004 +:010def000003 +:010df0000002 +:010df1000001 +:010df2000000 +:010df30000ff +:010df40000fe +:010df50000fd +:010df60000fc +:010df70000fb +:010df80000fa +:010df90000f9 +:010dfa0000f8 +:010dfb0000f7 +:010dfc0000f6 +:010dfd0000f5 +:010dfe0000f4 +:010dff009063 +:010e000003ee +:010e010000f0 +:010e020000ef +:010e030000ee +:010e040000ed +:010e050000ec +:010e060000eb +:010e070000ea +:010e080000e9 +:010e090000e8 +:010e0a0000e7 +:010e0b0000e6 +:010e0c0000e5 +:010e0d0000e4 +:010e0e0000e3 +:010e0f0000e2 +:010e100000e1 +:010e110000e0 +:010e120000df +:010e130000de +:010e140000dd +:010e150000dc +:010e160000db +:010e170000da +:010e180000d9 +:010e190000d8 +:010e1a0000d7 +:010e1b0000d6 +:010e1c0000d5 +:010e1d0000d4 +:010e1e0000d3 +:010e1f0000d2 +:010e200000d1 +:010e210000d0 +:010e220000cf +:010e230000ce +:010e240000cd +:010e250000cc +:010e260000cb +:010e270000ca +:010e280000c9 +:010e290000c8 +:010e2a0000c7 +:010e2b0000c6 +:010e2c0000c5 +:010e2d0000c4 +:010e2e0000c3 +:010e2f0000c2 +:010e300000c1 +:010e310000c0 +:010e320000bf +:010e330000be +:010e340000bd +:010e350000bc +:010e360000bb +:010e370000ba +:010e380000b9 +:010e390000b8 +:010e3a0000b7 +:010e3b0000b6 +:010e3c0000b5 +:010e3d0000b4 +:010e3e0000b3 +:010e3f009022 +:010e400003ae +:010e410000b0 +:010e420000af +:010e430000ae +:010e440000ad +:010e450000ac +:010e460000ab +:010e470000aa +:010e480000a9 +:010e490000a8 +:010e4a0000a7 +:010e4b0000a6 +:010e4c0000a5 +:010e4d0000a4 +:010e4e0000a3 +:010e4f0000a2 +:010e500000a1 +:010e510000a0 +:010e5200009f +:010e5300009e +:010e5400009d +:010e5500009c +:010e5600009b +:010e5700009a +:010e58000099 +:010e59000098 +:010e5a000097 +:010e5b000096 +:010e5c000095 +:010e5d000094 +:010e5e000093 +:010e5f000092 +:010e60000091 +:010e61000090 +:010e6200008f +:010e6300008e +:010e6400008d +:010e6500008c +:010e6600008b +:010e6700008a +:010e68000089 +:010e69000088 +:010e6a000087 +:010e6b000086 +:010e6c000085 +:010e6d000084 +:010e6e000083 +:010e6f000082 +:010e70000081 +:010e71000080 +:010e7200007f +:010e7300007e +:010e7400007d +:010e7500007c +:010e7600007b +:010e7700007a +:010e78000079 +:010e79000078 +:010e7a000077 +:010e7b000076 +:010e7c000075 +:010e7d000074 +:010e7e000073 +:010e7f0090e2 +:010e8000036e +:010e81000070 +:010e8200006f +:010e8300006e +:010e8400006d +:010e8500006c +:010e8600006b +:010e8700006a +:010e88000069 +:010e89000068 +:010e8a000067 +:010e8b000066 +:010e8c000065 +:010e8d000064 +:010e8e000063 +:010e8f000062 +:010e90000061 +:010e91000060 +:010e9200005f +:010e9300005e +:010e9400005d +:010e9500005c +:010e9600005b +:010e9700005a +:010e98000059 +:010e99000058 +:010e9a000057 +:010e9b000056 +:010e9c000055 +:010e9d000054 +:010e9e000053 +:010e9f000052 +:010ea0000051 +:010ea1000050 +:010ea200004f +:010ea300004e +:010ea400004d +:010ea500004c +:010ea600004b +:010ea700004a +:010ea8000049 +:010ea9000048 +:010eaa000047 +:010eab000046 +:010eac000045 +:010ead000044 +:010eae000043 +:010eaf000042 +:010eb0000041 +:010eb1000040 +:010eb200003f +:010eb300003e +:010eb400003d +:010eb500003c +:010eb600003b +:010eb700003a +:010eb8000039 +:010eb9000038 +:010eba000037 +:010ebb000036 +:010ebc000035 +:010ebd000034 +:010ebe000033 +:010ebf0090a2 +:010ec000032e +:010ec1000030 +:010ec200002f +:010ec300002e +:010ec400002d +:010ec500002c +:010ec600002b +:010ec700002a +:010ec8000029 +:010ec9000028 +:010eca000027 +:010ecb000026 +:010ecc000025 +:010ecd000024 +:010ece000023 +:010ecf000022 +:010ed0000021 +:010ed1000020 +:010ed200001f +:010ed300001e +:010ed400001d +:010ed500001c +:010ed600001b +:010ed700001a +:010ed8000019 +:010ed9000018 +:010eda000017 +:010edb000016 +:010edc000015 +:010edd000014 +:010ede000013 +:010edf000012 +:010ee0000011 +:010ee1000010 +:010ee200000f +:010ee300000e +:010ee400000d +:010ee500000c +:010ee600000b +:010ee700000a +:010ee8000009 +:010ee9000008 +:010eea000007 +:010eeb000006 +:010eec000005 +:010eed000004 +:010eee000003 +:010eef000002 +:010ef0000001 +:010ef1000000 +:010ef20000ff +:010ef30000fe +:010ef40000fd +:010ef50000fc +:010ef60000fb +:010ef70000fa +:010ef80000f9 +:010ef90000f8 +:010efa0000f7 +:010efb0000f6 +:010efc0000f5 +:010efd0000f4 +:010efe0000f3 +:010eff009062 +:010f000003ed +:010f010000ef +:010f020000ee +:010f030000ed +:010f040000ec +:010f050000eb +:010f060000ea +:010f070000e9 +:010f080000e8 +:010f090000e7 +:010f0a0000e6 +:010f0b0000e5 +:010f0c0000e4 +:010f0d0000e3 +:010f0e0000e2 +:010f0f0000e1 +:010f100000e0 +:010f110000df +:010f120000de +:010f130000dd +:010f140000dc +:010f150000db +:010f160000da +:010f170000d9 +:010f180000d8 +:010f190000d7 +:010f1a0000d6 +:010f1b0000d5 +:010f1c0000d4 +:010f1d0000d3 +:010f1e0000d2 +:010f1f0000d1 +:010f200000d0 +:010f210000cf +:010f220000ce +:010f230000cd +:010f240000cc +:010f250000cb +:010f260000ca +:010f270000c9 +:010f280000c8 +:010f290000c7 +:010f2a0000c6 +:010f2b0000c5 +:010f2c0000c4 +:010f2d0000c3 +:010f2e0000c2 +:010f2f0000c1 +:010f300000c0 +:010f310000bf +:010f320000be +:010f330000bd +:010f340000bc +:010f350000bb +:010f360000ba +:010f370000b9 +:010f380000b8 +:010f390000b7 +:010f3a0000b6 +:010f3b0000b5 +:010f3c0000b4 +:010f3d0000b3 +:010f3e0000b2 +:010f3f009021 +:010f400003ad +:010f410000af +:010f420000ae +:010f430000ad +:010f440000ac +:010f450000ab +:010f460000aa +:010f470000a9 +:010f480000a8 +:010f490000a7 +:010f4a0000a6 +:010f4b0000a5 +:010f4c0000a4 +:010f4d0000a3 +:010f4e0000a2 +:010f4f0000a1 +:010f500000a0 +:010f5100009f +:010f5200009e +:010f5300009d +:010f5400009c +:010f5500009b +:010f5600009a +:010f57000099 +:010f58000098 +:010f59000097 +:010f5a000096 +:010f5b000095 +:010f5c000094 +:010f5d000093 +:010f5e000092 +:010f5f000091 +:010f60000090 +:010f6100008f +:010f6200008e +:010f6300008d +:010f6400008c +:010f6500008b +:010f6600008a +:010f67000089 +:010f68000088 +:010f69000087 +:010f6a000086 +:010f6b000085 +:010f6c000084 +:010f6d000083 +:010f6e000082 +:010f6f000081 +:010f70000080 +:010f7100007f +:010f7200007e +:010f7300007d +:010f7400007c +:010f7500007b +:010f7600007a +:010f77000079 +:010f78000078 +:010f79000077 +:010f7a000076 +:010f7b000075 +:010f7c000074 +:010f7d000073 +:010f7e000072 +:010f7f0090e1 +:010f8000036d +:010f8100006f +:010f8200006e +:010f8300006d +:010f8400006c +:010f8500006b +:010f8600006a +:010f87000069 +:010f88000068 +:010f89000067 +:010f8a000066 +:010f8b000065 +:010f8c000064 +:010f8d000063 +:010f8e000062 +:010f8f000061 +:010f90000060 +:010f9100005f +:010f9200005e +:010f9300005d +:010f9400005c +:010f9500005b +:010f9600005a +:010f97000059 +:010f98000058 +:010f99000057 +:010f9a000056 +:010f9b000055 +:010f9c000054 +:010f9d000053 +:010f9e000052 +:010f9f000051 +:010fa0000050 +:010fa100004f +:010fa200004e +:010fa300004d +:010fa400004c +:010fa500004b +:010fa600004a +:010fa7000049 +:010fa8000048 +:010fa9000047 +:010faa000046 +:010fab000045 +:010fac000044 +:010fad000043 +:010fae000042 +:010faf000041 +:010fb0000040 +:010fb100003f +:010fb200003e +:010fb300003d +:010fb400003c +:010fb500003b +:010fb600003a +:010fb7000039 +:010fb8000038 +:010fb9000037 +:010fba000036 +:010fbb000035 +:010fbc000034 +:010fbd000033 +:010fbe000032 +:010fbf0090a1 +:010fc000e050 +:010fc100e04f +:010fc200e04e +:010fc300e04d +:010fc400e04c +:010fc500e04b +:010fc600e04a +:010fc700e049 +:010fc800e048 +:010fc900e047 +:010fca00e046 +:010fcb00e045 +:010fcc00e044 +:010fcd00e043 +:010fce00e042 +:010fcf00e041 +:010fd000e040 +:010fd100e03f +:010fd200e03e +:010fd300e03d +:010fd400e03c +:010fd500e03b +:010fd600e03a +:010fd700e039 +:010fd800e038 +:010fd900e037 +:010fda00e036 +:010fdb00e035 +:010fdc00e034 +:010fdd00e033 +:010fde00e032 +:010fdf00e031 +:010fe000e030 +:010fe100e02f +:010fe200e02e +:010fe300e02d +:010fe400e02c +:010fe500e02b +:010fe600e02a +:010fe700e029 +:010fe800e028 +:010fe900e027 +:010fea00e026 +:010feb00e025 +:010fec00e024 +:010fed00e023 +:010fee00e022 +:010fef00e021 +:010ff000e020 +:010ff100e01f +:010ff200e01e +:010ff300e01d +:010ff400e01c +:010ff500e01b +:010ff600e01a +:010ff700e019 +:010ff800e018 +:010ff900e017 +:010ffa00e016 +:010ffb00e015 +:010ffc00e014 +:010ffd00e013 +:010ffe00e012 +:010fff00e011 +:00000001ff diff --git a/bsp2/Angabe/vga_arc.vhd b/bsp2/Angabe/vga_arc.vhd new file mode 100644 index 0000000..3d2d158 --- /dev/null +++ b/bsp2/Angabe/vga_arc.vhd @@ -0,0 +1,223 @@ + ------------------------------------------------------------------------------- +-- Title : vga architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: arch of top level module, the sub-modules are connected here +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; -- include package + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + +architecture behav of vga is + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + +------------------------------------------------------------------------------- +-- component declarations for the modules +------------------------------------------------------------------------------- + + component vga_driver + port ( + clk : in std_logic; + reset : in std_logic; + column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + h_enable : out std_logic; + v_enable : out std_logic; + hsync : out std_logic; + vsync : out std_logic; + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter : out std_logic; + d_set_vsync_counter : out std_logic; + d_set_column_counter : out std_logic; + d_set_line_counter : out std_logic); + end component; + + + component vga_control + port ( + clk : in std_logic; + reset : in std_logic; + column_counter : in std_logic_vector(COL_CNT_WIDTH-1 downto 0); + line_counter : in std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + h_enable : in std_logic; + v_enable : in std_logic; + toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + toggle : out std_logic; + r, g, b : out std_logic + ); + end component; + + + component board_driver + port ( + reset : in std_logic; + seven_seg : out std_logic_vector(2*SEG_WIDTH-1 downto 0)); + end component; + + +-- declare signals needed for internal wiring of these components later + signal column_counter_sig : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal line_counter_sig : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal h_enable_sig : std_logic; + signal v_enable_sig : std_logic; + signal r_sig, g_sig, b_sig : std_logic; + signal hsync_sig, vsync_sig : std_logic; + +-- declare signals needed for prolongation of reset + signal dly_counter : std_logic_vector(1 downto 0); + signal dly_counter_next : std_logic_vector(1 downto 0); + constant MAX_DLY : std_logic_vector(1 downto 0) := "11"; + signal reset_dly : std_logic; -- + signal safe_reset : std_logic; + + +------------------------------------------------------------------------------- +-- prolong duration of reset to prevent glitches at power-up +------------------------------------------------------------------------------- + +begin + + DELAY_RESET_syn : process(clk_pin) -- synchronous capture + begin + if clk_pin'event and clk_pin = '1' then -- upon rising clock + dly_counter <= dly_counter_next; -- ... capture new counter value + end if; + end process; + + DELAY_RESET_next : process(dly_counter, reset_pin) -- next state logic + begin + if reset_pin = RES_ACT then -- upon reset + dly_counter_next <= (others => '0'); -- ...clear dly counter + elsif dly_counter < MAX_DLY then -- if no oflo + dly_counter_next <= dly_counter + '1'; -- ...increment dly counter + else + dly_counter_next <= dly_counter; -- freeze dly counter when oflo + end if; + end process; + + DELAY_RESET_out: process(dly_counter) + begin + if dly_counter < MAX_DLY then -- until dly counter reaches maximum + reset_dly <= RES_ACT; -- ...activate delayed reset signal + else -- upon counter oflo + reset_dly <= not(RES_ACT); -- ...finally deactivate delayed reset + end if; + end process; + + + + COMBINE_RESET: process(reset_pin, reset_dly) -- generate "safe" reset signal + begin + if reset_pin = RES_ACT or reset_dly = RES_ACT then -- ...by combining delayed reset with non-delayed reset input + safe_reset <= RES_ACT; + else + safe_reset <= not(RES_ACT); + end if; + end process; + + +------------------------------------------------------------------------------- +-- instantiate the components and connect to internal and external signals +------------------------------------------------------------------------------- + + +board_driver_unit : board_driver + port map ( + reset => safe_reset, + seven_seg => seven_seg_pin); + + +vga_driver_unit : vga_driver + port map ( + clk => clk_pin, + reset => safe_reset, + column_counter => column_counter_sig, + line_counter => line_counter_sig, + h_enable => h_enable_sig, + v_enable => v_enable_sig, + hsync => hsync_sig, + vsync => vsync_sig, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter); + +-- make the wiring for hsync and vsync pins +-- (pin is output only => internal _sig version required to allow readback of signal) + vsync_pin <= vsync_sig; + hsync_pin <= hsync_sig; + + + vga_control_unit : vga_control + port map ( + clk => clk_pin, + reset => safe_reset, + column_counter => column_counter_sig, + line_counter => line_counter_sig, + h_enable => h_enable_sig, + v_enable => v_enable_sig, + toggle_counter => d_toggle_counter, + toggle => d_toggle, + r => r_sig, + g => g_sig, + b => b_sig); + +-- make the wiring for RGB pins: drive all pins for same color from one source ("8 color mode") + r0_pin <= r_sig; r1_pin <= r_sig; r2_pin <= r_sig; + g0_pin <= g_sig; g1_pin <= g_sig; g2_pin <= g_sig; + b0_pin <= b_sig; b1_pin <= b_sig; + + +-- make extra pin connections for debug signals + d_hsync <= hsync_sig; -- make duplicate of signal for debug connector + d_vsync <= vsync_sig; -- make duplicate of signal for debug connector + d_column_counter <= column_counter_sig; + d_line_counter <= line_counter_sig; + d_h_enable <= h_enable_sig; + d_v_enable <= v_enable_sig; + d_r <= r_sig; + d_g <= g_sig; + d_b <= b_sig; + d_state_clk <= clk_pin; -- make duplicate of signal for debug connector + + +end behav; + +------------------------------------------------------------------------------- +-- END ARCHITECTURE +------------------------------------------------------------------------------- diff --git a/bsp2/Angabe/vga_beh_tb.vhd b/bsp2/Angabe/vga_beh_tb.vhd new file mode 100644 index 0000000..9530bed --- /dev/null +++ b/bsp2/Angabe/vga_beh_tb.vhd @@ -0,0 +1,194 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-09-29 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_tb is + +end vga_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture behaviour of vga_tb is + + constant cc : time := 39.7 ns; -- test clock period + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0)); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : hsync_state_type; + signal d_vsync_state : vsync_state_type; + signal d_state_clk : std_logic; + signal d_toggle : std_logic; + signal d_toggle_counter : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk, + d_toggle => d_toggle, + d_toggle_counter => d_toggle_counter); + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk_pin <= '1'; + wait for cc/2; + clk_pin <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk_pin = '1' and clk_pin'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(10000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + +end behaviour; + + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_beh of vga_tb is + for behaviour + for vga_unit : vga use entity work.vga(behav); + end for; + end for; +end vga_conf_beh; + + diff --git a/bsp2/Angabe/vga_control_arc.vhd b/bsp2/Angabe/vga_control_arc.vhd new file mode 100644 index 0000000..7f78d72 --- /dev/null +++ b/bsp2/Angabe/vga_control_arc.vhd @@ -0,0 +1,128 @@ +------------------------------------------------------------------------------- +-- Title : vga_control architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_control.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: generation of colors (RGB) +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + +architecture behav of vga_control is + + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + + -- signal and constant declarations + signal r_next, g_next, b_next : std_logic; -- auxiliary signals for next state logic + signal toggle_sig : std_logic; -- auxiliary signal to allow read back of toggle + signal toggle_counter_sig : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); -- auxiliary signal to allow read back of blinker + signal toggle_next : std_logic; -- auxiliary signal for next state logic + signal toggle_counter_next : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); -- auxiliary signal for next state logic + constant HALFPERIOD : std_logic_vector(TOG_CNT_WIDTH-1 downto 0) := "1100000000010001111011000"; + -- define half period of toggle frequency in clock ticks + +begin + ----------------------------------------------------------------------------- + -- draw rectangle on screen + ----------------------------------------------------------------------------- + + DRAW_SQUARE_syn: process(clk, reset) + begin + if (reset = RES_ACT) then -- draw black screen upon reset + r <= COLR_OFF; + g <= COLR_OFF; + b <= COLR_OFF; + elsif (clk'event and clk = '1') then -- synchronous capture + r <= r_next; + g <= g_next; + b <= b_next; + end if; + end process; + + + DRAW_SQUARE_next: process (column_counter, line_counter, v_enable, h_enable, toggle_sig) + begin + if v_enable = ENABLE and h_enable = ENABLE then + if (column_counter >= X_MIN and column_counter <= X_MAX and -- if pixel within the rectangle borders + line_counter >= Y_MIN and line_counter <= Y_MAX) then + r_next <= toggle_sig; -- ...red + g_next <= COLR_OFF; -- ...green + b_next <= not toggle_sig; -- ...blue + else -- if somewhere else on screen... + r_next <= COLR_OFF; + g_next <= COLR_OFF; -- ... draw background color + b_next <= COLR_OFF; + end if; + else -- if out of screen... + r_next <= COLR_OFF; + g_next <= COLR_OFF; -- ... do not activate any color + b_next <= COLR_OFF; -- (black screen) + end if; + end process; + + + ----------------------------------------------------------------------------- + -- control blinking of rectangle + ----------------------------------------------------------------------------- + + BLINKER_syn: process(clk, reset) + begin + if (reset = RES_ACT) then -- asyn reset + toggle_counter_sig <= (others => '0'); + toggle_sig <= COLR_OFF; + elsif(clk'event and clk = '1') then -- synchronous capture + toggle_counter_sig <= toggle_counter_next; + toggle_sig <= toggle_next; + end if; + end process; + + + BLINKER_next : process(toggle_counter_sig, toggle_sig) + begin + if toggle_counter_sig >= HALFPERIOD then -- after half period ... + toggle_counter_next <= (others => '0'); -- ... clear counter + toggle_next <= not(toggle_sig); -- ... and toggle colour. + else -- before half period ... + toggle_counter_next <= toggle_counter_sig + '1'; -- ... increment counter + toggle_next <= toggle_sig; -- ... and hold colour + end if; + end process; + + +-- assign auxiliary signals to module outputs +toggle <= toggle_sig; +toggle_counter <= toggle_counter_sig; + +end behav; + +------------------------------------------------------------------------------- +-- END ARCHITECTURE +------------------------------------------------------------------------------- diff --git a/bsp2/Angabe/vga_control_ent.vhd b/bsp2/Angabe/vga_control_ent.vhd new file mode 100644 index 0000000..2ff5a0a --- /dev/null +++ b/bsp2/Angabe/vga_control_ent.vhd @@ -0,0 +1,53 @@ +------------------------------------------------------------------------------- +-- Title : vga_control entity +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_control_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: generation of colors (RGB) +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + + +entity vga_control is + port(clk : in std_logic; + reset : in std_logic; + column_counter : in std_logic_vector(COL_CNT_WIDTH-1 downto 0); + toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + toggle : out std_logic; + line_counter : in std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + v_enable : in std_logic; + h_enable : in std_logic; + r, g, b : out std_logic + ); + +end vga_control; + +------------------------------------------------------------------------------- +-- END ENTITY +------------------------------------------------------------------------------- diff --git a/bsp2/Angabe/vga_driver_arc.vhd b/bsp2/Angabe/vga_driver_arc.vhd new file mode 100644 index 0000000..1b89ac1 --- /dev/null +++ b/bsp2/Angabe/vga_driver_arc.vhd @@ -0,0 +1,402 @@ +------------------------------------------------------------------------------- +-- Title : vga_driver architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_driver.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-01-24 +------------------------------------------------------------------------------- +-- Description: generate hsync and vsync +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-01-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + +architecture behav of vga_driver is + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + constant TIME_A : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "1100011111"; + constant TIME_B : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "0001011010"; + constant TIME_BC : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "0010000111"; + constant TIME_BCD : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "1100000111"; + + constant TIME_O : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "1000001000"; + constant TIME_P : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "0000000001"; + constant TIME_PQ : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "0000100001"; + constant TIME_PQR : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "1000000001"; + + signal h_sync : std_logic; + signal h_sync_next : std_logic; + + signal hsync_state : hsync_state_type; + signal hsync_state_next : hsync_state_type; + + signal h_enable_sig : std_logic; + signal h_enable_next : std_logic; + + signal set_hsync_counter : std_logic; + signal hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal hsync_counter_next : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + constant HSYN_CNT_MAX : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "1111111111"; + + signal column_counter_sig : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal column_counter_next : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal set_column_counter : std_logic; + + signal v_sync : std_logic; + signal v_sync_next : std_logic; + + signal vsync_state : vsync_state_type; + signal vsync_state_next : vsync_state_type; + + signal v_enable_sig : std_logic; + signal v_enable_next : std_logic; + + signal set_vsync_counter : std_logic; + signal vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal vsync_counter_next : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + constant VSYN_CNT_MAX : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "1111111111"; + + signal line_counter_sig : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal line_counter_next : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal set_line_counter : std_logic; + + + +begin + +---------------------------------------------------------------------------- +-- Column_Counter [0..639]: calculates column number for next pixel to be displayed +---------------------------------------------------------------------------- + + COLUMN_COUNT_syn: process(clk, reset, column_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + column_counter_sig <= (others => '0'); + else + column_counter_sig <= column_counter_next; -- synchronous capture + end if; + end if; + end process; + + COLUMN_COUNT_next: process(set_column_counter, column_counter_sig) + begin + if set_column_counter = ENABLE then -- reset counter + column_counter_next <= (others => '0'); + else + if column_counter_sig < RIGHT_BORDER then + column_counter_next <= column_counter_sig + '1'; -- increment column + else + column_counter_next <= RIGHT_BORDER; -- ... but do not count beyond right border + end if; + end if; + end process; + +---------------------------------------------------------------------------- +-- Line_counter [0..479]: calculates line number for next pixel to be displayed +---------------------------------------------------------------------------- + + LINE_COUNT_syn: process(clk, reset, line_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + line_counter_sig <= (others => '0'); + else + line_counter_sig <= line_counter_next; -- synchronous capture + end if; + end if; + end process; + + LINE_COUNT_next: process(set_line_counter, line_counter_sig, set_hsync_counter) + begin + if set_line_counter = ENABLE then -- reset counter + line_counter_next <= (others => '0'); + else + if line_counter_sig < BOTTOM_BORDER then + if set_hsync_counter = '1' then -- when enabled + line_counter_next <= line_counter_sig + '1'; -- ... increment line + else + line_counter_next <= line_counter_sig; + end if; + else + line_counter_next <= BOTTOM_BORDER; -- ... but do not count below bottom + end if; + end if; + end process; + + +---------------------------------------------------------------------------- +-- Hsync_Counter: generates time base for HSYNC State Machine +---------------------------------------------------------------------------- + + HSYNC_COUNT_syn: process(clk, reset, hsync_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + hsync_counter <= (others => '0'); + else + hsync_counter <= hsync_counter_next; -- synchronous capture + end if; + end if; + end process; + + HSYNC_COUNT_next: process(set_hsync_counter, hsync_counter) + begin + if set_hsync_counter = ENABLE then -- reset counter + hsync_counter_next <= (others => '0'); + else + if hsync_counter < HSYN_CNT_MAX then + hsync_counter_next <= hsync_counter + '1'; -- increment time + else + hsync_counter_next <= HSYN_CNT_MAX; -- ... but do not count beyond max period + end if; + end if; + end process; + + +---------------------------------------------------------------------------- +-- HSYNC STATE MACHINE: generates hsync signal and controls hsync counter & column counter +---------------------------------------------------------------------------- + + HSYNC_FSM_syn: process (clk, reset) -- synchronous capture + begin + if clk'event and clk = '1' then + if reset = RES_ACT then + hsync_state <= RESET_STATE; + h_sync <= '1'; + v_enable_sig <= not(ENABLE); + else + hsync_state <= hsync_state_next; + h_sync <= h_sync_next; + v_enable_sig <= v_enable_next; + end if; + end if; + end process; + + HSYNC_FSM_next : process(hsync_state, hsync_counter, h_sync, v_enable_sig) -- next-state logic + begin -- default assignments + hsync_state_next <= hsync_state; -- ... hold current state + h_sync_next <= h_sync; -- ... and values + v_enable_next <= v_enable_sig; + + case hsync_state is + when RESET_STATE => + h_sync_next <= '0'; -- next signal values are defined here + v_enable_next <= not(ENABLE); + hsync_state_next <= B_STATE; -- ... as well as state transitions + when B_STATE => + h_sync_next <= '0'; + if hsync_counter = TIME_B then + hsync_state_next <= C_STATE; + end if; + when C_STATE => + h_sync_next <= '1'; + if hsync_counter = TIME_BC then + hsync_state_next <= pre_D_STATE; + end if; + when pre_D_STATE => + v_enable_next <= ENABLE; + hsync_state_next <= D_STATE; + when D_STATE => + v_enable_next <= ENABLE; + if hsync_counter = TIME_BCD then + hsync_state_next <= E_STATE; + end if; + when E_STATE => + v_enable_next <= not(ENABLE); + if hsync_counter = TIME_A then + hsync_state_next <= pre_B_STATE; + end if; + when pre_B_STATE => + h_sync_next <= '0'; + v_enable_next <= not(ENABLE); + hsync_state_next <= B_STATE; + when others => + null; + end case; + end process; + + HSYNC_FSM_out : process(hsync_state) -- output logic + begin + set_hsync_counter <= not(ENABLE); -- default assignments + set_column_counter <= not(ENABLE); + + case hsync_state is + when RESET_STATE => -- outputs for each state are defined here + set_hsync_counter <= ENABLE; + when pre_D_STATE => + set_column_counter <= ENABLE; + when pre_B_STATE => + set_hsync_counter <= ENABLE; + when others => + null; + end case; + end process; + + +---------------------------------------------------------------------------- +-- Vsync_Counter: generates time base for VSYNC State Machine +---------------------------------------------------------------------------- + + VSYNC_COUNT_syn: process(clk, reset, vsync_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + vsync_counter <= (others => '0'); + else + vsync_counter <= vsync_counter_next; -- synchronous capture + end if; + end if; + end process; + + VSYNC_COUNT_next: process(set_vsync_counter, vsync_counter, set_hsync_counter) + begin + if set_vsync_counter = ENABLE then -- reset counter + vsync_counter_next <= (others => '0'); + else + if vsync_counter < VSYN_CNT_MAX then + if set_hsync_counter = '1' then -- if enabled + vsync_counter_next <= vsync_counter + '1'; -- ... increment time + else + vsync_counter_next <= vsync_counter; + end if; + else + vsync_counter_next <= VSYN_CNT_MAX; -- ... but do not count beyond max period + end if; + end if; + end process; + + +---------------------------------------------------------------------------- +-- VSYNC STATE MACHINE: generates vsync signal and controls vsync counter & line counter +---------------------------------------------------------------------------- + + VSYNC_FSM_syn : process (clk, reset) -- synchronous capture + begin + if clk'event and clk = '1' then + if reset = RES_ACT then + vsync_state <= RESET_STATE; + v_sync <= '1'; + h_enable_sig <= not(ENABLE); + else + vsync_state <= vsync_state_next; + v_sync <= v_sync_next; + h_enable_sig <= h_enable_next; + end if; + end if; + end process; + + VSYNC_FSM_next : process(vsync_state, vsync_counter, v_sync, h_enable_sig) + begin -- next state logic + vsync_state_next <= vsync_state; -- default assignments + v_sync_next <= v_sync; + h_enable_next <= h_enable_sig; + + case vsync_state is -- state transitions and next signals are defined here + when RESET_STATE => + v_sync_next <= '0'; + h_enable_next <= not(ENABLE); + vsync_state_next <= P_STATE; + when P_STATE => + v_sync_next <= '0'; + if vsync_counter = time_p then + vsync_state_next <= Q_STATE; + end if; + when Q_STATE => + v_sync_next <= '1'; + if vsync_counter = time_pq then + vsync_state_next <= pre_R_STATE; + end if; + when pre_R_STATE => + h_enable_next <= ENABLE; + vsync_state_next <= R_STATE; + when R_STATE => + h_enable_next <= ENABLE; + if vsync_counter = time_pqr then + vsync_state_next <= S_STATE; + end if; + when S_STATE => + h_enable_next <= not(ENABLE); + if vsync_counter = time_o then + vsync_state_next <= pre_P_STATE; + end if; + when pre_P_STATE => + v_sync_next <= '0'; + h_enable_next <= not(ENABLE); + vsync_state_next <= P_STATE; + when others => + null; + end case; + end process; + + VSYNC_FSM_out : process(vsync_state) + begin -- output logic + set_vsync_counter <= not(ENABLE); -- output values for each state defined here + set_line_counter <= not(ENABLE); + + case vsync_state is + when RESET_STATE => + set_vsync_counter <= ENABLE; + when pre_R_STATE => + set_line_counter <= ENABLE; + when pre_P_STATE => + set_vsync_counter <= ENABLE; + when others => + null; + end case; + end process; + + + +-- signal wiring for entity (introduced _sig to allow readback of output signals) + + column_counter <= column_counter_sig; + v_enable <= v_enable_sig; + line_counter <= line_counter_sig; + h_enable <= h_enable_sig; + + + hsync <= h_sync; + vsync <= v_sync; + + ----------------------------------------------------------------------------- + -- debug signals + ----------------------------------------------------------------------------- + d_hsync_state <= hsync_state; + d_vsync_state <= vsync_state; + d_hsync_counter <= hsync_counter; + d_vsync_counter <= vsync_counter; + d_set_hsync_counter <= set_hsync_counter; + d_set_vsync_counter <= set_vsync_counter; + d_set_column_counter <= set_column_counter; + d_set_line_counter <= set_line_counter; + +end behav; + +------------------------------------------------------------------------------- +-- END ARCHITECTURE +------------------------------------------------------------------------------- diff --git a/bsp2/Angabe/vga_driver_ent.vhd b/bsp2/Angabe/vga_driver_ent.vhd new file mode 100644 index 0000000..f4c00be --- /dev/null +++ b/bsp2/Angabe/vga_driver_ent.vhd @@ -0,0 +1,60 @@ +------------------------------------------------------------------------------- +-- Title : vga_driver entity +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_driver_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: generate vsync and hsync +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + + +entity vga_driver is + port(clk : in std_logic; + reset : in std_logic; + column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + h_enable : out std_logic; + v_enable : out std_logic; + hsync, vsync : out std_logic; + + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter : out std_logic; + d_set_vsync_counter : out std_logic; + d_set_column_counter : out std_logic; + d_set_line_counter : out std_logic + ); + +end vga_driver; + +------------------------------------------------------------------------------- +-- END ENTITY +------------------------------------------------------------------------------- diff --git a/bsp2/Angabe/vga_ent.vhd b/bsp2/Angabe/vga_ent.vhd new file mode 100644 index 0000000..a32ebc0 --- /dev/null +++ b/bsp2/Angabe/vga_ent.vhd @@ -0,0 +1,73 @@ +------------------------------------------------------------------------------- +-- Title : vga entitiy +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: entity of top level module, external pins defined here +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + +entity vga is + port( +-- input pins from PCB board + clk_pin : in std_logic; -- clock pin + reset_pin : in std_logic; -- reset pins (from switch) +-- output pins to RGB connector / VGA screen + r0_pin, r1_pin, r2_pin : out std_logic; -- to RGB connector "red" + g0_pin, g1_pin, g2_pin : out std_logic; -- to RGB connector "green" + b0_pin, b1_pin : out std_logic; -- to RGB connector "blue" + hsync_pin : out std_logic; -- to RGB connector "Hsync" + vsync_pin : out std_logic; -- to RGB connector "Vsync" +-- output pins to 7-segment display + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); +-- output pins provided for debugging only / logic analyzer + d_hsync, d_vsync : out std_logic; -- copy of hsync_pin, vsync_pin + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0) + ); + +end vga; + +------------------------------------------------------------------------------- +-- END ENTITY +------------------------------------------------------------------------------- diff --git a/bsp2/Angabe/vga_pak.vhd b/bsp2/Angabe/vga_pak.vhd new file mode 100644 index 0000000..61c8adf --- /dev/null +++ b/bsp2/Angabe/vga_pak.vhd @@ -0,0 +1,85 @@ +------------------------------------------------------------------------------- +-- Title : vga package +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_pak.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-08-19 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: definitions of global constants and enumerated types +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-08-19 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + + +------------------------------------------------------------------------------- +-- PACKAGE +------------------------------------------------------------------------------- + +package vga_pak is + + constant RES_ACT : std_logic := '0'; -- define reset active LO + constant ENABLE : std_logic := '1'; -- define diverse enable HI + constant COLR_ON : std_logic := '1'; -- define VGA color on as HI + constant COLR_OFF : std_logic := '0'; -- define VGA color off as LO + constant SEG_WIDTH : integer := 7; -- display has 7 segments + constant BCD_WIDTH : integer := 4; -- BCD number has 4 bit + constant TOG_CNT_WIDTH : integer := 25; -- bitwidth of counter that controls blinking + + constant COL_CNT_WIDTH : integer := 10; -- width of the column counter + constant LINE_CNT_WIDTH : integer := 9; -- width of the line counter + constant HSYN_CNT_WIDTH : integer := 10; -- width of the h-sync counter + constant VSYN_CNT_WIDTH : integer := 10; -- width of the v-sync counter + + constant RIGHT_BORDER: std_logic_vector(COL_CNT_WIDTH-1 downto 0) := "1001111111"; -- 640 columns (0...639) + constant BOTTOM_BORDER: std_logic_vector(LINE_CNT_WIDTH-1 downto 0) := "111011111"; -- 480 lines (0...479) + + -- define coordinates of rectangle + constant X_MIN : std_logic_vector(COL_CNT_WIDTH-1 downto 0) := "0001100100"; -- 100 + constant X_MAX : std_logic_vector(COL_CNT_WIDTH-1 downto 0) := "0011001000"; -- 200 + constant Y_MIN : std_logic_vector(LINE_CNT_WIDTH-1 downto 0) := "001100100"; + constant Y_MAX : std_logic_vector(LINE_CNT_WIDTH-1 downto 0) := "011001000"; + + -- define emumerated types for state machines + type hsync_state_type is (RESET_STATE, B_STATE, C_STATE, D_STATE, E_STATE, + pre_D_STATE, pre_B_STATE); + type vsync_state_type is (RESET_STATE, P_STATE, Q_STATE, R_STATE, S_STATE, + pre_R_STATE, pre_P_STATE); + + -- Definitions for 7-segment display gfedcba + constant DIGIT_ZERO : std_logic_vector(SEG_WIDTH-1 downto 0) := "1000000"; + constant DIGIT_ONE : std_logic_vector(SEG_WIDTH-1 downto 0) := "1111001"; + constant DIGIT_TWO : std_logic_vector(SEG_WIDTH-1 downto 0) := "0100100"; + constant DIGIT_THREE : std_logic_vector(SEG_WIDTH-1 downto 0) := "0110000"; + constant DIGIT_FOUR : std_logic_vector(SEG_WIDTH-1 downto 0) := "0011001"; + constant DIGIT_FIVE : std_logic_vector(SEG_WIDTH-1 downto 0) := "0010010"; + constant DIGIT_SIX : std_logic_vector(SEG_WIDTH-1 downto 0) := "0000010"; + constant DIGIT_SEVEN : std_logic_vector(SEG_WIDTH-1 downto 0) := "1111000"; + constant DIGIT_EIGHT : std_logic_vector(SEG_WIDTH-1 downto 0) := "0000000"; + constant DIGIT_NINE : std_logic_vector(SEG_WIDTH-1 downto 0) := "0011000"; + constant DIGIT_MINUS : std_logic_vector(SEG_WIDTH-1 downto 0) := "0111111"; + constant DIGIT_A : std_logic_vector(SEG_WIDTH-1 downto 0) := "0001000"; + constant DIGIT_B : std_logic_vector(SEG_WIDTH-1 downto 0) := "0000011"; + constant DIGIT_C : std_logic_vector(SEG_WIDTH-1 downto 0) := "0110001"; + constant DIGIT_D : std_logic_vector(SEG_WIDTH-1 downto 0) := "1000010"; + constant DIGIT_E : std_logic_vector(SEG_WIDTH-1 downto 0) := "1001111"; + constant DIGIT_F : std_logic_vector(SEG_WIDTH-1 downto 0) := "1000111"; + constant DIGIT_OFF : std_logic_vector(SEG_WIDTH-1 downto 0) := "1111111"; + +end package; diff --git a/bsp2/Angabe/vga_pll.bdf b/bsp2/Angabe/vga_pll.bdf new file mode 100755 index 0000000..906c435 --- /dev/null +++ b/bsp2/Angabe/vga_pll.bdf @@ -0,0 +1,847 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +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. +*/ +(header "graphic" (version "1.3")) +(pin + (input) + (rect 248 80 416 96) + (text "INPUT" (rect 133 0 161 10)(font "Arial" (font_size 6))) + (text "board_clk" (rect 5 0 52 12)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 156 17)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 256 136 304 152)) +) +(pin + (input) + (rect 544 96 712 112) + (text "INPUT" (rect 133 0 161 10)(font "Arial" (font_size 6))) + (text "reset" (rect 5 0 29 12)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 156 17)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 512 176 560 192)) +) +(pin + (output) + (rect 928 256 1148 272) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_hsync" (rect 90 0 132 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 96 1188 112)) +) +(pin + (output) + (rect 928 272 1148 288) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_vsync" (rect 90 0 133 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 112 1188 128)) +) +(pin + (output) + (rect 928 288 1148 304) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_column_counter[9..0]" (rect 90 0 205 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 128 1188 272)) +) +(pin + (output) + (rect 928 320 1148 336) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_column_counter" (rect 90 0 200 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 160 1196 176)) +) +(pin + (output) + (rect 928 336 1148 352) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_line_counter" (rect 90 0 182 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 176 1188 192)) +) +(pin + (output) + (rect 928 352 1148 368) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_hsync_counter[9..0]" (rect 90 0 200 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 192 1196 248)) +) +(pin + (output) + (rect 928 368 1142 384) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_vsync_counter[9..0]" (rect 90 0 202 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 208 1182 264)) +) +(pin + (output) + (rect 928 384 1142 400) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_hsync_counter" (rect 90 0 196 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 224 1182 240)) +) +(pin + (output) + (rect 928 400 1142 416) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_vsync_counter" (rect 90 0 197 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 240 1182 256)) +) +(pin + (output) + (rect 928 448 1142 464) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_r" (rect 90 0 105 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 288 1182 304)) +) +(pin + (output) + (rect 928 464 1142 480) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_g" (rect 90 0 107 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 304 1182 320)) +) +(pin + (output) + (rect 928 480 1142 496) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_b" (rect 90 0 107 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 320 1182 336)) +) +(pin + (output) + (rect 928 496 1142 512) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_hsync_state[0..6]" (rect 90 0 189 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1216 480 1264 584)) +) +(pin + (output) + (rect 928 512 1136 528) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_vsync_state[0..6]" (rect 90 0 190 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1256 352 1312 456)) +) +(pin + (output) + (rect 928 304 1148 320) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_line_counter[8..0]" (rect 90 0 186 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 144 1188 272)) +) +(pin + (output) + (rect 928 416 1142 432) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_h_enable" (rect 90 0 145 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 256 1182 272)) +) +(pin + (output) + (rect 928 432 1142 448) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_v_enable" (rect 90 0 146 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 272 1182 288)) +) +(pin + (output) + (rect 928 528 1148 544) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_state_clk" (rect 90 0 146 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1404 88 1452 104)) +) +(pin + (output) + (rect 928 544 1148 560) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_toggle" (rect 90 0 131 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1468 112 1516 128)) +) +(pin + (output) + (rect 928 80 1104 96) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "r0_pin" (rect 90 0 119 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 400 1144 416)) +) +(pin + (output) + (rect 928 96 1104 112) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "r1_pin" (rect 90 0 119 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 416 1144 432)) +) +(pin + (output) + (rect 928 112 1104 128) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "r2_pin" (rect 90 0 119 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 432 1144 448)) +) +(pin + (output) + (rect 928 128 1104 144) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "g0_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 448 1144 464)) +) +(pin + (output) + (rect 928 144 1104 160) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "g1_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 464 1144 480)) +) +(pin + (output) + (rect 928 160 1104 176) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "g2_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 480 1144 496)) +) +(pin + (output) + (rect 928 176 1104 192) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "b0_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 496 1144 512)) +) +(pin + (output) + (rect 928 192 1104 208) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "b1_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 512 1144 528)) +) +(pin + (output) + (rect 928 240 1148 256) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "seven_seg_pin[13..0]" (rect 90 0 196 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1508 472 1572 672)) +) +(pin + (output) + (rect 928 560 1148 576) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_toggle_counter[24..0]" (rect 90 0 205 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1492 128 1548 288)) +) +(pin + (output) + (rect 928 208 1104 224) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "hsync_pin" (rect 90 0 140 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 528 1144 544)) +) +(pin + (output) + (rect 928 224 1104 240) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "vsync_pin" (rect 90 0 141 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 544 1144 560)) +) +(symbol + (rect 712 56 928 600) + (text "vga" (rect 5 0 23 12)(font "Arial" )) + (text "inst" (rect 8 528 25 540)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clk_pin" (rect 0 0 34 12)(font "Arial" )) + (text "clk_pin" (rect 21 27 55 39)(font "Arial" )) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "reset_pin" (rect 0 0 44 12)(font "Arial" )) + (text "reset_pin" (rect 21 43 65 55)(font "Arial" )) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 216 32) + (output) + (text "r0_pin" (rect 0 0 29 12)(font "Arial" )) + (text "r0_pin" (rect 166 27 195 39)(font "Arial" )) + (line (pt 216 32)(pt 200 32)(line_width 1)) + ) + (port + (pt 216 48) + (output) + (text "r1_pin" (rect 0 0 29 12)(font "Arial" )) + (text "r1_pin" (rect 166 43 195 55)(font "Arial" )) + (line (pt 216 48)(pt 200 48)(line_width 1)) + ) + (port + (pt 216 64) + (output) + (text "r2_pin" (rect 0 0 29 12)(font "Arial" )) + (text "r2_pin" (rect 166 59 195 71)(font "Arial" )) + (line (pt 216 64)(pt 200 64)(line_width 1)) + ) + (port + (pt 216 80) + (output) + (text "g0_pin" (rect 0 0 31 12)(font "Arial" )) + (text "g0_pin" (rect 164 75 195 87)(font "Arial" )) + (line (pt 216 80)(pt 200 80)(line_width 1)) + ) + (port + (pt 216 96) + (output) + (text "g1_pin" (rect 0 0 31 12)(font "Arial" )) + (text "g1_pin" (rect 164 91 195 103)(font "Arial" )) + (line (pt 216 96)(pt 200 96)(line_width 1)) + ) + (port + (pt 216 112) + (output) + (text "g2_pin" (rect 0 0 31 12)(font "Arial" )) + (text "g2_pin" (rect 164 107 195 119)(font "Arial" )) + (line (pt 216 112)(pt 200 112)(line_width 1)) + ) + (port + (pt 216 128) + (output) + (text "b0_pin" (rect 0 0 31 12)(font "Arial" )) + (text "b0_pin" (rect 164 123 195 135)(font "Arial" )) + (line (pt 216 128)(pt 200 128)(line_width 1)) + ) + (port + (pt 216 144) + (output) + (text "b1_pin" (rect 0 0 31 12)(font "Arial" )) + (text "b1_pin" (rect 164 139 195 151)(font "Arial" )) + (line (pt 216 144)(pt 200 144)(line_width 1)) + ) + (port + (pt 216 160) + (output) + (text "hsync_pin" (rect 0 0 50 12)(font "Arial" )) + (text "hsync_pin" (rect 145 155 195 167)(font "Arial" )) + (line (pt 216 160)(pt 200 160)(line_width 1)) + ) + (port + (pt 216 176) + (output) + (text "vsync_pin" (rect 0 0 51 12)(font "Arial" )) + (text "vsync_pin" (rect 144 171 195 183)(font "Arial" )) + (line (pt 216 176)(pt 200 176)(line_width 1)) + ) + (port + (pt 216 192) + (output) + (text "seven_seg_pin[13..0]" (rect 0 0 106 12)(font "Arial" )) + (text "seven_seg_pin[13..0]" (rect 89 187 195 199)(font "Arial" )) + (line (pt 216 192)(pt 200 192)(line_width 3)) + ) + (port + (pt 216 208) + (output) + (text "d_hsync" (rect 0 0 42 12)(font "Arial" )) + (text "d_hsync" (rect 153 203 195 215)(font "Arial" )) + (line (pt 216 208)(pt 200 208)(line_width 1)) + ) + (port + (pt 216 224) + (output) + (text "d_vsync" (rect 0 0 43 12)(font "Arial" )) + (text "d_vsync" (rect 152 219 195 231)(font "Arial" )) + (line (pt 216 224)(pt 200 224)(line_width 1)) + ) + (port + (pt 216 240) + (output) + (text "d_column_counter[9..0]" (rect 0 0 115 12)(font "Arial" )) + (text "d_column_counter[9..0]" (rect 80 235 195 247)(font "Arial" )) + (line (pt 216 240)(pt 200 240)(line_width 3)) + ) + (port + (pt 216 256) + (output) + (text "d_line_counter[8..0]" (rect 0 0 96 12)(font "Arial" )) + (text "d_line_counter[8..0]" (rect 99 251 195 263)(font "Arial" )) + (line (pt 216 256)(pt 200 256)(line_width 3)) + ) + (port + (pt 216 272) + (output) + (text "d_set_column_counter" (rect 0 0 110 12)(font "Arial" )) + (text "d_set_column_counter" (rect 85 267 195 279)(font "Arial" )) + (line (pt 216 272)(pt 200 272)(line_width 1)) + ) + (port + (pt 216 288) + (output) + (text "d_set_line_counter" (rect 0 0 92 12)(font "Arial" )) + (text "d_set_line_counter" (rect 103 283 195 295)(font "Arial" )) + (line (pt 216 288)(pt 200 288)(line_width 1)) + ) + (port + (pt 216 304) + (output) + (text "d_hsync_counter[9..0]" (rect 0 0 110 12)(font "Arial" )) + (text "d_hsync_counter[9..0]" (rect 85 299 195 311)(font "Arial" )) + (line (pt 216 304)(pt 200 304)(line_width 3)) + ) + (port + (pt 216 320) + (output) + (text "d_vsync_counter[9..0]" (rect 0 0 112 12)(font "Arial" )) + (text "d_vsync_counter[9..0]" (rect 83 315 195 327)(font "Arial" )) + (line (pt 216 320)(pt 200 320)(line_width 3)) + ) + (port + (pt 216 336) + (output) + (text "d_set_hsync_counter" (rect 0 0 106 12)(font "Arial" )) + (text "d_set_hsync_counter" (rect 89 331 195 343)(font "Arial" )) + (line (pt 216 336)(pt 200 336)(line_width 1)) + ) + (port + (pt 216 352) + (output) + (text "d_set_vsync_counter" (rect 0 0 107 12)(font "Arial" )) + (text "d_set_vsync_counter" (rect 88 347 195 359)(font "Arial" )) + (line (pt 216 352)(pt 200 352)(line_width 1)) + ) + (port + (pt 216 368) + (output) + (text "d_h_enable" (rect 0 0 55 12)(font "Arial" )) + (text "d_h_enable" (rect 140 363 195 375)(font "Arial" )) + (line (pt 216 368)(pt 200 368)(line_width 1)) + ) + (port + (pt 216 384) + (output) + (text "d_v_enable" (rect 0 0 56 12)(font "Arial" )) + (text "d_v_enable" (rect 139 379 195 391)(font "Arial" )) + (line (pt 216 384)(pt 200 384)(line_width 1)) + ) + (port + (pt 216 400) + (output) + (text "d_r" (rect 0 0 15 12)(font "Arial" )) + (text "d_r" (rect 180 395 195 407)(font "Arial" )) + (line (pt 216 400)(pt 200 400)(line_width 1)) + ) + (port + (pt 216 416) + (output) + (text "d_g" (rect 0 0 17 12)(font "Arial" )) + (text "d_g" (rect 178 411 195 423)(font "Arial" )) + (line (pt 216 416)(pt 200 416)(line_width 1)) + ) + (port + (pt 216 432) + (output) + (text "d_b" (rect 0 0 17 12)(font "Arial" )) + (text "d_b" (rect 178 427 195 439)(font "Arial" )) + (line (pt 216 432)(pt 200 432)(line_width 1)) + ) + (port + (pt 216 448) + (output) + (text "d_hsync_state[0..6]" (rect 0 0 99 12)(font "Arial" )) + (text "d_hsync_state[0..6]" (rect 96 443 195 455)(font "Arial" )) + (line (pt 216 448)(pt 200 448)(line_width 3)) + ) + (port + (pt 216 464) + (output) + (text "d_vsync_state[0..6]" (rect 0 0 100 12)(font "Arial" )) + (text "d_vsync_state[0..6]" (rect 95 459 195 471)(font "Arial" )) + (line (pt 216 464)(pt 200 464)(line_width 3)) + ) + (port + (pt 216 480) + (output) + (text "d_state_clk" (rect 0 0 56 12)(font "Arial" )) + (text "d_state_clk" (rect 139 475 195 487)(font "Arial" )) + (line (pt 216 480)(pt 200 480)(line_width 1)) + ) + (port + (pt 216 496) + (output) + (text "d_toggle" (rect 0 0 41 12)(font "Arial" )) + (text "d_toggle" (rect 154 491 195 503)(font "Arial" )) + (line (pt 216 496)(pt 200 496)(line_width 1)) + ) + (port + (pt 216 512) + (output) + (text "d_toggle_counter[24..0]" (rect 0 0 115 12)(font "Arial" )) + (text "d_toggle_counter[24..0]" (rect 80 507 195 519)(font "Arial" )) + (line (pt 216 512)(pt 200 512)(line_width 3)) + ) + (drawing + (rectangle (rect 16 16 200 528)(line_width 1)) + ) +) +(symbol + (rect 416 56 512 152) + (text "vpll" (rect 5 0 22 12)(font "Arial" )) + (text "inst1" (rect 8 80 31 92)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "inclk0" (rect 0 0 28 12)(font "Arial" )) + (text "inclk0" (rect 21 27 49 39)(font "Arial" )) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 96 32) + (output) + (text "c0" (rect 0 0 11 12)(font "Arial" )) + (text "c0" (rect 64 27 75 39)(font "Arial" )) + (line (pt 96 32)(pt 80 32)(line_width 1)) + ) + (drawing + (rectangle (rect 16 16 80 80)(line_width 1)) + ) +) +(connector + (pt 512 88) + (pt 712 88) +) diff --git a/bsp2/Angabe/vga_pll.tcl b/bsp2/Angabe/vga_pll.tcl new file mode 100755 index 0000000..c260434 --- /dev/null +++ b/bsp2/Angabe/vga_pll.tcl @@ -0,0 +1,184 @@ +# 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. + +# Quartus II: Generate Tcl File for Project +# File: vga_pll.tcl +# Generated on: Fri Sep 29 09:31:24 2006 + +# Load Quartus II Tcl Project package +package require ::quartus::project +package require ::quartus::flow + +set need_to_close_project 0 +set make_assignments 1 + +# Check that the right project is open +if {[is_project_open]} { + if {[string compare $quartus(project) "vga_pll"]} { + puts "Project vga_pll is not open" + set make_assignments 0 + } +} else { + # Only open if not already open + if {[project_exists vga_pll]} { + project_open -cmp vga_pll vga_pll + } else { + project_new -cmp vga_pll vga_pll + } + set need_to_close_project 1 +} + +# Make assignments +if {$make_assignments} { + catch { set_global_assignment -name FAMILY Stratix } result + catch { set_global_assignment -name DEVICE EP1S25F672C6 } result + catch { set_global_assignment -name ORIGINAL_QUARTUS_VERSION 6.0 } result + catch { set_global_assignment -name PROJECT_CREATION_TIME_DATE "09:04:10 SEPTEMBER 29, 2006" } result + catch { set_global_assignment -name LAST_QUARTUS_VERSION 6.0 } result + catch { set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "Synplify Pro" } result + catch { set_global_assignment -name EDA_LMF_FILE synplcty.lmf -section_id eda_design_synthesis } result + catch { set_global_assignment -name EDA_INPUT_DATA_FORMAT VQM -section_id eda_design_synthesis } result + catch { set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (Verilog)" } result + catch { set_global_assignment -name EDA_TIME_SCALE "1 ps" -section_id eda_simulation } result + catch { set_global_assignment -name EDA_OUTPUT_DATA_FORMAT VERILOG -section_id eda_simulation } result + catch { set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA } result + catch { set_global_assignment -name DEVICE_FILTER_PIN_COUNT 672 } result + catch { set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 6 } result + catch { set_global_assignment -name BSF_FILE ../../src/vpll.bsf } result + catch { set_global_assignment -name VHDL_FILE ../../src/vpll.vhd } result + catch { set_global_assignment -name BDF_FILE ../../src/vga_pll.bdf } result + catch { set_global_assignment -name VQM_FILE ../../syn/rev_1/vga.vqm } result + + set_location_assignment PIN_E24 -to b0_pin + set_location_assignment PIN_T6 -to b1_pin + set_location_assignment PIN_N3 -to board_clk + set_location_assignment PIN_E23 -to g0_pin + set_location_assignment PIN_T5 -to g1_pin + set_location_assignment PIN_T24 -to g2_pin + set_location_assignment PIN_F1 -to hsync_pin + set_location_assignment PIN_E22 -to r0_pin + set_location_assignment PIN_T4 -to r1_pin + set_location_assignment PIN_T7 -to r2_pin + set_location_assignment PIN_A5 -to reset + set_location_assignment PIN_F2 -to vsync_pin + set_location_assignment PIN_Y5 -to d_hsync_state[0] + set_location_assignment PIN_F19 -to d_hsync_state[1] + set_location_assignment PIN_F17 -to d_hsync_state[2] + set_location_assignment PIN_Y2 -to d_hsync_state[3] + set_location_assignment PIN_F10 -to d_hsync_state[4] + set_location_assignment PIN_F9 -to d_hsync_state[5] + set_location_assignment PIN_F6 -to d_hsync_state[6] + set_location_assignment PIN_H4 -to d_hsync_counter[0] + set_location_assignment PIN_G25 -to d_hsync_counter[7] + set_location_assignment PIN_G22 -to d_hsync_counter[8] + set_location_assignment PIN_G18 -to d_hsync_counter[9] + set_location_assignment PIN_F5 -to d_vsync_state[0] + set_location_assignment PIN_F4 -to d_vsync_state[1] + set_location_assignment PIN_F3 -to d_vsync_state[2] + set_location_assignment PIN_M19 -to d_vsync_state[3] + set_location_assignment PIN_M18 -to d_vsync_state[4] + set_location_assignment PIN_M7 -to d_vsync_state[5] + set_location_assignment PIN_M4 -to d_vsync_state[6] + set_location_assignment PIN_G9 -to d_vsync_counter[0] + set_location_assignment PIN_G6 -to d_vsync_counter[7] + set_location_assignment PIN_G4 -to d_vsync_counter[8] + set_location_assignment PIN_G2 -to d_vsync_counter[9] + set_location_assignment PIN_K6 -to d_line_counter[0] + set_location_assignment PIN_K4 -to d_line_counter[1] + set_location_assignment PIN_J22 -to d_line_counter[2] + set_location_assignment PIN_M9 -to d_line_counter[3] + set_location_assignment PIN_M8 -to d_line_counter[4] + set_location_assignment PIN_M6 -to d_line_counter[5] + set_location_assignment PIN_M5 -to d_line_counter[6] + set_location_assignment PIN_L24 -to d_line_counter[7] + set_location_assignment PIN_L25 -to d_line_counter[8] + set_location_assignment PIN_L23 -to d_column_counter[0] + set_location_assignment PIN_L22 -to d_column_counter[1] + set_location_assignment PIN_L21 -to d_column_counter[2] + set_location_assignment PIN_L20 -to d_column_counter[3] + set_location_assignment PIN_L6 -to d_column_counter[4] + set_location_assignment PIN_L4 -to d_column_counter[5] + set_location_assignment PIN_L2 -to d_column_counter[6] + set_location_assignment PIN_K23 -to d_column_counter[7] + set_location_assignment PIN_K19 -to d_column_counter[8] + set_location_assignment PIN_K5 -to d_column_counter[9] + set_location_assignment PIN_L7 -to d_hsync + set_location_assignment PIN_L5 -to d_vsync + set_location_assignment PIN_F26 -to d_set_hsync_counter + set_location_assignment PIN_F24 -to d_set_vsync_counter + set_location_assignment PIN_F21 -to d_set_line_counter + set_location_assignment PIN_Y23 -to d_set_column_counter + set_location_assignment PIN_L3 -to d_r + set_location_assignment PIN_K24 -to d_g + set_location_assignment PIN_K20 -to d_b + set_location_assignment PIN_H18 -to d_v_enable + set_location_assignment PIN_J21 -to d_h_enable + set_location_assignment PIN_R8 -to seven_seg_pin[0] + set_location_assignment PIN_R9 -to seven_seg_pin[1] + set_location_assignment PIN_R19 -to seven_seg_pin[2] + set_location_assignment PIN_R20 -to seven_seg_pin[3] + set_location_assignment PIN_R21 -to seven_seg_pin[4] + set_location_assignment PIN_R22 -to seven_seg_pin[5] + set_location_assignment PIN_R23 -to seven_seg_pin[6] + set_location_assignment PIN_Y11 -to seven_seg_pin[7] + set_location_assignment PIN_N7 -to seven_seg_pin[8] + set_location_assignment PIN_N8 -to seven_seg_pin[9] + set_location_assignment PIN_R4 -to seven_seg_pin[10] + set_location_assignment PIN_R6 -to seven_seg_pin[11] + set_location_assignment PIN_AA11 -to seven_seg_pin[12] + set_location_assignment PIN_T2 -to seven_seg_pin[13] + set_location_assignment PIN_K3 -to d_state_clk + set_location_assignment PIN_H3 -to d_toggle + set_location_assignment PIN_H26 -to d_toggle_counter[0] + set_location_assignment PIN_G24 -to d_toggle_counter[15] + set_location_assignment PIN_G23 -to d_toggle_counter[16] + set_location_assignment PIN_G21 -to d_toggle_counter[17] + set_location_assignment PIN_G20 -to d_toggle_counter[18] + set_location_assignment PIN_G5 -to d_toggle_counter[19] + set_location_assignment PIN_G3 -to d_toggle_counter[20] + set_location_assignment PIN_G1 -to d_toggle_counter[21] + set_location_assignment PIN_F25 -to d_toggle_counter[22] + set_location_assignment PIN_F23 -to d_toggle_counter[23] + set_location_assignment PIN_T19 -to d_toggle_counter[24] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_column_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[1] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[2] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[3] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[4] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[5] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[6] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_state + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_line_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[1] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[2] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[3] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[4] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[5] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[6] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_state + set_instance_assignment -name SLOW_SLEW_RATE ON -to seven_seg_pin + + + # Commit assignments + export_assignments + +execute_flow -compile + + # Close project + if {$need_to_close_project} { + project_close + } +} diff --git a/bsp2/Angabe/vga_pos_tb.vhd b/bsp2/Angabe/vga_pos_tb.vhd new file mode 100644 index 0000000..ebcff70 --- /dev/null +++ b/bsp2/Angabe/vga_pos_tb.vhd @@ -0,0 +1,198 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-09-29 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_pos_tb is + +end vga_pos_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture structure of vga_pos_tb is + + constant cc : time := 39.7 ns; -- test clock period + + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out std_logic_vector(0 to 6); + d_vsync_state : out std_logic_vector(0 to 6); + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0)); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : std_logic_vector(0 to 6); + signal d_vsync_state : std_logic_vector(0 to 6); + signal d_state_clk : std_logic; + signal d_toggle : std_logic; + signal d_toggle_counter : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + signal clk : std_logic; + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk, + d_toggle => d_toggle, + d_toggle_counter => d_toggle_counter); + + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk <= '1'; + wait for cc/2; + clk <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk = '1' and clk'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(1000000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + + clk_pin <= clk; + +end structure; + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_pos of vga_pos_tb is + for structure + for vga_unit : vga use entity work.vga(structure); + end for; + end for; +end vga_conf_pos; + + + diff --git a/bsp2/Angabe/vga_pre_tb.vhd b/bsp2/Angabe/vga_pre_tb.vhd new file mode 100644 index 0000000..dc010f7 --- /dev/null +++ b/bsp2/Angabe/vga_pre_tb.vhd @@ -0,0 +1,197 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-09-29 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_pre_tb is + +end vga_pre_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture structure of vga_pre_tb is + + constant cc : time := 39.7 ns; -- test clock period + + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out std_logic_vector(0 to 6); + d_vsync_state : out std_logic_vector(0 to 6); + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0)); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : std_logic_vector(0 to 6); + signal d_vsync_state : std_logic_vector(0 to 6); + signal d_state_clk : std_logic; + signal d_toggle : std_logic; + signal d_toggle_counter : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + signal clk : std_logic; + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk, + d_toggle => d_toggle, + d_toggle_counter => d_toggle_counter); + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk <= '1'; + wait for cc/2; + clk <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk = '1' and clk'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(10000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + + clk_pin <= clk; + +end structure; + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_pre of vga_pre_tb is + for structure + for vga_unit : vga use entity work.vga(beh); + end for; + end for; +end vga_conf_pre; + + + diff --git a/bsp2/Angabe/vpll.bsf b/bsp2/Angabe/vpll.bsf new file mode 100644 index 0000000..63c3118 --- /dev/null +++ b/bsp2/Angabe/vpll.bsf @@ -0,0 +1,49 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2004 Altera Corporation +Any megafunction design, and related netlist (encrypted or decrypted), +support information, device programming or simulation file, and any other +associated documentation or information provided by Altera or a partner +under Altera's Megafunction Partnership Program may be used only +to program PLD devices (but not masked PLD devices) from Altera. Any +other use of such megafunction design, netlist, support information, +device programming or simulation file, or any other related documentation +or information is prohibited for any other purpose, including, but not +limited to modification, reverse engineering, de-compiling, or use with +any other silicon devices, unless such use is explicitly licensed under +a separate agreement with Altera or a megafunction partner. Title to the +intellectual property, including patents, copyrights, trademarks, trade +secrets, or maskworks, embodied in any such megafunction design, netlist, +support information, device programming or simulation file, or any other +related documentation or information provided by Altera or a megafunction +partner, remains with Altera, the megafunction partner, or their respective +licensors. No other licenses, including any licenses needed under any third +party's intellectual property, are provided herein. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 16 16 112 112) + (text "vpll" (rect 5 0 22 12)(font "Arial" )) + (text "inst" (rect 8 80 25 92)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "inclk0" (rect 0 0 28 12)(font "Arial" )) + (text "inclk0" (rect 21 27 49 39)(font "Arial" )) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 96 32) + (output) + (text "c0" (rect 0 0 11 12)(font "Arial" )) + (text "c0" (rect 64 27 75 39)(font "Arial" )) + (line (pt 96 32)(pt 80 32)(line_width 1)) + ) + (drawing + (rectangle (rect 16 16 80 80)(line_width 1)) + ) +) diff --git a/bsp2/Angabe/vpll.vhd b/bsp2/Angabe/vpll.vhd new file mode 100644 index 0000000..dbb347f --- /dev/null +++ b/bsp2/Angabe/vpll.vhd @@ -0,0 +1,274 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: vpll.vhd +-- Megafunction Name(s): +-- altpll +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 4.1 Build 181 06/29/2004 SJ Full Version +-- ************************************************************ + + +--Copyright (C) 1991-2004 Altera Corporation +--Any megafunction design, and related netlist (encrypted or decrypted), +--support information, device programming or simulation file, and any other +--associated documentation or information provided by Altera or a partner +--under Altera's Megafunction Partnership Program may be used only +--to program PLD devices (but not masked PLD devices) from Altera. Any +--other use of such megafunction design, netlist, support information, +--device programming or simulation file, or any other related documentation +--or information is prohibited for any other purpose, including, but not +--limited to modification, reverse engineering, de-compiling, or use with +--any other silicon devices, unless such use is explicitly licensed under +--a separate agreement with Altera or a megafunction partner. Title to the +--intellectual property, including patents, copyrights, trademarks, trade +--secrets, or maskworks, embodied in any such megafunction design, netlist, +--support information, device programming or simulation file, or any other +--related documentation or information provided by Altera or a megafunction +--partner, remains with Altera, the megafunction partner, or their respective +--licensors. No other licenses, including any licenses needed under any third +--party's intellectual property, are provided herein. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.altera_mf_components.all; + +ENTITY vpll IS + PORT + ( + inclk0 : IN STD_LOGIC := '0'; +-- pllena : IN STD_LOGIC := '1'; +-- areset : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC +-- locked : OUT STD_LOGIC + ); +END vpll; + + +ARCHITECTURE SYN OF vpll IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_VECTOR (5 DOWNTO 0); + SIGNAL sub_wire5_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC ; + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (3 DOWNTO 0); + +signal pllena_int : std_logic; +signal areset_int : std_logic; +signal locked : std_logic; + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_duty_cycle : NATURAL; + lpm_type : STRING; + clk0_multiply_by : NATURAL; + invalid_lock_multiplier : NATURAL; + inclk0_input_frequency : NATURAL; + gate_lock_signal : STRING; + clk0_divide_by : NATURAL; + pll_type : STRING; + valid_lock_multiplier : NATURAL; + clk0_time_delay : STRING; + spread_frequency : NATURAL; + intended_device_family : STRING; + operation_mode : STRING; + compensate_clock : STRING; + clk0_phase_shift : STRING + ); + PORT ( + clkena : IN STD_LOGIC_VECTOR (5 DOWNTO 0); + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + pllena : IN STD_LOGIC ; + extclkena : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + locked : OUT STD_LOGIC ; + areset : IN STD_LOGIC ; + clk : OUT STD_LOGIC_VECTOR (5 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire3_bv(0 DOWNTO 0) <= "0"; + sub_wire3 <= To_stdlogicvector(sub_wire3_bv); + sub_wire5_bv(0 DOWNTO 0) <= "0"; + sub_wire5 <= NOT(To_stdlogicvector(sub_wire5_bv)); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + locked <= sub_wire2; + sub_wire4 <= sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire5(0 DOWNTO 0); + sub_wire6 <= inclk0; + sub_wire7 <= sub_wire3(0 DOWNTO 0) & sub_wire6; + sub_wire8 <= sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0); + +areset_int <= '0'; +pllena_int <= '1'; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_duty_cycle => 50, + lpm_type => "altpll", + clk0_multiply_by => 5435, + invalid_lock_multiplier => 5, + inclk0_input_frequency => 30003, + gate_lock_signal => "NO", + clk0_divide_by => 6666, + pll_type => "AUTO", + valid_lock_multiplier => 1, + clk0_time_delay => "0", + spread_frequency => 0, + intended_device_family => "Stratix", + operation_mode => "NORMAL", + compensate_clock => "CLK0", + clk0_phase_shift => "0" + ) + PORT MAP ( + clkena => sub_wire4, + inclk => sub_wire7, + pllena => pllena_int, + extclkena => sub_wire8, + areset => areset_int, + clk => sub_wire0, + locked => sub_wire2 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" +-- Retrieval info: PRIVATE: TIME_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "6" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "33.330" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "299.970" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "33.330" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "27.175" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: DEV_FAMILY STRING "Stratix" +-- Retrieval info: PRIVATE: LOCK_LOSS_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: DEVICE_FAMILY NUMERIC "9" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "5435" +-- Retrieval info: CONSTANT: INVALID_LOCK_MULTIPLIER NUMERIC "5" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "30003" +-- Retrieval info: CONSTANT: GATE_LOCK_SIGNAL STRING "NO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "6666" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: VALID_LOCK_MULTIPLIER NUMERIC "1" +-- Retrieval info: CONSTANT: CLK0_TIME_DELAY STRING "0" +-- Retrieval info: CONSTANT: SPREAD_FREQUENCY NUMERIC "0" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Stratix" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT VCC "c0" +-- Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT VCC "@clk[5..0]" +-- 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: USED_PORT: pllena 0 0 0 0 INPUT VCC "pllena" +-- 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: areset 0 0 0 0 INPUT GND "areset" +-- 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: @extclkena 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 4 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: @pllena 0 0 0 0 pllena 0 0 0 0 +-- Retrieval info: CONNECT: @extclkena 0 0 1 2 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 5 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 2 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 0 VCC 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @extclkena 0 0 1 3 GND 0 0 0 0 +-- Retrieval info: CONNECT: @extclkena 0 0 1 0 GND 0 0 0 0 +-- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 3 GND 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.vhd TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.inc FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.cmp TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.bsf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll_inst.vhd TRUE FALSE diff --git a/bsp2/Protokolle/DigitalDesign_prot.sty b/bsp2/Protokolle/DigitalDesign_prot.sty new file mode 100644 index 0000000..6cb3c1c --- /dev/null +++ b/bsp2/Protokolle/DigitalDesign_prot.sty @@ -0,0 +1,225 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DigitalDesign_app.sty +% +% Babak Rahbaran +% (rahbaran@ecs.tuwien.ac.at) +% +% 14.07.03 +% +% Institut f"ur Technische Informatik (182/2) +% ECS Group +% Technische Universit"at Wien +% 1040 Treitlstr. 3, 2. Stk. +% (www.ecs.tuwien.ac.at) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% packages +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage{fancyheadings} +\usepackage{german} +\usepackage{graphicx} +\usepackage[latin1]{inputenc} %------- Umlaute im Text + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% user-defined commands +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% typeset pin numbers +\newcommand{\pin}[1]{\emph{\textbf{#1}}\ } +\renewcommand{\chaptername}{Aufgabe} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% some size definitions and counter settings +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\oddsidemargin 1cm +\evensidemargin 1cm +\topmargin 0pt +\headsep 50pt +\textheight 21.5cm +\textwidth 14.1cm + +\renewcommand{\floatpagefraction}{0.9} +\renewcommand{\textfraction}{0.05} +\renewcommand{\topfraction}{1.0} +\renewcommand{\bottomfraction}{1.0} + +\setcounter{totalnumber}{3} +\setcounter{bottomnumber}{3} +\setcounter{topnumber}{3} + +\setlength{\unitlength}{1mm} +\setlength{\parindent}{6mm} +\setlength{\parskip}{12pt plus2pt minus2pt} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% define variables used on titlepage +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% heading +\def\headline#1{\gdef\@headline{#1}} +% group number +\def\groupnr#1{\gdef\@groupnr{#1}} +% authors +\def\vornamea#1{\gdef\@vornamea{#1}} +\def\nachnamea#1{\gdef\@nachnamea{#1}} +\def\matrikela#1{\gdef\@matrikela{#1}} +\def\emaila#1{\gdef\@emaila{#1}} + +\def\vornameb#1{\gdef\@vornameb{#1}} +\def\nachnameb#1{\gdef\@nachnameb{#1}} +\def\matrikelb#1{\gdef\@matrikelb{#1}} +\def\emailb#1{\gdef\@emailb{#1}} + +\def\vornamec#1{\gdef\@vornamec{#1}} +\def\nachnamec#1{\gdef\@nachnamec{#1}} +\def\matrikelc#1{\gdef\@matrikelc{#1}} +\def\emailc#1{\gdef\@emailc{#1}} + +%\def\vornamed#1{\gdef\@vornamed{#1}} +%\def\nachnamed#1{\gdef\@nachnamed{#1}} +%\def\matrikeld#1{\gdef\@matrikeld{#1}} +%\def\emaild#1{\gdef\@emaild{#1}} + +% address of department +\def\address#1{\gdef\@address{#1}} +% LVA-Nr. +\def\lvanr#1{\gdef\@aufgabe{#1}} + +\setcounter{footnote}{0} + +% initialize variables +\gdef\@headline{Digital Design LU} +\gdef\@title{P r o t o k o l l} + +\gdef\@groupnr{00} + +\gdef\@vornamea{Vorname1} +\gdef\@nachnamea{Nachname1} +\gdef\@matrikela{0000000} +\gdef\@emaila{a@æstudent.tuwien.ac.at} + +\gdef\@vornameb{Vorname2} +\gdef\@nachnameb{Nachname2} +\gdef\@matrikelb{0000000} +\gdef\@emailb{b@æstudent.tuwien.ac.at} + +\gdef\@vornamec{Vorname3} +\gdef\@nachnamec{Nachname3} +\gdef\@matrikelc{0000000} +\gdef\@emailc{c@student.tuwien.ac.at} + +%\gdef\@vornamed{Vorname4} +%\gdef\@nachnamed{Nachname4} +%\gdef\@matrikeld{0000000} +%\gdef\@emaild{d@student.tuwien.ac.at} + +\gdef\@aufgabe{zu Aufgabe 1} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% titlepage +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\maketitle{ +\begin{titlepage} + +% enlarge page +\setlength{\topmargin}{0pt} +\setlength{\headheight}{0pt} +\setlength{\headsep}{0pt} +\setlength{\footskip}{0pt} + +\let\footnotesize\small \let\footnoterule\relax \setcounter{page}{1} +\null +\vfill +\large +\vskip -4 cm + +\begin{center} +% heading +{\LARGE\bf \@headline \par} \vskip 2cm + +\vskip 1cm + +% title +{\Huge\bf\underline \@title \par} +\vskip 1cm +%{\Large \bf \@aufgabe \par} +\vskip 4cm + +\begin{flushright} +Gruppe \@groupnr \par +% authors +\@vornamea \ \@nachnamea, Matr. Nr. \@matrikela \par +{\small \@emaila \par} +\@vornameb \ \@nachnameb, Matr. Nr. \@matrikelb \par +{\small \@emailb \par} +\@vornamec \ \@nachnamec, Matr. Nr. \@matrikelc \par +{\small \@emailc \par} +%\@vornamed \ \@nachnamed, Matr. Nr. \@matrikeld \par +%{\small \@emaild \par} + +%\@authora \par +%\@authorb \par +%\@authorc \par +%\@authord \par +\vskip 1cm +Wien, am~\today{} +\end{flushright} +\end{center} \par +\vskip 1.5cm + +\end{titlepage} + +\setcounter{footnote}{0} +\let\thanks\relax +} % \def\maketitle + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newenvironment{Ventry}[1]% +{\begin{list}{}{\renewcommand{\makelabel}[1]{\textbf{##1:}\hfill}% +\settowidth{\labelwidth}{\textbf{#1:}}% +\setlength{\leftmargin}{\labelwidth}% +\addtolength{\leftmargin}{\labelsep}}}% +{\end{list}} + +\newcommand{\tablesize}{\fontsize{8}{10}\selectfont} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% layout of non-title pages +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\pagenumbering{roman} +\setlength{\parskip}{5pt plus2pt minus2pt} + +\setlength{\parskip}{1mm} +\clearpage +\setlength{\parskip}{5pt plus2pt minus2pt} + +\pagestyle{fancy} +\renewcommand{\chaptermark}[1]{\markboth{\thechapter\ #1}{}} +\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}{}} +\addtolength{\headheight}{2pt} + +\pagenumbering{arabic} +\setcounter{page} {1} diff --git a/bsp2/Protokolle/DigitalDesign_prot.tex b/bsp2/Protokolle/DigitalDesign_prot.tex new file mode 100644 index 0000000..acbdaed --- /dev/null +++ b/bsp2/Protokolle/DigitalDesign_prot.tex @@ -0,0 +1,36 @@ + +\documentclass[12pt,a4paper,titlepage,oneside]{report} + + +\usepackage{DigitalDesign_prot} +\sloppy + + +\begin{document} +% create titlepage +\maketitle + +% tables and lists +%\tableofcontents +%\newpage +%\listoffigures +%\newpage +%\listoftables +%\newpage + +% chapters +\input{chapter1} +\input{chapter2} +\input{chapter3} +\input{chapter4} + +% appendices +%\appendix +%\input{app1} + +% bibliography +%\bibliographystyle{alpha} +%\nocite{*} +%\bibliography{DigitalDesign} + +\end{document} diff --git a/bsp2/Protokolle/chapter1.tex b/bsp2/Protokolle/chapter1.tex new file mode 100644 index 0000000..27f796e --- /dev/null +++ b/bsp2/Protokolle/chapter1.tex @@ -0,0 +1,10 @@ +\chapter{Logikanalysator} + + +\begin{itemize} +\item Frequenz HSYNC = Hz +\item Frequenz VSYNC = Hz +\item Farbe Pixel = (r,g,b) +\item Farbe Hintergrund = (r,g,b) +\item x-Koordinate = +\end{itemize} diff --git a/bsp2/Protokolle/chapter2.tex b/bsp2/Protokolle/chapter2.tex new file mode 100644 index 0000000..a8ddc1a --- /dev/null +++ b/bsp2/Protokolle/chapter2.tex @@ -0,0 +1,6 @@ +\chapter{Design-Flow} + +\begin{itemize} +\item Blinkfrequenz = Hz +\end{itemize} + diff --git a/bsp2/Protokolle/chapter3.tex b/bsp2/Protokolle/chapter3.tex new file mode 100644 index 0000000..c6bbec2 --- /dev/null +++ b/bsp2/Protokolle/chapter3.tex @@ -0,0 +1 @@ +\chapter{VHDL} diff --git a/bsp2/Protokolle/chapter4.tex b/bsp2/Protokolle/chapter4.tex new file mode 100644 index 0000000..4b1b7cc --- /dev/null +++ b/bsp2/Protokolle/chapter4.tex @@ -0,0 +1,13 @@ +\chapter{Simulation und Test} + +\begin{itemize} +\item File Syntaxfehler: +\item Zeilennummer Syntaxfehler: + +\item File Semantikfehler 1: +\item Zeilennummer Semantikfehler 1: + +\item File Semantikfehler 2: +\item Zeilennummer Semantikfehler 2: +\end{itemize} + diff --git a/bsp2/Protokolle/prot_1.txt b/bsp2/Protokolle/prot_1.txt new file mode 100644 index 0000000..91a8a82 --- /dev/null +++ b/bsp2/Protokolle/prot_1.txt @@ -0,0 +1,6 @@ + +Frequenz HSYNC = ___ ___ Hz +Frequenz VSYNC = ___ ___ Hz +Farbe Pixel = (r,g,b) +Farbe Hintergrund = (r,g,b) +x-Koordinate = ___ ___ diff --git a/bsp2/Protokolle/prot_2.txt b/bsp2/Protokolle/prot_2.txt new file mode 100644 index 0000000..da24c18 --- /dev/null +++ b/bsp2/Protokolle/prot_2.txt @@ -0,0 +1 @@ +blinker_max = ___ ___ diff --git a/bsp2/Protokolle/prot_4.txt b/bsp2/Protokolle/prot_4.txt new file mode 100644 index 0000000..d45603d --- /dev/null +++ b/bsp2/Protokolle/prot_4.txt @@ -0,0 +1,9 @@ +File Syntaxfehler: ___ ___ +Zeilennummer Syntaxfehler: ___ ___ + +File Semantikfehler 1: ___ ___ +Zeilennummer Semantikfehler 1: ___ ___ + +File Semantikfehler 2: ___ ___ +Zeilennummer Semantikfehler 2: ___ ___ + diff --git a/bsp3/Angabe/board_driver_arc.vhd b/bsp3/Angabe/board_driver_arc.vhd new file mode 100644 index 0000000..7636a37 --- /dev/null +++ b/bsp3/Angabe/board_driver_arc.vhd @@ -0,0 +1,102 @@ +------------------------------------------------------------------------------- +-- Title : board_driver architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : board_driver.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: display number on 7-segment display +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + + +architecture behav of board_driver is + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + + signal display_value : std_logic_vector(2*BCD_WIDTH-1 downto 0); + signal ten_value : std_logic_vector(BCD_WIDTH-1 downto 0); + signal one_value : std_logic_vector(BCD_WIDTH-1 downto 0); + signal digit_left : std_logic_vector(SEG_WIDTH-1 downto 0); + signal digit_right : std_logic_vector(SEG_WIDTH-1 downto 0); + +begin + + ----------------------------------------------------------------------------- + -- generate control data + ----------------------------------------------------------------------------- + + + display_value <= "00000001"; -- vector of two BCD coded numbers to be displayed + one_value <= display_value(BCD_WIDTH-1 downto 0); -- BCD number to be displayed in right digit + ten_value <= display_value(2*BCD_WIDTH-1 downto BCD_WIDTH); -- BCD number to be displayed in left digit + + + SEG_DATA: process(reset, one_value, ten_value) + begin + if (reset = RES_ACT) then -- upon reset + digit_left <= DIGIT_OFF; -- ... switch off display + digit_right <= DIGIT_OFF; + else -- during operation + case one_value is -- ...display "one" position according + when "0000" => digit_right <= DIGIT_ZERO; -- ...to translation table + when "0001" => digit_right <= DIGIT_ONE; + when "0010" => digit_right <= DIGIT_TWO; + when "0011" => digit_right <= DIGIT_THREE; + when "0100" => digit_right <= DIGIT_FOUR; + when "0101" => digit_right <= DIGIT_FIVE; + when "0110" => digit_right <= DIGIT_SIX; + when "0111" => digit_right <= DIGIT_SEVEN; + when "1000" => digit_right <= DIGIT_EIGHT; + when "1001" => digit_right <= DIGIT_NINE; + when others => digit_right <= DIGIT_F; -- use "F" as overflow + end case; + + case ten_value is -- same for "ten" position + when "0000" => digit_left <= DIGIT_ZERO; + when "0001" => digit_left <= DIGIT_ONE; + when "0010" => digit_left <= DIGIT_TWO; + when "0011" => digit_left <= DIGIT_THREE; + when "0100" => digit_left <= DIGIT_FOUR; + when "0101" => digit_left <= DIGIT_FIVE; + when "0110" => digit_left <= DIGIT_SIX; + when "0111" => digit_left <= DIGIT_SEVEN; + when "1000" => digit_left <= DIGIT_EIGHT; + when "1001" => digit_left <= DIGIT_NINE; + when others => digit_left <= DIGIT_F; + end case; + end if; + end process; + + +-- combine the two digits to one bus + seven_seg(SEG_WIDTH-1 downto 0) <= digit_right; + seven_seg(2*SEG_WIDTH-1 downto SEG_WIDTH) <= digit_left; + +end behav; diff --git a/bsp3/Angabe/board_driver_ent.vhd b/bsp3/Angabe/board_driver_ent.vhd new file mode 100644 index 0000000..17e5cf7 --- /dev/null +++ b/bsp3/Angabe/board_driver_ent.vhd @@ -0,0 +1,42 @@ +------------------------------------------------------------------------------- +-- Title : board_driver entity +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : board_driver_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: display number on 7-segment display +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + +entity board_driver is + + port ( + reset : in std_logic; + seven_seg : out std_logic_vector(2*SEG_WIDTH-1 downto 0) + ); +end board_driver; diff --git a/bsp3/Angabe/dide_16_3.txt b/bsp3/Angabe/dide_16_3.txt new file mode 100644 index 0000000..8af1bbb --- /dev/null +++ b/bsp3/Angabe/dide_16_3.txt @@ -0,0 +1,4 @@ +Anzahl der Streifen: 3 +Breite Streifen 1: 67 Pixel Farbe: (r,g,b) = (0,0,1) +Breite Streifen 2: 65 Pixel Farbe: (r,g,b) = (0,1,1) +Breite Streifen 3: 136 Pixel Farbe: (r,g,b) = (1,0,1) diff --git a/bsp3/Angabe/vga_arc.vhd b/bsp3/Angabe/vga_arc.vhd new file mode 100755 index 0000000..1723f58 --- /dev/null +++ b/bsp3/Angabe/vga_arc.vhd @@ -0,0 +1,219 @@ + ------------------------------------------------------------------------------- +-- Title : vga architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: arch of top level module, the sub-modules are connected here +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; -- include package + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + +architecture behav of vga is + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + +------------------------------------------------------------------------------- +-- component declarations for the modules +------------------------------------------------------------------------------- + + component vga_driver + port ( + clk : in std_logic; + reset : in std_logic; + column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + h_enable : out std_logic; + v_enable : out std_logic; + hsync : out std_logic; + vsync : out std_logic; + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter : out std_logic; + d_set_vsync_counter : out std_logic; + d_set_column_counter : out std_logic; + d_set_line_counter : out std_logic); + end component; + + + component vga_control + port ( + clk : in std_logic; + reset : in std_logic; + column_counter : in std_logic_vector(COL_CNT_WIDTH-1 downto 0); + line_counter : in std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + h_enable : in std_logic; + v_enable : in std_logic; + r, g, b : out std_logic + ); + end component; + + + component board_driver + port ( + reset : in std_logic; + seven_seg : out std_logic_vector(2*SEG_WIDTH-1 downto 0)); + end component; + + +-- declare signals needed for internal wiring of these components later + signal column_counter_sig : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal line_counter_sig : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal h_enable_sig : std_logic; + signal v_enable_sig : std_logic; + signal r_sig, g_sig, b_sig : std_logic; + signal hsync_sig, vsync_sig : std_logic; + +-- declare signals needed for prolongation of reset + signal dly_counter : std_logic_vector(1 downto 0); + signal dly_counter_next : std_logic_vector(1 downto 0); + constant MAX_DLY : std_logic_vector(1 downto 0) := "11"; + signal reset_dly : std_logic; -- + signal safe_reset : std_logic; + + +------------------------------------------------------------------------------- +-- prolong duration of reset to prevent glitches at power-up +------------------------------------------------------------------------------- + +begin + + DELAY_RESET_syn : process(clk_pin) -- synchronous capture + begin + if clk_pin'event and clk_pin = '1' then -- upon rising clock + dly_counter <= dly_counter_next; -- ... capture new counter value + end if; + end process; + + DELAY_RESET_next : process(dly_counter, reset_pin) -- next state logic + begin + if reset_pin = RES_ACT then -- upon reset + dly_counter_next <= (others => '0'); -- ...clear dly counter + elsif dly_counter < MAX_DLY then -- if no oflo + dly_counter_next <= dly_counter + '1'; -- ...increment dly counter + else + dly_counter_next <= dly_counter; -- freeze dly counter when oflo + end if; + end process; + + DELAY_RESET_out: process(dly_counter) + begin + if dly_counter < MAX_DLY then -- until dly counter reaches maximum + reset_dly <= RES_ACT; -- ...activate delayed reset signal + else -- upon counter oflo + reset_dly <= not(RES_ACT); -- ...finally deactivate delayed reset + end if; + end process; + + + + COMBINE_RESET: process(reset_pin, reset_dly) -- generate "safe" reset signal + begin + if reset_pin = RES_ACT or reset_dly = RES_ACT then -- ...by combining delayed reset with non-delayed reset input + safe_reset <= RES_ACT; + else + safe_reset <= not(RES_ACT); + end if; + end process; + + +------------------------------------------------------------------------------- +-- instantiate the components and connect to internal and external signals +------------------------------------------------------------------------------- + + +board_driver_unit : board_driver + port map ( + reset => safe_reset, + seven_seg => seven_seg_pin); + + +vga_driver_unit : vga_driver + port map ( + clk => clk_pin, + reset => safe_reset, + column_counter => column_counter_sig, + line_counter => line_counter_sig, + h_enable => h_enable_sig, + v_enable => v_enable_sig, + hsync => hsync_sig, + vsync => vsync_sig, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter); + +-- make the wiring for hsync and vsync pins +-- (pin is output only => internal _sig version required to allow readback of signal) + vsync_pin <= vsync_sig; + hsync_pin <= hsync_sig; + + + vga_control_unit : vga_control + port map ( + clk => clk_pin, + reset => safe_reset, + column_counter => column_counter_sig, + line_counter => line_counter_sig, + h_enable => h_enable_sig, + v_enable => v_enable_sig, + r => r_sig, + g => g_sig, + b => b_sig); + +-- make the wiring for RGB pins: drive all pins for same color from one source ("8 color mode") + r0_pin <= r_sig; r1_pin <= r_sig; r2_pin <= r_sig; + g0_pin <= g_sig; g1_pin <= g_sig; g2_pin <= g_sig; + b0_pin <= b_sig; b1_pin <= b_sig; + + +-- make extra pin connections for debug signals + d_hsync <= hsync_sig; -- make duplicate of signal for debug connector + d_vsync <= vsync_sig; -- make duplicate of signal for debug connector + d_column_counter <= column_counter_sig; + d_line_counter <= line_counter_sig; + d_h_enable <= h_enable_sig; + d_v_enable <= v_enable_sig; + d_r <= r_sig; + d_g <= g_sig; + d_b <= b_sig; + d_state_clk <= clk_pin; -- make duplicate of signal for debug connector + + +end behav; + +------------------------------------------------------------------------------- +-- END ARCHITECTURE +------------------------------------------------------------------------------- diff --git a/bsp3/Angabe/vga_beh_tb.vhd b/bsp3/Angabe/vga_beh_tb.vhd new file mode 100644 index 0000000..4a4ba09 --- /dev/null +++ b/bsp3/Angabe/vga_beh_tb.vhd @@ -0,0 +1,189 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-11-21 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_tb is + +end vga_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture behaviour of vga_tb is + + constant cc : time := 39.7 ns; -- test clock period + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_state_clk : out std_logic); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : hsync_state_type; + signal d_vsync_state : vsync_state_type; + signal d_state_clk : std_logic; + + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk); + + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk_pin <= '1'; + wait for cc/2; + clk_pin <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk_pin = '1' and clk_pin'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(10000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + +end behaviour; + + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_beh of vga_tb is + for behaviour + for vga_unit : vga use entity work.vga(behav); + end for; + end for; +end vga_conf_beh; + + diff --git a/bsp3/Angabe/vga_beh_tb.vhd~ b/bsp3/Angabe/vga_beh_tb.vhd~ new file mode 100644 index 0000000..9530bed --- /dev/null +++ b/bsp3/Angabe/vga_beh_tb.vhd~ @@ -0,0 +1,194 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-09-29 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_tb is + +end vga_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture behaviour of vga_tb is + + constant cc : time := 39.7 ns; -- test clock period + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0)); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : hsync_state_type; + signal d_vsync_state : vsync_state_type; + signal d_state_clk : std_logic; + signal d_toggle : std_logic; + signal d_toggle_counter : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk, + d_toggle => d_toggle, + d_toggle_counter => d_toggle_counter); + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk_pin <= '1'; + wait for cc/2; + clk_pin <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk_pin = '1' and clk_pin'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(10000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + +end behaviour; + + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_beh of vga_tb is + for behaviour + for vga_unit : vga use entity work.vga(behav); + end for; + end for; +end vga_conf_beh; + + diff --git a/bsp3/Angabe/vga_control_arc.vhd b/bsp3/Angabe/vga_control_arc.vhd new file mode 100644 index 0000000..0c4425b --- /dev/null +++ b/bsp3/Angabe/vga_control_arc.vhd @@ -0,0 +1,54 @@ +------------------------------------------------------------------------------- +-- Title : vga_control architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_control.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: generation of colors (RGB) +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + +architecture behav of vga_control is + + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + + +begin + + r <= COLR_OFF; + g <= COLR_OFF; + b <= COLR_OFF; + +end behav; + +------------------------------------------------------------------------------- +-- END ARCHITECTURE +------------------------------------------------------------------------------- diff --git a/bsp3/Angabe/vga_control_ent.vhd b/bsp3/Angabe/vga_control_ent.vhd new file mode 100644 index 0000000..5fce16a --- /dev/null +++ b/bsp3/Angabe/vga_control_ent.vhd @@ -0,0 +1,51 @@ +------------------------------------------------------------------------------- +-- Title : vga_control entity +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_control_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: generation of colors (RGB) +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + + +entity vga_control is + port(clk : in std_logic; + reset : in std_logic; + column_counter : in std_logic_vector(COL_CNT_WIDTH-1 downto 0); + line_counter : in std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + v_enable : in std_logic; + h_enable : in std_logic; + r, g, b : out std_logic + ); + +end vga_control; + +------------------------------------------------------------------------------- +-- END ENTITY +------------------------------------------------------------------------------- diff --git a/bsp3/Angabe/vga_driver_arc.vhd b/bsp3/Angabe/vga_driver_arc.vhd new file mode 100644 index 0000000..1b89ac1 --- /dev/null +++ b/bsp3/Angabe/vga_driver_arc.vhd @@ -0,0 +1,402 @@ +------------------------------------------------------------------------------- +-- Title : vga_driver architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_driver.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-01-24 +------------------------------------------------------------------------------- +-- Description: generate hsync and vsync +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-01-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + +architecture behav of vga_driver is + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + constant TIME_A : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "1100011111"; + constant TIME_B : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "0001011010"; + constant TIME_BC : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "0010000111"; + constant TIME_BCD : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "1100000111"; + + constant TIME_O : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "1000001000"; + constant TIME_P : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "0000000001"; + constant TIME_PQ : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "0000100001"; + constant TIME_PQR : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "1000000001"; + + signal h_sync : std_logic; + signal h_sync_next : std_logic; + + signal hsync_state : hsync_state_type; + signal hsync_state_next : hsync_state_type; + + signal h_enable_sig : std_logic; + signal h_enable_next : std_logic; + + signal set_hsync_counter : std_logic; + signal hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal hsync_counter_next : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + constant HSYN_CNT_MAX : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "1111111111"; + + signal column_counter_sig : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal column_counter_next : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal set_column_counter : std_logic; + + signal v_sync : std_logic; + signal v_sync_next : std_logic; + + signal vsync_state : vsync_state_type; + signal vsync_state_next : vsync_state_type; + + signal v_enable_sig : std_logic; + signal v_enable_next : std_logic; + + signal set_vsync_counter : std_logic; + signal vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal vsync_counter_next : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + constant VSYN_CNT_MAX : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "1111111111"; + + signal line_counter_sig : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal line_counter_next : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal set_line_counter : std_logic; + + + +begin + +---------------------------------------------------------------------------- +-- Column_Counter [0..639]: calculates column number for next pixel to be displayed +---------------------------------------------------------------------------- + + COLUMN_COUNT_syn: process(clk, reset, column_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + column_counter_sig <= (others => '0'); + else + column_counter_sig <= column_counter_next; -- synchronous capture + end if; + end if; + end process; + + COLUMN_COUNT_next: process(set_column_counter, column_counter_sig) + begin + if set_column_counter = ENABLE then -- reset counter + column_counter_next <= (others => '0'); + else + if column_counter_sig < RIGHT_BORDER then + column_counter_next <= column_counter_sig + '1'; -- increment column + else + column_counter_next <= RIGHT_BORDER; -- ... but do not count beyond right border + end if; + end if; + end process; + +---------------------------------------------------------------------------- +-- Line_counter [0..479]: calculates line number for next pixel to be displayed +---------------------------------------------------------------------------- + + LINE_COUNT_syn: process(clk, reset, line_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + line_counter_sig <= (others => '0'); + else + line_counter_sig <= line_counter_next; -- synchronous capture + end if; + end if; + end process; + + LINE_COUNT_next: process(set_line_counter, line_counter_sig, set_hsync_counter) + begin + if set_line_counter = ENABLE then -- reset counter + line_counter_next <= (others => '0'); + else + if line_counter_sig < BOTTOM_BORDER then + if set_hsync_counter = '1' then -- when enabled + line_counter_next <= line_counter_sig + '1'; -- ... increment line + else + line_counter_next <= line_counter_sig; + end if; + else + line_counter_next <= BOTTOM_BORDER; -- ... but do not count below bottom + end if; + end if; + end process; + + +---------------------------------------------------------------------------- +-- Hsync_Counter: generates time base for HSYNC State Machine +---------------------------------------------------------------------------- + + HSYNC_COUNT_syn: process(clk, reset, hsync_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + hsync_counter <= (others => '0'); + else + hsync_counter <= hsync_counter_next; -- synchronous capture + end if; + end if; + end process; + + HSYNC_COUNT_next: process(set_hsync_counter, hsync_counter) + begin + if set_hsync_counter = ENABLE then -- reset counter + hsync_counter_next <= (others => '0'); + else + if hsync_counter < HSYN_CNT_MAX then + hsync_counter_next <= hsync_counter + '1'; -- increment time + else + hsync_counter_next <= HSYN_CNT_MAX; -- ... but do not count beyond max period + end if; + end if; + end process; + + +---------------------------------------------------------------------------- +-- HSYNC STATE MACHINE: generates hsync signal and controls hsync counter & column counter +---------------------------------------------------------------------------- + + HSYNC_FSM_syn: process (clk, reset) -- synchronous capture + begin + if clk'event and clk = '1' then + if reset = RES_ACT then + hsync_state <= RESET_STATE; + h_sync <= '1'; + v_enable_sig <= not(ENABLE); + else + hsync_state <= hsync_state_next; + h_sync <= h_sync_next; + v_enable_sig <= v_enable_next; + end if; + end if; + end process; + + HSYNC_FSM_next : process(hsync_state, hsync_counter, h_sync, v_enable_sig) -- next-state logic + begin -- default assignments + hsync_state_next <= hsync_state; -- ... hold current state + h_sync_next <= h_sync; -- ... and values + v_enable_next <= v_enable_sig; + + case hsync_state is + when RESET_STATE => + h_sync_next <= '0'; -- next signal values are defined here + v_enable_next <= not(ENABLE); + hsync_state_next <= B_STATE; -- ... as well as state transitions + when B_STATE => + h_sync_next <= '0'; + if hsync_counter = TIME_B then + hsync_state_next <= C_STATE; + end if; + when C_STATE => + h_sync_next <= '1'; + if hsync_counter = TIME_BC then + hsync_state_next <= pre_D_STATE; + end if; + when pre_D_STATE => + v_enable_next <= ENABLE; + hsync_state_next <= D_STATE; + when D_STATE => + v_enable_next <= ENABLE; + if hsync_counter = TIME_BCD then + hsync_state_next <= E_STATE; + end if; + when E_STATE => + v_enable_next <= not(ENABLE); + if hsync_counter = TIME_A then + hsync_state_next <= pre_B_STATE; + end if; + when pre_B_STATE => + h_sync_next <= '0'; + v_enable_next <= not(ENABLE); + hsync_state_next <= B_STATE; + when others => + null; + end case; + end process; + + HSYNC_FSM_out : process(hsync_state) -- output logic + begin + set_hsync_counter <= not(ENABLE); -- default assignments + set_column_counter <= not(ENABLE); + + case hsync_state is + when RESET_STATE => -- outputs for each state are defined here + set_hsync_counter <= ENABLE; + when pre_D_STATE => + set_column_counter <= ENABLE; + when pre_B_STATE => + set_hsync_counter <= ENABLE; + when others => + null; + end case; + end process; + + +---------------------------------------------------------------------------- +-- Vsync_Counter: generates time base for VSYNC State Machine +---------------------------------------------------------------------------- + + VSYNC_COUNT_syn: process(clk, reset, vsync_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + vsync_counter <= (others => '0'); + else + vsync_counter <= vsync_counter_next; -- synchronous capture + end if; + end if; + end process; + + VSYNC_COUNT_next: process(set_vsync_counter, vsync_counter, set_hsync_counter) + begin + if set_vsync_counter = ENABLE then -- reset counter + vsync_counter_next <= (others => '0'); + else + if vsync_counter < VSYN_CNT_MAX then + if set_hsync_counter = '1' then -- if enabled + vsync_counter_next <= vsync_counter + '1'; -- ... increment time + else + vsync_counter_next <= vsync_counter; + end if; + else + vsync_counter_next <= VSYN_CNT_MAX; -- ... but do not count beyond max period + end if; + end if; + end process; + + +---------------------------------------------------------------------------- +-- VSYNC STATE MACHINE: generates vsync signal and controls vsync counter & line counter +---------------------------------------------------------------------------- + + VSYNC_FSM_syn : process (clk, reset) -- synchronous capture + begin + if clk'event and clk = '1' then + if reset = RES_ACT then + vsync_state <= RESET_STATE; + v_sync <= '1'; + h_enable_sig <= not(ENABLE); + else + vsync_state <= vsync_state_next; + v_sync <= v_sync_next; + h_enable_sig <= h_enable_next; + end if; + end if; + end process; + + VSYNC_FSM_next : process(vsync_state, vsync_counter, v_sync, h_enable_sig) + begin -- next state logic + vsync_state_next <= vsync_state; -- default assignments + v_sync_next <= v_sync; + h_enable_next <= h_enable_sig; + + case vsync_state is -- state transitions and next signals are defined here + when RESET_STATE => + v_sync_next <= '0'; + h_enable_next <= not(ENABLE); + vsync_state_next <= P_STATE; + when P_STATE => + v_sync_next <= '0'; + if vsync_counter = time_p then + vsync_state_next <= Q_STATE; + end if; + when Q_STATE => + v_sync_next <= '1'; + if vsync_counter = time_pq then + vsync_state_next <= pre_R_STATE; + end if; + when pre_R_STATE => + h_enable_next <= ENABLE; + vsync_state_next <= R_STATE; + when R_STATE => + h_enable_next <= ENABLE; + if vsync_counter = time_pqr then + vsync_state_next <= S_STATE; + end if; + when S_STATE => + h_enable_next <= not(ENABLE); + if vsync_counter = time_o then + vsync_state_next <= pre_P_STATE; + end if; + when pre_P_STATE => + v_sync_next <= '0'; + h_enable_next <= not(ENABLE); + vsync_state_next <= P_STATE; + when others => + null; + end case; + end process; + + VSYNC_FSM_out : process(vsync_state) + begin -- output logic + set_vsync_counter <= not(ENABLE); -- output values for each state defined here + set_line_counter <= not(ENABLE); + + case vsync_state is + when RESET_STATE => + set_vsync_counter <= ENABLE; + when pre_R_STATE => + set_line_counter <= ENABLE; + when pre_P_STATE => + set_vsync_counter <= ENABLE; + when others => + null; + end case; + end process; + + + +-- signal wiring for entity (introduced _sig to allow readback of output signals) + + column_counter <= column_counter_sig; + v_enable <= v_enable_sig; + line_counter <= line_counter_sig; + h_enable <= h_enable_sig; + + + hsync <= h_sync; + vsync <= v_sync; + + ----------------------------------------------------------------------------- + -- debug signals + ----------------------------------------------------------------------------- + d_hsync_state <= hsync_state; + d_vsync_state <= vsync_state; + d_hsync_counter <= hsync_counter; + d_vsync_counter <= vsync_counter; + d_set_hsync_counter <= set_hsync_counter; + d_set_vsync_counter <= set_vsync_counter; + d_set_column_counter <= set_column_counter; + d_set_line_counter <= set_line_counter; + +end behav; + +------------------------------------------------------------------------------- +-- END ARCHITECTURE +------------------------------------------------------------------------------- diff --git a/bsp3/Angabe/vga_driver_ent.vhd b/bsp3/Angabe/vga_driver_ent.vhd new file mode 100644 index 0000000..f4c00be --- /dev/null +++ b/bsp3/Angabe/vga_driver_ent.vhd @@ -0,0 +1,60 @@ +------------------------------------------------------------------------------- +-- Title : vga_driver entity +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_driver_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: generate vsync and hsync +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + + +entity vga_driver is + port(clk : in std_logic; + reset : in std_logic; + column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + h_enable : out std_logic; + v_enable : out std_logic; + hsync, vsync : out std_logic; + + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter : out std_logic; + d_set_vsync_counter : out std_logic; + d_set_column_counter : out std_logic; + d_set_line_counter : out std_logic + ); + +end vga_driver; + +------------------------------------------------------------------------------- +-- END ENTITY +------------------------------------------------------------------------------- diff --git a/bsp3/Angabe/vga_ent.vhd b/bsp3/Angabe/vga_ent.vhd new file mode 100644 index 0000000..32256bb --- /dev/null +++ b/bsp3/Angabe/vga_ent.vhd @@ -0,0 +1,71 @@ +------------------------------------------------------------------------------- +-- Title : vga entitiy +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: entity of top level module, external pins defined here +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + +entity vga is + port( +-- input pins from PCB board + clk_pin : in std_logic; -- clock pin + reset_pin : in std_logic; -- reset pins (from switch) +-- output pins to RGB connector / VGA screen + r0_pin, r1_pin, r2_pin : out std_logic; -- to RGB connector "red" + g0_pin, g1_pin, g2_pin : out std_logic; -- to RGB connector "green" + b0_pin, b1_pin : out std_logic; -- to RGB connector "blue" + hsync_pin : out std_logic; -- to RGB connector "Hsync" + vsync_pin : out std_logic; -- to RGB connector "Vsync" +-- output pins to 7-segment display + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); +-- output pins provided for debugging only / logic analyzer + d_hsync, d_vsync : out std_logic; -- copy of hsync_pin, vsync_pin + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_state_clk : out std_logic + ); + +end vga; + +------------------------------------------------------------------------------- +-- END ENTITY +------------------------------------------------------------------------------- diff --git a/bsp3/Angabe/vga_pak.vhd b/bsp3/Angabe/vga_pak.vhd new file mode 100644 index 0000000..7f59eab --- /dev/null +++ b/bsp3/Angabe/vga_pak.vhd @@ -0,0 +1,85 @@ +------------------------------------------------------------------------------- +-- Title : vga package +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_pak.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-08-19 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: definitions of global constants and enumerated types +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-08-19 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + + +------------------------------------------------------------------------------- +-- PACKAGE +------------------------------------------------------------------------------- + +package vga_pak is + + constant RES_ACT : std_logic := '0'; -- define reset active LO + constant ENABLE : std_logic := '1'; -- define diverse enable HI + constant COLR_ON : std_logic := '1'; -- define VGA color on as HI + constant COLR_OFF : std_logic := '0'; -- define VGA color off as LO + constant SEG_WIDTH : integer := 7; -- display has 7 segments + constant BCD_WIDTH : integer := 4; -- BCD number has 4 bit + constant TOG_CNT_WIDTH : integer := 25; -- bitwidth of counter that controls blinking + + constant COL_CNT_WIDTH : integer := 10; -- width of the column counter + constant LINE_CNT_WIDTH : integer := 9; -- width of the line counter + constant HSYN_CNT_WIDTH : integer := 10; -- width of the h-sync counter + constant VSYN_CNT_WIDTH : integer := 10; -- width of the v-sync counter + + constant RIGHT_BORDER: std_logic_vector(COL_CNT_WIDTH-1 downto 0) := "1001111111"; -- 640 columns (0...639) + constant BOTTOM_BORDER: std_logic_vector(LINE_CNT_WIDTH-1 downto 0) := "111011111"; -- 480 lines (0...479) + + -- define coordinates of rectangle + constant X_MIN : std_logic_vector(COL_CNT_WIDTH-1 downto 0) := "0001100100"; -- 100 + constant X_MAX : std_logic_vector(COL_CNT_WIDTH-1 downto 0) := "0011001000"; -- 200 + constant Y_MIN : std_logic_vector(LINE_CNT_WIDTH-1 downto 0) := "001100100"; + constant Y_MAX : std_logic_vector(LINE_CNT_WIDTH-1 downto 0) := "011001000"; + + -- define emumerated types for state machines + type hsync_state_type is (RESET_STATE, B_STATE, C_STATE, D_STATE, E_STATE, + pre_D_STATE, pre_B_STATE); + type vsync_state_type is (RESET_STATE, P_STATE, Q_STATE, R_STATE, S_STATE, + pre_R_STATE, pre_P_STATE); + + -- Definitions for 7-segment display gfedcba + constant DIGIT_ZERO : std_logic_vector(SEG_WIDTH-1 downto 0) := "1000000"; + constant DIGIT_ONE : std_logic_vector(SEG_WIDTH-1 downto 0) := "1111001"; + constant DIGIT_TWO : std_logic_vector(SEG_WIDTH-1 downto 0) := "0100100"; + constant DIGIT_THREE : std_logic_vector(SEG_WIDTH-1 downto 0) := "0110000"; + constant DIGIT_FOUR : std_logic_vector(SEG_WIDTH-1 downto 0) := "0011001"; + constant DIGIT_FIVE : std_logic_vector(SEG_WIDTH-1 downto 0) := "0010010"; + constant DIGIT_SIX : std_logic_vector(SEG_WIDTH-1 downto 0) := "0000010"; + constant DIGIT_SEVEN : std_logic_vector(SEG_WIDTH-1 downto 0) := "1111000"; + constant DIGIT_EIGHT : std_logic_vector(SEG_WIDTH-1 downto 0) := "0000000"; + constant DIGIT_NINE : std_logic_vector(SEG_WIDTH-1 downto 0) := "0011000"; + constant DIGIT_MINUS : std_logic_vector(SEG_WIDTH-1 downto 0) := "0111111"; + constant DIGIT_A : std_logic_vector(SEG_WIDTH-1 downto 0) := "0001000"; + constant DIGIT_B : std_logic_vector(SEG_WIDTH-1 downto 0) := "0000011"; + constant DIGIT_C : std_logic_vector(SEG_WIDTH-1 downto 0) := "0110001"; + constant DIGIT_D : std_logic_vector(SEG_WIDTH-1 downto 0) := "1000010"; + constant DIGIT_E : std_logic_vector(SEG_WIDTH-1 downto 0) := "1001111"; + constant DIGIT_F : std_logic_vector(SEG_WIDTH-1 downto 0) := "1000111"; + constant DIGIT_OFF : std_logic_vector(SEG_WIDTH-1 downto 0) := "1111111"; + +end package; diff --git a/bsp3/Angabe/vga_pll.bdf b/bsp3/Angabe/vga_pll.bdf new file mode 100755 index 0000000..414cf76 --- /dev/null +++ b/bsp3/Angabe/vga_pll.bdf @@ -0,0 +1,799 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +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. +*/ +(header "graphic" (version "1.3")) +(pin + (input) + (rect 240 80 408 96) + (text "INPUT" (rect 133 0 161 10)(font "Arial" (font_size 6))) + (text "board_clk" (rect 5 0 52 12)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 156 17)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 232 120 280 136)) +) +(pin + (input) + (rect 528 96 696 112) + (text "INPUT" (rect 133 0 161 10)(font "Arial" (font_size 6))) + (text "reset" (rect 5 0 29 12)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 156 17)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 536 168 584 184)) +) +(pin + (output) + (rect 912 256 1132 272) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_hsync" (rect 90 0 132 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 916 96 964 112)) +) +(pin + (output) + (rect 912 272 1132 288) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_vsync" (rect 90 0 133 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 916 112 964 128)) +) +(pin + (output) + (rect 912 288 1132 304) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_column_counter[9..0]" (rect 90 0 205 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 916 128 964 272)) +) +(pin + (output) + (rect 912 320 1132 336) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_column_counter" (rect 90 0 200 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 916 160 972 176)) +) +(pin + (output) + (rect 912 336 1132 352) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_line_counter" (rect 90 0 182 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 916 176 964 192)) +) +(pin + (output) + (rect 912 352 1132 368) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_hsync_counter[9..0]" (rect 90 0 200 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 916 192 972 248)) +) +(pin + (output) + (rect 912 368 1126 384) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_vsync_counter[9..0]" (rect 90 0 202 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 910 208 958 264)) +) +(pin + (output) + (rect 912 384 1126 400) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_hsync_counter" (rect 90 0 196 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 910 224 958 240)) +) +(pin + (output) + (rect 912 400 1126 416) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_vsync_counter" (rect 90 0 197 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 910 240 958 256)) +) +(pin + (output) + (rect 912 448 1126 464) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_r" (rect 90 0 105 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 910 288 958 304)) +) +(pin + (output) + (rect 912 464 1126 480) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_g" (rect 90 0 107 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 910 304 958 320)) +) +(pin + (output) + (rect 912 480 1126 496) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_b" (rect 90 0 107 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 910 320 958 336)) +) +(pin + (output) + (rect 912 496 1126 512) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_hsync_state[0..6]" (rect 90 0 189 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 992 480 1040 584)) +) +(pin + (output) + (rect 912 512 1120 528) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_vsync_state[0..6]" (rect 90 0 190 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1032 352 1088 456)) +) +(pin + (output) + (rect 912 304 1132 320) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_line_counter[8..0]" (rect 90 0 186 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 916 144 964 272)) +) +(pin + (output) + (rect 912 416 1126 432) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_h_enable" (rect 90 0 145 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 910 256 958 272)) +) +(pin + (output) + (rect 912 432 1126 448) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_v_enable" (rect 90 0 146 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 910 272 958 288)) +) +(pin + (output) + (rect 912 528 1132 544) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_state_clk" (rect 90 0 146 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1180 88 1228 104)) +) +(pin + (output) + (rect 912 80 1088 96) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "r0_pin" (rect 90 0 119 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 872 400 920 416)) +) +(pin + (output) + (rect 912 96 1088 112) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "r1_pin" (rect 90 0 119 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 872 416 920 432)) +) +(pin + (output) + (rect 912 112 1088 128) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "r2_pin" (rect 90 0 119 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 872 432 920 448)) +) +(pin + (output) + (rect 912 128 1088 144) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "g0_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 872 448 920 464)) +) +(pin + (output) + (rect 912 144 1088 160) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "g1_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 872 464 920 480)) +) +(pin + (output) + (rect 912 160 1088 176) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "g2_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 872 480 920 496)) +) +(pin + (output) + (rect 912 176 1088 192) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "b0_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 872 496 920 512)) +) +(pin + (output) + (rect 912 192 1088 208) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "b1_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 872 512 920 528)) +) +(pin + (output) + (rect 912 240 1132 256) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "seven_seg_pin[13..0]" (rect 90 0 196 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1284 472 1348 672)) +) +(pin + (output) + (rect 912 208 1088 224) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "hsync_pin" (rect 90 0 140 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 872 528 920 544)) +) +(pin + (output) + (rect 912 224 1088 240) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "vsync_pin" (rect 90 0 141 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 872 544 920 560)) +) +(symbol + (rect 696 56 912 568) + (text "vga" (rect 5 0 23 12)(font "Arial" )) + (text "inst" (rect 8 496 25 508)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clk_pin" (rect 0 0 34 12)(font "Arial" )) + (text "clk_pin" (rect 21 27 55 39)(font "Arial" )) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "reset_pin" (rect 0 0 44 12)(font "Arial" )) + (text "reset_pin" (rect 21 43 65 55)(font "Arial" )) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 216 32) + (output) + (text "r0_pin" (rect 0 0 29 12)(font "Arial" )) + (text "r0_pin" (rect 166 27 195 39)(font "Arial" )) + (line (pt 216 32)(pt 200 32)(line_width 1)) + ) + (port + (pt 216 48) + (output) + (text "r1_pin" (rect 0 0 29 12)(font "Arial" )) + (text "r1_pin" (rect 166 43 195 55)(font "Arial" )) + (line (pt 216 48)(pt 200 48)(line_width 1)) + ) + (port + (pt 216 64) + (output) + (text "r2_pin" (rect 0 0 29 12)(font "Arial" )) + (text "r2_pin" (rect 166 59 195 71)(font "Arial" )) + (line (pt 216 64)(pt 200 64)(line_width 1)) + ) + (port + (pt 216 80) + (output) + (text "g0_pin" (rect 0 0 31 12)(font "Arial" )) + (text "g0_pin" (rect 164 75 195 87)(font "Arial" )) + (line (pt 216 80)(pt 200 80)(line_width 1)) + ) + (port + (pt 216 96) + (output) + (text "g1_pin" (rect 0 0 31 12)(font "Arial" )) + (text "g1_pin" (rect 164 91 195 103)(font "Arial" )) + (line (pt 216 96)(pt 200 96)(line_width 1)) + ) + (port + (pt 216 112) + (output) + (text "g2_pin" (rect 0 0 31 12)(font "Arial" )) + (text "g2_pin" (rect 164 107 195 119)(font "Arial" )) + (line (pt 216 112)(pt 200 112)(line_width 1)) + ) + (port + (pt 216 128) + (output) + (text "b0_pin" (rect 0 0 31 12)(font "Arial" )) + (text "b0_pin" (rect 164 123 195 135)(font "Arial" )) + (line (pt 216 128)(pt 200 128)(line_width 1)) + ) + (port + (pt 216 144) + (output) + (text "b1_pin" (rect 0 0 31 12)(font "Arial" )) + (text "b1_pin" (rect 164 139 195 151)(font "Arial" )) + (line (pt 216 144)(pt 200 144)(line_width 1)) + ) + (port + (pt 216 160) + (output) + (text "hsync_pin" (rect 0 0 50 12)(font "Arial" )) + (text "hsync_pin" (rect 145 155 195 167)(font "Arial" )) + (line (pt 216 160)(pt 200 160)(line_width 1)) + ) + (port + (pt 216 176) + (output) + (text "vsync_pin" (rect 0 0 51 12)(font "Arial" )) + (text "vsync_pin" (rect 144 171 195 183)(font "Arial" )) + (line (pt 216 176)(pt 200 176)(line_width 1)) + ) + (port + (pt 216 192) + (output) + (text "seven_seg_pin[13..0]" (rect 0 0 106 12)(font "Arial" )) + (text "seven_seg_pin[13..0]" (rect 89 187 195 199)(font "Arial" )) + (line (pt 216 192)(pt 200 192)(line_width 3)) + ) + (port + (pt 216 208) + (output) + (text "d_hsync" (rect 0 0 42 12)(font "Arial" )) + (text "d_hsync" (rect 153 203 195 215)(font "Arial" )) + (line (pt 216 208)(pt 200 208)(line_width 1)) + ) + (port + (pt 216 224) + (output) + (text "d_vsync" (rect 0 0 43 12)(font "Arial" )) + (text "d_vsync" (rect 152 219 195 231)(font "Arial" )) + (line (pt 216 224)(pt 200 224)(line_width 1)) + ) + (port + (pt 216 240) + (output) + (text "d_column_counter[9..0]" (rect 0 0 115 12)(font "Arial" )) + (text "d_column_counter[9..0]" (rect 80 235 195 247)(font "Arial" )) + (line (pt 216 240)(pt 200 240)(line_width 3)) + ) + (port + (pt 216 256) + (output) + (text "d_line_counter[8..0]" (rect 0 0 96 12)(font "Arial" )) + (text "d_line_counter[8..0]" (rect 99 251 195 263)(font "Arial" )) + (line (pt 216 256)(pt 200 256)(line_width 3)) + ) + (port + (pt 216 272) + (output) + (text "d_set_column_counter" (rect 0 0 110 12)(font "Arial" )) + (text "d_set_column_counter" (rect 85 267 195 279)(font "Arial" )) + (line (pt 216 272)(pt 200 272)(line_width 1)) + ) + (port + (pt 216 288) + (output) + (text "d_set_line_counter" (rect 0 0 92 12)(font "Arial" )) + (text "d_set_line_counter" (rect 103 283 195 295)(font "Arial" )) + (line (pt 216 288)(pt 200 288)(line_width 1)) + ) + (port + (pt 216 304) + (output) + (text "d_hsync_counter[9..0]" (rect 0 0 110 12)(font "Arial" )) + (text "d_hsync_counter[9..0]" (rect 85 299 195 311)(font "Arial" )) + (line (pt 216 304)(pt 200 304)(line_width 3)) + ) + (port + (pt 216 320) + (output) + (text "d_vsync_counter[9..0]" (rect 0 0 112 12)(font "Arial" )) + (text "d_vsync_counter[9..0]" (rect 83 315 195 327)(font "Arial" )) + (line (pt 216 320)(pt 200 320)(line_width 3)) + ) + (port + (pt 216 336) + (output) + (text "d_set_hsync_counter" (rect 0 0 106 12)(font "Arial" )) + (text "d_set_hsync_counter" (rect 89 331 195 343)(font "Arial" )) + (line (pt 216 336)(pt 200 336)(line_width 1)) + ) + (port + (pt 216 352) + (output) + (text "d_set_vsync_counter" (rect 0 0 107 12)(font "Arial" )) + (text "d_set_vsync_counter" (rect 88 347 195 359)(font "Arial" )) + (line (pt 216 352)(pt 200 352)(line_width 1)) + ) + (port + (pt 216 368) + (output) + (text "d_h_enable" (rect 0 0 55 12)(font "Arial" )) + (text "d_h_enable" (rect 140 363 195 375)(font "Arial" )) + (line (pt 216 368)(pt 200 368)(line_width 1)) + ) + (port + (pt 216 384) + (output) + (text "d_v_enable" (rect 0 0 56 12)(font "Arial" )) + (text "d_v_enable" (rect 139 379 195 391)(font "Arial" )) + (line (pt 216 384)(pt 200 384)(line_width 1)) + ) + (port + (pt 216 400) + (output) + (text "d_r" (rect 0 0 15 12)(font "Arial" )) + (text "d_r" (rect 180 395 195 407)(font "Arial" )) + (line (pt 216 400)(pt 200 400)(line_width 1)) + ) + (port + (pt 216 416) + (output) + (text "d_g" (rect 0 0 17 12)(font "Arial" )) + (text "d_g" (rect 178 411 195 423)(font "Arial" )) + (line (pt 216 416)(pt 200 416)(line_width 1)) + ) + (port + (pt 216 432) + (output) + (text "d_b" (rect 0 0 17 12)(font "Arial" )) + (text "d_b" (rect 178 427 195 439)(font "Arial" )) + (line (pt 216 432)(pt 200 432)(line_width 1)) + ) + (port + (pt 216 448) + (output) + (text "d_hsync_state[0..6]" (rect 0 0 99 12)(font "Arial" )) + (text "d_hsync_state[0..6]" (rect 96 443 195 455)(font "Arial" )) + (line (pt 216 448)(pt 200 448)(line_width 3)) + ) + (port + (pt 216 464) + (output) + (text "d_vsync_state[0..6]" (rect 0 0 100 12)(font "Arial" )) + (text "d_vsync_state[0..6]" (rect 95 459 195 471)(font "Arial" )) + (line (pt 216 464)(pt 200 464)(line_width 3)) + ) + (port + (pt 216 480) + (output) + (text "d_state_clk" (rect 0 0 56 12)(font "Arial" )) + (text "d_state_clk" (rect 139 475 195 487)(font "Arial" )) + (line (pt 216 480)(pt 200 480)(line_width 1)) + ) + (drawing + (rectangle (rect 16 16 200 496)(line_width 1)) + ) +) +(symbol + (rect 408 56 504 152) + (text "vpll" (rect 5 0 22 12)(font "Arial" )) + (text "inst1" (rect 8 80 31 92)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "inclk0" (rect 0 0 28 12)(font "Arial" )) + (text "inclk0" (rect 21 27 49 39)(font "Arial" )) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 96 32) + (output) + (text "c0" (rect 0 0 11 12)(font "Arial" )) + (text "c0" (rect 64 27 75 39)(font "Arial" )) + (line (pt 96 32)(pt 80 32)(line_width 1)) + ) + (drawing + (rectangle (rect 16 16 80 80)(line_width 1)) + ) +) +(connector + (pt 696 88) + (pt 504 88) +) diff --git a/bsp3/Angabe/vga_pll.tcl b/bsp3/Angabe/vga_pll.tcl new file mode 100755 index 0000000..aa73503 --- /dev/null +++ b/bsp3/Angabe/vga_pll.tcl @@ -0,0 +1,172 @@ +# 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. + +# Quartus II: Generate Tcl File for Project +# File: vga_pll.tcl +# Generated on: Fri Sep 29 09:31:24 2006 + +# Load Quartus II Tcl Project package +package require ::quartus::project +package require ::quartus::flow + +set need_to_close_project 0 +set make_assignments 1 + +# Check that the right project is open +if {[is_project_open]} { + if {[string compare $quartus(project) "vga_pll"]} { + puts "Project vga_pll is not open" + set make_assignments 0 + } +} else { + # Only open if not already open + if {[project_exists vga_pll]} { + project_open -cmp vga_pll vga_pll + } else { + project_new -cmp vga_pll vga_pll + } + set need_to_close_project 1 +} + +# Make assignments +if {$make_assignments} { + catch { set_global_assignment -name FAMILY Stratix } result + catch { set_global_assignment -name DEVICE EP1S25F672C6 } result + catch { set_global_assignment -name ORIGINAL_QUARTUS_VERSION 6.0 } result + catch { set_global_assignment -name PROJECT_CREATION_TIME_DATE "09:04:10 SEPTEMBER 29, 2006" } result + catch { set_global_assignment -name LAST_QUARTUS_VERSION 6.0 } result + catch { set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "Synplify Pro" } result + catch { set_global_assignment -name EDA_LMF_FILE synplcty.lmf -section_id eda_design_synthesis } result + catch { set_global_assignment -name EDA_INPUT_DATA_FORMAT VQM -section_id eda_design_synthesis } result + catch { set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (Verilog)" } result + catch { set_global_assignment -name EDA_TIME_SCALE "1 ps" -section_id eda_simulation } result + catch { set_global_assignment -name EDA_OUTPUT_DATA_FORMAT VERILOG -section_id eda_simulation } result + catch { set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA } result + catch { set_global_assignment -name DEVICE_FILTER_PIN_COUNT 672 } result + catch { set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 6 } result + catch { set_global_assignment -name BSF_FILE ../../src/vpll.bsf } result + catch { set_global_assignment -name VHDL_FILE ../../src/vpll.vhd } result + catch { set_global_assignment -name BDF_FILE ../../src/vga_pll.bdf } result + catch { set_global_assignment -name VQM_FILE ../../syn/rev_1/vga.vqm } result + + set_location_assignment PIN_E24 -to b0_pin + set_location_assignment PIN_T6 -to b1_pin + set_location_assignment PIN_N3 -to board_clk + set_location_assignment PIN_E23 -to g0_pin + set_location_assignment PIN_T5 -to g1_pin + set_location_assignment PIN_T24 -to g2_pin + set_location_assignment PIN_F1 -to hsync_pin + set_location_assignment PIN_E22 -to r0_pin + set_location_assignment PIN_T4 -to r1_pin + set_location_assignment PIN_T7 -to r2_pin + set_location_assignment PIN_A5 -to reset + set_location_assignment PIN_F2 -to vsync_pin + set_location_assignment PIN_Y5 -to d_hsync_state[0] + set_location_assignment PIN_F19 -to d_hsync_state[1] + set_location_assignment PIN_F17 -to d_hsync_state[2] + set_location_assignment PIN_Y2 -to d_hsync_state[3] + set_location_assignment PIN_F10 -to d_hsync_state[4] + set_location_assignment PIN_F9 -to d_hsync_state[5] + set_location_assignment PIN_F6 -to d_hsync_state[6] + set_location_assignment PIN_H4 -to d_hsync_counter[0] + set_location_assignment PIN_G25 -to d_hsync_counter[7] + set_location_assignment PIN_G22 -to d_hsync_counter[8] + set_location_assignment PIN_G18 -to d_hsync_counter[9] + set_location_assignment PIN_F5 -to d_vsync_state[0] + set_location_assignment PIN_F4 -to d_vsync_state[1] + set_location_assignment PIN_F3 -to d_vsync_state[2] + set_location_assignment PIN_M19 -to d_vsync_state[3] + set_location_assignment PIN_M18 -to d_vsync_state[4] + set_location_assignment PIN_M7 -to d_vsync_state[5] + set_location_assignment PIN_M4 -to d_vsync_state[6] + set_location_assignment PIN_G9 -to d_vsync_counter[0] + set_location_assignment PIN_G6 -to d_vsync_counter[7] + set_location_assignment PIN_G4 -to d_vsync_counter[8] + set_location_assignment PIN_G2 -to d_vsync_counter[9] + set_location_assignment PIN_K6 -to d_line_counter[0] + set_location_assignment PIN_K4 -to d_line_counter[1] + set_location_assignment PIN_J22 -to d_line_counter[2] + set_location_assignment PIN_M9 -to d_line_counter[3] + set_location_assignment PIN_M8 -to d_line_counter[4] + set_location_assignment PIN_M6 -to d_line_counter[5] + set_location_assignment PIN_M5 -to d_line_counter[6] + set_location_assignment PIN_L24 -to d_line_counter[7] + set_location_assignment PIN_L25 -to d_line_counter[8] + set_location_assignment PIN_L23 -to d_column_counter[0] + set_location_assignment PIN_L22 -to d_column_counter[1] + set_location_assignment PIN_L21 -to d_column_counter[2] + set_location_assignment PIN_L20 -to d_column_counter[3] + set_location_assignment PIN_L6 -to d_column_counter[4] + set_location_assignment PIN_L4 -to d_column_counter[5] + set_location_assignment PIN_L2 -to d_column_counter[6] + set_location_assignment PIN_K23 -to d_column_counter[7] + set_location_assignment PIN_K19 -to d_column_counter[8] + set_location_assignment PIN_K5 -to d_column_counter[9] + set_location_assignment PIN_L7 -to d_hsync + set_location_assignment PIN_L5 -to d_vsync + set_location_assignment PIN_F26 -to d_set_hsync_counter + set_location_assignment PIN_F24 -to d_set_vsync_counter + set_location_assignment PIN_F21 -to d_set_line_counter + set_location_assignment PIN_Y23 -to d_set_column_counter + set_location_assignment PIN_L3 -to d_r + set_location_assignment PIN_K24 -to d_g + set_location_assignment PIN_K20 -to d_b + set_location_assignment PIN_H18 -to d_v_enable + set_location_assignment PIN_J21 -to d_h_enable + set_location_assignment PIN_R8 -to seven_seg_pin[0] + set_location_assignment PIN_R9 -to seven_seg_pin[1] + set_location_assignment PIN_R19 -to seven_seg_pin[2] + set_location_assignment PIN_R20 -to seven_seg_pin[3] + set_location_assignment PIN_R21 -to seven_seg_pin[4] + set_location_assignment PIN_R22 -to seven_seg_pin[5] + set_location_assignment PIN_R23 -to seven_seg_pin[6] + set_location_assignment PIN_Y11 -to seven_seg_pin[7] + set_location_assignment PIN_N7 -to seven_seg_pin[8] + set_location_assignment PIN_N8 -to seven_seg_pin[9] + set_location_assignment PIN_R4 -to seven_seg_pin[10] + set_location_assignment PIN_R6 -to seven_seg_pin[11] + set_location_assignment PIN_AA11 -to seven_seg_pin[12] + set_location_assignment PIN_T2 -to seven_seg_pin[13] + set_location_assignment PIN_K3 -to d_state_clk + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_column_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[1] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[2] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[3] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[4] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[5] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[6] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_state + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_line_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[1] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[2] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[3] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[4] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[5] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[6] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_state + set_instance_assignment -name SLOW_SLEW_RATE ON -to seven_seg_pin + + + # Commit assignments + export_assignments + +execute_flow -compile + + # Close project + if {$need_to_close_project} { + project_close + } +} diff --git a/bsp3/Angabe/vga_pos_tb.vhd b/bsp3/Angabe/vga_pos_tb.vhd new file mode 100644 index 0000000..4c314d8 --- /dev/null +++ b/bsp3/Angabe/vga_pos_tb.vhd @@ -0,0 +1,192 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-11-21 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_pos_tb is + +end vga_pos_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture structure of vga_pos_tb is + + constant cc : time := 39.7 ns; -- test clock period + + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out std_logic_vector(0 to 6); + d_vsync_state : out std_logic_vector(0 to 6); + d_state_clk : out std_logic); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : std_logic_vector(0 to 6); + signal d_vsync_state : std_logic_vector(0 to 6); + signal d_state_clk : std_logic; + signal clk : std_logic; + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk); + + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk <= '1'; + wait for cc/2; + clk <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk = '1' and clk'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(1000000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + + clk_pin <= clk; + +end structure; + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_pos of vga_pos_tb is + for structure + for vga_unit : vga use entity work.vga(structure); + end for; + end for; +end vga_conf_pos; + + + diff --git a/bsp3/Angabe/vga_pos_tb.vhd~ b/bsp3/Angabe/vga_pos_tb.vhd~ new file mode 100644 index 0000000..ebcff70 --- /dev/null +++ b/bsp3/Angabe/vga_pos_tb.vhd~ @@ -0,0 +1,198 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-09-29 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_pos_tb is + +end vga_pos_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture structure of vga_pos_tb is + + constant cc : time := 39.7 ns; -- test clock period + + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out std_logic_vector(0 to 6); + d_vsync_state : out std_logic_vector(0 to 6); + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0)); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : std_logic_vector(0 to 6); + signal d_vsync_state : std_logic_vector(0 to 6); + signal d_state_clk : std_logic; + signal d_toggle : std_logic; + signal d_toggle_counter : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + signal clk : std_logic; + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk, + d_toggle => d_toggle, + d_toggle_counter => d_toggle_counter); + + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk <= '1'; + wait for cc/2; + clk <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk = '1' and clk'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(1000000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + + clk_pin <= clk; + +end structure; + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_pos of vga_pos_tb is + for structure + for vga_unit : vga use entity work.vga(structure); + end for; + end for; +end vga_conf_pos; + + + diff --git a/bsp3/Angabe/vga_pre_tb.vhd b/bsp3/Angabe/vga_pre_tb.vhd new file mode 100644 index 0000000..d3dd745 --- /dev/null +++ b/bsp3/Angabe/vga_pre_tb.vhd @@ -0,0 +1,191 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-11-21 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_pre_tb is + +end vga_pre_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture structure of vga_pre_tb is + + constant cc : time := 39.7 ns; -- test clock period + + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out std_logic_vector(0 to 6); + d_vsync_state : out std_logic_vector(0 to 6); + d_state_clk : out std_logic); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : std_logic_vector(0 to 6); + signal d_vsync_state : std_logic_vector(0 to 6); + signal d_state_clk : std_logic; + signal clk : std_logic; + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk); + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk <= '1'; + wait for cc/2; + clk <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk = '1' and clk'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(10000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + + clk_pin <= clk; + +end structure; + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_pre of vga_pre_tb is + for structure + for vga_unit : vga use entity work.vga(beh); + end for; + end for; +end vga_conf_pre; + + + diff --git a/bsp3/Angabe/vga_pre_tb.vhd~ b/bsp3/Angabe/vga_pre_tb.vhd~ new file mode 100644 index 0000000..dc010f7 --- /dev/null +++ b/bsp3/Angabe/vga_pre_tb.vhd~ @@ -0,0 +1,197 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-09-29 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_pre_tb is + +end vga_pre_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture structure of vga_pre_tb is + + constant cc : time := 39.7 ns; -- test clock period + + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out std_logic_vector(0 to 6); + d_vsync_state : out std_logic_vector(0 to 6); + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0)); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : std_logic_vector(0 to 6); + signal d_vsync_state : std_logic_vector(0 to 6); + signal d_state_clk : std_logic; + signal d_toggle : std_logic; + signal d_toggle_counter : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + signal clk : std_logic; + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk, + d_toggle => d_toggle, + d_toggle_counter => d_toggle_counter); + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk <= '1'; + wait for cc/2; + clk <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk = '1' and clk'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(10000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + + clk_pin <= clk; + +end structure; + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_pre of vga_pre_tb is + for structure + for vga_unit : vga use entity work.vga(beh); + end for; + end for; +end vga_conf_pre; + + + diff --git a/bsp3/Angabe/vpll.bsf b/bsp3/Angabe/vpll.bsf new file mode 100644 index 0000000..63c3118 --- /dev/null +++ b/bsp3/Angabe/vpll.bsf @@ -0,0 +1,49 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2004 Altera Corporation +Any megafunction design, and related netlist (encrypted or decrypted), +support information, device programming or simulation file, and any other +associated documentation or information provided by Altera or a partner +under Altera's Megafunction Partnership Program may be used only +to program PLD devices (but not masked PLD devices) from Altera. Any +other use of such megafunction design, netlist, support information, +device programming or simulation file, or any other related documentation +or information is prohibited for any other purpose, including, but not +limited to modification, reverse engineering, de-compiling, or use with +any other silicon devices, unless such use is explicitly licensed under +a separate agreement with Altera or a megafunction partner. Title to the +intellectual property, including patents, copyrights, trademarks, trade +secrets, or maskworks, embodied in any such megafunction design, netlist, +support information, device programming or simulation file, or any other +related documentation or information provided by Altera or a megafunction +partner, remains with Altera, the megafunction partner, or their respective +licensors. No other licenses, including any licenses needed under any third +party's intellectual property, are provided herein. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 16 16 112 112) + (text "vpll" (rect 5 0 22 12)(font "Arial" )) + (text "inst" (rect 8 80 25 92)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "inclk0" (rect 0 0 28 12)(font "Arial" )) + (text "inclk0" (rect 21 27 49 39)(font "Arial" )) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 96 32) + (output) + (text "c0" (rect 0 0 11 12)(font "Arial" )) + (text "c0" (rect 64 27 75 39)(font "Arial" )) + (line (pt 96 32)(pt 80 32)(line_width 1)) + ) + (drawing + (rectangle (rect 16 16 80 80)(line_width 1)) + ) +) diff --git a/bsp3/Angabe/vpll.vhd b/bsp3/Angabe/vpll.vhd new file mode 100644 index 0000000..dbb347f --- /dev/null +++ b/bsp3/Angabe/vpll.vhd @@ -0,0 +1,274 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: vpll.vhd +-- Megafunction Name(s): +-- altpll +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 4.1 Build 181 06/29/2004 SJ Full Version +-- ************************************************************ + + +--Copyright (C) 1991-2004 Altera Corporation +--Any megafunction design, and related netlist (encrypted or decrypted), +--support information, device programming or simulation file, and any other +--associated documentation or information provided by Altera or a partner +--under Altera's Megafunction Partnership Program may be used only +--to program PLD devices (but not masked PLD devices) from Altera. Any +--other use of such megafunction design, netlist, support information, +--device programming or simulation file, or any other related documentation +--or information is prohibited for any other purpose, including, but not +--limited to modification, reverse engineering, de-compiling, or use with +--any other silicon devices, unless such use is explicitly licensed under +--a separate agreement with Altera or a megafunction partner. Title to the +--intellectual property, including patents, copyrights, trademarks, trade +--secrets, or maskworks, embodied in any such megafunction design, netlist, +--support information, device programming or simulation file, or any other +--related documentation or information provided by Altera or a megafunction +--partner, remains with Altera, the megafunction partner, or their respective +--licensors. No other licenses, including any licenses needed under any third +--party's intellectual property, are provided herein. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.altera_mf_components.all; + +ENTITY vpll IS + PORT + ( + inclk0 : IN STD_LOGIC := '0'; +-- pllena : IN STD_LOGIC := '1'; +-- areset : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC +-- locked : OUT STD_LOGIC + ); +END vpll; + + +ARCHITECTURE SYN OF vpll IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_VECTOR (5 DOWNTO 0); + SIGNAL sub_wire5_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC ; + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (3 DOWNTO 0); + +signal pllena_int : std_logic; +signal areset_int : std_logic; +signal locked : std_logic; + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_duty_cycle : NATURAL; + lpm_type : STRING; + clk0_multiply_by : NATURAL; + invalid_lock_multiplier : NATURAL; + inclk0_input_frequency : NATURAL; + gate_lock_signal : STRING; + clk0_divide_by : NATURAL; + pll_type : STRING; + valid_lock_multiplier : NATURAL; + clk0_time_delay : STRING; + spread_frequency : NATURAL; + intended_device_family : STRING; + operation_mode : STRING; + compensate_clock : STRING; + clk0_phase_shift : STRING + ); + PORT ( + clkena : IN STD_LOGIC_VECTOR (5 DOWNTO 0); + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + pllena : IN STD_LOGIC ; + extclkena : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + locked : OUT STD_LOGIC ; + areset : IN STD_LOGIC ; + clk : OUT STD_LOGIC_VECTOR (5 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire3_bv(0 DOWNTO 0) <= "0"; + sub_wire3 <= To_stdlogicvector(sub_wire3_bv); + sub_wire5_bv(0 DOWNTO 0) <= "0"; + sub_wire5 <= NOT(To_stdlogicvector(sub_wire5_bv)); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + locked <= sub_wire2; + sub_wire4 <= sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire5(0 DOWNTO 0); + sub_wire6 <= inclk0; + sub_wire7 <= sub_wire3(0 DOWNTO 0) & sub_wire6; + sub_wire8 <= sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0); + +areset_int <= '0'; +pllena_int <= '1'; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_duty_cycle => 50, + lpm_type => "altpll", + clk0_multiply_by => 5435, + invalid_lock_multiplier => 5, + inclk0_input_frequency => 30003, + gate_lock_signal => "NO", + clk0_divide_by => 6666, + pll_type => "AUTO", + valid_lock_multiplier => 1, + clk0_time_delay => "0", + spread_frequency => 0, + intended_device_family => "Stratix", + operation_mode => "NORMAL", + compensate_clock => "CLK0", + clk0_phase_shift => "0" + ) + PORT MAP ( + clkena => sub_wire4, + inclk => sub_wire7, + pllena => pllena_int, + extclkena => sub_wire8, + areset => areset_int, + clk => sub_wire0, + locked => sub_wire2 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" +-- Retrieval info: PRIVATE: TIME_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "6" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "33.330" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "299.970" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "33.330" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "27.175" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: DEV_FAMILY STRING "Stratix" +-- Retrieval info: PRIVATE: LOCK_LOSS_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: DEVICE_FAMILY NUMERIC "9" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "5435" +-- Retrieval info: CONSTANT: INVALID_LOCK_MULTIPLIER NUMERIC "5" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "30003" +-- Retrieval info: CONSTANT: GATE_LOCK_SIGNAL STRING "NO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "6666" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: VALID_LOCK_MULTIPLIER NUMERIC "1" +-- Retrieval info: CONSTANT: CLK0_TIME_DELAY STRING "0" +-- Retrieval info: CONSTANT: SPREAD_FREQUENCY NUMERIC "0" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Stratix" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT VCC "c0" +-- Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT VCC "@clk[5..0]" +-- 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: USED_PORT: pllena 0 0 0 0 INPUT VCC "pllena" +-- 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: areset 0 0 0 0 INPUT GND "areset" +-- 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: @extclkena 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 4 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: @pllena 0 0 0 0 pllena 0 0 0 0 +-- Retrieval info: CONNECT: @extclkena 0 0 1 2 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 5 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 2 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 0 VCC 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @extclkena 0 0 1 3 GND 0 0 0 0 +-- Retrieval info: CONNECT: @extclkena 0 0 1 0 GND 0 0 0 0 +-- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 3 GND 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.vhd TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.inc FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.cmp TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.bsf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll_inst.vhd TRUE FALSE diff --git a/bsp3/Protokolle/DigitalDesign_prot.sty b/bsp3/Protokolle/DigitalDesign_prot.sty new file mode 100644 index 0000000..6cb3c1c --- /dev/null +++ b/bsp3/Protokolle/DigitalDesign_prot.sty @@ -0,0 +1,225 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DigitalDesign_app.sty +% +% Babak Rahbaran +% (rahbaran@ecs.tuwien.ac.at) +% +% 14.07.03 +% +% Institut f"ur Technische Informatik (182/2) +% ECS Group +% Technische Universit"at Wien +% 1040 Treitlstr. 3, 2. Stk. +% (www.ecs.tuwien.ac.at) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% packages +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage{fancyheadings} +\usepackage{german} +\usepackage{graphicx} +\usepackage[latin1]{inputenc} %------- Umlaute im Text + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% user-defined commands +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% typeset pin numbers +\newcommand{\pin}[1]{\emph{\textbf{#1}}\ } +\renewcommand{\chaptername}{Aufgabe} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% some size definitions and counter settings +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\oddsidemargin 1cm +\evensidemargin 1cm +\topmargin 0pt +\headsep 50pt +\textheight 21.5cm +\textwidth 14.1cm + +\renewcommand{\floatpagefraction}{0.9} +\renewcommand{\textfraction}{0.05} +\renewcommand{\topfraction}{1.0} +\renewcommand{\bottomfraction}{1.0} + +\setcounter{totalnumber}{3} +\setcounter{bottomnumber}{3} +\setcounter{topnumber}{3} + +\setlength{\unitlength}{1mm} +\setlength{\parindent}{6mm} +\setlength{\parskip}{12pt plus2pt minus2pt} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% define variables used on titlepage +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% heading +\def\headline#1{\gdef\@headline{#1}} +% group number +\def\groupnr#1{\gdef\@groupnr{#1}} +% authors +\def\vornamea#1{\gdef\@vornamea{#1}} +\def\nachnamea#1{\gdef\@nachnamea{#1}} +\def\matrikela#1{\gdef\@matrikela{#1}} +\def\emaila#1{\gdef\@emaila{#1}} + +\def\vornameb#1{\gdef\@vornameb{#1}} +\def\nachnameb#1{\gdef\@nachnameb{#1}} +\def\matrikelb#1{\gdef\@matrikelb{#1}} +\def\emailb#1{\gdef\@emailb{#1}} + +\def\vornamec#1{\gdef\@vornamec{#1}} +\def\nachnamec#1{\gdef\@nachnamec{#1}} +\def\matrikelc#1{\gdef\@matrikelc{#1}} +\def\emailc#1{\gdef\@emailc{#1}} + +%\def\vornamed#1{\gdef\@vornamed{#1}} +%\def\nachnamed#1{\gdef\@nachnamed{#1}} +%\def\matrikeld#1{\gdef\@matrikeld{#1}} +%\def\emaild#1{\gdef\@emaild{#1}} + +% address of department +\def\address#1{\gdef\@address{#1}} +% LVA-Nr. +\def\lvanr#1{\gdef\@aufgabe{#1}} + +\setcounter{footnote}{0} + +% initialize variables +\gdef\@headline{Digital Design LU} +\gdef\@title{P r o t o k o l l} + +\gdef\@groupnr{00} + +\gdef\@vornamea{Vorname1} +\gdef\@nachnamea{Nachname1} +\gdef\@matrikela{0000000} +\gdef\@emaila{a@æstudent.tuwien.ac.at} + +\gdef\@vornameb{Vorname2} +\gdef\@nachnameb{Nachname2} +\gdef\@matrikelb{0000000} +\gdef\@emailb{b@æstudent.tuwien.ac.at} + +\gdef\@vornamec{Vorname3} +\gdef\@nachnamec{Nachname3} +\gdef\@matrikelc{0000000} +\gdef\@emailc{c@student.tuwien.ac.at} + +%\gdef\@vornamed{Vorname4} +%\gdef\@nachnamed{Nachname4} +%\gdef\@matrikeld{0000000} +%\gdef\@emaild{d@student.tuwien.ac.at} + +\gdef\@aufgabe{zu Aufgabe 1} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% titlepage +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\maketitle{ +\begin{titlepage} + +% enlarge page +\setlength{\topmargin}{0pt} +\setlength{\headheight}{0pt} +\setlength{\headsep}{0pt} +\setlength{\footskip}{0pt} + +\let\footnotesize\small \let\footnoterule\relax \setcounter{page}{1} +\null +\vfill +\large +\vskip -4 cm + +\begin{center} +% heading +{\LARGE\bf \@headline \par} \vskip 2cm + +\vskip 1cm + +% title +{\Huge\bf\underline \@title \par} +\vskip 1cm +%{\Large \bf \@aufgabe \par} +\vskip 4cm + +\begin{flushright} +Gruppe \@groupnr \par +% authors +\@vornamea \ \@nachnamea, Matr. Nr. \@matrikela \par +{\small \@emaila \par} +\@vornameb \ \@nachnameb, Matr. Nr. \@matrikelb \par +{\small \@emailb \par} +\@vornamec \ \@nachnamec, Matr. Nr. \@matrikelc \par +{\small \@emailc \par} +%\@vornamed \ \@nachnamed, Matr. Nr. \@matrikeld \par +%{\small \@emaild \par} + +%\@authora \par +%\@authorb \par +%\@authorc \par +%\@authord \par +\vskip 1cm +Wien, am~\today{} +\end{flushright} +\end{center} \par +\vskip 1.5cm + +\end{titlepage} + +\setcounter{footnote}{0} +\let\thanks\relax +} % \def\maketitle + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newenvironment{Ventry}[1]% +{\begin{list}{}{\renewcommand{\makelabel}[1]{\textbf{##1:}\hfill}% +\settowidth{\labelwidth}{\textbf{#1:}}% +\setlength{\leftmargin}{\labelwidth}% +\addtolength{\leftmargin}{\labelsep}}}% +{\end{list}} + +\newcommand{\tablesize}{\fontsize{8}{10}\selectfont} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% layout of non-title pages +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\pagenumbering{roman} +\setlength{\parskip}{5pt plus2pt minus2pt} + +\setlength{\parskip}{1mm} +\clearpage +\setlength{\parskip}{5pt plus2pt minus2pt} + +\pagestyle{fancy} +\renewcommand{\chaptermark}[1]{\markboth{\thechapter\ #1}{}} +\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}{}} +\addtolength{\headheight}{2pt} + +\pagenumbering{arabic} +\setcounter{page} {1} diff --git a/bsp3/Protokolle/DigitalDesign_prot.tex b/bsp3/Protokolle/DigitalDesign_prot.tex new file mode 100644 index 0000000..acbdaed --- /dev/null +++ b/bsp3/Protokolle/DigitalDesign_prot.tex @@ -0,0 +1,36 @@ + +\documentclass[12pt,a4paper,titlepage,oneside]{report} + + +\usepackage{DigitalDesign_prot} +\sloppy + + +\begin{document} +% create titlepage +\maketitle + +% tables and lists +%\tableofcontents +%\newpage +%\listoffigures +%\newpage +%\listoftables +%\newpage + +% chapters +\input{chapter1} +\input{chapter2} +\input{chapter3} +\input{chapter4} + +% appendices +%\appendix +%\input{app1} + +% bibliography +%\bibliographystyle{alpha} +%\nocite{*} +%\bibliography{DigitalDesign} + +\end{document} diff --git a/bsp3/Protokolle/chapter1.tex b/bsp3/Protokolle/chapter1.tex new file mode 100644 index 0000000..27f796e --- /dev/null +++ b/bsp3/Protokolle/chapter1.tex @@ -0,0 +1,10 @@ +\chapter{Logikanalysator} + + +\begin{itemize} +\item Frequenz HSYNC = Hz +\item Frequenz VSYNC = Hz +\item Farbe Pixel = (r,g,b) +\item Farbe Hintergrund = (r,g,b) +\item x-Koordinate = +\end{itemize} diff --git a/bsp3/Protokolle/chapter2.tex b/bsp3/Protokolle/chapter2.tex new file mode 100644 index 0000000..a8ddc1a --- /dev/null +++ b/bsp3/Protokolle/chapter2.tex @@ -0,0 +1,6 @@ +\chapter{Design-Flow} + +\begin{itemize} +\item Blinkfrequenz = Hz +\end{itemize} + diff --git a/bsp3/Protokolle/chapter3.tex b/bsp3/Protokolle/chapter3.tex new file mode 100644 index 0000000..c6bbec2 --- /dev/null +++ b/bsp3/Protokolle/chapter3.tex @@ -0,0 +1 @@ +\chapter{VHDL} diff --git a/bsp3/Protokolle/chapter4.tex b/bsp3/Protokolle/chapter4.tex new file mode 100644 index 0000000..4b1b7cc --- /dev/null +++ b/bsp3/Protokolle/chapter4.tex @@ -0,0 +1,13 @@ +\chapter{Simulation und Test} + +\begin{itemize} +\item File Syntaxfehler: +\item Zeilennummer Syntaxfehler: + +\item File Semantikfehler 1: +\item Zeilennummer Semantikfehler 1: + +\item File Semantikfehler 2: +\item Zeilennummer Semantikfehler 2: +\end{itemize} + diff --git a/bsp3/Protokolle/prot_1.txt b/bsp3/Protokolle/prot_1.txt new file mode 100644 index 0000000..91a8a82 --- /dev/null +++ b/bsp3/Protokolle/prot_1.txt @@ -0,0 +1,6 @@ + +Frequenz HSYNC = ___ ___ Hz +Frequenz VSYNC = ___ ___ Hz +Farbe Pixel = (r,g,b) +Farbe Hintergrund = (r,g,b) +x-Koordinate = ___ ___ diff --git a/bsp3/Protokolle/prot_2.txt b/bsp3/Protokolle/prot_2.txt new file mode 100644 index 0000000..da24c18 --- /dev/null +++ b/bsp3/Protokolle/prot_2.txt @@ -0,0 +1 @@ +blinker_max = ___ ___ diff --git a/bsp3/Protokolle/prot_4.txt b/bsp3/Protokolle/prot_4.txt new file mode 100644 index 0000000..d45603d --- /dev/null +++ b/bsp3/Protokolle/prot_4.txt @@ -0,0 +1,9 @@ +File Syntaxfehler: ___ ___ +Zeilennummer Syntaxfehler: ___ ___ + +File Semantikfehler 1: ___ ___ +Zeilennummer Semantikfehler 1: ___ ___ + +File Semantikfehler 2: ___ ___ +Zeilennummer Semantikfehler 2: ___ ___ + diff --git a/bsp4/Angabe/board_driver_arc.vhd b/bsp4/Angabe/board_driver_arc.vhd new file mode 100644 index 0000000..7636a37 --- /dev/null +++ b/bsp4/Angabe/board_driver_arc.vhd @@ -0,0 +1,102 @@ +------------------------------------------------------------------------------- +-- Title : board_driver architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : board_driver.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: display number on 7-segment display +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + + +architecture behav of board_driver is + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + + signal display_value : std_logic_vector(2*BCD_WIDTH-1 downto 0); + signal ten_value : std_logic_vector(BCD_WIDTH-1 downto 0); + signal one_value : std_logic_vector(BCD_WIDTH-1 downto 0); + signal digit_left : std_logic_vector(SEG_WIDTH-1 downto 0); + signal digit_right : std_logic_vector(SEG_WIDTH-1 downto 0); + +begin + + ----------------------------------------------------------------------------- + -- generate control data + ----------------------------------------------------------------------------- + + + display_value <= "00000001"; -- vector of two BCD coded numbers to be displayed + one_value <= display_value(BCD_WIDTH-1 downto 0); -- BCD number to be displayed in right digit + ten_value <= display_value(2*BCD_WIDTH-1 downto BCD_WIDTH); -- BCD number to be displayed in left digit + + + SEG_DATA: process(reset, one_value, ten_value) + begin + if (reset = RES_ACT) then -- upon reset + digit_left <= DIGIT_OFF; -- ... switch off display + digit_right <= DIGIT_OFF; + else -- during operation + case one_value is -- ...display "one" position according + when "0000" => digit_right <= DIGIT_ZERO; -- ...to translation table + when "0001" => digit_right <= DIGIT_ONE; + when "0010" => digit_right <= DIGIT_TWO; + when "0011" => digit_right <= DIGIT_THREE; + when "0100" => digit_right <= DIGIT_FOUR; + when "0101" => digit_right <= DIGIT_FIVE; + when "0110" => digit_right <= DIGIT_SIX; + when "0111" => digit_right <= DIGIT_SEVEN; + when "1000" => digit_right <= DIGIT_EIGHT; + when "1001" => digit_right <= DIGIT_NINE; + when others => digit_right <= DIGIT_F; -- use "F" as overflow + end case; + + case ten_value is -- same for "ten" position + when "0000" => digit_left <= DIGIT_ZERO; + when "0001" => digit_left <= DIGIT_ONE; + when "0010" => digit_left <= DIGIT_TWO; + when "0011" => digit_left <= DIGIT_THREE; + when "0100" => digit_left <= DIGIT_FOUR; + when "0101" => digit_left <= DIGIT_FIVE; + when "0110" => digit_left <= DIGIT_SIX; + when "0111" => digit_left <= DIGIT_SEVEN; + when "1000" => digit_left <= DIGIT_EIGHT; + when "1001" => digit_left <= DIGIT_NINE; + when others => digit_left <= DIGIT_F; + end case; + end if; + end process; + + +-- combine the two digits to one bus + seven_seg(SEG_WIDTH-1 downto 0) <= digit_right; + seven_seg(2*SEG_WIDTH-1 downto SEG_WIDTH) <= digit_left; + +end behav; diff --git a/bsp4/Angabe/board_driver_ent.vhd b/bsp4/Angabe/board_driver_ent.vhd new file mode 100644 index 0000000..17e5cf7 --- /dev/null +++ b/bsp4/Angabe/board_driver_ent.vhd @@ -0,0 +1,42 @@ +------------------------------------------------------------------------------- +-- Title : board_driver entity +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : board_driver_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: display number on 7-segment display +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + +entity board_driver is + + port ( + reset : in std_logic; + seven_seg : out std_logic_vector(2*SEG_WIDTH-1 downto 0) + ); +end board_driver; diff --git a/bsp4/Angabe/dide_16_4.txt b/bsp4/Angabe/dide_16_4.txt new file mode 100644 index 0000000..36d5855 --- /dev/null +++ b/bsp4/Angabe/dide_16_4.txt @@ -0,0 +1,3 @@ +Blinkfrequenz: 12 Hz +Farbe 1: (r,g,b) = (0,0,0) +Farbe 2: (r,g,b) = (0,0,1) diff --git a/bsp4/Angabe/vga.hex b/bsp4/Angabe/vga.hex new file mode 100644 index 0000000..b3c05bd --- /dev/null +++ b/bsp4/Angabe/vga.hex @@ -0,0 +1,4097 @@ +:010000001ce3 +:010001001ce2 +:010002001ce1 +:010003001ce0 +:010004001cdf +:010005001cde +:010006001cdd +:010007001cdc +:010008001cdb +:010009001cda +:01000a001cd9 +:01000b001cd8 +:01000c001cd7 +:01000d001cd6 +:01000e001cd5 +:01000f001cd4 +:010010001cd3 +:010011001cd2 +:010012001cd1 +:010013001cd0 +:010014001ccf +:010015001cce +:010016001ccd +:010017001ccc +:010018001ccb +:010019001cca +:01001a001cc9 +:01001b001cc8 +:01001c001cc7 +:01001d001cc6 +:01001e001cc5 +:01001f001cc4 +:010020001cc3 +:010021001cc2 +:010022001cc1 +:010023001cc0 +:010024001cbf +:010025001cbe +:010026001cbd +:010027001cbc +:010028001cbb +:010029001cba +:01002a001cb9 +:01002b001cb8 +:01002c001cb7 +:01002d001cb6 +:01002e001cb5 +:01002f001cb4 +:010030001cb3 +:010031001cb2 +:010032001cb1 +:010033001cb0 +:010034001caf +:010035001cae +:010036001cad +:010037001cac +:010038001cab +:010039001caa +:01003a001ca9 +:01003b001ca8 +:01003c001ca7 +:01003d001ca6 +:01003e001ca5 +:01003f001ca4 +:0100400003bc +:0100410000be +:0100420000bd +:0100430000bc +:0100440000bb +:0100450000ba +:0100460000b9 +:0100470000b8 +:0100480000b7 +:0100490000b6 +:01004a0000b5 +:01004b0000b4 +:01004c0000b3 +:01004d0000b2 +:01004e0000b1 +:01004f0000b0 +:0100500000af +:0100510000ae +:0100520000ad +:0100530000ac +:0100540000ab +:0100550000aa +:0100560000a9 +:0100570000a8 +:0100580000a7 +:0100590000a6 +:01005a0000a5 +:01005b0000a4 +:01005c0000a3 +:01005d0000a2 +:01005e0000a1 +:01005f0000a0 +:01006000009f +:01006100009e +:01006200009d +:01006300009c +:01006400009b +:01006500009a +:010066000099 +:010067000098 +:010068000097 +:010069000096 +:01006a000095 +:01006b000094 +:01006c000093 +:01006d000092 +:01006e000091 +:01006f000090 +:01007000008f +:01007100008e +:01007200008d +:01007300008c +:01007400008b +:01007500008a +:010076000089 +:010077000088 +:010078000087 +:010079000086 +:01007a000085 +:01007b000084 +:01007c000083 +:01007d000082 +:01007e000081 +:01007f0090f0 +:01008000037c +:01008100007e +:01008200007d +:01008300007c +:01008400007b +:01008500007a +:010086000079 +:010087000078 +:010088000077 +:010089000076 +:01008a000075 +:01008b000074 +:01008c000073 +:01008d000072 +:01008e000071 +:01008f000070 +:01009000006f +:01009100006e +:01009200006d +:01009300006c +:01009400006b +:01009500006a +:010096000069 +:010097000068 +:010098000067 +:010099000066 +:01009a000065 +:01009b000064 +:01009c000063 +:01009d000062 +:01009e000061 +:01009f000060 +:0100a000005f +:0100a100005e +:0100a200005d +:0100a300005c +:0100a400005b +:0100a500005a +:0100a6000059 +:0100a7000058 +:0100a8000057 +:0100a9000056 +:0100aa000055 +:0100ab000054 +:0100ac000053 +:0100ad000052 +:0100ae000051 +:0100af000050 +:0100b000004f +:0100b100004e +:0100b200004d +:0100b300004c +:0100b400004b +:0100b500004a +:0100b6000049 +:0100b7000048 +:0100b8000047 +:0100b9000046 +:0100ba000045 +:0100bb000044 +:0100bc000043 +:0100bd000042 +:0100be000041 +:0100bf0090b0 +:0100c000033c +:0100c100003e +:0100c200003d +:0100c300003c +:0100c400003b +:0100c500003a +:0100c6000039 +:0100c7000038 +:0100c8000037 +:0100c9000036 +:0100ca000035 +:0100cb000034 +:0100cc000033 +:0100cd000032 +:0100ce000031 +:0100cf000030 +:0100d000002f +:0100d100002e +:0100d200002d +:0100d300002c +:0100d400002b +:0100d500002a +:0100d6000029 +:0100d7000028 +:0100d8000027 +:0100d9000026 +:0100da000025 +:0100db000024 +:0100dc000023 +:0100dd000022 +:0100de000021 +:0100df000020 +:0100e000001f +:0100e100001e +:0100e200001d +:0100e300001c +:0100e400001b +:0100e500001a +:0100e6000019 +:0100e7000018 +:0100e8000017 +:0100e9000016 +:0100ea000015 +:0100eb000014 +:0100ec000013 +:0100ed000012 +:0100ee000011 +:0100ef000010 +:0100f000000f +:0100f100000e +:0100f200000d +:0100f300000c +:0100f400000b +:0100f500000a +:0100f6000009 +:0100f7000008 +:0100f8000007 +:0100f9000006 +:0100fa000005 +:0100fb000004 +:0100fc000003 +:0100fd000002 +:0100fe000001 +:0100ff009070 +:0101000003fb +:0101010000fd +:0101020000fc +:0101030000fb +:0101040000fa +:0101050000f9 +:0101060000f8 +:0101070000f7 +:0101080000f6 +:0101090000f5 +:01010a0000f4 +:01010b0000f3 +:01010c0000f2 +:01010d0000f1 +:01010e0000f0 +:01010f0000ef +:0101100000ee +:0101110000ed +:0101120000ec +:0101130000eb +:0101140000ea +:0101150000e9 +:0101160000e8 +:0101170000e7 +:0101180000e6 +:0101190000e5 +:01011a0000e4 +:01011b0000e3 +:01011c0000e2 +:01011d0000e1 +:01011e0000e0 +:01011f0000df +:0101200000de +:0101210000dd +:0101220000dc +:0101230000db +:0101240000da +:0101250000d9 +:0101260000d8 +:0101270000d7 +:0101280000d6 +:0101290000d5 +:01012a0000d4 +:01012b0000d3 +:01012c0000d2 +:01012d0000d1 +:01012e0000d0 +:01012f0000cf +:0101300000ce +:0101310000cd +:0101320000cc +:0101330000cb +:0101340000ca +:0101350000c9 +:0101360000c8 +:0101370000c7 +:0101380000c6 +:0101390000c5 +:01013a0000c4 +:01013b0000c3 +:01013c0000c2 +:01013d0000c1 +:01013e0000c0 +:01013f00902f +:0101400003bb +:0101410000bd +:0101420000bc +:0101430000bb +:0101440000ba +:0101450000b9 +:0101460000b8 +:0101470000b7 +:0101480000b6 +:0101490000b5 +:01014a0000b4 +:01014b0000b3 +:01014c0000b2 +:01014d0000b1 +:01014e0000b0 +:01014f0000af +:0101500000ae +:0101510000ad +:0101520000ac +:0101530000ab +:0101540000aa +:0101550000a9 +:0101560000a8 +:0101570000a7 +:0101580000a6 +:0101590000a5 +:01015a0000a4 +:01015b0000a3 +:01015c0000a2 +:01015d0000a1 +:01015e0000a0 +:01015f00009f +:01016000009e +:01016100009d +:01016200009c +:01016300009b +:01016400009a +:010165000099 +:010166000098 +:010167000097 +:010168000096 +:010169000095 +:01016a000094 +:01016b000093 +:01016c000092 +:01016d000091 +:01016e000090 +:01016f00008f +:01017000008e +:01017100008d +:01017200008c +:01017300008b +:01017400008a +:010175000089 +:010176000088 +:010177000087 +:010178000086 +:010179000085 +:01017a000084 +:01017b000083 +:01017c000082 +:01017d000081 +:01017e000080 +:01017f0090ef +:01018000037b +:01018100007d +:01018200007c +:01018300007b +:01018400007a +:010185000079 +:010186000078 +:010187000077 +:010188000076 +:010189000075 +:01018a000074 +:01018b000073 +:01018c000072 +:01018d000071 +:01018e000070 +:01018f00006f +:01019000006e +:01019100006d +:01019200006c +:01019300006b +:01019400006a +:010195000069 +:010196000068 +:010197000067 +:010198000066 +:010199000065 +:01019a000064 +:01019b000063 +:01019c000062 +:01019d000061 +:01019e000060 +:01019f00005f +:0101a000005e +:0101a100005d +:0101a200005c +:0101a300005b +:0101a400005a +:0101a5000059 +:0101a6000058 +:0101a7000057 +:0101a8000056 +:0101a9000055 +:0101aa000054 +:0101ab000053 +:0101ac000052 +:0101ad000051 +:0101ae000050 +:0101af00004f +:0101b000004e +:0101b100004d +:0101b200004c +:0101b300004b +:0101b400004a +:0101b5000049 +:0101b6000048 +:0101b7000047 +:0101b8000046 +:0101b9000045 +:0101ba000044 +:0101bb000043 +:0101bc000042 +:0101bd000041 +:0101be000040 +:0101bf0090af +:0101c000033b +:0101c100003d +:0101c200003c +:0101c300003b +:0101c400003a +:0101c5000039 +:0101c6000038 +:0101c7000037 +:0101c8000036 +:0101c9000035 +:0101ca000034 +:0101cb000033 +:0101cc000032 +:0101cd000031 +:0101ce000030 +:0101cf00002f +:0101d000002e +:0101d100002d +:0101d200002c +:0101d300002b +:0101d400002a +:0101d5000029 +:0101d6000028 +:0101d7000027 +:0101d8000026 +:0101d9000025 +:0101da000024 +:0101db000023 +:0101dc000022 +:0101dd000021 +:0101de000020 +:0101df00001f +:0101e000001e +:0101e100001d +:0101e200001c +:0101e300001b +:0101e400001a +:0101e5000019 +:0101e6000018 +:0101e7000017 +:0101e8000016 +:0101e9000015 +:0101ea000014 +:0101eb000013 +:0101ec000012 +:0101ed000011 +:0101ee000010 +:0101ef00000f +:0101f000000e +:0101f100000d +:0101f200000c +:0101f300000b +:0101f400000a +:0101f5000009 +:0101f6000008 +:0101f7000007 +:0101f8000006 +:0101f9000005 +:0101fa000004 +:0101fb000003 +:0101fc000002 +:0101fd000001 +:0101fe000000 +:0101ff00906f +:0102000003fa +:0102010000fc +:0102020000fb +:0102030000fa +:0102040000f9 +:0102050000f8 +:0102060000f7 +:0102070000f6 +:0102080000f5 +:0102090000f4 +:01020a0000f3 +:01020b0000f2 +:01020c0000f1 +:01020d0000f0 +:01020e0000ef +:01020f0000ee +:0102100000ed +:0102110000ec +:0102120000eb +:0102130000ea +:0102140000e9 +:0102150000e8 +:0102160000e7 +:0102170000e6 +:0102180000e5 +:0102190000e4 +:01021a0000e3 +:01021b0000e2 +:01021c0000e1 +:01021d0000e0 +:01021e0000df +:01021f0000de +:0102200000dd +:0102210000dc +:0102220000db +:0102230000da +:0102240000d9 +:0102250000d8 +:0102260000d7 +:0102270000d6 +:0102280000d5 +:0102290000d4 +:01022a0000d3 +:01022b0000d2 +:01022c0000d1 +:01022d0000d0 +:01022e0000cf +:01022f0000ce +:0102300000cd +:0102310000cc +:0102320000cb +:0102330000ca +:0102340000c9 +:0102350000c8 +:0102360000c7 +:0102370000c6 +:0102380000c5 +:0102390000c4 +:01023a0000c3 +:01023b0000c2 +:01023c0000c1 +:01023d0000c0 +:01023e0000bf +:01023f00902e +:0102400003ba +:0102410000bc +:0102420000bb +:0102430000ba +:0102440000b9 +:0102450000b8 +:0102460000b7 +:0102470000b6 +:0102480000b5 +:0102490000b4 +:01024a0000b3 +:01024b0000b2 +:01024c0000b1 +:01024d0000b0 +:01024e0000af +:01024f0000ae +:0102500000ad +:0102510000ac +:0102520000ab +:0102530000aa +:0102540000a9 +:0102550000a8 +:0102560000a7 +:0102570000a6 +:0102580000a5 +:0102590000a4 +:01025a0000a3 +:01025b0000a2 +:01025c0000a1 +:01025d0000a0 +:01025e00009f +:01025f00009e +:01026000009d +:01026100009c +:01026200009b +:01026300009a +:010264000099 +:010265000098 +:010266000097 +:010267000096 +:010268000095 +:010269000094 +:01026a000093 +:01026b000092 +:01026c000091 +:01026d000090 +:01026e00008f +:01026f00008e +:01027000008d +:01027100008c +:01027200008b +:01027300008a +:010274000089 +:010275000088 +:010276000087 +:010277000086 +:010278000085 +:010279000084 +:01027a000083 +:01027b000082 +:01027c000081 +:01027d000080 +:01027e00007f +:01027f0090ee +:01028000037a +:01028100007c +:01028200007b +:01028300007a +:010284000079 +:010285000078 +:010286000077 +:010287000076 +:010288000075 +:010289000074 +:01028a000073 +:01028b000072 +:01028c000071 +:01028d000070 +:01028e00006f +:01028f00006e +:01029000006d +:01029100006c +:01029200006b +:01029300006a +:010294000069 +:010295000068 +:010296000067 +:010297000066 +:010298000065 +:010299000064 +:01029a000063 +:01029b000062 +:01029c000061 +:01029d000060 +:01029e00005f +:01029f00005e +:0102a000005d +:0102a100005c +:0102a200005b +:0102a300005a +:0102a4000059 +:0102a5000058 +:0102a6000057 +:0102a7000056 +:0102a8000055 +:0102a9000054 +:0102aa000053 +:0102ab000052 +:0102ac000051 +:0102ad000050 +:0102ae00004f +:0102af00004e +:0102b000004d +:0102b100004c +:0102b200004b +:0102b300004a +:0102b4000049 +:0102b5000048 +:0102b6000047 +:0102b7000046 +:0102b8000045 +:0102b9000044 +:0102ba000043 +:0102bb000042 +:0102bc000041 +:0102bd000040 +:0102be00003f +:0102bf0090ae +:0102c000033a +:0102c100003c +:0102c200003b +:0102c300003a +:0102c4000039 +:0102c5000038 +:0102c6000037 +:0102c7000036 +:0102c8000035 +:0102c9000034 +:0102ca000033 +:0102cb000032 +:0102cc000031 +:0102cd000030 +:0102ce00002f +:0102cf00002e +:0102d000002d +:0102d100002c +:0102d200002b +:0102d300002a +:0102d4000029 +:0102d5000028 +:0102d6000027 +:0102d7000026 +:0102d8000025 +:0102d9000024 +:0102da000023 +:0102db000022 +:0102dc000021 +:0102dd000020 +:0102de00001f +:0102df00001e +:0102e000001d +:0102e100001c +:0102e200001b +:0102e300001a +:0102e4000019 +:0102e5000018 +:0102e6000017 +:0102e7000016 +:0102e8000015 +:0102e9000014 +:0102ea000013 +:0102eb000012 +:0102ec000011 +:0102ed000010 +:0102ee00000f +:0102ef00000e +:0102f000000d +:0102f100000c +:0102f200000b +:0102f300000a +:0102f4000009 +:0102f5000008 +:0102f6000007 +:0102f7000006 +:0102f8000005 +:0102f9000004 +:0102fa000003 +:0102fb000002 +:0102fc000001 +:0102fd000000 +:0102fe0000ff +:0102ff00906e +:0103000003f9 +:0103010000fb +:0103020000fa +:0103030000f9 +:0103040000f8 +:0103050000f7 +:0103060000f6 +:0103070000f5 +:0103080000f4 +:0103090000f3 +:01030a0000f2 +:01030b0000f1 +:01030c0000f0 +:01030d0000ef +:01030e0000ee +:01030f0000ed +:0103100000ec +:0103110000eb +:0103120000ea +:0103130000e9 +:0103140000e8 +:0103150000e7 +:0103160000e6 +:0103170000e5 +:0103180000e4 +:0103190000e3 +:01031a0000e2 +:01031b0000e1 +:01031c0000e0 +:01031d0000df +:01031e0000de +:01031f0000dd +:0103200000dc +:0103210000db +:0103220000da +:0103230000d9 +:0103240000d8 +:0103250000d7 +:0103260000d6 +:0103270000d5 +:0103280000d4 +:0103290000d3 +:01032a0000d2 +:01032b0000d1 +:01032c0000d0 +:01032d0000cf +:01032e0000ce +:01032f0000cd +:0103300000cc +:0103310000cb +:0103320000ca +:0103330000c9 +:0103340000c8 +:0103350000c7 +:0103360000c6 +:0103370000c5 +:0103380000c4 +:0103390000c3 +:01033a0000c2 +:01033b0000c1 +:01033c0000c0 +:01033d0000bf +:01033e0000be +:01033f00902d +:0103400003b9 +:0103410000bb +:0103420000ba +:0103430000b9 +:0103440000b8 +:0103450000b7 +:0103460000b6 +:0103470000b5 +:0103480000b4 +:0103490000b3 +:01034a0000b2 +:01034b0000b1 +:01034c0000b0 +:01034d0000af +:01034e0000ae +:01034f0000ad +:0103500000ac +:0103510000ab +:0103520000aa +:0103530000a9 +:0103540000a8 +:0103550000a7 +:0103560000a6 +:0103570000a5 +:0103580000a4 +:0103590000a3 +:01035a0000a2 +:01035b0000a1 +:01035c0000a0 +:01035d00009f +:01035e00009e +:01035f00009d +:01036000009c +:01036100009b +:01036200009a +:010363000099 +:010364000098 +:010365000097 +:010366000096 +:010367000095 +:010368000094 +:010369000093 +:01036a000092 +:01036b000091 +:01036c000090 +:01036d00008f +:01036e00008e +:01036f00008d +:01037000008c +:01037100008b +:01037200008a +:010373000089 +:010374000088 +:010375000087 +:010376000086 +:010377000085 +:010378000084 +:010379000083 +:01037a000082 +:01037b000081 +:01037c000080 +:01037d00007f +:01037e00007e +:01037f0090ed +:010380000379 +:01038100007b +:01038200007a +:010383000079 +:010384000078 +:010385000077 +:010386000076 +:010387000075 +:010388000074 +:010389000073 +:01038a000072 +:01038b000071 +:01038c000070 +:01038d00006f +:01038e00006e +:01038f00006d +:01039000006c +:01039100006b +:01039200006a +:010393000069 +:010394000068 +:010395000067 +:010396000066 +:010397000065 +:010398000064 +:010399000063 +:01039a000062 +:01039b000061 +:01039c000060 +:01039d00005f +:01039e00005e +:01039f00005d +:0103a000005c +:0103a100005b +:0103a200005a +:0103a3000059 +:0103a4000058 +:0103a5000057 +:0103a6000056 +:0103a7000055 +:0103a8000054 +:0103a9000053 +:0103aa000052 +:0103ab000051 +:0103ac000050 +:0103ad00004f +:0103ae00004e +:0103af00004d +:0103b000004c +:0103b100004b +:0103b200004a +:0103b3000049 +:0103b4000048 +:0103b5000047 +:0103b6000046 +:0103b7000045 +:0103b8000044 +:0103b9000043 +:0103ba000042 +:0103bb000041 +:0103bc000040 +:0103bd00003f +:0103be00003e +:0103bf0090ad +:0103c0000339 +:0103c100003b +:0103c200003a +:0103c3000039 +:0103c4000038 +:0103c5000037 +:0103c6000036 +:0103c7000035 +:0103c8000034 +:0103c9000033 +:0103ca000032 +:0103cb000031 +:0103cc000030 +:0103cd00002f +:0103ce00002e +:0103cf00002d +:0103d000002c +:0103d100002b +:0103d200002a +:0103d3000029 +:0103d4000028 +:0103d5000027 +:0103d6000026 +:0103d7000025 +:0103d8000024 +:0103d9000023 +:0103da000022 +:0103db000021 +:0103dc000020 +:0103dd00001f +:0103de00001e +:0103df00001d +:0103e000001c +:0103e100001b +:0103e200001a +:0103e3000019 +:0103e4000018 +:0103e5000017 +:0103e6000016 +:0103e7000015 +:0103e8000014 +:0103e9000013 +:0103ea000012 +:0103eb000011 +:0103ec000010 +:0103ed00000f +:0103ee00000e +:0103ef00000d +:0103f000000c +:0103f100000b +:0103f200000a +:0103f3000009 +:0103f4000008 +:0103f5000007 +:0103f6000006 +:0103f7000005 +:0103f8000004 +:0103f9000003 +:0103fa000002 +:0103fb000001 +:0103fc000000 +:0103fd0000ff +:0103fe0000fe +:0103ff00906d +:0104000003f8 +:0104010000fa +:0104020000f9 +:0104030000f8 +:0104040000f7 +:0104050000f6 +:0104060000f5 +:0104070000f4 +:0104080000f3 +:0104090000f2 +:01040a0000f1 +:01040b0000f0 +:01040c0000ef +:01040d0000ee +:01040e0000ed +:01040f0000ec +:0104100000eb +:0104110000ea +:0104120000e9 +:0104130000e8 +:0104140000e7 +:0104150000e6 +:0104160000e5 +:0104170000e4 +:0104180000e3 +:0104190000e2 +:01041a0000e1 +:01041b0000e0 +:01041c0000df +:01041d0000de +:01041e0000dd +:01041f0000dc +:0104200000db +:0104210000da +:0104220000d9 +:0104230000d8 +:0104240000d7 +:0104250000d6 +:0104260000d5 +:0104270000d4 +:0104280000d3 +:0104290000d2 +:01042a0000d1 +:01042b0000d0 +:01042c0000cf +:01042d0000ce +:01042e0000cd +:01042f0000cc +:0104300000cb +:0104310000ca +:0104320000c9 +:0104330000c8 +:0104340000c7 +:0104350000c6 +:0104360000c5 +:0104370000c4 +:0104380000c3 +:0104390000c2 +:01043a0000c1 +:01043b0000c0 +:01043c0000bf +:01043d0000be +:01043e0000bd +:01043f00902c +:0104400003b8 +:0104410000ba +:0104420000b9 +:0104430000b8 +:0104440000b7 +:0104450000b6 +:0104460000b5 +:0104470000b4 +:0104480000b3 +:0104490000b2 +:01044a0000b1 +:01044b0000b0 +:01044c0000af +:01044d0000ae +:01044e0000ad +:01044f0000ac +:0104500000ab +:0104510000aa +:0104520000a9 +:0104530000a8 +:0104540000a7 +:0104550000a6 +:0104560000a5 +:0104570000a4 +:0104580000a3 +:0104590000a2 +:01045a0000a1 +:01045b0000a0 +:01045c00009f +:01045d00009e +:01045e00009d +:01045f00009c +:01046000009b +:01046100009a +:010462000099 +:010463000098 +:010464000097 +:010465000096 +:010466000095 +:010467000094 +:010468000093 +:010469000092 +:01046a000091 +:01046b000090 +:01046c00008f +:01046d00008e +:01046e00008d +:01046f00008c +:01047000008b +:01047100008a +:010472000089 +:010473000088 +:010474000087 +:010475000086 +:010476000085 +:010477000084 +:010478000083 +:010479000082 +:01047a000081 +:01047b000080 +:01047c00007f +:01047d00007e +:01047e00007d +:01047f0090ec +:010480000378 +:01048100007a +:010482000079 +:010483000078 +:010484000077 +:010485000076 +:010486000075 +:010487000074 +:010488000073 +:010489000072 +:01048a000071 +:01048b000070 +:01048c00006f +:01048d00006e +:01048e00006d +:01048f00006c +:01049000006b +:01049100006a +:010492000069 +:010493000068 +:010494000067 +:010495000066 +:010496000065 +:010497000064 +:010498000063 +:010499000062 +:01049a000061 +:01049b000060 +:01049c00005f +:01049d00005e +:01049e00005d +:01049f00005c +:0104a000005b +:0104a100005a +:0104a2000059 +:0104a3000058 +:0104a4000057 +:0104a5000056 +:0104a6000055 +:0104a7000054 +:0104a8000053 +:0104a9000052 +:0104aa000051 +:0104ab000050 +:0104ac00004f +:0104ad00004e +:0104ae00004d +:0104af00004c +:0104b000004b +:0104b100004a +:0104b2000049 +:0104b3000048 +:0104b4000047 +:0104b5000046 +:0104b6000045 +:0104b7000044 +:0104b8000043 +:0104b9000042 +:0104ba000041 +:0104bb000040 +:0104bc00003f +:0104bd00003e +:0104be00003d +:0104bf0090ac +:0104c0000338 +:0104c100003a +:0104c2000039 +:0104c3000038 +:0104c4000037 +:0104c5000036 +:0104c6000035 +:0104c7000034 +:0104c8000033 +:0104c9000032 +:0104ca000031 +:0104cb000030 +:0104cc00002f +:0104cd00002e +:0104ce00002d +:0104cf00002c +:0104d000002b +:0104d100002a +:0104d2000029 +:0104d3000028 +:0104d4000027 +:0104d5000026 +:0104d6000025 +:0104d7000024 +:0104d8000023 +:0104d9000022 +:0104da000021 +:0104db000020 +:0104dc00001f +:0104dd00001e +:0104de00001d +:0104df00001c +:0104e000001b +:0104e100001a +:0104e2000019 +:0104e3000018 +:0104e4000017 +:0104e5000016 +:0104e6000015 +:0104e7000014 +:0104e8000013 +:0104e9000012 +:0104ea000011 +:0104eb000010 +:0104ec00000f +:0104ed00000e +:0104ee00000d +:0104ef00000c +:0104f000000b +:0104f100000a +:0104f2000009 +:0104f3000008 +:0104f4000007 +:0104f5000006 +:0104f6000005 +:0104f7000004 +:0104f8000003 +:0104f9000002 +:0104fa000001 +:0104fb000000 +:0104fc0000ff +:0104fd0000fe +:0104fe0000fd +:0104ff00906c +:0105000003f7 +:0105010000f9 +:0105020000f8 +:0105030000f7 +:0105040000f6 +:0105050000f5 +:0105060000f4 +:0105070000f3 +:0105080000f2 +:0105090000f1 +:01050a0000f0 +:01050b0000ef +:01050c0000ee +:01050d0000ed +:01050e0000ec +:01050f0000eb +:0105100000ea +:0105110000e9 +:0105120000e8 +:0105130000e7 +:0105140000e6 +:0105150000e5 +:0105160000e4 +:0105170000e3 +:0105180000e2 +:0105190000e1 +:01051a0000e0 +:01051b0000df +:01051c0000de +:01051d0000dd +:01051e0000dc +:01051f0000db +:0105200000da +:0105210000d9 +:0105220000d8 +:0105230000d7 +:0105240000d6 +:0105250000d5 +:0105260000d4 +:0105270000d3 +:0105280000d2 +:0105290000d1 +:01052a0000d0 +:01052b0000cf +:01052c0000ce +:01052d0000cd +:01052e0000cc +:01052f0000cb +:0105300000ca +:0105310000c9 +:0105320000c8 +:0105330000c7 +:0105340000c6 +:0105350000c5 +:0105360000c4 +:0105370000c3 +:0105380000c2 +:0105390000c1 +:01053a0000c0 +:01053b0000bf +:01053c0000be +:01053d0000bd +:01053e0000bc +:01053f00902b +:0105400003b7 +:0105410000b9 +:0105420000b8 +:0105430000b7 +:0105440000b6 +:0105450000b5 +:0105460000b4 +:0105470000b3 +:0105480000b2 +:0105490000b1 +:01054a0000b0 +:01054b0000af +:01054c0000ae +:01054d0000ad +:01054e0000ac +:01054f0000ab +:0105500000aa +:0105510000a9 +:0105520000a8 +:0105530000a7 +:0105540000a6 +:0105550000a5 +:0105560000a4 +:0105570000a3 +:0105580000a2 +:0105590000a1 +:01055a0000a0 +:01055b00009f +:01055c00009e +:01055d00009d +:01055e00009c +:01055f00009b +:01056000009a +:010561000099 +:010562000098 +:010563000097 +:010564000096 +:010565000095 +:010566000094 +:010567000093 +:010568000092 +:010569000091 +:01056a000090 +:01056b00008f +:01056c00008e +:01056d00008d +:01056e00008c +:01056f00008b +:01057000008a +:010571000089 +:010572000088 +:010573000087 +:010574000086 +:010575000085 +:010576000084 +:010577000083 +:010578000082 +:010579000081 +:01057a000080 +:01057b00007f +:01057c00007e +:01057d00007d +:01057e00007c +:01057f0090eb +:010580000377 +:010581000079 +:010582000078 +:010583000077 +:010584000076 +:010585000075 +:010586000074 +:010587000073 +:010588000072 +:010589000071 +:01058a000070 +:01058b00006f +:01058c00006e +:01058d00006d +:01058e00006c +:01058f00006b +:01059000006a +:010591000069 +:010592000068 +:010593000067 +:010594000066 +:010595000065 +:010596000064 +:010597000063 +:010598000062 +:010599000061 +:01059a000060 +:01059b00005f +:01059c00005e +:01059d00005d +:01059e00005c +:01059f00005b +:0105a000005a +:0105a1000059 +:0105a2000058 +:0105a3000057 +:0105a4000056 +:0105a5000055 +:0105a6000054 +:0105a7000053 +:0105a8000052 +:0105a9000051 +:0105aa000050 +:0105ab00004f +:0105ac00004e +:0105ad00004d +:0105ae00004c +:0105af00004b +:0105b000004a +:0105b1000049 +:0105b2000048 +:0105b3000047 +:0105b4000046 +:0105b5000045 +:0105b6000044 +:0105b7000043 +:0105b8000042 +:0105b9000041 +:0105ba000040 +:0105bb00003f +:0105bc00003e +:0105bd00003d +:0105be00003c +:0105bf0090ab +:0105c0000337 +:0105c1000039 +:0105c2000038 +:0105c3000037 +:0105c4000036 +:0105c5000035 +:0105c6000034 +:0105c7000033 +:0105c8000032 +:0105c9000031 +:0105ca000030 +:0105cb00002f +:0105cc00002e +:0105cd00002d +:0105ce00002c +:0105cf00002b +:0105d000002a +:0105d1000029 +:0105d2000028 +:0105d3000027 +:0105d4000026 +:0105d5000025 +:0105d6000024 +:0105d7000023 +:0105d8000022 +:0105d9000021 +:0105da000020 +:0105db00001f +:0105dc00001e +:0105dd00001d +:0105de00001c +:0105df00001b +:0105e000001a +:0105e1000019 +:0105e2000018 +:0105e3000017 +:0105e4000016 +:0105e5000015 +:0105e6000014 +:0105e7000013 +:0105e8000012 +:0105e9000011 +:0105ea000010 +:0105eb00000f +:0105ec00000e +:0105ed00000d +:0105ee00000c +:0105ef00000b +:0105f000000a +:0105f1000009 +:0105f2000008 +:0105f3000007 +:0105f4000006 +:0105f5000005 +:0105f6000004 +:0105f7000003 +:0105f8000002 +:0105f9000001 +:0105fa000000 +:0105fb0000ff +:0105fc0000fe +:0105fd0000fd +:0105fe0000fc +:0105ff00906b +:0106000003f6 +:0106010000f8 +:0106020000f7 +:0106030000f6 +:0106040000f5 +:0106050000f4 +:0106060000f3 +:0106070000f2 +:0106080000f1 +:0106090000f0 +:01060a0000ef +:01060b0000ee +:01060c0000ed +:01060d0000ec +:01060e0000eb +:01060f0000ea +:0106100000e9 +:0106110000e8 +:0106120000e7 +:0106130000e6 +:0106140000e5 +:0106150000e4 +:0106160000e3 +:0106170000e2 +:0106180000e1 +:0106190000e0 +:01061a0000df +:01061b0000de +:01061c0000dd +:01061d0000dc +:01061e0000db +:01061f0000da +:0106200000d9 +:0106210000d8 +:0106220000d7 +:0106230000d6 +:0106240000d5 +:0106250000d4 +:0106260000d3 +:0106270000d2 +:0106280000d1 +:0106290000d0 +:01062a0000cf +:01062b0000ce +:01062c0000cd +:01062d0000cc +:01062e0000cb +:01062f0000ca +:0106300000c9 +:0106310000c8 +:0106320000c7 +:0106330000c6 +:0106340000c5 +:0106350000c4 +:0106360000c3 +:0106370000c2 +:0106380000c1 +:0106390000c0 +:01063a0000bf +:01063b0000be +:01063c0000bd +:01063d0000bc +:01063e0000bb +:01063f00902a +:0106400003b6 +:0106410000b8 +:0106420000b7 +:0106430000b6 +:0106440000b5 +:0106450000b4 +:0106460000b3 +:0106470000b2 +:0106480000b1 +:0106490000b0 +:01064a0000af +:01064b0000ae +:01064c0000ad +:01064d0000ac +:01064e0000ab +:01064f0000aa +:0106500000a9 +:0106510000a8 +:0106520000a7 +:0106530000a6 +:0106540000a5 +:0106550000a4 +:0106560000a3 +:0106570000a2 +:0106580000a1 +:0106590000a0 +:01065a00009f +:01065b00009e +:01065c00009d +:01065d00009c +:01065e00009b +:01065f00009a +:010660000099 +:010661000098 +:010662000097 +:010663000096 +:010664000095 +:010665000094 +:010666000093 +:010667000092 +:010668000091 +:010669000090 +:01066a00008f +:01066b00008e +:01066c00008d +:01066d00008c +:01066e00008b +:01066f00008a +:010670000089 +:010671000088 +:010672000087 +:010673000086 +:010674000085 +:010675000084 +:010676000083 +:010677000082 +:010678000081 +:010679000080 +:01067a00007f +:01067b00007e +:01067c00007d +:01067d00007c +:01067e00007b +:01067f0090ea +:010680000376 +:010681000078 +:010682000077 +:010683000076 +:010684000075 +:010685000074 +:010686000073 +:010687000072 +:010688000071 +:010689000070 +:01068a00006f +:01068b00006e +:01068c00006d +:01068d00006c +:01068e00006b +:01068f00006a +:010690000069 +:010691000068 +:010692000067 +:010693000066 +:010694000065 +:010695000064 +:010696000063 +:010697000062 +:010698000061 +:010699000060 +:01069a00005f +:01069b00005e +:01069c00005d +:01069d00005c +:01069e00005b +:01069f00005a +:0106a0000059 +:0106a1000058 +:0106a2000057 +:0106a3000056 +:0106a4000055 +:0106a5000054 +:0106a6000053 +:0106a7000052 +:0106a8000051 +:0106a9000050 +:0106aa00004f +:0106ab00004e +:0106ac00004d +:0106ad00004c +:0106ae00004b +:0106af00004a +:0106b0000049 +:0106b1000048 +:0106b2000047 +:0106b3000046 +:0106b4000045 +:0106b5000044 +:0106b6000043 +:0106b7000042 +:0106b8000041 +:0106b9000040 +:0106ba00003f +:0106bb00003e +:0106bc00003d +:0106bd00003c +:0106be00003b +:0106bf0090aa +:0106c0000336 +:0106c1000038 +:0106c2000037 +:0106c3000036 +:0106c4000035 +:0106c5000034 +:0106c6000033 +:0106c7000032 +:0106c8000031 +:0106c9000030 +:0106ca00002f +:0106cb00002e +:0106cc00002d +:0106cd00002c +:0106ce00002b +:0106cf00002a +:0106d0000029 +:0106d1000028 +:0106d2000027 +:0106d3000026 +:0106d4000025 +:0106d5000024 +:0106d6000023 +:0106d7000022 +:0106d8000021 +:0106d9000020 +:0106da00001f +:0106db00001e +:0106dc00001d +:0106dd00001c +:0106de00001b +:0106df00001a +:0106e0000019 +:0106e1000018 +:0106e2000017 +:0106e3000016 +:0106e4000015 +:0106e5000014 +:0106e6000013 +:0106e7000012 +:0106e8000011 +:0106e9000010 +:0106ea00000f +:0106eb00000e +:0106ec00000d +:0106ed00000c +:0106ee00000b +:0106ef00000a +:0106f0000009 +:0106f1000008 +:0106f2000007 +:0106f3000006 +:0106f4000005 +:0106f5000004 +:0106f6000003 +:0106f7000002 +:0106f8000001 +:0106f9000000 +:0106fa0000ff +:0106fb0000fe +:0106fc0000fd +:0106fd0000fc +:0106fe0000fb +:0106ff00906a +:0107000003f5 +:0107010000f7 +:0107020000f6 +:0107030000f5 +:0107040000f4 +:0107050000f3 +:0107060000f2 +:0107070000f1 +:0107080000f0 +:0107090000ef +:01070a0000ee +:01070b0000ed +:01070c0000ec +:01070d0000eb +:01070e0000ea +:01070f0000e9 +:0107100000e8 +:0107110000e7 +:0107120000e6 +:0107130000e5 +:0107140000e4 +:0107150000e3 +:0107160000e2 +:0107170000e1 +:0107180000e0 +:0107190000df +:01071a0000de +:01071b0000dd +:01071c0000dc +:01071d0000db +:01071e0000da +:01071f0000d9 +:0107200000d8 +:0107210000d7 +:0107220000d6 +:0107230000d5 +:0107240000d4 +:0107250000d3 +:0107260000d2 +:0107270000d1 +:0107280000d0 +:0107290000cf +:01072a0000ce +:01072b0000cd +:01072c0000cc +:01072d0000cb +:01072e0000ca +:01072f0000c9 +:0107300000c8 +:0107310000c7 +:0107320000c6 +:0107330000c5 +:0107340000c4 +:0107350000c3 +:0107360000c2 +:0107370000c1 +:0107380000c0 +:0107390000bf +:01073a0000be +:01073b0000bd +:01073c0000bc +:01073d0000bb +:01073e0000ba +:01073f009029 +:0107400003b5 +:0107410000b7 +:0107420000b6 +:0107430000b5 +:0107440000b4 +:0107450000b3 +:0107460000b2 +:0107470000b1 +:0107480000b0 +:0107490000af +:01074a0000ae +:01074b0000ad +:01074c0000ac +:01074d0000ab +:01074e0000aa +:01074f0000a9 +:0107500000a8 +:0107510000a7 +:0107520000a6 +:0107530000a5 +:0107540000a4 +:0107550000a3 +:0107560000a2 +:0107570000a1 +:0107580000a0 +:01075900009f +:01075a00009e +:01075b00009d +:01075c00009c +:01075d00009b +:01075e00009a +:01075f000099 +:010760000098 +:010761000097 +:010762000096 +:010763000095 +:010764000094 +:010765000093 +:010766000092 +:010767000091 +:010768000090 +:01076900008f +:01076a00008e +:01076b00008d +:01076c00008c +:01076d00008b +:01076e00008a +:01076f000089 +:010770000088 +:010771000087 +:010772000086 +:010773000085 +:010774000084 +:010775000083 +:010776000082 +:010777000081 +:010778000080 +:01077900007f +:01077a00007e +:01077b00007d +:01077c00007c +:01077d00007b +:01077e00007a +:01077f0090e9 +:010780000375 +:010781000077 +:010782000076 +:010783000075 +:010784000074 +:010785000073 +:010786000072 +:010787000071 +:010788000070 +:01078900006f +:01078a00006e +:01078b00006d +:01078c00006c +:01078d00006b +:01078e00006a +:01078f000069 +:010790000068 +:010791000067 +:010792000066 +:010793000065 +:010794000064 +:010795000063 +:010796000062 +:010797000061 +:010798000060 +:01079900005f +:01079a00005e +:01079b00005d +:01079c00005c +:01079d00005b +:01079e00005a +:01079f000059 +:0107a0000058 +:0107a1000057 +:0107a2000056 +:0107a3000055 +:0107a4000054 +:0107a5000053 +:0107a6000052 +:0107a7000051 +:0107a8000050 +:0107a900004f +:0107aa00004e +:0107ab00004d +:0107ac00004c +:0107ad00004b +:0107ae00004a +:0107af000049 +:0107b0000048 +:0107b1000047 +:0107b2000046 +:0107b3000045 +:0107b4000044 +:0107b5000043 +:0107b6000042 +:0107b7000041 +:0107b8000040 +:0107b900003f +:0107ba00003e +:0107bb00003d +:0107bc00003c +:0107bd00003b +:0107be00003a +:0107bf0090a9 +:0107c0000335 +:0107c1000037 +:0107c2000036 +:0107c3000035 +:0107c4000034 +:0107c5000033 +:0107c6000032 +:0107c7000031 +:0107c8000030 +:0107c900002f +:0107ca00002e +:0107cb00002d +:0107cc00002c +:0107cd00002b +:0107ce00002a +:0107cf000029 +:0107d0000028 +:0107d1000027 +:0107d2000026 +:0107d3000025 +:0107d4000024 +:0107d5000023 +:0107d6000022 +:0107d7000021 +:0107d8000020 +:0107d900001f +:0107da00001e +:0107db00001d +:0107dc00001c +:0107dd00001b +:0107de00001a +:0107df000019 +:0107e0000018 +:0107e1000017 +:0107e2000016 +:0107e3000015 +:0107e4000014 +:0107e5000013 +:0107e6000012 +:0107e7000011 +:0107e8000010 +:0107e900000f +:0107ea00000e +:0107eb00000d +:0107ec00000c +:0107ed00000b +:0107ee00000a +:0107ef000009 +:0107f0000008 +:0107f1000007 +:0107f2000006 +:0107f3000005 +:0107f4000004 +:0107f5000003 +:0107f6000002 +:0107f7000001 +:0107f8000000 +:0107f90000ff +:0107fa0000fe +:0107fb0000fd +:0107fc0000fc +:0107fd0000fb +:0107fe0000fa +:0107ff009069 +:0108000003f4 +:0108010000f6 +:0108020000f5 +:0108030000f4 +:0108040000f3 +:0108050000f2 +:0108060000f1 +:0108070000f0 +:0108080000ef +:0108090000ee +:01080a0000ed +:01080b0000ec +:01080c0000eb +:01080d0000ea +:01080e0000e9 +:01080f0000e8 +:0108100000e7 +:0108110000e6 +:0108120000e5 +:0108130000e4 +:0108140000e3 +:0108150000e2 +:0108160000e1 +:0108170000e0 +:0108180000df +:0108190000de +:01081a0000dd +:01081b0000dc +:01081c0000db +:01081d0000da +:01081e0000d9 +:01081f0000d8 +:0108200000d7 +:0108210000d6 +:0108220000d5 +:0108230000d4 +:0108240000d3 +:0108250000d2 +:0108260000d1 +:0108270000d0 +:0108280000cf +:0108290000ce +:01082a0000cd +:01082b0000cc +:01082c0000cb +:01082d0000ca +:01082e0000c9 +:01082f0000c8 +:0108300000c7 +:0108310000c6 +:0108320000c5 +:0108330000c4 +:0108340000c3 +:0108350000c2 +:0108360000c1 +:0108370000c0 +:0108380000bf +:0108390000be +:01083a0000bd +:01083b0000bc +:01083c0000bb +:01083d0000ba +:01083e0000b9 +:01083f009028 +:0108400003b4 +:0108410000b6 +:0108420000b5 +:0108430000b4 +:0108440000b3 +:0108450000b2 +:0108460000b1 +:0108470000b0 +:0108480000af +:0108490000ae +:01084a0000ad +:01084b0000ac +:01084c0000ab +:01084d0000aa +:01084e0000a9 +:01084f0000a8 +:0108500000a7 +:0108510000a6 +:0108520000a5 +:0108530000a4 +:0108540000a3 +:0108550000a2 +:0108560000a1 +:0108570000a0 +:01085800009f +:01085900009e +:01085a00009d +:01085b00009c +:01085c00009b +:01085d00009a +:01085e000099 +:01085f000098 +:010860000097 +:010861000096 +:010862000095 +:010863000094 +:010864000093 +:010865000092 +:010866000091 +:010867000090 +:01086800008f +:01086900008e +:01086a00008d +:01086b00008c +:01086c00008b +:01086d00008a +:01086e000089 +:01086f000088 +:010870000087 +:010871000086 +:010872000085 +:010873000084 +:010874000083 +:010875000082 +:010876000081 +:010877000080 +:01087800007f +:01087900007e +:01087a00007d +:01087b00007c +:01087c00007b +:01087d00007a +:01087e000079 +:01087f0090e8 +:010880000374 +:010881000076 +:010882000075 +:010883000074 +:010884000073 +:010885000072 +:010886000071 +:010887000070 +:01088800006f +:01088900006e +:01088a00006d +:01088b00006c +:01088c00006b +:01088d00006a +:01088e000069 +:01088f000068 +:010890000067 +:010891000066 +:010892000065 +:010893000064 +:010894000063 +:010895000062 +:010896000061 +:010897000060 +:01089800005f +:01089900005e +:01089a00005d +:01089b00005c +:01089c00005b +:01089d00005a +:01089e000059 +:01089f000058 +:0108a0000057 +:0108a1000056 +:0108a2000055 +:0108a3000054 +:0108a4000053 +:0108a5000052 +:0108a6000051 +:0108a7000050 +:0108a800004f +:0108a900004e +:0108aa00004d +:0108ab00004c +:0108ac00004b +:0108ad00004a +:0108ae000049 +:0108af000048 +:0108b0000047 +:0108b1000046 +:0108b2000045 +:0108b3000044 +:0108b4000043 +:0108b5000042 +:0108b6000041 +:0108b7000040 +:0108b800003f +:0108b900003e +:0108ba00003d +:0108bb00003c +:0108bc00003b +:0108bd00003a +:0108be000039 +:0108bf0090a8 +:0108c0000334 +:0108c1000036 +:0108c2000035 +:0108c3000034 +:0108c4000033 +:0108c5000032 +:0108c6000031 +:0108c7000030 +:0108c800002f +:0108c900002e +:0108ca00002d +:0108cb00002c +:0108cc00002b +:0108cd00002a +:0108ce000029 +:0108cf000028 +:0108d0000027 +:0108d1000026 +:0108d2000025 +:0108d3000024 +:0108d4000023 +:0108d5000022 +:0108d6000021 +:0108d7000020 +:0108d800001f +:0108d900001e +:0108da00001d +:0108db00001c +:0108dc00001b +:0108dd00001a +:0108de000019 +:0108df000018 +:0108e0000017 +:0108e1000016 +:0108e2000015 +:0108e3000014 +:0108e4000013 +:0108e5000012 +:0108e6000011 +:0108e7000010 +:0108e800000f +:0108e900000e +:0108ea00000d +:0108eb00000c +:0108ec00000b +:0108ed00000a +:0108ee000009 +:0108ef000008 +:0108f0000007 +:0108f1000006 +:0108f2000005 +:0108f3000004 +:0108f4000003 +:0108f5000002 +:0108f6000001 +:0108f7000000 +:0108f80000ff +:0108f90000fe +:0108fa0000fd +:0108fb0000fc +:0108fc0000fb +:0108fd0000fa +:0108fe0000f9 +:0108ff009068 +:0109000003f3 +:0109010000f5 +:0109020000f4 +:0109030000f3 +:0109040000f2 +:0109050000f1 +:0109060000f0 +:0109070000ef +:0109080000ee +:0109090000ed +:01090a0000ec +:01090b0000eb +:01090c0000ea +:01090d0000e9 +:01090e0000e8 +:01090f0000e7 +:0109100000e6 +:0109110000e5 +:0109120000e4 +:0109130000e3 +:0109140000e2 +:0109150000e1 +:0109160000e0 +:0109170000df +:0109180000de +:0109190000dd +:01091a0000dc +:01091b0000db +:01091c0000da +:01091d0000d9 +:01091e0000d8 +:01091f0000d7 +:0109200000d6 +:0109210000d5 +:0109220000d4 +:0109230000d3 +:0109240000d2 +:0109250000d1 +:0109260000d0 +:0109270000cf +:0109280000ce +:0109290000cd +:01092a0000cc +:01092b0000cb +:01092c0000ca +:01092d0000c9 +:01092e0000c8 +:01092f0000c7 +:0109300000c6 +:0109310000c5 +:0109320000c4 +:0109330000c3 +:0109340000c2 +:0109350000c1 +:0109360000c0 +:0109370000bf +:0109380000be +:0109390000bd +:01093a0000bc +:01093b0000bb +:01093c0000ba +:01093d0000b9 +:01093e0000b8 +:01093f009027 +:0109400003b3 +:0109410000b5 +:0109420000b4 +:0109430000b3 +:0109440000b2 +:0109450000b1 +:0109460000b0 +:0109470000af +:0109480000ae +:0109490000ad +:01094a0000ac +:01094b0000ab +:01094c0000aa +:01094d0000a9 +:01094e0000a8 +:01094f0000a7 +:0109500000a6 +:0109510000a5 +:0109520000a4 +:0109530000a3 +:0109540000a2 +:0109550000a1 +:0109560000a0 +:01095700009f +:01095800009e +:01095900009d +:01095a00009c +:01095b00009b +:01095c00009a +:01095d000099 +:01095e000098 +:01095f000097 +:010960000096 +:010961000095 +:010962000094 +:010963000093 +:010964000092 +:010965000091 +:010966000090 +:01096700008f +:01096800008e +:01096900008d +:01096a00008c +:01096b00008b +:01096c00008a +:01096d000089 +:01096e000088 +:01096f000087 +:010970000086 +:010971000085 +:010972000084 +:010973000083 +:010974000082 +:010975000081 +:010976000080 +:01097700007f +:01097800007e +:01097900007d +:01097a00007c +:01097b00007b +:01097c00007a +:01097d000079 +:01097e000078 +:01097f0090e7 +:010980000373 +:010981000075 +:010982000074 +:010983000073 +:010984000072 +:010985000071 +:010986000070 +:01098700006f +:01098800006e +:01098900006d +:01098a00006c +:01098b00006b +:01098c00006a +:01098d000069 +:01098e000068 +:01098f000067 +:010990000066 +:010991000065 +:010992000064 +:010993000063 +:010994000062 +:010995000061 +:010996000060 +:01099700005f +:01099800005e +:01099900005d +:01099a00005c +:01099b00005b +:01099c00005a +:01099d000059 +:01099e000058 +:01099f000057 +:0109a0000056 +:0109a1000055 +:0109a2000054 +:0109a3000053 +:0109a4000052 +:0109a5000051 +:0109a6000050 +:0109a700004f +:0109a800004e +:0109a900004d +:0109aa00004c +:0109ab00004b +:0109ac00004a +:0109ad000049 +:0109ae000048 +:0109af000047 +:0109b0000046 +:0109b1000045 +:0109b2000044 +:0109b3000043 +:0109b4000042 +:0109b5000041 +:0109b6000040 +:0109b700003f +:0109b800003e +:0109b900003d +:0109ba00003c +:0109bb00003b +:0109bc00003a +:0109bd000039 +:0109be000038 +:0109bf0090a7 +:0109c0000333 +:0109c1000035 +:0109c2000034 +:0109c3000033 +:0109c4000032 +:0109c5000031 +:0109c6000030 +:0109c700002f +:0109c800002e +:0109c900002d +:0109ca00002c +:0109cb00002b +:0109cc00002a +:0109cd000029 +:0109ce000028 +:0109cf000027 +:0109d0000026 +:0109d1000025 +:0109d2000024 +:0109d3000023 +:0109d4000022 +:0109d5000021 +:0109d6000020 +:0109d700001f +:0109d800001e +:0109d900001d +:0109da00001c +:0109db00001b +:0109dc00001a +:0109dd000019 +:0109de000018 +:0109df000017 +:0109e0000016 +:0109e1000015 +:0109e2000014 +:0109e3000013 +:0109e4000012 +:0109e5000011 +:0109e6000010 +:0109e700000f +:0109e800000e +:0109e900000d +:0109ea00000c +:0109eb00000b +:0109ec00000a +:0109ed000009 +:0109ee000008 +:0109ef000007 +:0109f0000006 +:0109f1000005 +:0109f2000004 +:0109f3000003 +:0109f4000002 +:0109f5000001 +:0109f6000000 +:0109f70000ff +:0109f80000fe +:0109f90000fd +:0109fa0000fc +:0109fb0000fb +:0109fc0000fa +:0109fd0000f9 +:0109fe0000f8 +:0109ff009067 +:010a000003f2 +:010a010000f4 +:010a020000f3 +:010a030000f2 +:010a040000f1 +:010a050000f0 +:010a060000ef +:010a070000ee +:010a080000ed +:010a090000ec +:010a0a0000eb +:010a0b0000ea +:010a0c0000e9 +:010a0d0000e8 +:010a0e0000e7 +:010a0f0000e6 +:010a100000e5 +:010a110000e4 +:010a120000e3 +:010a130000e2 +:010a140000e1 +:010a150000e0 +:010a160000df +:010a170000de +:010a180000dd +:010a190000dc +:010a1a0000db +:010a1b0000da +:010a1c0000d9 +:010a1d0000d8 +:010a1e0000d7 +:010a1f0000d6 +:010a200000d5 +:010a210000d4 +:010a220000d3 +:010a230000d2 +:010a240000d1 +:010a250000d0 +:010a260000cf +:010a270000ce +:010a280000cd +:010a290000cc +:010a2a0000cb +:010a2b0000ca +:010a2c0000c9 +:010a2d0000c8 +:010a2e0000c7 +:010a2f0000c6 +:010a300000c5 +:010a310000c4 +:010a320000c3 +:010a330000c2 +:010a340000c1 +:010a350000c0 +:010a360000bf +:010a370000be +:010a380000bd +:010a390000bc +:010a3a0000bb +:010a3b0000ba +:010a3c0000b9 +:010a3d0000b8 +:010a3e0000b7 +:010a3f009026 +:010a400003b2 +:010a410000b4 +:010a420000b3 +:010a430000b2 +:010a440000b1 +:010a450000b0 +:010a460000af +:010a470000ae +:010a480000ad +:010a490000ac +:010a4a0000ab +:010a4b0000aa +:010a4c0000a9 +:010a4d0000a8 +:010a4e0000a7 +:010a4f0000a6 +:010a500000a5 +:010a510000a4 +:010a520000a3 +:010a530000a2 +:010a540000a1 +:010a550000a0 +:010a5600009f +:010a5700009e +:010a5800009d +:010a5900009c +:010a5a00009b +:010a5b00009a +:010a5c000099 +:010a5d000098 +:010a5e000097 +:010a5f000096 +:010a60000095 +:010a61000094 +:010a62000093 +:010a63000092 +:010a64000091 +:010a65000090 +:010a6600008f +:010a6700008e +:010a6800008d +:010a6900008c +:010a6a00008b +:010a6b00008a +:010a6c000089 +:010a6d000088 +:010a6e000087 +:010a6f000086 +:010a70000085 +:010a71000084 +:010a72000083 +:010a73000082 +:010a74000081 +:010a75000080 +:010a7600007f +:010a7700007e +:010a7800007d +:010a7900007c +:010a7a00007b +:010a7b00007a +:010a7c000079 +:010a7d000078 +:010a7e000077 +:010a7f0090e6 +:010a80000372 +:010a81000074 +:010a82000073 +:010a83000072 +:010a84000071 +:010a85000070 +:010a8600006f +:010a8700006e +:010a8800006d +:010a8900006c +:010a8a00006b +:010a8b00006a +:010a8c000069 +:010a8d000068 +:010a8e000067 +:010a8f000066 +:010a90000065 +:010a91000064 +:010a92000063 +:010a93000062 +:010a94000061 +:010a95000060 +:010a9600005f +:010a9700005e +:010a9800005d +:010a9900005c +:010a9a00005b +:010a9b00005a +:010a9c000059 +:010a9d000058 +:010a9e000057 +:010a9f000056 +:010aa0000055 +:010aa1000054 +:010aa2000053 +:010aa3000052 +:010aa4000051 +:010aa5000050 +:010aa600004f +:010aa700004e +:010aa800004d +:010aa900004c +:010aaa00004b +:010aab00004a +:010aac000049 +:010aad000048 +:010aae000047 +:010aaf000046 +:010ab0000045 +:010ab1000044 +:010ab2000043 +:010ab3000042 +:010ab4000041 +:010ab5000040 +:010ab600003f +:010ab700003e +:010ab800003d +:010ab900003c +:010aba00003b +:010abb00003a +:010abc000039 +:010abd000038 +:010abe000037 +:010abf0090a6 +:010ac0000332 +:010ac1000034 +:010ac2000033 +:010ac3000032 +:010ac4000031 +:010ac5000030 +:010ac600002f +:010ac700002e +:010ac800002d +:010ac900002c +:010aca00002b +:010acb00002a +:010acc000029 +:010acd000028 +:010ace000027 +:010acf000026 +:010ad0000025 +:010ad1000024 +:010ad2000023 +:010ad3000022 +:010ad4000021 +:010ad5000020 +:010ad600001f +:010ad700001e +:010ad800001d +:010ad900001c +:010ada00001b +:010adb00001a +:010adc000019 +:010add000018 +:010ade000017 +:010adf000016 +:010ae0000015 +:010ae1000014 +:010ae2000013 +:010ae3000012 +:010ae4000011 +:010ae5000010 +:010ae600000f +:010ae700000e +:010ae800000d +:010ae900000c +:010aea00000b +:010aeb00000a +:010aec000009 +:010aed000008 +:010aee000007 +:010aef000006 +:010af0000005 +:010af1000004 +:010af2000003 +:010af3000002 +:010af4000001 +:010af5000000 +:010af60000ff +:010af70000fe +:010af80000fd +:010af90000fc +:010afa0000fb +:010afb0000fa +:010afc0000f9 +:010afd0000f8 +:010afe0000f7 +:010aff009066 +:010b000003f1 +:010b010000f3 +:010b020000f2 +:010b030000f1 +:010b040000f0 +:010b050000ef +:010b060000ee +:010b070000ed +:010b080000ec +:010b090000eb +:010b0a0000ea +:010b0b0000e9 +:010b0c0000e8 +:010b0d0000e7 +:010b0e0000e6 +:010b0f0000e5 +:010b100000e4 +:010b110000e3 +:010b120000e2 +:010b130000e1 +:010b140000e0 +:010b150000df +:010b160000de +:010b170000dd +:010b180000dc +:010b190000db +:010b1a0000da +:010b1b0000d9 +:010b1c0000d8 +:010b1d0000d7 +:010b1e0000d6 +:010b1f0000d5 +:010b200000d4 +:010b210000d3 +:010b220000d2 +:010b230000d1 +:010b240000d0 +:010b250000cf +:010b260000ce +:010b270000cd +:010b280000cc +:010b290000cb +:010b2a0000ca +:010b2b0000c9 +:010b2c0000c8 +:010b2d0000c7 +:010b2e0000c6 +:010b2f0000c5 +:010b300000c4 +:010b310000c3 +:010b320000c2 +:010b330000c1 +:010b340000c0 +:010b350000bf +:010b360000be +:010b370000bd +:010b380000bc +:010b390000bb +:010b3a0000ba +:010b3b0000b9 +:010b3c0000b8 +:010b3d0000b7 +:010b3e0000b6 +:010b3f009025 +:010b400003b1 +:010b410000b3 +:010b420000b2 +:010b430000b1 +:010b440000b0 +:010b450000af +:010b460000ae +:010b470000ad +:010b480000ac +:010b490000ab +:010b4a0000aa +:010b4b0000a9 +:010b4c0000a8 +:010b4d0000a7 +:010b4e0000a6 +:010b4f0000a5 +:010b500000a4 +:010b510000a3 +:010b520000a2 +:010b530000a1 +:010b540000a0 +:010b5500009f +:010b5600009e +:010b5700009d +:010b5800009c +:010b5900009b +:010b5a00009a +:010b5b000099 +:010b5c000098 +:010b5d000097 +:010b5e000096 +:010b5f000095 +:010b60000094 +:010b61000093 +:010b62000092 +:010b63000091 +:010b64000090 +:010b6500008f +:010b6600008e +:010b6700008d +:010b6800008c +:010b6900008b +:010b6a00008a +:010b6b000089 +:010b6c000088 +:010b6d000087 +:010b6e000086 +:010b6f000085 +:010b70000084 +:010b71000083 +:010b72000082 +:010b73000081 +:010b74000080 +:010b7500007f +:010b7600007e +:010b7700007d +:010b7800007c +:010b7900007b +:010b7a00007a +:010b7b000079 +:010b7c000078 +:010b7d000077 +:010b7e000076 +:010b7f0090e5 +:010b80000371 +:010b81000073 +:010b82000072 +:010b83000071 +:010b84000070 +:010b8500006f +:010b8600006e +:010b8700006d +:010b8800006c +:010b8900006b +:010b8a00006a +:010b8b000069 +:010b8c000068 +:010b8d000067 +:010b8e000066 +:010b8f000065 +:010b90000064 +:010b91000063 +:010b92000062 +:010b93000061 +:010b94000060 +:010b9500005f +:010b9600005e +:010b9700005d +:010b9800005c +:010b9900005b +:010b9a00005a +:010b9b000059 +:010b9c000058 +:010b9d000057 +:010b9e000056 +:010b9f000055 +:010ba0000054 +:010ba1000053 +:010ba2000052 +:010ba3000051 +:010ba4000050 +:010ba500004f +:010ba600004e +:010ba700004d +:010ba800004c +:010ba900004b +:010baa00004a +:010bab000049 +:010bac000048 +:010bad000047 +:010bae000046 +:010baf000045 +:010bb0000044 +:010bb1000043 +:010bb2000042 +:010bb3000041 +:010bb4000040 +:010bb500003f +:010bb600003e +:010bb700003d +:010bb800003c +:010bb900003b +:010bba00003a +:010bbb000039 +:010bbc000038 +:010bbd000037 +:010bbe000036 +:010bbf0090a5 +:010bc0000331 +:010bc1000033 +:010bc2000032 +:010bc3000031 +:010bc4000030 +:010bc500002f +:010bc600002e +:010bc700002d +:010bc800002c +:010bc900002b +:010bca00002a +:010bcb000029 +:010bcc000028 +:010bcd000027 +:010bce000026 +:010bcf000025 +:010bd0000024 +:010bd1000023 +:010bd2000022 +:010bd3000021 +:010bd4000020 +:010bd500001f +:010bd600001e +:010bd700001d +:010bd800001c +:010bd900001b +:010bda00001a +:010bdb000019 +:010bdc000018 +:010bdd000017 +:010bde000016 +:010bdf000015 +:010be0000014 +:010be1000013 +:010be2000012 +:010be3000011 +:010be4000010 +:010be500000f +:010be600000e +:010be700000d +:010be800000c +:010be900000b +:010bea00000a +:010beb000009 +:010bec000008 +:010bed000007 +:010bee000006 +:010bef000005 +:010bf0000004 +:010bf1000003 +:010bf2000002 +:010bf3000001 +:010bf4000000 +:010bf50000ff +:010bf60000fe +:010bf70000fd +:010bf80000fc +:010bf90000fb +:010bfa0000fa +:010bfb0000f9 +:010bfc0000f8 +:010bfd0000f7 +:010bfe0000f6 +:010bff009065 +:010c000003f0 +:010c010000f2 +:010c020000f1 +:010c030000f0 +:010c040000ef +:010c050000ee +:010c060000ed +:010c070000ec +:010c080000eb +:010c090000ea +:010c0a0000e9 +:010c0b0000e8 +:010c0c0000e7 +:010c0d0000e6 +:010c0e0000e5 +:010c0f0000e4 +:010c100000e3 +:010c110000e2 +:010c120000e1 +:010c130000e0 +:010c140000df +:010c150000de +:010c160000dd +:010c170000dc +:010c180000db +:010c190000da +:010c1a0000d9 +:010c1b0000d8 +:010c1c0000d7 +:010c1d0000d6 +:010c1e0000d5 +:010c1f0000d4 +:010c200000d3 +:010c210000d2 +:010c220000d1 +:010c230000d0 +:010c240000cf +:010c250000ce +:010c260000cd +:010c270000cc +:010c280000cb +:010c290000ca +:010c2a0000c9 +:010c2b0000c8 +:010c2c0000c7 +:010c2d0000c6 +:010c2e0000c5 +:010c2f0000c4 +:010c300000c3 +:010c310000c2 +:010c320000c1 +:010c330000c0 +:010c340000bf +:010c350000be +:010c360000bd +:010c370000bc +:010c380000bb +:010c390000ba +:010c3a0000b9 +:010c3b0000b8 +:010c3c0000b7 +:010c3d0000b6 +:010c3e0000b5 +:010c3f009024 +:010c400003b0 +:010c410000b2 +:010c420000b1 +:010c430000b0 +:010c440000af +:010c450000ae +:010c460000ad +:010c470000ac +:010c480000ab +:010c490000aa +:010c4a0000a9 +:010c4b0000a8 +:010c4c0000a7 +:010c4d0000a6 +:010c4e0000a5 +:010c4f0000a4 +:010c500000a3 +:010c510000a2 +:010c520000a1 +:010c530000a0 +:010c5400009f +:010c5500009e +:010c5600009d +:010c5700009c +:010c5800009b +:010c5900009a +:010c5a000099 +:010c5b000098 +:010c5c000097 +:010c5d000096 +:010c5e000095 +:010c5f000094 +:010c60000093 +:010c61000092 +:010c62000091 +:010c63000090 +:010c6400008f +:010c6500008e +:010c6600008d +:010c6700008c +:010c6800008b +:010c6900008a +:010c6a000089 +:010c6b000088 +:010c6c000087 +:010c6d000086 +:010c6e000085 +:010c6f000084 +:010c70000083 +:010c71000082 +:010c72000081 +:010c73000080 +:010c7400007f +:010c7500007e +:010c7600007d +:010c7700007c +:010c7800007b +:010c7900007a +:010c7a000079 +:010c7b000078 +:010c7c000077 +:010c7d000076 +:010c7e000075 +:010c7f0090e4 +:010c80000370 +:010c81000072 +:010c82000071 +:010c83000070 +:010c8400006f +:010c8500006e +:010c8600006d +:010c8700006c +:010c8800006b +:010c8900006a +:010c8a000069 +:010c8b000068 +:010c8c000067 +:010c8d000066 +:010c8e000065 +:010c8f000064 +:010c90000063 +:010c91000062 +:010c92000061 +:010c93000060 +:010c9400005f +:010c9500005e +:010c9600005d +:010c9700005c +:010c9800005b +:010c9900005a +:010c9a000059 +:010c9b000058 +:010c9c000057 +:010c9d000056 +:010c9e000055 +:010c9f000054 +:010ca0000053 +:010ca1000052 +:010ca2000051 +:010ca3000050 +:010ca400004f +:010ca500004e +:010ca600004d +:010ca700004c +:010ca800004b +:010ca900004a +:010caa000049 +:010cab000048 +:010cac000047 +:010cad000046 +:010cae000045 +:010caf000044 +:010cb0000043 +:010cb1000042 +:010cb2000041 +:010cb3000040 +:010cb400003f +:010cb500003e +:010cb600003d +:010cb700003c +:010cb800003b +:010cb900003a +:010cba000039 +:010cbb000038 +:010cbc000037 +:010cbd000036 +:010cbe000035 +:010cbf0090a4 +:010cc0000330 +:010cc1000032 +:010cc2000031 +:010cc3000030 +:010cc400002f +:010cc500002e +:010cc600002d +:010cc700002c +:010cc800002b +:010cc900002a +:010cca000029 +:010ccb000028 +:010ccc000027 +:010ccd000026 +:010cce000025 +:010ccf000024 +:010cd0000023 +:010cd1000022 +:010cd2000021 +:010cd3000020 +:010cd400001f +:010cd500001e +:010cd600001d +:010cd700001c +:010cd800001b +:010cd900001a +:010cda000019 +:010cdb000018 +:010cdc000017 +:010cdd000016 +:010cde000015 +:010cdf000014 +:010ce0000013 +:010ce1000012 +:010ce2000011 +:010ce3000010 +:010ce400000f +:010ce500000e +:010ce600000d +:010ce700000c +:010ce800000b +:010ce900000a +:010cea000009 +:010ceb000008 +:010cec000007 +:010ced000006 +:010cee000005 +:010cef000004 +:010cf0000003 +:010cf1000002 +:010cf2000001 +:010cf3000000 +:010cf40000ff +:010cf50000fe +:010cf60000fd +:010cf70000fc +:010cf80000fb +:010cf90000fa +:010cfa0000f9 +:010cfb0000f8 +:010cfc0000f7 +:010cfd0000f6 +:010cfe0000f5 +:010cff009064 +:010d000003ef +:010d010000f1 +:010d020000f0 +:010d030000ef +:010d040000ee +:010d050000ed +:010d060000ec +:010d070000eb +:010d080000ea +:010d090000e9 +:010d0a0000e8 +:010d0b0000e7 +:010d0c0000e6 +:010d0d0000e5 +:010d0e0000e4 +:010d0f0000e3 +:010d100000e2 +:010d110000e1 +:010d120000e0 +:010d130000df +:010d140000de +:010d150000dd +:010d160000dc +:010d170000db +:010d180000da +:010d190000d9 +:010d1a0000d8 +:010d1b0000d7 +:010d1c0000d6 +:010d1d0000d5 +:010d1e0000d4 +:010d1f0000d3 +:010d200000d2 +:010d210000d1 +:010d220000d0 +:010d230000cf +:010d240000ce +:010d250000cd +:010d260000cc +:010d270000cb +:010d280000ca +:010d290000c9 +:010d2a0000c8 +:010d2b0000c7 +:010d2c0000c6 +:010d2d0000c5 +:010d2e0000c4 +:010d2f0000c3 +:010d300000c2 +:010d310000c1 +:010d320000c0 +:010d330000bf +:010d340000be +:010d350000bd +:010d360000bc +:010d370000bb +:010d380000ba +:010d390000b9 +:010d3a0000b8 +:010d3b0000b7 +:010d3c0000b6 +:010d3d0000b5 +:010d3e0000b4 +:010d3f009023 +:010d400003af +:010d410000b1 +:010d420000b0 +:010d430000af +:010d440000ae +:010d450000ad +:010d460000ac +:010d470000ab +:010d480000aa +:010d490000a9 +:010d4a0000a8 +:010d4b0000a7 +:010d4c0000a6 +:010d4d0000a5 +:010d4e0000a4 +:010d4f0000a3 +:010d500000a2 +:010d510000a1 +:010d520000a0 +:010d5300009f +:010d5400009e +:010d5500009d +:010d5600009c +:010d5700009b +:010d5800009a +:010d59000099 +:010d5a000098 +:010d5b000097 +:010d5c000096 +:010d5d000095 +:010d5e000094 +:010d5f000093 +:010d60000092 +:010d61000091 +:010d62000090 +:010d6300008f +:010d6400008e +:010d6500008d +:010d6600008c +:010d6700008b +:010d6800008a +:010d69000089 +:010d6a000088 +:010d6b000087 +:010d6c000086 +:010d6d000085 +:010d6e000084 +:010d6f000083 +:010d70000082 +:010d71000081 +:010d72000080 +:010d7300007f +:010d7400007e +:010d7500007d +:010d7600007c +:010d7700007b +:010d7800007a +:010d79000079 +:010d7a000078 +:010d7b000077 +:010d7c000076 +:010d7d000075 +:010d7e000074 +:010d7f0090e3 +:010d8000036f +:010d81000071 +:010d82000070 +:010d8300006f +:010d8400006e +:010d8500006d +:010d8600006c +:010d8700006b +:010d8800006a +:010d89000069 +:010d8a000068 +:010d8b000067 +:010d8c000066 +:010d8d000065 +:010d8e000064 +:010d8f000063 +:010d90000062 +:010d91000061 +:010d92000060 +:010d9300005f +:010d9400005e +:010d9500005d +:010d9600005c +:010d9700005b +:010d9800005a +:010d99000059 +:010d9a000058 +:010d9b000057 +:010d9c000056 +:010d9d000055 +:010d9e000054 +:010d9f000053 +:010da0000052 +:010da1000051 +:010da2000050 +:010da300004f +:010da400004e +:010da500004d +:010da600004c +:010da700004b +:010da800004a +:010da9000049 +:010daa000048 +:010dab000047 +:010dac000046 +:010dad000045 +:010dae000044 +:010daf000043 +:010db0000042 +:010db1000041 +:010db2000040 +:010db300003f +:010db400003e +:010db500003d +:010db600003c +:010db700003b +:010db800003a +:010db9000039 +:010dba000038 +:010dbb000037 +:010dbc000036 +:010dbd000035 +:010dbe000034 +:010dbf0090a3 +:010dc000032f +:010dc1000031 +:010dc2000030 +:010dc300002f +:010dc400002e +:010dc500002d +:010dc600002c +:010dc700002b +:010dc800002a +:010dc9000029 +:010dca000028 +:010dcb000027 +:010dcc000026 +:010dcd000025 +:010dce000024 +:010dcf000023 +:010dd0000022 +:010dd1000021 +:010dd2000020 +:010dd300001f +:010dd400001e +:010dd500001d +:010dd600001c +:010dd700001b +:010dd800001a +:010dd9000019 +:010dda000018 +:010ddb000017 +:010ddc000016 +:010ddd000015 +:010dde000014 +:010ddf000013 +:010de0000012 +:010de1000011 +:010de2000010 +:010de300000f +:010de400000e +:010de500000d +:010de600000c +:010de700000b +:010de800000a +:010de9000009 +:010dea000008 +:010deb000007 +:010dec000006 +:010ded000005 +:010dee000004 +:010def000003 +:010df0000002 +:010df1000001 +:010df2000000 +:010df30000ff +:010df40000fe +:010df50000fd +:010df60000fc +:010df70000fb +:010df80000fa +:010df90000f9 +:010dfa0000f8 +:010dfb0000f7 +:010dfc0000f6 +:010dfd0000f5 +:010dfe0000f4 +:010dff009063 +:010e000003ee +:010e010000f0 +:010e020000ef +:010e030000ee +:010e040000ed +:010e050000ec +:010e060000eb +:010e070000ea +:010e080000e9 +:010e090000e8 +:010e0a0000e7 +:010e0b0000e6 +:010e0c0000e5 +:010e0d0000e4 +:010e0e0000e3 +:010e0f0000e2 +:010e100000e1 +:010e110000e0 +:010e120000df +:010e130000de +:010e140000dd +:010e150000dc +:010e160000db +:010e170000da +:010e180000d9 +:010e190000d8 +:010e1a0000d7 +:010e1b0000d6 +:010e1c0000d5 +:010e1d0000d4 +:010e1e0000d3 +:010e1f0000d2 +:010e200000d1 +:010e210000d0 +:010e220000cf +:010e230000ce +:010e240000cd +:010e250000cc +:010e260000cb +:010e270000ca +:010e280000c9 +:010e290000c8 +:010e2a0000c7 +:010e2b0000c6 +:010e2c0000c5 +:010e2d0000c4 +:010e2e0000c3 +:010e2f0000c2 +:010e300000c1 +:010e310000c0 +:010e320000bf +:010e330000be +:010e340000bd +:010e350000bc +:010e360000bb +:010e370000ba +:010e380000b9 +:010e390000b8 +:010e3a0000b7 +:010e3b0000b6 +:010e3c0000b5 +:010e3d0000b4 +:010e3e0000b3 +:010e3f009022 +:010e400003ae +:010e410000b0 +:010e420000af +:010e430000ae +:010e440000ad +:010e450000ac +:010e460000ab +:010e470000aa +:010e480000a9 +:010e490000a8 +:010e4a0000a7 +:010e4b0000a6 +:010e4c0000a5 +:010e4d0000a4 +:010e4e0000a3 +:010e4f0000a2 +:010e500000a1 +:010e510000a0 +:010e5200009f +:010e5300009e +:010e5400009d +:010e5500009c +:010e5600009b +:010e5700009a +:010e58000099 +:010e59000098 +:010e5a000097 +:010e5b000096 +:010e5c000095 +:010e5d000094 +:010e5e000093 +:010e5f000092 +:010e60000091 +:010e61000090 +:010e6200008f +:010e6300008e +:010e6400008d +:010e6500008c +:010e6600008b +:010e6700008a +:010e68000089 +:010e69000088 +:010e6a000087 +:010e6b000086 +:010e6c000085 +:010e6d000084 +:010e6e000083 +:010e6f000082 +:010e70000081 +:010e71000080 +:010e7200007f +:010e7300007e +:010e7400007d +:010e7500007c +:010e7600007b +:010e7700007a +:010e78000079 +:010e79000078 +:010e7a000077 +:010e7b000076 +:010e7c000075 +:010e7d000074 +:010e7e000073 +:010e7f0090e2 +:010e8000036e +:010e81000070 +:010e8200006f +:010e8300006e +:010e8400006d +:010e8500006c +:010e8600006b +:010e8700006a +:010e88000069 +:010e89000068 +:010e8a000067 +:010e8b000066 +:010e8c000065 +:010e8d000064 +:010e8e000063 +:010e8f000062 +:010e90000061 +:010e91000060 +:010e9200005f +:010e9300005e +:010e9400005d +:010e9500005c +:010e9600005b +:010e9700005a +:010e98000059 +:010e99000058 +:010e9a000057 +:010e9b000056 +:010e9c000055 +:010e9d000054 +:010e9e000053 +:010e9f000052 +:010ea0000051 +:010ea1000050 +:010ea200004f +:010ea300004e +:010ea400004d +:010ea500004c +:010ea600004b +:010ea700004a +:010ea8000049 +:010ea9000048 +:010eaa000047 +:010eab000046 +:010eac000045 +:010ead000044 +:010eae000043 +:010eaf000042 +:010eb0000041 +:010eb1000040 +:010eb200003f +:010eb300003e +:010eb400003d +:010eb500003c +:010eb600003b +:010eb700003a +:010eb8000039 +:010eb9000038 +:010eba000037 +:010ebb000036 +:010ebc000035 +:010ebd000034 +:010ebe000033 +:010ebf0090a2 +:010ec000032e +:010ec1000030 +:010ec200002f +:010ec300002e +:010ec400002d +:010ec500002c +:010ec600002b +:010ec700002a +:010ec8000029 +:010ec9000028 +:010eca000027 +:010ecb000026 +:010ecc000025 +:010ecd000024 +:010ece000023 +:010ecf000022 +:010ed0000021 +:010ed1000020 +:010ed200001f +:010ed300001e +:010ed400001d +:010ed500001c +:010ed600001b +:010ed700001a +:010ed8000019 +:010ed9000018 +:010eda000017 +:010edb000016 +:010edc000015 +:010edd000014 +:010ede000013 +:010edf000012 +:010ee0000011 +:010ee1000010 +:010ee200000f +:010ee300000e +:010ee400000d +:010ee500000c +:010ee600000b +:010ee700000a +:010ee8000009 +:010ee9000008 +:010eea000007 +:010eeb000006 +:010eec000005 +:010eed000004 +:010eee000003 +:010eef000002 +:010ef0000001 +:010ef1000000 +:010ef20000ff +:010ef30000fe +:010ef40000fd +:010ef50000fc +:010ef60000fb +:010ef70000fa +:010ef80000f9 +:010ef90000f8 +:010efa0000f7 +:010efb0000f6 +:010efc0000f5 +:010efd0000f4 +:010efe0000f3 +:010eff009062 +:010f000003ed +:010f010000ef +:010f020000ee +:010f030000ed +:010f040000ec +:010f050000eb +:010f060000ea +:010f070000e9 +:010f080000e8 +:010f090000e7 +:010f0a0000e6 +:010f0b0000e5 +:010f0c0000e4 +:010f0d0000e3 +:010f0e0000e2 +:010f0f0000e1 +:010f100000e0 +:010f110000df +:010f120000de +:010f130000dd +:010f140000dc +:010f150000db +:010f160000da +:010f170000d9 +:010f180000d8 +:010f190000d7 +:010f1a0000d6 +:010f1b0000d5 +:010f1c0000d4 +:010f1d0000d3 +:010f1e0000d2 +:010f1f0000d1 +:010f200000d0 +:010f210000cf +:010f220000ce +:010f230000cd +:010f240000cc +:010f250000cb +:010f260000ca +:010f270000c9 +:010f280000c8 +:010f290000c7 +:010f2a0000c6 +:010f2b0000c5 +:010f2c0000c4 +:010f2d0000c3 +:010f2e0000c2 +:010f2f0000c1 +:010f300000c0 +:010f310000bf +:010f320000be +:010f330000bd +:010f340000bc +:010f350000bb +:010f360000ba +:010f370000b9 +:010f380000b8 +:010f390000b7 +:010f3a0000b6 +:010f3b0000b5 +:010f3c0000b4 +:010f3d0000b3 +:010f3e0000b2 +:010f3f009021 +:010f400003ad +:010f410000af +:010f420000ae +:010f430000ad +:010f440000ac +:010f450000ab +:010f460000aa +:010f470000a9 +:010f480000a8 +:010f490000a7 +:010f4a0000a6 +:010f4b0000a5 +:010f4c0000a4 +:010f4d0000a3 +:010f4e0000a2 +:010f4f0000a1 +:010f500000a0 +:010f5100009f +:010f5200009e +:010f5300009d +:010f5400009c +:010f5500009b +:010f5600009a +:010f57000099 +:010f58000098 +:010f59000097 +:010f5a000096 +:010f5b000095 +:010f5c000094 +:010f5d000093 +:010f5e000092 +:010f5f000091 +:010f60000090 +:010f6100008f +:010f6200008e +:010f6300008d +:010f6400008c +:010f6500008b +:010f6600008a +:010f67000089 +:010f68000088 +:010f69000087 +:010f6a000086 +:010f6b000085 +:010f6c000084 +:010f6d000083 +:010f6e000082 +:010f6f000081 +:010f70000080 +:010f7100007f +:010f7200007e +:010f7300007d +:010f7400007c +:010f7500007b +:010f7600007a +:010f77000079 +:010f78000078 +:010f79000077 +:010f7a000076 +:010f7b000075 +:010f7c000074 +:010f7d000073 +:010f7e000072 +:010f7f0090e1 +:010f8000036d +:010f8100006f +:010f8200006e +:010f8300006d +:010f8400006c +:010f8500006b +:010f8600006a +:010f87000069 +:010f88000068 +:010f89000067 +:010f8a000066 +:010f8b000065 +:010f8c000064 +:010f8d000063 +:010f8e000062 +:010f8f000061 +:010f90000060 +:010f9100005f +:010f9200005e +:010f9300005d +:010f9400005c +:010f9500005b +:010f9600005a +:010f97000059 +:010f98000058 +:010f99000057 +:010f9a000056 +:010f9b000055 +:010f9c000054 +:010f9d000053 +:010f9e000052 +:010f9f000051 +:010fa0000050 +:010fa100004f +:010fa200004e +:010fa300004d +:010fa400004c +:010fa500004b +:010fa600004a +:010fa7000049 +:010fa8000048 +:010fa9000047 +:010faa000046 +:010fab000045 +:010fac000044 +:010fad000043 +:010fae000042 +:010faf000041 +:010fb0000040 +:010fb100003f +:010fb200003e +:010fb300003d +:010fb400003c +:010fb500003b +:010fb600003a +:010fb7000039 +:010fb8000038 +:010fb9000037 +:010fba000036 +:010fbb000035 +:010fbc000034 +:010fbd000033 +:010fbe000032 +:010fbf0090a1 +:010fc000e050 +:010fc100e04f +:010fc200e04e +:010fc300e04d +:010fc400e04c +:010fc500e04b +:010fc600e04a +:010fc700e049 +:010fc800e048 +:010fc900e047 +:010fca00e046 +:010fcb00e045 +:010fcc00e044 +:010fcd00e043 +:010fce00e042 +:010fcf00e041 +:010fd000e040 +:010fd100e03f +:010fd200e03e +:010fd300e03d +:010fd400e03c +:010fd500e03b +:010fd600e03a +:010fd700e039 +:010fd800e038 +:010fd900e037 +:010fda00e036 +:010fdb00e035 +:010fdc00e034 +:010fdd00e033 +:010fde00e032 +:010fdf00e031 +:010fe000e030 +:010fe100e02f +:010fe200e02e +:010fe300e02d +:010fe400e02c +:010fe500e02b +:010fe600e02a +:010fe700e029 +:010fe800e028 +:010fe900e027 +:010fea00e026 +:010feb00e025 +:010fec00e024 +:010fed00e023 +:010fee00e022 +:010fef00e021 +:010ff000e020 +:010ff100e01f +:010ff200e01e +:010ff300e01d +:010ff400e01c +:010ff500e01b +:010ff600e01a +:010ff700e019 +:010ff800e018 +:010ff900e017 +:010ffa00e016 +:010ffb00e015 +:010ffc00e014 +:010ffd00e013 +:010ffe00e012 +:010fff00e011 +:00000001ff diff --git a/bsp4/Angabe/vga_arc.vhd b/bsp4/Angabe/vga_arc.vhd new file mode 100644 index 0000000..3d2d158 --- /dev/null +++ b/bsp4/Angabe/vga_arc.vhd @@ -0,0 +1,223 @@ + ------------------------------------------------------------------------------- +-- Title : vga architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: arch of top level module, the sub-modules are connected here +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; -- include package + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + +architecture behav of vga is + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + +------------------------------------------------------------------------------- +-- component declarations for the modules +------------------------------------------------------------------------------- + + component vga_driver + port ( + clk : in std_logic; + reset : in std_logic; + column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + h_enable : out std_logic; + v_enable : out std_logic; + hsync : out std_logic; + vsync : out std_logic; + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter : out std_logic; + d_set_vsync_counter : out std_logic; + d_set_column_counter : out std_logic; + d_set_line_counter : out std_logic); + end component; + + + component vga_control + port ( + clk : in std_logic; + reset : in std_logic; + column_counter : in std_logic_vector(COL_CNT_WIDTH-1 downto 0); + line_counter : in std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + h_enable : in std_logic; + v_enable : in std_logic; + toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + toggle : out std_logic; + r, g, b : out std_logic + ); + end component; + + + component board_driver + port ( + reset : in std_logic; + seven_seg : out std_logic_vector(2*SEG_WIDTH-1 downto 0)); + end component; + + +-- declare signals needed for internal wiring of these components later + signal column_counter_sig : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal line_counter_sig : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal h_enable_sig : std_logic; + signal v_enable_sig : std_logic; + signal r_sig, g_sig, b_sig : std_logic; + signal hsync_sig, vsync_sig : std_logic; + +-- declare signals needed for prolongation of reset + signal dly_counter : std_logic_vector(1 downto 0); + signal dly_counter_next : std_logic_vector(1 downto 0); + constant MAX_DLY : std_logic_vector(1 downto 0) := "11"; + signal reset_dly : std_logic; -- + signal safe_reset : std_logic; + + +------------------------------------------------------------------------------- +-- prolong duration of reset to prevent glitches at power-up +------------------------------------------------------------------------------- + +begin + + DELAY_RESET_syn : process(clk_pin) -- synchronous capture + begin + if clk_pin'event and clk_pin = '1' then -- upon rising clock + dly_counter <= dly_counter_next; -- ... capture new counter value + end if; + end process; + + DELAY_RESET_next : process(dly_counter, reset_pin) -- next state logic + begin + if reset_pin = RES_ACT then -- upon reset + dly_counter_next <= (others => '0'); -- ...clear dly counter + elsif dly_counter < MAX_DLY then -- if no oflo + dly_counter_next <= dly_counter + '1'; -- ...increment dly counter + else + dly_counter_next <= dly_counter; -- freeze dly counter when oflo + end if; + end process; + + DELAY_RESET_out: process(dly_counter) + begin + if dly_counter < MAX_DLY then -- until dly counter reaches maximum + reset_dly <= RES_ACT; -- ...activate delayed reset signal + else -- upon counter oflo + reset_dly <= not(RES_ACT); -- ...finally deactivate delayed reset + end if; + end process; + + + + COMBINE_RESET: process(reset_pin, reset_dly) -- generate "safe" reset signal + begin + if reset_pin = RES_ACT or reset_dly = RES_ACT then -- ...by combining delayed reset with non-delayed reset input + safe_reset <= RES_ACT; + else + safe_reset <= not(RES_ACT); + end if; + end process; + + +------------------------------------------------------------------------------- +-- instantiate the components and connect to internal and external signals +------------------------------------------------------------------------------- + + +board_driver_unit : board_driver + port map ( + reset => safe_reset, + seven_seg => seven_seg_pin); + + +vga_driver_unit : vga_driver + port map ( + clk => clk_pin, + reset => safe_reset, + column_counter => column_counter_sig, + line_counter => line_counter_sig, + h_enable => h_enable_sig, + v_enable => v_enable_sig, + hsync => hsync_sig, + vsync => vsync_sig, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter); + +-- make the wiring for hsync and vsync pins +-- (pin is output only => internal _sig version required to allow readback of signal) + vsync_pin <= vsync_sig; + hsync_pin <= hsync_sig; + + + vga_control_unit : vga_control + port map ( + clk => clk_pin, + reset => safe_reset, + column_counter => column_counter_sig, + line_counter => line_counter_sig, + h_enable => h_enable_sig, + v_enable => v_enable_sig, + toggle_counter => d_toggle_counter, + toggle => d_toggle, + r => r_sig, + g => g_sig, + b => b_sig); + +-- make the wiring for RGB pins: drive all pins for same color from one source ("8 color mode") + r0_pin <= r_sig; r1_pin <= r_sig; r2_pin <= r_sig; + g0_pin <= g_sig; g1_pin <= g_sig; g2_pin <= g_sig; + b0_pin <= b_sig; b1_pin <= b_sig; + + +-- make extra pin connections for debug signals + d_hsync <= hsync_sig; -- make duplicate of signal for debug connector + d_vsync <= vsync_sig; -- make duplicate of signal for debug connector + d_column_counter <= column_counter_sig; + d_line_counter <= line_counter_sig; + d_h_enable <= h_enable_sig; + d_v_enable <= v_enable_sig; + d_r <= r_sig; + d_g <= g_sig; + d_b <= b_sig; + d_state_clk <= clk_pin; -- make duplicate of signal for debug connector + + +end behav; + +------------------------------------------------------------------------------- +-- END ARCHITECTURE +------------------------------------------------------------------------------- diff --git a/bsp4/Angabe/vga_beh_tb.vhd b/bsp4/Angabe/vga_beh_tb.vhd new file mode 100644 index 0000000..c7e990d --- /dev/null +++ b/bsp4/Angabe/vga_beh_tb.vhd @@ -0,0 +1,194 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2007-09-13 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_tb is + +end vga_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture behaviour of vga_tb is + + constant cc : time := 39.7 ns; -- test clock period + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0)); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : hsync_state_type; + signal d_vsync_state : vsync_state_type; + signal d_state_clk : std_logic; + signal d_toggle : std_logic; + signal d_toggle_counter : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk, + d_toggle => d_toggle, + d_toggle_counter => d_toggle_counter); + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk_pin <= '1'; + wait for cc/2; + clk_pin <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk_pin = '1' and clk_pin'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + + icwait(10000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + +end behaviour; + + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_beh of vga_tb is + for behaviour + for vga_unit : vga use entity work.vga(behav); + end for; + end for; +end vga_conf_beh; + + diff --git a/bsp4/Angabe/vga_control_arc.vhd b/bsp4/Angabe/vga_control_arc.vhd new file mode 100644 index 0000000..7f78d72 --- /dev/null +++ b/bsp4/Angabe/vga_control_arc.vhd @@ -0,0 +1,128 @@ +------------------------------------------------------------------------------- +-- Title : vga_control architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_control.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: generation of colors (RGB) +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + +architecture behav of vga_control is + + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + + -- signal and constant declarations + signal r_next, g_next, b_next : std_logic; -- auxiliary signals for next state logic + signal toggle_sig : std_logic; -- auxiliary signal to allow read back of toggle + signal toggle_counter_sig : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); -- auxiliary signal to allow read back of blinker + signal toggle_next : std_logic; -- auxiliary signal for next state logic + signal toggle_counter_next : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); -- auxiliary signal for next state logic + constant HALFPERIOD : std_logic_vector(TOG_CNT_WIDTH-1 downto 0) := "1100000000010001111011000"; + -- define half period of toggle frequency in clock ticks + +begin + ----------------------------------------------------------------------------- + -- draw rectangle on screen + ----------------------------------------------------------------------------- + + DRAW_SQUARE_syn: process(clk, reset) + begin + if (reset = RES_ACT) then -- draw black screen upon reset + r <= COLR_OFF; + g <= COLR_OFF; + b <= COLR_OFF; + elsif (clk'event and clk = '1') then -- synchronous capture + r <= r_next; + g <= g_next; + b <= b_next; + end if; + end process; + + + DRAW_SQUARE_next: process (column_counter, line_counter, v_enable, h_enable, toggle_sig) + begin + if v_enable = ENABLE and h_enable = ENABLE then + if (column_counter >= X_MIN and column_counter <= X_MAX and -- if pixel within the rectangle borders + line_counter >= Y_MIN and line_counter <= Y_MAX) then + r_next <= toggle_sig; -- ...red + g_next <= COLR_OFF; -- ...green + b_next <= not toggle_sig; -- ...blue + else -- if somewhere else on screen... + r_next <= COLR_OFF; + g_next <= COLR_OFF; -- ... draw background color + b_next <= COLR_OFF; + end if; + else -- if out of screen... + r_next <= COLR_OFF; + g_next <= COLR_OFF; -- ... do not activate any color + b_next <= COLR_OFF; -- (black screen) + end if; + end process; + + + ----------------------------------------------------------------------------- + -- control blinking of rectangle + ----------------------------------------------------------------------------- + + BLINKER_syn: process(clk, reset) + begin + if (reset = RES_ACT) then -- asyn reset + toggle_counter_sig <= (others => '0'); + toggle_sig <= COLR_OFF; + elsif(clk'event and clk = '1') then -- synchronous capture + toggle_counter_sig <= toggle_counter_next; + toggle_sig <= toggle_next; + end if; + end process; + + + BLINKER_next : process(toggle_counter_sig, toggle_sig) + begin + if toggle_counter_sig >= HALFPERIOD then -- after half period ... + toggle_counter_next <= (others => '0'); -- ... clear counter + toggle_next <= not(toggle_sig); -- ... and toggle colour. + else -- before half period ... + toggle_counter_next <= toggle_counter_sig + '1'; -- ... increment counter + toggle_next <= toggle_sig; -- ... and hold colour + end if; + end process; + + +-- assign auxiliary signals to module outputs +toggle <= toggle_sig; +toggle_counter <= toggle_counter_sig; + +end behav; + +------------------------------------------------------------------------------- +-- END ARCHITECTURE +------------------------------------------------------------------------------- diff --git a/bsp4/Angabe/vga_control_ent.vhd b/bsp4/Angabe/vga_control_ent.vhd new file mode 100644 index 0000000..2ff5a0a --- /dev/null +++ b/bsp4/Angabe/vga_control_ent.vhd @@ -0,0 +1,53 @@ +------------------------------------------------------------------------------- +-- Title : vga_control entity +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_control_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: generation of colors (RGB) +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + + +entity vga_control is + port(clk : in std_logic; + reset : in std_logic; + column_counter : in std_logic_vector(COL_CNT_WIDTH-1 downto 0); + toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + toggle : out std_logic; + line_counter : in std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + v_enable : in std_logic; + h_enable : in std_logic; + r, g, b : out std_logic + ); + +end vga_control; + +------------------------------------------------------------------------------- +-- END ENTITY +------------------------------------------------------------------------------- diff --git a/bsp4/Angabe/vga_driver_arc.vhd b/bsp4/Angabe/vga_driver_arc.vhd new file mode 100644 index 0000000..02aec99 --- /dev/null +++ b/bsp4/Angabe/vga_driver_arc.vhd @@ -0,0 +1,402 @@ +------------------------------------------------------------------------------- +-- Title : vga_driver architecture +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_driver.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2007-09-13 +------------------------------------------------------------------------------- +-- Description: generate hsync and vsync +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-01-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- + +architecture behav of vga_driver is + + attribute syn_preserve : boolean; + attribute syn_preserve of behav : architecture is true; + + constant TIME_A : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "1100011111"; + constant TIME_B : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "0001011010"; + constant TIME_BC : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "0010000111"; + constant TIME_BCD : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "1100000111"; + + constant TIME_O : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "1000001000"; + constant TIME_P : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "0000000001"; + constant TIME_PQ : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "0000100001"; + constant TIME_PQR : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "1000000001"; + + signal h_sync : std_logic; + signal h_sync_next : std_logic; + + signal hsync_state : hsync_state_type; + signal hsync_state_next : hsync_state_type; + + signal h_enable_sig : std_logic; + signal h_enable_next : std_logic; + + signal set_hsync_counter : std_logic; + signal hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal hsync_counter_next : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + constant HSYN_CNT_MAX : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0) := "1111111111"; + + signal column_counter_sig : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal column_counter_next : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal set_column_counter : std_logic; + + signal v_sync : std_logic; + signal v_sync_next : std_logic; + + signal vsync_state : vsync_state_type; + signal vsync_state_next : vsync_state_type; + + signal v_enable_sig : std_logic; + signal v_enable_next : std_logic; + + signal set_vsync_counter : std_logic; + signal vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal vsync_counter_next : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + constant VSYN_CNT_MAX : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0) := "1111111111"; + + signal line_counter_sig : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal line_counter_next : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal set_line_counter : std_logic; + + + +begin + +---------------------------------------------------------------------------- +-- Column_Counter [0..639]: calculates column number for next pixel to be displayed +---------------------------------------------------------------------------- + + COLUMN_COUNT_syn: process(clk, reset, column_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + column_counter_sig <= (others => '0'); + else + column_counter_sig <= column_counter_next; -- synchronous capture + end if; + end if; + end process; + + COLUMN_COUNT_next: process(set_column_counter, column_counter_sig) + begin + if set_column_counter = ENABLE then -- reset counter + column_counter_next <= (others => '0'); + else + if column_counter_sig < RIGHT_BORDER then + column_counter_next <= column_counter_sig + '1'; -- increment column + else + column_counter_next <= RIGHT_BORDER; -- ... but do not count beyond right border + end if; + end if; + end process; + +---------------------------------------------------------------------------- +-- Line_counter [0..479]: calculates line number for next pixel to be displayed +---------------------------------------------------------------------------- + + LINE_COUNT_syn: process(clk, reset, line_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + line_counter_sig <= (others => '0'); + else + line_counter_sig <= line_counter_next; -- synchronous capture + end if; + end if; + end process; + + LINE_COUNT_next: process(set_line_counter, line_counter_sig, set_hsync_counter) + begin + if set_line_counter = ENABLE then -- reset counter + line_counter_next <= (others => '0'); + else + if line_counter_sig < BOTTOM_BORDER then + if set_hsync_counter = '1' then -- when enabled + line_counter_next <= line_counter_sig + '1'; -- ... increment line + else + line_counter_next <= line_counter_sig; + end if; + else + line_counter_next <= BOTTOM_BORDER; -- ... but do not count below bottom + end if; + end if; + end process; + + +---------------------------------------------------------------------------- +-- Hsync_Counter: generates time base for HSYNC State Machine +---------------------------------------------------------------------------- + + HSYNC_COUNT_syn: process(clk, reset, hsync_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + hsync_counter <= (others => '0'); + else + hsync_counter <= hsync_counter_next; -- synchronous capture + end if; + end if; + end process; + + HSYNC_COUNT_next: process(set_hsync_counter, hsync_counter) + begin + if set_hsync_counter = ENABLE then -- reset counter + hsync_counter_next <= (others => '0'); + else + if hsync_counter < HSYN_CNT_MAX then + hsync_counter_next <= hsync_counter + '1'; -- increment time + else + hsync_counter_next <= HSYN_CNT_MAX; -- ... but do not count beyond max period + end if; + end if; + end process; + + +---------------------------------------------------------------------------- +-- HSYNC STATE MACHINE: generates hsync signal and controls hsync counter & column counter +---------------------------------------------------------------------------- + + HSYNC_FSM_syn: process (clk, reset) -- synchronous capture + begin + if clk'event and clk = '1' then + if reset = RES_ACT then + hsync_state <= RESET_STATE; + h_sync <= '1'; + v_enable_sig <= not(ENABLE); + else + hsync_state <= hsync_state_next; + h_sync <= h_sync_next; + v_enable_sig <= v_enable_next; + end if; + end if; + end process; + + HSYNC_FSM_next : process(hsync_state, hsync_counter, h_sync, v_enable_sig) -- next-state logic + begin -- default assignments + hsync_state_next <= hsync_state; -- ... hold current state + h_sync_next <= h_sync; -- ... and values + v_enable_next <= v_enable_sig; + + case hsync_state is + when RESET_STATE => + h_sync_next <= '0'; -- next signal values are defined here + v_enable_next <= not(ENABLE); + hsync_state_next <= B_STATE; -- ... as well as state transitions + when B_STATE => + h_sync_next <= '0'; + if hsync_counter = TIME_B then + hsync_state_next <= C_STATE; + end if; + when D_STATE => + h_sync_next <= '1'; + if hsync_counter = TIME_BC then + hsync_state_next <= pre_D_STATE; + end if; + when pre_D_STATE => + v_enable_next <= ENABLE; + hsync_state_next <= D_STATE; + when C_STATE => + v_enable_next <= ENABLE; + if hsync_counter = TIME_BCD then + hsync_state_next <= E_STATE; + end if; + when E_STATE => + v_enable_next <= not(ENABLE); + if hsync_counter = TIME_A then + hsync_state_next <= pre_B_STATE; + end if; + when pre_B_STATE => + h_sync_next <= '0'; + v_enable_next <= not(ENABLE); + hsync_state_next <= B_STATE; + when others => + null; + end case; + end process; + + HSYNC_FSM_out : process(hsync_state) -- output logic + begin + set_hsync_counter <= not(ENABLE); -- default assignments + set_column_counter <= not(ENABLE); + + case hsync_state is + when RESET_STATE => -- outputs for each state are defined here + set_hsync_counter <= ENABLE; + when pre_D_STATE => + set_column_counter <= ENABLE; + when pre_B_STATE => + set_hsync_counter <= ENABLE; + when others => + null; + end case; + end process; + + +---------------------------------------------------------------------------- +-- Vsync_Counter: generates time base for VSYNC State Machine +---------------------------------------------------------------------------- + + VSYNC_COUNT_syn: process(clk, reset, vsync_counter_next) + begin + if clk'event and clk = '1' then + if reset = RES_ACT then -- synchronous reset + vsync_counter <= (others => '0'); + else + vsync_counter <= vsync_counter_next; -- synchronous capture + end if; + end if; + end process; + + VSYNC_COUNT_next: process(set_vsync_counter, vsync_counter, set_hsync_counter) + begin + if set_vsync_counter = ENABLE then -- reset counter + vsync_counter_next <= (others => '0'); + else + if vsync_counter < VSYN_CNT_MAX then + if set_hsync_counter = '1' then -- if enabled + vsync_counter_next <= vsync_counter + '1'; -- ... increment time + else + vsync_counter_next <= vsync_counter; + end if; + else + vsync_counter_next <= VSYN_CNT_MAX; -- ... but do not count beyond max period + end if; + end if; + end process; + + +---------------------------------------------------------------------------- +-- VSYNC STATE MACHINE: generates vsync signal and controls vsync counter & line counter +---------------------------------------------------------------------------- + + VSYNC_FSM_syn : process (clk, reset) -- synchronous capture + begin + if clk'event and clk = '1' then + if reset = RES_ACT then + vsync_state <= RESET_STATE; + v_sync <= '1'; + h_enable_sig <= not(ENABLE); + else + vsync_state <= vsync_state_next; + v_sync <= v_sync_next; + h_enable_sig <= h_enable_next; + end if; + end if; + end process; + + VSYNC_FSM_next : process(vsync_state, vsync_counter, v_sync, h_enable_sig) + begin -- next state logic + vsync_state_next <= vsync_state; -- default assignments + v_sync_next <= v_sync; + h_enable_next <= h_enable_sig; + + case vsync_state is -- state transitions and next signals are defined here + when RESET_STATE => + v_sync_next <= '0'; + h_enable_next <= not(ENABLE); + vsync_state_next <= P_STATE; + when P_STATE => + v_sync_next <= '0'; + if vsync_counter = time_p then + vsync_state_next <= Q_STATE; + end if; + when Q_STATE => + v_sync_next <= '1'; + if vsync_counter = time_pq then + vsync_state_next <= pre_R_STATE; + end if; + when pre_R_STATE => + h_enable_next <= ENABLE; + vsync_state_next <= R_STATE; + when R_STATE => + h_enable_next <= ENABLE; + if vsync_counter = time_pqr then + vsync_state_next <= S_STATE; + end if; + when S_STATE => + h_enable_next <= not(ENABLE); + if vsync_counter = time_o then + vsync_state_next <= pre_P_STATE; + end if; + when pre_P_STATE => + v_sync_next <= '0'; + h_enable_next <= not(ENABLE); + vsync_state_next <= P_STATE; + when others => + null; + end case; + end process; + + VSYNC_FSM_out : process(vsync_state) + begin -- output logic + set_vsync_counter <= not(ENABLE); -- output values for each state defined here + set_line_counter <= not(ENABLE); + + case vsync_state is + when RESET_STATE => + set_vsync_counter <= ENABLE; + when pre_R_STATE => + set_line_counter <= ENABLE; + when pre_P_STATE => + set_vsync_counter <= ENABLE; + when others => + null; + end case; + end process; + + + +-- signal wiring for entity (introduced _sig to allow readback of output signals) + + column_counter <= column_counter_sig; + v_enable <= v_enable_sig; + line_counter <= line_counter_sig; + h_enable <= h_enable_sig; + + + hsync <= h_sync; + vsync <= v_sync; + + ----------------------------------------------------------------------------- + -- debug signals + ----------------------------------------------------------------------------- + d_hsync_state <= hsync_state; + d_vsync_state <= vsync_state; + d_hsync_counter <= hsync_counter; + d_vsync_counter <= vsync_counter; + d_set_hsync_counter <= set_hsync_counter; + d_set_vsync_counter <= set_vsync_counter; + d_set_column_counter <= set_column_counter; + d_set_line_counter <= set_line_counter; + +end behav; + +------------------------------------------------------------------------------- +-- END ARCHITECTURE +------------------------------------------------------------------------------- diff --git a/bsp4/Angabe/vga_driver_ent.vhd b/bsp4/Angabe/vga_driver_ent.vhd new file mode 100644 index 0000000..f4c00be --- /dev/null +++ b/bsp4/Angabe/vga_driver_ent.vhd @@ -0,0 +1,60 @@ +------------------------------------------------------------------------------- +-- Title : vga_driver entity +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_driver_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-12-15 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: generate vsync and hsync +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-12-15 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + + +entity vga_driver is + port(clk : in std_logic; + reset : in std_logic; + column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + h_enable : out std_logic; + v_enable : out std_logic; + hsync, vsync : out std_logic; + + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter : out std_logic; + d_set_vsync_counter : out std_logic; + d_set_column_counter : out std_logic; + d_set_line_counter : out std_logic + ); + +end vga_driver; + +------------------------------------------------------------------------------- +-- END ENTITY +------------------------------------------------------------------------------- diff --git a/bsp4/Angabe/vga_ent.vhd b/bsp4/Angabe/vga_ent.vhd new file mode 100644 index 0000000..b16b96a --- /dev/null +++ b/bsp4/Angabe/vga_ent.vhd @@ -0,0 +1,73 @@ +------------------------------------------------------------------------------- +-- Title : vga entitiy +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_ent.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2007-09-13 +------------------------------------------------------------------------------- +-- Description: entity of top level module, external pins defined here +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- + +entity vga is + port( + input pins from PCB board + clk_pin : in std_logic; -- clock pin + reset_pin : in std_logic; -- reset pins (from switch) +-- output pins to RGB connector / VGA screen + r0_pin, r1_pin, r2_pin : out std_logic; -- to RGB connector "red" + g0_pin, g1_pin, g2_pin : out std_logic; -- to RGB connector "green" + b0_pin, b1_pin : out std_logic; -- to RGB connector "blue" + hsync_pin : out std_logic; -- to RGB connector "Hsync" + vsync_pin : out std_logic; -- to RGB connector "Vsync" +-- output pins to 7-segment display + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); +-- output pins provided for debugging only / logic analyzer + d_hsync, d_vsync : out std_logic; -- copy of hsync_pin, vsync_pin + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out hsync_state_type; + d_vsync_state : out vsync_state_type; + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0) + ); + +end vga; + +------------------------------------------------------------------------------- +-- END ENTITY +------------------------------------------------------------------------------- diff --git a/bsp4/Angabe/vga_pak.vhd b/bsp4/Angabe/vga_pak.vhd new file mode 100644 index 0000000..61c8adf --- /dev/null +++ b/bsp4/Angabe/vga_pak.vhd @@ -0,0 +1,85 @@ +------------------------------------------------------------------------------- +-- Title : vga package +-- Project : LU Digital Design +------------------------------------------------------------------------------- +-- File : vga_pak.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-08-19 +-- Last update: 2006-02-24 +------------------------------------------------------------------------------- +-- Description: definitions of global constants and enumerated types +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-08-19 1.0 handl Created +-- 2006-02-24 2.0 ST revised +------------------------------------------------------------------------------- + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + + +------------------------------------------------------------------------------- +-- PACKAGE +------------------------------------------------------------------------------- + +package vga_pak is + + constant RES_ACT : std_logic := '0'; -- define reset active LO + constant ENABLE : std_logic := '1'; -- define diverse enable HI + constant COLR_ON : std_logic := '1'; -- define VGA color on as HI + constant COLR_OFF : std_logic := '0'; -- define VGA color off as LO + constant SEG_WIDTH : integer := 7; -- display has 7 segments + constant BCD_WIDTH : integer := 4; -- BCD number has 4 bit + constant TOG_CNT_WIDTH : integer := 25; -- bitwidth of counter that controls blinking + + constant COL_CNT_WIDTH : integer := 10; -- width of the column counter + constant LINE_CNT_WIDTH : integer := 9; -- width of the line counter + constant HSYN_CNT_WIDTH : integer := 10; -- width of the h-sync counter + constant VSYN_CNT_WIDTH : integer := 10; -- width of the v-sync counter + + constant RIGHT_BORDER: std_logic_vector(COL_CNT_WIDTH-1 downto 0) := "1001111111"; -- 640 columns (0...639) + constant BOTTOM_BORDER: std_logic_vector(LINE_CNT_WIDTH-1 downto 0) := "111011111"; -- 480 lines (0...479) + + -- define coordinates of rectangle + constant X_MIN : std_logic_vector(COL_CNT_WIDTH-1 downto 0) := "0001100100"; -- 100 + constant X_MAX : std_logic_vector(COL_CNT_WIDTH-1 downto 0) := "0011001000"; -- 200 + constant Y_MIN : std_logic_vector(LINE_CNT_WIDTH-1 downto 0) := "001100100"; + constant Y_MAX : std_logic_vector(LINE_CNT_WIDTH-1 downto 0) := "011001000"; + + -- define emumerated types for state machines + type hsync_state_type is (RESET_STATE, B_STATE, C_STATE, D_STATE, E_STATE, + pre_D_STATE, pre_B_STATE); + type vsync_state_type is (RESET_STATE, P_STATE, Q_STATE, R_STATE, S_STATE, + pre_R_STATE, pre_P_STATE); + + -- Definitions for 7-segment display gfedcba + constant DIGIT_ZERO : std_logic_vector(SEG_WIDTH-1 downto 0) := "1000000"; + constant DIGIT_ONE : std_logic_vector(SEG_WIDTH-1 downto 0) := "1111001"; + constant DIGIT_TWO : std_logic_vector(SEG_WIDTH-1 downto 0) := "0100100"; + constant DIGIT_THREE : std_logic_vector(SEG_WIDTH-1 downto 0) := "0110000"; + constant DIGIT_FOUR : std_logic_vector(SEG_WIDTH-1 downto 0) := "0011001"; + constant DIGIT_FIVE : std_logic_vector(SEG_WIDTH-1 downto 0) := "0010010"; + constant DIGIT_SIX : std_logic_vector(SEG_WIDTH-1 downto 0) := "0000010"; + constant DIGIT_SEVEN : std_logic_vector(SEG_WIDTH-1 downto 0) := "1111000"; + constant DIGIT_EIGHT : std_logic_vector(SEG_WIDTH-1 downto 0) := "0000000"; + constant DIGIT_NINE : std_logic_vector(SEG_WIDTH-1 downto 0) := "0011000"; + constant DIGIT_MINUS : std_logic_vector(SEG_WIDTH-1 downto 0) := "0111111"; + constant DIGIT_A : std_logic_vector(SEG_WIDTH-1 downto 0) := "0001000"; + constant DIGIT_B : std_logic_vector(SEG_WIDTH-1 downto 0) := "0000011"; + constant DIGIT_C : std_logic_vector(SEG_WIDTH-1 downto 0) := "0110001"; + constant DIGIT_D : std_logic_vector(SEG_WIDTH-1 downto 0) := "1000010"; + constant DIGIT_E : std_logic_vector(SEG_WIDTH-1 downto 0) := "1001111"; + constant DIGIT_F : std_logic_vector(SEG_WIDTH-1 downto 0) := "1000111"; + constant DIGIT_OFF : std_logic_vector(SEG_WIDTH-1 downto 0) := "1111111"; + +end package; diff --git a/bsp4/Angabe/vga_pll.bdf b/bsp4/Angabe/vga_pll.bdf new file mode 100755 index 0000000..906c435 --- /dev/null +++ b/bsp4/Angabe/vga_pll.bdf @@ -0,0 +1,847 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +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. +*/ +(header "graphic" (version "1.3")) +(pin + (input) + (rect 248 80 416 96) + (text "INPUT" (rect 133 0 161 10)(font "Arial" (font_size 6))) + (text "board_clk" (rect 5 0 52 12)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 156 17)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 256 136 304 152)) +) +(pin + (input) + (rect 544 96 712 112) + (text "INPUT" (rect 133 0 161 10)(font "Arial" (font_size 6))) + (text "reset" (rect 5 0 29 12)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 156 17)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 512 176 560 192)) +) +(pin + (output) + (rect 928 256 1148 272) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_hsync" (rect 90 0 132 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 96 1188 112)) +) +(pin + (output) + (rect 928 272 1148 288) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_vsync" (rect 90 0 133 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 112 1188 128)) +) +(pin + (output) + (rect 928 288 1148 304) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_column_counter[9..0]" (rect 90 0 205 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 128 1188 272)) +) +(pin + (output) + (rect 928 320 1148 336) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_column_counter" (rect 90 0 200 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 160 1196 176)) +) +(pin + (output) + (rect 928 336 1148 352) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_line_counter" (rect 90 0 182 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 176 1188 192)) +) +(pin + (output) + (rect 928 352 1148 368) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_hsync_counter[9..0]" (rect 90 0 200 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 192 1196 248)) +) +(pin + (output) + (rect 928 368 1142 384) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_vsync_counter[9..0]" (rect 90 0 202 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 208 1182 264)) +) +(pin + (output) + (rect 928 384 1142 400) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_hsync_counter" (rect 90 0 196 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 224 1182 240)) +) +(pin + (output) + (rect 928 400 1142 416) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_set_vsync_counter" (rect 90 0 197 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 240 1182 256)) +) +(pin + (output) + (rect 928 448 1142 464) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_r" (rect 90 0 105 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 288 1182 304)) +) +(pin + (output) + (rect 928 464 1142 480) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_g" (rect 90 0 107 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 304 1182 320)) +) +(pin + (output) + (rect 928 480 1142 496) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_b" (rect 90 0 107 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 320 1182 336)) +) +(pin + (output) + (rect 928 496 1142 512) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_hsync_state[0..6]" (rect 90 0 189 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1216 480 1264 584)) +) +(pin + (output) + (rect 928 512 1136 528) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_vsync_state[0..6]" (rect 90 0 190 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1256 352 1312 456)) +) +(pin + (output) + (rect 928 304 1148 320) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_line_counter[8..0]" (rect 90 0 186 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1140 144 1188 272)) +) +(pin + (output) + (rect 928 416 1142 432) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_h_enable" (rect 90 0 145 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 256 1182 272)) +) +(pin + (output) + (rect 928 432 1142 448) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_v_enable" (rect 90 0 146 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1134 272 1182 288)) +) +(pin + (output) + (rect 928 528 1148 544) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_state_clk" (rect 90 0 146 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1404 88 1452 104)) +) +(pin + (output) + (rect 928 544 1148 560) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_toggle" (rect 90 0 131 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1468 112 1516 128)) +) +(pin + (output) + (rect 928 80 1104 96) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "r0_pin" (rect 90 0 119 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 400 1144 416)) +) +(pin + (output) + (rect 928 96 1104 112) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "r1_pin" (rect 90 0 119 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 416 1144 432)) +) +(pin + (output) + (rect 928 112 1104 128) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "r2_pin" (rect 90 0 119 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 432 1144 448)) +) +(pin + (output) + (rect 928 128 1104 144) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "g0_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 448 1144 464)) +) +(pin + (output) + (rect 928 144 1104 160) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "g1_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 464 1144 480)) +) +(pin + (output) + (rect 928 160 1104 176) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "g2_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 480 1144 496)) +) +(pin + (output) + (rect 928 176 1104 192) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "b0_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 496 1144 512)) +) +(pin + (output) + (rect 928 192 1104 208) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "b1_pin" (rect 90 0 121 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 512 1144 528)) +) +(pin + (output) + (rect 928 240 1148 256) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "seven_seg_pin[13..0]" (rect 90 0 196 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1508 472 1572 672)) +) +(pin + (output) + (rect 928 560 1148 576) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "d_toggle_counter[24..0]" (rect 90 0 205 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1492 128 1548 288)) +) +(pin + (output) + (rect 928 208 1104 224) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "hsync_pin" (rect 90 0 140 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 528 1144 544)) +) +(pin + (output) + (rect 928 224 1104 240) + (text "OUTPUT" (rect 1 0 39 10)(font "Arial" (font_size 6))) + (text "vsync_pin" (rect 90 0 141 12)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1096 544 1144 560)) +) +(symbol + (rect 712 56 928 600) + (text "vga" (rect 5 0 23 12)(font "Arial" )) + (text "inst" (rect 8 528 25 540)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clk_pin" (rect 0 0 34 12)(font "Arial" )) + (text "clk_pin" (rect 21 27 55 39)(font "Arial" )) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "reset_pin" (rect 0 0 44 12)(font "Arial" )) + (text "reset_pin" (rect 21 43 65 55)(font "Arial" )) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 216 32) + (output) + (text "r0_pin" (rect 0 0 29 12)(font "Arial" )) + (text "r0_pin" (rect 166 27 195 39)(font "Arial" )) + (line (pt 216 32)(pt 200 32)(line_width 1)) + ) + (port + (pt 216 48) + (output) + (text "r1_pin" (rect 0 0 29 12)(font "Arial" )) + (text "r1_pin" (rect 166 43 195 55)(font "Arial" )) + (line (pt 216 48)(pt 200 48)(line_width 1)) + ) + (port + (pt 216 64) + (output) + (text "r2_pin" (rect 0 0 29 12)(font "Arial" )) + (text "r2_pin" (rect 166 59 195 71)(font "Arial" )) + (line (pt 216 64)(pt 200 64)(line_width 1)) + ) + (port + (pt 216 80) + (output) + (text "g0_pin" (rect 0 0 31 12)(font "Arial" )) + (text "g0_pin" (rect 164 75 195 87)(font "Arial" )) + (line (pt 216 80)(pt 200 80)(line_width 1)) + ) + (port + (pt 216 96) + (output) + (text "g1_pin" (rect 0 0 31 12)(font "Arial" )) + (text "g1_pin" (rect 164 91 195 103)(font "Arial" )) + (line (pt 216 96)(pt 200 96)(line_width 1)) + ) + (port + (pt 216 112) + (output) + (text "g2_pin" (rect 0 0 31 12)(font "Arial" )) + (text "g2_pin" (rect 164 107 195 119)(font "Arial" )) + (line (pt 216 112)(pt 200 112)(line_width 1)) + ) + (port + (pt 216 128) + (output) + (text "b0_pin" (rect 0 0 31 12)(font "Arial" )) + (text "b0_pin" (rect 164 123 195 135)(font "Arial" )) + (line (pt 216 128)(pt 200 128)(line_width 1)) + ) + (port + (pt 216 144) + (output) + (text "b1_pin" (rect 0 0 31 12)(font "Arial" )) + (text "b1_pin" (rect 164 139 195 151)(font "Arial" )) + (line (pt 216 144)(pt 200 144)(line_width 1)) + ) + (port + (pt 216 160) + (output) + (text "hsync_pin" (rect 0 0 50 12)(font "Arial" )) + (text "hsync_pin" (rect 145 155 195 167)(font "Arial" )) + (line (pt 216 160)(pt 200 160)(line_width 1)) + ) + (port + (pt 216 176) + (output) + (text "vsync_pin" (rect 0 0 51 12)(font "Arial" )) + (text "vsync_pin" (rect 144 171 195 183)(font "Arial" )) + (line (pt 216 176)(pt 200 176)(line_width 1)) + ) + (port + (pt 216 192) + (output) + (text "seven_seg_pin[13..0]" (rect 0 0 106 12)(font "Arial" )) + (text "seven_seg_pin[13..0]" (rect 89 187 195 199)(font "Arial" )) + (line (pt 216 192)(pt 200 192)(line_width 3)) + ) + (port + (pt 216 208) + (output) + (text "d_hsync" (rect 0 0 42 12)(font "Arial" )) + (text "d_hsync" (rect 153 203 195 215)(font "Arial" )) + (line (pt 216 208)(pt 200 208)(line_width 1)) + ) + (port + (pt 216 224) + (output) + (text "d_vsync" (rect 0 0 43 12)(font "Arial" )) + (text "d_vsync" (rect 152 219 195 231)(font "Arial" )) + (line (pt 216 224)(pt 200 224)(line_width 1)) + ) + (port + (pt 216 240) + (output) + (text "d_column_counter[9..0]" (rect 0 0 115 12)(font "Arial" )) + (text "d_column_counter[9..0]" (rect 80 235 195 247)(font "Arial" )) + (line (pt 216 240)(pt 200 240)(line_width 3)) + ) + (port + (pt 216 256) + (output) + (text "d_line_counter[8..0]" (rect 0 0 96 12)(font "Arial" )) + (text "d_line_counter[8..0]" (rect 99 251 195 263)(font "Arial" )) + (line (pt 216 256)(pt 200 256)(line_width 3)) + ) + (port + (pt 216 272) + (output) + (text "d_set_column_counter" (rect 0 0 110 12)(font "Arial" )) + (text "d_set_column_counter" (rect 85 267 195 279)(font "Arial" )) + (line (pt 216 272)(pt 200 272)(line_width 1)) + ) + (port + (pt 216 288) + (output) + (text "d_set_line_counter" (rect 0 0 92 12)(font "Arial" )) + (text "d_set_line_counter" (rect 103 283 195 295)(font "Arial" )) + (line (pt 216 288)(pt 200 288)(line_width 1)) + ) + (port + (pt 216 304) + (output) + (text "d_hsync_counter[9..0]" (rect 0 0 110 12)(font "Arial" )) + (text "d_hsync_counter[9..0]" (rect 85 299 195 311)(font "Arial" )) + (line (pt 216 304)(pt 200 304)(line_width 3)) + ) + (port + (pt 216 320) + (output) + (text "d_vsync_counter[9..0]" (rect 0 0 112 12)(font "Arial" )) + (text "d_vsync_counter[9..0]" (rect 83 315 195 327)(font "Arial" )) + (line (pt 216 320)(pt 200 320)(line_width 3)) + ) + (port + (pt 216 336) + (output) + (text "d_set_hsync_counter" (rect 0 0 106 12)(font "Arial" )) + (text "d_set_hsync_counter" (rect 89 331 195 343)(font "Arial" )) + (line (pt 216 336)(pt 200 336)(line_width 1)) + ) + (port + (pt 216 352) + (output) + (text "d_set_vsync_counter" (rect 0 0 107 12)(font "Arial" )) + (text "d_set_vsync_counter" (rect 88 347 195 359)(font "Arial" )) + (line (pt 216 352)(pt 200 352)(line_width 1)) + ) + (port + (pt 216 368) + (output) + (text "d_h_enable" (rect 0 0 55 12)(font "Arial" )) + (text "d_h_enable" (rect 140 363 195 375)(font "Arial" )) + (line (pt 216 368)(pt 200 368)(line_width 1)) + ) + (port + (pt 216 384) + (output) + (text "d_v_enable" (rect 0 0 56 12)(font "Arial" )) + (text "d_v_enable" (rect 139 379 195 391)(font "Arial" )) + (line (pt 216 384)(pt 200 384)(line_width 1)) + ) + (port + (pt 216 400) + (output) + (text "d_r" (rect 0 0 15 12)(font "Arial" )) + (text "d_r" (rect 180 395 195 407)(font "Arial" )) + (line (pt 216 400)(pt 200 400)(line_width 1)) + ) + (port + (pt 216 416) + (output) + (text "d_g" (rect 0 0 17 12)(font "Arial" )) + (text "d_g" (rect 178 411 195 423)(font "Arial" )) + (line (pt 216 416)(pt 200 416)(line_width 1)) + ) + (port + (pt 216 432) + (output) + (text "d_b" (rect 0 0 17 12)(font "Arial" )) + (text "d_b" (rect 178 427 195 439)(font "Arial" )) + (line (pt 216 432)(pt 200 432)(line_width 1)) + ) + (port + (pt 216 448) + (output) + (text "d_hsync_state[0..6]" (rect 0 0 99 12)(font "Arial" )) + (text "d_hsync_state[0..6]" (rect 96 443 195 455)(font "Arial" )) + (line (pt 216 448)(pt 200 448)(line_width 3)) + ) + (port + (pt 216 464) + (output) + (text "d_vsync_state[0..6]" (rect 0 0 100 12)(font "Arial" )) + (text "d_vsync_state[0..6]" (rect 95 459 195 471)(font "Arial" )) + (line (pt 216 464)(pt 200 464)(line_width 3)) + ) + (port + (pt 216 480) + (output) + (text "d_state_clk" (rect 0 0 56 12)(font "Arial" )) + (text "d_state_clk" (rect 139 475 195 487)(font "Arial" )) + (line (pt 216 480)(pt 200 480)(line_width 1)) + ) + (port + (pt 216 496) + (output) + (text "d_toggle" (rect 0 0 41 12)(font "Arial" )) + (text "d_toggle" (rect 154 491 195 503)(font "Arial" )) + (line (pt 216 496)(pt 200 496)(line_width 1)) + ) + (port + (pt 216 512) + (output) + (text "d_toggle_counter[24..0]" (rect 0 0 115 12)(font "Arial" )) + (text "d_toggle_counter[24..0]" (rect 80 507 195 519)(font "Arial" )) + (line (pt 216 512)(pt 200 512)(line_width 3)) + ) + (drawing + (rectangle (rect 16 16 200 528)(line_width 1)) + ) +) +(symbol + (rect 416 56 512 152) + (text "vpll" (rect 5 0 22 12)(font "Arial" )) + (text "inst1" (rect 8 80 31 92)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "inclk0" (rect 0 0 28 12)(font "Arial" )) + (text "inclk0" (rect 21 27 49 39)(font "Arial" )) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 96 32) + (output) + (text "c0" (rect 0 0 11 12)(font "Arial" )) + (text "c0" (rect 64 27 75 39)(font "Arial" )) + (line (pt 96 32)(pt 80 32)(line_width 1)) + ) + (drawing + (rectangle (rect 16 16 80 80)(line_width 1)) + ) +) +(connector + (pt 512 88) + (pt 712 88) +) diff --git a/bsp4/Angabe/vga_pll.tcl b/bsp4/Angabe/vga_pll.tcl new file mode 100755 index 0000000..c260434 --- /dev/null +++ b/bsp4/Angabe/vga_pll.tcl @@ -0,0 +1,184 @@ +# 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. + +# Quartus II: Generate Tcl File for Project +# File: vga_pll.tcl +# Generated on: Fri Sep 29 09:31:24 2006 + +# Load Quartus II Tcl Project package +package require ::quartus::project +package require ::quartus::flow + +set need_to_close_project 0 +set make_assignments 1 + +# Check that the right project is open +if {[is_project_open]} { + if {[string compare $quartus(project) "vga_pll"]} { + puts "Project vga_pll is not open" + set make_assignments 0 + } +} else { + # Only open if not already open + if {[project_exists vga_pll]} { + project_open -cmp vga_pll vga_pll + } else { + project_new -cmp vga_pll vga_pll + } + set need_to_close_project 1 +} + +# Make assignments +if {$make_assignments} { + catch { set_global_assignment -name FAMILY Stratix } result + catch { set_global_assignment -name DEVICE EP1S25F672C6 } result + catch { set_global_assignment -name ORIGINAL_QUARTUS_VERSION 6.0 } result + catch { set_global_assignment -name PROJECT_CREATION_TIME_DATE "09:04:10 SEPTEMBER 29, 2006" } result + catch { set_global_assignment -name LAST_QUARTUS_VERSION 6.0 } result + catch { set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "Synplify Pro" } result + catch { set_global_assignment -name EDA_LMF_FILE synplcty.lmf -section_id eda_design_synthesis } result + catch { set_global_assignment -name EDA_INPUT_DATA_FORMAT VQM -section_id eda_design_synthesis } result + catch { set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (Verilog)" } result + catch { set_global_assignment -name EDA_TIME_SCALE "1 ps" -section_id eda_simulation } result + catch { set_global_assignment -name EDA_OUTPUT_DATA_FORMAT VERILOG -section_id eda_simulation } result + catch { set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA } result + catch { set_global_assignment -name DEVICE_FILTER_PIN_COUNT 672 } result + catch { set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 6 } result + catch { set_global_assignment -name BSF_FILE ../../src/vpll.bsf } result + catch { set_global_assignment -name VHDL_FILE ../../src/vpll.vhd } result + catch { set_global_assignment -name BDF_FILE ../../src/vga_pll.bdf } result + catch { set_global_assignment -name VQM_FILE ../../syn/rev_1/vga.vqm } result + + set_location_assignment PIN_E24 -to b0_pin + set_location_assignment PIN_T6 -to b1_pin + set_location_assignment PIN_N3 -to board_clk + set_location_assignment PIN_E23 -to g0_pin + set_location_assignment PIN_T5 -to g1_pin + set_location_assignment PIN_T24 -to g2_pin + set_location_assignment PIN_F1 -to hsync_pin + set_location_assignment PIN_E22 -to r0_pin + set_location_assignment PIN_T4 -to r1_pin + set_location_assignment PIN_T7 -to r2_pin + set_location_assignment PIN_A5 -to reset + set_location_assignment PIN_F2 -to vsync_pin + set_location_assignment PIN_Y5 -to d_hsync_state[0] + set_location_assignment PIN_F19 -to d_hsync_state[1] + set_location_assignment PIN_F17 -to d_hsync_state[2] + set_location_assignment PIN_Y2 -to d_hsync_state[3] + set_location_assignment PIN_F10 -to d_hsync_state[4] + set_location_assignment PIN_F9 -to d_hsync_state[5] + set_location_assignment PIN_F6 -to d_hsync_state[6] + set_location_assignment PIN_H4 -to d_hsync_counter[0] + set_location_assignment PIN_G25 -to d_hsync_counter[7] + set_location_assignment PIN_G22 -to d_hsync_counter[8] + set_location_assignment PIN_G18 -to d_hsync_counter[9] + set_location_assignment PIN_F5 -to d_vsync_state[0] + set_location_assignment PIN_F4 -to d_vsync_state[1] + set_location_assignment PIN_F3 -to d_vsync_state[2] + set_location_assignment PIN_M19 -to d_vsync_state[3] + set_location_assignment PIN_M18 -to d_vsync_state[4] + set_location_assignment PIN_M7 -to d_vsync_state[5] + set_location_assignment PIN_M4 -to d_vsync_state[6] + set_location_assignment PIN_G9 -to d_vsync_counter[0] + set_location_assignment PIN_G6 -to d_vsync_counter[7] + set_location_assignment PIN_G4 -to d_vsync_counter[8] + set_location_assignment PIN_G2 -to d_vsync_counter[9] + set_location_assignment PIN_K6 -to d_line_counter[0] + set_location_assignment PIN_K4 -to d_line_counter[1] + set_location_assignment PIN_J22 -to d_line_counter[2] + set_location_assignment PIN_M9 -to d_line_counter[3] + set_location_assignment PIN_M8 -to d_line_counter[4] + set_location_assignment PIN_M6 -to d_line_counter[5] + set_location_assignment PIN_M5 -to d_line_counter[6] + set_location_assignment PIN_L24 -to d_line_counter[7] + set_location_assignment PIN_L25 -to d_line_counter[8] + set_location_assignment PIN_L23 -to d_column_counter[0] + set_location_assignment PIN_L22 -to d_column_counter[1] + set_location_assignment PIN_L21 -to d_column_counter[2] + set_location_assignment PIN_L20 -to d_column_counter[3] + set_location_assignment PIN_L6 -to d_column_counter[4] + set_location_assignment PIN_L4 -to d_column_counter[5] + set_location_assignment PIN_L2 -to d_column_counter[6] + set_location_assignment PIN_K23 -to d_column_counter[7] + set_location_assignment PIN_K19 -to d_column_counter[8] + set_location_assignment PIN_K5 -to d_column_counter[9] + set_location_assignment PIN_L7 -to d_hsync + set_location_assignment PIN_L5 -to d_vsync + set_location_assignment PIN_F26 -to d_set_hsync_counter + set_location_assignment PIN_F24 -to d_set_vsync_counter + set_location_assignment PIN_F21 -to d_set_line_counter + set_location_assignment PIN_Y23 -to d_set_column_counter + set_location_assignment PIN_L3 -to d_r + set_location_assignment PIN_K24 -to d_g + set_location_assignment PIN_K20 -to d_b + set_location_assignment PIN_H18 -to d_v_enable + set_location_assignment PIN_J21 -to d_h_enable + set_location_assignment PIN_R8 -to seven_seg_pin[0] + set_location_assignment PIN_R9 -to seven_seg_pin[1] + set_location_assignment PIN_R19 -to seven_seg_pin[2] + set_location_assignment PIN_R20 -to seven_seg_pin[3] + set_location_assignment PIN_R21 -to seven_seg_pin[4] + set_location_assignment PIN_R22 -to seven_seg_pin[5] + set_location_assignment PIN_R23 -to seven_seg_pin[6] + set_location_assignment PIN_Y11 -to seven_seg_pin[7] + set_location_assignment PIN_N7 -to seven_seg_pin[8] + set_location_assignment PIN_N8 -to seven_seg_pin[9] + set_location_assignment PIN_R4 -to seven_seg_pin[10] + set_location_assignment PIN_R6 -to seven_seg_pin[11] + set_location_assignment PIN_AA11 -to seven_seg_pin[12] + set_location_assignment PIN_T2 -to seven_seg_pin[13] + set_location_assignment PIN_K3 -to d_state_clk + set_location_assignment PIN_H3 -to d_toggle + set_location_assignment PIN_H26 -to d_toggle_counter[0] + set_location_assignment PIN_G24 -to d_toggle_counter[15] + set_location_assignment PIN_G23 -to d_toggle_counter[16] + set_location_assignment PIN_G21 -to d_toggle_counter[17] + set_location_assignment PIN_G20 -to d_toggle_counter[18] + set_location_assignment PIN_G5 -to d_toggle_counter[19] + set_location_assignment PIN_G3 -to d_toggle_counter[20] + set_location_assignment PIN_G1 -to d_toggle_counter[21] + set_location_assignment PIN_F25 -to d_toggle_counter[22] + set_location_assignment PIN_F23 -to d_toggle_counter[23] + set_location_assignment PIN_T19 -to d_toggle_counter[24] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_column_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[1] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[2] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[3] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[4] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[5] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_counter[6] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_hsync_state + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_line_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[1] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[2] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[3] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[4] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[5] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_counter[6] + set_instance_assignment -name SLOW_SLEW_RATE ON -to d_vsync_state + set_instance_assignment -name SLOW_SLEW_RATE ON -to seven_seg_pin + + + # Commit assignments + export_assignments + +execute_flow -compile + + # Close project + if {$need_to_close_project} { + project_close + } +} diff --git a/bsp4/Angabe/vga_pos_tb.vhd b/bsp4/Angabe/vga_pos_tb.vhd new file mode 100644 index 0000000..ebcff70 --- /dev/null +++ b/bsp4/Angabe/vga_pos_tb.vhd @@ -0,0 +1,198 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-09-29 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_pos_tb is + +end vga_pos_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture structure of vga_pos_tb is + + constant cc : time := 39.7 ns; -- test clock period + + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out std_logic_vector(0 to 6); + d_vsync_state : out std_logic_vector(0 to 6); + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0)); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : std_logic_vector(0 to 6); + signal d_vsync_state : std_logic_vector(0 to 6); + signal d_state_clk : std_logic; + signal d_toggle : std_logic; + signal d_toggle_counter : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + signal clk : std_logic; + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk, + d_toggle => d_toggle, + d_toggle_counter => d_toggle_counter); + + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk <= '1'; + wait for cc/2; + clk <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk = '1' and clk'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(1000000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + + clk_pin <= clk; + +end structure; + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_pos of vga_pos_tb is + for structure + for vga_unit : vga use entity work.vga(structure); + end for; + end for; +end vga_conf_pos; + + + diff --git a/bsp4/Angabe/vga_pre_tb.vhd b/bsp4/Angabe/vga_pre_tb.vhd new file mode 100644 index 0000000..dc010f7 --- /dev/null +++ b/bsp4/Angabe/vga_pre_tb.vhd @@ -0,0 +1,197 @@ +------------------------------------------------------------------------------- +-- Title : vga testbench +-- Project : +------------------------------------------------------------------------------- +-- File : vga_tb.vhd +-- Author : Thomas Handl +-- Company : TU Wien +-- Created : 2004-04-07 +-- Last update: 2006-09-29 +-- Platform : +------------------------------------------------------------------------------- +-- Description: +------------------------------------------------------------------------------- +-- Copyright (c) 2004 TU Wien +------------------------------------------------------------------------------- +-- Revisions : +-- Date Version Author Description +-- 2004-04-07 1.0 handl Created +------------------------------------------------------------------------------- + + +------------------------------------------------------------------------------- +-- LIBRARIES +------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.all; +use IEEE.std_logic_arith.all; + +use work.vga_pak.all; + + +------------------------------------------------------------------------------- +-- ENTITY +------------------------------------------------------------------------------- +entity vga_pre_tb is + +end vga_pre_tb; + + +------------------------------------------------------------------------------- +-- ARCHITECTURE +------------------------------------------------------------------------------- +architecture structure of vga_pre_tb is + + constant cc : time := 39.7 ns; -- test clock period + + component vga + port ( + clk_pin : in std_logic; + reset_pin : in std_logic; + r0_pin, r1_pin, r2_pin : out std_logic; + g0_pin, g1_pin, g2_pin : out std_logic; + b0_pin, b1_pin : out std_logic; + hsync_pin : out std_logic; + vsync_pin : out std_logic; + seven_seg_pin : out std_logic_vector(2*SEG_WIDTH-1 downto 0); + d_hsync, d_vsync : out std_logic; + d_column_counter : out std_logic_vector(COL_CNT_WIDTH-1 downto 0); + d_line_counter : out std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + d_set_column_counter, d_set_line_counter : out std_logic; + d_hsync_counter : out std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + d_vsync_counter : out std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + d_set_hsync_counter, d_set_vsync_counter : out std_logic; + d_h_enable : out std_logic; + d_v_enable : out std_logic; + d_r, d_g, d_b : out std_logic; + d_hsync_state : out std_logic_vector(0 to 6); + d_vsync_state : out std_logic_vector(0 to 6); + d_state_clk : out std_logic; + d_toggle : out std_logic; + d_toggle_counter : out std_logic_vector(TOG_CNT_WIDTH-1 downto 0)); + end component; + + signal clk_pin : std_logic; + signal reset_pin : std_logic; + signal r0_pin, r1_pin, r2_pin : std_logic; + signal g0_pin, g1_pin, g2_pin : std_logic; + signal b0_pin, b1_pin : std_logic; + signal hsync_pin : std_logic; + signal vsync_pin : std_logic; + signal seven_seg_pin : std_logic_vector(2*SEG_WIDTH-1 downto 0); + signal d_hsync, d_vsync : std_logic; + signal d_column_counter : std_logic_vector(COL_CNT_WIDTH-1 downto 0); + signal d_line_counter : std_logic_vector(LINE_CNT_WIDTH-1 downto 0); + signal d_set_column_counter, d_set_line_counter : std_logic; + signal d_hsync_counter : std_logic_vector(HSYN_CNT_WIDTH-1 downto 0); + signal d_vsync_counter : std_logic_vector(VSYN_CNT_WIDTH-1 downto 0); + signal d_set_hsync_counter, d_set_vsync_counter : std_logic; + signal d_h_enable : std_logic; + signal d_v_enable : std_logic; + signal d_r, d_g, d_b : std_logic; + signal d_hsync_state : std_logic_vector(0 to 6); + signal d_vsync_state : std_logic_vector(0 to 6); + signal d_state_clk : std_logic; + signal d_toggle : std_logic; + signal d_toggle_counter : std_logic_vector(TOG_CNT_WIDTH-1 downto 0); + signal clk : std_logic; + +begin + + vga_unit: vga + port map ( + clk_pin => clk_pin, + reset_pin => reset_pin, + r0_pin => r0_pin, + r1_pin => r1_pin, + r2_pin => r2_pin, + g0_pin => g0_pin, + g1_pin => g1_pin, + g2_pin => g2_pin, + b0_pin => b0_pin, + b1_pin => b1_pin, + hsync_pin => hsync_pin, + vsync_pin => vsync_pin, + seven_seg_pin => seven_seg_pin, + d_hsync => d_hsync, + d_vsync => d_vsync, + d_column_counter => d_column_counter, + d_line_counter => d_line_counter, + d_set_column_counter => d_set_column_counter, + d_set_line_counter => d_set_line_counter, + d_hsync_counter => d_hsync_counter, + d_vsync_counter => d_vsync_counter, + d_set_hsync_counter => d_set_hsync_counter, + d_set_vsync_counter => d_set_vsync_counter, + d_h_enable => d_h_enable, + d_v_enable => d_v_enable, + d_r => d_r, + d_g => d_g, + d_b => d_b, + d_hsync_state => d_hsync_state, + d_vsync_state => d_vsync_state, + d_state_clk => d_state_clk, + d_toggle => d_toggle, + d_toggle_counter => d_toggle_counter); + + +------------------------------------------------------------------------------- +-- generate simulation clock +------------------------------------------------------------------------------- + CLKGEN : process + begin + clk <= '1'; + wait for cc/2; + clk <= '0'; + wait for cc/2; + end process CLKGEN; + +------------------------------------------------------------------------------- +-- test the design +------------------------------------------------------------------------------- + TEST_IT : process + + -- wait for n clock cycles + procedure icwait(cycles : natural) is + begin + for i in 1 to cycles loop + wait until clk = '1' and clk'event; + end loop; + end; + + begin + ----------------------------------------------------------------------------- + -- initial reset + ----------------------------------------------------------------------------- + reset_pin <= '0'; + icwait(10); + reset_pin <= '1'; + icwait(10000000); + + --------------------------------------------------------------------------- + -- exit testbench + --------------------------------------------------------------------------- + assert false + report "Test finished" + severity error; + + end process test_it; + + clk_pin <= clk; + +end structure; + +------------------------------------------------------------------------------- +-- configuration +------------------------------------------------------------------------------- +configuration vga_conf_pre of vga_pre_tb is + for structure + for vga_unit : vga use entity work.vga(beh); + end for; + end for; +end vga_conf_pre; + + + diff --git a/bsp4/Angabe/vpll.bsf b/bsp4/Angabe/vpll.bsf new file mode 100644 index 0000000..63c3118 --- /dev/null +++ b/bsp4/Angabe/vpll.bsf @@ -0,0 +1,49 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2004 Altera Corporation +Any megafunction design, and related netlist (encrypted or decrypted), +support information, device programming or simulation file, and any other +associated documentation or information provided by Altera or a partner +under Altera's Megafunction Partnership Program may be used only +to program PLD devices (but not masked PLD devices) from Altera. Any +other use of such megafunction design, netlist, support information, +device programming or simulation file, or any other related documentation +or information is prohibited for any other purpose, including, but not +limited to modification, reverse engineering, de-compiling, or use with +any other silicon devices, unless such use is explicitly licensed under +a separate agreement with Altera or a megafunction partner. Title to the +intellectual property, including patents, copyrights, trademarks, trade +secrets, or maskworks, embodied in any such megafunction design, netlist, +support information, device programming or simulation file, or any other +related documentation or information provided by Altera or a megafunction +partner, remains with Altera, the megafunction partner, or their respective +licensors. No other licenses, including any licenses needed under any third +party's intellectual property, are provided herein. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 16 16 112 112) + (text "vpll" (rect 5 0 22 12)(font "Arial" )) + (text "inst" (rect 8 80 25 92)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "inclk0" (rect 0 0 28 12)(font "Arial" )) + (text "inclk0" (rect 21 27 49 39)(font "Arial" )) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 96 32) + (output) + (text "c0" (rect 0 0 11 12)(font "Arial" )) + (text "c0" (rect 64 27 75 39)(font "Arial" )) + (line (pt 96 32)(pt 80 32)(line_width 1)) + ) + (drawing + (rectangle (rect 16 16 80 80)(line_width 1)) + ) +) diff --git a/bsp4/Angabe/vpll.vhd b/bsp4/Angabe/vpll.vhd new file mode 100644 index 0000000..dbb347f --- /dev/null +++ b/bsp4/Angabe/vpll.vhd @@ -0,0 +1,274 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: vpll.vhd +-- Megafunction Name(s): +-- altpll +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 4.1 Build 181 06/29/2004 SJ Full Version +-- ************************************************************ + + +--Copyright (C) 1991-2004 Altera Corporation +--Any megafunction design, and related netlist (encrypted or decrypted), +--support information, device programming or simulation file, and any other +--associated documentation or information provided by Altera or a partner +--under Altera's Megafunction Partnership Program may be used only +--to program PLD devices (but not masked PLD devices) from Altera. Any +--other use of such megafunction design, netlist, support information, +--device programming or simulation file, or any other related documentation +--or information is prohibited for any other purpose, including, but not +--limited to modification, reverse engineering, de-compiling, or use with +--any other silicon devices, unless such use is explicitly licensed under +--a separate agreement with Altera or a megafunction partner. Title to the +--intellectual property, including patents, copyrights, trademarks, trade +--secrets, or maskworks, embodied in any such megafunction design, netlist, +--support information, device programming or simulation file, or any other +--related documentation or information provided by Altera or a megafunction +--partner, remains with Altera, the megafunction partner, or their respective +--licensors. No other licenses, including any licenses needed under any third +--party's intellectual property, are provided herein. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.altera_mf_components.all; + +ENTITY vpll IS + PORT + ( + inclk0 : IN STD_LOGIC := '0'; +-- pllena : IN STD_LOGIC := '1'; +-- areset : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC +-- locked : OUT STD_LOGIC + ); +END vpll; + + +ARCHITECTURE SYN OF vpll IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_VECTOR (5 DOWNTO 0); + SIGNAL sub_wire5_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC ; + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (3 DOWNTO 0); + +signal pllena_int : std_logic; +signal areset_int : std_logic; +signal locked : std_logic; + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_duty_cycle : NATURAL; + lpm_type : STRING; + clk0_multiply_by : NATURAL; + invalid_lock_multiplier : NATURAL; + inclk0_input_frequency : NATURAL; + gate_lock_signal : STRING; + clk0_divide_by : NATURAL; + pll_type : STRING; + valid_lock_multiplier : NATURAL; + clk0_time_delay : STRING; + spread_frequency : NATURAL; + intended_device_family : STRING; + operation_mode : STRING; + compensate_clock : STRING; + clk0_phase_shift : STRING + ); + PORT ( + clkena : IN STD_LOGIC_VECTOR (5 DOWNTO 0); + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + pllena : IN STD_LOGIC ; + extclkena : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + locked : OUT STD_LOGIC ; + areset : IN STD_LOGIC ; + clk : OUT STD_LOGIC_VECTOR (5 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire3_bv(0 DOWNTO 0) <= "0"; + sub_wire3 <= To_stdlogicvector(sub_wire3_bv); + sub_wire5_bv(0 DOWNTO 0) <= "0"; + sub_wire5 <= NOT(To_stdlogicvector(sub_wire5_bv)); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + locked <= sub_wire2; + sub_wire4 <= sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire5(0 DOWNTO 0); + sub_wire6 <= inclk0; + sub_wire7 <= sub_wire3(0 DOWNTO 0) & sub_wire6; + sub_wire8 <= sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0) & sub_wire3(0 DOWNTO 0); + +areset_int <= '0'; +pllena_int <= '1'; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_duty_cycle => 50, + lpm_type => "altpll", + clk0_multiply_by => 5435, + invalid_lock_multiplier => 5, + inclk0_input_frequency => 30003, + gate_lock_signal => "NO", + clk0_divide_by => 6666, + pll_type => "AUTO", + valid_lock_multiplier => 1, + clk0_time_delay => "0", + spread_frequency => 0, + intended_device_family => "Stratix", + operation_mode => "NORMAL", + compensate_clock => "CLK0", + clk0_phase_shift => "0" + ) + PORT MAP ( + clkena => sub_wire4, + inclk => sub_wire7, + pllena => pllena_int, + extclkena => sub_wire8, + areset => areset_int, + clk => sub_wire0, + locked => sub_wire2 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" +-- Retrieval info: PRIVATE: TIME_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "6" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "33.330" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "299.970" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "33.330" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "27.175" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: DEV_FAMILY STRING "Stratix" +-- Retrieval info: PRIVATE: LOCK_LOSS_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: DEVICE_FAMILY NUMERIC "9" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "5435" +-- Retrieval info: CONSTANT: INVALID_LOCK_MULTIPLIER NUMERIC "5" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "30003" +-- Retrieval info: CONSTANT: GATE_LOCK_SIGNAL STRING "NO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "6666" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: VALID_LOCK_MULTIPLIER NUMERIC "1" +-- Retrieval info: CONSTANT: CLK0_TIME_DELAY STRING "0" +-- Retrieval info: CONSTANT: SPREAD_FREQUENCY NUMERIC "0" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Stratix" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT VCC "c0" +-- Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT VCC "@clk[5..0]" +-- 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: USED_PORT: pllena 0 0 0 0 INPUT VCC "pllena" +-- 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: areset 0 0 0 0 INPUT GND "areset" +-- 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: @extclkena 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 4 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: @pllena 0 0 0 0 pllena 0 0 0 0 +-- Retrieval info: CONNECT: @extclkena 0 0 1 2 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 5 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 2 GND 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 0 VCC 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @extclkena 0 0 1 3 GND 0 0 0 0 +-- Retrieval info: CONNECT: @extclkena 0 0 1 0 GND 0 0 0 0 +-- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 +-- Retrieval info: CONNECT: @clkena 0 0 1 3 GND 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.vhd TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.inc FALSE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.cmp TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll.bsf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL vpll_inst.vhd TRUE FALSE diff --git a/bsp4/Protokolle/DigitalDesign_prot.sty b/bsp4/Protokolle/DigitalDesign_prot.sty new file mode 100644 index 0000000..6cb3c1c --- /dev/null +++ b/bsp4/Protokolle/DigitalDesign_prot.sty @@ -0,0 +1,225 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% DigitalDesign_app.sty +% +% Babak Rahbaran +% (rahbaran@ecs.tuwien.ac.at) +% +% 14.07.03 +% +% Institut f"ur Technische Informatik (182/2) +% ECS Group +% Technische Universit"at Wien +% 1040 Treitlstr. 3, 2. Stk. +% (www.ecs.tuwien.ac.at) +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% packages +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage{fancyheadings} +\usepackage{german} +\usepackage{graphicx} +\usepackage[latin1]{inputenc} %------- Umlaute im Text + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% user-defined commands +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% typeset pin numbers +\newcommand{\pin}[1]{\emph{\textbf{#1}}\ } +\renewcommand{\chaptername}{Aufgabe} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% some size definitions and counter settings +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\oddsidemargin 1cm +\evensidemargin 1cm +\topmargin 0pt +\headsep 50pt +\textheight 21.5cm +\textwidth 14.1cm + +\renewcommand{\floatpagefraction}{0.9} +\renewcommand{\textfraction}{0.05} +\renewcommand{\topfraction}{1.0} +\renewcommand{\bottomfraction}{1.0} + +\setcounter{totalnumber}{3} +\setcounter{bottomnumber}{3} +\setcounter{topnumber}{3} + +\setlength{\unitlength}{1mm} +\setlength{\parindent}{6mm} +\setlength{\parskip}{12pt plus2pt minus2pt} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% define variables used on titlepage +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% heading +\def\headline#1{\gdef\@headline{#1}} +% group number +\def\groupnr#1{\gdef\@groupnr{#1}} +% authors +\def\vornamea#1{\gdef\@vornamea{#1}} +\def\nachnamea#1{\gdef\@nachnamea{#1}} +\def\matrikela#1{\gdef\@matrikela{#1}} +\def\emaila#1{\gdef\@emaila{#1}} + +\def\vornameb#1{\gdef\@vornameb{#1}} +\def\nachnameb#1{\gdef\@nachnameb{#1}} +\def\matrikelb#1{\gdef\@matrikelb{#1}} +\def\emailb#1{\gdef\@emailb{#1}} + +\def\vornamec#1{\gdef\@vornamec{#1}} +\def\nachnamec#1{\gdef\@nachnamec{#1}} +\def\matrikelc#1{\gdef\@matrikelc{#1}} +\def\emailc#1{\gdef\@emailc{#1}} + +%\def\vornamed#1{\gdef\@vornamed{#1}} +%\def\nachnamed#1{\gdef\@nachnamed{#1}} +%\def\matrikeld#1{\gdef\@matrikeld{#1}} +%\def\emaild#1{\gdef\@emaild{#1}} + +% address of department +\def\address#1{\gdef\@address{#1}} +% LVA-Nr. +\def\lvanr#1{\gdef\@aufgabe{#1}} + +\setcounter{footnote}{0} + +% initialize variables +\gdef\@headline{Digital Design LU} +\gdef\@title{P r o t o k o l l} + +\gdef\@groupnr{00} + +\gdef\@vornamea{Vorname1} +\gdef\@nachnamea{Nachname1} +\gdef\@matrikela{0000000} +\gdef\@emaila{a@æstudent.tuwien.ac.at} + +\gdef\@vornameb{Vorname2} +\gdef\@nachnameb{Nachname2} +\gdef\@matrikelb{0000000} +\gdef\@emailb{b@æstudent.tuwien.ac.at} + +\gdef\@vornamec{Vorname3} +\gdef\@nachnamec{Nachname3} +\gdef\@matrikelc{0000000} +\gdef\@emailc{c@student.tuwien.ac.at} + +%\gdef\@vornamed{Vorname4} +%\gdef\@nachnamed{Nachname4} +%\gdef\@matrikeld{0000000} +%\gdef\@emaild{d@student.tuwien.ac.at} + +\gdef\@aufgabe{zu Aufgabe 1} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% titlepage +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\maketitle{ +\begin{titlepage} + +% enlarge page +\setlength{\topmargin}{0pt} +\setlength{\headheight}{0pt} +\setlength{\headsep}{0pt} +\setlength{\footskip}{0pt} + +\let\footnotesize\small \let\footnoterule\relax \setcounter{page}{1} +\null +\vfill +\large +\vskip -4 cm + +\begin{center} +% heading +{\LARGE\bf \@headline \par} \vskip 2cm + +\vskip 1cm + +% title +{\Huge\bf\underline \@title \par} +\vskip 1cm +%{\Large \bf \@aufgabe \par} +\vskip 4cm + +\begin{flushright} +Gruppe \@groupnr \par +% authors +\@vornamea \ \@nachnamea, Matr. Nr. \@matrikela \par +{\small \@emaila \par} +\@vornameb \ \@nachnameb, Matr. Nr. \@matrikelb \par +{\small \@emailb \par} +\@vornamec \ \@nachnamec, Matr. Nr. \@matrikelc \par +{\small \@emailc \par} +%\@vornamed \ \@nachnamed, Matr. Nr. \@matrikeld \par +%{\small \@emaild \par} + +%\@authora \par +%\@authorb \par +%\@authorc \par +%\@authord \par +\vskip 1cm +Wien, am~\today{} +\end{flushright} +\end{center} \par +\vskip 1.5cm + +\end{titlepage} + +\setcounter{footnote}{0} +\let\thanks\relax +} % \def\maketitle + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\newenvironment{Ventry}[1]% +{\begin{list}{}{\renewcommand{\makelabel}[1]{\textbf{##1:}\hfill}% +\settowidth{\labelwidth}{\textbf{#1:}}% +\setlength{\leftmargin}{\labelwidth}% +\addtolength{\leftmargin}{\labelsep}}}% +{\end{list}} + +\newcommand{\tablesize}{\fontsize{8}{10}\selectfont} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% layout of non-title pages +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\pagenumbering{roman} +\setlength{\parskip}{5pt plus2pt minus2pt} + +\setlength{\parskip}{1mm} +\clearpage +\setlength{\parskip}{5pt plus2pt minus2pt} + +\pagestyle{fancy} +\renewcommand{\chaptermark}[1]{\markboth{\thechapter\ #1}{}} +\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}{}} +\addtolength{\headheight}{2pt} + +\pagenumbering{arabic} +\setcounter{page} {1} diff --git a/bsp4/Protokolle/DigitalDesign_prot.tex b/bsp4/Protokolle/DigitalDesign_prot.tex new file mode 100644 index 0000000..acbdaed --- /dev/null +++ b/bsp4/Protokolle/DigitalDesign_prot.tex @@ -0,0 +1,36 @@ + +\documentclass[12pt,a4paper,titlepage,oneside]{report} + + +\usepackage{DigitalDesign_prot} +\sloppy + + +\begin{document} +% create titlepage +\maketitle + +% tables and lists +%\tableofcontents +%\newpage +%\listoffigures +%\newpage +%\listoftables +%\newpage + +% chapters +\input{chapter1} +\input{chapter2} +\input{chapter3} +\input{chapter4} + +% appendices +%\appendix +%\input{app1} + +% bibliography +%\bibliographystyle{alpha} +%\nocite{*} +%\bibliography{DigitalDesign} + +\end{document} diff --git a/bsp4/Protokolle/chapter1.tex b/bsp4/Protokolle/chapter1.tex new file mode 100644 index 0000000..27f796e --- /dev/null +++ b/bsp4/Protokolle/chapter1.tex @@ -0,0 +1,10 @@ +\chapter{Logikanalysator} + + +\begin{itemize} +\item Frequenz HSYNC = Hz +\item Frequenz VSYNC = Hz +\item Farbe Pixel = (r,g,b) +\item Farbe Hintergrund = (r,g,b) +\item x-Koordinate = +\end{itemize} diff --git a/bsp4/Protokolle/chapter2.tex b/bsp4/Protokolle/chapter2.tex new file mode 100644 index 0000000..a8ddc1a --- /dev/null +++ b/bsp4/Protokolle/chapter2.tex @@ -0,0 +1,6 @@ +\chapter{Design-Flow} + +\begin{itemize} +\item Blinkfrequenz = Hz +\end{itemize} + diff --git a/bsp4/Protokolle/chapter3.tex b/bsp4/Protokolle/chapter3.tex new file mode 100644 index 0000000..c6bbec2 --- /dev/null +++ b/bsp4/Protokolle/chapter3.tex @@ -0,0 +1 @@ +\chapter{VHDL} diff --git a/bsp4/Protokolle/chapter4.tex b/bsp4/Protokolle/chapter4.tex new file mode 100644 index 0000000..4b1b7cc --- /dev/null +++ b/bsp4/Protokolle/chapter4.tex @@ -0,0 +1,13 @@ +\chapter{Simulation und Test} + +\begin{itemize} +\item File Syntaxfehler: +\item Zeilennummer Syntaxfehler: + +\item File Semantikfehler 1: +\item Zeilennummer Semantikfehler 1: + +\item File Semantikfehler 2: +\item Zeilennummer Semantikfehler 2: +\end{itemize} + diff --git a/bsp4/Protokolle/prot_1.txt b/bsp4/Protokolle/prot_1.txt new file mode 100644 index 0000000..91a8a82 --- /dev/null +++ b/bsp4/Protokolle/prot_1.txt @@ -0,0 +1,6 @@ + +Frequenz HSYNC = ___ ___ Hz +Frequenz VSYNC = ___ ___ Hz +Farbe Pixel = (r,g,b) +Farbe Hintergrund = (r,g,b) +x-Koordinate = ___ ___ diff --git a/bsp4/Protokolle/prot_2.txt b/bsp4/Protokolle/prot_2.txt new file mode 100644 index 0000000..da24c18 --- /dev/null +++ b/bsp4/Protokolle/prot_2.txt @@ -0,0 +1 @@ +blinker_max = ___ ___ diff --git a/bsp4/Protokolle/prot_4.txt b/bsp4/Protokolle/prot_4.txt new file mode 100644 index 0000000..d45603d --- /dev/null +++ b/bsp4/Protokolle/prot_4.txt @@ -0,0 +1,9 @@ +File Syntaxfehler: ___ ___ +Zeilennummer Syntaxfehler: ___ ___ + +File Semantikfehler 1: ___ ___ +Zeilennummer Semantikfehler 1: ___ ___ + +File Semantikfehler 2: ___ ___ +Zeilennummer Semantikfehler 2: ___ ___ + -- 2.25.1