From 620537c0214c4fe370c1db364c399d0a5cb5e1c6 Mon Sep 17 00:00:00 2001 From: Renan Augusto Starke Date: Mon, 8 Jul 2019 16:41:58 -0300 Subject: [PATCH] Added peripherals --- CONTRIBUTORS.md | 23 + alu/m/M.vhd | 54 + alu/m/M_types.vhd | 27 + alu/m/README.md | 74 + alu/m/img/M_unit.png | Bin 0 -> 45641 bytes alu/m/img/M_word.png | Bin 0 -> 17959 bytes alu/m/img/mul_machine_state.png | Bin 0 -> 57025 bytes alu/m/img/rv32M_standard_extension.png | Bin 0 -> 42001 bytes alu/m/tb_M.do | 29 + alu/m/tb_M.vhd | 106 + peripherals/README.md | 1 + peripherals/adc/README.md | 41 + peripherals/adc/adc.bsf | 178 + peripherals/adc/adc.cmp | 20 + peripherals/adc/adc.ppf | 39 + peripherals/adc/adc_bb.v | 34 + peripherals/adc/adc_inst.v | 18 + peripherals/adc/adc_inst.vhd | 39 + peripherals/adc/adc_qsys.qsys | 511 + peripherals/adc/adc_qsys.sopcinfo | 5285 +++++++++++ peripherals/adc/de10_lite.vhd | 381 + peripherals/adc/pll/pll_quartus.cmp | 25 + peripherals/adc/pll/pll_quartus.ppf | 12 + peripherals/adc/pll/pll_quartus.qip | 7 + peripherals/adc/pll/pll_quartus.vhd | 399 + peripherals/adc/pll/pll_quartus_inst.vhd | 7 + peripherals/adc/sint/de10_lite.ipregen.rpt | 68 + peripherals/adc/sint/de10_lite.qpf | 31 + peripherals/adc/sint/de10_lite.qsf | 235 + peripherals/adc/sint/de10_lite.sdc | 86 + .../sint/de10_lite_assignment_defaults.qdf | 807 ++ .../adc/sint/de10_lite_description.txt | 0 peripherals/disp7seg/display_dec.vhd | 42 + peripherals/sdram/README.md | 20 + peripherals/sdram/de10_lite.vhd | 371 + peripherals/sdram/pll/pll.ppf | 14 + peripherals/sdram/pll/pll.qip | 5 + peripherals/sdram/pll/pll.vhd | 461 + peripherals/sdram/sdram_controller.vhd | 480 + peripherals/sdram/sim/mt48lc8m16a2.vhd | 1120 +++ peripherals/sdram/sim/mti_pkg.vhd | 143 + peripherals/sdram/sint/de10_lite.ipregen.rpt | 68 + peripherals/sdram/sint/de10_lite.qpf | 31 + peripherals/sdram/sint/de10_lite.qsf | 233 + peripherals/sdram/sint/de10_lite.qws | Bin 0 -> 619 bytes peripherals/sdram/sint/de10_lite.sdc | 86 + .../sint/de10_lite_assignment_defaults.qdf | 807 ++ .../sdram/sint/de10_lite_description.txt | 0 peripherals/sdram/testbench_sdram.do | 42 + peripherals/sdram/testbench_sdram.vhd | 133 + peripherals/vga/README.md | 29 + peripherals/vga/RTL/VGA-rtl.png | Bin 0 -> 29635 bytes .../Rescale/hw_image_generator_reescale.vhd | 34 + peripherals/vga/Rescale/vga_addr_rescale.vhd | 36 + peripherals/vga/de10_lite.vhd | 303 + peripherals/vga/hw_image_generator.vhd | 28 + peripherals/vga/pll/pll.cmp | 25 + peripherals/vga/pll/pll.ppf | 12 + peripherals/vga/pll/pll.qip | 6 + peripherals/vga/pll/pll.vhd | 399 + peripherals/vga/ram_vga.cmp | 27 + peripherals/vga/ram_vga.qip | 5 + peripherals/vga/ram_vga.vhd | 198 + peripherals/vga/sint/db/de10_lite.db_info | 3 + peripherals/vga/sint/de10_lite.ipregen.rpt | 68 + peripherals/vga/sint/de10_lite.qpf | 31 + peripherals/vga/sint/de10_lite.qsf | 238 + peripherals/vga/sint/de10_lite.sdc | 86 + .../sint/de10_lite_assignment_defaults.qdf | 807 ++ .../vga/sint/de10_lite_description.txt | 0 peripherals/vga/vga.hex | 8193 +++++++++++++++++ peripherals/vga/vga_buffer.vhd | 84 + peripherals/vga/vga_controller.vhd | 101 + tests/Makefile | 2 +- tests/firmware.lss | 38 +- tests/firmware.map | 10 +- tests/firmware32.hex | 730 -- tests/quartus.hex | 36 +- 78 files changed, 23349 insertions(+), 773 deletions(-) create mode 100644 CONTRIBUTORS.md create mode 100644 alu/m/M.vhd create mode 100644 alu/m/M_types.vhd create mode 100644 alu/m/README.md create mode 100644 alu/m/img/M_unit.png create mode 100644 alu/m/img/M_word.png create mode 100644 alu/m/img/mul_machine_state.png create mode 100644 alu/m/img/rv32M_standard_extension.png create mode 100644 alu/m/tb_M.do create mode 100644 alu/m/tb_M.vhd create mode 100644 peripherals/README.md create mode 100644 peripherals/adc/README.md create mode 100644 peripherals/adc/adc.bsf create mode 100644 peripherals/adc/adc.cmp create mode 100644 peripherals/adc/adc.ppf create mode 100644 peripherals/adc/adc_bb.v create mode 100644 peripherals/adc/adc_inst.v create mode 100644 peripherals/adc/adc_inst.vhd create mode 100644 peripherals/adc/adc_qsys.qsys create mode 100644 peripherals/adc/adc_qsys.sopcinfo create mode 100644 peripherals/adc/de10_lite.vhd create mode 100644 peripherals/adc/pll/pll_quartus.cmp create mode 100644 peripherals/adc/pll/pll_quartus.ppf create mode 100644 peripherals/adc/pll/pll_quartus.qip create mode 100644 peripherals/adc/pll/pll_quartus.vhd create mode 100644 peripherals/adc/pll/pll_quartus_inst.vhd create mode 100644 peripherals/adc/sint/de10_lite.ipregen.rpt create mode 100644 peripherals/adc/sint/de10_lite.qpf create mode 100644 peripherals/adc/sint/de10_lite.qsf create mode 100644 peripherals/adc/sint/de10_lite.sdc create mode 100644 peripherals/adc/sint/de10_lite_assignment_defaults.qdf create mode 100644 peripherals/adc/sint/de10_lite_description.txt create mode 100644 peripherals/disp7seg/display_dec.vhd create mode 100644 peripherals/sdram/README.md create mode 100644 peripherals/sdram/de10_lite.vhd create mode 100644 peripherals/sdram/pll/pll.ppf create mode 100644 peripherals/sdram/pll/pll.qip create mode 100644 peripherals/sdram/pll/pll.vhd create mode 100644 peripherals/sdram/sdram_controller.vhd create mode 100644 peripherals/sdram/sim/mt48lc8m16a2.vhd create mode 100644 peripherals/sdram/sim/mti_pkg.vhd create mode 100644 peripherals/sdram/sint/de10_lite.ipregen.rpt create mode 100644 peripherals/sdram/sint/de10_lite.qpf create mode 100644 peripherals/sdram/sint/de10_lite.qsf create mode 100644 peripherals/sdram/sint/de10_lite.qws create mode 100644 peripherals/sdram/sint/de10_lite.sdc create mode 100644 peripherals/sdram/sint/de10_lite_assignment_defaults.qdf create mode 100644 peripherals/sdram/sint/de10_lite_description.txt create mode 100644 peripherals/sdram/testbench_sdram.do create mode 100644 peripherals/sdram/testbench_sdram.vhd create mode 100644 peripherals/vga/README.md create mode 100644 peripherals/vga/RTL/VGA-rtl.png create mode 100644 peripherals/vga/Rescale/hw_image_generator_reescale.vhd create mode 100644 peripherals/vga/Rescale/vga_addr_rescale.vhd create mode 100644 peripherals/vga/de10_lite.vhd create mode 100644 peripherals/vga/hw_image_generator.vhd create mode 100644 peripherals/vga/pll/pll.cmp create mode 100644 peripherals/vga/pll/pll.ppf create mode 100644 peripherals/vga/pll/pll.qip create mode 100644 peripherals/vga/pll/pll.vhd create mode 100644 peripherals/vga/ram_vga.cmp create mode 100644 peripherals/vga/ram_vga.qip create mode 100644 peripherals/vga/ram_vga.vhd create mode 100644 peripherals/vga/sint/db/de10_lite.db_info create mode 100644 peripherals/vga/sint/de10_lite.ipregen.rpt create mode 100644 peripherals/vga/sint/de10_lite.qpf create mode 100644 peripherals/vga/sint/de10_lite.qsf create mode 100644 peripherals/vga/sint/de10_lite.sdc create mode 100644 peripherals/vga/sint/de10_lite_assignment_defaults.qdf create mode 100644 peripherals/vga/sint/de10_lite_description.txt create mode 100644 peripherals/vga/vga.hex create mode 100644 peripherals/vga/vga_buffer.vhd create mode 100644 peripherals/vga/vga_controller.vhd delete mode 100644 tests/firmware32.hex diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md new file mode 100644 index 00000000..848b21ef --- /dev/null +++ b/CONTRIBUTORS.md @@ -0,0 +1,23 @@ +RISVC contributors (sorted alphabetically) +============================================ + +* **[Cleisson Fernandes Da Silva](https://github.com/cleissom)** + + * SDRAM firts integration (first attempt) + +* **[Ian Schmiegelow Dannapel](https://github.com/Eximmius)** + + * VGA integration (internal SRAM) + +* **[Jeferson Cansi Pedroso](https://github.com/jefersonpedroso)** + + * MAX10 ADC integration + +* **[Lucas Seara Manoel](https://github.com/lsmanoel)** + + * [M] Instructions extension. + +* **[Marcos Vinicius Leal Da Silva](https://github.com/marcosleal)** + + * 9600 baud rate UART. + \ No newline at end of file diff --git a/alu/m/M.vhd b/alu/m/M.vhd new file mode 100644 index 00000000..d973d519 --- /dev/null +++ b/alu/m/M.vhd @@ -0,0 +1,54 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.M_types.all; + +entity M is + port( + M_data : in M_data_t; + dataOut : out std_logic_vector(31 downto 0) + ); +end entity; + +architecture RTL of M is + ------------------------------------------------------------------- + + + signal mul_signed: Signed(63 downto 0); + signal mulu_unsigned: Unsigned(63 downto 0); + + signal div_signed: Signed(31 downto 0); + signal divu_unsigned: Unsigned(31 downto 0); + + signal rem_signed: Signed(31 downto 0); + signal remu_unsigned: Unsigned(31 downto 0); + +begin + --===============================================================-- + + mul_signed <= M_data.a*M_data.b; + mulu_unsigned <= Unsigned(M_data.a)*Unsigned(M_data.b); + + div_signed <= M_data.a/M_data.b; + divu_unsigned <= Unsigned(M_data.a)/Unsigned(M_data.b); + + rem_signed <= M_data.a mod M_data.b; + remu_unsigned <= Unsigned(M_data.a) mod Unsigned(M_data.b); + + ula_op : with M_data.code select + dataOut <= Std_logic_vector(mul_signed(31 downto 0)) when M_MUL, + Std_logic_vector(mul_signed(63 downto 32)) when M_MULH, + + Std_logic_vector(mulu_unsigned(63 downto 32)) when M_MULHU, + Std_logic_vector(mulu_unsigned(63 downto 32)) when M_MULHSU, + + Std_logic_vector(div_signed) when M_DIV, + Std_logic_vector(divu_unsigned) when M_DIVU, + + Std_logic_vector(rem_signed) when M_REM, + Std_logic_vector(remu_unsigned) when M_REMU, + + (others => '0') when others; + +end architecture; \ No newline at end of file diff --git a/alu/m/M_types.vhd b/alu/m/M_types.vhd new file mode 100644 index 00000000..59afabd7 --- /dev/null +++ b/alu/m/M_types.vhd @@ -0,0 +1,27 @@ +LIBRARY ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +package M_types is + + --! Record for instruction decoding + type M_data_t is record + a : signed(31 downto 0); --! Source operand A + b : signed(31 downto 0); --! Source operand B + code : std_logic_vector(2 downto 0); --! Alu operation code + end record M_data_t; + + constant M_MUL: std_logic_vector(2 downto 0) := "000"; + constant M_MULH: std_logic_vector(2 downto 0) := "001"; + constant M_MULHU: std_logic_vector(2 downto 0) := "010"; + constant M_MULHSU: std_logic_vector(2 downto 0) := "011"; + constant M_DIV: std_logic_vector(2 downto 0) := "100"; + constant M_DIVU: std_logic_vector(2 downto 0) := "101"; + constant M_REM: std_logic_vector(2 downto 0) := "110"; + constant M_REMU: std_logic_vector(2 downto 0) := "111"; + +end package; + +package body M_types is + +end; diff --git a/alu/m/README.md b/alu/m/README.md new file mode 100644 index 00000000..57d35442 --- /dev/null +++ b/alu/m/README.md @@ -0,0 +1,74 @@ +# [“M” Standard Extension for Integer Multiplication and Division, Version 2.0](https://content.riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf#chapter.6) + +[RV32/64G Instruction Set Listings](https://content.riscv.org/wp-content/uploads/2017/05/riscv-spec-v2.2.pdf#chapter.19) + +![M word](./img/M_word.png) + +![RV32M Standard Extension](./img/rv32M_standard_extension.png) + +* MUL - **Signed\*Signed** 32 bits multiplication (rs1*rs2) - Place lower 32 bits in rd. +* MULH - **Signed\*Signed** 32 bits multiplication (rs1*rs2) - Place higher 32 bits in rd. +* MULHU - **Unsigned\*Unsigned** 32 bits multiplication (rs1*rs2) - Place higher 32 bits in rd. +* MULHSU - **Signed\*Unsigned** 32 bits multiplication (rs1*rs2) - Place higher 32 bits in rd. +* DIV - **Signed\*Signed** 32 bits division (rs1*rs2) - Place lower 32 bits in rd. +* DIVU - **Unsigned\*Unsigned** 32 bits division (rs1*rs2) - Place lower 32 bits in rd. +* REM - **Signed** remainder of the corresponding division operation +* REMU - **Unsigned** remainder of the corresponding division operation + +![RV32M Standard Extension](./img/M_unit.png) + +##Files to use M unit: + +* M_types.vhd +* M.vhd + +##Testbench: + +* tb_M.do - Modelsim +* tb_M.vhd + +##Code to Teste: +```C +#include "utils.h" +#include "hardware.h" +#include + +int main(){ + volatile int a_int32=3, b_int32=2; + volatile int a_int64=3, b_int64=2; + + volatile uint32_t a_uint32=INT_MAX, b_uint32=2; + volatile uint64_t a_uint64=INT_MAX, b_uint64=2; + + volatile uint64_t mul_result; + volatile uint32_t mulh_result; + volatile uint32_t mulhsu_result; + volatile uint32_t mulhu_result; + volatile int div_result; + volatile uint32_t divu_result; + volatile int rem_result; + volatile uint32_t remu_result; + + while (1){ + + + mul_result = a_uint32 * b_int32; + + mulh_result = a_int64*b_int64; + + mulhsu_result = a_uint64*b_uint64; + + mulh_result = a_int64*b_int64; + + div_result = a_int32/b_int32; + + divu_result = a_uint32/b_uint32; + + div_result = a_int32%b_int32; + + divu_result = a_uint32%b_uint32; + } + + return 0; +} +``` diff --git a/alu/m/img/M_unit.png b/alu/m/img/M_unit.png new file mode 100644 index 0000000000000000000000000000000000000000..07244300f70708a2247663815a16cbccf49451a7 GIT binary patch literal 45641 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 Qn}Q#D+S|1rXjq*4Kc!*XD*ylh literal 0 HcmV?d00001 diff --git a/alu/m/img/M_word.png b/alu/m/img/M_word.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d669870cff20c39adce22eb11eb3352cc78299 GIT binary patch literal 17959 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 Zmp{UAuA6tIIC)Wat7s}eQ!+aLzW^NMt7HHG literal 0 HcmV?d00001 diff --git a/alu/m/tb_M.do b/alu/m/tb_M.do new file mode 100644 index 00000000..a04bee09 --- /dev/null +++ b/alu/m/tb_M.do @@ -0,0 +1,29 @@ +#Cria Biblioteca +vlib work + +#Compila Projeto +vcom M_types.vhd +vcom M.vhd +vcom tb_M.vhd + +#Simula +vsim -t ns work.tb_M + +#Mosta forma de onda +view wave + +#Adiciona ondas específicas +#radix: binary, hex, dec +#label: nome da forma de onda + +#------------------------------------------------------------------------------------------ +add wave -radix dec -label a_integer /a_integer +add wave -radix dec -label b_integer /b_integer +add wave -radix dec -label M_data_out_integer /M_data_out_integer +add wave -radix bin -label code_logic_vector /code_logic_vector + +#------------------------------------------------------------------------------------------ +run 100ns + +wave zoomfull +write wave wave.pss \ No newline at end of file diff --git a/alu/m/tb_M.vhd b/alu/m/tb_M.vhd new file mode 100644 index 00000000..fe27ef7a --- /dev/null +++ b/alu/m/tb_M.vhd @@ -0,0 +1,106 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +use work.M_types.all; + +entity tb_M is +end entity; + +architecture waveform of tb_M is + ------------------------------------------------------------------- + -- CLOCK + signal clock_50_0_logic, clock_50_PI_logic: std_logic; + + ------------------------------------------------------------------- + -- M + component M is + port( + M_DATA : in M_data_t; + DATAOUT : out std_logic_vector(31 downto 0) + ); + end component; + + -------------------------------------------------------------------- + -- A and B + signal a_integer: integer; + signal a_signed: signed (31 downto 0); + signal a_logic_vector: std_logic_vector (31 downto 0); + + signal b_integer: integer; + signal b_signed: signed (31 downto 0); + signal b_logic_vector: std_logic_vector (31 downto 0); + + -------------------------------------------------------------------- + -- code + signal code_logic_vector: std_logic_vector (2 downto 0); + + -------------------------------------------------------------------- + -- M_data + signal M_data_record: M_data_t; + + -------------------------------------------------------------------- + -- DATAOUT + signal M_data_out_integer: integer; + signal M_data_out_signed: signed(31 downto 0); + signal M_data_out_logic_vector: std_logic_vector(31 downto 0); + +begin + --===============================================================-- + -- M + M_vhd: M + port map( + M_DATA => M_data_record, + DATAOUT => M_data_out_logic_vector + ); + + --===============================================================-- + -- A and B + a_signed <= To_signed(a_integer, 32); + a_logic_vector <= Std_logic_vector(a_signed); + + b_signed <= To_signed(b_integer, 32); + b_logic_vector <= Std_logic_vector(b_signed); + + a_integer <= 7; + b_integer <= 3; + + --===============================================================-- + -- code + SET_CODE: process -- 50 MHz phase pi + begin + code_logic_vector <= "000"; + wait for 10 ns; + code_logic_vector <= "001"; + wait for 10 ns; + code_logic_vector <= "010"; + wait for 10 ns; + code_logic_vector <= "011"; + wait for 10 ns; + code_logic_vector <= "100"; + wait for 10 ns; + code_logic_vector <= "101"; + wait for 10 ns; + code_logic_vector <= "110"; + wait for 10 ns; + code_logic_vector <= "111"; + wait for 10 ns; + end process; + + + --===============================================================-- + -- M_data + M_data_record.a <= a_signed; + M_data_record.b <= b_signed; + M_data_record.code <= code_logic_vector; + + --===============================================================-- + -- DATAOUT + M_data_out_signed <= Signed(M_data_out_logic_vector); + M_data_out_integer <= To_integer(M_data_out_signed); + + --&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&-- + -- Code + M_data_record.code <= code_logic_vector; + +end architecture; \ No newline at end of file diff --git a/peripherals/README.md b/peripherals/README.md new file mode 100644 index 00000000..54d78531 --- /dev/null +++ b/peripherals/README.md @@ -0,0 +1 @@ +# Peripherals base folder diff --git a/peripherals/adc/README.md b/peripherals/adc/README.md new file mode 100644 index 00000000..0406eb5d --- /dev/null +++ b/peripherals/adc/README.md @@ -0,0 +1,41 @@ + + +DOCUMENTAÇÃO ADC E DISPLAY 7 SEGMENTOS DE-10LITE + + +1- O HARDWARE + + +A implementação do ADC trata-se de um bloco IP da Altera, é configurado pelo arquivo "adc_qsys.qsys" utilizando-se a ferramenta própria da Altera. +Maiores informações em https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/hb/max-10/archives/ug-m10-adc-16.1.pdf + +No arquivo "Top-level Hierarchy", "de0_lite.vhd", pode-se observar a Instancia do Componente ADC bem como o Port Map e Sinais necessários para o seu funcionamento. + +No process "-- Output register" o softcore envia ao hardware o número do canal que deve ser lido o ADC e também o registrador com os dígitos separados em hexadecimal que devem ser enviados aos displays de 7 segmentos do kit. + +No process "-- Input register" envia-se o valor do ADC para o registrador de I/O do softcore, onde os 12 bits menos significativos do registrador de I/O recebe o valor bruto do ADC e os bits 12 a 15 recebem o número do canal cujo valor foi lido, conforme ilustrado abaixo: + + input_in(11 downto 0) <= adc_sample_data; + input_in(15 downto 12) <= cur_adc_ch(3 downto 0); + + +Também neste mesmo arquivo foi declarado os componentes "displays()" que são responsáveis por receber um dígito hexadecimal e codifiar para os respectivos displays de 7 segmentos presentes no Kit DE-10LITE. + + +2- SOFTWARE + +No arquivo "hardware.h" estão definidos os nomes e endereços dos registradores de I/O: + +INDATA_ADC -> recebe o valor do ADC e respectivo canal. +SEL_CH_ADC -> envia ao hardware o número do canal ADC a ser lido +OUT_SEGS -> envia os dvalores em hexadecimal aos displays de 7 segmentos. São 6 displays ordenados nos 24bits mais significativos. + + +No arquivo "hardware_ADC_7SEG.h" estão definidos uma estrutura de dados para armazenar o valor lido do ADC e seu respectivo canal, bem como a declaração das funções para ler o ADC e escrever nos displays de 7 segmentos. + + +3- Valor ADC. + +O valor lido do ADC é bruto, devendo-se fazer as devidas conversões de acordo com a conveniencia pretendida. +No exemplo do arquivo "firmware.c" o valor foi convertido em mV. + \ No newline at end of file diff --git a/peripherals/adc/adc.bsf b/peripherals/adc/adc.bsf new file mode 100644 index 00000000..2153e9ff --- /dev/null +++ b/peripherals/adc/adc.bsf @@ -0,0 +1,178 @@ +/* +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) 2018 Intel Corporation. All rights reserved. +Your use of Intel Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from 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 Intel Program License +Subscription Agreement, the Intel Quartus Prime License Agreement, +the Intel FPGA IP License Agreement, or other applicable license +agreement, including, without limitation, that your use is for +the sole purpose of programming logic devices manufactured by +Intel and sold by Intel or its authorized distributors. Please +refer to the applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 448 432) + (text "adc" (rect 214 -1 228 11)(font "Arial" (font_size 10))) + (text "inst" (rect 8 416 20 428)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "clock_clk" (rect 0 0 36 12)(font "Arial" (font_size 8))) + (text "clock_clk" (rect 4 61 58 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 192 72)(line_width 1)) + ) + (port + (pt 0 112) + (input) + (text "reset_sink_reset_n" (rect 0 0 77 12)(font "Arial" (font_size 8))) + (text "reset_sink_reset_n" (rect 4 101 112 112)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 192 112)(line_width 1)) + ) + (port + (pt 0 152) + (input) + (text "adc_pll_clock_clk" (rect 0 0 69 12)(font "Arial" (font_size 8))) + (text "adc_pll_clock_clk" (rect 4 141 106 152)(font "Arial" (font_size 8))) + (line (pt 0 152)(pt 192 152)(line_width 1)) + ) + (port + (pt 0 192) + (input) + (text "adc_pll_locked_export" (rect 0 0 88 12)(font "Arial" (font_size 8))) + (text "adc_pll_locked_export" (rect 4 181 130 192)(font "Arial" (font_size 8))) + (line (pt 0 192)(pt 192 192)(line_width 1)) + ) + (port + (pt 0 232) + (input) + (text "sequencer_csr_address" (rect 0 0 97 12)(font "Arial" (font_size 8))) + (text "sequencer_csr_address" (rect 4 221 130 232)(font "Arial" (font_size 8))) + (line (pt 0 232)(pt 192 232)(line_width 1)) + ) + (port + (pt 0 248) + (input) + (text "sequencer_csr_read" (rect 0 0 83 12)(font "Arial" (font_size 8))) + (text "sequencer_csr_read" (rect 4 237 112 248)(font "Arial" (font_size 8))) + (line (pt 0 248)(pt 192 248)(line_width 1)) + ) + (port + (pt 0 264) + (input) + (text "sequencer_csr_write" (rect 0 0 83 12)(font "Arial" (font_size 8))) + (text "sequencer_csr_write" (rect 4 253 118 264)(font "Arial" (font_size 8))) + (line (pt 0 264)(pt 192 264)(line_width 1)) + ) + (port + (pt 0 280) + (input) + (text "sequencer_csr_writedata[31..0]" (rect 0 0 123 12)(font "Arial" (font_size 8))) + (text "sequencer_csr_writedata[31..0]" (rect 4 269 184 280)(font "Arial" (font_size 8))) + (line (pt 0 280)(pt 192 280)(line_width 3)) + ) + (port + (pt 0 336) + (input) + (text "sample_store_csr_address[6..0]" (rect 0 0 130 12)(font "Arial" (font_size 8))) + (text "sample_store_csr_address[6..0]" (rect 4 325 184 336)(font "Arial" (font_size 8))) + (line (pt 0 336)(pt 192 336)(line_width 3)) + ) + (port + (pt 0 352) + (input) + (text "sample_store_csr_read" (rect 0 0 96 12)(font "Arial" (font_size 8))) + (text "sample_store_csr_read" (rect 4 341 130 352)(font "Arial" (font_size 8))) + (line (pt 0 352)(pt 192 352)(line_width 1)) + ) + (port + (pt 0 368) + (input) + (text "sample_store_csr_write" (rect 0 0 96 12)(font "Arial" (font_size 8))) + (text "sample_store_csr_write" (rect 4 357 136 368)(font "Arial" (font_size 8))) + (line (pt 0 368)(pt 192 368)(line_width 1)) + ) + (port + (pt 0 384) + (input) + (text "sample_store_csr_writedata[31..0]" (rect 0 0 136 12)(font "Arial" (font_size 8))) + (text "sample_store_csr_writedata[31..0]" (rect 4 373 202 384)(font "Arial" (font_size 8))) + (line (pt 0 384)(pt 192 384)(line_width 3)) + ) + (port + (pt 0 296) + (output) + (text "sequencer_csr_readdata[31..0]" (rect 0 0 123 12)(font "Arial" (font_size 8))) + (text "sequencer_csr_readdata[31..0]" (rect 4 285 178 296)(font "Arial" (font_size 8))) + (line (pt 0 296)(pt 192 296)(line_width 3)) + ) + (port + (pt 0 400) + (output) + (text "sample_store_csr_readdata[31..0]" (rect 0 0 136 12)(font "Arial" (font_size 8))) + (text "sample_store_csr_readdata[31..0]" (rect 4 389 196 400)(font "Arial" (font_size 8))) + (line (pt 0 400)(pt 192 400)(line_width 3)) + ) + (port + (pt 448 72) + (output) + (text "sample_store_irq_irq" (rect 0 0 84 12)(font "Arial" (font_size 8))) + (text "sample_store_irq_irq" (rect 342 61 462 72)(font "Arial" (font_size 8))) + (line (pt 448 72)(pt 256 72)(line_width 1)) + ) + (drawing + (text "clock" (rect 164 43 358 99)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 197 67 412 144)(font "Arial" (color 0 0 0))) + (text "reset_sink" (rect 131 83 322 179)(font "Arial" (color 128 0 0)(font_size 9))) + (text "reset_n" (rect 197 107 436 224)(font "Arial" (color 0 0 0))) + (text "adc_pll_clock" (rect 115 123 308 259)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 197 147 412 304)(font "Arial" (color 0 0 0))) + (text "adc_pll_locked" (rect 107 163 298 339)(font "Arial" (color 128 0 0)(font_size 9))) + (text "export" (rect 197 187 430 384)(font "Arial" (color 0 0 0))) + (text "sequencer_csr" (rect 107 203 292 419)(font "Arial" (color 128 0 0)(font_size 9))) + (text "address" (rect 197 227 436 464)(font "Arial" (color 0 0 0))) + (text "read" (rect 197 243 418 496)(font "Arial" (color 0 0 0))) + (text "write" (rect 197 259 424 528)(font "Arial" (color 0 0 0))) + (text "writedata" (rect 197 275 448 560)(font "Arial" (color 0 0 0))) + (text "readdata" (rect 197 291 442 592)(font "Arial" (color 0 0 0))) + (text "sample_store_csr" (rect 87 307 270 627)(font "Arial" (color 128 0 0)(font_size 9))) + (text "address" (rect 197 331 436 672)(font "Arial" (color 0 0 0))) + (text "read" (rect 197 347 418 704)(font "Arial" (color 0 0 0))) + (text "write" (rect 197 363 424 736)(font "Arial" (color 0 0 0))) + (text "writedata" (rect 197 379 448 768)(font "Arial" (color 0 0 0))) + (text "readdata" (rect 197 395 442 800)(font "Arial" (color 0 0 0))) + (text "sample_store_irq" (rect 257 43 610 99)(font "Arial" (color 128 0 0)(font_size 9))) + (text "irq" (rect 242 67 502 144)(font "Arial" (color 0 0 0))) + (text " system " (rect 413 416 874 842)(font "Arial" )) + (line (pt 192 32)(pt 256 32)(line_width 1)) + (line (pt 256 32)(pt 256 416)(line_width 1)) + (line (pt 192 416)(pt 256 416)(line_width 1)) + (line (pt 192 32)(pt 192 416)(line_width 1)) + (line (pt 193 52)(pt 193 76)(line_width 1)) + (line (pt 194 52)(pt 194 76)(line_width 1)) + (line (pt 193 92)(pt 193 116)(line_width 1)) + (line (pt 194 92)(pt 194 116)(line_width 1)) + (line (pt 193 132)(pt 193 156)(line_width 1)) + (line (pt 194 132)(pt 194 156)(line_width 1)) + (line (pt 193 172)(pt 193 196)(line_width 1)) + (line (pt 194 172)(pt 194 196)(line_width 1)) + (line (pt 193 212)(pt 193 300)(line_width 1)) + (line (pt 194 212)(pt 194 300)(line_width 1)) + (line (pt 193 316)(pt 193 404)(line_width 1)) + (line (pt 194 316)(pt 194 404)(line_width 1)) + (line (pt 255 52)(pt 255 76)(line_width 1)) + (line (pt 254 52)(pt 254 76)(line_width 1)) + (line (pt 0 0)(pt 448 0)(line_width 1)) + (line (pt 448 0)(pt 448 432)(line_width 1)) + (line (pt 0 432)(pt 448 432)(line_width 1)) + (line (pt 0 0)(pt 0 432)(line_width 1)) + ) +) diff --git a/peripherals/adc/adc.cmp b/peripherals/adc/adc.cmp new file mode 100644 index 00000000..9bc3c496 --- /dev/null +++ b/peripherals/adc/adc.cmp @@ -0,0 +1,20 @@ + component adc is + port ( + clock_clk : in std_logic := 'X'; -- clk + reset_sink_reset_n : in std_logic := 'X'; -- reset_n + adc_pll_clock_clk : in std_logic := 'X'; -- clk + adc_pll_locked_export : in std_logic := 'X'; -- export + sequencer_csr_address : in std_logic := 'X'; -- address + sequencer_csr_read : in std_logic := 'X'; -- read + sequencer_csr_write : in std_logic := 'X'; -- write + sequencer_csr_writedata : in std_logic_vector(31 downto 0) := (others => 'X'); -- writedata + sequencer_csr_readdata : out std_logic_vector(31 downto 0); -- readdata + sample_store_csr_address : in std_logic_vector(6 downto 0) := (others => 'X'); -- address + sample_store_csr_read : in std_logic := 'X'; -- read + sample_store_csr_write : in std_logic := 'X'; -- write + sample_store_csr_writedata : in std_logic_vector(31 downto 0) := (others => 'X'); -- writedata + sample_store_csr_readdata : out std_logic_vector(31 downto 0); -- readdata + sample_store_irq_irq : out std_logic -- irq + ); + end component adc; + diff --git a/peripherals/adc/adc.ppf b/peripherals/adc/adc.ppf new file mode 100644 index 00000000..9c1b6f4d --- /dev/null +++ b/peripherals/adc/adc.ppf @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/peripherals/adc/adc_bb.v b/peripherals/adc/adc_bb.v new file mode 100644 index 00000000..71c7fd47 --- /dev/null +++ b/peripherals/adc/adc_bb.v @@ -0,0 +1,34 @@ + +module adc ( + clock_clk, + reset_sink_reset_n, + adc_pll_clock_clk, + adc_pll_locked_export, + sequencer_csr_address, + sequencer_csr_read, + sequencer_csr_write, + sequencer_csr_writedata, + sequencer_csr_readdata, + sample_store_csr_address, + sample_store_csr_read, + sample_store_csr_write, + sample_store_csr_writedata, + sample_store_csr_readdata, + sample_store_irq_irq); + + input clock_clk; + input reset_sink_reset_n; + input adc_pll_clock_clk; + input adc_pll_locked_export; + input sequencer_csr_address; + input sequencer_csr_read; + input sequencer_csr_write; + input [31:0] sequencer_csr_writedata; + output [31:0] sequencer_csr_readdata; + input [6:0] sample_store_csr_address; + input sample_store_csr_read; + input sample_store_csr_write; + input [31:0] sample_store_csr_writedata; + output [31:0] sample_store_csr_readdata; + output sample_store_irq_irq; +endmodule diff --git a/peripherals/adc/adc_inst.v b/peripherals/adc/adc_inst.v new file mode 100644 index 00000000..15ce48b4 --- /dev/null +++ b/peripherals/adc/adc_inst.v @@ -0,0 +1,18 @@ + adc u0 ( + .clock_clk (), // clock.clk + .reset_sink_reset_n (), // reset_sink.reset_n + .adc_pll_clock_clk (), // adc_pll_clock.clk + .adc_pll_locked_export (), // adc_pll_locked.export + .sequencer_csr_address (), // sequencer_csr.address + .sequencer_csr_read (), // .read + .sequencer_csr_write (), // .write + .sequencer_csr_writedata (), // .writedata + .sequencer_csr_readdata (), // .readdata + .sample_store_csr_address (), // sample_store_csr.address + .sample_store_csr_read (), // .read + .sample_store_csr_write (), // .write + .sample_store_csr_writedata (), // .writedata + .sample_store_csr_readdata (), // .readdata + .sample_store_irq_irq () // sample_store_irq.irq + ); + diff --git a/peripherals/adc/adc_inst.vhd b/peripherals/adc/adc_inst.vhd new file mode 100644 index 00000000..44a688ad --- /dev/null +++ b/peripherals/adc/adc_inst.vhd @@ -0,0 +1,39 @@ + component adc is + port ( + clock_clk : in std_logic := 'X'; -- clk + reset_sink_reset_n : in std_logic := 'X'; -- reset_n + adc_pll_clock_clk : in std_logic := 'X'; -- clk + adc_pll_locked_export : in std_logic := 'X'; -- export + sequencer_csr_address : in std_logic := 'X'; -- address + sequencer_csr_read : in std_logic := 'X'; -- read + sequencer_csr_write : in std_logic := 'X'; -- write + sequencer_csr_writedata : in std_logic_vector(31 downto 0) := (others => 'X'); -- writedata + sequencer_csr_readdata : out std_logic_vector(31 downto 0); -- readdata + sample_store_csr_address : in std_logic_vector(6 downto 0) := (others => 'X'); -- address + sample_store_csr_read : in std_logic := 'X'; -- read + sample_store_csr_write : in std_logic := 'X'; -- write + sample_store_csr_writedata : in std_logic_vector(31 downto 0) := (others => 'X'); -- writedata + sample_store_csr_readdata : out std_logic_vector(31 downto 0); -- readdata + sample_store_irq_irq : out std_logic -- irq + ); + end component adc; + + u0 : component adc + port map ( + clock_clk => CONNECTED_TO_clock_clk, -- clock.clk + reset_sink_reset_n => CONNECTED_TO_reset_sink_reset_n, -- reset_sink.reset_n + adc_pll_clock_clk => CONNECTED_TO_adc_pll_clock_clk, -- adc_pll_clock.clk + adc_pll_locked_export => CONNECTED_TO_adc_pll_locked_export, -- adc_pll_locked.export + sequencer_csr_address => CONNECTED_TO_sequencer_csr_address, -- sequencer_csr.address + sequencer_csr_read => CONNECTED_TO_sequencer_csr_read, -- .read + sequencer_csr_write => CONNECTED_TO_sequencer_csr_write, -- .write + sequencer_csr_writedata => CONNECTED_TO_sequencer_csr_writedata, -- .writedata + sequencer_csr_readdata => CONNECTED_TO_sequencer_csr_readdata, -- .readdata + sample_store_csr_address => CONNECTED_TO_sample_store_csr_address, -- sample_store_csr.address + sample_store_csr_read => CONNECTED_TO_sample_store_csr_read, -- .read + sample_store_csr_write => CONNECTED_TO_sample_store_csr_write, -- .write + sample_store_csr_writedata => CONNECTED_TO_sample_store_csr_writedata, -- .writedata + sample_store_csr_readdata => CONNECTED_TO_sample_store_csr_readdata, -- .readdata + sample_store_irq_irq => CONNECTED_TO_sample_store_irq_irq -- sample_store_irq.irq + ); + diff --git a/peripherals/adc/adc_qsys.qsys b/peripherals/adc/adc_qsys.qsys new file mode 100644 index 00000000..8c1fb227 --- /dev/null +++ b/peripherals/adc/adc_qsys.qsys @@ -0,0 +1,511 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CT#PORT_clk5 PORT_UNUSED CT#PORT_clk4 PORT_UNUSED CT#PORT_clk3 PORT_UNUSED CT#PORT_clk2 PORT_UNUSED CT#PORT_clk1 PORT_USED CT#PORT_clk0 PORT_USED CT#CLK0_MULTIPLY_BY 1 CT#PORT_SCANWRITE PORT_UNUSED CT#PORT_SCANACLR PORT_UNUSED CT#PORT_PFDENA PORT_UNUSED CT#PORT_PLLENA PORT_UNUSED CT#PORT_SCANDATA PORT_UNUSED CT#PORT_SCANCLKENA PORT_UNUSED CT#WIDTH_CLOCK 5 CT#PORT_SCANDATAOUT PORT_UNUSED CT#LPM_TYPE altpll CT#PLL_TYPE AUTO CT#CLK0_PHASE_SHIFT 0 CT#CLK1_DUTY_CYCLE 50 CT#PORT_PHASEDONE PORT_UNUSED CT#OPERATION_MODE NORMAL CT#PORT_CONFIGUPDATE PORT_UNUSED CT#CLK1_MULTIPLY_BY 1 CT#COMPENSATE_CLOCK CLK0 CT#PORT_CLKSWITCH PORT_UNUSED CT#INCLK0_INPUT_FREQUENCY 20000 CT#PORT_SCANDONE PORT_UNUSED CT#PORT_CLKLOSS PORT_UNUSED CT#PORT_INCLK1 PORT_UNUSED CT#AVALON_USE_SEPARATE_SYSCLK NO CT#PORT_INCLK0 PORT_USED CT#PORT_clkena5 PORT_UNUSED CT#PORT_clkena4 PORT_UNUSED CT#PORT_clkena3 PORT_UNUSED CT#PORT_clkena2 PORT_UNUSED CT#PORT_clkena1 PORT_UNUSED CT#PORT_clkena0 PORT_UNUSED CT#CLK1_PHASE_SHIFT 0 CT#PORT_ARESET PORT_USED CT#BANDWIDTH_TYPE AUTO CT#INTENDED_DEVICE_FAMILY {MAX 10} CT#PORT_SCANREAD PORT_UNUSED CT#PORT_PHASESTEP PORT_UNUSED CT#PORT_SCANCLK PORT_UNUSED CT#PORT_CLKBAD1 PORT_UNUSED CT#PORT_CLKBAD0 PORT_UNUSED CT#PORT_FBIN PORT_UNUSED CT#PORT_PHASEUPDOWN PORT_UNUSED CT#PORT_extclk3 PORT_UNUSED CT#PORT_extclk2 PORT_UNUSED CT#PORT_extclk1 PORT_UNUSED CT#PORT_PHASECOUNTERSELECT PORT_UNUSED CT#PORT_extclk0 PORT_UNUSED CT#PORT_ACTIVECLOCK PORT_UNUSED CT#CLK0_DUTY_CYCLE 50 CT#CLK0_DIVIDE_BY 1 CT#CLK1_DIVIDE_BY 5 CT#PORT_LOCKED PORT_USED + altpll_avalon_elaboration + altpll_avalon_post_edit + IF#phasecounterselect {input 3} IF#locked {output 0} IF#reset {input 0} IF#clk {input 0} IF#phaseupdown {input 0} IF#scandone {output 0} IF#readdata {output 32} IF#write {input 0} IF#scanclk {input 0} IF#phasedone {output 0} IF#c4 {output 0} IF#c3 {output 0} IF#address {input 2} IF#c2 {output 0} IF#c1 {output 0} IF#c0 {output 0} IF#writedata {input 32} IF#read {input 0} IF#areset {input 0} IF#scanclkena {input 0} IF#scandataout {output 0} IF#configupdate {input 0} IF#phasestep {input 0} IF#scandata {input 0} + + IN#WIDTH_CLOCK 1 IN#CLK0_DUTY_CYCLE 1 IN#PLL_TARGET_HARCOPY_CHECK 1 IN#CLK1_MULTIPLY_BY 1 IN#SWITCHOVER_COUNT_EDIT 1 IN#INCLK0_INPUT_FREQUENCY 1 IN#PLL_LVDS_PLL_CHECK 1 IN#PLL_AUTOPLL_CHECK 1 IN#PLL_FASTPLL_CHECK 1 IN#CLK1_DUTY_CYCLE 1 IN#PLL_ENHPLL_CHECK 1 IN#DIV_FACTOR1 1 IN#DIV_FACTOR0 1 IN#LVDS_MODE_DATA_RATE_DIRTY 1 IN#GLOCK_COUNTER_EDIT 1 IN#CLK0_DIVIDE_BY 1 IN#MULT_FACTOR1 1 IN#MULT_FACTOR0 1 IN#CLK0_MULTIPLY_BY 1 IN#USE_MIL_SPEED_GRADE 1 IN#CLK1_DIVIDE_BY 1 + MF#areset 1 MF#clk 1 MF#locked 1 MF#inclk 1 + PT#GLOCKED_FEATURE_ENABLED 0 PT#SPREAD_FEATURE_ENABLED 0 PT#BANDWIDTH_FREQ_UNIT MHz PT#CUR_DEDICATED_CLK c0 PT#INCLK0_FREQ_EDIT 50.000 PT#BANDWIDTH_PRESET Low PT#PLL_LVDS_PLL_CHECK 0 PT#BANDWIDTH_USE_PRESET 0 PT#AVALON_USE_SEPARATE_SYSCLK NO PT#PLL_ENHPLL_CHECK 0 PT#OUTPUT_FREQ_UNIT1 MHz PT#OUTPUT_FREQ_UNIT0 MHz PT#PHASE_RECONFIG_FEATURE_ENABLED 1 PT#CREATE_CLKBAD_CHECK 0 PT#CLKSWITCH_CHECK 0 PT#INCLK1_FREQ_EDIT 100.000 PT#NORMAL_MODE_RADIO 1 PT#SRC_SYNCH_COMP_RADIO 0 PT#PLL_ARESET_CHECK 1 PT#LONG_SCAN_RADIO 1 PT#SCAN_FEATURE_ENABLED 1 PT#PHASE_RECONFIG_INPUTS_CHECK 0 PT#USE_CLK1 1 PT#USE_CLK0 1 PT#PRIMARY_CLK_COMBO inclk0 PT#BANDWIDTH 1.000 PT#GLOCKED_COUNTER_EDIT_CHANGED 1 PT#PLL_FASTPLL_CHECK 0 PT#SPREAD_FREQ_UNIT KHz PT#PLL_AUTOPLL_CHECK 1 PT#LVDS_PHASE_SHIFT_UNIT1 deg PT#LVDS_PHASE_SHIFT_UNIT0 deg PT#OUTPUT_FREQ_MODE1 1 PT#SWITCHOVER_FEATURE_ENABLED 0 PT#MIG_DEVICE_SPEED_GRADE Any PT#OUTPUT_FREQ_MODE0 1 PT#BANDWIDTH_FEATURE_ENABLED 1 PT#INCLK0_FREQ_UNIT_COMBO MHz PT#ZERO_DELAY_RADIO 0 PT#OUTPUT_FREQ1 10.00000000 PT#OUTPUT_FREQ0 50.00000000 PT#SHORT_SCAN_RADIO 0 PT#LVDS_MODE_DATA_RATE_DIRTY 0 PT#CUR_FBIN_CLK c0 PT#PLL_ADVANCED_PARAM_CHECK 0 PT#CLKBAD_SWITCHOVER_CHECK 0 PT#PHASE_SHIFT_STEP_ENABLED_CHECK 0 PT#DEVICE_SPEED_GRADE 7 PT#PLL_FBMIMIC_CHECK 0 PT#LVDS_MODE_DATA_RATE {Not Available} PT#LOCKED_OUTPUT_CHECK 1 PT#SPREAD_PERCENT 0.500 PT#PHASE_SHIFT1 0.00000000 PT#PHASE_SHIFT0 0.00000000 PT#DIV_FACTOR1 1 PT#DIV_FACTOR0 1 PT#CNX_NO_COMPENSATE_RADIO 0 PT#USE_CLKENA1 0 PT#USE_CLKENA0 0 PT#CREATE_INCLK1_CHECK 0 PT#GLOCK_COUNTER_EDIT 1048575 PT#INCLK1_FREQ_UNIT_COMBO MHz PT#EFF_OUTPUT_FREQ_VALUE1 10.000000 PT#EFF_OUTPUT_FREQ_VALUE0 50.000000 PT#SPREAD_FREQ 50.000 PT#USE_MIL_SPEED_GRADE 0 PT#EXPLICIT_SWITCHOVER_COUNTER 0 PT#STICKY_CLK1 1 PT#STICKY_CLK0 1 PT#EXT_FEEDBACK_RADIO 0 PT#MIRROR_CLK1 0 PT#MIRROR_CLK0 0 PT#SWITCHOVER_COUNT_EDIT 1 PT#SELF_RESET_LOCK_LOSS 0 PT#PLL_PFDENA_CHECK 0 PT#INT_FEEDBACK__MODE_RADIO 1 PT#INCLK1_FREQ_EDIT_CHANGED 1 PT#CLKLOSS_CHECK 0 PT#SYNTH_WRAPPER_GEN_POSTFIX 0 PT#PHASE_SHIFT_UNIT1 deg PT#PHASE_SHIFT_UNIT0 deg PT#BANDWIDTH_USE_AUTO 1 PT#HAS_MANUAL_SWITCHOVER 1 PT#MULT_FACTOR1 1 PT#MULT_FACTOR0 1 PT#SPREAD_USE 0 PT#GLOCKED_MODE_CHECK 0 PT#SACN_INPUTS_CHECK 0 PT#DUTY_CYCLE1 50.00000000 PT#INTENDED_DEVICE_FAMILY {MAX 10} PT#DUTY_CYCLE0 50.00000000 PT#PLL_TARGET_HARCOPY_CHECK 0 PT#INCLK1_FREQ_UNIT_CHANGED 1 PT#RECONFIG_FILE ALTPLL1413286123367447.mif PT#ACTIVECLK_CHECK 0 + UP#locked used UP#c1 used UP#c0 used UP#areset used UP#inclk0 used + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/peripherals/adc/adc_qsys.sopcinfo b/peripherals/adc/adc_qsys.sopcinfo new file mode 100644 index 00000000..924571ac --- /dev/null +++ b/peripherals/adc/adc_qsys.sopcinfo @@ -0,0 +1,5285 @@ + + + + + + + java.lang.Integer + 1561980330 + false + true + false + true + GENERATION_ID + + + java.lang.String + + false + true + false + true + UNIQUE_ID + + + java.lang.String + MAX10FPGA + false + true + false + true + DEVICE_FAMILY + + + java.lang.String + 10M50DAF484C7G + false + true + false + true + DEVICE + + + java.lang.String + 7 + false + true + false + true + DEVICE_SPEEDGRADE + + + java.lang.Long + -1 + false + true + false + true + CLOCK_RATE + clk + + + java.lang.Integer + -1 + false + true + false + true + CLOCK_DOMAIN + clk + + + java.lang.Integer + -1 + false + true + false + true + RESET_DOMAIN + clk + + + java.lang.String + MAX 10 + false + true + false + true + DEVICE_FAMILY + + + boolean + false + false + true + true + true + + + + + embeddedsw.CMacro.CORE_VARIANT + 3 + + + embeddedsw.CMacro.DUAL_ADC_MODE + false + + + embeddedsw.CMacro.IS_THIS_FIRST_OR_SECOND_ADC + 1 + + + embeddedsw.CMacro.PRESCALER_CH16 + 0 + + + embeddedsw.CMacro.PRESCALER_CH8 + 0 + + + embeddedsw.CMacro.REFSEL + External VREF + + + embeddedsw.CMacro.USE_CH0 + 0 + + + embeddedsw.CMacro.USE_CH1 + 1 + + + embeddedsw.CMacro.USE_CH10 + 1 + + + embeddedsw.CMacro.USE_CH11 + 1 + + + embeddedsw.CMacro.USE_CH12 + 1 + + + embeddedsw.CMacro.USE_CH13 + 1 + + + embeddedsw.CMacro.USE_CH14 + 1 + + + embeddedsw.CMacro.USE_CH15 + 1 + + + embeddedsw.CMacro.USE_CH16 + 1 + + + embeddedsw.CMacro.USE_CH2 + 1 + + + embeddedsw.CMacro.USE_CH3 + 1 + + + embeddedsw.CMacro.USE_CH4 + 1 + + + embeddedsw.CMacro.USE_CH5 + 1 + + + embeddedsw.CMacro.USE_CH6 + 1 + + + embeddedsw.CMacro.USE_CH7 + 0 + + + embeddedsw.CMacro.USE_CH8 + 0 + + + embeddedsw.CMacro.USE_CH9 + 1 + + + embeddedsw.CMacro.USE_TSD + 1 + + + embeddedsw.CMacro.VREF + 2.5 + + + embeddedsw.dts.compatible + altr,modular-adc-1.0 + + + embeddedsw.dts.group + adc + + + embeddedsw.dts.name + modular-adc + + + embeddedsw.dts.params.altr,adc-mode + 1 + + + embeddedsw.dts.params.altr,adc-number + 1 + + + embeddedsw.dts.params.altr,adc-slot-count + 8 + + + embeddedsw.dts.vendor + altr + + + int + 3 + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 12 + false + true + false + true + + + long + 50000000 + false + true + false + true + CLOCK_RATE + clock + + + java.lang.String + MAX10FPGA + false + true + false + true + DEVICE_FAMILY + + + java.lang.String + 10M50DAF484C7G + false + true + false + true + DEVICE + + + java.lang.String + 10M50 + true + true + false + true + + + int + 33 + true + true + false + true + + + int + 2 + true + true + false + true + + + int + 2 + true + true + false + true + + + int + 2 + true + true + false + true + + + int + 1 + false + true + true + true + + + int + 1 + true + true + false + true + + + java.math.BigInteger + 0 + true + true + false + true + + + int + 0 + true + true + false + true + + + int + 0 + false + true + true + true + + + int + 2 + false + true + true + true + + + int + 2 + true + true + false + true + + + int + 1 + true + true + false + true + + + int + 1 + false + true + false + true + + + int + 0 + false + true + true + true + + + double + 2.5 + false + true + true + true + + + double + 3.0 + false + true + false + true + + + double + 2.5 + true + true + false + true + + + double + 2.5 + true + true + false + true + + + int + 65536 + true + true + false + true + + + int + 0 + true + true + false + true + + + int + 0 + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 125 + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + boolean + false + false + true + true + true + + + double + 0.0 + false + true + false + true + + + java.lang.String + + false + true + true + true + + + int + 8 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 2 + false + true + false + true + + + int + 3 + false + true + false + true + + + int + 4 + false + true + false + true + + + int + 5 + false + true + false + true + + + int + 6 + false + true + false + true + + + int + 7 + false + true + false + true + + + int + 8 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + int + 30 + false + true + false + true + + + java.lang.String + 7 + false + true + false + true + DEVICE_SPEEDGRADE + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + clock_clk + Input + 1 + clk + + + + + + java.lang.String + clock + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_sink_reset_n + Input + 1 + reset_n + + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + false + + adc_pll_clock_clk + Input + 1 + clk + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + adc_pll_locked_export + Input + 1 + export + + + + + + java.lang.String + clock + false + true + false + true + + + java.lang.String + reset_sink + false + true + false + true + + + int + 1 + false + true + false + true + + + int + 8 + false + true + true + true + + + boolean + false + false + true + false + true + + + [Ljava.lang.String; + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + false + true + + + int + 31 + false + true + true + true + + + java.lang.String + + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon_streaming + false + + command_valid + Input + 1 + valid + + + command_channel + Input + 5 + channel + + + command_startofpacket + Input + 1 + startofpacket + + + command_endofpacket + Input + 1 + endofpacket + + + command_ready + Output + 1 + ready + + + + + + java.lang.String + clock + false + true + false + true + + + java.lang.String + reset_sink + false + true + false + true + + + int + 1 + false + true + false + true + + + int + 12 + false + true + true + true + + + boolean + false + false + true + false + true + + + [Ljava.lang.String; + + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + false + true + + + int + 31 + false + true + true + true + + + java.lang.String + + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon_streaming + true + + response_valid + Output + 1 + valid + + + response_channel + Output + 5 + channel + + + response_data + Output + 12 + data + + + response_startofpacket + Output + 1 + startofpacket + + + response_endofpacket + Output + 1 + endofpacket + + + + + + + java.lang.String + altpll_avalon_elaboration + false + true + false + true + + + java.lang.String + altpll_avalon_post_edit + false + true + false + true + + + java.lang.String + MAX 10 + false + true + true + true + + + java.lang.String + 5 + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + 20000 + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + NORMAL + false + true + true + true + + + java.lang.String + AUTO + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + CLK0 + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + AUTO + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + 1 + false + true + true + true + + + java.lang.String + 1 + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + 1 + false + true + true + true + + + java.lang.String + 5 + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + 0 + false + true + true + true + + + java.lang.String + 0 + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + 50 + false + true + true + true + + + java.lang.String + 50 + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_USED + false + true + true + true + + + java.lang.String + PORT_USED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_USED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_USED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + PORT_USED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + PORT_UNUSED + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + NO + false + true + true + true + + + java.lang.String + CT#PORT_clk5 PORT_UNUSED CT#PORT_clk4 PORT_UNUSED CT#PORT_clk3 PORT_UNUSED CT#PORT_clk2 PORT_UNUSED CT#PORT_clk1 PORT_USED CT#PORT_clk0 PORT_USED CT#CLK0_MULTIPLY_BY 1 CT#PORT_SCANWRITE PORT_UNUSED CT#PORT_SCANACLR PORT_UNUSED CT#PORT_PFDENA PORT_UNUSED CT#PORT_PLLENA PORT_UNUSED CT#PORT_SCANDATA PORT_UNUSED CT#PORT_SCANCLKENA PORT_UNUSED CT#WIDTH_CLOCK 5 CT#PORT_SCANDATAOUT PORT_UNUSED CT#LPM_TYPE altpll CT#PLL_TYPE AUTO CT#CLK0_PHASE_SHIFT 0 CT#CLK1_DUTY_CYCLE 50 CT#PORT_PHASEDONE PORT_UNUSED CT#OPERATION_MODE NORMAL CT#PORT_CONFIGUPDATE PORT_UNUSED CT#CLK1_MULTIPLY_BY 1 CT#COMPENSATE_CLOCK CLK0 CT#PORT_CLKSWITCH PORT_UNUSED CT#INCLK0_INPUT_FREQUENCY 20000 CT#PORT_SCANDONE PORT_UNUSED CT#PORT_CLKLOSS PORT_UNUSED CT#PORT_INCLK1 PORT_UNUSED CT#AVALON_USE_SEPARATE_SYSCLK NO CT#PORT_INCLK0 PORT_USED CT#PORT_clkena5 PORT_UNUSED CT#PORT_clkena4 PORT_UNUSED CT#PORT_clkena3 PORT_UNUSED CT#PORT_clkena2 PORT_UNUSED CT#PORT_clkena1 PORT_UNUSED CT#PORT_clkena0 PORT_UNUSED CT#CLK1_PHASE_SHIFT 0 CT#PORT_ARESET PORT_USED CT#BANDWIDTH_TYPE AUTO CT#INTENDED_DEVICE_FAMILY {MAX 10} CT#PORT_SCANREAD PORT_UNUSED CT#PORT_PHASESTEP PORT_UNUSED CT#PORT_SCANCLK PORT_UNUSED CT#PORT_CLKBAD1 PORT_UNUSED CT#PORT_CLKBAD0 PORT_UNUSED CT#PORT_FBIN PORT_UNUSED CT#PORT_PHASEUPDOWN PORT_UNUSED CT#PORT_extclk3 PORT_UNUSED CT#PORT_extclk2 PORT_UNUSED CT#PORT_extclk1 PORT_UNUSED CT#PORT_PHASECOUNTERSELECT PORT_UNUSED CT#PORT_extclk0 PORT_UNUSED CT#PORT_ACTIVECLOCK PORT_UNUSED CT#CLK0_DUTY_CYCLE 50 CT#CLK0_DIVIDE_BY 1 CT#CLK1_DIVIDE_BY 5 CT#PORT_LOCKED PORT_USED + false + true + false + true + + + java.lang.String + PT#GLOCKED_FEATURE_ENABLED 0 PT#SPREAD_FEATURE_ENABLED 0 PT#BANDWIDTH_FREQ_UNIT MHz PT#CUR_DEDICATED_CLK c0 PT#INCLK0_FREQ_EDIT 50.000 PT#BANDWIDTH_PRESET Low PT#PLL_LVDS_PLL_CHECK 0 PT#BANDWIDTH_USE_PRESET 0 PT#AVALON_USE_SEPARATE_SYSCLK NO PT#PLL_ENHPLL_CHECK 0 PT#OUTPUT_FREQ_UNIT1 MHz PT#OUTPUT_FREQ_UNIT0 MHz PT#PHASE_RECONFIG_FEATURE_ENABLED 1 PT#CREATE_CLKBAD_CHECK 0 PT#CLKSWITCH_CHECK 0 PT#INCLK1_FREQ_EDIT 100.000 PT#NORMAL_MODE_RADIO 1 PT#SRC_SYNCH_COMP_RADIO 0 PT#PLL_ARESET_CHECK 1 PT#LONG_SCAN_RADIO 1 PT#SCAN_FEATURE_ENABLED 1 PT#PHASE_RECONFIG_INPUTS_CHECK 0 PT#USE_CLK1 1 PT#USE_CLK0 1 PT#PRIMARY_CLK_COMBO inclk0 PT#BANDWIDTH 1.000 PT#GLOCKED_COUNTER_EDIT_CHANGED 1 PT#PLL_FASTPLL_CHECK 0 PT#SPREAD_FREQ_UNIT KHz PT#PLL_AUTOPLL_CHECK 1 PT#LVDS_PHASE_SHIFT_UNIT1 deg PT#LVDS_PHASE_SHIFT_UNIT0 deg PT#OUTPUT_FREQ_MODE1 1 PT#SWITCHOVER_FEATURE_ENABLED 0 PT#MIG_DEVICE_SPEED_GRADE Any PT#OUTPUT_FREQ_MODE0 1 PT#BANDWIDTH_FEATURE_ENABLED 1 PT#INCLK0_FREQ_UNIT_COMBO MHz PT#ZERO_DELAY_RADIO 0 PT#OUTPUT_FREQ1 10.00000000 PT#OUTPUT_FREQ0 50.00000000 PT#SHORT_SCAN_RADIO 0 PT#LVDS_MODE_DATA_RATE_DIRTY 0 PT#CUR_FBIN_CLK c0 PT#PLL_ADVANCED_PARAM_CHECK 0 PT#CLKBAD_SWITCHOVER_CHECK 0 PT#PHASE_SHIFT_STEP_ENABLED_CHECK 0 PT#DEVICE_SPEED_GRADE 7 PT#PLL_FBMIMIC_CHECK 0 PT#LVDS_MODE_DATA_RATE {Not Available} PT#LOCKED_OUTPUT_CHECK 1 PT#SPREAD_PERCENT 0.500 PT#PHASE_SHIFT1 0.00000000 PT#PHASE_SHIFT0 0.00000000 PT#DIV_FACTOR1 1 PT#DIV_FACTOR0 1 PT#CNX_NO_COMPENSATE_RADIO 0 PT#USE_CLKENA1 0 PT#USE_CLKENA0 0 PT#CREATE_INCLK1_CHECK 0 PT#GLOCK_COUNTER_EDIT 1048575 PT#INCLK1_FREQ_UNIT_COMBO MHz PT#EFF_OUTPUT_FREQ_VALUE1 10.000000 PT#EFF_OUTPUT_FREQ_VALUE0 50.000000 PT#SPREAD_FREQ 50.000 PT#USE_MIL_SPEED_GRADE 0 PT#EXPLICIT_SWITCHOVER_COUNTER 0 PT#STICKY_CLK1 1 PT#STICKY_CLK0 1 PT#EXT_FEEDBACK_RADIO 0 PT#MIRROR_CLK1 0 PT#MIRROR_CLK0 0 PT#SWITCHOVER_COUNT_EDIT 1 PT#SELF_RESET_LOCK_LOSS 0 PT#PLL_PFDENA_CHECK 0 PT#INT_FEEDBACK__MODE_RADIO 1 PT#INCLK1_FREQ_EDIT_CHANGED 1 PT#CLKLOSS_CHECK 0 PT#SYNTH_WRAPPER_GEN_POSTFIX 0 PT#PHASE_SHIFT_UNIT1 deg PT#PHASE_SHIFT_UNIT0 deg PT#BANDWIDTH_USE_AUTO 1 PT#HAS_MANUAL_SWITCHOVER 1 PT#MULT_FACTOR1 1 PT#MULT_FACTOR0 1 PT#SPREAD_USE 0 PT#GLOCKED_MODE_CHECK 0 PT#SACN_INPUTS_CHECK 0 PT#DUTY_CYCLE1 50.00000000 PT#INTENDED_DEVICE_FAMILY {MAX 10} PT#DUTY_CYCLE0 50.00000000 PT#PLL_TARGET_HARCOPY_CHECK 0 PT#INCLK1_FREQ_UNIT_CHANGED 1 PT#RECONFIG_FILE ALTPLL1413286123367447.mif PT#ACTIVECLK_CHECK 0 + false + true + false + true + + + java.lang.String + UP#locked used UP#c1 used UP#c0 used UP#areset used UP#inclk0 used + false + true + false + true + + + java.lang.String + IN#WIDTH_CLOCK 1 IN#CLK0_DUTY_CYCLE 1 IN#PLL_TARGET_HARCOPY_CHECK 1 IN#CLK1_MULTIPLY_BY 1 IN#SWITCHOVER_COUNT_EDIT 1 IN#INCLK0_INPUT_FREQUENCY 1 IN#PLL_LVDS_PLL_CHECK 1 IN#PLL_AUTOPLL_CHECK 1 IN#PLL_FASTPLL_CHECK 1 IN#CLK1_DUTY_CYCLE 1 IN#PLL_ENHPLL_CHECK 1 IN#DIV_FACTOR1 1 IN#DIV_FACTOR0 1 IN#LVDS_MODE_DATA_RATE_DIRTY 1 IN#GLOCK_COUNTER_EDIT 1 IN#CLK0_DIVIDE_BY 1 IN#MULT_FACTOR1 1 IN#MULT_FACTOR0 1 IN#CLK0_MULTIPLY_BY 1 IN#USE_MIL_SPEED_GRADE 1 IN#CLK1_DIVIDE_BY 1 + false + true + false + true + + + java.lang.String + MF#areset 1 MF#clk 1 MF#locked 1 MF#inclk 1 + false + true + false + true + + + java.lang.String + IF#phasecounterselect {input 3} IF#locked {output 0} IF#reset {input 0} IF#clk {input 0} IF#phaseupdown {input 0} IF#scandone {output 0} IF#readdata {output 32} IF#write {input 0} IF#scanclk {input 0} IF#phasedone {output 0} IF#c4 {output 0} IF#c3 {output 0} IF#address {input 2} IF#c2 {output 0} IF#c1 {output 0} IF#c0 {output 0} IF#writedata {input 32} IF#read {input 0} IF#areset {input 0} IF#scanclkena {input 0} IF#scandataout {output 0} IF#configupdate {input 0} IF#phasestep {input 0} IF#scandata {input 0} + false + true + false + true + + + java.lang.String + 0 + false + true + false + true + + + java.lang.String + MAX10FPGA + false + true + false + true + DEVICE_FAMILY + + + java.lang.Long + 50000000 + false + true + false + true + CLOCK_RATE + inclk_interface + + + java.lang.String + MAX 10 + false + true + false + true + DEVICE_FAMILY + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + inclk_interface + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset + Input + 1 + reset + + + + + + embeddedsw.configuration.isMemoryDevice + false + + + embeddedsw.configuration.isNonVolatileStorage + false + + + embeddedsw.configuration.isPrintableDevice + false + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + DYNAMIC + false + true + false + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 16 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + inclk_interface + false + true + true + true + + + java.lang.String + inclk_interface_reset + false + true + true + true + + + int + 8 + false + true + true + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + read + Input + 1 + read + + + write + Input + 1 + write + + + address + Input + 2 + address + + + readdata + Output + 32 + readdata + + + writedata + Input + 32 + writedata + + + + + + java.lang.String + + false + true + true + true + + + long + 50000000 + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + true + + c0 + Output + 1 + clk + + + false + adc_0 + clock + adc_0.clock + + + false + clock_bridge_sys + in_clk + clock_bridge_sys.in_clk + + + + + + java.lang.String + + false + true + true + true + + + long + 10000000 + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + true + + c1 + Output + 1 + clk + + + false + adc_0 + adc_pll_clock + adc_0.adc_pll_clock + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + areset + Input + 1 + export + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + locked + Output + 1 + export + + + + + + + long + 50000000 + false + true + true + true + + + boolean + true + false + true + true + true + + + long + 0 + false + true + false + true + CLOCK_RATE + clk_in + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + qsys.ui.export_name + clk + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + in_clk + Input + 1 + clk + + + + + + qsys.ui.export_name + reset + + + java.lang.String + + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + java.lang.String + clk_in + false + true + true + true + + + long + 50000000 + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + true + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + true + + clk_out + Output + 1 + clk + + + false + altpll_sys + inclk_interface + altpll_sys.inclk_interface + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + clk_in_reset + false + true + true + true + + + [Ljava.lang.String; + clk_in_reset + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + true + + reset_n_out + Output + 1 + reset_n + + + + + + + long + 50000000 + false + true + true + true + CLOCK_RATE + in_clk + + + long + 0 + false + true + true + true + + + int + 1 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + in_clk + Input + 1 + clk + + + + + + java.lang.String + in_clk + false + true + true + true + + + long + 50000000 + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + true + + out_clk + Output + 1 + clk + + + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + altpll_sys + c0 + adc_0 + clock + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + altpll_sys + c0 + clock_bridge_sys + in_clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + altpll_sys + c1 + adc_0 + adc_pll_clock + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_50 + clk + altpll_sys + inclk_interface + + + + com.altera.entityinterfaces.IPort + + false + true + true + true + + + int + 0 + false + true + true + true + + + com.altera.entityinterfaces.IPort + + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + altpll_sys + locked_conduit + adc_0 + adc_pll_locked + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_50 + clk_reset + altpll_sys + inclk_interface_reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_50 + clk_reset + adc_0 + reset_sink + + + 1 + altera_modular_adc + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + Modular ADC core Intel FPGA IP + 18.1 + + + 4 + clock_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Input + 18.1 + + + 2 + reset_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Input + 18.1 + + + 3 + conduit_end + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Conduit + 18.1 + + + 1 + avalon_streaming_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Avalon Streaming Sink + 18.1 + + + 1 + avalon_streaming_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Avalon Streaming Source + 18.1 + + + 1 + altpll + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + ALTPLL Intel FPGA IP + 18.1 + + + 1 + avalon_slave + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Avalon Memory Mapped Slave + 18.1 + + + 3 + clock_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Output + 18.1 + + + 1 + clock_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + Clock Source + 18.1 + + + 1 + clock_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Input + 18.1 + + + 1 + reset_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Input + 18.1 + + + 1 + clock_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Output + 18.1 + + + 1 + reset_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Output + 18.1 + + + 1 + altera_clock_bridge + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + Clock Bridge + 18.1 + + + 4 + clock + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Clock Connection + 18.1 + + + 1 + conduit + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Conduit Connection + 18.1 + + + 2 + reset + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Reset Connection + 18.1 + + 18.1 625 + + diff --git a/peripherals/adc/de10_lite.vhd b/peripherals/adc/de10_lite.vhd new file mode 100644 index 00000000..3f48e8f4 --- /dev/null +++ b/peripherals/adc/de10_lite.vhd @@ -0,0 +1,381 @@ +------------------------------------------------------------------- +-- Name : de0_lite.vhd +-- Author : Renan Augusto Starke +-- Modified : Jeferson Pedroso +-- Version : 0.1 +-- Copyright : Departamento de Eletrônica, Florianópolis, IFSC +-- Description : riscV ADC example +------------------------------------------------------------------- +LIBRARY ieee; +USE IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.all; + +use work.decoder_types.all; + +entity de10_lite is + generic ( + --! Num of 32-bits memory words + IMEMORY_WORDS : integer := 1024; --!= 4K (1024 * 4) bytes + DMEMORY_WORDS : integer := 1024 --!= 2k (512 * 2) bytes + ); + + + port ( + ---------- CLOCK ---------- + ADC_CLK_10: in std_logic; + MAX10_CLK1_50: in std_logic; + MAX10_CLK2_50: in std_logic; + + ----------- SDRAM ------------ + DRAM_ADDR: out std_logic_vector (12 downto 0); + DRAM_BA: out std_logic_vector (1 downto 0); + DRAM_CAS_N: out std_logic; + DRAM_CKE: out std_logic; + DRAM_CLK: out std_logic; + DRAM_CS_N: out std_logic; + DRAM_DQ: inout std_logic_vector(15 downto 0); + DRAM_LDQM: out std_logic; + DRAM_RAS_N: out std_logic; + DRAM_UDQM: out std_logic; + DRAM_WE_N: out std_logic; + + ----------- SEG7 ------------ + HEX0: out std_logic_vector(7 downto 0); + HEX1: out std_logic_vector(7 downto 0); + HEX2: out std_logic_vector(7 downto 0); + HEX3: out std_logic_vector(7 downto 0); + HEX4: out std_logic_vector(7 downto 0); + HEX5: out std_logic_vector(7 downto 0); + + ----------- KEY ------------ + KEY: in std_logic_vector(1 downto 0); + + ----------- LED ------------ + LEDR: out std_logic_vector(9 downto 0); + + ----------- SW ------------ + SW: in std_logic_vector(9 downto 0); + + ----------- VGA ------------ + VGA_B: out std_logic_vector(3 downto 0); + VGA_G: out std_logic_vector(3 downto 0); + VGA_HS: out std_logic; + VGA_R: out std_logic_vector(3 downto 0); + VGA_VS: out std_logic; + + ----------- Accelerometer ------------ + GSENSOR_CS_N: out std_logic; + GSENSOR_INT: in std_logic_vector(2 downto 1); + GSENSOR_SCLK: out std_logic; + GSENSOR_SDI: inout std_logic; + GSENSOR_SDO: inout std_logic; + + ----------- Arduino ------------ + ARDUINO_IO: inout std_logic_vector(15 downto 0); + ARDUINO_RESET_N: inout std_logic + ); +end entity; + + + +architecture rtl of de10_lite is + + signal clk : std_logic; + signal rst : std_logic; + + -- Instruction bus signals + signal idata : std_logic_vector(31 downto 0); + signal iaddress : integer range 0 to IMEMORY_WORDS-1 := 0; + signal address : std_logic_vector (9 downto 0); + + -- Data bus signals + signal daddress : integer range 0 to DMEMORY_WORDS-1; + signal ddata_r : std_logic_vector(31 downto 0); + signal ddata_w : std_logic_vector(31 downto 0); + signal dmask : std_logic_vector(3 downto 0); + signal dcsel : std_logic_vector(1 downto 0); + signal d_we : std_logic := '0'; + + signal ddata_r_mem : std_logic_vector(31 downto 0); + signal d_rd : std_logic; + + -- I/O signals + signal input_in : std_logic_vector(31 downto 0); + + -- PLL signals + signal locked_sig : std_logic; + + -- CPU state signals + signal state : cpu_state_t; + + + --===================================================== + --DECLARACAO COMPONENTE ADC + ------------------------------------------------------- + -- qsys MAX10 ADC component + component adc_qsys is + port( + clk_clk : in std_logic := 'X'; -- clk + clock_bridge_sys_out_clk_clk : out std_logic; -- clk + modular_adc_0_command_valid : in std_logic := 'X'; -- valid + modular_adc_0_command_channel : in std_logic_vector(4 downto 0) := (others => 'X'); -- channel + modular_adc_0_command_startofpacket : in std_logic := 'X'; -- startofpacket + modular_adc_0_command_endofpacket : in std_logic := 'X'; -- endofpacket + modular_adc_0_command_ready : out std_logic; -- ready + modular_adc_0_response_valid : out std_logic; -- valid + modular_adc_0_response_channel : out std_logic_vector(4 downto 0); -- channel + modular_adc_0_response_data : out std_logic_vector(11 downto 0); -- data + modular_adc_0_response_startofpacket : out std_logic; -- startofpacket + modular_adc_0_response_endofpacket : out std_logic; -- endofpacket + reset_reset_n : in std_logic := 'X' -- reset_n + ); + end component adc_qsys; + + --===================================================== + --DECLARACAO DISPLAY COMPONENTE + ------------------------------------------------------- + + component display_dec is + port( + hex : in std_logic_vector(3 downto 0); + dot : in std_logic; + disp : out std_logic_vector(7 downto 0) + ); + end component display_dec; + + type displays_type is array (0 to 5) of std_logic_vector(3 downto 0); + type displays_out_type is array (0 to 5) of std_logic_vector(7 downto 0); + + signal displays : displays_type; + signal displays_out : displays_out_type; + + --======================================================= + --SINAIS PARA adc_max + --======================================================= + + signal adc_out_clk : std_logic; + signal command_valid : std_logic; + signal command_channel : std_logic_vector(4 downto 0); + signal command_startofpacket : std_logic; + signal command_endofpacket : std_logic; + signal command_ready : std_logic; + signal response_valid : std_logic; + signal response_channel : std_logic_vector(4 downto 0); + signal response_data : std_logic_vector(11 downto 0); + signal response_startofpacket : std_logic; + signal response_endofpacket : std_logic; + + signal adc_sample_data : std_logic_vector(11 downto 0); + signal cur_adc_ch : std_logic_vector(4 downto 0); + signal reset : std_logic; + signal reset_n : std_logic; + + +begin + + --======================================================= + --GENERATE DISPLAYS + --======================================================= + + hex_gen : for i in 0 to 5 generate + hex_dec : display_dec + port map( + hex => displays(i), + dot => '0', + disp => displays_out(i) + ); + end generate; + + HEX0 <= displays_out(0); + HEX1 <= displays_out(1); + HEX2 <= displays_out(2); + HEX3 <= displays_out(3); + HEX4 <= displays_out(4); + HEX5 <= displays_out(5); + + --===================================================== + --PORTMAP ADC + ------------------------------------------------------- + u0 : component adc_qsys + port map( + clk_clk => MAX10_CLK1_50, + clock_bridge_sys_out_clk_clk => adc_out_clk, + modular_adc_0_command_valid => command_valid, + modular_adc_0_command_channel => command_channel, + modular_adc_0_command_startofpacket => command_startofpacket, + modular_adc_0_command_endofpacket => command_endofpacket, + modular_adc_0_command_ready => command_ready, + modular_adc_0_response_valid => response_valid, + modular_adc_0_response_channel => response_channel, + modular_adc_0_response_data => response_data, + modular_adc_0_response_startofpacket => response_startofpacket, + modular_adc_0_response_endofpacket => response_endofpacket, + reset_reset_n => reset_n --reset_n + ); + + --===================================================== + command_startofpacket <= '1'; + command_endofpacket <= '1'; + command_valid <= '1'; + + reset <= SW(8); --sw(9) e reset do ADC + reset_n <= not reset; + LEDR(8) <= reset; + + --===================================================== + --process para ler adc + --===================================================== + + process(adc_out_clk, reset) --adc_out_clk + begin + if reset = '1' then + adc_sample_data <= (others => '0'); + cur_adc_ch <= (others => '0'); + else + if (rising_edge(adc_out_clk) and response_valid = '1') then --adc_out_clk + adc_sample_data <= response_data; + cur_adc_ch <= response_channel; + end if; + end if; + end process; + + --===================================================== + + pll_inst: entity work.pll_quartus + port map( + areset => '0', + inclk0 => MAX10_CLK1_50, + c0 => clk, + locked => locked_sig + ); + + rst <= SW(9); + + -- Dummy out signals + DRAM_DQ <= ddata_r(15 downto 0); + ARDUINO_IO <= ddata_r(31 downto 16); + LEDR(9) <= SW(9); + DRAM_ADDR(9 downto 0) <= address; + + -- IMem shoud be read from instruction and data buses + -- Not enough RAM ports for instruction bus, data bus and in-circuit programming + process(d_rd, dcsel, daddress, iaddress) + begin + if (d_rd = '1') and (dcsel = "00") then + address <= std_logic_vector(to_unsigned(daddress,10)); + else + address <= std_logic_vector(to_unsigned(iaddress,10)); + end if; + end process; + + -- 32-bits x 1024 words quartus RAM (dual port: portA -> riscV, portB -> In-System Mem Editor + iram_quartus_inst: entity work.iram_quartus + port map( + address => address, + byteena => "1111", + clock => clk, + data => (others => '0'), + wren => '0', + q => idata + ); + + -- Data Memory RAM + dmem: entity work.dmemory + generic map( + MEMORY_WORDS => DMEMORY_WORDS + ) + port map( + rst => rst, + clk => clk, + data => ddata_w, + address => daddress, + we => d_we, + csel => dcsel(0), + dmask => dmask, + q => ddata_r_mem + ); + + -- Adress space mux ((check sections.ld) -> Data chip select: + -- 0x00000 -> Instruction memory + -- 0x20000 -> Data memory + -- 0x40000 -> Input/Output generic address space + with dcsel select + ddata_r <= idata when "00", + ddata_r_mem when "01", + input_in when "10", + (others => '0') when others; + + -- Softcore instatiation + myRisc: entity work.core + generic map( + IMEMORY_WORDS => IMEMORY_WORDS, + DMEMORY_WORDS => DMEMORY_WORDS + ) + port map( + clk => clk, + rst => rst, + iaddress => iaddress, + idata => idata, + daddress => daddress, + ddata_r => ddata_r, + ddata_w => ddata_w, + d_we => d_we, + d_rd => d_rd, + dcsel => dcsel, + dmask => dmask, + state => state + ); + + -- Output register (Dummy LED blinky) + process(clk, rst) + begin + if rst = '1' then + LEDR(3 downto 0) <= (others => '0'); + + else + if rising_edge(clk) then + if (d_we = '1') and (dcsel = "10")then + -- ToDo: Simplify compartors + -- ToDo: Maybe use byte addressing? + -- x"01" (word addressing) is x"04" (byte addressing) + if to_unsigned(daddress, 32)(8 downto 0) = x"01" then -- LEDS + LEDR(7 downto 0) <= ddata_w(7 downto 0); + elsif to_unsigned(daddress, 32)(8 downto 0) = x"02" then --OUT_SEGS + displays(0) <= ddata_w(3 downto 0); + displays(1) <= ddata_w(7 downto 4); + displays(2) <= ddata_w(11 downto 8); + displays(3) <= ddata_w(15 downto 12); + displays(4) <= ddata_w(19 downto 16); + displays(5) <= ddata_w(23 downto 20); + + elsif to_unsigned(daddress, 32)(8 downto 0) = x"06" then --CH_ADC_FEED + + elsif to_unsigned(daddress, 32)(8 downto 0) = x"07" then --SEL_CH_ADC + command_channel <= ddata_w(4 downto 0); + + end if; + end if; + end if; + end if; + end process; + + + -- Input register + process(clk, rst) + begin + if rst = '1' then + input_in <= (others => '0'); + else + if rising_edge(clk) then + if (d_rd = '1') and (dcsel = "10") then +-- input_in(8 downto 0) <= SW(8 downto 0); + input_in(11 downto 0) <= adc_sample_data; + input_in(15 downto 12) <= cur_adc_ch(3 downto 0); + + end if; + end if; + end if; + end process; + + +end; diff --git a/peripherals/adc/pll/pll_quartus.cmp b/peripherals/adc/pll/pll_quartus.cmp new file mode 100644 index 00000000..9849212e --- /dev/null +++ b/peripherals/adc/pll/pll_quartus.cmp @@ -0,0 +1,25 @@ +--Copyright (C) 2018 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from 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 Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel FPGA IP License Agreement, or other applicable license +--agreement, including, without limitation, that your use is for +--the sole purpose of programming logic devices manufactured by +--Intel and sold by Intel or its authorized distributors. Please +--refer to the applicable agreement for further details. + + +component pll_quartus + PORT + ( + areset : IN STD_LOGIC := '0'; + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +end component; diff --git a/peripherals/adc/pll/pll_quartus.ppf b/peripherals/adc/pll/pll_quartus.ppf new file mode 100644 index 00000000..4d68e582 --- /dev/null +++ b/peripherals/adc/pll/pll_quartus.ppf @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/peripherals/adc/pll/pll_quartus.qip b/peripherals/adc/pll/pll_quartus.qip new file mode 100644 index 00000000..bfd6a0e7 --- /dev/null +++ b/peripherals/adc/pll/pll_quartus.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "18.1" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{MAX 10}" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "pll_quartus.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll_quartus_inst.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll_quartus.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll_quartus.ppf"] diff --git a/peripherals/adc/pll/pll_quartus.vhd b/peripherals/adc/pll/pll_quartus.vhd new file mode 100644 index 00000000..61e5a753 --- /dev/null +++ b/peripherals/adc/pll/pll_quartus.vhd @@ -0,0 +1,399 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: pll_quartus.vhd +-- Megafunction Name(s): +-- altpll +-- +-- Simulation Library Files(s): +-- +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 18.1.0 Build 625 09/12/2018 SJ Standard Edition +-- ************************************************************ + + +--Copyright (C) 2018 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from 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 Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel FPGA IP License Agreement, or other applicable license +--agreement, including, without limitation, that your use is for +--the sole purpose of programming logic devices manufactured by +--Intel and sold by Intel or its authorized distributors. Please +--refer to the applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY pll_quartus IS + PORT + ( + areset : IN STD_LOGIC := '0'; + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +END pll_quartus; + + +ARCHITECTURE SYN OF pll_quartus IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC ; + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire6_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_divide_by : NATURAL; + clk0_duty_cycle : NATURAL; + clk0_multiply_by : NATURAL; + clk0_phase_shift : STRING; + clk1_divide_by : NATURAL; + clk1_duty_cycle : NATURAL; + clk1_multiply_by : NATURAL; + clk1_phase_shift : STRING; + compensate_clock : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + lpm_hint : STRING; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + port_activeclock : STRING; + port_areset : STRING; + port_clkbad0 : STRING; + port_clkbad1 : STRING; + port_clkloss : STRING; + port_clkswitch : STRING; + port_configupdate : STRING; + port_fbin : STRING; + port_inclk0 : STRING; + port_inclk1 : STRING; + port_locked : STRING; + port_pfdena : STRING; + port_phasecounterselect : STRING; + port_phasedone : STRING; + port_phasestep : STRING; + port_phaseupdown : STRING; + port_pllena : STRING; + port_scanaclr : STRING; + port_scanclk : STRING; + port_scanclkena : STRING; + port_scandata : STRING; + port_scandataout : STRING; + port_scandone : STRING; + port_scanread : STRING; + port_scanwrite : STRING; + port_clk0 : STRING; + port_clk1 : STRING; + port_clk2 : STRING; + port_clk3 : STRING; + port_clk4 : STRING; + port_clk5 : STRING; + port_clkena0 : STRING; + port_clkena1 : STRING; + port_clkena2 : STRING; + port_clkena3 : STRING; + port_clkena4 : STRING; + port_clkena5 : STRING; + port_extclk0 : STRING; + port_extclk1 : STRING; + port_extclk2 : STRING; + port_extclk3 : STRING; + self_reset_on_loss_lock : STRING; + width_clock : NATURAL + ); + PORT ( + areset : IN STD_LOGIC ; + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); + locked : OUT STD_LOGIC + ); + END COMPONENT; + +BEGIN + sub_wire6_bv(0 DOWNTO 0) <= "0"; + sub_wire6 <= To_stdlogicvector(sub_wire6_bv); + sub_wire2 <= sub_wire0(1); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + c1 <= sub_wire2; + locked <= sub_wire3; + sub_wire4 <= inclk0; + sub_wire5 <= sub_wire6(0 DOWNTO 0) & sub_wire4; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_divide_by => 50, + clk0_duty_cycle => 50, + clk0_multiply_by => 1, + clk0_phase_shift => "0", + clk1_divide_by => 15625, + clk1_duty_cycle => 50, + clk1_multiply_by => 3, + clk1_phase_shift => "0", + compensate_clock => "CLK0", + inclk0_input_frequency => 20000, + intended_device_family => "MAX 10", + lpm_hint => "CBX_MODULE_PREFIX=pll_quartus", + lpm_type => "altpll", + operation_mode => "NORMAL", + pll_type => "AUTO", + port_activeclock => "PORT_UNUSED", + port_areset => "PORT_USED", + port_clkbad0 => "PORT_UNUSED", + port_clkbad1 => "PORT_UNUSED", + port_clkloss => "PORT_UNUSED", + port_clkswitch => "PORT_UNUSED", + port_configupdate => "PORT_UNUSED", + port_fbin => "PORT_UNUSED", + port_inclk0 => "PORT_USED", + port_inclk1 => "PORT_UNUSED", + port_locked => "PORT_USED", + port_pfdena => "PORT_UNUSED", + port_phasecounterselect => "PORT_UNUSED", + port_phasedone => "PORT_UNUSED", + port_phasestep => "PORT_UNUSED", + port_phaseupdown => "PORT_UNUSED", + port_pllena => "PORT_UNUSED", + port_scanaclr => "PORT_UNUSED", + port_scanclk => "PORT_UNUSED", + port_scanclkena => "PORT_UNUSED", + port_scandata => "PORT_UNUSED", + port_scandataout => "PORT_UNUSED", + port_scandone => "PORT_UNUSED", + port_scanread => "PORT_UNUSED", + port_scanwrite => "PORT_UNUSED", + port_clk0 => "PORT_USED", + port_clk1 => "PORT_USED", + port_clk2 => "PORT_UNUSED", + port_clk3 => "PORT_UNUSED", + port_clk4 => "PORT_UNUSED", + port_clk5 => "PORT_UNUSED", + port_clkena0 => "PORT_UNUSED", + port_clkena1 => "PORT_UNUSED", + port_clkena2 => "PORT_UNUSED", + port_clkena3 => "PORT_UNUSED", + port_clkena4 => "PORT_UNUSED", + port_clkena5 => "PORT_UNUSED", + port_extclk0 => "PORT_UNUSED", + port_extclk1 => "PORT_UNUSED", + port_extclk2 => "PORT_UNUSED", + port_extclk3 => "PORT_UNUSED", + self_reset_on_loss_lock => "OFF", + width_clock => 5 + ) + PORT MAP ( + areset => areset, + inclk => sub_wire5, + clk => sub_wire0, + locked => sub_wire3 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "50" +-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "1" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "1.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "0.009600" +-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "50.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "MAX 10" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "1" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "100.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "0.00960000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "ps" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll_quartus.mif" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK2 STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK3 STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK4 STRING "0" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK1 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "1" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "15625" +-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "3" +-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "20000" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "MAX 10" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "OFF" +-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +-- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +-- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" +-- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +-- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_quartus.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_quartus.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_quartus.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_quartus.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_quartus.bsf FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_quartus_inst.vhd TRUE +-- Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/peripherals/adc/pll/pll_quartus_inst.vhd b/peripherals/adc/pll/pll_quartus_inst.vhd new file mode 100644 index 00000000..bee5a286 --- /dev/null +++ b/peripherals/adc/pll/pll_quartus_inst.vhd @@ -0,0 +1,7 @@ +pll_quartus_inst : pll_quartus PORT MAP ( + areset => areset_sig, + inclk0 => inclk0_sig, + c0 => c0_sig, + c1 => c1_sig, + locked => locked_sig + ); diff --git a/peripherals/adc/sint/de10_lite.ipregen.rpt b/peripherals/adc/sint/de10_lite.ipregen.rpt new file mode 100644 index 00000000..72188105 --- /dev/null +++ b/peripherals/adc/sint/de10_lite.ipregen.rpt @@ -0,0 +1,68 @@ +IP Upgrade report for de10_lite +Mon Jul 8 08:47:25 2019 +Quartus Prime Version 18.1.0 Build 625 09/12/2018 SJ Standard Edition + + +--------------------- +; Table of Contents ; +--------------------- + 1. Legal Notice + 2. IP Upgrade Summary + 3. Successfully Upgraded IP Components + 4. IP Upgrade Messages + + + +---------------- +; Legal Notice ; +---------------- +Copyright (C) 2018 Intel Corporation. All rights reserved. +Your use of Intel Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from 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 Intel Program License +Subscription Agreement, the Intel Quartus Prime License Agreement, +the Intel FPGA IP License Agreement, or other applicable license +agreement, including, without limitation, that your use is for +the sole purpose of programming logic devices manufactured by +Intel and sold by Intel or its authorized distributors. Please +refer to the applicable agreement for further details. + + + ++--------------------------------------------------------------------------------+ +; IP Upgrade Summary ; ++------------------------------+-------------------------------------------------+ +; IP Components Upgrade Status ; Passed - Mon Jul 8 08:47:25 2019 ; +; Quartus Prime Version ; 18.1.0 Build 625 09/12/2018 SJ Standard Edition ; +; Revision Name ; de10_lite ; +; Top-level Entity Name ; de0_lite ; +; Family ; MAX 10 ; ++------------------------------+-------------------------------------------------+ + + ++-----------------------------------------------------------------------------------------------------------------------------+ +; Successfully Upgraded IP Components ; ++-------------+----------------+---------+------------------------+------------------------+------------------------+---------+ +; Entity Name ; Component Name ; Version ; Original Source File ; Generation File Path ; New Source File ; Message ; ++-------------+----------------+---------+------------------------+------------------------+------------------------+---------+ +; pll_quartus ; ALTPLL ; 17.1 ; ../pll/pll_quartus.qip ; ../pll/pll_quartus.vhd ; ../pll/pll_quartus.qip ; ; ++-------------+----------------+---------+------------------------+------------------------+------------------------+---------+ + + ++---------------------+ +; IP Upgrade Messages ; ++---------------------+ +Info (11902): Backing up file "../pll/pll_quartus.vhd" to "../pll/pll_quartus.BAK.vhd" +Info (11837): Started upgrading IP component ALTPLL with file "../pll/pll_quartus.vhd" +Info (11131): Completed upgrading IP component ALTPLL with file "../pll/pll_quartus.vhd" +Info (23030): Evaluation of Tcl script /home/xtarke/Data/Apps/intelFPGA/18.1/quartus/common/tcl/internal/ip_regen/ip_regen.tcl was successful +Info: Quartus Prime Shell was successful. 0 errors, 0 warnings + Info: Peak virtual memory: 1065 megabytes + Info: Processing ended: Mon Jul 8 08:47:25 2019 + Info: Elapsed time: 00:00:09 + Info: Total CPU time (on all processors): 00:00:28 + + diff --git a/peripherals/adc/sint/de10_lite.qpf b/peripherals/adc/sint/de10_lite.qpf new file mode 100644 index 00000000..2e37e9d1 --- /dev/null +++ b/peripherals/adc/sint/de10_lite.qpf @@ -0,0 +1,31 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2015 Altera Corporation. All rights reserved. +# 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 from 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, the Altera Quartus II License Agreement, +# the 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 64-Bit +# Version 15.0.0 Build 145 04/22/2015 SJ Web Edition +# Date created = 18:49:34 June 20, 2019 +# +# -------------------------------------------------------------------------- # + +QUARTUS_VERSION = "15.0" +DATE = "18:49:34 June 20, 2019" + +# Revisions + +PROJECT_REVISION = "de10_lite" diff --git a/peripherals/adc/sint/de10_lite.qsf b/peripherals/adc/sint/de10_lite.qsf new file mode 100644 index 00000000..ef9389b1 --- /dev/null +++ b/peripherals/adc/sint/de10_lite.qsf @@ -0,0 +1,235 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2015 Altera Corporation. All rights reserved. +# 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 from 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, the Altera Quartus II License Agreement, +# the 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 64-Bit +# Version 15.0.0 Build 145 04/22/2015 SJ Web Edition +# Date created = 18:49:34 June 20, 2019 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# de10_lite_assignment_defaults.qdf +# If this file doesn't exist, see file: +# assignment_defaults.qdf +# +# 2) Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. +# +# -------------------------------------------------------------------------- # + + +set_global_assignment -name FAMILY "MAX 10" +set_global_assignment -name DEVICE 10M50DAF484C7G +set_global_assignment -name TOP_LEVEL_ENTITY de10_lite +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 15.0.0 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "18:49:34 JUNE 20, 2019" +set_global_assignment -name LAST_QUARTUS_VERSION "18.1.0 Standard Edition" +set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256 +set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (VHDL)" +set_global_assignment -name EDA_OUTPUT_DATA_FORMAT VHDL -section_id eda_simulation +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" +set_global_assignment -name ENABLE_OCT_DONE ON +set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 00000000 +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF +set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "SINGLE IMAGE WITH ERAM" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall +set_location_assignment PIN_N5 -to ADC_CLK_10 +set_location_assignment PIN_P11 -to MAX10_CLK1_50 +set_location_assignment PIN_N14 -to MAX10_CLK2_50 +set_location_assignment PIN_U17 -to DRAM_ADDR[0] +set_location_assignment PIN_W19 -to DRAM_ADDR[1] +set_location_assignment PIN_V18 -to DRAM_ADDR[2] +set_location_assignment PIN_U18 -to DRAM_ADDR[3] +set_location_assignment PIN_U19 -to DRAM_ADDR[4] +set_location_assignment PIN_T18 -to DRAM_ADDR[5] +set_location_assignment PIN_T19 -to DRAM_ADDR[6] +set_location_assignment PIN_R18 -to DRAM_ADDR[7] +set_location_assignment PIN_P18 -to DRAM_ADDR[8] +set_location_assignment PIN_P19 -to DRAM_ADDR[9] +set_location_assignment PIN_T20 -to DRAM_ADDR[10] +set_location_assignment PIN_P20 -to DRAM_ADDR[11] +set_location_assignment PIN_R20 -to DRAM_ADDR[12] +set_location_assignment PIN_T21 -to DRAM_BA[0] +set_location_assignment PIN_T22 -to DRAM_BA[1] +set_location_assignment PIN_U21 -to DRAM_CAS_N +set_location_assignment PIN_N22 -to DRAM_CKE +set_location_assignment PIN_L14 -to DRAM_CLK +set_location_assignment PIN_U20 -to DRAM_CS_N +set_location_assignment PIN_Y21 -to DRAM_DQ[0] +set_location_assignment PIN_Y20 -to DRAM_DQ[1] +set_location_assignment PIN_AA22 -to DRAM_DQ[2] +set_location_assignment PIN_AA21 -to DRAM_DQ[3] +set_location_assignment PIN_Y22 -to DRAM_DQ[4] +set_location_assignment PIN_W22 -to DRAM_DQ[5] +set_location_assignment PIN_W20 -to DRAM_DQ[6] +set_location_assignment PIN_V21 -to DRAM_DQ[7] +set_location_assignment PIN_P21 -to DRAM_DQ[8] +set_location_assignment PIN_J22 -to DRAM_DQ[9] +set_location_assignment PIN_H21 -to DRAM_DQ[10] +set_location_assignment PIN_H22 -to DRAM_DQ[11] +set_location_assignment PIN_G22 -to DRAM_DQ[12] +set_location_assignment PIN_G20 -to DRAM_DQ[13] +set_location_assignment PIN_G19 -to DRAM_DQ[14] +set_location_assignment PIN_F22 -to DRAM_DQ[15] +set_location_assignment PIN_V22 -to DRAM_LDQM +set_location_assignment PIN_U22 -to DRAM_RAS_N +set_location_assignment PIN_J21 -to DRAM_UDQM +set_location_assignment PIN_V20 -to DRAM_WE_N +set_location_assignment PIN_C14 -to HEX0[0] +set_location_assignment PIN_E15 -to HEX0[1] +set_location_assignment PIN_C15 -to HEX0[2] +set_location_assignment PIN_C16 -to HEX0[3] +set_location_assignment PIN_E16 -to HEX0[4] +set_location_assignment PIN_D17 -to HEX0[5] +set_location_assignment PIN_C17 -to HEX0[6] +set_location_assignment PIN_D15 -to HEX0[7] +set_location_assignment PIN_C18 -to HEX1[0] +set_location_assignment PIN_D18 -to HEX1[1] +set_location_assignment PIN_E18 -to HEX1[2] +set_location_assignment PIN_B16 -to HEX1[3] +set_location_assignment PIN_A17 -to HEX1[4] +set_location_assignment PIN_A18 -to HEX1[5] +set_location_assignment PIN_B17 -to HEX1[6] +set_location_assignment PIN_A16 -to HEX1[7] +set_location_assignment PIN_B20 -to HEX2[0] +set_location_assignment PIN_A20 -to HEX2[1] +set_location_assignment PIN_B19 -to HEX2[2] +set_location_assignment PIN_A21 -to HEX2[3] +set_location_assignment PIN_B21 -to HEX2[4] +set_location_assignment PIN_C22 -to HEX2[5] +set_location_assignment PIN_B22 -to HEX2[6] +set_location_assignment PIN_A19 -to HEX2[7] +set_location_assignment PIN_F21 -to HEX3[0] +set_location_assignment PIN_E22 -to HEX3[1] +set_location_assignment PIN_E21 -to HEX3[2] +set_location_assignment PIN_C19 -to HEX3[3] +set_location_assignment PIN_C20 -to HEX3[4] +set_location_assignment PIN_D19 -to HEX3[5] +set_location_assignment PIN_E17 -to HEX3[6] +set_location_assignment PIN_D22 -to HEX3[7] +set_location_assignment PIN_F18 -to HEX4[0] +set_location_assignment PIN_E20 -to HEX4[1] +set_location_assignment PIN_E19 -to HEX4[2] +set_location_assignment PIN_J18 -to HEX4[3] +set_location_assignment PIN_H19 -to HEX4[4] +set_location_assignment PIN_F19 -to HEX4[5] +set_location_assignment PIN_F20 -to HEX4[6] +set_location_assignment PIN_F17 -to HEX4[7] +set_location_assignment PIN_J20 -to HEX5[0] +set_location_assignment PIN_K20 -to HEX5[1] +set_location_assignment PIN_L18 -to HEX5[2] +set_location_assignment PIN_N18 -to HEX5[3] +set_location_assignment PIN_M20 -to HEX5[4] +set_location_assignment PIN_N19 -to HEX5[5] +set_location_assignment PIN_N20 -to HEX5[6] +set_location_assignment PIN_L19 -to HEX5[7] +set_location_assignment PIN_B8 -to KEY[0] +set_location_assignment PIN_A7 -to KEY[1] +set_location_assignment PIN_A8 -to LEDR[0] +set_location_assignment PIN_A9 -to LEDR[1] +set_location_assignment PIN_A10 -to LEDR[2] +set_location_assignment PIN_B10 -to LEDR[3] +set_location_assignment PIN_D13 -to LEDR[4] +set_location_assignment PIN_C13 -to LEDR[5] +set_location_assignment PIN_E14 -to LEDR[6] +set_location_assignment PIN_D14 -to LEDR[7] +set_location_assignment PIN_A11 -to LEDR[8] +set_location_assignment PIN_B11 -to LEDR[9] +set_location_assignment PIN_C10 -to SW[0] +set_location_assignment PIN_C11 -to SW[1] +set_location_assignment PIN_D12 -to SW[2] +set_location_assignment PIN_C12 -to SW[3] +set_location_assignment PIN_A12 -to SW[4] +set_location_assignment PIN_B12 -to SW[5] +set_location_assignment PIN_A13 -to SW[6] +set_location_assignment PIN_A14 -to SW[7] +set_location_assignment PIN_B14 -to SW[8] +set_location_assignment PIN_F15 -to SW[9] +set_location_assignment PIN_P1 -to VGA_B[0] +set_location_assignment PIN_T1 -to VGA_B[1] +set_location_assignment PIN_P4 -to VGA_B[2] +set_location_assignment PIN_N2 -to VGA_B[3] +set_location_assignment PIN_W1 -to VGA_G[0] +set_location_assignment PIN_T2 -to VGA_G[1] +set_location_assignment PIN_R2 -to VGA_G[2] +set_location_assignment PIN_R1 -to VGA_G[3] +set_location_assignment PIN_N3 -to VGA_HS +set_location_assignment PIN_AA1 -to VGA_R[0] +set_location_assignment PIN_V1 -to VGA_R[1] +set_location_assignment PIN_Y2 -to VGA_R[2] +set_location_assignment PIN_Y1 -to VGA_R[3] +set_location_assignment PIN_N1 -to VGA_VS +set_location_assignment PIN_AB16 -to GSENSOR_CS_N +set_location_assignment PIN_Y14 -to GSENSOR_INT[1] +set_location_assignment PIN_Y13 -to GSENSOR_INT[2] +set_location_assignment PIN_AB15 -to GSENSOR_SCLK +set_location_assignment PIN_V11 -to GSENSOR_SDI +set_location_assignment PIN_V12 -to GSENSOR_SDO +set_location_assignment PIN_AB5 -to ARDUINO_IO[0] +set_location_assignment PIN_AB6 -to ARDUINO_IO[1] +set_location_assignment PIN_AB7 -to ARDUINO_IO[2] +set_location_assignment PIN_AB8 -to ARDUINO_IO[3] +set_location_assignment PIN_AB9 -to ARDUINO_IO[4] +set_location_assignment PIN_Y10 -to ARDUINO_IO[5] +set_location_assignment PIN_AA11 -to ARDUINO_IO[6] +set_location_assignment PIN_AA12 -to ARDUINO_IO[7] +set_location_assignment PIN_AB17 -to ARDUINO_IO[8] +set_location_assignment PIN_AA17 -to ARDUINO_IO[9] +set_location_assignment PIN_AB19 -to ARDUINO_IO[10] +set_location_assignment PIN_AA19 -to ARDUINO_IO[11] +set_location_assignment PIN_Y19 -to ARDUINO_IO[12] +set_location_assignment PIN_AB20 -to ARDUINO_IO[13] +set_location_assignment PIN_AB21 -to ARDUINO_IO[14] +set_location_assignment PIN_AA20 -to ARDUINO_IO[15] +set_location_assignment PIN_F16 -to ARDUINO_RESET_N +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V" +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top +set_global_assignment -name QSYS_FILE ../adc_qsys.qsys +set_global_assignment -name VHDL_FILE ../../disp7seg/display_dec.vhd +set_global_assignment -name SDC_FILE de10_lite.sdc +set_global_assignment -name VHDL_FILE ../uart.vhd +set_global_assignment -name QIP_FILE ../pll/pll_quartus.qip +set_global_assignment -name VHDL_FILE ../../../alu/alu_types.vhd +set_global_assignment -name VHDL_FILE ../../../alu/alu.vhd +set_global_assignment -name VHDL_FILE ../de10_lite.vhd +set_global_assignment -name VHDL_FILE ../../../alu/m/M_types.vhd +set_global_assignment -name VHDL_FILE ../../../alu/m/M.vhd +set_global_assignment -name VHDL_FILE ../../../memory/dmemory.vhd +set_global_assignment -name VHDL_FILE ../../../memory/iram_quartus.vhd +set_global_assignment -name QIP_FILE ../../../memory/iram_quartus.qip +set_global_assignment -name VHDL_FILE ../../../decoder/iregister.vhd +set_global_assignment -name VHDL_FILE ../../../decoder/decoder_types.vhd +set_global_assignment -name VHDL_FILE ../../../decoder/decoder.vhd +set_global_assignment -name VHDL_FILE ../../../core/core.vhd +set_global_assignment -name VHDL_FILE ../../../registers/register_file.vhd + +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/peripherals/adc/sint/de10_lite.sdc b/peripherals/adc/sint/de10_lite.sdc new file mode 100644 index 00000000..7267c16e --- /dev/null +++ b/peripherals/adc/sint/de10_lite.sdc @@ -0,0 +1,86 @@ +#************************************************************** +# This .sdc file is created by Terasic Tool. +# Users are recommended to modify this file to match users logic. +#************************************************************** + +#************************************************************** +# Create Clock +#************************************************************** +create_clock -period "10.0 MHz" [get_ports ADC_CLK_10] +create_clock -period "50.0 MHz" [get_ports MAX10_CLK1_50] +create_clock -period "50.0 MHz" [get_ports MAX10_CLK2_50] + +#************************************************************** +# Create Generated Clock +#************************************************************** +derive_pll_clocks + + + +#************************************************************** +# Set Clock Latency +#************************************************************** + + + +#************************************************************** +# Set Clock Uncertainty +#************************************************************** +derive_clock_uncertainty + + + +#************************************************************** +# Set Input Delay +#************************************************************** + + + +#************************************************************** +# Set Output Delay +#************************************************************** + + + +#************************************************************** +# Set Clock Groups +#************************************************************** + + + +#************************************************************** +# Set False Path +#************************************************************** + + + +#************************************************************** +# Set Multicycle Path +#************************************************************** + + + +#************************************************************** +# Set Maximum Delay +#************************************************************** + + + +#************************************************************** +# Set Minimum Delay +#************************************************************** + + + +#************************************************************** +# Set Input Transition +#************************************************************** + + + +#************************************************************** +# Set Load +#************************************************************** + + + diff --git a/peripherals/adc/sint/de10_lite_assignment_defaults.qdf b/peripherals/adc/sint/de10_lite_assignment_defaults.qdf new file mode 100644 index 00000000..d40b50e3 --- /dev/null +++ b/peripherals/adc/sint/de10_lite_assignment_defaults.qdf @@ -0,0 +1,807 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 2018 Intel Corporation. All rights reserved. +# Your use of Intel Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from 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 Intel Program License +# Subscription Agreement, the Intel Quartus Prime License Agreement, +# the Intel FPGA IP License Agreement, or other applicable license +# agreement, including, without limitation, that your use is for +# the sole purpose of programming logic devices manufactured by +# Intel and sold by Intel or its authorized distributors. Please +# refer to the applicable agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus Prime +# Version 18.1.0 Build 625 09/12/2018 SJ Standard Edition +# Date created = 08:39:22 July 08, 2019 +# +# -------------------------------------------------------------------------- # +# +# Note: +# +# 1) Do not modify this file. This file was generated +# automatically by the Quartus Prime software and is used +# to preserve global assignments across Quartus Prime versions. +# +# -------------------------------------------------------------------------- # + +set_global_assignment -name IP_COMPONENT_REPORT_HIERARCHY Off +set_global_assignment -name IP_COMPONENT_INTERNAL Off +set_global_assignment -name PROJECT_SHOW_ENTITY_NAME On +set_global_assignment -name PROJECT_USE_SIMPLIFIED_NAMES Off +set_global_assignment -name ENABLE_REDUCED_MEMORY_MODE Off +set_global_assignment -name VER_COMPATIBLE_DB_DIR export_db +set_global_assignment -name AUTO_EXPORT_VER_COMPATIBLE_DB Off +set_global_assignment -name FLOW_DISABLE_ASSEMBLER Off +set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER Off +set_global_assignment -name FLOW_ENABLE_HC_COMPARE Off +set_global_assignment -name HC_OUTPUT_DIR hc_output +set_global_assignment -name SAVE_MIGRATION_INFO_DURING_COMPILATION Off +set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS Off +set_global_assignment -name RUN_FULL_COMPILE_ON_DEVICE_CHANGE On +set_global_assignment -name FLOW_ENABLE_RTL_VIEWER Off +set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS "Use global settings" +set_global_assignment -name FLOW_HARDCOPY_DESIGN_READINESS_CHECK On +set_global_assignment -name FLOW_ENABLE_PARALLEL_MODULES On +set_global_assignment -name ENABLE_COMPACT_REPORT_TABLE Off +set_global_assignment -name REVISION_TYPE Base -family "Arria V" +set_global_assignment -name REVISION_TYPE Base -family "Stratix V" +set_global_assignment -name REVISION_TYPE Base -family "Arria V GZ" +set_global_assignment -name REVISION_TYPE Base -family "Cyclone V" +set_global_assignment -name DEFAULT_HOLD_MULTICYCLE "Same as Multicycle" +set_global_assignment -name CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS On +set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS On +set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK On +set_global_assignment -name DO_COMBINED_ANALYSIS Off +set_global_assignment -name TDC_AGGRESSIVE_HOLD_CLOSURE_EFFORT Off +set_global_assignment -name ENABLE_HPS_INTERNAL_TIMING Off +set_global_assignment -name EMIF_SOC_PHYCLK_ADVANCE_MODELING Off +set_global_assignment -name USE_DLL_FREQUENCY_FOR_DQS_DELAY_CHAIN Off +set_global_assignment -name ANALYZE_LATCHES_AS_SYNCHRONOUS_ELEMENTS On +set_global_assignment -name TIMING_ANALYZER_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS On +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria V" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone 10 LP" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "MAX 10" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Stratix IV" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone IV E" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria 10" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS Off -family "MAX V" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Stratix V" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria V GZ" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS Off -family "MAX II" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria II GX" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria II GZ" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone IV GX" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone V" +set_global_assignment -name TIMING_ANALYZER_DO_REPORT_TIMING Off +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone 10 LP" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "MAX 10" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix IV" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV E" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria 10" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX V" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix V" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V GZ" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX II" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GX" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GZ" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV GX" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Cyclone V" +set_global_assignment -name TIMING_ANALYZER_REPORT_NUM_WORST_CASE_TIMING_PATHS 100 +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria V" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone 10 LP" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "MAX 10" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone IV E" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Stratix IV" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria 10" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL Off -family "MAX V" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Stratix V" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria V GZ" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL Off -family "MAX II" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria II GX" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria II GZ" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone IV GX" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone V" +set_global_assignment -name OPTIMIZATION_MODE Balanced +set_global_assignment -name ALLOW_REGISTER_MERGING On +set_global_assignment -name ALLOW_REGISTER_DUPLICATION On +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria V" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER ON -family "Cyclone 10 LP" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX 10" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Stratix IV" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone IV E" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER ON -family "Arria 10" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX V" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Stratix V" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria V GZ" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX II" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria II GX" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria II GZ" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone IV GX" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone V" +set_global_assignment -name MUX_RESTRUCTURE Auto +set_global_assignment -name MLAB_ADD_TIMING_CONSTRAINTS_FOR_MIXED_PORT_FEED_THROUGH_MODE_SETTING_DONT_CARE Off +set_global_assignment -name ENABLE_IP_DEBUG Off +set_global_assignment -name SAVE_DISK_SPACE On +set_global_assignment -name OCP_HW_EVAL -value OFF +set_global_assignment -name DEVICE_FILTER_PACKAGE Any +set_global_assignment -name DEVICE_FILTER_PIN_COUNT Any +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE Any +set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" +set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001 +set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993 +set_global_assignment -name FAMILY -value "Cyclone V" +set_global_assignment -name TRUE_WYSIWYG_FLOW Off +set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off +set_global_assignment -name STATE_MACHINE_PROCESSING Auto +set_global_assignment -name SAFE_STATE_MACHINE Off +set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On +set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On +set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off +set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000 +set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250 +set_global_assignment -name INFER_RAMS_FROM_RAW_LOGIC On +set_global_assignment -name PARALLEL_SYNTHESIS On +set_global_assignment -name DSP_BLOCK_BALANCING Auto +set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)" +set_global_assignment -name NOT_GATE_PUSH_BACK On +set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On +set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off +set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On +set_global_assignment -name IGNORE_CARRY_BUFFERS Off +set_global_assignment -name IGNORE_CASCADE_BUFFERS Off +set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off +set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off +set_global_assignment -name IGNORE_LCELL_BUFFERS Off +set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO +set_global_assignment -name IGNORE_SOFT_BUFFERS On +set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off +set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off +set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On +set_global_assignment -name AUTO_GLOBAL_OE_MAX On +set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On +set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off +set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut +set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed +set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name ALLOW_XOR_GATE_USAGE On +set_global_assignment -name AUTO_LCELL_INSERTION On +set_global_assignment -name CARRY_CHAIN_LENGTH 48 +set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32 +set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32 +set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48 +set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70 +set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70 +set_global_assignment -name CASCADE_CHAIN_LENGTH 2 +set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16 +set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4 +set_global_assignment -name AUTO_CARRY_CHAINS On +set_global_assignment -name AUTO_CASCADE_CHAINS On +set_global_assignment -name AUTO_PARALLEL_EXPANDERS On +set_global_assignment -name AUTO_OPEN_DRAIN_PINS On +set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off +set_global_assignment -name AUTO_ROM_RECOGNITION On +set_global_assignment -name AUTO_RAM_RECOGNITION On +set_global_assignment -name AUTO_DSP_RECOGNITION On +set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto +set_global_assignment -name ALLOW_SHIFT_REGISTER_MERGING_ACROSS_HIERARCHIES Auto +set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On +set_global_assignment -name STRICT_RAM_RECOGNITION Off +set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On +set_global_assignment -name FORCE_SYNCH_CLEAR Off +set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On +set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off +set_global_assignment -name AUTO_RESOURCE_SHARING Off +set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION Off +set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION Off +set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off +set_global_assignment -name MAX7000_FANIN_PER_CELL 100 +set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On +set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)" +set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)" +set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)" +set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off +set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GZ" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone 10 LP" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "MAX 10" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV GX" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix IV" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV E" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria 10" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V GZ" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GX" +set_global_assignment -name REPORT_PARAMETER_SETTINGS On +set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS On +set_global_assignment -name REPORT_CONNECTIVITY_CHECKS On +set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone 10 LP" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX 10" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV E" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix IV" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX II" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V GZ" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GX" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GZ" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV GX" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Cyclone V" +set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation" +set_global_assignment -name HDL_MESSAGE_LEVEL Level2 +set_global_assignment -name USE_HIGH_SPEED_ADDER Auto +set_global_assignment -name NUMBER_OF_PROTECTED_REGISTERS_REPORTED 100 +set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000 +set_global_assignment -name NUMBER_OF_SYNTHESIS_MIGRATION_ROWS 5000 +set_global_assignment -name SYNTHESIS_S10_MIGRATION_CHECKS Off +set_global_assignment -name NUMBER_OF_SWEPT_NODES_REPORTED 5000 +set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100 +set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On +set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off +set_global_assignment -name BLOCK_DESIGN_NAMING Auto +set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off +set_global_assignment -name SYNTHESIS_EFFORT Auto +set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On +set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off +set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium +set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GZ" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone 10 LP" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "MAX 10" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria 10" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V GZ" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX" +set_global_assignment -name MAX_LABS "-1 (Unlimited)" +set_global_assignment -name RBCGEN_CRITICAL_WARNING_TO_ERROR On +set_global_assignment -name MAX_NUMBER_OF_REGISTERS_FROM_UNINFERRED_RAMS "-1 (Unlimited)" +set_global_assignment -name AUTO_PARALLEL_SYNTHESIS On +set_global_assignment -name PRPOF_ID Off +set_global_assignment -name DISABLE_DSP_NEGATE_INFERENCING Off +set_global_assignment -name REPORT_PARAMETER_SETTINGS_PRO On +set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS_PRO On +set_global_assignment -name ENABLE_STATE_MACHINE_INFERENCE Off +set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off +set_global_assignment -name AUTO_MERGE_PLLS On +set_global_assignment -name IGNORE_MODE_FOR_MERGE Off +set_global_assignment -name TXPMA_SLEW_RATE Low +set_global_assignment -name ADCE_ENABLED Auto +set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal +set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS Off +set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0 +set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0 +set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0 +set_global_assignment -name PHYSICAL_SYNTHESIS Off +set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off +set_global_assignment -name DEVICE AUTO +set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off +set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off +set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On +set_global_assignment -name ENABLE_NCEO_OUTPUT Off +set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin" +set_global_assignment -name STRATIXIII_UPDATE_MODE Standard +set_global_assignment -name STRATIX_UPDATE_MODE Standard +set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "Single Image" +set_global_assignment -name CVP_MODE Off +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria 10" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Stratix V" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V GZ" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Cyclone V" +set_global_assignment -name VID_OPERATION_MODE "PMBus Slave" +set_global_assignment -name USE_CONF_DONE AUTO +set_global_assignment -name USE_PWRMGT_SCL AUTO +set_global_assignment -name USE_PWRMGT_SDA AUTO +set_global_assignment -name USE_PWRMGT_ALERT AUTO +set_global_assignment -name USE_INIT_DONE AUTO +set_global_assignment -name USE_CVP_CONFDONE AUTO +set_global_assignment -name USE_SEU_ERROR AUTO +set_global_assignment -name RESERVE_AVST_CLK_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_VALID_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_DATA15_THROUGH_DATA0_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name MAX10FPGA_CONFIGURATION_SCHEME "Internal Configuration" +set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name USER_START_UP_CLOCK Off +set_global_assignment -name ENABLE_UNUSED_RX_CLOCK_WORKAROUND Off +set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL Off +set_global_assignment -name IGNORE_HSSI_COLUMN_POWER_WHEN_PRESERVING_UNUSED_XCVR_CHANNELS On +set_global_assignment -name AUTO_RESERVE_CLKUSR_FOR_CALIBRATION On +set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC +set_global_assignment -name ENABLE_VREFA_PIN Off +set_global_assignment -name ENABLE_VREFB_PIN Off +set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off +set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off +set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off +set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off +set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground" +set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off +set_global_assignment -name INIT_DONE_OPEN_DRAIN On +set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA15_THROUGH_DATA8_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin" +set_global_assignment -name ENABLE_CONFIGURATION_PINS On +set_global_assignment -name ENABLE_JTAG_PIN_SHARING Off +set_global_assignment -name ENABLE_NCE_PIN Off +set_global_assignment -name ENABLE_BOOT_SEL_PIN On +set_global_assignment -name CRC_ERROR_CHECKING Off +set_global_assignment -name INTERNAL_SCRUBBING Off +set_global_assignment -name PR_ERROR_OPEN_DRAIN On +set_global_assignment -name PR_READY_OPEN_DRAIN On +set_global_assignment -name ENABLE_CVP_CONFDONE Off +set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN On +set_global_assignment -name ENABLE_NCONFIG_FROM_CORE On +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GZ" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone 10 LP" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "MAX 10" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria 10" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V GZ" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone 10 LP" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "MAX 10" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV E" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix IV" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria 10" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V GZ" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX II" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GZ" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone V" +set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On +set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto +set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix IV" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria 10" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix V" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria V GZ" +set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0 +set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On +set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation" +set_global_assignment -name OPTIMIZE_SSN Off +set_global_assignment -name OPTIMIZE_TIMING "Normal compilation" +set_global_assignment -name ECO_OPTIMIZE_TIMING Off +set_global_assignment -name ECO_REGENERATE_REPORT Off +set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING Normal +set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off +set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically +set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically +set_global_assignment -name SEED 1 +set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION OFF +set_global_assignment -name RESERVE_ROUTING_OUTPUT_FLEXIBILITY Off +set_global_assignment -name SLOW_SLEW_RATE Off +set_global_assignment -name PCI_IO Off +set_global_assignment -name TURBO_BIT On +set_global_assignment -name WEAK_PULL_UP_RESISTOR Off +set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off +set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off +set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On +set_global_assignment -name QII_AUTO_PACKED_REGISTERS Auto +set_global_assignment -name AUTO_PACKED_REGISTERS_MAX Auto +set_global_assignment -name NORMAL_LCELL_INSERT On +set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone 10 LP" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX 10" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix IV" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV E" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria 10" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX II" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V GZ" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GX" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GZ" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV GX" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone V" +set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS OFF +set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off +set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off +set_global_assignment -name AUTO_TURBO_BIT ON +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off +set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off +set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off +set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off +set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On +set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off +set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off +set_global_assignment -name FITTER_EFFORT "Auto Fit" +set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal +set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION Auto +set_global_assignment -name ROUTER_REGISTER_DUPLICATION Auto +set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off +set_global_assignment -name AUTO_GLOBAL_CLOCK On +set_global_assignment -name AUTO_GLOBAL_OE On +set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On +set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic +set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off +set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off +set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off +set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off +set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off +set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off +set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up" +set_global_assignment -name ENABLE_HOLD_BACK_OFF On +set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto +set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off +set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Auto +set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On +set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone 10 LP" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "MAX 10" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone IV E" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria 10" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Stratix V" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V GZ" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Cyclone V" +set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria 10" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Stratix V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Cyclone IV GX" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V GZ" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Cyclone V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Arria II GX" +set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off +set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On +set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off +set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off +set_global_assignment -name PR_DONE_OPEN_DRAIN On +set_global_assignment -name NCEO_OPEN_DRAIN On +set_global_assignment -name ENABLE_CRC_ERROR_PIN Off +set_global_assignment -name ENABLE_PR_PINS Off +set_global_assignment -name RESERVE_PR_PINS Off +set_global_assignment -name CONVERT_PR_WARNINGS_TO_ERRORS Off +set_global_assignment -name PR_PINS_OPEN_DRAIN Off +set_global_assignment -name CLAMPING_DIODE Off +set_global_assignment -name TRI_STATE_SPI_PINS Off +set_global_assignment -name UNUSED_TSD_PINS_GND Off +set_global_assignment -name IMPLEMENT_MLAB_IN_16_BIT_DEEP_MODE Off +set_global_assignment -name FORM_DDR_CLUSTERING_CLIQUE Off +set_global_assignment -name ALM_REGISTER_PACKING_EFFORT Medium +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION Off -family "Stratix IV" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria 10" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Stratix V" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V GZ" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Cyclone V" +set_global_assignment -name RELATIVE_NEUTRON_FLUX 1.0 +set_global_assignment -name SEU_FIT_REPORT Off +set_global_assignment -name HYPER_RETIMER Off -family "Arria 10" +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ADD_PIPELINING_MAX "-1" +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ASYNCH_CLEAR Auto +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_USER_PRESERVE_RESTRICTION Auto +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_DSP_BLOCKS On +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_RAM_BLOCKS On +set_global_assignment -name EDA_SIMULATION_TOOL "" +set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" +set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" +set_global_assignment -name EDA_RESYNTHESIS_TOOL "" +set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On +set_global_assignment -name COMPRESSION_MODE Off +set_global_assignment -name CLOCK_SOURCE Internal +set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz" +set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1 +set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On +set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off +set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On +set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF +set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F +set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name USE_CHECKSUM_AS_USERCODE On +set_global_assignment -name SECURITY_BIT Off +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone 10 LP" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX 10" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX V" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GZ" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX" +set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto +set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto +set_global_assignment -name PWRMGT_SLAVE_DEVICE_TYPE "PV3102 or EM1130" +set_global_assignment -name PWRMGT_SLAVE_DEVICE0_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE1_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE2_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE3_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE4_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE5_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE6_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE7_ADDRESS 0000000 +set_global_assignment -name PWRMGT_VOLTAGE_OUTPUT_FORMAT "Auto discovery" +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_M 0 +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_B 0 +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_R 0 +set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto +set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto +set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto +set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto +set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto +set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto +set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On +set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off +set_global_assignment -name GENERATE_TTF_FILE Off +set_global_assignment -name GENERATE_RBF_FILE Off +set_global_assignment -name GENERATE_HEX_FILE Off +set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0 +set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal" +set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off +set_global_assignment -name AUTO_RESTART_CONFIGURATION On +set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off +set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off +set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone 10 LP" +set_global_assignment -name ENABLE_OCT_DONE On -family "MAX 10" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV E" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria 10" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Stratix V" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V GZ" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria II GX" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV GX" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone V" +set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT OFF +set_global_assignment -name ARRIAIIGX_RX_CDR_LOCKUP_FIX_OVERRIDE Off +set_global_assignment -name ENABLE_AUTONOMOUS_PCIE_HIP Off +set_global_assignment -name ENABLE_ADV_SEU_DETECTION Off +set_global_assignment -name POR_SCHEME "Instant ON" +set_global_assignment -name EN_USER_IO_WEAK_PULLUP On +set_global_assignment -name EN_SPI_IO_WEAK_PULLUP On +set_global_assignment -name POF_VERIFY_PROTECT Off +set_global_assignment -name ENABLE_SPI_MODE_CHECK Off +set_global_assignment -name FORCE_SSMCLK_TO_ISMCLK On +set_global_assignment -name FALLBACK_TO_EXTERNAL_FLASH Off +set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 0 +set_global_assignment -name GENERATE_PMSF_FILES On +set_global_assignment -name START_TIME 0ns +set_global_assignment -name SIMULATION_MODE TIMING +set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off +set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On +set_global_assignment -name SETUP_HOLD_DETECTION Off +set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off +set_global_assignment -name CHECK_OUTPUTS Off +set_global_assignment -name SIMULATION_COVERAGE On +set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On +set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On +set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On +set_global_assignment -name GLITCH_DETECTION Off +set_global_assignment -name GLITCH_INTERVAL 1ns +set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off +set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On +set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off +set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On +set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE +set_global_assignment -name SIMULATION_NETLIST_VIEWER Off +set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT +set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT +set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off +set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO +set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO +set_global_assignment -name DRC_TOP_FANOUT 50 +set_global_assignment -name DRC_FANOUT_EXCEEDING 30 +set_global_assignment -name DRC_GATED_CLOCK_FEED 30 +set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY +set_global_assignment -name ENABLE_DRC_SETTINGS Off +set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25 +set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10 +set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30 +set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2 +set_global_assignment -name MERGE_HEX_FILE Off +set_global_assignment -name GENERATE_SVF_FILE Off +set_global_assignment -name GENERATE_ISC_FILE Off +set_global_assignment -name GENERATE_JAM_FILE Off +set_global_assignment -name GENERATE_JBC_FILE Off +set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On +set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off +set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off +set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off +set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off +set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On +set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off +set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state" +set_global_assignment -name HPS_EARLY_IO_RELEASE Off +set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off +set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off +set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5% +set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5% +set_global_assignment -name POWER_USE_PVA On +set_global_assignment -name POWER_USE_INPUT_FILE "No File" +set_global_assignment -name POWER_USE_INPUT_FILES Off +set_global_assignment -name POWER_VCD_FILTER_GLITCHES On +set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off +set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off +set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL +set_global_assignment -name POWER_AUTO_COMPUTE_TJ On +set_global_assignment -name POWER_TJ_VALUE 25 +set_global_assignment -name POWER_USE_TA_VALUE 25 +set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off +set_global_assignment -name POWER_BOARD_TEMPERATURE 25 +set_global_assignment -name POWER_HPS_ENABLE Off +set_global_assignment -name POWER_HPS_PROC_FREQ 0.0 +set_global_assignment -name ENABLE_SMART_VOLTAGE_ID Off +set_global_assignment -name IGNORE_PARTITIONS Off +set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off +set_global_assignment -name RAPID_RECOMPILE_ASSIGNMENT_CHECKING On +set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End" +set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On +set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On +set_global_assignment -name RTLV_GROUP_RELATED_NODES On +set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off +set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off +set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On +set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On +set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On +set_global_assignment -name EQC_BBOX_MERGE On +set_global_assignment -name EQC_LVDS_MERGE On +set_global_assignment -name EQC_RAM_UNMERGING On +set_global_assignment -name EQC_DFF_SS_EMULATION On +set_global_assignment -name EQC_RAM_REGISTER_UNPACK On +set_global_assignment -name EQC_MAC_REGISTER_UNPACK On +set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On +set_global_assignment -name EQC_STRUCTURE_MATCHING On +set_global_assignment -name EQC_AUTO_BREAK_CONE On +set_global_assignment -name EQC_POWER_UP_COMPARE Off +set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On +set_global_assignment -name EQC_AUTO_INVERSION On +set_global_assignment -name EQC_AUTO_TERMINATE On +set_global_assignment -name EQC_SUB_CONE_REPORT Off +set_global_assignment -name EQC_RENAMING_RULES On +set_global_assignment -name EQC_PARAMETER_CHECK On +set_global_assignment -name EQC_AUTO_PORTSWAP On +set_global_assignment -name EQC_DETECT_DONT_CARES On +set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off +set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ? +set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ? +set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ? +set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ? +set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ? +set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ? +set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ? +set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ? +set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ? +set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ? +set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "" -section_id ? +set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ? +set_global_assignment -name EDA_ENABLE_IPUTF_MODE On -section_id ? +set_global_assignment -name EDA_NATIVELINK_PORTABLE_FILE_PATHS Off -section_id ? +set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ? +set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ? +set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ? +set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ? +set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ? +set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ? +set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ? +set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ? +set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ? +set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY OFF -section_id ? +set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST Off -section_id ? +set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ? +set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ? +set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ? +set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ? +set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ? +set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ? +set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ? +set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ? +set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ? +set_global_assignment -name EDA_IBIS_EXTENDED_MODEL_SELECTOR Off -section_id ? +set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ? +set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ? +set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ? +set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ? +set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ? +set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 4p2 -section_id ? +set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ? +set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ? +set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name PARTITION_PRESERVE_HIGH_SPEED_TILES On -section_id ? -entity ? +set_global_assignment -name PARTITION_IGNORE_SOURCE_FILE_CHANGES Off -section_id ? -entity ? +set_global_assignment -name PARTITION_ALWAYS_USE_QXP_NETLIST Off -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS UPDATE_CONFLICTING -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ? +set_global_assignment -name ALLOW_MULTIPLE_PERSONAS Off -section_id ? -entity ? +set_global_assignment -name PARTITION_ASD_REGION_ID 1 -section_id ? -entity ? +set_global_assignment -name CROSS_BOUNDARY_OPTIMIZATIONS Off -section_id ? -entity ? +set_global_assignment -name PROPAGATE_CONSTANTS_ON_INPUTS On -section_id ? -entity ? +set_global_assignment -name PROPAGATE_INVERSIONS_ON_INPUTS On -section_id ? -entity ? +set_global_assignment -name REMOVE_LOGIC_ON_UNCONNECTED_OUTPUTS On -section_id ? -entity ? +set_global_assignment -name MERGE_EQUIVALENT_INPUTS On -section_id ? -entity ? +set_global_assignment -name MERGE_EQUIVALENT_BIDIRS On -section_id ? -entity ? +set_global_assignment -name ABSORB_PATHS_FROM_OUTPUTS_TO_INPUTS On -section_id ? -entity ? +set_global_assignment -name PARTITION_ENABLE_STRICT_PRESERVATION Off -section_id ? -entity ? diff --git a/peripherals/adc/sint/de10_lite_description.txt b/peripherals/adc/sint/de10_lite_description.txt new file mode 100644 index 00000000..e69de29b diff --git a/peripherals/disp7seg/display_dec.vhd b/peripherals/disp7seg/display_dec.vhd new file mode 100644 index 00000000..97d7dce5 --- /dev/null +++ b/peripherals/disp7seg/display_dec.vhd @@ -0,0 +1,42 @@ +------------------------------------------------------------------- +-- Name : decoder.vhd +-- Author : Leonardo Persike Martins +------------------------------------------------------------------- + +-- Bibliotecas +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +------------------------------------- +entity display_dec is + port + ( + hex : in std_logic_vector(3 downto 0); + dot : in std_logic; + disp : out std_logic_vector(7 downto 0) + ); +end entity display_dec; +------------------------------ + +architecture behaviour of display_dec is + +begin + disp <= "11000000" when hex = x"0" else + "11111001" when hex = x"1" else + "10100100" when hex = x"2" else + "10110000" when hex = x"3" else + "10011001" when hex = x"4" else + "10010010" when hex = x"5" else + "10000010" when hex = x"6" else + "11111000" when hex = x"7" else + "10000000" when hex = x"8" else + "10010000" when hex = x"9" else + "10001000" when hex = x"A" else + "10000011" when hex = x"B" else + "10100111" when hex = x"C" else + "10100001" when hex = x"D" else + "10000110" when hex = x"E" else + "10001110"; -- x"F" + +end architecture behaviour; diff --git a/peripherals/sdram/README.md b/peripherals/sdram/README.md new file mode 100644 index 00000000..a56f618b --- /dev/null +++ b/peripherals/sdram/README.md @@ -0,0 +1,20 @@ +# Memória SDRAM + +Este é um controlador para a memória SDRAM IS42S16320D-7TL. + +[Datasheet da SDRAM](http://www.issi.com/WW/pdf/42-45R-S_86400D-16320D-32160D.pdf) + +## Como fazer funcionar + +Este diretório possui os seguintes arquivos: +* sdram_controller.vhd: Arquivo principal do controlador. +* testbench_sdram.vhd: Arquivo de testbench para o controlador. +* testbench_sdtam.do: Script para simulação no ModelSim. + +Além destes arquivos, o diretório possui uma pasta `sim/` com modelos comportamental de uma memória SDRAM. + +Para utilizar o controlador é apenas necessário adicionar o arquivo sdram_controller.vhd no projeto e instanciá-lo. + +## Problemas + +* Este controlador consegue ler e escrever na memória SDRAM porém o valor escrita fica na memória por apenas um pequeno período de tempo. \ No newline at end of file diff --git a/peripherals/sdram/de10_lite.vhd b/peripherals/sdram/de10_lite.vhd new file mode 100644 index 00000000..1ea08c8e --- /dev/null +++ b/peripherals/sdram/de10_lite.vhd @@ -0,0 +1,371 @@ +------------------------------------------------------------------- +-- Name : de0_lite.vhd +-- Author : +-- Version : 0.1 +-- Copyright : Departamento de Eletrônica, Florianópolis, IFSC +-- Description : Projeto base DE10-Lite +------------------------------------------------------------------- +LIBRARY ieee; +USE IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.all; + +use work.decoder_types.all; + +entity de10_lite is + generic( + --! Num of 32-bits memory words + IMEMORY_WORDS : integer := 1024; --!= 4K (1024 * 4) bytes + DMEMORY_WORDS : integer := 1024 --!= 2k (512 * 2) bytes + ); + + port( + ---------- CLOCK ---------- + ADC_CLK_10 : in std_logic; + MAX10_CLK1_50 : in std_logic; + MAX10_CLK2_50 : in std_logic; + ----------- SDRAM ------------ + DRAM_ADDR : out std_logic_vector(12 downto 0); + DRAM_BA : out std_logic_vector(1 downto 0); + DRAM_CAS_N : out std_logic; + DRAM_CKE : out std_logic; + DRAM_CLK : out std_logic; + DRAM_CS_N : out std_logic; + DRAM_DQ : inout std_logic_vector(15 downto 0); + DRAM_LDQM : out std_logic; + DRAM_RAS_N : out std_logic; + DRAM_UDQM : out std_logic; + DRAM_WE_N : out std_logic; + ----------- SEG7 ------------ + HEX0 : out std_logic_vector(7 downto 0); + HEX1 : out std_logic_vector(7 downto 0); + HEX2 : out std_logic_vector(7 downto 0); + HEX3 : out std_logic_vector(7 downto 0); + HEX4 : out std_logic_vector(7 downto 0); + HEX5 : out std_logic_vector(7 downto 0); + ----------- KEY ------------ + KEY : in std_logic_vector(1 downto 0); + ----------- LED ------------ + LEDR : out std_logic_vector(9 downto 0); + ----------- SW ------------ + SW : in std_logic_vector(9 downto 0); + ----------- VGA ------------ + VGA_B : out std_logic_vector(3 downto 0); + VGA_G : out std_logic_vector(3 downto 0); + VGA_HS : out std_logic; + VGA_R : out std_logic_vector(3 downto 0); + VGA_VS : out std_logic; + ----------- Accelerometer ------------ + GSENSOR_CS_N : out std_logic; + GSENSOR_INT : in std_logic_vector(2 downto 1); + GSENSOR_SCLK : out std_logic; + GSENSOR_SDI : inout std_logic; + GSENSOR_SDO : inout std_logic; + ----------- Arduino ------------ + ARDUINO_IO : inout std_logic_vector(15 downto 0); + ARDUINO_RESET_N : inout std_logic + ); +end entity; + +architecture rtl of de10_lite is + + signal clk : std_logic; + signal clk_sdram_ctrl : std_logic; + signal clk_sdram_chip : std_logic; + signal clk_vga : std_logic; + + signal rst : std_logic; + signal rst_n : std_logic; + + -- Instruction bus signals + signal idata : std_logic_vector(31 downto 0); + signal iaddress : integer range 0 to IMEMORY_WORDS - 1 := 0; + signal address : std_logic_vector(9 downto 0); + + -- Data bus signals + signal daddress : natural; + signal ddata_r : std_logic_vector(31 downto 0); + signal ddata_w : std_logic_vector(31 downto 0); + signal dmask : std_logic_vector(3 downto 0); + signal dcsel : std_logic_vector(1 downto 0); + signal d_we : std_logic := '0'; + + signal ddata_r_mem : std_logic_vector(31 downto 0); + signal d_rd : std_logic; + + signal dmemory_address : natural; + + -- I/O signals + signal input_in : std_logic_vector(31 downto 0); + + -- PLL signals + signal locked_sig : std_logic; + + -- CPU state signals + signal state : cpu_state_t; + + -- SDRAM signals + signal daddress_to_sdram : std_logic_vector(31 downto 0); + signal sdram_addr : std_logic_vector(31 downto 0); + signal chipselect_sdram : std_logic; + signal sdram_d_rd : std_logic; + signal sdram_read : std_logic_vector(15 DOWNTO 0); + signal sdram_read_32 : std_logic_vector(31 downto 0); + signal waitrequest : std_logic; + signal DRAM_DQM : std_logic_vector(1 downto 0); + signal burst : std_logic; + + -- VGA signals + signal vga_addr : std_logic_vector(31 downto 0); + signal disp_ena : std_logic; + signal n_blank : std_logic; + signal n_sync : std_logic; + signal column : integer; + signal row : integer; + signal vga_data_read : std_logic; + signal buffer_to_sdram_addr : std_logic_vector(31 downto 0); + signal VGA_RR : std_logic_vector(3 downto 0); + signal VGA_GG : std_logic_vector(3 downto 0); + signal VGA_BB : std_logic_vector(3 downto 0); + signal chipselect_core : std_logic; + +begin + + pll_inst : entity work.pll + port map( + areset => '0', + inclk0 => MAX10_CLK1_50, + c0 => clk, + c1 => clk_sdram_ctrl, + c2 => clk_vga, + c3 => clk_sdram_chip, + locked => locked_sig + ); + + rst <= SW(9); + rst_n <= SW(8); + + -- Dummy out signals + ARDUINO_IO <= ddata_r(31 downto 16); + LEDR(9) <= SW(9); + + -- IMem shoud be read from instruction and data buses + -- Not enough RAM ports for instruction bus, data bus and in-circuit programming + process(d_rd, dcsel, daddress, iaddress) + begin + if (d_rd = '1') and (dcsel = "00") then + address <= std_logic_vector(to_unsigned(daddress, 10)); + else + address <= std_logic_vector(to_unsigned(iaddress, 10)); + end if; + end process; + + -- 32-bits x 1024 words quartus RAM (dual port: portA -> riscV, portB -> In-System Mem Editor + iram_quartus_inst : entity work.iram_quartus + port map( + address => address(9 downto 0), + byteena => "1111", + clock => clk, + data => (others => '0'), + wren => '0', + q => idata + ); + + dmemory_address <= to_integer(to_unsigned(daddress, 10)); + -- Data Memory RAM + dmem : entity work.dmemory + generic map( + MEMORY_WORDS => DMEMORY_WORDS + ) + port map( + rst => rst, + clk => clk, + data => ddata_w, + address => dmemory_address, + we => d_we, + csel => dcsel(0), + dmask => dmask, + q => ddata_r_mem + ); + + -- Adress space mux ((check sections.ld) -> Data chip select: + -- 0x00000 -> Instruction memory + -- 0x20000 -> Data memory + -- 0x40000 -> Input/Output generic address space + -- 0x60000 -> SDRAM address space + with dcsel select ddata_r <= + idata when "00", + ddata_r_mem when "01", + input_in when "10", + sdram_read_32 when "11",(others => '0') when others; + + -- sdram output is 16 bits while data bus is 32 bits + sdram_read_32 <= x"0000" & sdram_read; + + -- Softcore instatiation + myRisc : entity work.core + generic map( + IMEMORY_WORDS => IMEMORY_WORDS, + DMEMORY_WORDS => DMEMORY_WORDS + ) + port map( + clk => clk, + rst => rst, + iaddress => iaddress, + idata => idata, + daddress => daddress, + ddata_r => ddata_r, + ddata_w => ddata_w, + d_we => d_we, + d_rd => d_rd, + dcsel => dcsel, + dmask => dmask, + state => state + ); + + -- Output register (Dummy LED blinky) + process(clk, rst) + begin + if rst = '1' then + LEDR(3 downto 0) <= (others => '0'); + HEX0 <= (others => '1'); + HEX1 <= (others => '1'); + HEX2 <= (others => '1'); + HEX3 <= (others => '1'); + HEX4 <= (others => '1'); + HEX5 <= (others => '1'); + else + if rising_edge(clk) then + if (d_we = '1') and (dcsel = "10") then + -- ToDo: Simplify compartors + -- ToDo: Maybe use byte addressing? + -- x"01" (word addressing) is x"04" (byte addressing) + if to_unsigned(daddress, 32)(8 downto 0) = x"01" then + LEDR(4 downto 0) <= ddata_w(4 downto 0); + elsif to_unsigned(daddress, 32)(8 downto 0) = x"02" then + HEX0 <= ddata_w(7 downto 0); + HEX1 <= ddata_w(15 downto 8); + HEX2 <= ddata_w(23 downto 16); + HEX3 <= ddata_w(31 downto 24); + -- HEX4 <= ddata_w(7 downto 0); + -- HEX5 <= ddata_w(7 downto 0); + end if; + end if; + end if; + end if; + end process; + + -- Input register + process(clk, rst) + begin + if rst = '1' then + input_in <= (others => '0'); + else + if rising_edge(clk) then + if (d_we = '1') and (dcsel = "10") then + input_in(4 downto 0) <= SW(4 downto 0); + end if; + end if; + end if; + end process; + + -- CORE, VGA and SDRAM muxes + with SW(7) select sdram_addr <= + daddress_to_sdram when '1', + buffer_to_sdram_addr when others; + + with SW(7) select sdram_d_rd <= + d_rd when '1', + vga_data_read when others; + + with SW(7) select chipselect_sdram <= + chipselect_core when '1', + vga_data_read when others; + + with SW(7) select burst <= + '0' when '1', + '1' when others; + + -- SDRAM instatiation + sdram_controller : entity work.sdram_controller + port map( + address => sdram_addr, + byteenable => "11", + chipselect => chipselect_sdram, + clk => clk_sdram_ctrl, + clken => '1', + reset => rst, + reset_req => rst, + write => d_we, + read => sdram_d_rd, + writedata => ddata_w, + burst => burst, + -- outputs: + readdata => sdram_read, + waitrequest => waitrequest, + DRAM_ADDR => DRAM_ADDR, + DRAM_BA => DRAM_BA, + DRAM_CAS_N => DRAM_CAS_N, + DRAM_CKE => DRAM_CKE, + DRAM_CLK => open, + DRAM_CS_N => DRAM_CS_N, + DRAM_DQ => DRAM_DQ, + DRAM_DQM => DRAM_DQM, + DRAM_RAS_N => DRAM_RAS_N, + DRAM_WE_N => DRAM_WE_N + ); + + DRAM_CLK <= clk_sdram_chip; + -- SDRAM Signals + daddress_to_sdram <= std_logic_vector(to_unsigned(daddress, 32)); + DRAM_UDQM <= DRAM_DQM(1); + DRAM_LDQM <= DRAM_DQM(0); + --chipselect_sdram <= dcsel(0) and dcsel(1); + chipselect_core <= dcsel(0) and dcsel(1); + +-- vga_controller : entity work.vga_controller +-- port map( +-- pixel_clk => clk_vga, +-- reset_n => rst_n, +-- h_sync => VGA_HS, +-- v_sync => VGA_VS, +-- disp_ena => disp_ena, +-- column => column, +-- row => row, +-- addr => vga_addr, +-- n_blank => n_blank, +-- n_sync => n_sync +-- ); +-- +-- vga_buffer : entity work.vga_buffer +-- port map( +-- clk => clk_sdram_ctrl, +-- rst => rst, +-- address_vga => vga_addr, +-- sdram_data => sdram_read, +-- sdram_address => buffer_to_sdram_addr, +-- sdram_r => vga_data_read, +-- VGA_R => VGA_RR, +-- VGA_G => VGA_GG, +-- VGA_B => VGA_BB +-- ); + + + PROCESS(disp_ena) + BEGIN + + IF(disp_ena = '1') THEN --display time + VGA_R <= VGA_RR; + VGA_G <= VGA_GG; + VGA_B <= VGA_BB; + ELSE --blanking time + VGA_R <= "0000"; + VGA_G <= "0000"; + VGA_B <= "0000"; + END IF; + + END PROCESS; + + +end; + + diff --git a/peripherals/sdram/pll/pll.ppf b/peripherals/sdram/pll/pll.ppf new file mode 100644 index 00000000..6447543c --- /dev/null +++ b/peripherals/sdram/pll/pll.ppf @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/peripherals/sdram/pll/pll.qip b/peripherals/sdram/pll/pll.qip new file mode 100644 index 00000000..4252c1cd --- /dev/null +++ b/peripherals/sdram/pll/pll.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "18.1" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{MAX 10}" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "pll.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] diff --git a/peripherals/sdram/pll/pll.vhd b/peripherals/sdram/pll/pll.vhd new file mode 100644 index 00000000..05f5714a --- /dev/null +++ b/peripherals/sdram/pll/pll.vhd @@ -0,0 +1,461 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: pll.vhd +-- Megafunction Name(s): +-- altpll +-- +-- Simulation Library Files(s): +-- +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 18.1.0 Build 625 09/12/2018 SJ Standard Edition +-- ************************************************************ + + +--Copyright (C) 2018 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from 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 Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel FPGA IP License Agreement, or other applicable license +--agreement, including, without limitation, that your use is for +--the sole purpose of programming logic devices manufactured by +--Intel and sold by Intel or its authorized distributors. Please +--refer to the applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY pll IS + PORT + ( + areset : IN STD_LOGIC := '0'; + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + c2 : OUT STD_LOGIC ; + c3 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +END pll; + + +ARCHITECTURE SYN OF pll IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC ; + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC ; + SIGNAL sub_wire6 : STD_LOGIC ; + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire8_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_divide_by : NATURAL; + clk0_duty_cycle : NATURAL; + clk0_multiply_by : NATURAL; + clk0_phase_shift : STRING; + clk1_divide_by : NATURAL; + clk1_duty_cycle : NATURAL; + clk1_multiply_by : NATURAL; + clk1_phase_shift : STRING; + clk2_divide_by : NATURAL; + clk2_duty_cycle : NATURAL; + clk2_multiply_by : NATURAL; + clk2_phase_shift : STRING; + clk3_divide_by : NATURAL; + clk3_duty_cycle : NATURAL; + clk3_multiply_by : NATURAL; + clk3_phase_shift : STRING; + compensate_clock : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + lpm_hint : STRING; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + port_activeclock : STRING; + port_areset : STRING; + port_clkbad0 : STRING; + port_clkbad1 : STRING; + port_clkloss : STRING; + port_clkswitch : STRING; + port_configupdate : STRING; + port_fbin : STRING; + port_inclk0 : STRING; + port_inclk1 : STRING; + port_locked : STRING; + port_pfdena : STRING; + port_phasecounterselect : STRING; + port_phasedone : STRING; + port_phasestep : STRING; + port_phaseupdown : STRING; + port_pllena : STRING; + port_scanaclr : STRING; + port_scanclk : STRING; + port_scanclkena : STRING; + port_scandata : STRING; + port_scandataout : STRING; + port_scandone : STRING; + port_scanread : STRING; + port_scanwrite : STRING; + port_clk0 : STRING; + port_clk1 : STRING; + port_clk2 : STRING; + port_clk3 : STRING; + port_clk4 : STRING; + port_clk5 : STRING; + port_clkena0 : STRING; + port_clkena1 : STRING; + port_clkena2 : STRING; + port_clkena3 : STRING; + port_clkena4 : STRING; + port_clkena5 : STRING; + port_extclk0 : STRING; + port_extclk1 : STRING; + port_extclk2 : STRING; + port_extclk3 : STRING; + self_reset_on_loss_lock : STRING; + width_clock : NATURAL + ); + PORT ( + areset : IN STD_LOGIC ; + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); + locked : OUT STD_LOGIC + ); + END COMPONENT; + +BEGIN + sub_wire8_bv(0 DOWNTO 0) <= "0"; + sub_wire8 <= To_stdlogicvector(sub_wire8_bv); + sub_wire4 <= sub_wire0(3); + sub_wire3 <= sub_wire0(2); + sub_wire2 <= sub_wire0(1); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + c1 <= sub_wire2; + c2 <= sub_wire3; + c3 <= sub_wire4; + locked <= sub_wire5; + sub_wire6 <= inclk0; + sub_wire7 <= sub_wire8(0 DOWNTO 0) & sub_wire6; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_divide_by => 50, + clk0_duty_cycle => 50, + clk0_multiply_by => 1, + clk0_phase_shift => "0", + clk1_divide_by => 2, + clk1_duty_cycle => 50, + clk1_multiply_by => 5, + clk1_phase_shift => "0", + clk2_divide_by => 5, + clk2_duty_cycle => 50, + clk2_multiply_by => 4, + clk2_phase_shift => "0", + clk3_divide_by => 2, + clk3_duty_cycle => 50, + clk3_multiply_by => 5, + clk3_phase_shift => "3000", + compensate_clock => "CLK0", + inclk0_input_frequency => 20000, + intended_device_family => "MAX 10", + lpm_hint => "CBX_MODULE_PREFIX=pll", + lpm_type => "altpll", + operation_mode => "NORMAL", + pll_type => "AUTO", + port_activeclock => "PORT_UNUSED", + port_areset => "PORT_USED", + port_clkbad0 => "PORT_UNUSED", + port_clkbad1 => "PORT_UNUSED", + port_clkloss => "PORT_UNUSED", + port_clkswitch => "PORT_UNUSED", + port_configupdate => "PORT_UNUSED", + port_fbin => "PORT_UNUSED", + port_inclk0 => "PORT_USED", + port_inclk1 => "PORT_UNUSED", + port_locked => "PORT_USED", + port_pfdena => "PORT_UNUSED", + port_phasecounterselect => "PORT_UNUSED", + port_phasedone => "PORT_UNUSED", + port_phasestep => "PORT_UNUSED", + port_phaseupdown => "PORT_UNUSED", + port_pllena => "PORT_UNUSED", + port_scanaclr => "PORT_UNUSED", + port_scanclk => "PORT_UNUSED", + port_scanclkena => "PORT_UNUSED", + port_scandata => "PORT_UNUSED", + port_scandataout => "PORT_UNUSED", + port_scandone => "PORT_UNUSED", + port_scanread => "PORT_UNUSED", + port_scanwrite => "PORT_UNUSED", + port_clk0 => "PORT_USED", + port_clk1 => "PORT_USED", + port_clk2 => "PORT_USED", + port_clk3 => "PORT_USED", + port_clk4 => "PORT_UNUSED", + port_clk5 => "PORT_UNUSED", + port_clkena0 => "PORT_UNUSED", + port_clkena1 => "PORT_UNUSED", + port_clkena2 => "PORT_UNUSED", + port_clkena3 => "PORT_UNUSED", + port_clkena4 => "PORT_UNUSED", + port_clkena5 => "PORT_UNUSED", + port_extclk0 => "PORT_UNUSED", + port_extclk1 => "PORT_UNUSED", + port_extclk2 => "PORT_UNUSED", + port_extclk3 => "PORT_UNUSED", + self_reset_on_loss_lock => "OFF", + width_clock => 5 + ) + PORT MAP ( + areset => areset, + inclk => sub_wire7, + clk => sub_wire0, + locked => sub_wire5 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR3 NUMERIC "1" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE3 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "1.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "125.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "40.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE3 STRING "125.000000" +-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "50.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "MAX 10" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "ps" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT3 STRING "ps" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK3 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "1" +-- Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "1" +-- Retrieval info: PRIVATE: MULT_FACTOR3 NUMERIC "1" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "1.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "125.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "40.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ3 STRING "125.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE3 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT3 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT3 STRING "3.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "ps" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "ps" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT3 STRING "ns" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll.mif" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK3 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK4 STRING "0" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK1 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK2 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK3 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA3 STRING "0" +-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "1" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "2" +-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "5" +-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "5" +-- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "4" +-- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK3_DIVIDE_BY NUMERIC "2" +-- Retrieval info: CONSTANT: CLK3_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK3_MULTIPLY_BY NUMERIC "5" +-- Retrieval info: CONSTANT: CLK3_PHASE_SHIFT STRING "3000" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "20000" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "MAX 10" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "OFF" +-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +-- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +-- Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" +-- Retrieval info: USED_PORT: c3 0 0 0 0 OUTPUT_CLK_EXT VCC "c3" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +-- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" +-- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +-- Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 +-- Retrieval info: CONNECT: c3 0 0 0 0 @clk 0 0 1 3 +-- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.vhd FALSE +-- Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/peripherals/sdram/sdram_controller.vhd b/peripherals/sdram/sdram_controller.vhd new file mode 100644 index 00000000..87acc3f2 --- /dev/null +++ b/peripherals/sdram/sdram_controller.vhd @@ -0,0 +1,480 @@ +-------------------------------------------------------------------------------- +-- VLIW-RT CPU - SDRAM controller top entity +-------------------------------------------------------------------------------- +-- +-- Copyright (c) 2016, Renan Augusto Starke +-- +-- Departamento de Automação e Sistemas - DAS (Automation and Systems Department) +-- Universidade Federal de Santa Catarina - UFSC (Federal University of Santa Catarina) +-- Florianópolis, Brasil (Brazil) +-- +-- This file is part of VLIW-RT CPU. + +-- VLIW-RT CPU is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. + +-- VLIW-RT CPU is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. + +-- You should have received a copy of the GNU General Public License +-- along with VLIW-RT CPU. If not, see . +-- +-- This file uses Altera libraries subjected to Altera licenses +-- See altera-ip folder for more information + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity sdram_controller is + + -- Altera SDRAM controller configuration + generic( + ASIZE : integer := 25; + DSIZE : integer := 32; + ROWSIZE : integer := 13; + COLSIZE : integer := 10; + BANKSIZE : integer := 2; + ROWSTART : integer := 10; + COLSTART : integer := 0; + BANKSTART : integer := 23; + -- SDRAM latencies + DATA_AVAL : integer := 2; -- cycles + RESET_NOP : integer := 4; -- cycles + RAS_TO_CAS : integer := 2; -- cycles + PRE_TO_ACT : integer := 3; -- cycles + tRP : integer := 2; -- cycles + tRC : integer := 10 -- cycles + ); + + port( + -- inputs: + address : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + byteenable : IN STD_LOGIC_VECTOR(1 DOWNTO 0); + chipselect : IN STD_LOGIC; + clk : IN STD_LOGIC; + clken : IN STD_LOGIC; + reset : IN STD_LOGIC; + reset_req : IN STD_LOGIC; + write : IN STD_LOGIC; + read : in std_logic; + writedata : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + burst : in std_logic; + -- outputs: + readdata : OUT STD_LOGIC_VECTOR(15 DOWNTO 0); + waitrequest : out std_logic; + DRAM_ADDR : out std_logic_vector(12 downto 0); + DRAM_BA : out std_logic_vector(1 downto 0); + DRAM_CAS_N : out std_logic; + DRAM_CKE : out std_logic; + DRAM_CLK : out std_logic; + DRAM_CS_N : out std_logic; + DRAM_DQ : inout std_logic_vector(15 downto 0); + DRAM_DQM : out std_logic_vector(1 downto 0); + DRAM_RAS_N : out std_logic; + DRAM_WE_N : out std_logic + ); +end entity sdram_controller; + +architecture rtl of sdram_controller is + + type mem_state_type is (CONFIG, C_PRE, C_PRE_NOP, C_INIT_AUTO_REFRESH1, C_INIT_AUTO_REFRESH2, C_LD, C_LD_BURST, C_AUTO_REFRESH, IDLE, WRITE_ROW, WRITE_COL, DATA_REG, DONE); + signal mem_state : mem_state_type; + signal nop_nxt_state : mem_state_type; + + signal d_read : std_logic; + signal d_write : std_logic; + + constant WORD_SIZE : integer := 32; + subtype word_t is std_logic_vector(WORD_SIZE - 1 downto 0); + signal mem_data : word_t; + + signal byteenable_reg : STD_LOGIC_VECTOR(1 DOWNTO 0); + + signal in_reg_en : std_logic; + + signal chip_en_reg : std_logic; + + -- sdram controller signal + signal reset_n : std_logic; + signal addr : std_logic_vector(ASIZE - 1 downto 0); + signal cmd : std_logic_vector(2 downto 0); + signal cmdack : std_logic; + signal datain : std_logic_vector(DSIZE - 1 downto 0); + signal dataout : std_logic_vector(DSIZE - 1 downto 0); + signal dm : std_logic_vector(DSIZE / 8 - 1 downto 0); + signal cs_n : std_logic_vector(1 downto 0); + + signal dram_addr_int : std_logic_vector(11 downto 0); + + signal cas_to_ras : std_logic_vector(3 downto 0); + + -- + signal row_addr : std_logic_vector(ROWSIZE - 1 downto 0); + signal col_addr : std_logic_vector(COLSIZE - 1 downto 0); + signal bank_addr : std_logic_vector(BANKSIZE - 1 downto 0); + + -- + signal wait_cycles : std_logic_vector(3 downto 0); + signal chipselect_last_value : std_logic; + signal read_last_value : std_logic; + signal write_last_value : std_logic; + signal burst_last_value : std_logic; + +begin + + reset_n <= not reset; + DRAM_CLK <= clk; + + -- DRAM_CS_N <= cs_n(0); + + -- DRAM_ADDR <= '0' & dram_addr_int; + + -- FS_ADDR <= address(21 downto 2); + + do_clk_mem_acc_state : process(clk, reset, cmdack) + variable refresh_counter : natural; + variable init_refresh_counter : natural; + begin + if reset = '1' then + mem_state <= CONFIG; + wait_cycles <= std_logic_vector(to_unsigned(RESET_NOP, wait_cycles'length)); + else + if rising_edge(clk) then + case mem_state is + when CONFIG => + if reset = '0' then + + -- wait RESET_NOP cycles until first precharge + wait_cycles <= wait_cycles - 1; + + if wait_cycles = 0 then + init_refresh_counter := 0; + mem_state <= C_PRE; + nop_nxt_state <= C_LD; + wait_cycles <= std_logic_vector(to_unsigned(PRE_TO_ACT - 1, wait_cycles'length)); + end if; + else + wait_cycles <= "0000"; + end if; + + when C_PRE => + mem_state <= C_PRE_NOP; + + when C_PRE_NOP => + wait_cycles <= wait_cycles - 1; + + if wait_cycles = 0 then + mem_state <= nop_nxt_state; + end if; + + when C_INIT_AUTO_REFRESH1 => + wait_cycles <= std_logic_vector(to_unsigned(tRC, wait_cycles'length)); + mem_state <= C_PRE_NOP; + nop_nxt_state <= C_INIT_AUTO_REFRESH2; + + when C_INIT_AUTO_REFRESH2 => + wait_cycles <= std_logic_vector(to_unsigned(tRC, wait_cycles'length)); + mem_state <= C_PRE_NOP; + nop_nxt_state <= IDLE; + + when C_LD => + wait_cycles <= std_logic_vector(to_unsigned(PRE_TO_ACT, wait_cycles'length)); + mem_state <= C_PRE_NOP; + nop_nxt_state <= C_AUTO_REFRESH; + + when C_LD_BURST => + wait_cycles <= std_logic_vector(to_unsigned(PRE_TO_ACT, wait_cycles'length)); + mem_state <= C_PRE_NOP; + nop_nxt_state <= C_AUTO_REFRESH; + + when C_AUTO_REFRESH => + wait_cycles <= std_logic_vector(to_unsigned(tRC, wait_cycles'length)); + mem_state <= C_PRE_NOP; + nop_nxt_state <= IDLE; + + when IDLE => + if refresh_counter = 10 then + refresh_counter := 0; + mem_state <= C_AUTO_REFRESH; + elsif burst = '1' and burst_last_value = '0' then + refresh_counter := 0; + mem_state <= C_LD_BURST; + elsif burst = '0' and burst_last_value = '1' then + refresh_counter := 0; + mem_state <= C_LD; + elsif chipselect = '1' and (read = '1' and read_last_value = '0') then + refresh_counter := 0; + read_last_value <= '1'; + mem_state <= WRITE_ROW; + elsif chipselect = '1' and (write = '1' and write_last_value = '0') then + refresh_counter := 0; + write_last_value <= '1'; + mem_state <= WRITE_ROW; + end if; + + if read = '0' then + read_last_value <= '0'; + end if; + if write = '0' then + write_last_value <= '0'; + end if; + if burst /= burst_last_value then + burst_last_value <= burst; + end if; + + refresh_counter := refresh_counter + 1; + + when WRITE_ROW => + wait_cycles <= std_logic_vector(to_unsigned(RAS_TO_CAS - 2, wait_cycles'length)); + mem_state <= C_PRE_NOP; + nop_nxt_state <= WRITE_COL; + + when WRITE_COL => + if read = '1' then + wait_cycles <= std_logic_vector(to_unsigned(DATA_AVAL - 2, wait_cycles'length)); + mem_state <= C_PRE_NOP; + nop_nxt_state <= DATA_REG; + else + mem_state <= DONE; + end if; + + when DATA_REG => + mem_state <= DONE; + + when DONE => + mem_state <= IDLE; + + end case; + end if; + end if; + end process; + + row_addr <= address(ROWSTART + ROWSIZE - 1 downto ROWSTART); -- (10 + (13 - 1) downto 9) -> (22 downto 10) -- assignment of the row address bits from address + col_addr <= address(COLSTART + COLSIZE - 1 downto COLSTART); -- (0 + (9 - 1) downto 0) -> (9 downto 0) -- assignment of the column address bits + bank_addr <= address(BANKSTART + BANKSIZE - 1 downto BANKSTART); -- (23 + (2 - 1) downto 23) -> (24 downto 23) -- assignment of the bank address bits + + do_clk_mem_acc_state_output : process(mem_state, reset, chipselect, write, byteenable, address, chip_en_reg, byteenable_reg, bank_addr, row_addr, col_addr) + begin + in_reg_en <= '0'; + waitrequest <= '0'; + d_read <= '0'; + d_write <= '0'; + + -- altera sdram controller + addr <= (others => '0'); + cmd <= (others => '0'); + + -- internal sdram controller + DRAM_ADDR <= (others => '0'); + + DRAM_BA <= "00"; + DRAM_CS_N <= '0'; + DRAM_CKE <= '1'; + DRAM_RAS_N <= '1'; + DRAM_CAS_N <= '1'; + DRAM_WE_N <= '1'; + + DRAM_DQM <= "00"; + + case mem_state is + + when CONFIG => + if reset = '0' then + waitrequest <= '1'; + addr <= (others => '0'); + DRAM_CS_N <= '0'; + else + DRAM_CKE <= '0'; + end if; + + when C_PRE => + waitrequest <= '1'; + + -- precharge all banks + DRAM_CS_N <= '0'; + DRAM_RAS_N <= '0'; + DRAM_CAS_N <= '1'; + DRAM_WE_N <= '0'; + -- all banks code + DRAM_ADDR(10) <= '1'; + + when C_PRE_NOP => + waitrequest <= '1'; + DRAM_CS_N <= '0'; + + when C_LD => + waitrequest <= '1'; + + -- burst length: 1 word + DRAM_ADDR(2 downto 0) <= "000"; + -- burst type: sequential + DRAM_ADDR(3) <= '0'; + -- cas latency: 2 + DRAM_ADDR(6 downto 4) <= "010"; + -- Op mode: standard operation + DRAM_ADDR(8 downto 7) <= "00"; + -- Write burst mode: single location + DRAM_ADDR(9) <= '1'; + -- reserved + DRAM_ADDR(12 downto 10) <= "001"; + + -- commands + DRAM_BA <= "00"; + DRAM_CS_N <= '0'; + DRAM_RAS_N <= '0'; + DRAM_CAS_N <= '0'; + DRAM_WE_N <= '0'; + + when C_LD_BURST => + waitrequest <= '1'; + + -- burst length: 8 words + DRAM_ADDR(2 downto 0) <= "011"; + -- burst type: sequential + DRAM_ADDR(3) <= '0'; + -- cas latency: 2 + DRAM_ADDR(6 downto 4) <= "010"; + -- Op mode: standard operation + DRAM_ADDR(8 downto 7) <= "00"; + -- Write burst mode: single location + DRAM_ADDR(9) <= '1'; + -- reserved + DRAM_ADDR(12 downto 10) <= "001"; + + -- commands + DRAM_BA <= "00"; + DRAM_CS_N <= '0'; + DRAM_RAS_N <= '0'; + DRAM_CAS_N <= '0'; + DRAM_WE_N <= '0'; + + when C_INIT_AUTO_REFRESH1 => + + -- commands + DRAM_BA <= "00"; + DRAM_CS_N <= '0'; + DRAM_RAS_N <= '0'; + DRAM_CAS_N <= '0'; + DRAM_WE_N <= '1'; + + when C_INIT_AUTO_REFRESH2 => + + -- commands + DRAM_BA <= "00"; + DRAM_CS_N <= '0'; + DRAM_RAS_N <= '0'; + DRAM_CAS_N <= '0'; + DRAM_WE_N <= '1'; + + when C_AUTO_REFRESH => + + -- commands + DRAM_BA <= "00"; + DRAM_CS_N <= '0'; + DRAM_RAS_N <= '0'; + DRAM_CAS_N <= '0'; + DRAM_WE_N <= '1'; + + DRAM_ADDR(10) <= '1'; + + when IDLE => + waitrequest <= chipselect; + + when WRITE_ROW => + waitrequest <= '1'; + + DRAM_BA <= bank_addr; + DRAM_CS_N <= '0'; + DRAM_RAS_N <= '0'; + DRAM_CAS_N <= '1'; + DRAM_WE_N <= '1'; + + DRAM_ADDR <= row_addr; + + when WRITE_COL => + waitrequest <= '1'; + + if write = '1' then + DRAM_DQM <= not byteenable; + d_write <= '1'; + DRAM_WE_N <= '0'; + end if; + + DRAM_BA <= bank_addr; + DRAM_CS_N <= '0'; + DRAM_RAS_N <= '1'; + DRAM_CAS_N <= '0'; + + DRAM_ADDR(COLSIZE - 1 downto 0) <= col_addr; + -- enable auto precharge + DRAM_ADDR(10) <= '1'; + + when DATA_REG => + waitrequest <= '1'; + d_read <= '1'; + + when DONE => + + end case; + end process; + + process(clk, reset, d_read, byteenable, DRAM_DQ) + variable counter : natural := 0; + variable read : std_logic := '0'; + begin + if reset = '1' then + readdata <= (others => '0'); + else + if rising_edge(clk) then + + if d_read = '1' and burst = '1' then + counter := 8; + elsif d_read = '1' then + counter := 1; + end if; + + if counter > 0 then + case byteenable is + + when "00" => + + when "01" => + readdata <= x"00" & DRAM_DQ(7 downto 0); + + when "10" => + readdata <= x"00" & DRAM_DQ(15 downto 8); + + when "11" => + readdata <= DRAM_DQ; + + when others => + end case; + counter := counter - 1; + end if; + + end if; + end if; + end process; + + DRAM_DQ <= (DRAM_DQ'range => 'Z') WHEN (d_write = '0') ELSE writedata(15 downto 0); + + process(clk, reset, byteenable, in_reg_en) + begin + if reset = '1' then + byteenable_reg <= "11"; + else + if rising_edge(clk) and in_reg_en = '1' then + byteenable_reg <= not byteenable; + chip_en_reg <= address(26); + end if; + end if; + end process; + +end rtl; diff --git a/peripherals/sdram/sim/mt48lc8m16a2.vhd b/peripherals/sdram/sim/mt48lc8m16a2.vhd new file mode 100644 index 00000000..053bf031 --- /dev/null +++ b/peripherals/sdram/sim/mt48lc8m16a2.vhd @@ -0,0 +1,1120 @@ +----------------------------------------------------------------------------------------- +-- +-- File Name: MT48LC8M16A2.VHD +-- Version: 0.0c +-- Date: April 8th, 1999 +-- Model: Behavioral +-- Simulator: Model Technology VLOG (PC version 4.7i) +-- +-- Dependencies: None +-- +-- Author: Son P. Huynh +-- Email: sphuynh@micron.com +-- Phone: (208) 368-3825 +-- Company: Micron Technology, Inc. +-- Part Number: MT48LC8M16A2 (2Mb x 16 x 4 Banks) +-- +-- Description: Micron 64Mb SDRAM +-- +-- Limitation: - Doesn't check for 4096-cycle refresh +-- +-- Note: - Set simulator resolution to "ps" accuracy +-- +-- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY +-- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY +-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR +-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT. +-- +-- Copyright (c) 1998 Micron Semiconductor Products, Inc. +-- All rights researved +-- +-- Rev Author Phone Date Changes +-- ---- ---------------------------- ---------- ------------------------------------- +-- 0.0c Son P. Huynh 208-368-3825 04/08/1999 Fix tWR + tRP in Write with AP +-- Micron Technology Inc. Fix tRC check in Load Mode Register +-- +-- 0.0b Son P. Huynh 208-368-3825 01/06/1998 Derive from 64Mb SDRAM model +-- Micron Technology Inc. +-- +----------------------------------------------------------------------------------------- + +LIBRARY IEEE; +USE IEEE.std_logic_1164.ALL; +USE WORK.mti_pkg.ALL; + +ENTITY mt48lc8m16a2 IS + GENERIC ( + tAC : TIME := 5.0 ns; -- Timing parameter for -8E device + tAH : TIME := 1.0 ns; + tAS : TIME := 2.0 ns; + tCH : TIME := 3.0 ns; + tCL : TIME := 3.0 ns; + --tCK : TIME := 7.5 ns; -- 133mhz operation + tCK : TIME := 10.0 ns; -- 100mhz operation + tDH : TIME := 1.0 ns; + tDS : TIME := 2.0 ns; + tCKH : TIME := 1.0 ns; + tCKS : TIME := 2.0 ns; + tCMH : TIME := 1.0 ns; + tCMS : TIME := 2.0 ns; + tHZ : TIME := 6.0 ns; + tOH : TIME := 3.0 ns; + tMRD : INTEGER := 2; + tRAS : TIME := 50.0 ns; + tRC : TIME := 80.0 ns; + tRCD : TIME := 20.0 ns; + tRP : TIME := 20.0 ns; + tRRD : TIME := 20.0 ns; + tWR : INTEGER := 2; + addr_bits : INTEGER := 12; + data_bits : INTEGER := 16; + col_bits : INTEGER := 9 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + Ba : IN STD_LOGIC_VECTOR := "00"; + Clk : IN STD_LOGIC := '0'; + Cke : IN STD_LOGIC := '0'; + Cs_n : IN STD_LOGIC := '1'; + Ras_n : IN STD_LOGIC := '0'; + Cas_n : IN STD_LOGIC := '0'; + We_n : IN STD_LOGIC := '0'; + Dqm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) := "00" + ); +END mt48lc8m16a2; + +ARCHITECTURE behave OF mt48lc8m16a2 IS + TYPE State IS (ACT, A_REF, BST, LMR, NOP, PRECH, READ, READ_A, WRITE, WRITE_A); + TYPE Array4xI IS ARRAY (3 DOWNTO 0) OF INTEGER; + TYPE Array4xB IS ARRAY (3 DOWNTO 0) OF BIT; + TYPE Array4x2BV IS ARRAY (3 DOWNTO 0) OF BIT_VECTOR (1 DOWNTO 0); + TYPE Array4xCBV IS ARRAY (4 DOWNTO 0) OF BIT_VECTOR (Col_bits - 1 DOWNTO 0); + TYPE Array_state IS ARRAY (4 DOWNTO 0) OF State; + SIGNAL Operation : State := NOP; + SIGNAL Mode_reg : BIT_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + SIGNAL Active_enable, Aref_enable, Burst_term : BIT := '0'; + SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : BIT := '0'; + SIGNAL Burst_length_1, Burst_length_2, Burst_length_4, Burst_length_8 : BIT := '0'; + SIGNAL Cas_latency_2, Cas_latency_3 : BIT := '0'; + SIGNAL Ras_in, Cas_in, We_in : BIT := '0'; + SIGNAL Write_burst_mode : BIT := '0'; + SIGNAL Sys_clk, CkeZ : BIT := '0'; + + -- Checking internal wires + SIGNAL Pre_chk : BIT_VECTOR (3 DOWNTO 0) := "0000"; + SIGNAL Act_chk : BIT_VECTOR (3 DOWNTO 0) := "0000"; + SIGNAL Dq_in_chk, Dq_out_chk : BIT := '0'; + SIGNAL Bank_chk : BIT_VECTOR (1 DOWNTO 0) := "00"; + SIGNAL Row_chk : BIT_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + SIGNAL Col_chk : BIT_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0'); + + BEGIN + -- CS# Decode + WITH Cs_n SELECT + Cas_in <= TO_BIT (Cas_n, '1') WHEN '0', + '1' WHEN '1', + '1' WHEN OTHERS; + WITH Cs_n SELECT + Ras_in <= TO_BIT (Ras_n, '1') WHEN '0', + '1' WHEN '1', + '1' WHEN OTHERS; + WITH Cs_n SELECT + We_in <= TO_BIT (We_n, '1') WHEN '0', + '1' WHEN '1', + '1' WHEN OTHERS; + + -- Commands Decode + Active_enable <= NOT(Ras_in) AND Cas_in AND We_in; + Aref_enable <= NOT(Ras_in) AND NOT(Cas_in) AND We_in; + Burst_term <= Ras_in AND Cas_in AND NOT(We_in); + Mode_reg_enable <= NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in); + Prech_enable <= NOT(Ras_in) AND Cas_in AND NOT(We_in); + Read_enable <= Ras_in AND NOT(Cas_in) AND We_in; + Write_enable <= Ras_in AND NOT(Cas_in) AND NOT(We_in); + + -- Burst Length Decode + Burst_length_1 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND NOT(Mode_reg(0)); + Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0); + Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0)); + Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + + -- CAS Latency Decode + Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4); + + -- Write Burst Mode + Write_burst_mode <= Mode_reg(9); + + -- System Clock + int_clk : PROCESS (Clk) + begin + IF Clk'LAST_VALUE = '0' AND Clk = '1' THEN + CkeZ <= TO_BIT(Cke, '1'); + END IF; + Sys_clk <= CkeZ AND TO_BIT(Clk, '0'); + END PROCESS; + + state_register : PROCESS + TYPE ram_type IS ARRAY (2**col_bits - 1 DOWNTO 0) OF BIT_VECTOR (data_bits - 1 DOWNTO 0); + TYPE ram_pntr IS ACCESS ram_type; + TYPE ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF ram_pntr; + VARIABLE Bank0 : ram_stor; + VARIABLE Bank1 : ram_stor; + VARIABLE Bank2 : ram_stor; + VARIABLE Bank3 : ram_stor; + VARIABLE Row_index, Col_index : INTEGER := 0; + VARIABLE Dq_temp : BIT_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => '0'); + + VARIABLE Col_addr : Array4xCBV; + VARIABLE Bank_addr : Array4x2BV; + VARIABLE Dqm_reg0, Dqm_reg1 : BIT_VECTOR (1 DOWNTO 0) := "00"; + + VARIABLE Bank, Previous_bank : BIT_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE B0_row_addr, B1_row_addr, B2_row_addr, B3_row_addr : BIT_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Col_brst : BIT_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Row : BIT_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Col : BIT_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0'); + VARIABLE Burst_counter : INTEGER := 0; + + VARIABLE Command : Array_state; + VARIABLE Bank_precharge : Array4x2BV; + VARIABLE A10_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE Auto_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE Read_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE Write_precharge : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE Count_precharge : Array4xI := (0 & 0 & 0 & 0); + VARIABLE RW_interrupt_write : Array4xB := ('0' & '0' & '0' & '0'); + VARIABLE RW_interrupt_read : Array4xB := ('0' & '0' & '0' & '0'); + + VARIABLE Data_in_enable, Data_out_enable : BIT := '0'; + VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : BIT := '0'; + VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : BIT := '0'; + + -- Timing Check + VARIABLE MRD_chk : INTEGER := 0; + VARIABLE RC_chk, RRD_chk : TIME := 0 ns; + VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns; + VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns; + VARIABLE RP_chk, RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns; + VARIABLE WR_chk : Array4xI := (0 & 0 & 0 & 0); + + -- Initialize empty rows + PROCEDURE Init_mem (Bank : BIT_VECTOR (1 DOWNTO 0); Row_index : INTEGER) IS + VARIABLE i, j : INTEGER := 0; + BEGIN + IF Bank = "00" THEN + IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty + Bank0 (Row_index) := NEW ram_type; -- Open new row for access + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank0 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "01" THEN + IF Bank1 (Row_index) = NULL THEN + Bank1 (Row_index) := NEW ram_type; + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank1 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "10" THEN + IF Bank2 (Row_index) = NULL THEN + Bank2 (Row_index) := NEW ram_type; + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank2 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "11" THEN + IF Bank3 (Row_index) = NULL THEN + Bank3 (Row_index) := NEW ram_type; + FOR i IN (2**col_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank3 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + END IF; + END; + + -- Burst Counter + PROCEDURE Burst_decode IS + VARIABLE Col_int : INTEGER := 0; + VARIABLE Col_vec, Col_temp : BIT_VECTOR (col_bits - 1 DOWNTO 0) := (OTHERS => '0'); + BEGIN + -- Advance Burst Counter + Burst_counter := Burst_counter + 1; + + -- Burst Type + IF Mode_reg (3) = '0' THEN + Col_int := TO_INTEGER(Col); + Col_int := Col_int + 1; + TO_BITVECTOR (Col_int, Col_temp); + ELSIF Mode_reg (3) = '1' THEN + TO_BITVECTOR (Burst_counter, Col_vec); + Col_temp (2) := Col_vec (2) XOR Col_brst (2); + Col_temp (1) := Col_vec (1) XOR Col_brst (1); + Col_temp (0) := Col_vec (0) XOR Col_brst (0); + END IF; + + -- Burst Length + IF Burst_length_2 = '1' THEN + Col (0) := Col_temp (0); + ELSIF Burst_length_4 = '1' THEN + Col (1 DOWNTO 0) := Col_temp (1 DOWNTO 0); + ELSIF Burst_length_8 = '1' THEN + Col (2 DOWNTO 0) := Col_temp (2 DOWNTO 0); + ELSE + Col := Col_temp; + END IF; + + -- Burst Read Single Write + IF Write_burst_mode = '1' AND Data_in_enable = '1' THEN + Data_in_enable := '0'; + END IF; + + -- Data counter + IF Burst_length_1 = '1' THEN + IF Burst_counter >= 1 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_2 = '1' THEN + IF Burst_counter >= 2 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_4 = '1' THEN + IF Burst_counter >= 4 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_8 = '1' THEN + IF Burst_counter >= 8 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + END IF; + END; + + BEGIN + WAIT ON Sys_clk; + IF Sys_clk = '1' THEN + -- Internal Command Pipeline + Command(0) := Command(1); + Command(1) := Command(2); + Command(2) := Command(3); + Command(3) := NOP; + + Col_addr(0) := Col_addr(1); + Col_addr(1) := Col_addr(2); + Col_addr(2) := Col_addr(3); + Col_addr(3) := (OTHERS => '0'); + + Bank_addr(0) := Bank_addr(1); + Bank_addr(1) := Bank_addr(2); + Bank_addr(2) := Bank_addr(3); + Bank_addr(3) := "00"; + + Bank_precharge(0) := Bank_precharge(1); + Bank_precharge(1) := Bank_precharge(2); + Bank_precharge(2) := Bank_precharge(3); + Bank_precharge(3) := "00"; + + A10_precharge(0) := A10_precharge(1); + A10_precharge(1) := A10_precharge(2); + A10_precharge(2) := A10_precharge(3); + A10_precharge(3) := '0'; + + -- Operation Decode (Optional for showing current command on posedge clock / debug feature) + IF Active_enable = '1' THEN + Operation <= ACT; + ELSIF Aref_enable = '1' THEN + Operation <= A_REF; + ELSIF Burst_term = '1' THEN + Operation <= BST; + ELSIF Mode_reg_enable = '1' THEN + Operation <= LMR; + ELSIF Prech_enable = '1' THEN + Operation <= PRECH; + ELSIF Read_enable = '1' THEN + IF Addr(10) = '0' THEN + Operation <= READ; + ELSE + Operation <= READ_A; + END IF; + ELSIF Write_enable = '1' THEN + IF Addr(10) = '0' THEN + Operation <= WRITE; + ELSE + Operation <= WRITE_A; + END IF; + ELSE + Operation <= NOP; + END IF; + + -- Dqm pipeline for Read + Dqm_reg0 := Dqm_reg1; + Dqm_reg1 := TO_BITVECTOR(Dqm); + + -- Read or Write with Auto Precharge Counter + IF Auto_precharge (0) = '1' THEN + Count_precharge (0) := Count_precharge (0) + 1; + END IF; + IF Auto_precharge (1) = '1' THEN + Count_precharge (1) := Count_precharge (1) + 1; + END IF; + IF Auto_precharge (2) = '1' THEN + Count_precharge (2) := Count_precharge (2) + 1; + END IF; + IF Auto_precharge (3) = '1' THEN + Count_precharge (3) := Count_precharge (3) + 1; + END IF; + + -- tMRD Counter + MRD_chk := MRD_chk + 1; + + -- tWR Counter + WR_chk(0) := WR_chk(0) + 1; + WR_chk(1) := WR_chk(1) + 1; + WR_chk(2) := WR_chk(2) + 1; + WR_chk(3) := WR_chk(3) + 1; + + -- Auto Refresh + IF Aref_enable = '1' THEN + -- Auto Refresh to Auto Refresh + ASSERT (NOW - RC_chk >= tRC) + REPORT "tRC violation during Auto Refresh" + SEVERITY WARNING; + -- Precharge to Auto Refresh + ASSERT (NOW - RP_chk >= tRP) + REPORT "tRP violation during Auto Refresh" + SEVERITY WARNING; + -- All banks must be idle before refresh + IF (Pc_b0 ='0' OR Pc_b1 = '0' OR Pc_b2 ='0' OR Pc_b3 = '0') THEN + ASSERT (FALSE) + REPORT "All banks must be Precharge before Auto Refresh" + SEVERITY WARNING; + END IF; + -- Record current tRC time + RC_chk := NOW; + END IF; + + -- Load Mode Register + IF Mode_reg_enable = '1' THEN + Mode_reg <= TO_BITVECTOR (Addr); + IF (Pc_b0 ='0' OR Pc_b1 = '0' OR Pc_b2 ='0' OR Pc_b3 = '0') THEN + ASSERT (FALSE) + REPORT "All bank must be Precharge before Load Mode Register" + SEVERITY WARNING; + END IF; + -- REF to LMR + ASSERT (NOW - RC_chk >= tRC) + REPORT "tRC violation during Load Mode Register" + SEVERITY WARNING; + -- LMR to LMR + ASSERT (MRD_chk >= tMRD) + REPORT "tMRD violation during Load Mode Register" + SEVERITY WARNING; + -- Record current tMRD time + MRD_chk := 0; + END IF; + + -- Active Block (latch Bank and Row Address) + IF Active_enable = '1' THEN + IF Ba = "00" AND Pc_b0 = '1' THEN + Act_b0 := '1'; + Pc_b0 := '0'; + B0_row_addr := TO_BITVECTOR (Addr); + RCD_chk0 := NOW; + RAS_chk0 := NOW; + -- Precharge to Active Bank 0 + ASSERT (NOW - RP_chk0 >= tRP) + REPORT "tRP violation during Activate Bank 0" + SEVERITY WARNING; + ELSIF Ba = "01" AND Pc_b1 = '1' THEN + Act_b1 := '1'; + Pc_b1 := '0'; + B1_row_addr := TO_BITVECTOR (Addr); + RCD_chk1 := NOW; + RAS_chk1 := NOW; + -- Precharge to Active Bank 1 + ASSERT (NOW - RP_chk1 >= tRP) + REPORT "tRP violation during Activate Bank 1" + SEVERITY WARNING; + ELSIF Ba = "10" AND Pc_b2 = '1' THEN + Act_b2 := '1'; + Pc_b2 := '0'; + B2_row_addr := TO_BITVECTOR (Addr); + RCD_chk2 := NOW; + RAS_chk2 := NOW; + -- Precharge to Active Bank 2 + ASSERT (NOW - RP_chk2 >= tRP) + REPORT "tRP violation during Activate Bank 2" + SEVERITY WARNING; + ELSIF Ba = "11" AND Pc_b3 = '1' THEN + Act_b3 := '1'; + Pc_b3 := '0'; + B3_row_addr := TO_BITVECTOR (Addr); + RCD_chk3 := NOW; + RAS_chk3 := NOW; + -- Precharge to Active Bank 3 + ASSERT (NOW - RP_chk3 >= tRP) + REPORT "tRP violation during Activate Bank 3" + SEVERITY WARNING; + ELSIF Ba = "00" AND Pc_b0 = '0' THEN + ASSERT (FALSE) + REPORT "Bank 0 is not Precharged" + SEVERITY WARNING; + ELSIF Ba = "01" AND Pc_b1 = '0' THEN + ASSERT (FALSE) + REPORT "Bank 1 is not Precharged" + SEVERITY WARNING; + ELSIF Ba = "10" AND Pc_b2 = '0' THEN + ASSERT (FALSE) + REPORT "Bank 2 is not Precharged" + SEVERITY WARNING; + ELSIF Ba = "11" AND Pc_b3 = '0' THEN + ASSERT (FALSE) + REPORT "Bank 3 is not Precharged" + SEVERITY WARNING; + END IF; + -- Active Bank A to Active Bank B + IF ((Previous_bank /= TO_BITVECTOR (Ba)) AND (NOW - RRD_chk < tRRD)) THEN + ASSERT (FALSE) + REPORT "tRRD violation during Activate" + SEVERITY WARNING; + END IF; + -- LMR to ACT + ASSERT (MRD_chk >= tMRD) + REPORT "tMRD violation during Activate" + SEVERITY WARNING; + -- AutoRefresh to Activate + ASSERT (NOW - RC_chk >= tRC) + REPORT "tRC violation during Activate" + SEVERITY WARNING; + -- Record variable for checking violation + RRD_chk := NOW; + Previous_bank := TO_BITVECTOR (Ba); + END IF; + + -- Precharge Block + IF Prech_enable = '1' THEN + IF Addr(10) = '1' THEN + Pc_b0 := '1'; + Pc_b1 := '1'; + Pc_b2 := '1'; + Pc_b3 := '1'; + Act_b0 := '0'; + Act_b1 := '0'; + Act_b2 := '0'; + Act_b3 := '0'; + RP_chk0 := NOW; + RP_chk1 := NOW; + RP_chk2 := NOW; + RP_chk3 := NOW; + -- Activate to Precharge all banks + ASSERT ((NOW - RAS_chk0 >= tRAS) OR (NOW - RAS_chk1 >= tRAS)) + REPORT "tRAS violation during Precharge all banks" + SEVERITY WARNING; + -- tWR violation check for Write + IF ((WR_chk(0) < tWR) OR (WR_chk(1) < tWR) OR + (WR_chk(2) < tWR) OR (WR_chk(3) < tWR)) THEN + ASSERT (FALSE) + REPORT "tWR violation during Precharge ALL banks" + SEVERITY WARNING; + END IF; + ELSIF Addr(10) = '0' THEN + IF Ba = "00" THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW; + -- Activate to Precharge bank 0 + ASSERT (NOW - RAS_chk0 >= tRAS) + REPORT "tRAS violation during Precharge bank 0" + SEVERITY WARNING; + ELSIF Ba = "01" THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW; + -- Activate to Precharge bank 1 + ASSERT (NOW - RAS_chk1 >= tRAS) + REPORT "tRAS violation during Precharge bank 1" + SEVERITY WARNING; + ELSIF Ba = "10" THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW; + -- Activate to Precharge bank 2 + ASSERT (NOW - RAS_chk2 >= tRAS) + REPORT "tRAS violation during Precharge bank 2" + SEVERITY WARNING; + ELSIF Ba = "11" THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW; + -- Activate to Precharge bank 3 + ASSERT (NOW - RAS_chk3 >= tRAS) + REPORT "tRAS violation during Precharge bank 3" + SEVERITY WARNING; + END IF; + -- tWR violation check for Write + ASSERT (WR_chk(TO_INTEGER(Ba)) >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + -- Terminate a Write Immediately (if same bank or all banks) + IF (Data_in_enable = '1' AND (Bank = TO_BITVECTOR(Ba) OR Addr(10) = '1')) THEN + Data_in_enable := '0'; + END IF; + -- Precharge Command Pipeline for READ + IF CAS_latency_3 = '1' THEN + Command(2) := PRECH; + Bank_precharge(2) := TO_BITVECTOR (Ba); + A10_precharge(2) := TO_BIT(Addr(10)); + ELSIF CAS_latency_2 = '1' THEN + Command(1) := PRECH; + Bank_precharge(1) := TO_BITVECTOR (Ba); + A10_precharge(1) := TO_BIT(Addr(10)); + END IF; + -- Record Current tRP time + RP_chk := NOW; + END IF; + + -- Burst Terminate + IF Burst_term = '1' THEN + -- Terminate a Write immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + END IF; + -- Terminate a Read depend on CAS Latency + IF CAS_latency_3 = '1' THEN + Command(2) := BST; + ELSIF CAS_latency_2 = '1' THEN + Command(1) := BST; + END IF; + END IF; + + -- Read, Write, Column Latch + IF Read_enable = '1' OR Write_enable = '1' THEN + -- Check to see if bank is open (ACT) for Read or Write + IF ((Ba = "00" AND Pc_b0 = '1') OR (Ba = "01" AND Pc_b1 = '1') OR (Ba = "10" AND Pc_b2 = '1') OR (Ba = "11" AND Pc_b3 = '1')) THEN + ASSERT (FALSE) + REPORT "Cannot Read or Write - Bank is not Activated" + SEVERITY WARNING; + END IF; + -- Activate to Read or Write + IF Ba = "00" THEN + ASSERT (NOW - RCD_chk0 >= tRCD) + REPORT "tRCD violation during Read or Write to Bank 0" + SEVERITY WARNING; + ELSIF Ba = "01" THEN + ASSERT (NOW - RCD_chk1 >= tRCD) + REPORT "tRCD violation during Read or Write to Bank 1" + SEVERITY WARNING; + ELSIF Ba = "10" THEN + ASSERT (NOW - RCD_chk2 >= tRCD) + REPORT "tRCD violation during Read or Write to Bank 2" + SEVERITY WARNING; + ELSIF Ba = "11" THEN + ASSERT (NOW - RCD_chk3 >= tRCD) + REPORT "tRCD violation during Read or Write to Bank 3" + SEVERITY WARNING; + END IF; + + -- Read Command + IF Read_enable = '1' THEN + -- CAS Latency Pipeline + IF Cas_latency_3 = '1' THEN + IF Addr(10) = '1' THEN + Command(2) := READ_A; + ELSE + Command(2) := READ; + END IF; + Col_addr (2) := TO_BITVECTOR (Addr(col_bits - 1 DOWNTO 0)); + Bank_addr (2) := TO_BITVECTOR (Ba); + ELSIF Cas_latency_2 = '1' THEN + IF Addr(10) = '1' THEN + Command(1) := READ_A; + ELSE + Command(1) := READ; + END IF; + Col_addr (1) := TO_BITVECTOR (Addr(col_bits - 1 DOWNTO 0)); + Bank_addr (1) := TO_BITVECTOR (Ba); + END IF; + + -- Read intterupt a Write (terminate Write immediately) + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + IF Auto_precharge(TO_INTEGER(Bank)) = '1' AND Write_precharge(TO_INTEGER(Bank)) = '1' THEN + RW_interrupt_write(TO_INTEGER(Bank)) := '1'; + END IF; + END IF; + + -- Read interrupt a Read (terminate Read after CL) + IF Data_out_enable = '1' THEN + IF Auto_precharge(TO_INTEGER(Bank)) = '1' AND Read_precharge(TO_INTEGER(Bank)) = '1' THEN + RW_interrupt_read(TO_INTEGER(Bank)) := '1'; + END IF; + END IF; + + -- Write Command + ELSIF Write_enable = '1' THEN + IF Addr(10) = '1' THEN + Command(0) := WRITE_A; + ELSE + Command(0) := WRITE; + END IF; + Col_addr (0) := TO_BITVECTOR (Addr(col_bits - 1 DOWNTO 0)); + Bank_addr (0) := TO_BITVECTOR (Ba); + + -- Write intterupt a Write (terminate Write immediately) + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + IF Auto_precharge(TO_INTEGER(Bank)) = '1' AND Write_precharge(TO_INTEGER(Bank)) = '1' THEN + RW_interrupt_write(TO_INTEGER(Bank)) := '1'; + END IF; + END IF; + + -- Write interrupt a Read (terminate Read immediately) + IF Data_out_enable = '1' THEN + Data_out_enable := '0'; + IF Auto_precharge(TO_INTEGER(Bank)) = '1' AND Read_precharge(TO_INTEGER(Bank)) = '1' THEN + RW_interrupt_read(TO_INTEGER(Bank)) := '1'; + END IF; + END IF; + END IF; + + -- Read or Write with Auto Precharge + IF Addr(10) = '1' THEN + Auto_precharge (TO_INTEGER(Ba)) := '1'; + Count_precharge (TO_INTEGER(Ba)) := 0; + IF Read_enable = '1' THEN + Read_precharge (TO_INTEGER(Ba)) := '1'; + ELSIF Write_enable = '1' THEN + Write_precharge (TO_INTEGER(Ba)) := '1'; + END IF; + END IF; + END IF; + + -- Read with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. BL/2 cycles after command + -- and 2. Meet tRAS requirement + -- or 3. Interrupt by a Read or Write (with or without Auto Precharge) + IF ((Auto_precharge(0) = '1') AND (Read_precharge(0) = '1')) THEN + IF (((NOW - RAS_chk0 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(0) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(0) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(0) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(0) >= 8))) OR + (RW_interrupt_read(0) = '1')) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW; + Auto_precharge(0) := '0'; + Read_precharge(0) := '0'; + RW_interrupt_read(0) := '0'; + END IF; + END IF; + IF ((Auto_precharge(1) = '1') AND (Read_precharge(1) = '1')) THEN + IF (((NOW - RAS_chk1 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(1) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(1) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(1) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(1) >= 8))) OR + (RW_interrupt_read(1) = '1')) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW; + Auto_precharge(1) := '0'; + Read_precharge(1) := '0'; + RW_interrupt_read(1) := '0'; + END IF; + END IF; + IF ((Auto_precharge(2) = '1') AND (Read_precharge(2) = '1')) THEN + IF (((NOW - RAS_chk2 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(2) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(2) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(2) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(2) >= 8))) OR + (RW_interrupt_read(2) = '1')) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW; + Auto_precharge(2) := '0'; + Read_precharge(2) := '0'; + RW_interrupt_read(2) := '0'; + END IF; + END IF; + IF ((Auto_precharge(3) = '1') AND (Read_precharge(3) = '1')) THEN + IF (((NOW - RAS_chk3 >= tRAS) AND + ((Burst_length_1 = '1' AND Count_precharge(3) >= 1) OR + (Burst_length_2 = '1' AND Count_precharge(3) >= 2) OR + (Burst_length_4 = '1' AND Count_precharge(3) >= 4) OR + (Burst_length_8 = '1' AND Count_precharge(3) >= 8))) OR + (RW_interrupt_read(3) = '1')) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW; + Auto_precharge(3) := '0'; + Read_precharge(3) := '0'; + RW_interrupt_read(3) := '0'; + END IF; + END IF; + + -- Write with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. tWR cycles after command + -- and 2. Meet tRAS requirement + -- or 3. Interrupt by a Read or Write (with or without Auto Precharge) + IF ((Auto_precharge(0) = '1') AND (Write_precharge(0) = '1')) THEN + IF (((NOW - RAS_chk0 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(0) >= 2) OR + (Burst_length_2 = '1' AND Count_precharge(0) >= 3) OR + (Burst_length_4 = '1' AND Count_precharge(0) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge(0) >= 9))) OR + (RW_interrupt_write(0) = '1' AND WR_chk(0) >= 3)) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW; + Auto_precharge(0) := '0'; + Write_precharge(0) := '0'; + RW_interrupt_write(0) := '0'; + END IF; + END IF; + IF ((Auto_precharge(1) = '1') AND (Write_precharge(1) = '1')) THEN + IF (((NOW - RAS_chk1 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(1) >= 2) OR + (Burst_length_2 = '1' AND Count_precharge(1) >= 3) OR + (Burst_length_4 = '1' AND Count_precharge(1) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge(1) >= 9))) OR + (RW_interrupt_write(1) = '1' AND WR_chk(1) >= 3)) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW; + Auto_precharge(1) := '0'; + Write_precharge(1) := '0'; + RW_interrupt_write(1) := '0'; + END IF; + END IF; + IF ((Auto_precharge(2) = '1') AND (Write_precharge(2) = '1')) THEN + IF (((NOW - RAS_chk2 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(2) >= 2) OR + (Burst_length_2 = '1' AND Count_precharge(2) >= 3) OR + (Burst_length_4 = '1' AND Count_precharge(2) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge(2) >= 9))) OR + (RW_interrupt_write(2) = '1' AND WR_chk(2) >= 3)) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW; + Auto_precharge(2) := '0'; + Write_precharge(2) := '0'; + RW_interrupt_write(2) := '0'; + END IF; + END IF; + IF ((Auto_precharge(3) = '1') AND (Write_precharge(3) = '1')) THEN + IF (((NOW - RAS_chk3 >= tRAS) AND + (((Burst_length_1 = '1' OR Write_burst_mode = '1' ) AND Count_precharge(3) >= 2) OR + (Burst_length_2 = '1' AND Count_precharge(3) >= 3) OR + (Burst_length_4 = '1' AND Count_precharge(3) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge(3) >= 9))) OR + (RW_interrupt_write(3) = '1' AND WR_chk(3) >= 3)) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW; + Auto_precharge(3) := '0'; + Write_precharge(3) := '0'; + RW_interrupt_write(3) := '0'; + END IF; + END IF; + + -- Internal Precharge or Bst + IF Command(0) = PRECH THEN -- Terminate a read if same bank or all banks + IF Bank_precharge(0) = Bank OR A10_precharge(0) = '1' THEN + IF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Command(0) = BST THEN -- Terminate a read immediately + IF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + + IF Data_out_enable = '0' THEN + Dq <= TRANSPORT (OTHERS => 'Z') AFTER tOH; + END IF; + + -- Detect Read or Write Command + IF Command(0) = READ OR Command(0) = READ_A THEN + Bank := Bank_addr (0); + Col := Col_addr (0); + Col_brst := Col_addr (0); + IF Bank_addr (0) = "00" THEN + Row := B0_row_addr; + ELSIF Bank_addr (0) = "01" THEN + Row := B1_row_addr; + ELSIF Bank_addr (0) = "10" THEN + Row := B2_row_addr; + ELSE + Row := B3_row_addr; + END IF; + Burst_counter := 0; + Data_in_enable := '0'; + Data_out_enable := '1'; + ELSIF Command(0) = WRITE OR Command(0) = WRITE_A THEN + Bank := Bank_addr(0); + Col := Col_addr(0); + Col_brst := Col_addr(0); + IF Bank_addr (0) = "00" THEN + Row := B0_row_addr; + ELSIF Bank_addr (0) = "01" THEN + Row := B1_row_addr; + ELSIF Bank_addr (0) = "10" THEN + Row := B2_row_addr; + ELSE + Row := B3_row_addr; + END IF; + Burst_counter := 0; + Data_in_enable := '1'; + Data_out_enable := '0'; + END IF; + + -- DQ (Driver / Receiver) + Row_index := TO_INTEGER (Row); + Col_index := TO_INTEGER (Col); + IF Data_in_enable = '1' THEN + IF Dqm /= "11" THEN + Init_mem (Bank, Row_index); + IF Bank = "00" THEN + Dq_temp := Bank0 (Row_index) (Col_index); + IF Dqm = "01" THEN + Dq_temp (15 DOWNTO 8) := TO_BITVECTOR (Dq (15 DOWNTO 8)); + ELSIF Dqm = "10" THEN + Dq_temp (7 DOWNTO 0) := TO_BITVECTOR (Dq (7 DOWNTO 0)); + ELSE + Dq_temp (15 DOWNTO 0) := TO_BITVECTOR (Dq (15 DOWNTO 0)); + END IF; + Bank0 (Row_index) (Col_index) := Dq_temp; + ELSIF Bank = "01" THEN + Dq_temp := Bank1 (Row_index) (Col_index); + IF Dqm = "01" THEN + Dq_temp (15 DOWNTO 8) := TO_BITVECTOR (Dq (15 DOWNTO 8)); + ELSIF Dqm = "10" THEN + Dq_temp (7 DOWNTO 0) := TO_BITVECTOR (Dq (7 DOWNTO 0)); + ELSE + Dq_temp (15 DOWNTO 0) := TO_BITVECTOR (Dq (15 DOWNTO 0)); + END IF; + Bank1 (Row_index) (Col_index) := Dq_temp; + ELSIF Bank = "10" THEN + Dq_temp := Bank2 (Row_index) (Col_index); + IF Dqm = "01" THEN + Dq_temp (15 DOWNTO 8) := TO_BITVECTOR (Dq (15 DOWNTO 8)); + ELSIF Dqm = "10" THEN + Dq_temp (7 DOWNTO 0) := TO_BITVECTOR (Dq (7 DOWNTO 0)); + ELSE + Dq_temp (15 DOWNTO 0) := TO_BITVECTOR (Dq (15 DOWNTO 0)); + END IF; + Bank2 (Row_index) (Col_index) := Dq_temp; + ELSIF Bank = "11" THEN + Dq_temp := Bank3 (Row_index) (Col_index); + IF Dqm = "01" THEN + Dq_temp (15 DOWNTO 8) := TO_BITVECTOR (Dq (15 DOWNTO 8)); + ELSIF Dqm = "10" THEN + Dq_temp (7 DOWNTO 0) := TO_BITVECTOR (Dq (7 DOWNTO 0)); + ELSE + Dq_temp (15 DOWNTO 0) := TO_BITVECTOR (Dq (15 DOWNTO 0)); + END IF; + Bank3 (Row_index) (Col_index) := Dq_temp; + END IF; + WR_chk(TO_INTEGER(Bank)) := 0; + END IF; + Burst_decode; + ELSIF Data_out_enable = '1' THEN + IF Dqm_reg0 /= "11" THEN + Init_mem (Bank, Row_index); + IF Bank = "00" THEN + Dq_temp (15 DOWNTO 0) := Bank0 (Row_index) (Col_index); + IF Dqm_reg0 = "00" THEN + Dq (15 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 0)) AFTER tAC; + ELSIF Dqm_reg0 = "01" THEN + Dq (15 DOWNTO 8) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 8)) AFTER tAC; + Dq (7 DOWNTO 0) <= TRANSPORT (OTHERS => 'Z') AFTER tAC; + ELSIF Dqm_reg0 = "10" THEN + Dq (15 DOWNTO 8) <= TRANSPORT (OTHERS => 'Z') AFTER tAC; + Dq (7 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (7 DOWNTO 0)) AFTER tAC; + END IF; + ELSIF Bank = "01" THEN + Dq_temp (15 DOWNTO 0) := Bank1 (Row_index) (Col_index); + IF Dqm_reg0 = "00" THEN + Dq (15 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 0)) AFTER tAC; + ELSIF Dqm_reg0 = "01" THEN + Dq (15 DOWNTO 8) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 8)) AFTER tAC; + Dq (7 DOWNTO 0) <= TRANSPORT (OTHERS => 'Z') AFTER tAC; + ELSIF Dqm_reg0 = "10" THEN + Dq (15 DOWNTO 8) <= TRANSPORT (OTHERS => 'Z') AFTER tAC; + Dq (7 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (7 DOWNTO 0)) AFTER tAC; + END IF; + ELSIF Bank = "10" THEN + Dq_temp (15 DOWNTO 0) := Bank2 (Row_index) (Col_index); + IF Dqm_reg0 = "00" THEN + Dq (15 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 0)) AFTER tAC; + ELSIF Dqm_reg0 = "01" THEN + Dq (15 DOWNTO 8) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 8)) AFTER tAC; + Dq (7 DOWNTO 0) <= TRANSPORT (OTHERS => 'Z') AFTER tAC; + ELSIF Dqm_reg0 = "10" THEN + Dq (15 DOWNTO 8) <= TRANSPORT (OTHERS => 'Z') AFTER tAC; + Dq (7 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (7 DOWNTO 0)) AFTER tAC; + END IF; + ELSIF Bank = "11" THEN + Dq_temp (15 DOWNTO 0) := Bank3 (Row_index) (Col_index); + IF Dqm_reg0 = "00" THEN + Dq (15 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 0)) AFTER tAC; + ELSIF Dqm_reg0 = "01" THEN + Dq (15 DOWNTO 8) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (15 DOWNTO 8)) AFTER tAC; + Dq (7 DOWNTO 0) <= TRANSPORT (OTHERS => 'Z') AFTER tAC; + ELSIF Dqm_reg0 = "10" THEN + Dq (15 DOWNTO 8) <= TRANSPORT (OTHERS => 'Z') AFTER tAC; + Dq (7 DOWNTO 0) <= TRANSPORT TO_STDLOGICVECTOR (Dq_temp (7 DOWNTO 0)) AFTER tAC; + END IF; + END IF; + ELSE + Dq <= TRANSPORT (OTHERS => 'Z') AFTER tHZ; + END IF; + Burst_decode; + END IF; + + -- Checking internal wires (Optional for debug purpose) + Pre_chk (0) <= Pc_b0; + Pre_chk (1) <= Pc_b1; + Pre_chk (2) <= Pc_b2; + Pre_chk (3) <= Pc_b3; + Act_chk (0) <= Act_b0; + Act_chk (1) <= Act_b1; + Act_chk (2) <= Act_b2; + Act_chk (3) <= Act_b3; + Dq_in_chk <= Data_in_enable; + Dq_out_chk <= Data_out_enable; + Bank_chk <= Bank; + Row_chk <= Row; + Col_chk <= Col; + END IF; + END PROCESS; + + + -- Clock timing checks + Clock_check : PROCESS + VARIABLE Clk_low, Clk_high : TIME := 0 ns; + BEGIN + WAIT ON Clk; + IF (Clk = '1' AND NOW >= 10 ns) THEN + ASSERT (NOW - Clk_low >= tCL) + REPORT "tCL violation" + SEVERITY WARNING; + ASSERT (NOW - Clk_high >= tCK) + REPORT "tCK violation" + SEVERITY WARNING; + Clk_high := NOW; + ELSIF (Clk = '0' AND NOW /= 0 ns) THEN + ASSERT (NOW - Clk_high >= tCH) + REPORT "tCH violation" + SEVERITY WARNING; + Clk_low := NOW; + END IF; + END PROCESS; + + -- Setup timing checks + Setup_check : PROCESS + BEGIN + WAIT ON Clk; + IF Clk = '1' THEN + ASSERT(Cke'LAST_EVENT >= tCKS) + REPORT "CKE Setup time violation -- tCKS" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tCMS) + REPORT "CS# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tCMS) + REPORT "CAS# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tCMS) + REPORT "RAS# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tCMS) + REPORT "WE# Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Dqm'LAST_EVENT >= tCMS) + REPORT "DQM Setup time violation -- tCMS" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tAS) + REPORT "ADDR Setup time violation -- tAS" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tAS) + REPORT "BA Setup time violation -- tAS" + SEVERITY WARNING; + ASSERT(Dq'LAST_EVENT >= tDS) + REPORT "DQ Setup time violation -- tDS" + SEVERITY WARNING; + END IF; + END PROCESS; + + -- Hold timing checks + Hold_check : PROCESS + BEGIN + WAIT ON Clk'DELAYED (tCKH), Clk'DELAYED (tCMH), Clk'DELAYED (tAH), Clk'DELAYED (tDH); + IF Clk'DELAYED (tCKH) = '1' THEN + ASSERT(Cke'LAST_EVENT > tCKH) + REPORT "CKE Hold time violation -- tCKH" + SEVERITY WARNING; + END IF; + IF Clk'DELAYED (tCMH) = '1' THEN + ASSERT(Cs_n'LAST_EVENT > tCMH) + REPORT "CS# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT > tCMH) + REPORT "CAS# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT > tCMH) + REPORT "RAS# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT > tCMH) + REPORT "WE# Hold time violation -- tCMH" + SEVERITY WARNING; + ASSERT(Dqm'LAST_EVENT > tCMH) + REPORT "DQM Hold time violation -- tCMH" + SEVERITY WARNING; + END IF; + IF Clk'DELAYED (tAH) = '1' THEN + ASSERT(Addr'LAST_EVENT > tAH) + REPORT "ADDR Hold time violation -- tAH" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT > tAH) + REPORT "BA Hold time violation -- tAH" + SEVERITY WARNING; + END IF; + IF Clk'DELAYED (tDH) = '1' THEN + ASSERT(Dq'LAST_EVENT > tDH) + REPORT "DQ Hold time violation -- tDH" + SEVERITY WARNING; + END IF; + END PROCESS; + +END behave; \ No newline at end of file diff --git a/peripherals/sdram/sim/mti_pkg.vhd b/peripherals/sdram/sim/mti_pkg.vhd new file mode 100644 index 00000000..54cd91bb --- /dev/null +++ b/peripherals/sdram/sim/mti_pkg.vhd @@ -0,0 +1,143 @@ +--***************************************************************************** +-- +-- Micron Semiconductor Products, Inc. +-- +-- Copyright 1997, Micron Semiconductor Products, Inc. +-- All rights reserved. +-- +--***************************************************************************** + +LIBRARY work; +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +PACKAGE mti_pkg IS + + FUNCTION TO_INTEGER (input : BIT) RETURN INTEGER; + FUNCTION TO_INTEGER (input : BIT_VECTOR) RETURN INTEGER; + FUNCTION TO_INTEGER (input : STD_LOGIC) RETURN INTEGER; + FUNCTION TO_INTEGER (input : STD_LOGIC_VECTOR) RETURN INTEGER; + PROCEDURE TO_BITVECTOR (VARIABLE input : IN INTEGER; VARIABLE output : OUT BIT_VECTOR); + +END mti_pkg; + +PACKAGE BODY mti_pkg IS + + -- Convert BIT to INTEGER + FUNCTION TO_INTEGER (input : BIT) RETURN INTEGER IS + VARIABLE result : INTEGER := 0; + VARIABLE weight : INTEGER := 1; + BEGIN + IF input = '1' THEN + result := weight; + ELSE + result := 0; -- if unknowns, default to logic 0 + END IF; + RETURN result; + END TO_INTEGER; + + -- Convert BIT_VECTOR to INTEGER + FUNCTION TO_INTEGER (input : BIT_VECTOR) RETURN INTEGER IS + VARIABLE result : INTEGER := 0; + VARIABLE weight : INTEGER := 1; + BEGIN + FOR i IN input'LOW TO input'HIGH LOOP + IF input(i) = '1' THEN + result := result + weight; + ELSE + result := result + 0; -- if unknowns, default to logic 0 + END IF; + weight := weight * 2; + END LOOP; + RETURN result; + END TO_INTEGER; + + -- Convert STD_LOGIC to INTEGER + FUNCTION TO_INTEGER (input : STD_LOGIC) RETURN INTEGER IS + VARIABLE result : INTEGER := 0; + VARIABLE weight : INTEGER := 1; + BEGIN + IF input = '1' THEN + result := weight; + ELSE + result := 0; -- if unknowns, default to logic 0 + END IF; + RETURN result; + END TO_INTEGER; + + -- Convert STD_LOGIC_VECTOR to INTEGER + FUNCTION TO_INTEGER (input : STD_LOGIC_VECTOR) RETURN INTEGER IS + VARIABLE result : INTEGER := 0; + VARIABLE weight : INTEGER := 1; + BEGIN + FOR i IN input'LOW TO input'HIGH LOOP + IF input(i) = '1' THEN + result := result + weight; + ELSE + result := result + 0; -- if unknowns, default to logic 0 + END IF; + weight := weight * 2; + END LOOP; + RETURN result; + END TO_INTEGER; + + -- Conver integer to bit_vector + PROCEDURE TO_BITVECTOR (VARIABLE input : IN INTEGER; VARIABLE output : OUT BIT_VECTOR) IS + VARIABLE work,offset,outputlen,j : INTEGER := 0; + BEGIN + --length of vector + IF output'LENGTH > 32 THEN + outputlen := 32; + offset := output'LENGTH - 32; + IF input >= 0 THEN + FOR i IN offset-1 DOWNTO 0 LOOP + output(output'HIGH - i) := '0'; + END LOOP; + ELSE + FOR i IN offset-1 DOWNTO 0 LOOP + output(output'HIGH - i) := '1'; + END LOOP; + END IF; + ELSE + outputlen := output'LENGTH; + END IF; + --positive value + IF (input >= 0) THEN + work := input; + j := outputlen - 1; + FOR i IN 1 to 32 LOOP + IF j >= 0 then + IF (work MOD 2) = 0 THEN + output(output'HIGH-j-offset) := '0'; + ELSE + output(output'HIGH-j-offset) := '1'; + END IF; + END IF; + work := work / 2; + j := j - 1; + END LOOP; + IF outputlen = 32 THEN + output(output'HIGH) := '0'; + END IF; + --negative value + ELSE + work := (-input) - 1; + j := outputlen - 1; + FOR i IN 1 TO 32 LOOP + IF j>= 0 THEN + IF (work MOD 2) = 0 THEN + output(output'HIGH-j-offset) := '1'; + ELSE + output(output'HIGH-j-offset) := '0'; + END IF; + END IF; + work := work / 2; + j := j - 1; + END LOOP; + IF outputlen = 32 THEN + output(output'HIGH) := '1'; + END IF; + END IF; + END TO_BITVECTOR; + +END mti_pkg; \ No newline at end of file diff --git a/peripherals/sdram/sint/de10_lite.ipregen.rpt b/peripherals/sdram/sint/de10_lite.ipregen.rpt new file mode 100644 index 00000000..99d47685 --- /dev/null +++ b/peripherals/sdram/sint/de10_lite.ipregen.rpt @@ -0,0 +1,68 @@ +IP Upgrade report for de10_lite +Mon Jul 8 11:04:27 2019 +Quartus Prime Version 18.1.0 Build 625 09/12/2018 SJ Standard Edition + + +--------------------- +; Table of Contents ; +--------------------- + 1. Legal Notice + 2. IP Upgrade Summary + 3. Successfully Upgraded IP Components + 4. IP Upgrade Messages + + + +---------------- +; Legal Notice ; +---------------- +Copyright (C) 2018 Intel Corporation. All rights reserved. +Your use of Intel Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from 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 Intel Program License +Subscription Agreement, the Intel Quartus Prime License Agreement, +the Intel FPGA IP License Agreement, or other applicable license +agreement, including, without limitation, that your use is for +the sole purpose of programming logic devices manufactured by +Intel and sold by Intel or its authorized distributors. Please +refer to the applicable agreement for further details. + + + ++--------------------------------------------------------------------------------+ +; IP Upgrade Summary ; ++------------------------------+-------------------------------------------------+ +; IP Components Upgrade Status ; Passed - Mon Jul 8 11:04:27 2019 ; +; Quartus Prime Version ; 18.1.0 Build 625 09/12/2018 SJ Standard Edition ; +; Revision Name ; de10_lite ; +; Top-level Entity Name ; de10_lite ; +; Family ; MAX 10 ; ++------------------------------+-------------------------------------------------+ + + ++------------------------------------------------------------------------------------------------------------------+ +; Successfully Upgraded IP Components ; ++-------------+----------------+---------+----------------------+----------------------+-----------------+---------+ +; Entity Name ; Component Name ; Version ; Original Source File ; Generation File Path ; New Source File ; Message ; ++-------------+----------------+---------+----------------------+----------------------+-----------------+---------+ +; pll ; ALTPLL ; 17.1 ; ../pll/pll.qip ; ../pll/pll.vhd ; ../pll/pll.qip ; ; ++-------------+----------------+---------+----------------------+----------------------+-----------------+---------+ + + ++---------------------+ +; IP Upgrade Messages ; ++---------------------+ +Info (11902): Backing up file "../pll/pll.vhd" to "../pll/pll.BAK.vhd" +Info (11837): Started upgrading IP component ALTPLL with file "../pll/pll.vhd" +Info (11131): Completed upgrading IP component ALTPLL with file "../pll/pll.vhd" +Info (23030): Evaluation of Tcl script /home/xtarke/Data/Apps/intelFPGA/18.1/quartus/common/tcl/internal/ip_regen/ip_regen.tcl was successful +Info: Quartus Prime Shell was successful. 0 errors, 0 warnings + Info: Peak virtual memory: 1064 megabytes + Info: Processing ended: Mon Jul 8 11:04:27 2019 + Info: Elapsed time: 00:00:10 + Info: Total CPU time (on all processors): 00:00:28 + + diff --git a/peripherals/sdram/sint/de10_lite.qpf b/peripherals/sdram/sint/de10_lite.qpf new file mode 100644 index 00000000..2e37e9d1 --- /dev/null +++ b/peripherals/sdram/sint/de10_lite.qpf @@ -0,0 +1,31 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2015 Altera Corporation. All rights reserved. +# 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 from 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, the Altera Quartus II License Agreement, +# the 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 64-Bit +# Version 15.0.0 Build 145 04/22/2015 SJ Web Edition +# Date created = 18:49:34 June 20, 2019 +# +# -------------------------------------------------------------------------- # + +QUARTUS_VERSION = "15.0" +DATE = "18:49:34 June 20, 2019" + +# Revisions + +PROJECT_REVISION = "de10_lite" diff --git a/peripherals/sdram/sint/de10_lite.qsf b/peripherals/sdram/sint/de10_lite.qsf new file mode 100644 index 00000000..58d952af --- /dev/null +++ b/peripherals/sdram/sint/de10_lite.qsf @@ -0,0 +1,233 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2015 Altera Corporation. All rights reserved. +# 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 from 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, the Altera Quartus II License Agreement, +# the 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 64-Bit +# Version 15.0.0 Build 145 04/22/2015 SJ Web Edition +# Date created = 18:49:34 June 20, 2019 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# de10_lite_assignment_defaults.qdf +# If this file doesn't exist, see file: +# assignment_defaults.qdf +# +# 2) Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. +# +# -------------------------------------------------------------------------- # + + +set_global_assignment -name FAMILY "MAX 10" +set_global_assignment -name DEVICE 10M50DAF484C7G +set_global_assignment -name TOP_LEVEL_ENTITY de10_lite +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 15.0.0 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "18:49:34 JUNE 20, 2019" +set_global_assignment -name LAST_QUARTUS_VERSION "18.1.0 Standard Edition" +set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256 +set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (VHDL)" +set_global_assignment -name EDA_OUTPUT_DATA_FORMAT VHDL -section_id eda_simulation +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" +set_global_assignment -name ENABLE_OCT_DONE ON +set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 00000000 +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF +set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "SINGLE IMAGE WITH ERAM" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall +set_location_assignment PIN_N5 -to ADC_CLK_10 +set_location_assignment PIN_P11 -to MAX10_CLK1_50 +set_location_assignment PIN_N14 -to MAX10_CLK2_50 +set_location_assignment PIN_U17 -to DRAM_ADDR[0] +set_location_assignment PIN_W19 -to DRAM_ADDR[1] +set_location_assignment PIN_V18 -to DRAM_ADDR[2] +set_location_assignment PIN_U18 -to DRAM_ADDR[3] +set_location_assignment PIN_U19 -to DRAM_ADDR[4] +set_location_assignment PIN_T18 -to DRAM_ADDR[5] +set_location_assignment PIN_T19 -to DRAM_ADDR[6] +set_location_assignment PIN_R18 -to DRAM_ADDR[7] +set_location_assignment PIN_P18 -to DRAM_ADDR[8] +set_location_assignment PIN_P19 -to DRAM_ADDR[9] +set_location_assignment PIN_T20 -to DRAM_ADDR[10] +set_location_assignment PIN_P20 -to DRAM_ADDR[11] +set_location_assignment PIN_R20 -to DRAM_ADDR[12] +set_location_assignment PIN_T21 -to DRAM_BA[0] +set_location_assignment PIN_T22 -to DRAM_BA[1] +set_location_assignment PIN_U21 -to DRAM_CAS_N +set_location_assignment PIN_N22 -to DRAM_CKE +set_location_assignment PIN_L14 -to DRAM_CLK +set_location_assignment PIN_U20 -to DRAM_CS_N +set_location_assignment PIN_Y21 -to DRAM_DQ[0] +set_location_assignment PIN_Y20 -to DRAM_DQ[1] +set_location_assignment PIN_AA22 -to DRAM_DQ[2] +set_location_assignment PIN_AA21 -to DRAM_DQ[3] +set_location_assignment PIN_Y22 -to DRAM_DQ[4] +set_location_assignment PIN_W22 -to DRAM_DQ[5] +set_location_assignment PIN_W20 -to DRAM_DQ[6] +set_location_assignment PIN_V21 -to DRAM_DQ[7] +set_location_assignment PIN_P21 -to DRAM_DQ[8] +set_location_assignment PIN_J22 -to DRAM_DQ[9] +set_location_assignment PIN_H21 -to DRAM_DQ[10] +set_location_assignment PIN_H22 -to DRAM_DQ[11] +set_location_assignment PIN_G22 -to DRAM_DQ[12] +set_location_assignment PIN_G20 -to DRAM_DQ[13] +set_location_assignment PIN_G19 -to DRAM_DQ[14] +set_location_assignment PIN_F22 -to DRAM_DQ[15] +set_location_assignment PIN_V22 -to DRAM_LDQM +set_location_assignment PIN_U22 -to DRAM_RAS_N +set_location_assignment PIN_J21 -to DRAM_UDQM +set_location_assignment PIN_V20 -to DRAM_WE_N +set_location_assignment PIN_C14 -to HEX0[0] +set_location_assignment PIN_E15 -to HEX0[1] +set_location_assignment PIN_C15 -to HEX0[2] +set_location_assignment PIN_C16 -to HEX0[3] +set_location_assignment PIN_E16 -to HEX0[4] +set_location_assignment PIN_D17 -to HEX0[5] +set_location_assignment PIN_C17 -to HEX0[6] +set_location_assignment PIN_D15 -to HEX0[7] +set_location_assignment PIN_C18 -to HEX1[0] +set_location_assignment PIN_D18 -to HEX1[1] +set_location_assignment PIN_E18 -to HEX1[2] +set_location_assignment PIN_B16 -to HEX1[3] +set_location_assignment PIN_A17 -to HEX1[4] +set_location_assignment PIN_A18 -to HEX1[5] +set_location_assignment PIN_B17 -to HEX1[6] +set_location_assignment PIN_A16 -to HEX1[7] +set_location_assignment PIN_B20 -to HEX2[0] +set_location_assignment PIN_A20 -to HEX2[1] +set_location_assignment PIN_B19 -to HEX2[2] +set_location_assignment PIN_A21 -to HEX2[3] +set_location_assignment PIN_B21 -to HEX2[4] +set_location_assignment PIN_C22 -to HEX2[5] +set_location_assignment PIN_B22 -to HEX2[6] +set_location_assignment PIN_A19 -to HEX2[7] +set_location_assignment PIN_F21 -to HEX3[0] +set_location_assignment PIN_E22 -to HEX3[1] +set_location_assignment PIN_E21 -to HEX3[2] +set_location_assignment PIN_C19 -to HEX3[3] +set_location_assignment PIN_C20 -to HEX3[4] +set_location_assignment PIN_D19 -to HEX3[5] +set_location_assignment PIN_E17 -to HEX3[6] +set_location_assignment PIN_D22 -to HEX3[7] +set_location_assignment PIN_F18 -to HEX4[0] +set_location_assignment PIN_E20 -to HEX4[1] +set_location_assignment PIN_E19 -to HEX4[2] +set_location_assignment PIN_J18 -to HEX4[3] +set_location_assignment PIN_H19 -to HEX4[4] +set_location_assignment PIN_F19 -to HEX4[5] +set_location_assignment PIN_F20 -to HEX4[6] +set_location_assignment PIN_F17 -to HEX4[7] +set_location_assignment PIN_J20 -to HEX5[0] +set_location_assignment PIN_K20 -to HEX5[1] +set_location_assignment PIN_L18 -to HEX5[2] +set_location_assignment PIN_N18 -to HEX5[3] +set_location_assignment PIN_M20 -to HEX5[4] +set_location_assignment PIN_N19 -to HEX5[5] +set_location_assignment PIN_N20 -to HEX5[6] +set_location_assignment PIN_L19 -to HEX5[7] +set_location_assignment PIN_B8 -to KEY[0] +set_location_assignment PIN_A7 -to KEY[1] +set_location_assignment PIN_A8 -to LEDR[0] +set_location_assignment PIN_A9 -to LEDR[1] +set_location_assignment PIN_A10 -to LEDR[2] +set_location_assignment PIN_B10 -to LEDR[3] +set_location_assignment PIN_D13 -to LEDR[4] +set_location_assignment PIN_C13 -to LEDR[5] +set_location_assignment PIN_E14 -to LEDR[6] +set_location_assignment PIN_D14 -to LEDR[7] +set_location_assignment PIN_A11 -to LEDR[8] +set_location_assignment PIN_B11 -to LEDR[9] +set_location_assignment PIN_C10 -to SW[0] +set_location_assignment PIN_C11 -to SW[1] +set_location_assignment PIN_D12 -to SW[2] +set_location_assignment PIN_C12 -to SW[3] +set_location_assignment PIN_A12 -to SW[4] +set_location_assignment PIN_B12 -to SW[5] +set_location_assignment PIN_A13 -to SW[6] +set_location_assignment PIN_A14 -to SW[7] +set_location_assignment PIN_B14 -to SW[8] +set_location_assignment PIN_F15 -to SW[9] +set_location_assignment PIN_P1 -to VGA_B[0] +set_location_assignment PIN_T1 -to VGA_B[1] +set_location_assignment PIN_P4 -to VGA_B[2] +set_location_assignment PIN_N2 -to VGA_B[3] +set_location_assignment PIN_W1 -to VGA_G[0] +set_location_assignment PIN_T2 -to VGA_G[1] +set_location_assignment PIN_R2 -to VGA_G[2] +set_location_assignment PIN_R1 -to VGA_G[3] +set_location_assignment PIN_N3 -to VGA_HS +set_location_assignment PIN_AA1 -to VGA_R[0] +set_location_assignment PIN_V1 -to VGA_R[1] +set_location_assignment PIN_Y2 -to VGA_R[2] +set_location_assignment PIN_Y1 -to VGA_R[3] +set_location_assignment PIN_N1 -to VGA_VS +set_location_assignment PIN_AB16 -to GSENSOR_CS_N +set_location_assignment PIN_Y14 -to GSENSOR_INT[1] +set_location_assignment PIN_Y13 -to GSENSOR_INT[2] +set_location_assignment PIN_AB15 -to GSENSOR_SCLK +set_location_assignment PIN_V11 -to GSENSOR_SDI +set_location_assignment PIN_V12 -to GSENSOR_SDO +set_location_assignment PIN_AB5 -to ARDUINO_IO[0] +set_location_assignment PIN_AB6 -to ARDUINO_IO[1] +set_location_assignment PIN_AB7 -to ARDUINO_IO[2] +set_location_assignment PIN_AB8 -to ARDUINO_IO[3] +set_location_assignment PIN_AB9 -to ARDUINO_IO[4] +set_location_assignment PIN_Y10 -to ARDUINO_IO[5] +set_location_assignment PIN_AA11 -to ARDUINO_IO[6] +set_location_assignment PIN_AA12 -to ARDUINO_IO[7] +set_location_assignment PIN_AB17 -to ARDUINO_IO[8] +set_location_assignment PIN_AA17 -to ARDUINO_IO[9] +set_location_assignment PIN_AB19 -to ARDUINO_IO[10] +set_location_assignment PIN_AA19 -to ARDUINO_IO[11] +set_location_assignment PIN_Y19 -to ARDUINO_IO[12] +set_location_assignment PIN_AB20 -to ARDUINO_IO[13] +set_location_assignment PIN_AB21 -to ARDUINO_IO[14] +set_location_assignment PIN_AA20 -to ARDUINO_IO[15] +set_location_assignment PIN_F16 -to ARDUINO_RESET_N +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V" +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top +set_global_assignment -name QIP_FILE ../pll/pll.qip +set_global_assignment -name SDC_FILE de10_lite.sdc +set_global_assignment -name VHDL_FILE ../../../alu/alu_types.vhd +set_global_assignment -name VHDL_FILE ../../../alu/alu.vhd +set_global_assignment -name VHDL_FILE ../de10_lite.vhd +set_global_assignment -name VHDL_FILE ../../../alu/m/M_types.vhd +set_global_assignment -name VHDL_FILE ../../../alu/m/M.vhd +set_global_assignment -name VHDL_FILE ../../../memory/dmemory.vhd +set_global_assignment -name VHDL_FILE ../../../memory/iram_quartus.vhd +set_global_assignment -name QIP_FILE ../../../memory/iram_quartus.qip +set_global_assignment -name VHDL_FILE ../../../decoder/iregister.vhd +set_global_assignment -name VHDL_FILE ../../../decoder/decoder_types.vhd +set_global_assignment -name VHDL_FILE ../../../decoder/decoder.vhd +set_global_assignment -name VHDL_FILE ../../../core/core.vhd +set_global_assignment -name VHDL_FILE ../../../registers/register_file.vhd +set_global_assignment -name VHDL_FILE ../sdram_controller.vhd + +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/peripherals/sdram/sint/de10_lite.qws b/peripherals/sdram/sint/de10_lite.qws new file mode 100644 index 0000000000000000000000000000000000000000..996fe0a5a33682bb53577e29e79f0c7c0eb4dceb GIT binary patch literal 619 zcmbV}%`OB%6opUsSlCEBfQ5xfN76DgMq()zR#=EVqq~PmqsM40#4~vi8(Ys}{CubM zBoZQ_D!0zP)wk~bs(LfgbS&sheO;;6p>9=atdeNNUZ$c+iqIY1Dc8Dsm^Ifxsn&?Q zuB%&o+tezOW=PjbOWku!b;0 z^Ppv59ul3vP=7hE8-*6}+-E(_P{=lGn=}C;w^`^{BejmGyo(bC5A" +set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001 +set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993 +set_global_assignment -name FAMILY -value "Cyclone V" +set_global_assignment -name TRUE_WYSIWYG_FLOW Off +set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off +set_global_assignment -name STATE_MACHINE_PROCESSING Auto +set_global_assignment -name SAFE_STATE_MACHINE Off +set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On +set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On +set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off +set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000 +set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250 +set_global_assignment -name INFER_RAMS_FROM_RAW_LOGIC On +set_global_assignment -name PARALLEL_SYNTHESIS On +set_global_assignment -name DSP_BLOCK_BALANCING Auto +set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)" +set_global_assignment -name NOT_GATE_PUSH_BACK On +set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On +set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off +set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On +set_global_assignment -name IGNORE_CARRY_BUFFERS Off +set_global_assignment -name IGNORE_CASCADE_BUFFERS Off +set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off +set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off +set_global_assignment -name IGNORE_LCELL_BUFFERS Off +set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO +set_global_assignment -name IGNORE_SOFT_BUFFERS On +set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off +set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off +set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On +set_global_assignment -name AUTO_GLOBAL_OE_MAX On +set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On +set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off +set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut +set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed +set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name ALLOW_XOR_GATE_USAGE On +set_global_assignment -name AUTO_LCELL_INSERTION On +set_global_assignment -name CARRY_CHAIN_LENGTH 48 +set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32 +set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32 +set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48 +set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70 +set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70 +set_global_assignment -name CASCADE_CHAIN_LENGTH 2 +set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16 +set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4 +set_global_assignment -name AUTO_CARRY_CHAINS On +set_global_assignment -name AUTO_CASCADE_CHAINS On +set_global_assignment -name AUTO_PARALLEL_EXPANDERS On +set_global_assignment -name AUTO_OPEN_DRAIN_PINS On +set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off +set_global_assignment -name AUTO_ROM_RECOGNITION On +set_global_assignment -name AUTO_RAM_RECOGNITION On +set_global_assignment -name AUTO_DSP_RECOGNITION On +set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto +set_global_assignment -name ALLOW_SHIFT_REGISTER_MERGING_ACROSS_HIERARCHIES Auto +set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On +set_global_assignment -name STRICT_RAM_RECOGNITION Off +set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On +set_global_assignment -name FORCE_SYNCH_CLEAR Off +set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On +set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off +set_global_assignment -name AUTO_RESOURCE_SHARING Off +set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION Off +set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION Off +set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off +set_global_assignment -name MAX7000_FANIN_PER_CELL 100 +set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On +set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)" +set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)" +set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)" +set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off +set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GZ" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone 10 LP" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "MAX 10" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV GX" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix IV" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV E" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria 10" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V GZ" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GX" +set_global_assignment -name REPORT_PARAMETER_SETTINGS On +set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS On +set_global_assignment -name REPORT_CONNECTIVITY_CHECKS On +set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone 10 LP" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX 10" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV E" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix IV" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX II" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V GZ" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GX" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GZ" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV GX" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Cyclone V" +set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation" +set_global_assignment -name HDL_MESSAGE_LEVEL Level2 +set_global_assignment -name USE_HIGH_SPEED_ADDER Auto +set_global_assignment -name NUMBER_OF_PROTECTED_REGISTERS_REPORTED 100 +set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000 +set_global_assignment -name NUMBER_OF_SYNTHESIS_MIGRATION_ROWS 5000 +set_global_assignment -name SYNTHESIS_S10_MIGRATION_CHECKS Off +set_global_assignment -name NUMBER_OF_SWEPT_NODES_REPORTED 5000 +set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100 +set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On +set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off +set_global_assignment -name BLOCK_DESIGN_NAMING Auto +set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off +set_global_assignment -name SYNTHESIS_EFFORT Auto +set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On +set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off +set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium +set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GZ" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone 10 LP" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "MAX 10" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria 10" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V GZ" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX" +set_global_assignment -name MAX_LABS "-1 (Unlimited)" +set_global_assignment -name RBCGEN_CRITICAL_WARNING_TO_ERROR On +set_global_assignment -name MAX_NUMBER_OF_REGISTERS_FROM_UNINFERRED_RAMS "-1 (Unlimited)" +set_global_assignment -name AUTO_PARALLEL_SYNTHESIS On +set_global_assignment -name PRPOF_ID Off +set_global_assignment -name DISABLE_DSP_NEGATE_INFERENCING Off +set_global_assignment -name REPORT_PARAMETER_SETTINGS_PRO On +set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS_PRO On +set_global_assignment -name ENABLE_STATE_MACHINE_INFERENCE Off +set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off +set_global_assignment -name AUTO_MERGE_PLLS On +set_global_assignment -name IGNORE_MODE_FOR_MERGE Off +set_global_assignment -name TXPMA_SLEW_RATE Low +set_global_assignment -name ADCE_ENABLED Auto +set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal +set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS Off +set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0 +set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0 +set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0 +set_global_assignment -name PHYSICAL_SYNTHESIS Off +set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off +set_global_assignment -name DEVICE AUTO +set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off +set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off +set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On +set_global_assignment -name ENABLE_NCEO_OUTPUT Off +set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin" +set_global_assignment -name STRATIXIII_UPDATE_MODE Standard +set_global_assignment -name STRATIX_UPDATE_MODE Standard +set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "Single Image" +set_global_assignment -name CVP_MODE Off +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria 10" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Stratix V" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V GZ" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Cyclone V" +set_global_assignment -name VID_OPERATION_MODE "PMBus Slave" +set_global_assignment -name USE_CONF_DONE AUTO +set_global_assignment -name USE_PWRMGT_SCL AUTO +set_global_assignment -name USE_PWRMGT_SDA AUTO +set_global_assignment -name USE_PWRMGT_ALERT AUTO +set_global_assignment -name USE_INIT_DONE AUTO +set_global_assignment -name USE_CVP_CONFDONE AUTO +set_global_assignment -name USE_SEU_ERROR AUTO +set_global_assignment -name RESERVE_AVST_CLK_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_VALID_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_DATA15_THROUGH_DATA0_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name MAX10FPGA_CONFIGURATION_SCHEME "Internal Configuration" +set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name USER_START_UP_CLOCK Off +set_global_assignment -name ENABLE_UNUSED_RX_CLOCK_WORKAROUND Off +set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL Off +set_global_assignment -name IGNORE_HSSI_COLUMN_POWER_WHEN_PRESERVING_UNUSED_XCVR_CHANNELS On +set_global_assignment -name AUTO_RESERVE_CLKUSR_FOR_CALIBRATION On +set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC +set_global_assignment -name ENABLE_VREFA_PIN Off +set_global_assignment -name ENABLE_VREFB_PIN Off +set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off +set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off +set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off +set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off +set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground" +set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off +set_global_assignment -name INIT_DONE_OPEN_DRAIN On +set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA15_THROUGH_DATA8_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin" +set_global_assignment -name ENABLE_CONFIGURATION_PINS On +set_global_assignment -name ENABLE_JTAG_PIN_SHARING Off +set_global_assignment -name ENABLE_NCE_PIN Off +set_global_assignment -name ENABLE_BOOT_SEL_PIN On +set_global_assignment -name CRC_ERROR_CHECKING Off +set_global_assignment -name INTERNAL_SCRUBBING Off +set_global_assignment -name PR_ERROR_OPEN_DRAIN On +set_global_assignment -name PR_READY_OPEN_DRAIN On +set_global_assignment -name ENABLE_CVP_CONFDONE Off +set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN On +set_global_assignment -name ENABLE_NCONFIG_FROM_CORE On +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GZ" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone 10 LP" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "MAX 10" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria 10" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V GZ" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone 10 LP" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "MAX 10" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV E" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix IV" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria 10" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V GZ" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX II" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GZ" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone V" +set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On +set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto +set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix IV" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria 10" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix V" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria V GZ" +set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0 +set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On +set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation" +set_global_assignment -name OPTIMIZE_SSN Off +set_global_assignment -name OPTIMIZE_TIMING "Normal compilation" +set_global_assignment -name ECO_OPTIMIZE_TIMING Off +set_global_assignment -name ECO_REGENERATE_REPORT Off +set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING Normal +set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off +set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically +set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically +set_global_assignment -name SEED 1 +set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION OFF +set_global_assignment -name RESERVE_ROUTING_OUTPUT_FLEXIBILITY Off +set_global_assignment -name SLOW_SLEW_RATE Off +set_global_assignment -name PCI_IO Off +set_global_assignment -name TURBO_BIT On +set_global_assignment -name WEAK_PULL_UP_RESISTOR Off +set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off +set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off +set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On +set_global_assignment -name QII_AUTO_PACKED_REGISTERS Auto +set_global_assignment -name AUTO_PACKED_REGISTERS_MAX Auto +set_global_assignment -name NORMAL_LCELL_INSERT On +set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone 10 LP" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX 10" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix IV" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV E" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria 10" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX II" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V GZ" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GX" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GZ" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV GX" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone V" +set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS OFF +set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off +set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off +set_global_assignment -name AUTO_TURBO_BIT ON +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off +set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off +set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off +set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off +set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On +set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off +set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off +set_global_assignment -name FITTER_EFFORT "Auto Fit" +set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal +set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION Auto +set_global_assignment -name ROUTER_REGISTER_DUPLICATION Auto +set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off +set_global_assignment -name AUTO_GLOBAL_CLOCK On +set_global_assignment -name AUTO_GLOBAL_OE On +set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On +set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic +set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off +set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off +set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off +set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off +set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off +set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off +set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up" +set_global_assignment -name ENABLE_HOLD_BACK_OFF On +set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto +set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off +set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Auto +set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On +set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone 10 LP" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "MAX 10" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone IV E" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria 10" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Stratix V" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V GZ" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Cyclone V" +set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria 10" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Stratix V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Cyclone IV GX" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V GZ" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Cyclone V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Arria II GX" +set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off +set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On +set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off +set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off +set_global_assignment -name PR_DONE_OPEN_DRAIN On +set_global_assignment -name NCEO_OPEN_DRAIN On +set_global_assignment -name ENABLE_CRC_ERROR_PIN Off +set_global_assignment -name ENABLE_PR_PINS Off +set_global_assignment -name RESERVE_PR_PINS Off +set_global_assignment -name CONVERT_PR_WARNINGS_TO_ERRORS Off +set_global_assignment -name PR_PINS_OPEN_DRAIN Off +set_global_assignment -name CLAMPING_DIODE Off +set_global_assignment -name TRI_STATE_SPI_PINS Off +set_global_assignment -name UNUSED_TSD_PINS_GND Off +set_global_assignment -name IMPLEMENT_MLAB_IN_16_BIT_DEEP_MODE Off +set_global_assignment -name FORM_DDR_CLUSTERING_CLIQUE Off +set_global_assignment -name ALM_REGISTER_PACKING_EFFORT Medium +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION Off -family "Stratix IV" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria 10" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Stratix V" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V GZ" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Cyclone V" +set_global_assignment -name RELATIVE_NEUTRON_FLUX 1.0 +set_global_assignment -name SEU_FIT_REPORT Off +set_global_assignment -name HYPER_RETIMER Off -family "Arria 10" +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ADD_PIPELINING_MAX "-1" +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ASYNCH_CLEAR Auto +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_USER_PRESERVE_RESTRICTION Auto +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_DSP_BLOCKS On +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_RAM_BLOCKS On +set_global_assignment -name EDA_SIMULATION_TOOL "" +set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" +set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" +set_global_assignment -name EDA_RESYNTHESIS_TOOL "" +set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On +set_global_assignment -name COMPRESSION_MODE Off +set_global_assignment -name CLOCK_SOURCE Internal +set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz" +set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1 +set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On +set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off +set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On +set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF +set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F +set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name USE_CHECKSUM_AS_USERCODE On +set_global_assignment -name SECURITY_BIT Off +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone 10 LP" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX 10" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX V" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GZ" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX" +set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto +set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto +set_global_assignment -name PWRMGT_SLAVE_DEVICE_TYPE "PV3102 or EM1130" +set_global_assignment -name PWRMGT_SLAVE_DEVICE0_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE1_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE2_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE3_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE4_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE5_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE6_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE7_ADDRESS 0000000 +set_global_assignment -name PWRMGT_VOLTAGE_OUTPUT_FORMAT "Auto discovery" +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_M 0 +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_B 0 +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_R 0 +set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto +set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto +set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto +set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto +set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto +set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto +set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On +set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off +set_global_assignment -name GENERATE_TTF_FILE Off +set_global_assignment -name GENERATE_RBF_FILE Off +set_global_assignment -name GENERATE_HEX_FILE Off +set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0 +set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal" +set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off +set_global_assignment -name AUTO_RESTART_CONFIGURATION On +set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off +set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off +set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone 10 LP" +set_global_assignment -name ENABLE_OCT_DONE On -family "MAX 10" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV E" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria 10" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Stratix V" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V GZ" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria II GX" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV GX" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone V" +set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT OFF +set_global_assignment -name ARRIAIIGX_RX_CDR_LOCKUP_FIX_OVERRIDE Off +set_global_assignment -name ENABLE_AUTONOMOUS_PCIE_HIP Off +set_global_assignment -name ENABLE_ADV_SEU_DETECTION Off +set_global_assignment -name POR_SCHEME "Instant ON" +set_global_assignment -name EN_USER_IO_WEAK_PULLUP On +set_global_assignment -name EN_SPI_IO_WEAK_PULLUP On +set_global_assignment -name POF_VERIFY_PROTECT Off +set_global_assignment -name ENABLE_SPI_MODE_CHECK Off +set_global_assignment -name FORCE_SSMCLK_TO_ISMCLK On +set_global_assignment -name FALLBACK_TO_EXTERNAL_FLASH Off +set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 0 +set_global_assignment -name GENERATE_PMSF_FILES On +set_global_assignment -name START_TIME 0ns +set_global_assignment -name SIMULATION_MODE TIMING +set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off +set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On +set_global_assignment -name SETUP_HOLD_DETECTION Off +set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off +set_global_assignment -name CHECK_OUTPUTS Off +set_global_assignment -name SIMULATION_COVERAGE On +set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On +set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On +set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On +set_global_assignment -name GLITCH_DETECTION Off +set_global_assignment -name GLITCH_INTERVAL 1ns +set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off +set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On +set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off +set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On +set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE +set_global_assignment -name SIMULATION_NETLIST_VIEWER Off +set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT +set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT +set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off +set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO +set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO +set_global_assignment -name DRC_TOP_FANOUT 50 +set_global_assignment -name DRC_FANOUT_EXCEEDING 30 +set_global_assignment -name DRC_GATED_CLOCK_FEED 30 +set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY +set_global_assignment -name ENABLE_DRC_SETTINGS Off +set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25 +set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10 +set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30 +set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2 +set_global_assignment -name MERGE_HEX_FILE Off +set_global_assignment -name GENERATE_SVF_FILE Off +set_global_assignment -name GENERATE_ISC_FILE Off +set_global_assignment -name GENERATE_JAM_FILE Off +set_global_assignment -name GENERATE_JBC_FILE Off +set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On +set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off +set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off +set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off +set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off +set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On +set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off +set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state" +set_global_assignment -name HPS_EARLY_IO_RELEASE Off +set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off +set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off +set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5% +set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5% +set_global_assignment -name POWER_USE_PVA On +set_global_assignment -name POWER_USE_INPUT_FILE "No File" +set_global_assignment -name POWER_USE_INPUT_FILES Off +set_global_assignment -name POWER_VCD_FILTER_GLITCHES On +set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off +set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off +set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL +set_global_assignment -name POWER_AUTO_COMPUTE_TJ On +set_global_assignment -name POWER_TJ_VALUE 25 +set_global_assignment -name POWER_USE_TA_VALUE 25 +set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off +set_global_assignment -name POWER_BOARD_TEMPERATURE 25 +set_global_assignment -name POWER_HPS_ENABLE Off +set_global_assignment -name POWER_HPS_PROC_FREQ 0.0 +set_global_assignment -name ENABLE_SMART_VOLTAGE_ID Off +set_global_assignment -name IGNORE_PARTITIONS Off +set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off +set_global_assignment -name RAPID_RECOMPILE_ASSIGNMENT_CHECKING On +set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End" +set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On +set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On +set_global_assignment -name RTLV_GROUP_RELATED_NODES On +set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off +set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off +set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On +set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On +set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On +set_global_assignment -name EQC_BBOX_MERGE On +set_global_assignment -name EQC_LVDS_MERGE On +set_global_assignment -name EQC_RAM_UNMERGING On +set_global_assignment -name EQC_DFF_SS_EMULATION On +set_global_assignment -name EQC_RAM_REGISTER_UNPACK On +set_global_assignment -name EQC_MAC_REGISTER_UNPACK On +set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On +set_global_assignment -name EQC_STRUCTURE_MATCHING On +set_global_assignment -name EQC_AUTO_BREAK_CONE On +set_global_assignment -name EQC_POWER_UP_COMPARE Off +set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On +set_global_assignment -name EQC_AUTO_INVERSION On +set_global_assignment -name EQC_AUTO_TERMINATE On +set_global_assignment -name EQC_SUB_CONE_REPORT Off +set_global_assignment -name EQC_RENAMING_RULES On +set_global_assignment -name EQC_PARAMETER_CHECK On +set_global_assignment -name EQC_AUTO_PORTSWAP On +set_global_assignment -name EQC_DETECT_DONT_CARES On +set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off +set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ? +set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ? +set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ? +set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ? +set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ? +set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ? +set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ? +set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ? +set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ? +set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ? +set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "" -section_id ? +set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ? +set_global_assignment -name EDA_ENABLE_IPUTF_MODE On -section_id ? +set_global_assignment -name EDA_NATIVELINK_PORTABLE_FILE_PATHS Off -section_id ? +set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ? +set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ? +set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ? +set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ? +set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ? +set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ? +set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ? +set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ? +set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ? +set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY OFF -section_id ? +set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST Off -section_id ? +set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ? +set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ? +set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ? +set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ? +set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ? +set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ? +set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ? +set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ? +set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ? +set_global_assignment -name EDA_IBIS_EXTENDED_MODEL_SELECTOR Off -section_id ? +set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ? +set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ? +set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ? +set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ? +set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ? +set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 4p2 -section_id ? +set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ? +set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ? +set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name PARTITION_PRESERVE_HIGH_SPEED_TILES On -section_id ? -entity ? +set_global_assignment -name PARTITION_IGNORE_SOURCE_FILE_CHANGES Off -section_id ? -entity ? +set_global_assignment -name PARTITION_ALWAYS_USE_QXP_NETLIST Off -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS UPDATE_CONFLICTING -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ? +set_global_assignment -name ALLOW_MULTIPLE_PERSONAS Off -section_id ? -entity ? +set_global_assignment -name PARTITION_ASD_REGION_ID 1 -section_id ? -entity ? +set_global_assignment -name CROSS_BOUNDARY_OPTIMIZATIONS Off -section_id ? -entity ? +set_global_assignment -name PROPAGATE_CONSTANTS_ON_INPUTS On -section_id ? -entity ? +set_global_assignment -name PROPAGATE_INVERSIONS_ON_INPUTS On -section_id ? -entity ? +set_global_assignment -name REMOVE_LOGIC_ON_UNCONNECTED_OUTPUTS On -section_id ? -entity ? +set_global_assignment -name MERGE_EQUIVALENT_INPUTS On -section_id ? -entity ? +set_global_assignment -name MERGE_EQUIVALENT_BIDIRS On -section_id ? -entity ? +set_global_assignment -name ABSORB_PATHS_FROM_OUTPUTS_TO_INPUTS On -section_id ? -entity ? +set_global_assignment -name PARTITION_ENABLE_STRICT_PRESERVATION Off -section_id ? -entity ? diff --git a/peripherals/sdram/sint/de10_lite_description.txt b/peripherals/sdram/sint/de10_lite_description.txt new file mode 100644 index 00000000..e69de29b diff --git a/peripherals/sdram/testbench_sdram.do b/peripherals/sdram/testbench_sdram.do new file mode 100644 index 00000000..3900bedb --- /dev/null +++ b/peripherals/sdram/testbench_sdram.do @@ -0,0 +1,42 @@ +# cd C:/Users/Cleissom/eclipse-workspace/riscv-multicycle/sdram + +#Cria biblioteca do projeto +vlib work + +#compila projeto: todos os aquivo. Ordem é importante +vcom sdram_controller.vhd ./sim/mti_pkg.vhd ./sim/mt48lc8m16a2.vhd testbench_sdram.vhd + +#Simula +vsim -t ps work.testbench_sdram + +#Mosta forma de onda +view wave + +add wave -height 15 -divider "SDRAM" +add wave -label clk_sdram /clk_sdram +add wave -label chipselect_sdram /chipselect_sdram +add wave -label sdram_addr -radix hex /sdram_addr +add wave -label DRAM_ADDR -radix hex /DRAM_ADDR +add wave -label d_we /d_we +add wave -label sdram_d_rd /sdram_d_rd +add wave -label ddata_w -radix hex /ddata_w +add wave -label sdram_read -radix hex /sdram_read +add wave -label DRAM_DQ -radix hex /DRAM_DQ +add wave -label burst /burst +add wave -label mem_state /sdram_controller/mem_state +add wave -label d_read /sdram_controller/d_read + + +add wave -radix unsigned -label DRAM_ADDR /DRAM_ADDR +add wave -radix unsigned -label DRAM_CS_N /DRAM_CS_N +add wave -radix unsigned -label DRAM_CKE /DRAM_CKE +add wave -radix unsigned -label DRAM_RAS_N /DRAM_RAS_N +add wave -radix unsigned -label DRAM_CAS_N /DRAM_CAS_N +add wave -radix unsigned -label DRAM_WE_N /DRAM_WE_N +add wave -radix unsigned -label DRAM_DQ /DRAM_DQ + +#Simula até um 500ns +run 5000ns + +wave zoomfull +write wave wave.ps \ No newline at end of file diff --git a/peripherals/sdram/testbench_sdram.vhd b/peripherals/sdram/testbench_sdram.vhd new file mode 100644 index 00000000..f08dc31e --- /dev/null +++ b/peripherals/sdram/testbench_sdram.vhd @@ -0,0 +1,133 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity testbench_sdram is +end entity testbench_sdram; + +architecture RTL of testbench_sdram is + signal sdram_addr : STD_LOGIC_VECTOR(31 DOWNTO 0); + signal chipselect_sdram : STD_LOGIC; + signal clk_sdram : STD_LOGIC; + signal rst : STD_LOGIC; + signal d_we : STD_LOGIC; + signal sdram_d_rd : std_logic; + signal ddata_w : STD_LOGIC_VECTOR(31 DOWNTO 0); + signal burst : std_logic; + signal sdram_read : STD_LOGIC_VECTOR(15 DOWNTO 0); + signal waitrequest : std_logic; + signal DRAM_ADDR : std_logic_vector(12 downto 0); + signal DRAM_BA : std_logic_vector(1 downto 0); + signal DRAM_CAS_N : std_logic; + signal DRAM_CKE : std_logic; + signal DRAM_CLK : std_logic; + signal DRAM_CS_N : std_logic; + signal DRAM_DQ : std_logic_vector(15 downto 0); + signal DRAM_DQM : std_logic_vector(1 downto 0); + signal DRAM_RAS_N : std_logic; + signal DRAM_WE_N : std_logic; + +begin + + -- SDRAM instatiation + sdram_controller : entity work.sdram_controller + port map( + address => sdram_addr, + byteenable => "11", + chipselect => chipselect_sdram, + clk => clk_sdram, + clken => '1', + reset => rst, + reset_req => rst, + write => d_we, + read => sdram_d_rd, + writedata => ddata_w, + burst => burst, + -- outputs: + readdata => sdram_read, + waitrequest => waitrequest, + DRAM_ADDR => DRAM_ADDR, + DRAM_BA => DRAM_BA, + DRAM_CAS_N => DRAM_CAS_N, + DRAM_CKE => DRAM_CKE, + DRAM_CLK => DRAM_CLK, + DRAM_CS_N => DRAM_CS_N, + DRAM_DQ => DRAM_DQ, + DRAM_DQM => DRAM_DQM, + DRAM_RAS_N => DRAM_RAS_N, + DRAM_WE_N => DRAM_WE_N + ); + + -- SDRAM model instatiation + sdram : entity work.mt48lc8m16a2 + generic map( + addr_bits => 13 + ) + port map( + Dq => DRAM_DQ, + Addr => DRAM_ADDR, + Ba => DRAM_BA, + Clk => clk_sdram, + Cke => DRAM_CKE, + Cs_n => DRAM_CS_N, + Ras_n => DRAM_RAS_N, + Cas_n => DRAM_CAS_N, + We_n => DRAM_WE_N, + Dqm => DRAM_DQM + ); + + clock_driver : process + constant period : time := 10 ns; + begin + clk_sdram <= '0'; + wait for period / 2; + clk_sdram <= '1'; + wait for period / 2; + end process clock_driver; + + end_gen : process + begin + sdram_addr <= x"00000000"; + chipselect_sdram <= '1'; + rst <= '1'; + d_we <= '0'; + sdram_d_rd <= '0'; + ddata_w <= x"00000004"; + burst <= '0'; + wait for 10 ns; + rst <= '0'; + wait for 200 ns; + burst <= '1'; + wait for 100 ns; + + d_we <= '1'; + ddata_w <= x"00000000"; + sdram_addr <= x"00000000"; + wait for 100 ns; + d_we <= '0'; + wait for 100 ns; + + d_we <= '1'; + ddata_w <= x"00000001"; + sdram_addr <= x"00000001"; + wait for 100 ns; + d_we <= '0'; + wait for 100 ns; + + d_we <= '1'; + ddata_w <= x"00000003"; + sdram_addr <= x"00000003"; + wait for 100 ns; + d_we <= '0'; + wait for 100 ns; + + sdram_d_rd <= '1'; + sdram_addr <= x"00000000"; + wait for 100 ns; + sdram_d_rd <= '1'; + wait for 100 ns; + + wait; + end process; + +end architecture RTL; diff --git a/peripherals/vga/README.md b/peripherals/vga/README.md new file mode 100644 index 00000000..a3b6ecba --- /dev/null +++ b/peripherals/vga/README.md @@ -0,0 +1,29 @@ +# VGA + +O controlador VGA está padronizado para a resolução 800x600 a 60Hz. +Para alterar a resolução, instanciar o controlador conforme 'timings' dos [Padrões VGA](http://tinyvga.com/vga-timing). +O controlador VGA necessita de uma RAM Dual Channel e de um PLL de 40MHz, conforme esquemático: +![RTL](https://drive.google.com/file/d/1flgcUsC5myYFzawOMX-cEWR_tmpqch94/view?usp=sharing) + +## Integração com o CORE +Para o CORE não gravar duplicado (na RAM de dados e na RAM da VGA), é necessário incluir o código seguinte e ligar os respectivos sinais as memórias: +```vhdl +process(dcsel, d_we) +begin + if dcsel = "11" then + wren_vga <= d_we; -- write to vga + wren_dm <= '0'; + else + wren_vga <= '0'; + wren_dm <= d_we; -- write do data memory + end if; +end process; +``` + +## To Do +Se a memória não suportar dados de um frame inteiro, o controlador irá repetir os dados da memória. Porém, com uma memória de 8kb é possível fazer uma imagem de 90x90 pixels. Os arquivos 'reescale' intentam fazer isso, incrementando o endereço da memória somente quando o pixel está dentro da linha e da coluna, e colocando preto quando estiver fora. + +### Links Úteis +[Controlador VGA VHDL](https://www.digikey.com/eewiki/pages/viewpage.action?pageId=15925278) + + diff --git a/peripherals/vga/RTL/VGA-rtl.png b/peripherals/vga/RTL/VGA-rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..8bab94a2d2ae84de59ce66052772a2d544a43912 GIT binary patch literal 29635 zcmeFZ^;^_k`!)(ANXrlo-7SNFAT2#04WclB)X)k7B1lU!Fr-L>D6QmBA|*9|N{Doa zN(lmjfaG4|^L^g;J&wKivHyYn%kAxbe`0;EwXQnP^O_h#eN8HIW^w`o0xGTB>URhT zAQ%Dy!eY|P;J?s|4WbALI0>}WRqpy)ZRV0S>W!WBE(9~N2u9o}EWCla9Yv4WQ|4Av zFVMcrtjnY$#Qn8U_bT7l@62LY|o2~lo+HBDW2$(GhBzK3Y(@q=hM*+g%H1Z)j^GUN5t9r?BeX{pIY0l%Vst9 zF`JWEwZU75_g!WivEK)>CuXipF_R?`kVQlg;83?A2#EqUn@=xF>mqMh+{r8WHbYCi%G2eW^Yii|JWDEPsO3O(|yOT$N%fE=5xe|$gP8!~u%MU*_DJ(?p}u*|e7&7{KojSB&sR~f&S%rPGPw>;5xV*^K>zxO)5k&<4e*cPlafOI5DCI6sKwbNGYM|Q<~=)q|77h; zhrNW01q4!{nV5F`=chzhUvoIo?RI~#lJV$_D_Pn$BgJ~Z`z40@=AJINy^X08CV?a> z9+%DrpKRS}@%60XCIlb+kjxNn&SEa-C>PohPV#v`dcn0Rvu+zobg;c3D%!FGAy(R^ z1=p3~uVb^4bGjD##<=9#2(y%{Gya)c5DCZrBw)>tS55CH+f!L-K!8D(xRtStmA=E~ z6r?s?Zsq>JCaUs?=f4m`*QRPqD4A}k|Nj0_jgvP?91_jugX}qW?De60g{+fr+aFYh zxVP*^$%PjA|Jk@~u9@3zOTi?6s40M~ROn3>Ui8x`N>Uq)UWwS6Pq65J~4RA?0u$F|QTfkJ-|q(fJ~nhZ(b>NcFVrNTL>A!&l0L zu?W%78WGyQnD#HP)rx$!rZ-NVV9liE=JnbuLwTaP@=qH+i~G|tL!cP>r@tuUTO}n~ ziO6B_+gQc~!(nX;(*3O&(<~{sYrP!LT12i7Cq5&yN%`Y4Qmj>F)!G+9bVHQ@wL4+` zY~c37=BO2*M}KMLa}ze+V39C{m&~rdlT50*0Xb`bzT|1 zR;9-rM5VvXyiL%1;wkZnj^|svUTeUi$!bt-k}^N3GW^j(+bufFS_2Fj{q_49sNvgmlQ`t+->mdk1#L~Y;eiu=NsL+NWySW))@?;7} zi{bt7X{KpIUt;Xh-jGssrwKC?JEWKGDJu@;+lkO|<0QaNmKbob+<#3?M#|a18nsf9 zECfucbhd9?+~o8jjaJaSP7rK2w#Xt1JXrl82B#0{W1iuKc}{;RH>)K&2?yJt1gqP$ zdMELAX_p-3`E$HtNjxJhDoh!R!U@9EXoQ$usK7oxRL%TCGtKj=bHh}s zC$$KK=iENQ`DvqKi0t#7H=43~Bgp7RqxPX$ZZi$3P2NA>J~%r$Opl^sd3*6K(CtMG zoq+b(+j|aQ3$?_PV}I^DIUQ_HVUK<0wbuQJv5kIvEBn`KVPy7d1kty5T%G6Hd7+$y zXvE7M8qS@N=CD^-EjYybG)W@Zy4F!I;Sjqg=eqi}K$DtD#^Y7X#rX;LcyPkB^1jfY zjWIgXj*YQ0VI#AAb+WOjqA*O)!^=C??a^^@lC49P( z&#wNe^4ZX>L*6;3+wLqw{ZYu-M$ZDLEi4x;0b!tvon!JLgpBBR2ufUel4EzWT|aUW8c0ZP(%aNXdueaH&Ia zc`Q1Pds?;QBE{0iZajA>{$}&j?KF_E9A+51mqBoEU5~3sYX3l_oqk;p+t(aQ6vj({ zJ!-#1O*F-KLY~y#MXlsogp8Q%GW5v2;c#BNit_RG&RriVDbvXj&d61p@pt}fh!PKW z@V;xRW*z+Z$Ab?#@LwHon0JX$o^ws!g!8+b*T{+V6?WBQae_oyidkwQsNo#sk!?%` zYWSha{ox$;VGs{K=}FJ=UYsmk6oMo7`{-Mu6HPo6^Khb4ugY_rJJgkQQHPtMap!TXHf8fHJq=WcEIqis!l`gd+K z#aSImb;gpa@bjH6>PO8sL9~6Ui-jrr`N;3LR6ty4=NLZu)hya~eabY1h~4iyjnLgv z!;o7wWu-L8rYCO#_lGq%c-bsDnP=)Bmb8`HQ0u~Icb*fhuuIgg@fkHBAhJ-9WlmtB z$nJL@;D2G-XWx7M2&Yy|`fz@%Sj_=B>C4J<|whtFw6$T;WC zb)P7(x$_{eGi~I~9qTO)YjVW*i`6Z_r-D)VxEr@Q`(A>d*3(D2Sn2!66iqS8Gmv^| z*vNdfUx5rsk9kS!V8@%J?ufN`_vpL55I*A?!_Ap3=w>^`Bob6+o1a$6Ao3fiP`fkk zA8vNsowlI~H8!}FiW<)M{hA7eDm&6-Q`SyuErN2Q09hwdr{U{8aC71|2veiiob749 zQGocu{?9?HlNDFt{#q~Gl9g#Q5wVB>cRKJ7yN6*;7pHrP(^3M>5NzY)AKG-fMN}{v znX~8C8k#v_D71)C+?eRyx^b8kx1uYua{HqDW3+EHF?}Nr7bnI9z zzvG0Zi(0c^Hg>T?lY$NBDnqLGT-syf*UjJrl^J=mu;f)DvGw;Cift=bAoT4&(N z)8%-zwM) z`KOPj>RjleU#ii!?7K%ZMy_v5~?qA z!@z1*u(kLYELOi&z0?)W(S9f3ic&z#cwB@3!KToWMhH$D?g#~`t|uLs0OY9>{84$m zLyn@MU^lznt^>JOW|G=9UH|auD~)*OuQd)jqBD*bm!a)-5K65$_FK~g51k>v3e!Ox zlf1BZ?hDr|EZ(JAwfbv;P+=F^<>fGtb#ucTSPI0>W_i4iDc3(3`(FL_UKxA44|PU+ zABusH6yZwH>anES%u0a;1;;G4L^ol7$CFKiho2uf$KrP8N}!m)`DoEc#TIcvIn==4 z=0hi}0tTK~xL9WqWl6hV2UWXvtyGzx9w=}?V{zDI*5E`MO2eaJ2tQ}R$a<~ZZuS2& z>aLe1X+$9?{=?<;XgBQMx4(Oh<0{vff7#zhM1v8<7OT; zi%dh|2f^R_lIbzr5YK2)M9}d*O^$Hc)9J>YP71oV`8t=8$@2o}bEv{mj&7Eu76{iB z^ABelDwwaViuoRJaH4Twbrz>&1rIYhL*B${!yipnbJ3mE4iS*PxOOiVB~CE-(FdFi z_!|!^rvjw9lxUkwZEy_tRZ&>(#QyezH7L6U`%Lh4(N_?TGdRnwKeS~Dtd}P?L38`2 zZ)E$f4H0)QgKCg%kea$eDy==!>7}0`ywdu^Jd(#HLmqNuGT5IlA7wQjh5WwpL^LLA zY#c-wT>tV1t`4ZgK>%*!{_LUu8dKMZgwx=Qhn4R&s8kL?0XpX4NS%xFoM~`_gvP{i z<4}Vr&-oTV#~?vxy*0AYaMF(fUcuCh zmW!F14~C%^dhS5MQ5T5_kTYI)AyAtK$rJ>9wO_;o((&zPPPyK|GFGkAk~7YUnna({ zM0BugG&-VL!12TK-@AcR_RN)YW4g|zz{=x_+P9~a2zgTkhc;YQS1!8l&!-1hv@Q<4 zKpy^)Zq0uhvbIj(OQ*_?i8lm!FX)dvdCl@P7DUX4~-p1eYy{%YQS zUeWbaRf9m9LjtoxMD@fU+cX9ZTGH$M#U6Fp3ZDle7yTSg^haQ%)T8n4|F?u>3$_ z>3eXw=(o#<*0mDMBogqW%Y7(;P^Y{gsT-)__lc-L$yy7M3JG-M%dWmR&o1LT>5gA~ zjYHLIoNdZ*?v(UWWd$4Z{=chvq8~2K1K`=D9gjij@Hvi2f+*9IR0K`mQW;&x)z0~V zb2{mbn(XgBp46jGC|_lyum3KN;hy7eC<%L#xLr>li+juK%19YR1NBs$TKx&=&`N(M zCwJc}MC3M*G*~`6`vajNB_s_nT1;=aHGjD!v5jlLI@+nsq~b+s1RK7g^QZ0{nVSEW zsPwYv*#O;H+v)Gm8?DPYOfRy|eZh)7_{bJ_<-lcpn%_xbk>yuV|1fUh);>j4ADa78 z>@n2Gmm|330mW%(e6>n1@!7-czEo1(2GL)|^`C5yzA;_}K8ZykHlB(+j0jWy`}>Cw zj4GDCdpTZu-Z=>&iPM4feG&Ut8vWoEbDNf|U*Oe_B)>`|a9I|?)6K0O=!2rc{Nzll zCS3t%$s}DR&L;1(CP&cSYGn!t6{HxPO!1{~e_!g4B&;s)pRC{E%P_1X2+xS%?D%L4 zWfvUu;S7B4CT+Ar?Z#6({oc!oFY1X>AL9eUXn*rB-ap6nVyJ6)VNb z%jLuMeK8T%)nvW8J$X)c`UNJV94Gr;<{P0BzT+4RK1FHnM^bHoUbHMiK>KY&`?!#C zaraTXz6dP0;oHptBFtdUvcma!$9b_f{JM2pPTp-Dvc*u8s-yTY8RgO9PpzH7es0xJ z_j{9uvkiMrLNJlDS7$$Axcs@@n;r7HBF7+Wqzd(s$^io`Z%)ZXnorSw1BIcexfABf$IHD+|?)}E?3&CXcE?r$yz6a zn+y7RM%$-sCEs5y-a6$lQz2zKlPmtRh7)VNjG_^aOn%`!QJKrEi1Q{DmL51?Tl@ zqh1vZ!pU`qIXF5)BhSXaG>o#07PAnzr^mk?bg;z}`e5v>!+kjFie5e)<1&u>&K%=% zJCs6k6jUgO$-0hNQOGCFH^d~;YA5VT7neTEVm>A<-(08d%awn(IrC1GpOyn)Ztrw4&f5N)A&r z%-MdOXg?FrfN8oO!F7DLSvz#sLO+1ZH_0+GsP9XM59zJbc6L(Tz+|-*D#cEdx^QAH z^SeDW@pR~%b5)NpmJMh9H3lVTYU8rHpeAdP@%BqnoL$lHW7qZohS^Vh?Wh*io`0A( zpWe_JgRzm!eUOmyzug9)tJwIF9`(a3D_+;IrSUq4D-O53$Z|Y;n3xzaZ|q^aTa4?0 z7VpMhAteuMmm?hj;Ad#hGDV{dBc-?_);l0X`{xf71F%HT1{4jG2>KGGuqu)5uh+0U zax;;x`7oj5HD&vbCu!nlSW-erXc#dYGU6LOO13`Rd5}8-7Lhg2z`SMa@D65s-1_-? zvo4v`TvP+$gp1M>3uwAI^r4jV$W(fRCB-$g(|t^sZsi~W_azFczGKugI}z>NjxYDc z2gtWvIud-^$=YOR;toa3EOI)B*wru()GpP zlVatQ&An8`P{M`E%T&yTcm56%Uq5;!XYj0AND_+iWyFJ0)Pat$t+)y@tEJ2s7rCi{ zm`G%IiyX|0%m%}4&juigmtqAZ!|V5*U)+`<*|O}4qN0w)aZ3(#y!nyY^o5b9u;k-83wq5FV zsZC0?4(ViF48lYE2}I4O?6vsmrh<+XWll;x&EfECliVMpSEOcfQZz@7n0v`hHj$id z`?k;Jq8^C-Wjn0hn|)e7+O_g_Fn>mVuU}%!ep3Os??ctV>|XW&*YXcJn}h2?tdt=q zT=Q)?8%sf>h#msn9mVpP-x&Dxg@1(%q`G{+QM*J1<@k7tMcO{|WNUA~{ClQl6w^dgl=IF5g zM}|Ve^Gyh09cIkpNQI3EqI%VH50a3@so&Z)2UyU>{O$#Y`2_RIH4La81dD`?ck|K%Mlpv!f-d)#p&QwnQ*3x~Q< z*z*4JAypKOSX{!uy>A!`Y$-8&jYs2QHSJfS22Spjt2#|q07r0`s&O#uc4(Q)K*vXF zHVth$FUg(tl22)iOg;$;#DL|$vsuYB4|Tx52jBYwgM@f#!CZLiiu?cvxavV&b=VLq3T9=#TCWX+bUJd&8^nSF`=HxD`aJbn0 zSW1$HoQ@O5>8@Z+XH5guvEH>)uuIpBV{&)C4ULSR$qxnXhdb%JEoZRD;&KH24i&p0 zQDKLGf${aQYbGvnjzEsm<&SJ#%_oD9TJUlfL@(?zecj90;Uhb=)K_b2Vs9f_zxpDk z##7EKCjOzfltl8DzDmp?7sQ*bC3;DGGA@N8XIrIC&MoSwOTi?tdHhT^sC#u(2)&D- znkd*h>gQJ6Hvg^)?XiC6IKYe(X^wmFR=l(Ou_Mg5sOM)ZcZk!K12TI&1Y#q48`xrI zcMfk0|6UKLncZfr8k~O`$7XjbC_C_1)dxC7L3!)vU!BtMwp=&0{iVd_`R+UJVPv+Y z(mmx?txcb1WvoY}*4P$zqo=^Zs~@3m+jT?9XKgmzA%GRj3EX!O!3^6hYjL8z9`YF3IW~h0v#XB zX&~!|Lvyq%MHm$~)gFen;8y-Sezjy3g5 z%kf6pSS+u-W%Zp2AsE-S+~&$lybV{CKYsksu6!{=({S77qXOY(d{jAGu~_3(jQ(!K zz@21V0z>p}=XEO&97bD2*;`&8^%0Fz|MLyUO~fwsCvs8;0q5UPV#1e}I$R?C!~hV*I21??;OVw$|Q? z04+neKsU;#?Qe%fi4+%qCjdZ443yru4)?^fjERXfjH={xB6BhkXsDATjrCp7S$~@r zAr+r}D8m4AYPLIPzY!Kwq5PUgvsZQ(U1)IRT&`dE~ zhy>;lS55FV(N1{>%IF_3?DNbBgf%^d)=k}akz_xim_a>>+%wjVAiPsM45rs6c&X{O z(%p(m6c1&eP$Am5;ISx>K8w(UV%8@7a_1wAtAY_GT$yuU&K9#Qv!Q*qP|WUuor3}q zFN{6%&6+Gm##RNRUjAr=xU1TV)d8JC#95tmvn%P^;MDk(_!+yDy=D{}@zi6q+Wi24 zfR>&#dMtICZP*UOZUkp|ktMIdW2WOium>qaH|EHbmZA;AsRj>iR?Di|-eyJ5?SKkT zR|}AhCJQbk$6+#2JKg9`Zj=9N0Y14o1qG^%PN>1<7S!0>=xXw&ELZP2(pV^ZGRo=Z zA)8%s5+ti?|FFdCZAZ)DDDl3aOwN}5rMZ|J7+>pciNahQ2g~VFI|t#d^74hQ*-ka8 zpX+vk`!`vnTn#mcmZ;IS*DJfa1JDT8l<=UL>X;{Q?i7v2>gpzFvJC#*U&(}Gj@0Pg zr4MBK_pP)TA5#EGD=^uz`@X#ECAze*xSI*>o%uo~x1Yo!HlMCFa7r8iT;z>k2=qSG zZ1DGL-m|ysjQ*9}^J?Qz)hmZLGI}P$IlE6a(7L3bj-Hq5m2>)#e+JCCKpM7Nqq2#u zr4qps_1#updv9f6?87tz+N{4Uf^FALP3!>|`lq4kkadJoBRkmfhI$!d;Q@o0#Z+W> zI!i3#-BanGB|3oJ%DegRT)h0I4S#ISFN)0?gLS(jaoo368#zB?&cwP5lRkEOJn$jT zM2L2y7?JA38h|g+m}AZ3f+gde@Bxz3wxpXoeL5g!th|BqekUA;^=}1m|F|m&@Uqr( zJeD=bkYQFQ(O`>5WcM)t5ZR3A%5H8`13&y-)v-eTC>lvm)D_t6wTk$D?wqWfPz>_w z0BGLeFYvhke{K!Ps=>p+)e9B0m>lR&K9kz%&hF7_48k?^>pOSrj!(a;8PJHWSrQ8Z;qX5d@Lrtt*sj2IwrWxO{=#WJ*6)YKQ>mQ~6L!ZI7K7>(YMyt@9a8iNCv zrKMY(qU&TeeXI2LW3X_`IKS~>?sr7hZq&GZi`eqK>wx+P?S7#}?w{M7T%pB!+3fU~ zQ-0JoTbMhMEdyq9jj@Dw@kt#1vsw8*0!-**ih%Kd`D3)`1e|w~FVt}$iw%F<@;`$~ zLt+tLC?Fxwho4qQpoXd6x=NS<{W4h55QZ)h&lGZ zbj0671Iug)bQYBREIDc!T+oi`o?1lT?l{$(1TK>|EQC4 zfq>SO4Tt(#clrT}qKU4-b5)=nEBr43F&uT~tVSrWs?p#wvhoVaD&eRbF`JN9wl(vv z1g!8oJ?1iT7m2YTEGXm?e+no^`;t2gJ$E~K$!sEiR|EMBYvWeK%=7Zj&z%}J0Eqt$ z;NIwgP58mIPZ-7EPe*J@yM=ozu0KEbHC3c36vHY+i6~Wd;MEYME<<9M30-OLH$7Q5 zWHPYx;;#-q^Y_+Y0~({pZIg?_u5_4mEB`kgbuL*f5Fluh!sWAsl>fvlM<%g$mh~N< zc%cTbESr5EBY|P4S%Z(3?!0?sNm~=w4q&2GP1`(2n`~su_vbqB=8?4o{+&VjZA18P zpFT!#YO9sDB`znjIq49LOkD{8k|gRDKxEDic6G84YbM(Ma4XTzRow!XEA3(s`X&V9 zx%%i^P9!oAppEghn9Gsb?chU2quFFU7L{Kr_}TX*aXl9{t@H>`|7k~b@M})^aPDc| z=5)RA{$21L4Az03Yj&z6v~=wZ?vHZ2nt6;tUt{gN6shYy6fD9AbSTl`D4LX-lY=c` z-%#8Y$dJ-S3niKreqqttJAqZi?p$Md@n|C5Y-k`7`dA>aA)#wKY=Ln$8 znQpul6l|dYq!lkiMv!E9jnugqyL@>SN`LL{ZJ+^o6O8QV-2vDud9cssBp39!@0yg$ z*KS?Ak-AS(SZ9mCuasq}W5ot}FNgb=0k>5MsOuW%VeWOHX5wsS%rm=RZ4)|LW@@n8 z+loF+lvyUl>p<>SSy{gH-w?XTArQKlQI$h}{AJ5_#Lr&T=!@0=P*EFCCr8RmMgKf= zVmnR9WohKm)Gzc3=0NREIpu*0+DZi?1Z`X|&OR50c?T(o0Yt4N`1i_yuy1>H27-Y4 z;8wuFZ9u^l0R`G)fKp{SywV(>Jt*~r1X$3kQsrA|SwUiu+_bt;cLuJM$Y^$t9pxf_P z+5bGFM{Ay*wJ%Yp@ax^FlAY0bc9j2_>+#`J2_Vx!zF+Nw)zG%5w@>CEI=Kjq$-qj) z^+G_n-~i}#&pA@9QH3ahQCwAQbMw@4$SjTlBS$`YlW@5*`0N<#%H6#J6ncSuo2ZsA z;WD_{K0Jod^mLp3A+_oOVEqzf?mF#zv&A9~^T^ORKuJ#rskw#{u@XIc{{t3_n5S6* z$}veLjk+DqP~BL>YFOH4H#ZTJzRy>+vE8noKJAUAMSC17Tgt5_f_eDD*aNHN;k0` z5Cn09@E)h_ohkEL$M`i{yIeEf7cRQ$>Jt-QG~XmrW4gJc8vk5#Lz_FoMw%yR$HI`^ z^f&(16ju&jA@`pP&isx9&%|r7+B{GNnF2dNMBtzc@1bZ>_ktyJF-kfcx|TBMiO}D2 zqPduu>b<)PM?K;>2C^7CS4KGjY$?O|T5zV>lc&@`>%uDg)sm-N58_EAwvd5Jeiyk5 zWPlnJ`|Twze*GLqy6Tope4Fb`XIDUixykekw;m zrl4zIizsm1+gJARC)M)>KLCdnfm*D-G=lFY1PBVAgM9f3h#Lfe%q)jCeiB8_5>U$v z#81hQM5mnXw$4hWHF^g4n}=jqSq=VHi+hm<0)mP)%7^JnjyLr%IuA%Xt#iEt|BRV7 zyQYqXb9?kKIrVuB-4Xz7tfQf2@z@ZEtHMC;C%Lj0i*N+eu9Qd$hPSoTdcyRWVnoEj zX*4(`G%Oq-ff6{e?zviRqfS1Hez+Zdg{=@2F#R|DqsQK*X(X~&BzTt_z7FfpQ(AZz zJS%kyisny19U_bu=@41#$I=TeH)u`#!S4P6S?ovC&q|5k^z5;S2`lV zhdo{$6k&YZb*cf|BjqeZM?#;S?nd9J1cFZuM+R?`-R%z-CO#;Yd&RYwzH13g5*l+0 zGB{G}1YP-W*{I=`Ay$!C9*}FxE#6(Xa}^@Yaa6^w8F*Ox{kW>KlIFy5(ly~$CRbKE zBYv}at^e8s3yDn2CyrO^Z}B@a2*KupRgnu%Aq_D&Iq!|5!8kVisCHm9eV_;P@3)3q zG?X*1*o$LAB+Ae@rjx^MQ?<9n4h*?wh{?YoOP0P~({%)Y!xbdRX*)RT^~685_jHOV5CQWc2M?S!I)Ut`WPv%7@01WUcP^8vvYY0y;5WkcTR}4-Ayf z?E7aC0D9b}JV=ER&U7z>q>&3FF}aaPaK7WgIQ>CptkTjV*YNSUnbY41G7J3}f(Dt+ zsgASbKgQfxK-q-}T>=5O#-@(}+qB!mV*Fqv5d$cG0hyCikW>wYH%YFrmadRqVH8sa zeY=2hiT*v%8R{(oB3J+@9+H!JG_`@sjOfIkUB*LsywVb=Ne+L_S%}|!4f+Kr@wCTn zU|z&&2Pl)<0T2PCc6QFYz3faGQf|{nlN8xLYRVXdJ(CeGwWg3+$TAF7YXa5IrM#O#Z!PB{Mhp~Qa6w7;qwq6Xu(%Kd^&0N zcSZO@&ZgM|cT{v*Ket%WV=@y}^kIhZ6?MUrLm}9RQ*RcpO)3(URb@Fq&K^b;Wwyy( z{dC*P`{gbup|&3PbGi${sK_;>iVfk#96YhO{V6Oz8Ilhc@Moi_L0fG1mGAt6U!*qF z(wl_nd#~Z=Kz+6!U6x*P2VQKDf)Wq%Dc6FS#NdDotSmJ&<0%fs5NiGG?B4m|hl`JR z(RRAsWj{5nv!Pgq*}eiJ(2wyrgd1_&jN~9(o0?pwZU|Ym_`XnOB(s)wpNHRjd)FxY zq~-{(+~cUUYWUQTI+pzJX8_I`$kvlU`ZRY#eg^LuD>E&Ne*y}(|F@SIJJNXm{91&O z`<8~ezxf`6Z6q$a4y4=N>?M@@piydn)t%W5ULg*YkN+%tFB1{5H)d*muguY}t>TvS zA*dUC zyegKF;5&UYvi?D8o%66NOvL;}(F&-|iyqB22{phfKL1zA1ay(TtX1aqZ}A!(PzgyE z*Z^hn)ho;?=#Y36P4IFd_2zr@mI<;`YY}MeX(&~`*|WngfPDFQNM?+k69xiz`Hi3E zi;J1JfPk}J<<{VDsW;u28QoY35g7KO5;k63Q-G9Qzg{dtMmBj3<|#P~s?6(v;U(wc zxC6-u@Lvcz{0K53#~tcU2heHw?P~MFcFpq?gY3J}G#Uc~FM&Q5Us>ju8MKUlc=qh( zoY0!z_n7YdH=Ba6fs@VQd>KeXETZu*j={PQ==Fs7v|rfFs%h8&Qs#k*PK9~Bs-vIp zKoL?>)W`NC{MU57&cM|wAQoai9z%SX2V2t~Jy81@UTIdVk>n=%1~@J~)imv!{(K)F z5X)~k_A?6IdrQ9^k^~JgYyq6Y7`b!WBG`+|y>e48X$Q>uzkhk;<0C*@|M7Tj!aHUK z4k~9}9<#xmz(Qny40K^ghA>+K!~6?B4UuYUWyB)qb;Yj7{kH|-51y{ zR%QB>s5{iDW)ZD2_dd%iuo11Rqr_9XmZN`XqQueiVL^@D(5u)|F1^ef2*>`6*9~K` z8>Iz}PxH!}do6zerHIA((KqUj0~tp4CNLHi4;+}KS$pb92oL?ZD*ED1GUxLZr|1vWx$MKRpnB;z6=JzY^!1d?%sj_ zuC-SP6^unV83I=j$QVIief;6pf6OwXo%VW|u`eW!NlFm(tn=~3+ ztkUsHC>cN7@x~*1#4Hx)(L-fo43Cob;WyXEI-~B^Oh-s;V{6rb&a+=S4aTnrl-n+M zTf~e(aF#&K2YsN&{9>w!ybw^vI-k!eV>5!|bc3xxIOH%LrvxuRDZdI@>-ip?NByft zD-Z8*l#}5rUEDByN`hgj7{%HzRkgZweqZIo3YYyAecI}vr8Ia zGZfWR^3v%s>%FNrFX2r9b>?Ui|GTsr-t79-3Dlp8mkwU}fgHea7<%xUC50ncvGFs15Wg~ZO~Qscs|2abk^gZ>2Q2d2rz}F6S4c|II_kL$V7d-V zsdWipx;(;wFA88)(Es0b|J!tn^x1jxPb*vgj9c7rpI4Y_@-B0oszHFrgEV{p*dbPA z_xC0#m;_P={Wu>E!;p@`#eM|BOCeDFydMSah@mq*CUn`+X&uBP-RLYPZxF-L;UXr6 za7V@GAh0x3vMV58`mHblbTjV0|9a7#`Um&;?Dq{;D(XH%&>m>dQ~3Qx!}*{?OS2Eb zt+Ro91CO^`4?iVqvadIH(PP?p97!GlZ)xJocz+D)7&~{nA@E2115lPZfP``bXsKm^ z?z;#ml{0S&cDAa?3}%R{HTi5^vut{jOnB+?k#;z0*tErUmI53eE5m+W7I6R4qlZ=C zkC@G`MLIt~50DNz7*jBulE%a{`LN-i06!C8GYWr3jqkJt`dQyLf**&a#`|jlr_ssk zXh2{Y;qEg51xQN8PC5bo7XbA64D_8>16Mc2T_B(gOQ{`{)4{z3vjkcbItQx%h}Wh# za4!29{U_Lr;Y}KSms!Cf4{v2#>Cfb$zO|nOQnt`!!j#1{QDxil1CYrRf!I-gON#a$ zs2J!4SoXq!?{M4=cLDVkAV3HsiF&|^`Pr`)*Z0F#)WS?f$;tF#o%Ok6%l*TzR}gsU~aJKS2Sw)rmEDUH1N$2 zWG54fxcq0X1(P>$`5%mWqh>(XH)K()om5$jpwmwRD5}o+>0e7(b?h2BhcJl>h!>=v z&i7TYYt$2^4ceeE{til0J}85TMZ^9(o(6VC!qcF!w;KwZftP{}#xry?>WS+^ReumOaw)oZJ^-DFL-!x2v?tl!~`$+|VUs#P& z5V)`F=37wW9y9!X@3s2Y*c>!2zpMpZWqFA3!KQ|{C`8(qlR zerDpT29mn^K4OgJR}m1ppWC&z9cCtossJ+w~NhcT9aPsG;z)>2&x826BM>*K& z1U`EtUH#`JuLTh}dKbSg1qL^`PAyxLxXKm~CCMrRAbMH~v_0_&SHtnykltncB!&S4 zs=7PNkB)YhHbMeczliF`<7Xq{SY_|LHLa@b<|0?0!^`;&$h^oE(7I@Zr9cUn%Rg9d1>DF{n1aI&}CPGA!`UmCo&xH@q;3sRFGgH>5tXkHD z*xeVv;>8idMVMVPZ;29-qCsEJMI!tNvm@+M$>5bseBhe|9~sE&@WQwz{SSY!{Uqu7 z1a&qp*8N!X3W0h5@>aknD(P9M#TQypm}lG=nue!_EqI&_hv_;Z7TMhnAPJsnkEj)VgUi1BK@a(N5PCj!$I#hz^$n(eZCn9xRwA3xkNZ?q9Ui!=rlqo&^;m@A zKqcU-B(`PYPdXnQfF3s6#Rgr`>GTK4nklg)l4pkaIlGVj-0n2ZVB4ak+hj#N$f}&` z6zGTmb;mE-c9h=&@Q2K``3=Qgv$<;9@G(V=srPq^w2j~ze=noMw&^iT@sE>GM(&Zd z;2d2Lj9{EI#3{F1i9Um2p5g|1b1+rj$R_^9KhOjlbQR!u|K{VIot)QGLCwQBAHW5M zXsxvC6wDw2hrdz_5*5t>Se4>>)heAAd@`>}HspK)AonY_Fq1BeUC02SyRDaZC1ifn52LhpJp97T0d5SzJ)n zcC7uY@!OS5FxX=sc+feF?->BtmFs4FRKCop2WY$h3`Puo`6`Srjav>OV2styspiLI zA=_%eH|wHk#RJ)pq>}>LwIWxMvF#w`-z3=h8w?>NBi_v3VW0j<$T6q*f~Uf3*O=sZO$AKK>+h1MsWxd=T*r zjx*h}QQ~{zuZaJrDoq4c=`m@#o(|xmz5^+KI)45a^n!c_FBJ+OlR~zp>r*_x^}G=V zv&k6<$>rK6AQk#u`=TAdv;F=525c`tHBPx*fj9kRB<`_m>i$|m;wLZ)R|IsccPj78 z)*lh0(0sy#uCYoFMg=?GKDKNp6Lv_4n{k8jAO0IUWG_T40LA!q@~cQJ?#sd@@VV5s zrL676UqQp1`zZ-b$BNu-AhF#X%$0Xo`|{eXfn9DT!;Yxeaxh00WPCKIeJRi+QieLc z>!7i56qgydIt0n^rcr|?WS!0#=x*^X|4o8q{6Iljxhv>Xi1O~SRspV|RINDCqjJ13%|}+x9Yv&n>(5=lUQpxb z-YMM!g>?=C)zQy1hr{hPD0W)TBi8-_~4yA zAx#rQpjZZ`_0VY}G{0fl;}W%uuR}D4?}7iTkqgcyw&2Gwi0sZ!TZCX+38Jmva&U(K zcH|02d?J)E&;&n}$CX&{;{g~M$S{jD=_^HKd1GL967hMR)XxHp zA;jWHaq`bA@#fjYdp4U$A`JhS>z2$SB|P6n4#vOd;7ExTV*gzNq|N_xNi3rIo8CV& zu&u(Qj@f|~ypNm%Bk)!LN+eQ0RuNM`hW7WP>Qvcpxo4VDy7&Lbp6nu!qw?!kEi&f% znte0Z?!7gHYY5IKKS>3jXIt`r7!yR7f5rsq3s~{BujW_08KVB*%rJKec;)N+L4U?> z1Ri;~0GYQlR>o%&iD%GSfQIF3qvtonzv^~coaA61&cFm@{^A4PpmLK6W(iDkTwp|w zqoer!jzNF|eE*cH^Luqj6mZHZAT9TS-#PdW@b5H0@kM-QGS`97a1mhfsvxv4%Pr|4 znQxS_xV6Yz=Imgjh3CPbz;hCgKtn(Qvq&faNBs(B;r$jvNjiT}R`7+Q0VM-CN)`2% z_?OuL@hd^bSxpxF5XYg8mgCEp!El^i6hL*QKW{JXpzutq_mV3QUkk2jA*cx3>5^tPF~=h3iWP9Coo$60)XSA zYZ>apjX>hu2SNm~h2i3Ag8VNu_vK?i6rgdyBR}2QUITqveTLb0HydffY}_&)J_BrO z3YZwz0eFTXh^mY{gJymO5~~VkB>6zzPu98q9&p1hSIG*M2~eKDX5R~qE*9Bx zdjOo>2p%P5Q+LxFU~)Jx8)1QO1nKy74YQH85g3AlWY>}6c-q5^ypO67TRb@pCdQ(s zh^K=|A>ijzijm*hP|}1fxMe(-jvvnjW2r;G77^{u?6>?$^(&YZd_9O-iZBhp0ChKO zNY3*A^HUj}K``oBRIF@YXGZiS_S`gaG9=qvn@6D#u(Jn5wAurUyuTT9lPQ8<5MbY z@WHmvN91R4l3#pE6)po)sk}DKq4-HLd{qv9dca0?gcG*fpPBM}3e5G*`kw?M5nwA?FHl9L|@Q4?S&d1j7e2OL{S6{cdORU-24+_`Qq97NAe;n7QLXe`P0Rl?tz=vS$tTa;FL~*&O~xj& z%t<~`VNo*Qyc{e1;#I(pR8yiUz59DVt3F)AMofU8_IMk?7y)n7O=Obb_sNB2Oqx(m zpbpVT=Sc&ax13a1jui6eHluR9i)sFRkveF=B~>?2pD9neWIqW&_D4}V-1y@`x6q%F0^0^-hu2+toFWn+Fw3IGVj=|6AW|-+-Wv-%TAk6MY0V?W8 z{e%^TDS@-w*Z(!@d+cwuMimNv_u@04${fImmo{3NwE8r?{r8X0MLdkMj>jr{H+=J0Ja0V1hxAu;* z(Vr$9>w|H;dZ2aq!yY)yXBDAR_-A`T=|GW)LA`K9(M{Cnt#YV!U;BgP61Uy}*)g>f zs9zH&9odKd;??6bwHUS0$hoG4ObMqI!4PWip>OWgZJdP`SL7FqeVSTp*g;@u=f|Sm zw}B8tw#j}-o^k~NxdvXGn+zISB>rcPK<>Qrtnk_KdWmk9 z)02h0|Esv~j;Fef|2|Gfog;D_duEI5oz*czh@?=;Ubj_7M#HgJa!3djS*h$4m1M8T zs>q5;R;4l`^?WY(?|xp-AHV;fe|qWoy3X~z#^?Hs_xpX#_GKLWvo7Q+#5U$|>x5)4 z9iYP|lv}bb`2~G!CFi}k^q#XNs*DGujp{oBe%5Av+BtQdKHt*W!y&=g?Cd>ShYJ<_ zM1kWE@i9`ptNg!7FAtj?JMxY(TYwmN3*ZT(feGdb`gaZ*DE8{1A}9m5a%NnXatQhM zvAaiE68Zczjxl%COg&u&TvV4!hFwwZel_4fUi>ng{Hc<}!QG+TGW9e_lZ7EKQl{$G z#Z?>QWStA+LGQff&wVgVmx{tfJ@$n2kl!-)Pm0acsfgV}(_AfO;C*}c^3usiyfq@f zY39-V{XBSinxK#fS)pSQjH`T}`qhKdZZUno)aKQf{MGo*oOzeLV3GQOy^p_P9Q@F> z-`Y>iF0GG`$TSc|X2ODKG-h-BPibbuqMEz&B2huRQMod17aq~PcBMrs{b^;((!=lR zk#aK1#Z<)+qxTU{t@qQG7l(>!wsb>SEG=Y^WbSwtIrv(&Y>6D_+8ni{*aTKnG$X&+ zfRco*b7Y>)(88;{$kJUjwEYPSDc-u9D4Vyj21LM@wa<|;E8c9~BxV!6H=aQfP{fXL$z60Re6^yl%!ggsa}Tk+chVsv&F%NYy9RsR z-aQFXwva3`&Uv%T3|`=I(9&olXH~O39-@S{;T;D!_BW60jyX~}6}~%eAaQcH%u{}j zu4ue}f?lz83-;PEx)#BzNDhe@{^nW@Vj^ONk=!ziV;L46TIVQwq;km{ya*%uSQ9QR zR<@VsopBbYdg!SWsW9co-Z&}&ZvLs>?CL=xbz?;@NNiLBFDCthk0tKFIQym8y~J3v z=QY+twatCb3wfr+3`+mJJ~k+-$UJ_v`YY^qf@3t6hT;0YVBRLuYH{_Eg42Xs#uswm zKq~)m@(LD}Z%={Lj6Eb{DsUBYkFtHgzOdyko8UjU2dFQZZ}Ax`S&!J>jqsdpVH)9z z=y5Cs=w*3MK7L7^wq);?exYeXYl)s()1^^SwiD&2dEdK_E~%|%0u)WGjU&HBS#&n{ z{LO>BdQYw5^ywMh>OUtHTrv~n&hSx|8f?fMI;f@MbJMg3idv?lsVNA=1E;c6fs}|j z1R*CFKbSbYs8s-%$MLYq14#2qQa5%_`tM&q+E2HM?|oZs%I;N_)VJ@rkeFvN_}LKx zPeJMDWqKI9T>y0~WH$HQ`)Kxh&)9TkW>6|xl|*386v)iwRu-Q4O9JeQqmvE9dSqf< z2)|oG0$WICcT5_ec}2SMn=(7v&1!AK{Hbcy;BQls(~RW~-K=rO^nug1ZtA^jx%moK zX8?35a(xuB%peWunI0VIj#u;?>KLw$&uV=YrB)w<#^k;=)409umk@-spqQ$7z zL(@cmFM&T*Pj;3&DT&uIiytlMxZEPx!1G@7K1P34Zd|7_Q@ZZMyoID_yZHSR;Ik;5 zt5NqrwfdZVV1`oYSS755*k%+GIWDzn`Gs~Iu)r}Bj8B!*7H30TQJ!VBwgygTBzg*)+R7bdg87{`cOW?HJE97Vv_+>+uVAf8|GWF- zZE+suSSC(gFB*iSb5ZVP1?0`(Uxl^)1I7JUE_;vGF!kiMRH!Dd;l6n_Da)Xd4bq0G z{Ga$Lx_KTPW$w*8EUvTP$T0`u_a#RQ6YlLgS5(sCh7-U+WmXatFRn_NbV^s3D5R_> zc~*YTsm?5U5b(RjA_1cMG-fkZf!z7~X**~%vi(>EZ3&S zBjCl*CTCyK`hzr+hv`9uW|%>3ux+{A|3oEWls_yD-A&60d~G98t#Pj|n1AN2Jd7_S zQJcX?SRSi7IhT~@##8)hOib=lnWNdJWRn=aGoU)5gpn!IKX1jRA#2*%|9P^r;;wqN&UpP!^beipQ!tz|bJy1A|g+7ft zY_wA*c6K@5Q(Rs*lJd(BLc;%JUMycK_)v0(!$2-84MK_TN0XQCojx*DTt>XS1pelO zvV#zs4~<#Aomo`3Q`{QHxY^hO>^7~Je#Zv#o{WBc;i!{LlMq)OL zF0OXX)r7vC@P1QYBeUI@*&n|RIb%J?ircAo2+s2>D~z*%bZdr_>G~@JjTA_(WY=!3 ze>&*UgbO@f%H|(`x>37JQZOj*7vjLsQftZlZS3PS}LwLSzL&V`qYRP`&}jfH<#LP2G3nb$BGyDpSO zi+iin9x|3`ROIMC4d+=YYxY&BTVK`_;_D##&9UJ%B~>|O?a3yRIynMiaR93&&A+MH z=id;kTwx@?I<5vXio;Bv-~^>Z;;~ej${J96tK;~o$c3}Eu|L+8;>rP;cUQt)g}R>b zh~Z5W-*~dm$-RjslY=W?p8vfRvbFMt_Upo0&K8I!QH{-Yg>@@*gcsHXVsf`coO~rJ zb#5V`y86$DNPBPNXvBLzw#$U6k)Oc&-*`tj*~dXilxcXoZGn=alX;7EF`U(hWu6^l zIOM>g0Ac5x;>^ih@Z1hVR5Tn*+W&ZYhUH2y|K&fwW}otu zvg0+K6;D3&6v^zqUeZ{G0+bcT?3xF}OT-K~bd%lLzj|;pZRX5FeZyoVdAg=~WS5to zdIfL$j{~jVAXhS&%pmdlu4Vi1juER_HYi0dQ#{lLACj&~?+y_^0iqd$^Q8cGOTF5K3OT4(`a-}C%gjAXf?8AA+F_@NXoVJQu zzdocHlO3uq*VAs^_K+)h7ydQ)LBQO=yhxnH@6(Ww@qkbTV59~pz-eKw@~XcAxE$*d z0^n0eg~5PS+cyYS`Sz|(dk?P&NCswa+yJmdyB=4qXNQ@jVyA|cit$Vt zAh!0$DOI(uv)|&qUt+Lm9RVqZb*S&{8srQkA%_ z%C56tc9wlEp7s#}q!a!dIbluOQTEF_qNYJaZ$O!`X&%8mvb0%xG$lc#iLHO91Kt7* z#S!rr9DmhE8!NqaW9X?ckH;QXL&48l)cjF-boQY2INRyLCH2YJj!09$#yucK#2X8S z1>7Q56GPO47R|K;XYNi$cKC06bOzR{T=F>pWtKR&NwEP1sl+P+f0nIhI4ZX{)TdR@ zjGcmUF}jIy1l(uYTXwAr2S7pQ`tPro{~m5&Iz4v-3WNVd8K^)?DF z(%~0@9WC$w?%O!;wz;fB#O}%8{e$)Fg<}``w`Kx=rW;;>Qn$Fh=P5 z-iz2ECVt!9{?#tzV|wM^NNTk(Y`(J*<^eyJG}9Y`rI5yCpQzW77R2Owq-h22utXXq>vgDj%NQoRx(biFqo9LXJr@wL0$$NrhoP6s1 zcwnUufcJ{^1j}B$Rw;{{6 z4Q$>$s0CZSoQ1U9HP4+}4j<)WH~|+^e*CIq|IVmX>5Ut^_=3sLqJAYj-swH{mv|CX z3Wy;WHXmO?7^lyG79F-RITU6~RGW-@-T(!8x$K8hqiw;rWcRZEkhDP3uu8jL)!{`f zG@X6rB$KfR`Ptr|fCSHQ-8At@@R`2OfuMyqftruD(b#2t9di@x_YYxx!0su67RsZS z6%BbfU`WxO=o58iV_=YcNhe0*{DAawWpHAOLVp%b65dT^a$>1Kr@V;_>3n(%<4NFy zZKD8jW*A0i$sT)15X(a;C#dapP&v3XU+~DK8S_>_Z7w~P`JA4I3;t7@M_KNWd^B4g z>bx^sfN~AGP@wYQNS*wCjw2ZVIdQ;rGcyQNB5}dS5##40-dU0si*&!5h=#ijLa1P( zOs%cse+Arz1bz13*6BE`NTVeQ+sYg4=5xddKV~0fh(($Cn$6?z57Jnb$BuRPRE4+I z%>>CPJehl?o(A6-rSJwQN+5};06n9ZdR9fnoZuPd82-D~xs;&$-&2Y}txq#8@Rr7- z^e0QA^m?TP0cRYZ*0E#z3&p6rd}P&yDci>fu=%L5g($!WbdZPF-1TUjs!T`IZM9S9 z)MYw+)PD9lgR3NZsQsDuHZX{mgipf6hGKPdsmWt|R-9YhgN(6%zYK*BW&>}|52Ws7 ztGBB=S0GRIi(D&Lwd>-!O>%7py{1Ag=B6p|6XeHDMl(by0RDsIeP{BpA-^B?0{^aL zjaPfdwNiE{UC*V4M`CW722Jkqxn-*HqV>yWULyl=3_8jQQ;M>Jh>bgbfp~0HGiT`XUPQABS|N)b zMH;o2s4rQ5*>41H>R)%1%T%poCz<2Ek@*f@((tf0z71sz7EpzI9rWm%SLm;g8Q$j= zs{Vk2TGw{dRgd=Y_TgwWQrfR@XT+C{xM6T*Prj&u1Bx+mW*1IL0Yf&f0)~xVymf&HK(L@@#6ceVY3-cya#-cNie%uvji;QOu6QI$@_>V%c=XV!i+VR!~ z_E3525;9Y$kgQ-j3)#XiWMJm;o(Xm1M2c=mQD#5PK%vXc{#--_L>q5z=q|HE3i&hM zZ`tm%&h^w6KJ1fn)tMxp(v-v0?K|8WgcP9T>0h zQ;vZMC1BWc3&Hw`WY)m|!B#zP@i0;gkslK<~=pp!yi_(Z_>d(6XEF8|9of1l?B1)XEri&F(u8 z2L72phng`>aXBdUI%Yt5)EH9x1)x@Pw946NrP)!G0+J&Z->RM3_lW$YS|OlAR@;CC z$&dnBUPuh2=rEvkQ|4;GR3oLv^pkAB=x1vx?y1l>IDtC>ggJBs+#i=05wsIZz1KAa z%t7pKq}uH&2)9{6ge!uwuVPD8Oe9&Q_8dakkJ zQVYO$;RP;q0%-Ofe6UfXw+%cIrXd;XVQlohXrrpjD;qyT4$%Aun?H~SDEkkG!nTzGOH+n`8$D9piMfpAMx*%Oseu#yk>Y#st0^G9&f zuN$R_cEV9G^8!PrItb_r$rS9rO4{MAQo)~mMyf<|=PT7%63f0- z%ERDkP*5@w#!O@79LmgsB=&VUT{~eFegN`8s-@Y1=vUh<`au;|+~O?MPPyHAO^st4 z5%L7QTY1oh4=9BcL4I2obkc~)FQK(S;+r6epOVDXD7x`hXBNQDeVGi4Z%<+o;%xHL zrfDwyry>v^i{V=UF?gO-Osk+Tk%VWbS$z1|v6b#-2wz!+NX;tnWYU10)CB@~r=S@6 znM;5h)>%g~JpPq|gx^b(^C_ZL+Pa{PWVVecBQT40z;f3(yA8eYio&6pf=xN^efhWVJ)tKhIeg-gFrUWh9WMeJ}D2$;?AE`Vk1y^ySP<)xRMGw%Qz<9$9b! zJ;7AbcObXkp%d;%RlyOWvN5ZMt*7s|Vq#%$A;B7=rvvDtEhA|jsS9C{!vej-esNuU`^%wYo6RRe-fcWh~#LJ=aoXwmh zfUtF%PbplWWHO@CxLY``)hkmC)kIf&FBSh!z3l%w~Q&pFSUK2>>BkP-*oO0sU8lLl4% zbQqln^!sxKX%wJVe}ie4tu|7h_ksT)EF1h7D@?BJ;D%KYj%z{?kKb|yFfx)bLQcB6 z&G4xqzX!_J+?kGsr|*K7WRlKN4g&rBG(S+2?98@$*w=tLL}K3Ol!Ve-faQ&a0&p15NZsWN;Bw*zhKK67&^no z|9Eq$WOwLOjB}SJXq5Y2LR2PM-tjEt zV+S7obHW28T8AE-R7rePV-UyS;D_RA+4Y&WfJDY{+w5m(-3X49 zLP(?|;YozJ8QKIaN-BVd+ehObb!Nrusn4`u%>bfy7s!7XLj6@DEdGtT#IcgbBo{Sp z7hYIK9cU+<>X?%y;11n}9eNJpur4U8?eBf>YK^JHp9Mv2Wsm>C-YFeLQemLeEXjlZ0*rd|jcT#{HcPd}AjMybcjZ8}!EE zxN~S$6@-AGESw@rqe;I7X8oR|Af4VAsJajT6`-qTrgmt}n}9^&W35Z4?+n%eCiNcu zhl^|DVju*29coM<^Di!lV2By%;+CSKNBgyQqgy*t$h~M`y0+|xuNe?F2NL-UC5(?iVX?uh@VpOG#~ zlZ((u6RVIkLraEJA&xoG|_nVlQ=a*x!eRGOFjFl9fsGR`KAhJ?y zOryG})w|HDNiOF<@TbCnG?p_mf0~4*jUIKw&(EEU5S0rpz7;auMBASnAgR@tD+ZbfoHzEB1iEGwCC$SB8xu7 zft8Vy9a@aT<%9i_3zaKwhnHD}3fM{g33_O+0owb?AjJ)D!%z7aaC?K7O8yC5 zGLZT76HHvA7X0CA>oq=VxE%EV3W1hk+g{fodksKW7@l*0h{|LZXxN^_|Cr|~IGw}L zshYey@8NrdiC`T&vMK)`40bpT?&gK>Mm81p6rc#G90lmlFF0KpDiTCh35cK&^kqyO zl^-_hK+6;#ht`H5LWz?ciqeWm!SFYQHr1{JcP+*4T36}QGd2a0%A}Rk@YF(=rElOovt#5AqY#DLAZfxK$tWW3R&BS*74D(2VMveXQ?=s zxQrWp1KLDL@`R->hxq>NTm9(kS15S3Xt^VolGb;ui=o)0jK4~nXcnj#p7=o2w zJeM@FFE1Fbz36~5!U!(y3CG<>4O^+sCC%ad@;d>^;0m|!$e3aQoRtAHQfQMs3{M$0 zn!pNmZHqo`V?0&SyeAC+iMI2+;}RD6Q9P=C;r!drNWe44qtkjb%>bqZxw4{cqfM}= zrN_h*S`|ks;gY2AIZgE-Y*3Y~C8oluaj={gFXfcW6yka~Tz!t*+=8*9ii{^wuF-GG6D zNbpK6wXN{TZODiKaDT?h6uPMk)`5$QmbMS%ak6955u1f8&g6A&!dPUz!nWC^7U0y>n2hHnKHSW~0fI(B_&ews$y;UE&YYGL6 zJNNJ)hGiNAn>xzA6Zdh>kXdknzZ-aR-uD2|B+*4osWNA@tac@a{#2^x-5P~RQbIHI zX9~idZ4h3W9(ke$zCG|AM7r8ws!aG{s&rV~b)7+X5j2T1+BTnrt@&^&du3JucjN1^ ze3=HaiC|*feL?xCdI(uSR()S3zMr5S{~aWoyP+B-ykjT5`SZ2K5lgs+hc~p+8n_Gz z`ZHgBxX@W40mk51{BkJCPaCcifJDamejQmWImIM;2S9xmKmbipzX*CeAK~^F3(jU# z+6*$iV0UU4x?kv4rgcC=Opl}4McSE%o2Q|A2%#vS&`EUeBw9>Via=9pJx2oA=-)2n72`Sq zAZ6pBR(5CBWxg_9HVaT;2N&yJvTDmyJ!k%9^-prsYrCZ%ljHUAyI z@Ch>z1V?KW^f|;Sg&Ynmsq%&@J#Buu|7@>k;dfY-y*%naj4!;0<{%z`0-6gv2Yd>{=MN!nCJq=-y&J-B4Z9%8_>dH z4Sv2T%Yn_X3*u~blr0$nXB%b)UL)#dnIW7HkP5>&fQE)i^MS^<@L&e~c|-`RC)+g9;jll%m-)~#a6 zQbXnl4E6^0n!c%bRnP9nRjM5HJ?iUpeu07dHa`RFdZNP}Xu9&>e^jV%2;ZN$b?MB( zOg&bLP9E9j7*!NUgHxp4mw02;Ig8!TrSi=}*70zh5%v6_S@u1w-sr`*FUoyD#zxgQ7j*WqK zV>0?aZ(z$LYu|Zq*^{hrKEA%Xw#F4{@^ z3)owSSGfoON-C2{F%kW^ylk=E<Gy7v|PGfLxsJfG57Y*+IZgaK=m$8{=tQxn9ynTI-^!D~1^C!G}+SuNHh}hIe zuk34z#o|B1YXm+sQjq@k{k!1TuU}I;os$l)tNig(z1H1*SUlbM4@0{ip5NXUdKJ1w zzc+@g$dx`j>lUvk=+Kf@M?+Z&l{#|d$oG|%hmZ5V+VDY{` zEYvlD@J2JdIoo+hQ=WknG;4j*BVNak-o3`d!_)Epy@TKKs2QczQQ(WMbcS~S`O8)& z#e?rctj(e^Sp07)#%1{`e;ot%Ig`60*Y{t)I8Rktn~0`$`uenosqm*53Ohfv?dCqK IV;}K<0Ev@r)c^nh literal 0 HcmV?d00001 diff --git a/peripherals/vga/Rescale/hw_image_generator_reescale.vhd b/peripherals/vga/Rescale/hw_image_generator_reescale.vhd new file mode 100644 index 00000000..0414cdd1 --- /dev/null +++ b/peripherals/vga/Rescale/hw_image_generator_reescale.vhd @@ -0,0 +1,34 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +ENTITY hw_image_generator_reescale IS + GENERIC( + column_size : INTEGER := 90; + row_size : INTEGER := 90 + ); + PORT( + disp_ena : IN STD_LOGIC; --display enable ('1' = display time, '0' = blanking time) + rgb_in : in std_logic_vector(15 downto 0); -- RAM data in + row : in integer; + column : in integer; + red : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0'); --red magnitude output to R2R + green : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0'); --green magnitude output to R2R + blue : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0')); --blue magnitude output to R2R +END hw_image_generator_reescale; + +ARCHITECTURE behavior OF hw_image_generator_reescale IS +BEGIN + PROCESS(disp_ena, rgb_in, column, row) + BEGIN + IF (disp_ena /= '0' and column '0'); + green <= (OTHERS => '0'); + blue <= (OTHERS => '0'); + END IF; + + END PROCESS; +END behavior; diff --git a/peripherals/vga/Rescale/vga_addr_rescale.vhd b/peripherals/vga/Rescale/vga_addr_rescale.vhd new file mode 100644 index 00000000..f87084b2 --- /dev/null +++ b/peripherals/vga/Rescale/vga_addr_rescale.vhd @@ -0,0 +1,36 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity vga_addr_rescale is + GENERIC( + column_size : INTEGER := 90; + row_size : INTEGER := 90 + ); + port( + rst : in std_logic; + column : in integer; + row : in integer; + addr_rescale : out std_logic_vector(12 downto 0) + ); +end entity vga_addr_rescale; + +architecture RTL of vga_addr_rescale is + +begin + proc : process(column, row, rst) + variable addr_count : INTEGER RANGE 0 TO row_size * column_size := 0; + begin + if rst = '1' then + addr_count := 0; + elsif column = 0 and row= 0 then + addr_count := 0; + elsif row < row_size then + if column < column_size then + addr_count := addr_count + 1; + end if; + end if; + addr_rescale <= Std_logic_vector(To_unsigned(addr_count, addr_rescale'length)); + end process; + +end architecture RTL; diff --git a/peripherals/vga/de10_lite.vhd b/peripherals/vga/de10_lite.vhd new file mode 100644 index 00000000..8466858c --- /dev/null +++ b/peripherals/vga/de10_lite.vhd @@ -0,0 +1,303 @@ +------------------------------------------------------------------- +-- Name : de0_lite.vhd +-- Author : +-- Version : 0.1 +-- Copyright : Departamento de Eletrônica, Florianópolis, IFSC +-- Description : Projeto base DE10-Lite +------------------------------------------------------------------- +LIBRARY ieee; +USE IEEE.STD_LOGIC_1164.ALL; +use ieee.numeric_std.all; + +use work.decoder_types.all; + +entity de10_lite is + generic ( + --! Num of 32-bits memory words + IMEMORY_WORDS : integer := 1024; --!= 4K (1024 * 4) bytes + DMEMORY_WORDS : integer := 4096 --!= 8k (512 * 2) bytes + ); + + + port ( + ---------- CLOCK ---------- + ADC_CLK_10: in std_logic; + MAX10_CLK1_50: in std_logic; + MAX10_CLK2_50: in std_logic; + + ----------- SDRAM ------------ + DRAM_ADDR: out std_logic_vector (12 downto 0); + DRAM_BA: out std_logic_vector (1 downto 0); + DRAM_CAS_N: out std_logic; + DRAM_CKE: out std_logic; + DRAM_CLK: out std_logic; + DRAM_CS_N: out std_logic; + DRAM_DQ: inout std_logic_vector(15 downto 0); + DRAM_LDQM: out std_logic; + DRAM_RAS_N: out std_logic; + DRAM_UDQM: out std_logic; + DRAM_WE_N: out std_logic; + + ----------- SEG7 ------------ + HEX0: out std_logic_vector(7 downto 0); + HEX1: out std_logic_vector(7 downto 0); + HEX2: out std_logic_vector(7 downto 0); + HEX3: out std_logic_vector(7 downto 0); + HEX4: out std_logic_vector(7 downto 0); + HEX5: out std_logic_vector(7 downto 0); + + ----------- KEY ------------ + KEY: in std_logic_vector(1 downto 0); + + ----------- LED ------------ + LEDR: out std_logic_vector(9 downto 0); + + ----------- SW ------------ + SW: in std_logic_vector(9 downto 0); + + ----------- VGA ------------ + VGA_B: out std_logic_vector(3 downto 0); + VGA_G: out std_logic_vector(3 downto 0); + VGA_HS: out std_logic; + VGA_R: out std_logic_vector(3 downto 0); + VGA_VS: out std_logic; + + ----------- Accelerometer ------------ + GSENSOR_CS_N: out std_logic; + GSENSOR_INT: in std_logic_vector(2 downto 1); + GSENSOR_SCLK: out std_logic; + GSENSOR_SDI: inout std_logic; + GSENSOR_SDO: inout std_logic; + + ----------- Arduino ------------ + ARDUINO_IO: inout std_logic_vector(15 downto 0); + ARDUINO_RESET_N: inout std_logic + ); +end entity; + + + +architecture rtl of de10_lite is + + signal clk : std_logic; + signal rst : std_logic; + + -- Instruction bus signals + signal idata : std_logic_vector(31 downto 0); + signal iaddress : integer range 0 to IMEMORY_WORDS-1 := 0; + signal address : std_logic_vector (9 downto 0); + + -- Data bus signals + signal daddress : integer range 0 to DMEMORY_WORDS-1; + signal ddata_r : std_logic_vector(31 downto 0); + signal ddata_w : std_logic_vector(31 downto 0); + signal dmask : std_logic_vector(3 downto 0); + signal dcsel : std_logic_vector(1 downto 0); + signal d_we : std_logic := '0'; + + signal ddata_r_mem : std_logic_vector(31 downto 0); + signal d_rd : std_logic; + + -- I/O signals + signal input_in : std_logic_vector(31 downto 0); + + -- PLL signals + signal locked_sig : std_logic; + + -- CPU state signals + signal state : cpu_state_t; + + -- VGA Signals + signal clk_vga : STD_LOGIC; + signal disp_ena : STD_LOGIC; + signal addr_vga : std_logic_vector(12 downto 0); + signal rgb_in : std_logic_vector(15 downto 0); + signal wren_dm : std_logic; + signal wren_vga : std_logic; + signal vgaaddrwr : std_logic_vector(12 downto 0); + +begin + + pll_inst: entity work.pll + port map( + areset => rst, + inclk0 => MAX10_CLK1_50, + c0 => clk, + c1 => clk_vga, + locked => locked_sig + ); + + rst <= SW(9); + + -- Dummy out signals + DRAM_DQ <= ddata_r(15 downto 0); + ARDUINO_IO <= ddata_r(31 downto 16); + LEDR(9) <= SW(9); + DRAM_ADDR(9 downto 0) <= address; + + -- IMem shoud be read from instruction and data buses + -- Not enough RAM ports for instruction bus, data bus and in-circuit programming + process(d_rd, dcsel, daddress, iaddress) + begin + if (d_rd = '1') and (dcsel = "00") then + address <= std_logic_vector(to_unsigned(daddress,10)); + else + address <= std_logic_vector(to_unsigned(iaddress,10)); + end if; + end process; + + -- 32-bits x 1024 words quartus RAM (dual port: portA -> riscV, portB -> In-System Mem Editor + iram_quartus_inst: entity work.iram_quartus + port map( + address => address, + byteena => "1111", + clock => clk, + data => (others => '0'), + wren => '0', + q => idata + ); + + process(dcsel, d_we) + begin + if dcsel = "11" then + wren_vga <= d_we; -- write to vga + wren_dm <= '0'; + else + wren_vga <= '0'; + wren_dm <= d_we; -- write do data memory + end if; + end process; + + -- Data Memory RAM + dmem: entity work.dmemory + generic map( + MEMORY_WORDS => DMEMORY_WORDS + ) + port map( + rst => rst, + clk => clk, + data => ddata_w, + address => daddress, + we => wren_dm, + csel => dcsel(0), + dmask => dmask, + q => ddata_r_mem + ); + + vgaaddrwr <= Std_logic_vector(To_unsigned(daddress,13)); + + vgamem : entity work.ram_vga + port map( + data => ddata_w(15 downto 0), + rdaddress => addr_vga, + rdclock => clk_vga, + wraddress => vgaaddrwr, + wrclock => clk, + wren => wren_vga, + q => rgb_in + ); + + vgactrl: entity work.vga_controller + port map( + pixel_clk => clk_vga, + reset => rst, + h_sync => VGA_HS, + v_sync => VGA_VS, + disp_ena => disp_ena, + column => open, + row => open, + addr => addr_vga, + n_blank => open, + n_sync => open + ); + vgaimg: entity work.hw_image_generator + port map( + disp_ena => disp_ena, + rgb_in => rgb_in, + red => VGA_R, + green => VGA_G, + blue => VGA_B + ); + + -- Address space (check sections.ld) and chip select: + -- 0x0000000000 -> 0b000 0000 0000 0000 0000 0000 0000 + -- 0x0002000000 -> 0b010 0000 0000 0000 0000 0000 0000 + -- 0x0004000000 -> 0b100 0000 0000 0000 0000 0000 0000 + -- 0x0006000000 -> 0b110 0000 0000 0000 0000 0000 0000 + with dcsel select + ddata_r <= idata when "00", + ddata_r_mem when "01", + input_in when "10", + (others => '0') when others; + + -- Softcore instatiation + myRisc: entity work.core + generic map( + IMEMORY_WORDS => IMEMORY_WORDS, + DMEMORY_WORDS => DMEMORY_WORDS + ) + port map( + clk => clk, + rst => rst, + iaddress => iaddress, + idata => idata, + daddress => daddress, + ddata_r => ddata_r, + ddata_w => ddata_w, + d_we => d_we, + d_rd => d_rd, + dcsel => dcsel, + dmask => dmask, + state => state + ); + + -- Output register (Dummy LED blinky) + process(clk, rst) + begin + if rst = '1' then + LEDR(3 downto 0) <= (others => '0'); + HEX0 <= (others => '1'); + HEX1 <= (others => '1'); + HEX2 <= (others => '1'); + HEX3 <= (others => '1'); + HEX4 <= (others => '1'); + HEX5 <= (others => '1'); + else + if rising_edge(clk) then + if (d_we = '1') and (dcsel = "10")then + -- ToDo: Simplify compartors + -- ToDo: Maybe use byte addressing? + -- x"01" (word addressing) is x"04" (byte addressing) + if to_unsigned(daddress, 32)(8 downto 0) = x"01" then + LEDR(4 downto 0) <= ddata_w(4 downto 0); + elsif to_unsigned(daddress, 32)(8 downto 0) = x"02" then + HEX0 <= ddata_w(7 downto 0); + HEX1 <= ddata_w(15 downto 8); + HEX2 <= ddata_w(23 downto 16); + HEX3 <= ddata_w(31 downto 24); + -- HEX4 <= ddata_w(7 downto 0); + -- HEX5 <= ddata_w(7 downto 0); + end if; + end if; + end if; + end if; + end process; + + + -- Input register + process(clk, rst) + begin + if rst = '1' then + input_in <= (others => '0'); + else + if rising_edge(clk) then + if (d_rd = '1') and (dcsel = "10") then + input_in(4 downto 0) <= SW(4 downto 0); + end if; + end if; + end if; + end process; + + +end; + diff --git a/peripherals/vga/hw_image_generator.vhd b/peripherals/vga/hw_image_generator.vhd new file mode 100644 index 00000000..35d93abb --- /dev/null +++ b/peripherals/vga/hw_image_generator.vhd @@ -0,0 +1,28 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +ENTITY hw_image_generator IS + PORT( + disp_ena : IN STD_LOGIC; --display enable ('1' = display time, '0' = blanking time) + rgb_in : in std_logic_vector(15 downto 0); -- RAM data in + red : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0'); --red magnitude output to R2R + green : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0'); --green magnitude output to R2R + blue : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0')); --blue magnitude output to R2R +END hw_image_generator; + +ARCHITECTURE behavior OF hw_image_generator IS +BEGIN + PROCESS(disp_ena, rgb_in) + BEGIN + IF (disp_ena = '1') THEN --display time + red <= rgb_in(3 downto 0); + green <= rgb_in(7 downto 4); + blue <= rgb_in(11 downto 8); + ELSE --blanking time + red <= (OTHERS => '0'); + green <= (OTHERS => '0'); + blue <= (OTHERS => '0'); + END IF; + + END PROCESS; +END behavior; diff --git a/peripherals/vga/pll/pll.cmp b/peripherals/vga/pll/pll.cmp new file mode 100644 index 00000000..a23e8447 --- /dev/null +++ b/peripherals/vga/pll/pll.cmp @@ -0,0 +1,25 @@ +--Copyright (C) 2018 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from 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 Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel FPGA IP License Agreement, or other applicable license +--agreement, including, without limitation, that your use is for +--the sole purpose of programming logic devices manufactured by +--Intel and sold by Intel or its authorized distributors. Please +--refer to the applicable agreement for further details. + + +component pll + PORT + ( + areset : IN STD_LOGIC := '0'; + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +end component; diff --git a/peripherals/vga/pll/pll.ppf b/peripherals/vga/pll/pll.ppf new file mode 100644 index 00000000..e107b0ee --- /dev/null +++ b/peripherals/vga/pll/pll.ppf @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/peripherals/vga/pll/pll.qip b/peripherals/vga/pll/pll.qip new file mode 100644 index 00000000..c051426a --- /dev/null +++ b/peripherals/vga/pll/pll.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "18.1" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{MAX 10}" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "pll.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] diff --git a/peripherals/vga/pll/pll.vhd b/peripherals/vga/pll/pll.vhd new file mode 100644 index 00000000..ae1d3fda --- /dev/null +++ b/peripherals/vga/pll/pll.vhd @@ -0,0 +1,399 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: pll.vhd +-- Megafunction Name(s): +-- altpll +-- +-- Simulation Library Files(s): +-- +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 18.1.0 Build 625 09/12/2018 SJ Standard Edition +-- ************************************************************ + + +--Copyright (C) 2018 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from 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 Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel FPGA IP License Agreement, or other applicable license +--agreement, including, without limitation, that your use is for +--the sole purpose of programming logic devices manufactured by +--Intel and sold by Intel or its authorized distributors. Please +--refer to the applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY pll IS + PORT + ( + areset : IN STD_LOGIC := '0'; + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +END pll; + + +ARCHITECTURE SYN OF pll IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC ; + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire6_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_divide_by : NATURAL; + clk0_duty_cycle : NATURAL; + clk0_multiply_by : NATURAL; + clk0_phase_shift : STRING; + clk1_divide_by : NATURAL; + clk1_duty_cycle : NATURAL; + clk1_multiply_by : NATURAL; + clk1_phase_shift : STRING; + compensate_clock : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + lpm_hint : STRING; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + port_activeclock : STRING; + port_areset : STRING; + port_clkbad0 : STRING; + port_clkbad1 : STRING; + port_clkloss : STRING; + port_clkswitch : STRING; + port_configupdate : STRING; + port_fbin : STRING; + port_inclk0 : STRING; + port_inclk1 : STRING; + port_locked : STRING; + port_pfdena : STRING; + port_phasecounterselect : STRING; + port_phasedone : STRING; + port_phasestep : STRING; + port_phaseupdown : STRING; + port_pllena : STRING; + port_scanaclr : STRING; + port_scanclk : STRING; + port_scanclkena : STRING; + port_scandata : STRING; + port_scandataout : STRING; + port_scandone : STRING; + port_scanread : STRING; + port_scanwrite : STRING; + port_clk0 : STRING; + port_clk1 : STRING; + port_clk2 : STRING; + port_clk3 : STRING; + port_clk4 : STRING; + port_clk5 : STRING; + port_clkena0 : STRING; + port_clkena1 : STRING; + port_clkena2 : STRING; + port_clkena3 : STRING; + port_clkena4 : STRING; + port_clkena5 : STRING; + port_extclk0 : STRING; + port_extclk1 : STRING; + port_extclk2 : STRING; + port_extclk3 : STRING; + self_reset_on_loss_lock : STRING; + width_clock : NATURAL + ); + PORT ( + areset : IN STD_LOGIC ; + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); + locked : OUT STD_LOGIC + ); + END COMPONENT; + +BEGIN + sub_wire6_bv(0 DOWNTO 0) <= "0"; + sub_wire6 <= To_stdlogicvector(sub_wire6_bv); + sub_wire2 <= sub_wire0(1); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + c1 <= sub_wire2; + locked <= sub_wire3; + sub_wire4 <= inclk0; + sub_wire5 <= sub_wire6(0 DOWNTO 0) & sub_wire4; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_divide_by => 50, + clk0_duty_cycle => 50, + clk0_multiply_by => 1, + clk0_phase_shift => "0", + clk1_divide_by => 5, + clk1_duty_cycle => 50, + clk1_multiply_by => 4, + clk1_phase_shift => "0", + compensate_clock => "CLK0", + inclk0_input_frequency => 20000, + intended_device_family => "MAX 10", + lpm_hint => "CBX_MODULE_PREFIX=pll", + lpm_type => "altpll", + operation_mode => "NORMAL", + pll_type => "AUTO", + port_activeclock => "PORT_UNUSED", + port_areset => "PORT_USED", + port_clkbad0 => "PORT_UNUSED", + port_clkbad1 => "PORT_UNUSED", + port_clkloss => "PORT_UNUSED", + port_clkswitch => "PORT_UNUSED", + port_configupdate => "PORT_UNUSED", + port_fbin => "PORT_UNUSED", + port_inclk0 => "PORT_USED", + port_inclk1 => "PORT_UNUSED", + port_locked => "PORT_USED", + port_pfdena => "PORT_UNUSED", + port_phasecounterselect => "PORT_UNUSED", + port_phasedone => "PORT_UNUSED", + port_phasestep => "PORT_UNUSED", + port_phaseupdown => "PORT_UNUSED", + port_pllena => "PORT_UNUSED", + port_scanaclr => "PORT_UNUSED", + port_scanclk => "PORT_UNUSED", + port_scanclkena => "PORT_UNUSED", + port_scandata => "PORT_UNUSED", + port_scandataout => "PORT_UNUSED", + port_scandone => "PORT_UNUSED", + port_scanread => "PORT_UNUSED", + port_scanwrite => "PORT_UNUSED", + port_clk0 => "PORT_USED", + port_clk1 => "PORT_USED", + port_clk2 => "PORT_UNUSED", + port_clk3 => "PORT_UNUSED", + port_clk4 => "PORT_UNUSED", + port_clk5 => "PORT_UNUSED", + port_clkena0 => "PORT_UNUSED", + port_clkena1 => "PORT_UNUSED", + port_clkena2 => "PORT_UNUSED", + port_clkena3 => "PORT_UNUSED", + port_clkena4 => "PORT_UNUSED", + port_clkena5 => "PORT_UNUSED", + port_extclk0 => "PORT_UNUSED", + port_extclk1 => "PORT_UNUSED", + port_extclk2 => "PORT_UNUSED", + port_extclk3 => "PORT_UNUSED", + self_reset_on_loss_lock => "OFF", + width_clock => 5 + ) + PORT MAP ( + areset => areset, + inclk => sub_wire5, + clk => sub_wire0, + locked => sub_wire3 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "1" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "1.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "40.000000" +-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "50.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "MAX 10" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "1" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "1.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "40.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "ps" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll.mif" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK2 STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK3 STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK4 STRING "0" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK1 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "1" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "5" +-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "4" +-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "20000" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "MAX 10" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "OFF" +-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +-- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +-- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" +-- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +-- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.vhd FALSE +-- Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/peripherals/vga/ram_vga.cmp b/peripherals/vga/ram_vga.cmp new file mode 100644 index 00000000..aeebaaf2 --- /dev/null +++ b/peripherals/vga/ram_vga.cmp @@ -0,0 +1,27 @@ +--Copyright (C) 2017 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from 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 Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel FPGA IP License Agreement, or other applicable license +--agreement, including, without limitation, that your use is for +--the sole purpose of programming logic devices manufactured by +--Intel and sold by Intel or its authorized distributors. Please +--refer to the applicable agreement for further details. + + +component ram_vga + PORT + ( + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + rdaddress : IN STD_LOGIC_VECTOR (12 DOWNTO 0); + rdclock : IN STD_LOGIC ; + wraddress : IN STD_LOGIC_VECTOR (12 DOWNTO 0); + wrclock : IN STD_LOGIC := '1'; + wren : IN STD_LOGIC := '0'; + q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) + ); +end component; diff --git a/peripherals/vga/ram_vga.qip b/peripherals/vga/ram_vga.qip new file mode 100644 index 00000000..5e3e965e --- /dev/null +++ b/peripherals/vga/ram_vga.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "RAM: 2-PORT" +set_global_assignment -name IP_TOOL_VERSION "17.1" +set_global_assignment -name IP_GENERATED_DEVICE_FAMILY "{MAX 10}" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "ram_vga.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "ram_vga.cmp"] diff --git a/peripherals/vga/ram_vga.vhd b/peripherals/vga/ram_vga.vhd new file mode 100644 index 00000000..da6583b1 --- /dev/null +++ b/peripherals/vga/ram_vga.vhd @@ -0,0 +1,198 @@ +-- megafunction wizard: %RAM: 2-PORT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altsyncram + +-- ============================================================ +-- File Name: ram_vga.vhd +-- Megafunction Name(s): +-- altsyncram +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 17.1.0 Build 590 10/25/2017 SJ Lite Edition +-- ************************************************************ + + +--Copyright (C) 2017 Intel Corporation. All rights reserved. +--Your use of Intel Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from 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 Intel Program License +--Subscription Agreement, the Intel Quartus Prime License Agreement, +--the Intel FPGA IP License Agreement, or other applicable license +--agreement, including, without limitation, that your use is for +--the sole purpose of programming logic devices manufactured by +--Intel and sold by Intel or its authorized distributors. Please +--refer to the applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.altera_mf_components.all; + +ENTITY ram_vga IS + PORT + ( + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + rdaddress : IN STD_LOGIC_VECTOR (12 DOWNTO 0); + rdclock : IN STD_LOGIC ; + wraddress : IN STD_LOGIC_VECTOR (12 DOWNTO 0); + wrclock : IN STD_LOGIC := '1'; + wren : IN STD_LOGIC := '0'; + q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) + ); +END ram_vga; + + +ARCHITECTURE SYN OF ram_vga IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (15 DOWNTO 0); + +BEGIN + q <= sub_wire0(15 DOWNTO 0); + + altsyncram_component : altsyncram + GENERIC MAP ( + address_aclr_b => "NONE", + address_reg_b => "CLOCK1", + clock_enable_input_a => "BYPASS", + clock_enable_input_b => "BYPASS", + clock_enable_output_b => "BYPASS", + intended_device_family => "MAX 10", + lpm_type => "altsyncram", + numwords_a => 8192, + numwords_b => 8192, + operation_mode => "DUAL_PORT", + outdata_aclr_b => "NONE", + outdata_reg_b => "UNREGISTERED", + power_up_uninitialized => "FALSE", + widthad_a => 13, + widthad_b => 13, + width_a => 16, + width_b => 16, + width_byteena_a => 1 + ) + PORT MAP ( + address_a => wraddress, + address_b => rdaddress, + clock0 => wrclock, + clock1 => rdclock, + data_a => data, + wren_a => wren, + q_b => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0" +-- Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0" +-- Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8" +-- Retrieval info: PRIVATE: BlankMemory NUMERIC "1" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0" +-- Retrieval info: PRIVATE: CLRdata NUMERIC "0" +-- Retrieval info: PRIVATE: CLRq NUMERIC "0" +-- Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0" +-- Retrieval info: PRIVATE: CLRrren NUMERIC "0" +-- Retrieval info: PRIVATE: CLRwraddress NUMERIC "0" +-- Retrieval info: PRIVATE: CLRwren NUMERIC "0" +-- Retrieval info: PRIVATE: Clock NUMERIC "1" +-- Retrieval info: PRIVATE: Clock_A NUMERIC "0" +-- Retrieval info: PRIVATE: Clock_B NUMERIC "0" +-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" +-- Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "0" +-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_B" +-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "MAX 10" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" +-- Retrieval info: PRIVATE: MEMSIZE NUMERIC "131072" +-- Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0" +-- Retrieval info: PRIVATE: MIFfilename STRING "vga.hex" +-- Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "0" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "3" +-- Retrieval info: PRIVATE: REGdata NUMERIC "1" +-- Retrieval info: PRIVATE: REGq NUMERIC "1" +-- Retrieval info: PRIVATE: REGrdaddress NUMERIC "1" +-- Retrieval info: PRIVATE: REGrren NUMERIC "1" +-- Retrieval info: PRIVATE: REGwraddress NUMERIC "1" +-- Retrieval info: PRIVATE: REGwren NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: UseDPRAM NUMERIC "1" +-- Retrieval info: PRIVATE: VarWidth NUMERIC "0" +-- Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "16" +-- Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "16" +-- Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "16" +-- Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "16" +-- Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "0" +-- Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: enable NUMERIC "0" +-- Retrieval info: PRIVATE: rden NUMERIC "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: ADDRESS_ACLR_B STRING "NONE" +-- Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "MAX 10" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" +-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "8192" +-- Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "8192" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "DUAL_PORT" +-- Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE" +-- Retrieval info: CONSTANT: OUTDATA_REG_B STRING "UNREGISTERED" +-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE" +-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "13" +-- Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "13" +-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "16" +-- Retrieval info: CONSTANT: WIDTH_B NUMERIC "16" +-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1" +-- Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL "data[15..0]" +-- Retrieval info: USED_PORT: q 0 0 16 0 OUTPUT NODEFVAL "q[15..0]" +-- Retrieval info: USED_PORT: rdaddress 0 0 13 0 INPUT NODEFVAL "rdaddress[12..0]" +-- Retrieval info: USED_PORT: rdclock 0 0 0 0 INPUT NODEFVAL "rdclock" +-- Retrieval info: USED_PORT: wraddress 0 0 13 0 INPUT NODEFVAL "wraddress[12..0]" +-- Retrieval info: USED_PORT: wrclock 0 0 0 0 INPUT VCC "wrclock" +-- Retrieval info: USED_PORT: wren 0 0 0 0 INPUT GND "wren" +-- Retrieval info: CONNECT: @address_a 0 0 13 0 wraddress 0 0 13 0 +-- Retrieval info: CONNECT: @address_b 0 0 13 0 rdaddress 0 0 13 0 +-- Retrieval info: CONNECT: @clock0 0 0 0 0 wrclock 0 0 0 0 +-- Retrieval info: CONNECT: @clock1 0 0 0 0 rdclock 0 0 0 0 +-- Retrieval info: CONNECT: @data_a 0 0 16 0 data 0 0 16 0 +-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 16 0 @q_b 0 0 16 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL ram_vga.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL ram_vga.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL ram_vga.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL ram_vga.bsf FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL ram_vga_inst.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/peripherals/vga/sint/db/de10_lite.db_info b/peripherals/vga/sint/db/de10_lite.db_info new file mode 100644 index 00000000..7e4ab3b9 --- /dev/null +++ b/peripherals/vga/sint/db/de10_lite.db_info @@ -0,0 +1,3 @@ +Quartus_Version = Version 18.1.0 Build 625 09/12/2018 SJ Standard Edition +Version_Index = 486699264 +Creation_Time = Mon Jul 8 16:21:27 2019 diff --git a/peripherals/vga/sint/de10_lite.ipregen.rpt b/peripherals/vga/sint/de10_lite.ipregen.rpt new file mode 100644 index 00000000..443f4822 --- /dev/null +++ b/peripherals/vga/sint/de10_lite.ipregen.rpt @@ -0,0 +1,68 @@ +IP Upgrade report for de10_lite +Mon Jul 8 14:08:52 2019 +Quartus Prime Version 18.1.0 Build 625 09/12/2018 SJ Standard Edition + + +--------------------- +; Table of Contents ; +--------------------- + 1. Legal Notice + 2. IP Upgrade Summary + 3. Successfully Upgraded IP Components + 4. IP Upgrade Messages + + + +---------------- +; Legal Notice ; +---------------- +Copyright (C) 2018 Intel Corporation. All rights reserved. +Your use of Intel Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from 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 Intel Program License +Subscription Agreement, the Intel Quartus Prime License Agreement, +the Intel FPGA IP License Agreement, or other applicable license +agreement, including, without limitation, that your use is for +the sole purpose of programming logic devices manufactured by +Intel and sold by Intel or its authorized distributors. Please +refer to the applicable agreement for further details. + + + ++--------------------------------------------------------------------------------+ +; IP Upgrade Summary ; ++------------------------------+-------------------------------------------------+ +; IP Components Upgrade Status ; Passed - Mon Jul 8 14:08:52 2019 ; +; Quartus Prime Version ; 18.1.0 Build 625 09/12/2018 SJ Standard Edition ; +; Revision Name ; de10_lite ; +; Top-level Entity Name ; de10_lite ; +; Family ; MAX 10 ; ++------------------------------+-------------------------------------------------+ + + ++------------------------------------------------------------------------------------------------------------------+ +; Successfully Upgraded IP Components ; ++-------------+----------------+---------+----------------------+----------------------+-----------------+---------+ +; Entity Name ; Component Name ; Version ; Original Source File ; Generation File Path ; New Source File ; Message ; ++-------------+----------------+---------+----------------------+----------------------+-----------------+---------+ +; pll ; ALTPLL ; 17.1 ; ../pll/pll.qip ; ../pll/pll.vhd ; ../pll/pll.qip ; ; ++-------------+----------------+---------+----------------------+----------------------+-----------------+---------+ + + ++---------------------+ +; IP Upgrade Messages ; ++---------------------+ +Info (11902): Backing up file "../pll/pll.vhd" to "../pll/pll.BAK.vhd" +Info (11837): Started upgrading IP component ALTPLL with file "../pll/pll.vhd" +Info (11131): Completed upgrading IP component ALTPLL with file "../pll/pll.vhd" +Info (23030): Evaluation of Tcl script /home/xtarke/Data/Apps/intelFPGA/18.1/quartus/common/tcl/internal/ip_regen/ip_regen.tcl was successful +Info: Quartus Prime Shell was successful. 0 errors, 0 warnings + Info: Peak virtual memory: 1072 megabytes + Info: Processing ended: Mon Jul 8 14:08:52 2019 + Info: Elapsed time: 00:00:10 + Info: Total CPU time (on all processors): 00:00:28 + + diff --git a/peripherals/vga/sint/de10_lite.qpf b/peripherals/vga/sint/de10_lite.qpf new file mode 100644 index 00000000..2e37e9d1 --- /dev/null +++ b/peripherals/vga/sint/de10_lite.qpf @@ -0,0 +1,31 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2015 Altera Corporation. All rights reserved. +# 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 from 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, the Altera Quartus II License Agreement, +# the 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 64-Bit +# Version 15.0.0 Build 145 04/22/2015 SJ Web Edition +# Date created = 18:49:34 June 20, 2019 +# +# -------------------------------------------------------------------------- # + +QUARTUS_VERSION = "15.0" +DATE = "18:49:34 June 20, 2019" + +# Revisions + +PROJECT_REVISION = "de10_lite" diff --git a/peripherals/vga/sint/de10_lite.qsf b/peripherals/vga/sint/de10_lite.qsf new file mode 100644 index 00000000..2e19a916 --- /dev/null +++ b/peripherals/vga/sint/de10_lite.qsf @@ -0,0 +1,238 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2015 Altera Corporation. All rights reserved. +# 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 from 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, the Altera Quartus II License Agreement, +# the 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 64-Bit +# Version 15.0.0 Build 145 04/22/2015 SJ Web Edition +# Date created = 18:49:34 June 20, 2019 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# de10_lite_assignment_defaults.qdf +# If this file doesn't exist, see file: +# assignment_defaults.qdf +# +# 2) Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. +# +# -------------------------------------------------------------------------- # + + +set_global_assignment -name FAMILY "MAX 10" +set_global_assignment -name DEVICE 10M50DAF484C7G +set_global_assignment -name TOP_LEVEL_ENTITY de10_lite +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 15.0.0 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "18:49:34 JUNE 20, 2019" +set_global_assignment -name LAST_QUARTUS_VERSION "18.1.0 Standard Edition" +set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 +set_global_assignment -name ERROR_CHECK_FREQUENCY_DIVISOR 256 +set_global_assignment -name EDA_SIMULATION_TOOL "ModelSim-Altera (VHDL)" +set_global_assignment -name EDA_OUTPUT_DATA_FORMAT VHDL -section_id eda_simulation +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" +set_global_assignment -name ENABLE_OCT_DONE ON +set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 00000000 +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF +set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "SINGLE IMAGE WITH ERAM" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall +set_location_assignment PIN_N5 -to ADC_CLK_10 +set_location_assignment PIN_P11 -to MAX10_CLK1_50 +set_location_assignment PIN_N14 -to MAX10_CLK2_50 +set_location_assignment PIN_U17 -to DRAM_ADDR[0] +set_location_assignment PIN_W19 -to DRAM_ADDR[1] +set_location_assignment PIN_V18 -to DRAM_ADDR[2] +set_location_assignment PIN_U18 -to DRAM_ADDR[3] +set_location_assignment PIN_U19 -to DRAM_ADDR[4] +set_location_assignment PIN_T18 -to DRAM_ADDR[5] +set_location_assignment PIN_T19 -to DRAM_ADDR[6] +set_location_assignment PIN_R18 -to DRAM_ADDR[7] +set_location_assignment PIN_P18 -to DRAM_ADDR[8] +set_location_assignment PIN_P19 -to DRAM_ADDR[9] +set_location_assignment PIN_T20 -to DRAM_ADDR[10] +set_location_assignment PIN_P20 -to DRAM_ADDR[11] +set_location_assignment PIN_R20 -to DRAM_ADDR[12] +set_location_assignment PIN_T21 -to DRAM_BA[0] +set_location_assignment PIN_T22 -to DRAM_BA[1] +set_location_assignment PIN_U21 -to DRAM_CAS_N +set_location_assignment PIN_N22 -to DRAM_CKE +set_location_assignment PIN_L14 -to DRAM_CLK +set_location_assignment PIN_U20 -to DRAM_CS_N +set_location_assignment PIN_Y21 -to DRAM_DQ[0] +set_location_assignment PIN_Y20 -to DRAM_DQ[1] +set_location_assignment PIN_AA22 -to DRAM_DQ[2] +set_location_assignment PIN_AA21 -to DRAM_DQ[3] +set_location_assignment PIN_Y22 -to DRAM_DQ[4] +set_location_assignment PIN_W22 -to DRAM_DQ[5] +set_location_assignment PIN_W20 -to DRAM_DQ[6] +set_location_assignment PIN_V21 -to DRAM_DQ[7] +set_location_assignment PIN_P21 -to DRAM_DQ[8] +set_location_assignment PIN_J22 -to DRAM_DQ[9] +set_location_assignment PIN_H21 -to DRAM_DQ[10] +set_location_assignment PIN_H22 -to DRAM_DQ[11] +set_location_assignment PIN_G22 -to DRAM_DQ[12] +set_location_assignment PIN_G20 -to DRAM_DQ[13] +set_location_assignment PIN_G19 -to DRAM_DQ[14] +set_location_assignment PIN_F22 -to DRAM_DQ[15] +set_location_assignment PIN_V22 -to DRAM_LDQM +set_location_assignment PIN_U22 -to DRAM_RAS_N +set_location_assignment PIN_J21 -to DRAM_UDQM +set_location_assignment PIN_V20 -to DRAM_WE_N +set_location_assignment PIN_C14 -to HEX0[0] +set_location_assignment PIN_E15 -to HEX0[1] +set_location_assignment PIN_C15 -to HEX0[2] +set_location_assignment PIN_C16 -to HEX0[3] +set_location_assignment PIN_E16 -to HEX0[4] +set_location_assignment PIN_D17 -to HEX0[5] +set_location_assignment PIN_C17 -to HEX0[6] +set_location_assignment PIN_D15 -to HEX0[7] +set_location_assignment PIN_C18 -to HEX1[0] +set_location_assignment PIN_D18 -to HEX1[1] +set_location_assignment PIN_E18 -to HEX1[2] +set_location_assignment PIN_B16 -to HEX1[3] +set_location_assignment PIN_A17 -to HEX1[4] +set_location_assignment PIN_A18 -to HEX1[5] +set_location_assignment PIN_B17 -to HEX1[6] +set_location_assignment PIN_A16 -to HEX1[7] +set_location_assignment PIN_B20 -to HEX2[0] +set_location_assignment PIN_A20 -to HEX2[1] +set_location_assignment PIN_B19 -to HEX2[2] +set_location_assignment PIN_A21 -to HEX2[3] +set_location_assignment PIN_B21 -to HEX2[4] +set_location_assignment PIN_C22 -to HEX2[5] +set_location_assignment PIN_B22 -to HEX2[6] +set_location_assignment PIN_A19 -to HEX2[7] +set_location_assignment PIN_F21 -to HEX3[0] +set_location_assignment PIN_E22 -to HEX3[1] +set_location_assignment PIN_E21 -to HEX3[2] +set_location_assignment PIN_C19 -to HEX3[3] +set_location_assignment PIN_C20 -to HEX3[4] +set_location_assignment PIN_D19 -to HEX3[5] +set_location_assignment PIN_E17 -to HEX3[6] +set_location_assignment PIN_D22 -to HEX3[7] +set_location_assignment PIN_F18 -to HEX4[0] +set_location_assignment PIN_E20 -to HEX4[1] +set_location_assignment PIN_E19 -to HEX4[2] +set_location_assignment PIN_J18 -to HEX4[3] +set_location_assignment PIN_H19 -to HEX4[4] +set_location_assignment PIN_F19 -to HEX4[5] +set_location_assignment PIN_F20 -to HEX4[6] +set_location_assignment PIN_F17 -to HEX4[7] +set_location_assignment PIN_J20 -to HEX5[0] +set_location_assignment PIN_K20 -to HEX5[1] +set_location_assignment PIN_L18 -to HEX5[2] +set_location_assignment PIN_N18 -to HEX5[3] +set_location_assignment PIN_M20 -to HEX5[4] +set_location_assignment PIN_N19 -to HEX5[5] +set_location_assignment PIN_N20 -to HEX5[6] +set_location_assignment PIN_L19 -to HEX5[7] +set_location_assignment PIN_B8 -to KEY[0] +set_location_assignment PIN_A7 -to KEY[1] +set_location_assignment PIN_A8 -to LEDR[0] +set_location_assignment PIN_A9 -to LEDR[1] +set_location_assignment PIN_A10 -to LEDR[2] +set_location_assignment PIN_B10 -to LEDR[3] +set_location_assignment PIN_D13 -to LEDR[4] +set_location_assignment PIN_C13 -to LEDR[5] +set_location_assignment PIN_E14 -to LEDR[6] +set_location_assignment PIN_D14 -to LEDR[7] +set_location_assignment PIN_A11 -to LEDR[8] +set_location_assignment PIN_B11 -to LEDR[9] +set_location_assignment PIN_C10 -to SW[0] +set_location_assignment PIN_C11 -to SW[1] +set_location_assignment PIN_D12 -to SW[2] +set_location_assignment PIN_C12 -to SW[3] +set_location_assignment PIN_A12 -to SW[4] +set_location_assignment PIN_B12 -to SW[5] +set_location_assignment PIN_A13 -to SW[6] +set_location_assignment PIN_A14 -to SW[7] +set_location_assignment PIN_B14 -to SW[8] +set_location_assignment PIN_F15 -to SW[9] +set_location_assignment PIN_P1 -to VGA_B[0] +set_location_assignment PIN_T1 -to VGA_B[1] +set_location_assignment PIN_P4 -to VGA_B[2] +set_location_assignment PIN_N2 -to VGA_B[3] +set_location_assignment PIN_W1 -to VGA_G[0] +set_location_assignment PIN_T2 -to VGA_G[1] +set_location_assignment PIN_R2 -to VGA_G[2] +set_location_assignment PIN_R1 -to VGA_G[3] +set_location_assignment PIN_N3 -to VGA_HS +set_location_assignment PIN_AA1 -to VGA_R[0] +set_location_assignment PIN_V1 -to VGA_R[1] +set_location_assignment PIN_Y2 -to VGA_R[2] +set_location_assignment PIN_Y1 -to VGA_R[3] +set_location_assignment PIN_N1 -to VGA_VS +set_location_assignment PIN_AB16 -to GSENSOR_CS_N +set_location_assignment PIN_Y14 -to GSENSOR_INT[1] +set_location_assignment PIN_Y13 -to GSENSOR_INT[2] +set_location_assignment PIN_AB15 -to GSENSOR_SCLK +set_location_assignment PIN_V11 -to GSENSOR_SDI +set_location_assignment PIN_V12 -to GSENSOR_SDO +set_location_assignment PIN_AB5 -to ARDUINO_IO[0] +set_location_assignment PIN_AB6 -to ARDUINO_IO[1] +set_location_assignment PIN_AB7 -to ARDUINO_IO[2] +set_location_assignment PIN_AB8 -to ARDUINO_IO[3] +set_location_assignment PIN_AB9 -to ARDUINO_IO[4] +set_location_assignment PIN_Y10 -to ARDUINO_IO[5] +set_location_assignment PIN_AA11 -to ARDUINO_IO[6] +set_location_assignment PIN_AA12 -to ARDUINO_IO[7] +set_location_assignment PIN_AB17 -to ARDUINO_IO[8] +set_location_assignment PIN_AA17 -to ARDUINO_IO[9] +set_location_assignment PIN_AB19 -to ARDUINO_IO[10] +set_location_assignment PIN_AA19 -to ARDUINO_IO[11] +set_location_assignment PIN_Y19 -to ARDUINO_IO[12] +set_location_assignment PIN_AB20 -to ARDUINO_IO[13] +set_location_assignment PIN_AB21 -to ARDUINO_IO[14] +set_location_assignment PIN_AA20 -to ARDUINO_IO[15] +set_location_assignment PIN_F16 -to ARDUINO_RESET_N +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V" +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top +set_global_assignment -name VHDL_FILE ../hw_image_generator.vhd +set_global_assignment -name VHDL_FILE ../vga_controller.vhd +set_global_assignment -name QIP_FILE ../pll/pll.qip +set_global_assignment -name VHDL_FILE ../ram_vga.vhd +set_global_assignment -name QIP_FILE ../ram_vga.qip +set_global_assignment -name VHDL_FILE ../de10_lite.vhd +set_global_assignment -name SDC_FILE de10_lite.sdc +set_global_assignment -name VHDL_FILE ../../../alu/alu_types.vhd +set_global_assignment -name VHDL_FILE ../../../alu/alu.vhd +set_global_assignment -name VHDL_FILE ../../../alu/m/M_types.vhd +set_global_assignment -name VHDL_FILE ../../../alu/m/M.vhd +set_global_assignment -name VHDL_FILE ../../../memory/dmemory.vhd +set_global_assignment -name VHDL_FILE ../../../memory/iram_quartus.vhd +set_global_assignment -name QIP_FILE ../../../memory/iram_quartus.qip +set_global_assignment -name VHDL_FILE ../../../decoder/iregister.vhd +set_global_assignment -name VHDL_FILE ../../../decoder/decoder_types.vhd +set_global_assignment -name VHDL_FILE ../../../decoder/decoder.vhd +set_global_assignment -name VHDL_FILE ../../../core/core.vhd +set_global_assignment -name VHDL_FILE ../../../registers/register_file.vhd + + + +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/peripherals/vga/sint/de10_lite.sdc b/peripherals/vga/sint/de10_lite.sdc new file mode 100644 index 00000000..7267c16e --- /dev/null +++ b/peripherals/vga/sint/de10_lite.sdc @@ -0,0 +1,86 @@ +#************************************************************** +# This .sdc file is created by Terasic Tool. +# Users are recommended to modify this file to match users logic. +#************************************************************** + +#************************************************************** +# Create Clock +#************************************************************** +create_clock -period "10.0 MHz" [get_ports ADC_CLK_10] +create_clock -period "50.0 MHz" [get_ports MAX10_CLK1_50] +create_clock -period "50.0 MHz" [get_ports MAX10_CLK2_50] + +#************************************************************** +# Create Generated Clock +#************************************************************** +derive_pll_clocks + + + +#************************************************************** +# Set Clock Latency +#************************************************************** + + + +#************************************************************** +# Set Clock Uncertainty +#************************************************************** +derive_clock_uncertainty + + + +#************************************************************** +# Set Input Delay +#************************************************************** + + + +#************************************************************** +# Set Output Delay +#************************************************************** + + + +#************************************************************** +# Set Clock Groups +#************************************************************** + + + +#************************************************************** +# Set False Path +#************************************************************** + + + +#************************************************************** +# Set Multicycle Path +#************************************************************** + + + +#************************************************************** +# Set Maximum Delay +#************************************************************** + + + +#************************************************************** +# Set Minimum Delay +#************************************************************** + + + +#************************************************************** +# Set Input Transition +#************************************************************** + + + +#************************************************************** +# Set Load +#************************************************************** + + + diff --git a/peripherals/vga/sint/de10_lite_assignment_defaults.qdf b/peripherals/vga/sint/de10_lite_assignment_defaults.qdf new file mode 100644 index 00000000..d40b50e3 --- /dev/null +++ b/peripherals/vga/sint/de10_lite_assignment_defaults.qdf @@ -0,0 +1,807 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 2018 Intel Corporation. All rights reserved. +# Your use of Intel Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from 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 Intel Program License +# Subscription Agreement, the Intel Quartus Prime License Agreement, +# the Intel FPGA IP License Agreement, or other applicable license +# agreement, including, without limitation, that your use is for +# the sole purpose of programming logic devices manufactured by +# Intel and sold by Intel or its authorized distributors. Please +# refer to the applicable agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus Prime +# Version 18.1.0 Build 625 09/12/2018 SJ Standard Edition +# Date created = 08:39:22 July 08, 2019 +# +# -------------------------------------------------------------------------- # +# +# Note: +# +# 1) Do not modify this file. This file was generated +# automatically by the Quartus Prime software and is used +# to preserve global assignments across Quartus Prime versions. +# +# -------------------------------------------------------------------------- # + +set_global_assignment -name IP_COMPONENT_REPORT_HIERARCHY Off +set_global_assignment -name IP_COMPONENT_INTERNAL Off +set_global_assignment -name PROJECT_SHOW_ENTITY_NAME On +set_global_assignment -name PROJECT_USE_SIMPLIFIED_NAMES Off +set_global_assignment -name ENABLE_REDUCED_MEMORY_MODE Off +set_global_assignment -name VER_COMPATIBLE_DB_DIR export_db +set_global_assignment -name AUTO_EXPORT_VER_COMPATIBLE_DB Off +set_global_assignment -name FLOW_DISABLE_ASSEMBLER Off +set_global_assignment -name FLOW_ENABLE_POWER_ANALYZER Off +set_global_assignment -name FLOW_ENABLE_HC_COMPARE Off +set_global_assignment -name HC_OUTPUT_DIR hc_output +set_global_assignment -name SAVE_MIGRATION_INFO_DURING_COMPILATION Off +set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS Off +set_global_assignment -name RUN_FULL_COMPILE_ON_DEVICE_CHANGE On +set_global_assignment -name FLOW_ENABLE_RTL_VIEWER Off +set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS "Use global settings" +set_global_assignment -name FLOW_HARDCOPY_DESIGN_READINESS_CHECK On +set_global_assignment -name FLOW_ENABLE_PARALLEL_MODULES On +set_global_assignment -name ENABLE_COMPACT_REPORT_TABLE Off +set_global_assignment -name REVISION_TYPE Base -family "Arria V" +set_global_assignment -name REVISION_TYPE Base -family "Stratix V" +set_global_assignment -name REVISION_TYPE Base -family "Arria V GZ" +set_global_assignment -name REVISION_TYPE Base -family "Cyclone V" +set_global_assignment -name DEFAULT_HOLD_MULTICYCLE "Same as Multicycle" +set_global_assignment -name CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS On +set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS On +set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK On +set_global_assignment -name DO_COMBINED_ANALYSIS Off +set_global_assignment -name TDC_AGGRESSIVE_HOLD_CLOSURE_EFFORT Off +set_global_assignment -name ENABLE_HPS_INTERNAL_TIMING Off +set_global_assignment -name EMIF_SOC_PHYCLK_ADVANCE_MODELING Off +set_global_assignment -name USE_DLL_FREQUENCY_FOR_DQS_DELAY_CHAIN Off +set_global_assignment -name ANALYZE_LATCHES_AS_SYNCHRONOUS_ELEMENTS On +set_global_assignment -name TIMING_ANALYZER_REPORT_SCRIPT_INCLUDE_DEFAULT_ANALYSIS On +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria V" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone 10 LP" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "MAX 10" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Stratix IV" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone IV E" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria 10" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS Off -family "MAX V" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Stratix V" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria V GZ" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS Off -family "MAX II" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria II GX" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Arria II GZ" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone IV GX" +set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS On -family "Cyclone V" +set_global_assignment -name TIMING_ANALYZER_DO_REPORT_TIMING Off +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone 10 LP" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "MAX 10" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix IV" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV E" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria 10" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX V" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix V" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria V GZ" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX II" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GX" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GZ" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV GX" +set_global_assignment -name TIMING_ANALYZER_REPORT_WORST_CASE_TIMING_PATHS Off -family "Cyclone V" +set_global_assignment -name TIMING_ANALYZER_REPORT_NUM_WORST_CASE_TIMING_PATHS 100 +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria V" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone 10 LP" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "MAX 10" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone IV E" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Stratix IV" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria 10" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL Off -family "MAX V" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Stratix V" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria V GZ" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL Off -family "MAX II" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria II GX" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Arria II GZ" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone IV GX" +set_global_assignment -name TIMING_ANALYZER_DO_CCPP_REMOVAL On -family "Cyclone V" +set_global_assignment -name OPTIMIZATION_MODE Balanced +set_global_assignment -name ALLOW_REGISTER_MERGING On +set_global_assignment -name ALLOW_REGISTER_DUPLICATION On +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria V" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER ON -family "Cyclone 10 LP" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX 10" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Stratix IV" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone IV E" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER ON -family "Arria 10" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX V" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Stratix V" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria V GZ" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "MAX II" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria II GX" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Arria II GZ" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone IV GX" +set_global_assignment -name DISABLE_LEGACY_TIMING_ANALYZER OFF -family "Cyclone V" +set_global_assignment -name MUX_RESTRUCTURE Auto +set_global_assignment -name MLAB_ADD_TIMING_CONSTRAINTS_FOR_MIXED_PORT_FEED_THROUGH_MODE_SETTING_DONT_CARE Off +set_global_assignment -name ENABLE_IP_DEBUG Off +set_global_assignment -name SAVE_DISK_SPACE On +set_global_assignment -name OCP_HW_EVAL -value OFF +set_global_assignment -name DEVICE_FILTER_PACKAGE Any +set_global_assignment -name DEVICE_FILTER_PIN_COUNT Any +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE Any +set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" +set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001 +set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993 +set_global_assignment -name FAMILY -value "Cyclone V" +set_global_assignment -name TRUE_WYSIWYG_FLOW Off +set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off +set_global_assignment -name STATE_MACHINE_PROCESSING Auto +set_global_assignment -name SAFE_STATE_MACHINE Off +set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On +set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On +set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off +set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000 +set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250 +set_global_assignment -name INFER_RAMS_FROM_RAW_LOGIC On +set_global_assignment -name PARALLEL_SYNTHESIS On +set_global_assignment -name DSP_BLOCK_BALANCING Auto +set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)" +set_global_assignment -name NOT_GATE_PUSH_BACK On +set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On +set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off +set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On +set_global_assignment -name IGNORE_CARRY_BUFFERS Off +set_global_assignment -name IGNORE_CASCADE_BUFFERS Off +set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off +set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off +set_global_assignment -name IGNORE_LCELL_BUFFERS Off +set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO +set_global_assignment -name IGNORE_SOFT_BUFFERS On +set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off +set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off +set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On +set_global_assignment -name AUTO_GLOBAL_OE_MAX On +set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On +set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off +set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut +set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed +set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name ALLOW_XOR_GATE_USAGE On +set_global_assignment -name AUTO_LCELL_INSERTION On +set_global_assignment -name CARRY_CHAIN_LENGTH 48 +set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32 +set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32 +set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48 +set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70 +set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70 +set_global_assignment -name CASCADE_CHAIN_LENGTH 2 +set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16 +set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4 +set_global_assignment -name AUTO_CARRY_CHAINS On +set_global_assignment -name AUTO_CASCADE_CHAINS On +set_global_assignment -name AUTO_PARALLEL_EXPANDERS On +set_global_assignment -name AUTO_OPEN_DRAIN_PINS On +set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off +set_global_assignment -name AUTO_ROM_RECOGNITION On +set_global_assignment -name AUTO_RAM_RECOGNITION On +set_global_assignment -name AUTO_DSP_RECOGNITION On +set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto +set_global_assignment -name ALLOW_SHIFT_REGISTER_MERGING_ACROSS_HIERARCHIES Auto +set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On +set_global_assignment -name STRICT_RAM_RECOGNITION Off +set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On +set_global_assignment -name FORCE_SYNCH_CLEAR Off +set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On +set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off +set_global_assignment -name AUTO_RESOURCE_SHARING Off +set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION Off +set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION Off +set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off +set_global_assignment -name MAX7000_FANIN_PER_CELL 100 +set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On +set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)" +set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)" +set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)" +set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off +set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GZ" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone 10 LP" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "MAX 10" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV GX" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix IV" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone IV E" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria 10" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Stratix V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria V GZ" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Cyclone V" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS On -family "Arria II GX" +set_global_assignment -name REPORT_PARAMETER_SETTINGS On +set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS On +set_global_assignment -name REPORT_CONNECTIVITY_CHECKS On +set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone 10 LP" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX 10" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV E" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix IV" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria 10" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Stratix V" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "MAX II" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria V GZ" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GX" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Arria II GZ" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 -family "Cyclone IV GX" +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 3 -family "Cyclone V" +set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation" +set_global_assignment -name HDL_MESSAGE_LEVEL Level2 +set_global_assignment -name USE_HIGH_SPEED_ADDER Auto +set_global_assignment -name NUMBER_OF_PROTECTED_REGISTERS_REPORTED 100 +set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000 +set_global_assignment -name NUMBER_OF_SYNTHESIS_MIGRATION_ROWS 5000 +set_global_assignment -name SYNTHESIS_S10_MIGRATION_CHECKS Off +set_global_assignment -name NUMBER_OF_SWEPT_NODES_REPORTED 5000 +set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100 +set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On +set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off +set_global_assignment -name BLOCK_DESIGN_NAMING Auto +set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off +set_global_assignment -name SYNTHESIS_EFFORT Auto +set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On +set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off +set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium +set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GZ" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone 10 LP" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "MAX 10" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria 10" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria V GZ" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone V" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX" +set_global_assignment -name MAX_LABS "-1 (Unlimited)" +set_global_assignment -name RBCGEN_CRITICAL_WARNING_TO_ERROR On +set_global_assignment -name MAX_NUMBER_OF_REGISTERS_FROM_UNINFERRED_RAMS "-1 (Unlimited)" +set_global_assignment -name AUTO_PARALLEL_SYNTHESIS On +set_global_assignment -name PRPOF_ID Off +set_global_assignment -name DISABLE_DSP_NEGATE_INFERENCING Off +set_global_assignment -name REPORT_PARAMETER_SETTINGS_PRO On +set_global_assignment -name REPORT_SOURCE_ASSIGNMENTS_PRO On +set_global_assignment -name ENABLE_STATE_MACHINE_INFERENCE Off +set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off +set_global_assignment -name AUTO_MERGE_PLLS On +set_global_assignment -name IGNORE_MODE_FOR_MERGE Off +set_global_assignment -name TXPMA_SLEW_RATE Low +set_global_assignment -name ADCE_ENABLED Auto +set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal +set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS Off +set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0 +set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0 +set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0 +set_global_assignment -name PHYSICAL_SYNTHESIS Off +set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off +set_global_assignment -name DEVICE AUTO +set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off +set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off +set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On +set_global_assignment -name ENABLE_NCEO_OUTPUT Off +set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin" +set_global_assignment -name STRATIXIII_UPDATE_MODE Standard +set_global_assignment -name STRATIX_UPDATE_MODE Standard +set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "Single Image" +set_global_assignment -name CVP_MODE Off +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria 10" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Stratix V" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Arria V GZ" +set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "Passive Serial" -family "Cyclone V" +set_global_assignment -name VID_OPERATION_MODE "PMBus Slave" +set_global_assignment -name USE_CONF_DONE AUTO +set_global_assignment -name USE_PWRMGT_SCL AUTO +set_global_assignment -name USE_PWRMGT_SDA AUTO +set_global_assignment -name USE_PWRMGT_ALERT AUTO +set_global_assignment -name USE_INIT_DONE AUTO +set_global_assignment -name USE_CVP_CONFDONE AUTO +set_global_assignment -name USE_SEU_ERROR AUTO +set_global_assignment -name RESERVE_AVST_CLK_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_VALID_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_DATA15_THROUGH_DATA0_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_AVST_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name MAX10FPGA_CONFIGURATION_SCHEME "Internal Configuration" +set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name USER_START_UP_CLOCK Off +set_global_assignment -name ENABLE_UNUSED_RX_CLOCK_WORKAROUND Off +set_global_assignment -name PRESERVE_UNUSED_XCVR_CHANNEL Off +set_global_assignment -name IGNORE_HSSI_COLUMN_POWER_WHEN_PRESERVING_UNUSED_XCVR_CHANNELS On +set_global_assignment -name AUTO_RESERVE_CLKUSR_FOR_CALIBRATION On +set_global_assignment -name DEVICE_INITIALIZATION_CLOCK INIT_INTOSC +set_global_assignment -name ENABLE_VREFA_PIN Off +set_global_assignment -name ENABLE_VREFB_PIN Off +set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off +set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off +set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off +set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off +set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground" +set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off +set_global_assignment -name INIT_DONE_OPEN_DRAIN On +set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA31_THROUGH_DATA16_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA15_THROUGH_DATA8_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA5_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin" +set_global_assignment -name ENABLE_CONFIGURATION_PINS On +set_global_assignment -name ENABLE_JTAG_PIN_SHARING Off +set_global_assignment -name ENABLE_NCE_PIN Off +set_global_assignment -name ENABLE_BOOT_SEL_PIN On +set_global_assignment -name CRC_ERROR_CHECKING Off +set_global_assignment -name INTERNAL_SCRUBBING Off +set_global_assignment -name PR_ERROR_OPEN_DRAIN On +set_global_assignment -name PR_READY_OPEN_DRAIN On +set_global_assignment -name ENABLE_CVP_CONFDONE Off +set_global_assignment -name CVP_CONFDONE_OPEN_DRAIN On +set_global_assignment -name ENABLE_NCONFIG_FROM_CORE On +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GZ" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone 10 LP" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "MAX 10" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria 10" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria V GZ" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone V" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone 10 LP" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "MAX 10" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV E" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix IV" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria 10" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Stratix V" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria V GZ" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off -family "MAX II" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Arria II GZ" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone IV GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING On -family "Cyclone V" +set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On +set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto +set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix IV" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria 10" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Stratix V" +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING Automatic -family "Arria V GZ" +set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0 +set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On +set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation" +set_global_assignment -name OPTIMIZE_SSN Off +set_global_assignment -name OPTIMIZE_TIMING "Normal compilation" +set_global_assignment -name ECO_OPTIMIZE_TIMING Off +set_global_assignment -name ECO_REGENERATE_REPORT Off +set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING Normal +set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off +set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically +set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically +set_global_assignment -name SEED 1 +set_global_assignment -name PERIPHERY_TO_CORE_PLACEMENT_AND_ROUTING_OPTIMIZATION OFF +set_global_assignment -name RESERVE_ROUTING_OUTPUT_FLEXIBILITY Off +set_global_assignment -name SLOW_SLEW_RATE Off +set_global_assignment -name PCI_IO Off +set_global_assignment -name TURBO_BIT On +set_global_assignment -name WEAK_PULL_UP_RESISTOR Off +set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off +set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off +set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On +set_global_assignment -name QII_AUTO_PACKED_REGISTERS Auto +set_global_assignment -name AUTO_PACKED_REGISTERS_MAX Auto +set_global_assignment -name NORMAL_LCELL_INSERT On +set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone 10 LP" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX 10" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix IV" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV E" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria 10" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Stratix V" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "MAX II" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria V GZ" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GX" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Arria II GZ" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone IV GX" +set_global_assignment -name AUTO_DELAY_CHAINS On -family "Cyclone V" +set_global_assignment -name AUTO_DELAY_CHAINS_FOR_HIGH_FANOUT_INPUT_PINS OFF +set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off +set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off +set_global_assignment -name AUTO_TURBO_BIT ON +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off +set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off +set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off +set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off +set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On +set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off +set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off +set_global_assignment -name FITTER_EFFORT "Auto Fit" +set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal +set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION Auto +set_global_assignment -name ROUTER_REGISTER_DUPLICATION Auto +set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off +set_global_assignment -name AUTO_GLOBAL_CLOCK On +set_global_assignment -name AUTO_GLOBAL_OE On +set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On +set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic +set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off +set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off +set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off +set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off +set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off +set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off +set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up" +set_global_assignment -name ENABLE_HOLD_BACK_OFF On +set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto +set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off +set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Auto +set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On +set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone 10 LP" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "MAX 10" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off -family "Cyclone IV E" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria 10" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Stratix V" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Arria V GZ" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN On -family "Cyclone V" +set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria 10" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Stratix V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Cyclone IV GX" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Arria V GZ" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHz -family "Cyclone V" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz -family "Arria II GX" +set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off +set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On +set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off +set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off +set_global_assignment -name PR_DONE_OPEN_DRAIN On +set_global_assignment -name NCEO_OPEN_DRAIN On +set_global_assignment -name ENABLE_CRC_ERROR_PIN Off +set_global_assignment -name ENABLE_PR_PINS Off +set_global_assignment -name RESERVE_PR_PINS Off +set_global_assignment -name CONVERT_PR_WARNINGS_TO_ERRORS Off +set_global_assignment -name PR_PINS_OPEN_DRAIN Off +set_global_assignment -name CLAMPING_DIODE Off +set_global_assignment -name TRI_STATE_SPI_PINS Off +set_global_assignment -name UNUSED_TSD_PINS_GND Off +set_global_assignment -name IMPLEMENT_MLAB_IN_16_BIT_DEEP_MODE Off +set_global_assignment -name FORM_DDR_CLUSTERING_CLIQUE Off +set_global_assignment -name ALM_REGISTER_PACKING_EFFORT Medium +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION Off -family "Stratix IV" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria 10" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Stratix V" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Arria V GZ" +set_global_assignment -name ADVANCED_PHYSICAL_OPTIMIZATION On -family "Cyclone V" +set_global_assignment -name RELATIVE_NEUTRON_FLUX 1.0 +set_global_assignment -name SEU_FIT_REPORT Off +set_global_assignment -name HYPER_RETIMER Off -family "Arria 10" +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ADD_PIPELINING_MAX "-1" +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_ASYNCH_CLEAR Auto +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_USER_PRESERVE_RESTRICTION Auto +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_DSP_BLOCKS On +set_global_assignment -name HYPER_RETIMER_FAST_FORWARD_RAM_BLOCKS On +set_global_assignment -name EDA_SIMULATION_TOOL "" +set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" +set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" +set_global_assignment -name EDA_RESYNTHESIS_TOOL "" +set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On +set_global_assignment -name COMPRESSION_MODE Off +set_global_assignment -name CLOCK_SOURCE Internal +set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz" +set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1 +set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On +set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off +set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On +set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF +set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F +set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name USE_CHECKSUM_AS_USERCODE On +set_global_assignment -name SECURITY_BIT Off +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone 10 LP" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX 10" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX V" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GZ" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX" +set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto +set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto +set_global_assignment -name PWRMGT_SLAVE_DEVICE_TYPE "PV3102 or EM1130" +set_global_assignment -name PWRMGT_SLAVE_DEVICE0_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE1_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE2_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE3_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE4_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE5_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE6_ADDRESS 0000000 +set_global_assignment -name PWRMGT_SLAVE_DEVICE7_ADDRESS 0000000 +set_global_assignment -name PWRMGT_VOLTAGE_OUTPUT_FORMAT "Auto discovery" +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_M 0 +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_B 0 +set_global_assignment -name PWRMGT_DIRECT_FORMAT_COEFFICIENT_R 0 +set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto +set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto +set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto +set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto +set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto +set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto +set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On +set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off +set_global_assignment -name GENERATE_TTF_FILE Off +set_global_assignment -name GENERATE_RBF_FILE Off +set_global_assignment -name GENERATE_HEX_FILE Off +set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0 +set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal" +set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off +set_global_assignment -name AUTO_RESTART_CONFIGURATION On +set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off +set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off +set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone 10 LP" +set_global_assignment -name ENABLE_OCT_DONE On -family "MAX 10" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV E" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria 10" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Stratix V" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria V GZ" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Arria II GX" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone IV GX" +set_global_assignment -name ENABLE_OCT_DONE Off -family "Cyclone V" +set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT OFF +set_global_assignment -name ARRIAIIGX_RX_CDR_LOCKUP_FIX_OVERRIDE Off +set_global_assignment -name ENABLE_AUTONOMOUS_PCIE_HIP Off +set_global_assignment -name ENABLE_ADV_SEU_DETECTION Off +set_global_assignment -name POR_SCHEME "Instant ON" +set_global_assignment -name EN_USER_IO_WEAK_PULLUP On +set_global_assignment -name EN_SPI_IO_WEAK_PULLUP On +set_global_assignment -name POF_VERIFY_PROTECT Off +set_global_assignment -name ENABLE_SPI_MODE_CHECK Off +set_global_assignment -name FORCE_SSMCLK_TO_ISMCLK On +set_global_assignment -name FALLBACK_TO_EXTERNAL_FLASH Off +set_global_assignment -name EXTERNAL_FLASH_FALLBACK_ADDRESS 0 +set_global_assignment -name GENERATE_PMSF_FILES On +set_global_assignment -name START_TIME 0ns +set_global_assignment -name SIMULATION_MODE TIMING +set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off +set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On +set_global_assignment -name SETUP_HOLD_DETECTION Off +set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off +set_global_assignment -name CHECK_OUTPUTS Off +set_global_assignment -name SIMULATION_COVERAGE On +set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On +set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On +set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On +set_global_assignment -name GLITCH_DETECTION Off +set_global_assignment -name GLITCH_INTERVAL 1ns +set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off +set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On +set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off +set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On +set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE +set_global_assignment -name SIMULATION_NETLIST_VIEWER Off +set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT +set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT +set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off +set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO +set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO +set_global_assignment -name DRC_TOP_FANOUT 50 +set_global_assignment -name DRC_FANOUT_EXCEEDING 30 +set_global_assignment -name DRC_GATED_CLOCK_FEED 30 +set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY +set_global_assignment -name ENABLE_DRC_SETTINGS Off +set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25 +set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10 +set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30 +set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2 +set_global_assignment -name MERGE_HEX_FILE Off +set_global_assignment -name GENERATE_SVF_FILE Off +set_global_assignment -name GENERATE_ISC_FILE Off +set_global_assignment -name GENERATE_JAM_FILE Off +set_global_assignment -name GENERATE_JBC_FILE Off +set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On +set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off +set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off +set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off +set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off +set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On +set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off +set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state" +set_global_assignment -name HPS_EARLY_IO_RELEASE Off +set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off +set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off +set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5% +set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5% +set_global_assignment -name POWER_USE_PVA On +set_global_assignment -name POWER_USE_INPUT_FILE "No File" +set_global_assignment -name POWER_USE_INPUT_FILES Off +set_global_assignment -name POWER_VCD_FILTER_GLITCHES On +set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off +set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off +set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL +set_global_assignment -name POWER_AUTO_COMPUTE_TJ On +set_global_assignment -name POWER_TJ_VALUE 25 +set_global_assignment -name POWER_USE_TA_VALUE 25 +set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off +set_global_assignment -name POWER_BOARD_TEMPERATURE 25 +set_global_assignment -name POWER_HPS_ENABLE Off +set_global_assignment -name POWER_HPS_PROC_FREQ 0.0 +set_global_assignment -name ENABLE_SMART_VOLTAGE_ID Off +set_global_assignment -name IGNORE_PARTITIONS Off +set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off +set_global_assignment -name RAPID_RECOMPILE_ASSIGNMENT_CHECKING On +set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End" +set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On +set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On +set_global_assignment -name RTLV_GROUP_RELATED_NODES On +set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off +set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off +set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On +set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On +set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On +set_global_assignment -name EQC_BBOX_MERGE On +set_global_assignment -name EQC_LVDS_MERGE On +set_global_assignment -name EQC_RAM_UNMERGING On +set_global_assignment -name EQC_DFF_SS_EMULATION On +set_global_assignment -name EQC_RAM_REGISTER_UNPACK On +set_global_assignment -name EQC_MAC_REGISTER_UNPACK On +set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On +set_global_assignment -name EQC_STRUCTURE_MATCHING On +set_global_assignment -name EQC_AUTO_BREAK_CONE On +set_global_assignment -name EQC_POWER_UP_COMPARE Off +set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On +set_global_assignment -name EQC_AUTO_INVERSION On +set_global_assignment -name EQC_AUTO_TERMINATE On +set_global_assignment -name EQC_SUB_CONE_REPORT Off +set_global_assignment -name EQC_RENAMING_RULES On +set_global_assignment -name EQC_PARAMETER_CHECK On +set_global_assignment -name EQC_AUTO_PORTSWAP On +set_global_assignment -name EQC_DETECT_DONT_CARES On +set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off +set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ? +set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ? +set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ? +set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ? +set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ? +set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ? +set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ? +set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ? +set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ? +set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ? +set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "" -section_id ? +set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ? +set_global_assignment -name EDA_ENABLE_IPUTF_MODE On -section_id ? +set_global_assignment -name EDA_NATIVELINK_PORTABLE_FILE_PATHS Off -section_id ? +set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ? +set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ? +set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ? +set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ? +set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ? +set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ? +set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ? +set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ? +set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ? +set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY OFF -section_id ? +set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST Off -section_id ? +set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ? +set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ? +set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ? +set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ? +set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ? +set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ? +set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ? +set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ? +set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ? +set_global_assignment -name EDA_IBIS_EXTENDED_MODEL_SELECTOR Off -section_id ? +set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ? +set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ? +set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ? +set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ? +set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ? +set_global_assignment -name EDA_IBIS_SPECIFICATION_VERSION 4p2 -section_id ? +set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ? +set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ? +set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name PARTITION_PRESERVE_HIGH_SPEED_TILES On -section_id ? -entity ? +set_global_assignment -name PARTITION_IGNORE_SOURCE_FILE_CHANGES Off -section_id ? -entity ? +set_global_assignment -name PARTITION_ALWAYS_USE_QXP_NETLIST Off -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS UPDATE_CONFLICTING -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ? +set_global_assignment -name ALLOW_MULTIPLE_PERSONAS Off -section_id ? -entity ? +set_global_assignment -name PARTITION_ASD_REGION_ID 1 -section_id ? -entity ? +set_global_assignment -name CROSS_BOUNDARY_OPTIMIZATIONS Off -section_id ? -entity ? +set_global_assignment -name PROPAGATE_CONSTANTS_ON_INPUTS On -section_id ? -entity ? +set_global_assignment -name PROPAGATE_INVERSIONS_ON_INPUTS On -section_id ? -entity ? +set_global_assignment -name REMOVE_LOGIC_ON_UNCONNECTED_OUTPUTS On -section_id ? -entity ? +set_global_assignment -name MERGE_EQUIVALENT_INPUTS On -section_id ? -entity ? +set_global_assignment -name MERGE_EQUIVALENT_BIDIRS On -section_id ? -entity ? +set_global_assignment -name ABSORB_PATHS_FROM_OUTPUTS_TO_INPUTS On -section_id ? -entity ? +set_global_assignment -name PARTITION_ENABLE_STRICT_PRESERVATION Off -section_id ? -entity ? diff --git a/peripherals/vga/sint/de10_lite_description.txt b/peripherals/vga/sint/de10_lite_description.txt new file mode 100644 index 00000000..e69de29b diff --git a/peripherals/vga/vga.hex b/peripherals/vga/vga.hex new file mode 100644 index 00000000..7a251d0a --- /dev/null +++ b/peripherals/vga/vga.hex @@ -0,0 +1,8193 @@ +:0200000000FFFF +:0200010000FFFE +:0200020000FFFD +:0200030000FFFC +:0200040000FFFB +:0200050000FFFA +:0200060000FFF9 +:0200070000FFF8 +:020008000000F6 +:020009000000F5 +:02000A000000F4 +:02000B000000F3 +:02000C000000F2 +:02000D000000F1 +:02000E000000F0 +:02000F000000EF +:020010000000EE +:020011000000ED +:020012000000EC +:020013000000EB +:020014000000EA +:020015000000E9 +:020016000000E8 +:020017000000E7 +:020018000000E6 +:020019000000E5 +:02001A000000E4 +:02001B000000E3 +:02001C000000E2 +:02001D000000E1 +:02001E000000E0 +:02001F000000DF +:020020000000DE +:020021000000DD +:020022000000DC +:020023000000DB +:020024000000DA +:020025000000D9 +:020026000000D8 +:020027000000D7 +:020028000000D6 +:020029000000D5 +:02002A000000D4 +:02002B000000D3 +:02002C000000D2 +:02002D000000D1 +:02002E000000D0 +:02002F000000CF +:020030000000CE +:020031000000CD +:020032000000CC +:020033000000CB +:020034000000CA +:020035000000C9 +:020036000000C8 +:020037000000C7 +:020038000000C6 +:020039000000C5 +:02003A000000C4 +:02003B000000C3 +:02003C000000C2 +:02003D000000C1 +:02003E000000C0 +:02003F000000BF +:020040000000BE +:020041000000BD +:020042000000BC +:020043000000BB +:020044000000BA +:020045000000B9 +:020046000000B8 +:020047000000B7 +:020048000000B6 +:020049000000B5 +:02004A000000B4 +:02004B000000B3 +:02004C000000B2 +:02004D000000B1 +:02004E000000B0 +:02004F000000AF +:020050000000AE +:020051000000AD +:020052000000AC +:020053000000AB +:020054000000AA +:020055000000A9 +:020056000000A8 +:020057000000A7 +:020058000000A6 +:020059000000A5 +:02005A000000A4 +:02005B000000A3 +:02005C000000A2 +:02005D000000A1 +:02005E000000A0 +:02005F0000009F +:0200600000009E +:0200610000009D +:0200620000009C +:0200630000009B +:0200640000009A +:02006500000099 +:02006600000098 +:02006700000097 +:02006800000096 +:02006900000095 +:02006A00000094 +:02006B00000093 +:02006C00000092 +:02006D00000091 +:02006E00000090 +:02006F0000008F +:0200700000008E +:0200710000008D +:0200720000008C +:0200730000008B +:0200740000008A +:02007500000089 +:02007600000088 +:02007700000087 +:02007800000086 +:02007900000085 +:02007A00000084 +:02007B00000083 +:02007C00000082 +:02007D00000081 +:02007E00000080 +:02007F0000007F +:0200800000007E +:0200810000007D +:0200820000007C +:0200830000007B +:0200840000007A +:02008500000079 +:02008600000078 +:02008700000077 +:02008800000076 +:02008900000075 +:02008A00000074 +:02008B00000073 +:02008C00000072 +:02008D00000071 +:02008E00000070 +:02008F0000006F +:0200900000006E +:0200910000006D +:0200920000006C +:0200930000006B +:0200940000006A +:02009500000069 +:02009600000068 +:02009700000067 +:02009800000066 +:02009900000065 +:02009A00000064 +:02009B00000063 +:02009C00000062 +:02009D00000061 +:02009E00000060 +:02009F0000005F +:0200A00000005E +:0200A10000005D +:0200A20000005C +:0200A30000005B +:0200A40000005A +:0200A500000059 +:0200A600000058 +:0200A700000057 +:0200A800000056 +:0200A900000055 +:0200AA00000054 +:0200AB00000053 +:0200AC00000052 +:0200AD00000051 +:0200AE00000050 +:0200AF0000004F +:0200B00000004E +:0200B10000004D +:0200B20000004C +:0200B30000004B +:0200B40000004A +:0200B500000049 +:0200B600000048 +:0200B700000047 +:0200B800000046 +:0200B900000045 +:0200BA00000044 +:0200BB00000043 +:0200BC00000042 +:0200BD00000041 +:0200BE00000040 +:0200BF0000003F +:0200C00000003E +:0200C10000003D +:0200C20000003C +:0200C30000003B +:0200C40000003A +:0200C500000039 +:0200C600000038 +:0200C700000037 +:0200C800000036 +:0200C900000035 +:0200CA00000034 +:0200CB00000033 +:0200CC00000032 +:0200CD00000031 +:0200CE00000030 +:0200CF0000002F +:0200D00000002E +:0200D10000002D +:0200D20000002C +:0200D30000002B +:0200D40000002A +:0200D500000029 +:0200D600000028 +:0200D700000027 +:0200D800000026 +:0200D900000025 +:0200DA00000024 +:0200DB00000023 +:0200DC00000022 +:0200DD00000021 +:0200DE00000020 +:0200DF0000001F +:0200E00000001E +:0200E10000001D +:0200E20000001C +:0200E30000001B +:0200E40000001A +:0200E500000019 +:0200E600000018 +:0200E700000017 +:0200E800000016 +:0200E900000015 +:0200EA00000014 +:0200EB00000013 +:0200EC00000012 +:0200ED00000011 +:0200EE00000010 +:0200EF0000000F +:0200F00000000E +:0200F10000000D +:0200F20000000C +:0200F30000000B +:0200F40000000A +:0200F500000009 +:0200F600000008 +:0200F700000007 +:0200F800000006 +:0200F900000005 +:0200FA00000004 +:0200FB00000003 +:0200FC00000002 +:0200FD00000001 +:0200FE00000000 +:0200FF000000FF +:020100000000FD +:020101000000FC +:020102000000FB +:020103000000FA +:020104000000F9 +:020105000000F8 +:020106000000F7 +:020107000000F6 +:020108000000F5 +:020109000000F4 +:02010A000000F3 +:02010B000000F2 +:02010C000000F1 +:02010D000000F0 +:02010E000000EF +:02010F000000EE +:020110000000ED +:020111000000EC +:020112000000EB +:020113000000EA +:020114000000E9 +:020115000000E8 +:020116000000E7 +:020117000000E6 +:020118000000E5 +:020119000000E4 +:02011A000000E3 +:02011B000000E2 +:02011C000000E1 +:02011D000000E0 +:02011E000000DF +:02011F000000DE +:020120000000DD +:020121000000DC +:020122000000DB +:020123000000DA +:020124000000D9 +:020125000000D8 +:020126000000D7 +:020127000000D6 +:020128000000D5 +:020129000000D4 +:02012A000000D3 +:02012B000000D2 +:02012C000000D1 +:02012D000000D0 +:02012E000000CF +:02012F000000CE +:020130000000CD +:020131000000CC +:020132000000CB +:020133000000CA +:020134000000C9 +:020135000000C8 +:020136000000C7 +:020137000000C6 +:020138000000C5 +:020139000000C4 +:02013A000000C3 +:02013B000000C2 +:02013C000000C1 +:02013D000000C0 +:02013E000000BF +:02013F000000BE +:020140000000BD +:020141000000BC +:020142000000BB +:020143000000BA +:020144000000B9 +:020145000000B8 +:020146000000B7 +:020147000000B6 +:020148000000B5 +:020149000000B4 +:02014A000000B3 +:02014B000000B2 +:02014C000000B1 +:02014D000000B0 +:02014E000000AF +:02014F000000AE +:020150000000AD +:020151000000AC +:020152000000AB +:020153000000AA +:020154000000A9 +:020155000000A8 +:020156000000A7 +:020157000000A6 +:020158000000A5 +:020159000000A4 +:02015A000000A3 +:02015B000000A2 +:02015C000000A1 +:02015D000000A0 +:02015E0000009F +:02015F0000009E +:0201600000009D +:0201610000009C +:0201620000009B +:0201630000009A +:02016400000099 +:02016500000098 +:02016600000097 +:02016700000096 +:02016800000095 +:02016900000094 +:02016A00000093 +:02016B00000092 +:02016C00000091 +:02016D00000090 +:02016E0000008F +:02016F0000008E +:0201700000008D +:0201710000008C +:0201720000008B +:0201730000008A +:02017400000089 +:02017500000088 +:02017600000087 +:02017700000086 +:02017800000085 +:02017900000084 +:02017A00000083 +:02017B00000082 +:02017C00000081 +:02017D00000080 +:02017E0000007F +:02017F0000007E +:0201800000007D +:0201810000007C +:0201820000007B +:0201830000007A +:02018400000079 +:02018500000078 +:02018600000077 +:02018700000076 +:02018800000075 +:02018900000074 +:02018A00000073 +:02018B00000072 +:02018C00000071 +:02018D00000070 +:02018E0000006F +:02018F0000006E +:0201900000006D +:0201910000006C +:0201920000006B +:0201930000006A +:02019400000069 +:02019500000068 +:02019600000067 +:02019700000066 +:02019800000065 +:02019900000064 +:02019A00000063 +:02019B00000062 +:02019C00000061 +:02019D00000060 +:02019E0000005F +:02019F0000005E +:0201A00000005D +:0201A10000005C +:0201A20000005B +:0201A30000005A +:0201A400000059 +:0201A500000058 +:0201A600000057 +:0201A700000056 +:0201A800000055 +:0201A900000054 +:0201AA00000053 +:0201AB00000052 +:0201AC00000051 +:0201AD00000050 +:0201AE0000004F +:0201AF0000004E +:0201B00000004D +:0201B10000004C +:0201B20000004B +:0201B30000004A +:0201B400000049 +:0201B500000048 +:0201B600000047 +:0201B700000046 +:0201B800000045 +:0201B900000044 +:0201BA00000043 +:0201BB00000042 +:0201BC00000041 +:0201BD00000040 +:0201BE0000003F +:0201BF0000003E +:0201C00000003D +:0201C10000003C +:0201C20000003B +:0201C30000003A +:0201C400000039 +:0201C500000038 +:0201C600000037 +:0201C700000036 +:0201C800000035 +:0201C900000034 +:0201CA00000033 +:0201CB00000032 +:0201CC00000031 +:0201CD00000030 +:0201CE0000002F +:0201CF0000002E +:0201D00000002D +:0201D10000002C +:0201D20000002B +:0201D30000002A +:0201D400000029 +:0201D500000028 +:0201D600000027 +:0201D700000026 +:0201D800000025 +:0201D900000024 +:0201DA00000023 +:0201DB00000022 +:0201DC00000021 +:0201DD00000020 +:0201DE0000001F +:0201DF0000001E +:0201E00000001D +:0201E10000001C +:0201E20000001B +:0201E30000001A +:0201E400000019 +:0201E500000018 +:0201E600000017 +:0201E700000016 +:0201E800000015 +:0201E900000014 +:0201EA00000013 +:0201EB00000012 +:0201EC00000011 +:0201ED00000010 +:0201EE0000000F +:0201EF0000000E +:0201F00000000D +:0201F10000000C +:0201F20000000B +:0201F30000000A +:0201F400000009 +:0201F500000008 +:0201F600000007 +:0201F700000006 +:0201F800000005 +:0201F900000004 +:0201FA00000003 +:0201FB00000002 +:0201FC00000001 +:0201FD00000000 +:0201FE000000FF +:0201FF000000FE +:020200000000FC +:020201000000FB +:020202000000FA +:020203000000F9 +:020204000000F8 +:020205000000F7 +:020206000000F6 +:020207000000F5 +:020208000000F4 +:020209000000F3 +:02020A000000F2 +:02020B000000F1 +:02020C000000F0 +:02020D000000EF +:02020E000000EE +:02020F000000ED +:020210000000EC +:020211000000EB +:020212000000EA +:020213000000E9 +:020214000000E8 +:020215000000E7 +:020216000000E6 +:020217000000E5 +:020218000000E4 +:020219000000E3 +:02021A000000E2 +:02021B000000E1 +:02021C000000E0 +:02021D000000DF +:02021E000000DE +:02021F000000DD +:020220000000DC +:020221000000DB +:020222000000DA +:020223000000D9 +:020224000000D8 +:020225000000D7 +:020226000000D6 +:020227000000D5 +:020228000000D4 +:020229000000D3 +:02022A000000D2 +:02022B000000D1 +:02022C000000D0 +:02022D000000CF +:02022E000000CE +:02022F000000CD +:020230000000CC +:020231000000CB +:020232000000CA +:020233000000C9 +:020234000000C8 +:020235000000C7 +:020236000000C6 +:020237000000C5 +:020238000000C4 +:020239000000C3 +:02023A000000C2 +:02023B000000C1 +:02023C000000C0 +:02023D000000BF +:02023E000000BE +:02023F000000BD +:020240000000BC +:020241000000BB +:020242000000BA +:020243000000B9 +:020244000000B8 +:020245000000B7 +:020246000000B6 +:020247000000B5 +:020248000000B4 +:020249000000B3 +:02024A000000B2 +:02024B000000B1 +:02024C000000B0 +:02024D000000AF +:02024E000000AE +:02024F000000AD +:020250000000AC +:020251000000AB +:020252000000AA +:020253000000A9 +:020254000000A8 +:020255000000A7 +:020256000000A6 +:020257000000A5 +:020258000000A4 +:020259000000A3 +:02025A000000A2 +:02025B000000A1 +:02025C000000A0 +:02025D0000009F +:02025E0000009E +:02025F0000009D +:0202600000009C +:0202610000009B +:0202620000009A +:02026300000099 +:02026400000098 +:02026500000097 +:02026600000096 +:02026700000095 +:02026800000094 +:02026900000093 +:02026A00000092 +:02026B00000091 +:02026C00000090 +:02026D0000008F +:02026E0000008E +:02026F0000008D +:0202700000008C +:0202710000008B +:0202720000008A +:02027300000089 +:02027400000088 +:02027500000087 +:02027600000086 +:02027700000085 +:02027800000084 +:02027900000083 +:02027A00000082 +:02027B00000081 +:02027C00000080 +:02027D0000007F +:02027E0000007E +:02027F0000007D +:0202800000007C +:0202810000007B +:0202820000007A +:02028300000079 +:02028400000078 +:02028500000077 +:02028600000076 +:02028700000075 +:02028800000074 +:02028900000073 +:02028A00000072 +:02028B00000071 +:02028C00000070 +:02028D0000006F +:02028E0000006E +:02028F0000006D +:0202900000006C +:0202910000006B +:0202920000006A +:02029300000069 +:02029400000068 +:02029500000067 +:02029600000066 +:02029700000065 +:02029800000064 +:02029900000063 +:02029A00000062 +:02029B00000061 +:02029C00000060 +:02029D0000005F +:02029E0000005E +:02029F0000005D +:0202A00000005C +:0202A10000005B +:0202A20000005A +:0202A300000059 +:0202A400000058 +:0202A500000057 +:0202A600000056 +:0202A700000055 +:0202A800000054 +:0202A900000053 +:0202AA00000052 +:0202AB00000051 +:0202AC00000050 +:0202AD0000004F +:0202AE0000004E +:0202AF0000004D +:0202B00000004C +:0202B10000004B +:0202B20000004A +:0202B300000049 +:0202B400000048 +:0202B500000047 +:0202B600000046 +:0202B700000045 +:0202B800000044 +:0202B900000043 +:0202BA00000042 +:0202BB00000041 +:0202BC00000040 +:0202BD0000003F +:0202BE0000003E +:0202BF0000003D +:0202C00000003C +:0202C10000003B +:0202C20000003A +:0202C300000039 +:0202C400000038 +:0202C500000037 +:0202C600000036 +:0202C700000035 +:0202C800000034 +:0202C900000033 +:0202CA00000032 +:0202CB00000031 +:0202CC00000030 +:0202CD0000002F +:0202CE0000002E +:0202CF0000002D +:0202D00000002C +:0202D10000002B +:0202D20000002A +:0202D300000029 +:0202D400000028 +:0202D500000027 +:0202D600000026 +:0202D700000025 +:0202D800000024 +:0202D900000023 +:0202DA00000022 +:0202DB00000021 +:0202DC00000020 +:0202DD0000001F +:0202DE0000001E +:0202DF0000001D +:0202E00000001C +:0202E10000001B +:0202E20000001A +:0202E300000019 +:0202E400000018 +:0202E500000017 +:0202E600000016 +:0202E700000015 +:0202E800000014 +:0202E900000013 +:0202EA00000012 +:0202EB00000011 +:0202EC00000010 +:0202ED0000000F +:0202EE0000000E +:0202EF0000000D +:0202F00000000C +:0202F10000000B +:0202F20000000A +:0202F300000009 +:0202F400000008 +:0202F500000007 +:0202F600000006 +:0202F700000005 +:0202F800000004 +:0202F900000003 +:0202FA00000002 +:0202FB00000001 +:0202FC00000000 +:0202FD000000FF +:0202FE000000FE +:0202FF000000FD +:020300000000FB +:020301000000FA +:020302000000F9 +:020303000000F8 +:020304000000F7 +:020305000000F6 +:020306000000F5 +:020307000000F4 +:020308000000F3 +:020309000000F2 +:02030A000000F1 +:02030B000000F0 +:02030C000000EF +:02030D000000EE +:02030E000000ED +:02030F000000EC +:020310000000EB +:020311000000EA +:020312000000E9 +:020313000000E8 +:020314000000E7 +:020315000000E6 +:020316000000E5 +:020317000000E4 +:020318000000E3 +:020319000000E2 +:02031A000000E1 +:02031B000000E0 +:02031C000000DF +:02031D000000DE +:02031E000000DD +:02031F000000DC +:020320000000DB +:020321000000DA +:020322000000D9 +:020323000000D8 +:020324000000D7 +:020325000000D6 +:020326000000D5 +:020327000000D4 +:020328000000D3 +:020329000000D2 +:02032A000000D1 +:02032B000000D0 +:02032C000000CF +:02032D000000CE +:02032E000000CD +:02032F000000CC +:020330000000CB +:020331000000CA +:020332000000C9 +:020333000000C8 +:020334000000C7 +:020335000000C6 +:020336000000C5 +:020337000000C4 +:020338000000C3 +:020339000000C2 +:02033A000000C1 +:02033B000000C0 +:02033C000000BF +:02033D000000BE +:02033E000000BD +:02033F000000BC +:020340000000BB +:020341000000BA +:020342000000B9 +:020343000000B8 +:020344000000B7 +:020345000000B6 +:020346000000B5 +:020347000000B4 +:020348000000B3 +:020349000000B2 +:02034A000000B1 +:02034B000000B0 +:02034C000000AF +:02034D000000AE +:02034E000000AD +:02034F000000AC +:020350000000AB +:020351000000AA +:020352000000A9 +:020353000000A8 +:020354000000A7 +:020355000000A6 +:020356000000A5 +:020357000000A4 +:020358000000A3 +:020359000000A2 +:02035A000000A1 +:02035B000000A0 +:02035C0000009F +:02035D0000009E +:02035E0000009D +:02035F0000009C +:0203600000009B +:0203610000009A +:02036200000099 +:02036300000098 +:02036400000097 +:02036500000096 +:02036600000095 +:02036700000094 +:02036800000093 +:02036900000092 +:02036A00000091 +:02036B00000090 +:02036C0000008F +:02036D0000008E +:02036E0000008D +:02036F0000008C +:0203700000008B +:0203710000008A +:02037200000089 +:02037300000088 +:02037400000087 +:02037500000086 +:02037600000085 +:02037700000084 +:02037800000083 +:02037900000082 +:02037A00000081 +:02037B00000080 +:02037C0000007F +:02037D0000007E +:02037E0000007D +:02037F0000007C +:0203800000007B +:0203810000007A +:02038200000079 +:02038300000078 +:02038400000077 +:02038500000076 +:02038600000075 +:02038700000074 +:02038800000073 +:02038900000072 +:02038A00000071 +:02038B00000070 +:02038C0000006F +:02038D0000006E +:02038E0000006D +:02038F0000006C +:0203900000006B +:0203910000006A +:02039200000069 +:02039300000068 +:02039400000067 +:02039500000066 +:02039600000065 +:02039700000064 +:02039800000063 +:02039900000062 +:02039A00000061 +:02039B00000060 +:02039C0000005F +:02039D0000005E +:02039E0000005D +:02039F0000005C +:0203A00000005B +:0203A10000005A +:0203A200000059 +:0203A300000058 +:0203A400000057 +:0203A500000056 +:0203A600000055 +:0203A700000054 +:0203A800000053 +:0203A900000052 +:0203AA00000051 +:0203AB00000050 +:0203AC0000004F +:0203AD0000004E +:0203AE0000004D +:0203AF0000004C +:0203B00000004B +:0203B10000004A +:0203B200000049 +:0203B300000048 +:0203B400000047 +:0203B500000046 +:0203B600000045 +:0203B700000044 +:0203B800000043 +:0203B900000042 +:0203BA00000041 +:0203BB00000040 +:0203BC0000003F +:0203BD0000003E +:0203BE0000003D +:0203BF0000003C +:0203C00000003B +:0203C10000003A +:0203C200000039 +:0203C300000038 +:0203C400000037 +:0203C500000036 +:0203C600000035 +:0203C700000034 +:0203C800000033 +:0203C900000032 +:0203CA00000031 +:0203CB00000030 +:0203CC0000002F +:0203CD0000002E +:0203CE0000002D +:0203CF0000002C +:0203D00000002B +:0203D10000002A +:0203D200000029 +:0203D300000028 +:0203D400000027 +:0203D500000026 +:0203D600000025 +:0203D700000024 +:0203D800000023 +:0203D900000022 +:0203DA00000021 +:0203DB00000020 +:0203DC0000001F +:0203DD0000001E +:0203DE0000001D +:0203DF0000001C +:0203E00000001B +:0203E10000001A +:0203E200000019 +:0203E300000018 +:0203E400000017 +:0203E500000016 +:0203E600000015 +:0203E700000014 +:0203E800000013 +:0203E900000012 +:0203EA00000011 +:0203EB00000010 +:0203EC0000000F +:0203ED0000000E +:0203EE0000000D +:0203EF0000000C +:0203F00000000B +:0203F10000000A +:0203F200000009 +:0203F300000008 +:0203F400000007 +:0203F500000006 +:0203F600000005 +:0203F700000004 +:0203F800000003 +:0203F900000002 +:0203FA00000001 +:0203FB00000000 +:0203FC000000FF +:0203FD000000FE +:0203FE000000FD +:0203FF000000FC +:020400000000FA +:020401000000F9 +:020402000000F8 +:020403000000F7 +:020404000000F6 +:020405000000F5 +:020406000000F4 +:020407000000F3 +:020408000000F2 +:020409000000F1 +:02040A000000F0 +:02040B000000EF +:02040C000000EE +:02040D000000ED +:02040E000000EC +:02040F000000EB +:020410000000EA +:020411000000E9 +:020412000000E8 +:020413000000E7 +:020414000000E6 +:020415000000E5 +:020416000000E4 +:020417000000E3 +:020418000000E2 +:020419000000E1 +:02041A000000E0 +:02041B000000DF +:02041C000000DE +:02041D000000DD +:02041E000000DC +:02041F000000DB +:020420000000DA +:020421000000D9 +:020422000000D8 +:020423000000D7 +:020424000000D6 +:020425000000D5 +:020426000000D4 +:020427000000D3 +:020428000000D2 +:020429000000D1 +:02042A000000D0 +:02042B000000CF +:02042C000000CE +:02042D000000CD +:02042E000000CC +:02042F000000CB +:020430000000CA +:020431000000C9 +:020432000000C8 +:020433000000C7 +:020434000000C6 +:020435000000C5 +:020436000000C4 +:020437000000C3 +:020438000000C2 +:020439000000C1 +:02043A000000C0 +:02043B000000BF +:02043C000000BE +:02043D000000BD +:02043E000000BC +:02043F000000BB +:020440000000BA +:020441000000B9 +:020442000000B8 +:020443000000B7 +:020444000000B6 +:020445000000B5 +:020446000000B4 +:020447000000B3 +:020448000000B2 +:020449000000B1 +:02044A000000B0 +:02044B000000AF +:02044C000000AE +:02044D000000AD +:02044E000000AC +:02044F000000AB +:020450000000AA +:020451000000A9 +:020452000000A8 +:020453000000A7 +:020454000000A6 +:020455000000A5 +:020456000000A4 +:020457000000A3 +:020458000000A2 +:020459000000A1 +:02045A000000A0 +:02045B0000009F +:02045C0000009E +:02045D0000009D +:02045E0000009C +:02045F0000009B +:0204600000009A +:02046100000099 +:02046200000098 +:02046300000097 +:02046400000096 +:02046500000095 +:02046600000094 +:02046700000093 +:02046800000092 +:02046900000091 +:02046A00000090 +:02046B0000008F +:02046C0000008E +:02046D0000008D +:02046E0000008C +:02046F0000008B +:0204700000008A +:02047100000089 +:02047200000088 +:02047300000087 +:02047400000086 +:02047500000085 +:02047600000084 +:02047700000083 +:02047800000082 +:02047900000081 +:02047A00000080 +:02047B0000007F +:02047C0000007E +:02047D0000007D +:02047E0000007C +:02047F0000007B +:0204800000007A +:02048100000079 +:02048200000078 +:02048300000077 +:02048400000076 +:02048500000075 +:02048600000074 +:02048700000073 +:02048800000072 +:02048900000071 +:02048A00000070 +:02048B0000006F +:02048C0000006E +:02048D0000006D +:02048E0000006C +:02048F0000006B +:0204900000006A +:02049100000069 +:02049200000068 +:02049300000067 +:02049400000066 +:02049500000065 +:02049600000064 +:02049700000063 +:02049800000062 +:02049900000061 +:02049A00000060 +:02049B0000005F +:02049C0000005E +:02049D0000005D +:02049E0000005C +:02049F0000005B +:0204A00000005A +:0204A100000059 +:0204A200000058 +:0204A300000057 +:0204A400000056 +:0204A500000055 +:0204A600000054 +:0204A700000053 +:0204A800000052 +:0204A900000051 +:0204AA00000050 +:0204AB0000004F +:0204AC0000004E +:0204AD0000004D +:0204AE0000004C +:0204AF0000004B +:0204B00000004A +:0204B100000049 +:0204B200000048 +:0204B300000047 +:0204B400000046 +:0204B500000045 +:0204B600000044 +:0204B700000043 +:0204B800000042 +:0204B900000041 +:0204BA00000040 +:0204BB0000003F +:0204BC0000003E +:0204BD0000003D +:0204BE0000003C +:0204BF0000003B +:0204C00000003A +:0204C100000039 +:0204C200000038 +:0204C300000037 +:0204C400000036 +:0204C500000035 +:0204C600000034 +:0204C700000033 +:0204C800000032 +:0204C900000031 +:0204CA00000030 +:0204CB0000002F +:0204CC0000002E +:0204CD0000002D +:0204CE0000002C +:0204CF0000002B +:0204D00000002A +:0204D100000029 +:0204D200000028 +:0204D300000027 +:0204D400000026 +:0204D500000025 +:0204D600000024 +:0204D700000023 +:0204D800000022 +:0204D900000021 +:0204DA00000020 +:0204DB0000001F +:0204DC0000001E +:0204DD0000001D +:0204DE0000001C +:0204DF0000001B +:0204E00000001A +:0204E100000019 +:0204E200000018 +:0204E300000017 +:0204E400000016 +:0204E500000015 +:0204E600000014 +:0204E700000013 +:0204E800000012 +:0204E900000011 +:0204EA00000010 +:0204EB0000000F +:0204EC0000000E +:0204ED0000000D +:0204EE0000000C +:0204EF0000000B +:0204F00000000A +:0204F100000009 +:0204F200000008 +:0204F300000007 +:0204F400000006 +:0204F500000005 +:0204F600000004 +:0204F700000003 +:0204F800000002 +:0204F900000001 +:0204FA00000000 +:0204FB000000FF +:0204FC000000FE +:0204FD000000FD +:0204FE000000FC +:0204FF000000FB +:020500000000F9 +:020501000000F8 +:020502000000F7 +:020503000000F6 +:020504000000F5 +:020505000000F4 +:020506000000F3 +:020507000000F2 +:020508000000F1 +:020509000000F0 +:02050A000000EF +:02050B000000EE +:02050C000000ED +:02050D000000EC +:02050E000000EB +:02050F000000EA +:020510000000E9 +:020511000000E8 +:020512000000E7 +:020513000000E6 +:020514000000E5 +:020515000000E4 +:020516000000E3 +:020517000000E2 +:020518000000E1 +:020519000000E0 +:02051A000000DF +:02051B000000DE +:02051C000000DD +:02051D000000DC +:02051E000000DB +:02051F000000DA +:020520000000D9 +:020521000000D8 +:020522000000D7 +:020523000000D6 +:020524000000D5 +:020525000000D4 +:020526000000D3 +:020527000000D2 +:020528000000D1 +:020529000000D0 +:02052A000000CF +:02052B000000CE +:02052C000000CD +:02052D000000CC +:02052E000000CB +:02052F000000CA +:020530000000C9 +:020531000000C8 +:020532000000C7 +:020533000000C6 +:020534000000C5 +:020535000000C4 +:020536000000C3 +:020537000000C2 +:020538000000C1 +:020539000000C0 +:02053A000000BF +:02053B000000BE +:02053C000000BD +:02053D000000BC +:02053E000000BB +:02053F000000BA +:020540000000B9 +:020541000000B8 +:020542000000B7 +:020543000000B6 +:020544000000B5 +:020545000000B4 +:020546000000B3 +:020547000000B2 +:020548000000B1 +:020549000000B0 +:02054A000000AF +:02054B000000AE +:02054C000000AD +:02054D000000AC +:02054E000000AB +:02054F000000AA +:020550000000A9 +:020551000000A8 +:020552000000A7 +:020553000000A6 +:020554000000A5 +:020555000000A4 +:020556000000A3 +:020557000000A2 +:020558000000A1 +:020559000000A0 +:02055A0000009F +:02055B0000009E +:02055C0000009D +:02055D0000009C +:02055E0000009B +:02055F0000009A +:02056000000099 +:02056100000098 +:02056200000097 +:02056300000096 +:02056400000095 +:02056500000094 +:02056600000093 +:02056700000092 +:02056800000091 +:02056900000090 +:02056A0000008F +:02056B0000008E +:02056C0000008D +:02056D0000008C +:02056E0000008B +:02056F0000008A +:02057000000089 +:02057100000088 +:02057200000087 +:02057300000086 +:02057400000085 +:02057500000084 +:02057600000083 +:02057700000082 +:02057800000081 +:02057900000080 +:02057A0000007F +:02057B0000007E +:02057C0000007D +:02057D0000007C +:02057E0000007B +:02057F0000007A +:02058000000079 +:02058100000078 +:02058200000077 +:02058300000076 +:02058400000075 +:02058500000074 +:02058600000073 +:02058700000072 +:02058800000071 +:02058900000070 +:02058A0000006F +:02058B0000006E +:02058C0000006D +:02058D0000006C +:02058E0000006B +:02058F0000006A +:02059000000069 +:02059100000068 +:02059200000067 +:02059300000066 +:02059400000065 +:02059500000064 +:02059600000063 +:02059700000062 +:02059800000061 +:02059900000060 +:02059A0000005F +:02059B0000005E +:02059C0000005D +:02059D0000005C +:02059E0000005B +:02059F0000005A +:0205A000000059 +:0205A100000058 +:0205A200000057 +:0205A300000056 +:0205A400000055 +:0205A500000054 +:0205A600000053 +:0205A700000052 +:0205A800000051 +:0205A900000050 +:0205AA0000004F +:0205AB0000004E +:0205AC0000004D +:0205AD0000004C +:0205AE0000004B +:0205AF0000004A +:0205B000000049 +:0205B100000048 +:0205B200000047 +:0205B300000046 +:0205B400000045 +:0205B500000044 +:0205B600000043 +:0205B700000042 +:0205B800000041 +:0205B900000040 +:0205BA0000003F +:0205BB0000003E +:0205BC0000003D +:0205BD0000003C +:0205BE0000003B +:0205BF0000003A +:0205C000000039 +:0205C100000038 +:0205C200000037 +:0205C300000036 +:0205C400000035 +:0205C500000034 +:0205C600000033 +:0205C700000032 +:0205C800000031 +:0205C900000030 +:0205CA0000002F +:0205CB0000002E +:0205CC0000002D +:0205CD0000002C +:0205CE0000002B +:0205CF0000002A +:0205D000000029 +:0205D100000028 +:0205D200000027 +:0205D300000026 +:0205D400000025 +:0205D500000024 +:0205D600000023 +:0205D700000022 +:0205D800000021 +:0205D900000020 +:0205DA0000001F +:0205DB0000001E +:0205DC0000001D +:0205DD0000001C +:0205DE0000001B +:0205DF0000001A +:0205E000000019 +:0205E100000018 +:0205E200000017 +:0205E300000016 +:0205E400000015 +:0205E500000014 +:0205E600000013 +:0205E700000012 +:0205E800000011 +:0205E900000010 +:0205EA0000000F +:0205EB0000000E +:0205EC0000000D +:0205ED0000000C +:0205EE0000000B +:0205EF0000000A +:0205F000000009 +:0205F100000008 +:0205F200000007 +:0205F300000006 +:0205F400000005 +:0205F500000004 +:0205F600000003 +:0205F700000002 +:0205F800000001 +:0205F900000000 +:0205FA000000FF +:0205FB000000FE +:0205FC000000FD +:0205FD000000FC +:0205FE000000FB +:0205FF000000FA +:020600000000F8 +:020601000000F7 +:020602000000F6 +:020603000000F5 +:020604000000F4 +:020605000000F3 +:020606000000F2 +:020607000000F1 +:020608000000F0 +:020609000000EF +:02060A000000EE +:02060B000000ED +:02060C000000EC +:02060D000000EB +:02060E000000EA +:02060F000000E9 +:020610000000E8 +:020611000000E7 +:020612000000E6 +:020613000000E5 +:020614000000E4 +:020615000000E3 +:020616000000E2 +:020617000000E1 +:020618000000E0 +:020619000000DF +:02061A000000DE +:02061B000000DD +:02061C000000DC +:02061D000000DB +:02061E000000DA +:02061F000000D9 +:020620000000D8 +:020621000000D7 +:020622000000D6 +:020623000000D5 +:020624000000D4 +:020625000000D3 +:020626000000D2 +:020627000000D1 +:020628000000D0 +:020629000000CF +:02062A000000CE +:02062B000000CD +:02062C000000CC +:02062D000000CB +:02062E000000CA +:02062F000000C9 +:020630000000C8 +:020631000000C7 +:020632000000C6 +:020633000000C5 +:020634000000C4 +:020635000000C3 +:020636000000C2 +:020637000000C1 +:020638000000C0 +:020639000000BF +:02063A000000BE +:02063B000000BD +:02063C000000BC +:02063D000000BB +:02063E000000BA +:02063F000000B9 +:020640000000B8 +:020641000000B7 +:020642000000B6 +:020643000000B5 +:020644000000B4 +:020645000000B3 +:020646000000B2 +:020647000000B1 +:020648000000B0 +:020649000000AF +:02064A000000AE +:02064B000000AD +:02064C000000AC +:02064D000000AB +:02064E000000AA +:02064F000000A9 +:020650000000A8 +:020651000000A7 +:020652000000A6 +:020653000000A5 +:020654000000A4 +:020655000000A3 +:020656000000A2 +:020657000000A1 +:020658000000A0 +:0206590000009F +:02065A0000009E +:02065B0000009D +:02065C0000009C +:02065D0000009B +:02065E0000009A +:02065F00000099 +:02066000000098 +:02066100000097 +:02066200000096 +:02066300000095 +:02066400000094 +:02066500000093 +:02066600000092 +:02066700000091 +:02066800000090 +:0206690000008F +:02066A0000008E +:02066B0000008D +:02066C0000008C +:02066D0000008B +:02066E0000008A +:02066F00000089 +:02067000000088 +:02067100000087 +:02067200000086 +:02067300000085 +:02067400000084 +:02067500000083 +:02067600000082 +:02067700000081 +:02067800000080 +:0206790000007F +:02067A0000007E +:02067B0000007D +:02067C0000007C +:02067D0000007B +:02067E0000007A +:02067F00000079 +:02068000000078 +:02068100000077 +:02068200000076 +:02068300000075 +:02068400000074 +:02068500000073 +:02068600000072 +:02068700000071 +:02068800000070 +:0206890000006F +:02068A0000006E +:02068B0000006D +:02068C0000006C +:02068D0000006B +:02068E0000006A +:02068F00000069 +:02069000000068 +:02069100000067 +:02069200000066 +:02069300000065 +:02069400000064 +:02069500000063 +:02069600000062 +:02069700000061 +:02069800000060 +:0206990000005F +:02069A0000005E +:02069B0000005D +:02069C0000005C +:02069D0000005B +:02069E0000005A +:02069F00000059 +:0206A000000058 +:0206A100000057 +:0206A200000056 +:0206A300000055 +:0206A400000054 +:0206A500000053 +:0206A600000052 +:0206A700000051 +:0206A800000050 +:0206A90000004F +:0206AA0000004E +:0206AB0000004D +:0206AC0000004C +:0206AD0000004B +:0206AE0000004A +:0206AF00000049 +:0206B000000048 +:0206B100000047 +:0206B200000046 +:0206B300000045 +:0206B400000044 +:0206B500000043 +:0206B600000042 +:0206B700000041 +:0206B800000040 +:0206B90000003F +:0206BA0000003E +:0206BB0000003D +:0206BC0000003C +:0206BD0000003B +:0206BE0000003A +:0206BF00000039 +:0206C000000038 +:0206C100000037 +:0206C200000036 +:0206C300000035 +:0206C400000034 +:0206C500000033 +:0206C600000032 +:0206C700000031 +:0206C800000030 +:0206C90000002F +:0206CA0000002E +:0206CB0000002D +:0206CC0000002C +:0206CD0000002B +:0206CE0000002A +:0206CF00000029 +:0206D000000028 +:0206D100000027 +:0206D200000026 +:0206D300000025 +:0206D400000024 +:0206D500000023 +:0206D600000022 +:0206D700000021 +:0206D800000020 +:0206D90000001F +:0206DA0000001E +:0206DB0000001D +:0206DC0000001C +:0206DD0000001B +:0206DE0000001A +:0206DF00000019 +:0206E000000018 +:0206E100000017 +:0206E200000016 +:0206E300000015 +:0206E400000014 +:0206E500000013 +:0206E600000012 +:0206E700000011 +:0206E800000010 +:0206E90000000F +:0206EA0000000E +:0206EB0000000D +:0206EC0000000C +:0206ED0000000B +:0206EE0000000A +:0206EF00000009 +:0206F000000008 +:0206F100000007 +:0206F200000006 +:0206F300000005 +:0206F400000004 +:0206F500000003 +:0206F600000002 +:0206F700000001 +:0206F800000000 +:0206F9000000FF +:0206FA000000FE +:0206FB000000FD +:0206FC000000FC +:0206FD000000FB +:0206FE000000FA +:0206FF000000F9 +:020700000000F7 +:020701000000F6 +:020702000000F5 +:020703000000F4 +:020704000000F3 +:020705000000F2 +:020706000000F1 +:020707000000F0 +:020708000000EF +:020709000000EE +:02070A000000ED +:02070B000000EC +:02070C000000EB +:02070D000000EA +:02070E000000E9 +:02070F000000E8 +:020710000000E7 +:020711000000E6 +:020712000000E5 +:020713000000E4 +:020714000000E3 +:020715000000E2 +:020716000000E1 +:020717000000E0 +:020718000000DF +:020719000000DE +:02071A000000DD +:02071B000000DC +:02071C000000DB +:02071D000000DA +:02071E000000D9 +:02071F000000D8 +:020720000000D7 +:020721000000D6 +:020722000000D5 +:020723000000D4 +:020724000000D3 +:020725000000D2 +:020726000000D1 +:020727000000D0 +:020728000000CF +:020729000000CE +:02072A000000CD +:02072B000000CC +:02072C000000CB +:02072D000000CA +:02072E000000C9 +:02072F000000C8 +:020730000000C7 +:020731000000C6 +:020732000000C5 +:020733000000C4 +:020734000000C3 +:020735000000C2 +:020736000000C1 +:020737000000C0 +:020738000000BF +:020739000000BE +:02073A000000BD +:02073B000000BC +:02073C000000BB +:02073D000000BA +:02073E000000B9 +:02073F000000B8 +:020740000000B7 +:020741000000B6 +:020742000000B5 +:020743000000B4 +:020744000000B3 +:020745000000B2 +:020746000000B1 +:020747000000B0 +:020748000000AF +:020749000000AE +:02074A000000AD +:02074B000000AC +:02074C000000AB +:02074D000000AA +:02074E000000A9 +:02074F000000A8 +:020750000000A7 +:020751000000A6 +:020752000000A5 +:020753000000A4 +:020754000000A3 +:020755000000A2 +:020756000000A1 +:020757000000A0 +:0207580000009F +:0207590000009E +:02075A0000009D +:02075B0000009C +:02075C0000009B +:02075D0000009A +:02075E00000099 +:02075F00000098 +:02076000000097 +:02076100000096 +:02076200000095 +:02076300000094 +:02076400000093 +:02076500000092 +:02076600000091 +:02076700000090 +:0207680000008F +:0207690000008E +:02076A0000008D +:02076B0000008C +:02076C0000008B +:02076D0000008A +:02076E00000089 +:02076F00000088 +:02077000000087 +:02077100000086 +:02077200000085 +:02077300000084 +:02077400000083 +:02077500000082 +:02077600000081 +:02077700000080 +:0207780000007F +:0207790000007E +:02077A0000007D +:02077B0000007C +:02077C0000007B +:02077D0000007A +:02077E00000079 +:02077F00000078 +:02078000000077 +:02078100000076 +:02078200000075 +:02078300000074 +:02078400000073 +:02078500000072 +:02078600000071 +:02078700000070 +:0207880000006F +:0207890000006E +:02078A0000006D +:02078B0000006C +:02078C0000006B +:02078D0000006A +:02078E00000069 +:02078F00000068 +:02079000000067 +:02079100000066 +:02079200000065 +:02079300000064 +:02079400000063 +:02079500000062 +:02079600000061 +:02079700000060 +:0207980000005F +:0207990000005E +:02079A0000005D +:02079B0000005C +:02079C0000005B +:02079D0000005A +:02079E00000059 +:02079F00000058 +:0207A000000057 +:0207A100000056 +:0207A200000055 +:0207A300000054 +:0207A400000053 +:0207A500000052 +:0207A600000051 +:0207A700000050 +:0207A80000004F +:0207A90000004E +:0207AA0000004D +:0207AB0000004C +:0207AC0000004B +:0207AD0000004A +:0207AE00000049 +:0207AF00000048 +:0207B000000047 +:0207B100000046 +:0207B200000045 +:0207B300000044 +:0207B400000043 +:0207B500000042 +:0207B600000041 +:0207B700000040 +:0207B80000003F +:0207B90000003E +:0207BA0000003D +:0207BB0000003C +:0207BC0000003B +:0207BD0000003A +:0207BE00000039 +:0207BF00000038 +:0207C000000037 +:0207C100000036 +:0207C200000035 +:0207C300000034 +:0207C400000033 +:0207C500000032 +:0207C600000031 +:0207C700000030 +:0207C80000002F +:0207C90000002E +:0207CA0000002D +:0207CB0000002C +:0207CC0000002B +:0207CD0000002A +:0207CE00000029 +:0207CF00000028 +:0207D000000027 +:0207D100000026 +:0207D200000025 +:0207D300000024 +:0207D400000023 +:0207D500000022 +:0207D600000021 +:0207D700000020 +:0207D80000001F +:0207D90000001E +:0207DA0000001D +:0207DB0000001C +:0207DC0000001B +:0207DD0000001A +:0207DE00000019 +:0207DF00000018 +:0207E000000017 +:0207E100000016 +:0207E200000015 +:0207E300000014 +:0207E400000013 +:0207E500000012 +:0207E600000011 +:0207E700000010 +:0207E80000000F +:0207E90000000E +:0207EA0000000D +:0207EB0000000C +:0207EC0000000B +:0207ED0000000A +:0207EE00000009 +:0207EF00000008 +:0207F000000007 +:0207F100000006 +:0207F200000005 +:0207F300000004 +:0207F400000003 +:0207F500000002 +:0207F600000001 +:0207F700000000 +:0207F8000000FF +:0207F9000000FE +:0207FA000000FD +:0207FB000000FC +:0207FC000000FB +:0207FD000000FA +:0207FE000000F9 +:0207FF000000F8 +:020800000000F6 +:020801000000F5 +:020802000000F4 +:020803000000F3 +:020804000000F2 +:020805000000F1 +:020806000000F0 +:020807000000EF +:020808000000EE +:020809000000ED +:02080A000000EC +:02080B000000EB +:02080C000000EA +:02080D000000E9 +:02080E000000E8 +:02080F000000E7 +:020810000000E6 +:020811000000E5 +:020812000000E4 +:020813000000E3 +:020814000000E2 +:020815000000E1 +:020816000000E0 +:020817000000DF +:020818000000DE +:020819000000DD +:02081A000000DC +:02081B000000DB +:02081C000000DA +:02081D000000D9 +:02081E000000D8 +:02081F000000D7 +:020820000000D6 +:020821000000D5 +:020822000000D4 +:020823000000D3 +:020824000000D2 +:020825000000D1 +:020826000000D0 +:020827000000CF +:020828000000CE +:020829000000CD +:02082A000000CC +:02082B000000CB +:02082C000000CA +:02082D000000C9 +:02082E000000C8 +:02082F000000C7 +:020830000000C6 +:020831000000C5 +:020832000000C4 +:020833000000C3 +:020834000000C2 +:020835000000C1 +:020836000000C0 +:020837000000BF +:020838000000BE +:020839000000BD +:02083A000000BC +:02083B000000BB +:02083C000000BA +:02083D000000B9 +:02083E000000B8 +:02083F000000B7 +:020840000000B6 +:020841000000B5 +:020842000000B4 +:020843000000B3 +:020844000000B2 +:020845000000B1 +:020846000000B0 +:020847000000AF +:020848000000AE +:020849000000AD +:02084A000000AC +:02084B000000AB +:02084C000000AA +:02084D000000A9 +:02084E000000A8 +:02084F000000A7 +:020850000000A6 +:020851000000A5 +:020852000000A4 +:020853000000A3 +:020854000000A2 +:020855000000A1 +:020856000000A0 +:0208570000009F +:0208580000009E +:0208590000009D +:02085A0000009C +:02085B0000009B +:02085C0000009A +:02085D00000099 +:02085E00000098 +:02085F00000097 +:02086000000096 +:02086100000095 +:02086200000094 +:02086300000093 +:02086400000092 +:02086500000091 +:02086600000090 +:0208670000008F +:0208680000008E +:0208690000008D +:02086A0000008C +:02086B0000008B +:02086C0000008A +:02086D00000089 +:02086E00000088 +:02086F00000087 +:02087000000086 +:02087100000085 +:02087200000084 +:02087300000083 +:02087400000082 +:02087500000081 +:02087600000080 +:0208770000007F +:0208780000007E +:0208790000007D +:02087A0000007C +:02087B0000007B +:02087C0000007A +:02087D00000079 +:02087E00000078 +:02087F00000077 +:02088000000076 +:02088100000075 +:02088200000074 +:02088300000073 +:02088400000072 +:02088500000071 +:02088600000070 +:0208870000006F +:0208880000006E +:0208890000006D +:02088A0000006C +:02088B0000006B +:02088C0000006A +:02088D00000069 +:02088E00000068 +:02088F00000067 +:02089000000066 +:02089100000065 +:02089200000064 +:02089300000063 +:02089400000062 +:02089500000061 +:02089600000060 +:0208970000005F +:0208980000005E +:0208990000005D +:02089A0000005C +:02089B0000005B +:02089C0000005A +:02089D00000059 +:02089E00000058 +:02089F00000057 +:0208A000000056 +:0208A100000055 +:0208A200000054 +:0208A300000053 +:0208A400000052 +:0208A500000051 +:0208A600000050 +:0208A70000004F +:0208A80000004E +:0208A90000004D +:0208AA0000004C +:0208AB0000004B +:0208AC0000004A +:0208AD00000049 +:0208AE00000048 +:0208AF00000047 +:0208B000000046 +:0208B100000045 +:0208B200000044 +:0208B300000043 +:0208B400000042 +:0208B500000041 +:0208B600000040 +:0208B70000003F +:0208B80000003E +:0208B90000003D +:0208BA0000003C +:0208BB0000003B +:0208BC0000003A +:0208BD00000039 +:0208BE00000038 +:0208BF00000037 +:0208C000000036 +:0208C100000035 +:0208C200000034 +:0208C300000033 +:0208C400000032 +:0208C500000031 +:0208C600000030 +:0208C70000002F +:0208C80000002E +:0208C90000002D +:0208CA0000002C +:0208CB0000002B +:0208CC0000002A +:0208CD00000029 +:0208CE00000028 +:0208CF00000027 +:0208D000000026 +:0208D100000025 +:0208D200000024 +:0208D300000023 +:0208D400000022 +:0208D500000021 +:0208D600000020 +:0208D70000001F +:0208D80000001E +:0208D90000001D +:0208DA0000001C +:0208DB0000001B +:0208DC0000001A +:0208DD00000019 +:0208DE00000018 +:0208DF00000017 +:0208E000000016 +:0208E100000015 +:0208E200000014 +:0208E300000013 +:0208E400000012 +:0208E500000011 +:0208E600000010 +:0208E70000000F +:0208E80000000E +:0208E90000000D +:0208EA0000000C +:0208EB0000000B +:0208EC0000000A +:0208ED00000009 +:0208EE00000008 +:0208EF00000007 +:0208F000000006 +:0208F100000005 +:0208F200000004 +:0208F300000003 +:0208F400000002 +:0208F500000001 +:0208F600000000 +:0208F7000000FF +:0208F8000000FE +:0208F9000000FD +:0208FA000000FC +:0208FB000000FB +:0208FC000000FA +:0208FD000000F9 +:0208FE000000F8 +:0208FF000000F7 +:020900000000F5 +:020901000000F4 +:020902000000F3 +:020903000000F2 +:020904000000F1 +:020905000000F0 +:020906000000EF +:020907000000EE +:020908000000ED +:020909000000EC +:02090A000000EB +:02090B000000EA +:02090C000000E9 +:02090D000000E8 +:02090E000000E7 +:02090F000000E6 +:020910000000E5 +:020911000000E4 +:020912000000E3 +:020913000000E2 +:020914000000E1 +:020915000000E0 +:020916000000DF +:020917000000DE +:020918000000DD +:020919000000DC +:02091A000000DB +:02091B000000DA +:02091C000000D9 +:02091D000000D8 +:02091E000000D7 +:02091F000000D6 +:020920000000D5 +:020921000000D4 +:020922000000D3 +:020923000000D2 +:020924000000D1 +:020925000000D0 +:020926000000CF +:020927000000CE +:020928000000CD +:020929000000CC +:02092A000000CB +:02092B000000CA +:02092C000000C9 +:02092D000000C8 +:02092E000000C7 +:02092F000000C6 +:020930000000C5 +:020931000000C4 +:020932000000C3 +:020933000000C2 +:020934000000C1 +:020935000000C0 +:020936000000BF +:020937000000BE +:020938000000BD +:020939000000BC +:02093A000000BB +:02093B000000BA +:02093C000000B9 +:02093D000000B8 +:02093E000000B7 +:02093F000000B6 +:020940000000B5 +:020941000000B4 +:020942000000B3 +:020943000000B2 +:020944000000B1 +:020945000000B0 +:020946000000AF +:020947000000AE +:020948000000AD +:020949000000AC +:02094A000000AB +:02094B000000AA +:02094C000000A9 +:02094D000000A8 +:02094E000000A7 +:02094F000000A6 +:020950000000A5 +:020951000000A4 +:020952000000A3 +:020953000000A2 +:020954000000A1 +:020955000000A0 +:0209560000009F +:0209570000009E +:0209580000009D +:0209590000009C +:02095A0000009B +:02095B0000009A +:02095C00000099 +:02095D00000098 +:02095E00000097 +:02095F00000096 +:02096000000095 +:02096100000094 +:02096200000093 +:02096300000092 +:02096400000091 +:02096500000090 +:0209660000008F +:0209670000008E +:0209680000008D +:0209690000008C +:02096A0000008B +:02096B0000008A +:02096C00000089 +:02096D00000088 +:02096E00000087 +:02096F00000086 +:02097000000085 +:02097100000084 +:02097200000083 +:02097300000082 +:02097400000081 +:02097500000080 +:0209760000007F +:0209770000007E +:0209780000007D +:0209790000007C +:02097A0000007B +:02097B0000007A +:02097C00000079 +:02097D00000078 +:02097E00000077 +:02097F00000076 +:02098000000075 +:02098100000074 +:02098200000073 +:02098300000072 +:02098400000071 +:02098500000070 +:0209860000006F +:0209870000006E +:0209880000006D +:0209890000006C +:02098A0000006B +:02098B0000006A +:02098C00000069 +:02098D00000068 +:02098E00000067 +:02098F00000066 +:02099000000065 +:02099100000064 +:02099200000063 +:02099300000062 +:02099400000061 +:02099500000060 +:0209960000005F +:0209970000005E +:0209980000005D +:0209990000005C +:02099A0000005B +:02099B0000005A +:02099C00000059 +:02099D00000058 +:02099E00000057 +:02099F00000056 +:0209A000000055 +:0209A100000054 +:0209A200000053 +:0209A300000052 +:0209A400000051 +:0209A500000050 +:0209A60000004F +:0209A70000004E +:0209A80000004D +:0209A90000004C +:0209AA0000004B +:0209AB0000004A +:0209AC00000049 +:0209AD00000048 +:0209AE00000047 +:0209AF00000046 +:0209B000000045 +:0209B100000044 +:0209B200000043 +:0209B300000042 +:0209B400000041 +:0209B500000040 +:0209B60000003F +:0209B70000003E +:0209B80000003D +:0209B90000003C +:0209BA0000003B +:0209BB0000003A +:0209BC00000039 +:0209BD00000038 +:0209BE00000037 +:0209BF00000036 +:0209C000000035 +:0209C100000034 +:0209C200000033 +:0209C300000032 +:0209C400000031 +:0209C500000030 +:0209C60000002F +:0209C70000002E +:0209C80000002D +:0209C90000002C +:0209CA0000002B +:0209CB0000002A +:0209CC00000029 +:0209CD00000028 +:0209CE00000027 +:0209CF00000026 +:0209D000000025 +:0209D100000024 +:0209D200000023 +:0209D300000022 +:0209D400000021 +:0209D500000020 +:0209D60000001F +:0209D70000001E +:0209D80000001D +:0209D90000001C +:0209DA0000001B +:0209DB0000001A +:0209DC00000019 +:0209DD00000018 +:0209DE00000017 +:0209DF00000016 +:0209E000000015 +:0209E100000014 +:0209E200000013 +:0209E300000012 +:0209E400000011 +:0209E500000010 +:0209E60000000F +:0209E70000000E +:0209E80000000D +:0209E90000000C +:0209EA0000000B +:0209EB0000000A +:0209EC00000009 +:0209ED00000008 +:0209EE00000007 +:0209EF00000006 +:0209F000000005 +:0209F100000004 +:0209F200000003 +:0209F300000002 +:0209F400000001 +:0209F500000000 +:0209F6000000FF +:0209F7000000FE +:0209F8000000FD +:0209F9000000FC +:0209FA000000FB +:0209FB000000FA +:0209FC000000F9 +:0209FD000000F8 +:0209FE000000F7 +:0209FF000000F6 +:020A00000000F4 +:020A01000000F3 +:020A02000000F2 +:020A03000000F1 +:020A04000000F0 +:020A05000000EF +:020A06000000EE +:020A07000000ED +:020A08000000EC +:020A09000000EB +:020A0A000000EA +:020A0B000000E9 +:020A0C000000E8 +:020A0D000000E7 +:020A0E000000E6 +:020A0F000000E5 +:020A10000000E4 +:020A11000000E3 +:020A12000000E2 +:020A13000000E1 +:020A14000000E0 +:020A15000000DF +:020A16000000DE +:020A17000000DD +:020A18000000DC +:020A19000000DB +:020A1A000000DA +:020A1B000000D9 +:020A1C000000D8 +:020A1D000000D7 +:020A1E000000D6 +:020A1F000000D5 +:020A20000000D4 +:020A21000000D3 +:020A22000000D2 +:020A23000000D1 +:020A24000000D0 +:020A25000000CF +:020A26000000CE +:020A27000000CD +:020A28000000CC +:020A29000000CB +:020A2A000000CA +:020A2B000000C9 +:020A2C000000C8 +:020A2D000000C7 +:020A2E000000C6 +:020A2F000000C5 +:020A30000000C4 +:020A31000000C3 +:020A32000000C2 +:020A33000000C1 +:020A34000000C0 +:020A35000000BF +:020A36000000BE +:020A37000000BD +:020A38000000BC +:020A39000000BB +:020A3A000000BA +:020A3B000000B9 +:020A3C000000B8 +:020A3D000000B7 +:020A3E000000B6 +:020A3F000000B5 +:020A40000000B4 +:020A41000000B3 +:020A42000000B2 +:020A43000000B1 +:020A44000000B0 +:020A45000000AF +:020A46000000AE +:020A47000000AD +:020A48000000AC +:020A49000000AB +:020A4A000000AA +:020A4B000000A9 +:020A4C000000A8 +:020A4D000000A7 +:020A4E000000A6 +:020A4F000000A5 +:020A50000000A4 +:020A51000000A3 +:020A52000000A2 +:020A53000000A1 +:020A54000000A0 +:020A550000009F +:020A560000009E +:020A570000009D +:020A580000009C +:020A590000009B +:020A5A0000009A +:020A5B00000099 +:020A5C00000098 +:020A5D00000097 +:020A5E00000096 +:020A5F00000095 +:020A6000000094 +:020A6100000093 +:020A6200000092 +:020A6300000091 +:020A6400000090 +:020A650000008F +:020A660000008E +:020A670000008D +:020A680000008C +:020A690000008B +:020A6A0000008A +:020A6B00000089 +:020A6C00000088 +:020A6D00000087 +:020A6E00000086 +:020A6F00000085 +:020A7000000084 +:020A7100000083 +:020A7200000082 +:020A7300000081 +:020A7400000080 +:020A750000007F +:020A760000007E +:020A770000007D +:020A780000007C +:020A790000007B +:020A7A0000007A +:020A7B00000079 +:020A7C00000078 +:020A7D00000077 +:020A7E00000076 +:020A7F00000075 +:020A8000000074 +:020A8100000073 +:020A8200000072 +:020A8300000071 +:020A8400000070 +:020A850000006F +:020A860000006E +:020A870000006D +:020A880000006C +:020A890000006B +:020A8A0000006A +:020A8B00000069 +:020A8C00000068 +:020A8D00000067 +:020A8E00000066 +:020A8F00000065 +:020A9000000064 +:020A9100000063 +:020A9200000062 +:020A9300000061 +:020A9400000060 +:020A950000005F +:020A960000005E +:020A970000005D +:020A980000005C +:020A990000005B +:020A9A0000005A +:020A9B00000059 +:020A9C00000058 +:020A9D00000057 +:020A9E00000056 +:020A9F00000055 +:020AA000000054 +:020AA100000053 +:020AA200000052 +:020AA300000051 +:020AA400000050 +:020AA50000004F +:020AA60000004E +:020AA70000004D +:020AA80000004C +:020AA90000004B +:020AAA0000004A +:020AAB00000049 +:020AAC00000048 +:020AAD00000047 +:020AAE00000046 +:020AAF00000045 +:020AB000000044 +:020AB100000043 +:020AB200000042 +:020AB300000041 +:020AB400000040 +:020AB50000003F +:020AB60000003E +:020AB70000003D +:020AB80000003C +:020AB90000003B +:020ABA0000003A +:020ABB00000039 +:020ABC00000038 +:020ABD00000037 +:020ABE00000036 +:020ABF00000035 +:020AC000000034 +:020AC100000033 +:020AC200000032 +:020AC300000031 +:020AC400000030 +:020AC50000002F +:020AC60000002E +:020AC70000002D +:020AC80000002C +:020AC90000002B +:020ACA0000002A +:020ACB00000029 +:020ACC00000028 +:020ACD00000027 +:020ACE00000026 +:020ACF00000025 +:020AD000000024 +:020AD100000023 +:020AD200000022 +:020AD300000021 +:020AD400000020 +:020AD50000001F +:020AD60000001E +:020AD70000001D +:020AD80000001C +:020AD90000001B +:020ADA0000001A +:020ADB00000019 +:020ADC00000018 +:020ADD00000017 +:020ADE00000016 +:020ADF00000015 +:020AE000000014 +:020AE100000013 +:020AE200000012 +:020AE300000011 +:020AE400000010 +:020AE50000000F +:020AE60000000E +:020AE70000000D +:020AE80000000C +:020AE90000000B +:020AEA0000000A +:020AEB00000009 +:020AEC00000008 +:020AED00000007 +:020AEE00000006 +:020AEF00000005 +:020AF000000004 +:020AF100000003 +:020AF200000002 +:020AF300000001 +:020AF400000000 +:020AF5000000FF +:020AF6000000FE +:020AF7000000FD +:020AF8000000FC +:020AF9000000FB +:020AFA000000FA +:020AFB000000F9 +:020AFC000000F8 +:020AFD000000F7 +:020AFE000000F6 +:020AFF000000F5 +:020B00000000F3 +:020B01000000F2 +:020B02000000F1 +:020B03000000F0 +:020B04000000EF +:020B05000000EE +:020B06000000ED +:020B07000000EC +:020B08000000EB +:020B09000000EA +:020B0A000000E9 +:020B0B000000E8 +:020B0C000000E7 +:020B0D000000E6 +:020B0E000000E5 +:020B0F000000E4 +:020B10000000E3 +:020B11000000E2 +:020B12000000E1 +:020B13000000E0 +:020B14000000DF +:020B15000000DE +:020B16000000DD +:020B17000000DC +:020B18000000DB +:020B19000000DA +:020B1A000000D9 +:020B1B000000D8 +:020B1C000000D7 +:020B1D000000D6 +:020B1E000000D5 +:020B1F000000D4 +:020B20000000D3 +:020B21000000D2 +:020B22000000D1 +:020B23000000D0 +:020B24000000CF +:020B25000000CE +:020B26000000CD +:020B27000000CC +:020B28000000CB +:020B29000000CA +:020B2A000000C9 +:020B2B000000C8 +:020B2C000000C7 +:020B2D000000C6 +:020B2E000000C5 +:020B2F000000C4 +:020B30000000C3 +:020B31000000C2 +:020B32000000C1 +:020B33000000C0 +:020B34000000BF +:020B35000000BE +:020B36000000BD +:020B37000000BC +:020B38000000BB +:020B39000000BA +:020B3A000000B9 +:020B3B000000B8 +:020B3C000000B7 +:020B3D000000B6 +:020B3E000000B5 +:020B3F000000B4 +:020B40000000B3 +:020B41000000B2 +:020B42000000B1 +:020B43000000B0 +:020B44000000AF +:020B45000000AE +:020B46000000AD +:020B47000000AC +:020B48000000AB +:020B49000000AA +:020B4A000000A9 +:020B4B000000A8 +:020B4C000000A7 +:020B4D000000A6 +:020B4E000000A5 +:020B4F000000A4 +:020B50000000A3 +:020B51000000A2 +:020B52000000A1 +:020B53000000A0 +:020B540000009F +:020B550000009E +:020B560000009D +:020B570000009C +:020B580000009B +:020B590000009A +:020B5A00000099 +:020B5B00000098 +:020B5C00000097 +:020B5D00000096 +:020B5E00000095 +:020B5F00000094 +:020B6000000093 +:020B6100000092 +:020B6200000091 +:020B6300000090 +:020B640000008F +:020B650000008E +:020B660000008D +:020B670000008C +:020B680000008B +:020B690000008A +:020B6A00000089 +:020B6B00000088 +:020B6C00000087 +:020B6D00000086 +:020B6E00000085 +:020B6F00000084 +:020B7000000083 +:020B7100000082 +:020B7200000081 +:020B7300000080 +:020B740000007F +:020B750000007E +:020B760000007D +:020B770000007C +:020B780000007B +:020B790000007A +:020B7A00000079 +:020B7B00000078 +:020B7C00000077 +:020B7D00000076 +:020B7E00000075 +:020B7F00000074 +:020B8000000073 +:020B8100000072 +:020B8200000071 +:020B8300000070 +:020B840000006F +:020B850000006E +:020B860000006D +:020B870000006C +:020B880000006B +:020B890000006A +:020B8A00000069 +:020B8B00000068 +:020B8C00000067 +:020B8D00000066 +:020B8E00000065 +:020B8F00000064 +:020B9000000063 +:020B9100000062 +:020B9200000061 +:020B9300000060 +:020B940000005F +:020B950000005E +:020B960000005D +:020B970000005C +:020B980000005B +:020B990000005A +:020B9A00000059 +:020B9B00000058 +:020B9C00000057 +:020B9D00000056 +:020B9E00000055 +:020B9F00000054 +:020BA000000053 +:020BA100000052 +:020BA200000051 +:020BA300000050 +:020BA40000004F +:020BA50000004E +:020BA60000004D +:020BA70000004C +:020BA80000004B +:020BA90000004A +:020BAA00000049 +:020BAB00000048 +:020BAC00000047 +:020BAD00000046 +:020BAE00000045 +:020BAF00000044 +:020BB000000043 +:020BB100000042 +:020BB200000041 +:020BB300000040 +:020BB40000003F +:020BB50000003E +:020BB60000003D +:020BB70000003C +:020BB80000003B +:020BB90000003A +:020BBA00000039 +:020BBB00000038 +:020BBC00000037 +:020BBD00000036 +:020BBE00000035 +:020BBF00000034 +:020BC000000033 +:020BC100000032 +:020BC200000031 +:020BC300000030 +:020BC40000002F +:020BC50000002E +:020BC60000002D +:020BC70000002C +:020BC80000002B +:020BC90000002A +:020BCA00000029 +:020BCB00000028 +:020BCC00000027 +:020BCD00000026 +:020BCE00000025 +:020BCF00000024 +:020BD000000023 +:020BD100000022 +:020BD200000021 +:020BD300000020 +:020BD40000001F +:020BD50000001E +:020BD60000001D +:020BD70000001C +:020BD80000001B +:020BD90000001A +:020BDA00000019 +:020BDB00000018 +:020BDC00000017 +:020BDD00000016 +:020BDE00000015 +:020BDF00000014 +:020BE000000013 +:020BE100000012 +:020BE200000011 +:020BE300000010 +:020BE40000000F +:020BE50000000E +:020BE60000000D +:020BE70000000C +:020BE80000000B +:020BE90000000A +:020BEA00000009 +:020BEB00000008 +:020BEC00000007 +:020BED00000006 +:020BEE00000005 +:020BEF00000004 +:020BF000000003 +:020BF100000002 +:020BF200000001 +:020BF300000000 +:020BF4000000FF +:020BF5000000FE +:020BF6000000FD +:020BF7000000FC +:020BF8000000FB +:020BF9000000FA +:020BFA000000F9 +:020BFB000000F8 +:020BFC000000F7 +:020BFD000000F6 +:020BFE000000F5 +:020BFF000000F4 +:020C00000000F2 +:020C01000000F1 +:020C02000000F0 +:020C03000000EF +:020C04000000EE +:020C05000000ED +:020C06000000EC +:020C07000000EB +:020C08000000EA +:020C09000000E9 +:020C0A000000E8 +:020C0B000000E7 +:020C0C000000E6 +:020C0D000000E5 +:020C0E000000E4 +:020C0F000000E3 +:020C10000000E2 +:020C11000000E1 +:020C12000000E0 +:020C13000000DF +:020C14000000DE +:020C15000000DD +:020C16000000DC +:020C17000000DB +:020C18000000DA +:020C19000000D9 +:020C1A000000D8 +:020C1B000000D7 +:020C1C000000D6 +:020C1D000000D5 +:020C1E000000D4 +:020C1F000000D3 +:020C20000000D2 +:020C21000000D1 +:020C22000000D0 +:020C23000000CF +:020C24000000CE +:020C25000000CD +:020C26000000CC +:020C27000000CB +:020C28000000CA +:020C29000000C9 +:020C2A000000C8 +:020C2B000000C7 +:020C2C000000C6 +:020C2D000000C5 +:020C2E000000C4 +:020C2F000000C3 +:020C30000000C2 +:020C31000000C1 +:020C32000000C0 +:020C33000000BF +:020C34000000BE +:020C35000000BD +:020C36000000BC +:020C37000000BB +:020C38000000BA +:020C39000000B9 +:020C3A000000B8 +:020C3B000000B7 +:020C3C000000B6 +:020C3D000000B5 +:020C3E000000B4 +:020C3F000000B3 +:020C40000000B2 +:020C41000000B1 +:020C42000000B0 +:020C43000000AF +:020C44000000AE +:020C45000000AD +:020C46000000AC +:020C47000000AB +:020C48000000AA +:020C49000000A9 +:020C4A000000A8 +:020C4B000000A7 +:020C4C000000A6 +:020C4D000000A5 +:020C4E000000A4 +:020C4F000000A3 +:020C50000000A2 +:020C51000000A1 +:020C52000000A0 +:020C530000009F +:020C540000009E +:020C550000009D +:020C560000009C +:020C570000009B +:020C580000009A +:020C5900000099 +:020C5A00000098 +:020C5B00000097 +:020C5C00000096 +:020C5D00000095 +:020C5E00000094 +:020C5F00000093 +:020C6000000092 +:020C6100000091 +:020C6200000090 +:020C630000008F +:020C640000008E +:020C650000008D +:020C660000008C +:020C670000008B +:020C680000008A +:020C6900000089 +:020C6A00000088 +:020C6B00000087 +:020C6C00000086 +:020C6D00000085 +:020C6E00000084 +:020C6F00000083 +:020C7000000082 +:020C7100000081 +:020C7200000080 +:020C730000007F +:020C740000007E +:020C750000007D +:020C760000007C +:020C770000007B +:020C780000007A +:020C7900000079 +:020C7A00000078 +:020C7B00000077 +:020C7C00000076 +:020C7D00000075 +:020C7E00000074 +:020C7F00000073 +:020C8000000072 +:020C8100000071 +:020C8200000070 +:020C830000006F +:020C840000006E +:020C850000006D +:020C860000006C +:020C870000006B +:020C880000006A +:020C8900000069 +:020C8A00000068 +:020C8B00000067 +:020C8C00000066 +:020C8D00000065 +:020C8E00000064 +:020C8F00000063 +:020C9000000062 +:020C9100000061 +:020C9200000060 +:020C930000005F +:020C940000005E +:020C950000005D +:020C960000005C +:020C970000005B +:020C980000005A +:020C9900000059 +:020C9A00000058 +:020C9B00000057 +:020C9C00000056 +:020C9D00000055 +:020C9E00000054 +:020C9F00000053 +:020CA000000052 +:020CA100000051 +:020CA200000050 +:020CA30000004F +:020CA40000004E +:020CA50000004D +:020CA60000004C +:020CA70000004B +:020CA80000004A +:020CA900000049 +:020CAA00000048 +:020CAB00000047 +:020CAC00000046 +:020CAD00000045 +:020CAE00000044 +:020CAF00000043 +:020CB000000042 +:020CB100000041 +:020CB200000040 +:020CB30000003F +:020CB40000003E +:020CB50000003D +:020CB60000003C +:020CB70000003B +:020CB80000003A +:020CB900000039 +:020CBA00000038 +:020CBB00000037 +:020CBC00000036 +:020CBD00000035 +:020CBE00000034 +:020CBF00000033 +:020CC000000032 +:020CC100000031 +:020CC200000030 +:020CC30000002F +:020CC40000002E +:020CC50000002D +:020CC60000002C +:020CC70000002B +:020CC80000002A +:020CC900000029 +:020CCA00000028 +:020CCB00000027 +:020CCC00000026 +:020CCD00000025 +:020CCE00000024 +:020CCF00000023 +:020CD000000022 +:020CD100000021 +:020CD200000020 +:020CD30000001F +:020CD40000001E +:020CD50000001D +:020CD60000001C +:020CD70000001B +:020CD80000001A +:020CD900000019 +:020CDA00000018 +:020CDB00000017 +:020CDC00000016 +:020CDD00000015 +:020CDE00000014 +:020CDF00000013 +:020CE000000012 +:020CE100000011 +:020CE200000010 +:020CE30000000F +:020CE40000000E +:020CE50000000D +:020CE60000000C +:020CE70000000B +:020CE80000000A +:020CE900000009 +:020CEA00000008 +:020CEB00000007 +:020CEC00000006 +:020CED00000005 +:020CEE00000004 +:020CEF00000003 +:020CF000000002 +:020CF100000001 +:020CF200000000 +:020CF3000000FF +:020CF4000000FE +:020CF5000000FD +:020CF6000000FC +:020CF7000000FB +:020CF8000000FA +:020CF9000000F9 +:020CFA000000F8 +:020CFB000000F7 +:020CFC000000F6 +:020CFD000000F5 +:020CFE000000F4 +:020CFF000000F3 +:020D00000000F1 +:020D01000000F0 +:020D02000000EF +:020D03000000EE +:020D04000000ED +:020D05000000EC +:020D06000000EB +:020D07000000EA +:020D08000000E9 +:020D09000000E8 +:020D0A000000E7 +:020D0B000000E6 +:020D0C000000E5 +:020D0D000000E4 +:020D0E000000E3 +:020D0F000000E2 +:020D10000000E1 +:020D11000000E0 +:020D12000000DF +:020D13000000DE +:020D14000000DD +:020D15000000DC +:020D16000000DB +:020D17000000DA +:020D18000000D9 +:020D19000000D8 +:020D1A000000D7 +:020D1B000000D6 +:020D1C000000D5 +:020D1D000000D4 +:020D1E000000D3 +:020D1F000000D2 +:020D20000000D1 +:020D21000000D0 +:020D22000000CF +:020D23000000CE +:020D24000000CD +:020D25000000CC +:020D26000000CB +:020D27000000CA +:020D28000000C9 +:020D29000000C8 +:020D2A000000C7 +:020D2B000000C6 +:020D2C000000C5 +:020D2D000000C4 +:020D2E000000C3 +:020D2F000000C2 +:020D30000000C1 +:020D31000000C0 +:020D32000000BF +:020D33000000BE +:020D34000000BD +:020D35000000BC +:020D36000000BB +:020D37000000BA +:020D38000000B9 +:020D39000000B8 +:020D3A000000B7 +:020D3B000000B6 +:020D3C000000B5 +:020D3D000000B4 +:020D3E000000B3 +:020D3F000000B2 +:020D40000000B1 +:020D41000000B0 +:020D42000000AF +:020D43000000AE +:020D44000000AD +:020D45000000AC +:020D46000000AB +:020D47000000AA +:020D48000000A9 +:020D49000000A8 +:020D4A000000A7 +:020D4B000000A6 +:020D4C000000A5 +:020D4D000000A4 +:020D4E000000A3 +:020D4F000000A2 +:020D50000000A1 +:020D51000000A0 +:020D520000009F +:020D530000009E +:020D540000009D +:020D550000009C +:020D560000009B +:020D570000009A +:020D5800000099 +:020D5900000098 +:020D5A00000097 +:020D5B00000096 +:020D5C00000095 +:020D5D00000094 +:020D5E00000093 +:020D5F00000092 +:020D6000000091 +:020D6100000090 +:020D620000008F +:020D630000008E +:020D640000008D +:020D650000008C +:020D660000008B +:020D670000008A +:020D6800000089 +:020D6900000088 +:020D6A00000087 +:020D6B00000086 +:020D6C00000085 +:020D6D00000084 +:020D6E00000083 +:020D6F00000082 +:020D7000000081 +:020D7100000080 +:020D720000007F +:020D730000007E +:020D740000007D +:020D750000007C +:020D760000007B +:020D770000007A +:020D7800000079 +:020D7900000078 +:020D7A00000077 +:020D7B00000076 +:020D7C00000075 +:020D7D00000074 +:020D7E00000073 +:020D7F00000072 +:020D8000000071 +:020D8100000070 +:020D820000006F +:020D830000006E +:020D840000006D +:020D850000006C +:020D860000006B +:020D870000006A +:020D8800000069 +:020D8900000068 +:020D8A00000067 +:020D8B00000066 +:020D8C00000065 +:020D8D00000064 +:020D8E00000063 +:020D8F00000062 +:020D9000000061 +:020D9100000060 +:020D920000005F +:020D930000005E +:020D940000005D +:020D950000005C +:020D960000005B +:020D970000005A +:020D9800000059 +:020D9900000058 +:020D9A00000057 +:020D9B00000056 +:020D9C00000055 +:020D9D00000054 +:020D9E00000053 +:020D9F00000052 +:020DA000000051 +:020DA100000050 +:020DA20000004F +:020DA30000004E +:020DA40000004D +:020DA50000004C +:020DA60000004B +:020DA70000004A +:020DA800000049 +:020DA900000048 +:020DAA00000047 +:020DAB00000046 +:020DAC00000045 +:020DAD00000044 +:020DAE00000043 +:020DAF00000042 +:020DB000000041 +:020DB100000040 +:020DB20000003F +:020DB30000003E +:020DB40000003D +:020DB50000003C +:020DB60000003B +:020DB70000003A +:020DB800000039 +:020DB900000038 +:020DBA00000037 +:020DBB00000036 +:020DBC00000035 +:020DBD00000034 +:020DBE00000033 +:020DBF00000032 +:020DC000000031 +:020DC100000030 +:020DC20000002F +:020DC30000002E +:020DC40000002D +:020DC50000002C +:020DC60000002B +:020DC70000002A +:020DC800000029 +:020DC900000028 +:020DCA00000027 +:020DCB00000026 +:020DCC00000025 +:020DCD00000024 +:020DCE00000023 +:020DCF00000022 +:020DD000000021 +:020DD100000020 +:020DD20000001F +:020DD30000001E +:020DD40000001D +:020DD50000001C +:020DD60000001B +:020DD70000001A +:020DD800000019 +:020DD900000018 +:020DDA00000017 +:020DDB00000016 +:020DDC00000015 +:020DDD00000014 +:020DDE00000013 +:020DDF00000012 +:020DE000000011 +:020DE100000010 +:020DE20000000F +:020DE30000000E +:020DE40000000D +:020DE50000000C +:020DE60000000B +:020DE70000000A +:020DE800000009 +:020DE900000008 +:020DEA00000007 +:020DEB00000006 +:020DEC00000005 +:020DED00000004 +:020DEE00000003 +:020DEF00000002 +:020DF000000001 +:020DF100000000 +:020DF2000000FF +:020DF3000000FE +:020DF4000000FD +:020DF5000000FC +:020DF6000000FB +:020DF7000000FA +:020DF8000000F9 +:020DF9000000F8 +:020DFA000000F7 +:020DFB000000F6 +:020DFC000000F5 +:020DFD000000F4 +:020DFE000000F3 +:020DFF000000F2 +:020E00000000F0 +:020E01000000EF +:020E02000000EE +:020E03000000ED +:020E04000000EC +:020E05000000EB +:020E06000000EA +:020E07000000E9 +:020E08000000E8 +:020E09000000E7 +:020E0A000000E6 +:020E0B000000E5 +:020E0C000000E4 +:020E0D000000E3 +:020E0E000000E2 +:020E0F000000E1 +:020E10000000E0 +:020E11000000DF +:020E12000000DE +:020E13000000DD +:020E14000000DC +:020E15000000DB +:020E16000000DA +:020E17000000D9 +:020E18000000D8 +:020E19000000D7 +:020E1A000000D6 +:020E1B000000D5 +:020E1C000000D4 +:020E1D000000D3 +:020E1E000000D2 +:020E1F000000D1 +:020E20000000D0 +:020E21000000CF +:020E22000000CE +:020E23000000CD +:020E24000000CC +:020E25000000CB +:020E26000000CA +:020E27000000C9 +:020E28000000C8 +:020E29000000C7 +:020E2A000000C6 +:020E2B000000C5 +:020E2C000000C4 +:020E2D000000C3 +:020E2E000000C2 +:020E2F000000C1 +:020E30000000C0 +:020E31000000BF +:020E32000000BE +:020E33000000BD +:020E34000000BC +:020E35000000BB +:020E36000000BA +:020E37000000B9 +:020E38000000B8 +:020E39000000B7 +:020E3A000000B6 +:020E3B000000B5 +:020E3C000000B4 +:020E3D000000B3 +:020E3E000000B2 +:020E3F000000B1 +:020E40000000B0 +:020E41000000AF +:020E42000000AE +:020E43000000AD +:020E44000000AC +:020E45000000AB +:020E46000000AA +:020E47000000A9 +:020E48000000A8 +:020E49000000A7 +:020E4A000000A6 +:020E4B000000A5 +:020E4C000000A4 +:020E4D000000A3 +:020E4E000000A2 +:020E4F000000A1 +:020E50000000A0 +:020E510000009F +:020E520000009E +:020E530000009D +:020E540000009C +:020E550000009B +:020E560000009A +:020E5700000099 +:020E5800000098 +:020E5900000097 +:020E5A00000096 +:020E5B00000095 +:020E5C00000094 +:020E5D00000093 +:020E5E00000092 +:020E5F00000091 +:020E6000000090 +:020E610000008F +:020E620000008E +:020E630000008D +:020E640000008C +:020E650000008B +:020E660000008A +:020E6700000089 +:020E6800000088 +:020E6900000087 +:020E6A00000086 +:020E6B00000085 +:020E6C00000084 +:020E6D00000083 +:020E6E00000082 +:020E6F00000081 +:020E7000000080 +:020E710000007F +:020E720000007E +:020E730000007D +:020E740000007C +:020E750000007B +:020E760000007A +:020E7700000079 +:020E7800000078 +:020E7900000077 +:020E7A00000076 +:020E7B00000075 +:020E7C00000074 +:020E7D00000073 +:020E7E00000072 +:020E7F00000071 +:020E8000000070 +:020E810000006F +:020E820000006E +:020E830000006D +:020E840000006C +:020E850000006B +:020E860000006A +:020E8700000069 +:020E8800000068 +:020E8900000067 +:020E8A00000066 +:020E8B00000065 +:020E8C00000064 +:020E8D00000063 +:020E8E00000062 +:020E8F00000061 +:020E9000000060 +:020E910000005F +:020E920000005E +:020E930000005D +:020E940000005C +:020E950000005B +:020E960000005A +:020E9700000059 +:020E9800000058 +:020E9900000057 +:020E9A00000056 +:020E9B00000055 +:020E9C00000054 +:020E9D00000053 +:020E9E00000052 +:020E9F00000051 +:020EA000000050 +:020EA10000004F +:020EA20000004E +:020EA30000004D +:020EA40000004C +:020EA50000004B +:020EA60000004A +:020EA700000049 +:020EA800000048 +:020EA900000047 +:020EAA00000046 +:020EAB00000045 +:020EAC00000044 +:020EAD00000043 +:020EAE00000042 +:020EAF00000041 +:020EB000000040 +:020EB10000003F +:020EB20000003E +:020EB30000003D +:020EB40000003C +:020EB50000003B +:020EB60000003A +:020EB700000039 +:020EB800000038 +:020EB900000037 +:020EBA00000036 +:020EBB00000035 +:020EBC00000034 +:020EBD00000033 +:020EBE00000032 +:020EBF00000031 +:020EC000000030 +:020EC10000002F +:020EC20000002E +:020EC30000002D +:020EC40000002C +:020EC50000002B +:020EC60000002A +:020EC700000029 +:020EC800000028 +:020EC900000027 +:020ECA00000026 +:020ECB00000025 +:020ECC00000024 +:020ECD00000023 +:020ECE00000022 +:020ECF00000021 +:020ED000000020 +:020ED10000001F +:020ED20000001E +:020ED30000001D +:020ED40000001C +:020ED50000001B +:020ED60000001A +:020ED700000019 +:020ED800000018 +:020ED900000017 +:020EDA00000016 +:020EDB00000015 +:020EDC00000014 +:020EDD00000013 +:020EDE00000012 +:020EDF00000011 +:020EE000000010 +:020EE10000000F +:020EE20000000E +:020EE30000000D +:020EE40000000C +:020EE50000000B +:020EE60000000A +:020EE700000009 +:020EE800000008 +:020EE900000007 +:020EEA00000006 +:020EEB00000005 +:020EEC00000004 +:020EED00000003 +:020EEE00000002 +:020EEF00000001 +:020EF000000000 +:020EF1000000FF +:020EF2000000FE +:020EF3000000FD +:020EF4000000FC +:020EF5000000FB +:020EF6000000FA +:020EF7000000F9 +:020EF8000000F8 +:020EF9000000F7 +:020EFA000000F6 +:020EFB000000F5 +:020EFC000000F4 +:020EFD000000F3 +:020EFE000000F2 +:020EFF000000F1 +:020F00000000EF +:020F01000000EE +:020F02000000ED +:020F03000000EC +:020F04000000EB +:020F05000000EA +:020F06000000E9 +:020F07000000E8 +:020F08000000E7 +:020F09000000E6 +:020F0A000000E5 +:020F0B000000E4 +:020F0C000000E3 +:020F0D000000E2 +:020F0E000000E1 +:020F0F000000E0 +:020F10000000DF +:020F11000000DE +:020F12000000DD +:020F13000000DC +:020F14000000DB +:020F15000000DA +:020F16000000D9 +:020F17000000D8 +:020F18000000D7 +:020F19000000D6 +:020F1A000000D5 +:020F1B000000D4 +:020F1C000000D3 +:020F1D000000D2 +:020F1E000000D1 +:020F1F000000D0 +:020F20000000CF +:020F21000000CE +:020F22000000CD +:020F23000000CC +:020F24000000CB +:020F25000000CA +:020F26000000C9 +:020F27000000C8 +:020F28000000C7 +:020F29000000C6 +:020F2A000000C5 +:020F2B000000C4 +:020F2C000000C3 +:020F2D000000C2 +:020F2E000000C1 +:020F2F000000C0 +:020F30000000BF +:020F31000000BE +:020F32000000BD +:020F33000000BC +:020F34000000BB +:020F35000000BA +:020F36000000B9 +:020F37000000B8 +:020F38000000B7 +:020F39000000B6 +:020F3A000000B5 +:020F3B000000B4 +:020F3C000000B3 +:020F3D000000B2 +:020F3E000000B1 +:020F3F000000B0 +:020F40000000AF +:020F41000000AE +:020F42000000AD +:020F43000000AC +:020F44000000AB +:020F45000000AA +:020F46000000A9 +:020F47000000A8 +:020F48000000A7 +:020F49000000A6 +:020F4A000000A5 +:020F4B000000A4 +:020F4C000000A3 +:020F4D000000A2 +:020F4E000000A1 +:020F4F000000A0 +:020F500000009F +:020F510000009E +:020F520000009D +:020F530000009C +:020F540000009B +:020F550000009A +:020F5600000099 +:020F5700000098 +:020F5800000097 +:020F5900000096 +:020F5A00000095 +:020F5B00000094 +:020F5C00000093 +:020F5D00000092 +:020F5E00000091 +:020F5F00000090 +:020F600000008F +:020F610000008E +:020F620000008D +:020F630000008C +:020F640000008B +:020F650000008A +:020F6600000089 +:020F6700000088 +:020F6800000087 +:020F6900000086 +:020F6A00000085 +:020F6B00000084 +:020F6C00000083 +:020F6D00000082 +:020F6E00000081 +:020F6F00000080 +:020F700000007F +:020F710000007E +:020F720000007D +:020F730000007C +:020F740000007B +:020F750000007A +:020F7600000079 +:020F7700000078 +:020F7800000077 +:020F7900000076 +:020F7A00000075 +:020F7B00000074 +:020F7C00000073 +:020F7D00000072 +:020F7E00000071 +:020F7F00000070 +:020F800000006F +:020F810000006E +:020F820000006D +:020F830000006C +:020F840000006B +:020F850000006A +:020F8600000069 +:020F8700000068 +:020F8800000067 +:020F8900000066 +:020F8A00000065 +:020F8B00000064 +:020F8C00000063 +:020F8D00000062 +:020F8E00000061 +:020F8F00000060 +:020F900000005F +:020F910000005E +:020F920000005D +:020F930000005C +:020F940000005B +:020F950000005A +:020F9600000059 +:020F9700000058 +:020F9800000057 +:020F9900000056 +:020F9A00000055 +:020F9B00000054 +:020F9C00000053 +:020F9D00000052 +:020F9E00000051 +:020F9F00000050 +:020FA00000004F +:020FA10000004E +:020FA20000004D +:020FA30000004C +:020FA40000004B +:020FA50000004A +:020FA600000049 +:020FA700000048 +:020FA800000047 +:020FA900000046 +:020FAA00000045 +:020FAB00000044 +:020FAC00000043 +:020FAD00000042 +:020FAE00000041 +:020FAF00000040 +:020FB00000003F +:020FB10000003E +:020FB20000003D +:020FB30000003C +:020FB40000003B +:020FB50000003A +:020FB600000039 +:020FB700000038 +:020FB800000037 +:020FB900000036 +:020FBA00000035 +:020FBB00000034 +:020FBC00000033 +:020FBD00000032 +:020FBE00000031 +:020FBF00000030 +:020FC00000002F +:020FC10000002E +:020FC20000002D +:020FC30000002C +:020FC40000002B +:020FC50000002A +:020FC600000029 +:020FC700000028 +:020FC800000027 +:020FC900000026 +:020FCA00000025 +:020FCB00000024 +:020FCC00000023 +:020FCD00000022 +:020FCE00000021 +:020FCF00000020 +:020FD00000001F +:020FD10000001E +:020FD20000001D +:020FD30000001C +:020FD40000001B +:020FD50000001A +:020FD600000019 +:020FD700000018 +:020FD800000017 +:020FD900000016 +:020FDA00000015 +:020FDB00000014 +:020FDC00000013 +:020FDD00000012 +:020FDE00000011 +:020FDF00000010 +:020FE00000000F +:020FE10000000E +:020FE20000000D +:020FE30000000C +:020FE40000000B +:020FE50000000A +:020FE600000009 +:020FE700000008 +:020FE800000007 +:020FE900000006 +:020FEA00000005 +:020FEB00000004 +:020FEC00000003 +:020FED00000002 +:020FEE00000001 +:020FEF00000000 +:020FF0000000FF +:020FF1000000FE +:020FF2000000FD +:020FF3000000FC +:020FF4000000FB +:020FF5000000FA +:020FF6000000F9 +:020FF7000000F8 +:020FF8000000F7 +:020FF9000000F6 +:020FFA000000F5 +:020FFB000000F4 +:020FFC000000F3 +:020FFD000000F2 +:020FFE000000F1 +:020FFF000000F0 +:021000000000EE +:021001000000ED +:021002000000EC +:021003000000EB +:021004000000EA +:021005000000E9 +:021006000000E8 +:021007000000E7 +:021008000000E6 +:021009000000E5 +:02100A000000E4 +:02100B000000E3 +:02100C000000E2 +:02100D000000E1 +:02100E000000E0 +:02100F000000DF +:021010000000DE +:021011000000DD +:021012000000DC +:021013000000DB +:021014000000DA +:021015000000D9 +:021016000000D8 +:021017000000D7 +:021018000000D6 +:021019000000D5 +:02101A000000D4 +:02101B000000D3 +:02101C000000D2 +:02101D000000D1 +:02101E000000D0 +:02101F000000CF +:021020000000CE +:021021000000CD +:021022000000CC +:021023000000CB +:021024000000CA +:021025000000C9 +:021026000000C8 +:021027000000C7 +:021028000000C6 +:021029000000C5 +:02102A000000C4 +:02102B000000C3 +:02102C000000C2 +:02102D000000C1 +:02102E000000C0 +:02102F000000BF +:021030000000BE +:021031000000BD +:021032000000BC +:021033000000BB +:021034000000BA +:021035000000B9 +:021036000000B8 +:021037000000B7 +:021038000000B6 +:021039000000B5 +:02103A000000B4 +:02103B000000B3 +:02103C000000B2 +:02103D000000B1 +:02103E000000B0 +:02103F000000AF +:021040000000AE +:021041000000AD +:021042000000AC +:021043000000AB +:021044000000AA +:021045000000A9 +:021046000000A8 +:021047000000A7 +:021048000000A6 +:021049000000A5 +:02104A000000A4 +:02104B000000A3 +:02104C000000A2 +:02104D000000A1 +:02104E000000A0 +:02104F0000009F +:0210500000009E +:0210510000009D +:0210520000009C +:0210530000009B +:0210540000009A +:02105500000099 +:02105600000098 +:02105700000097 +:02105800000096 +:02105900000095 +:02105A00000094 +:02105B00000093 +:02105C00000092 +:02105D00000091 +:02105E00000090 +:02105F0000008F +:0210600000008E +:0210610000008D +:0210620000008C +:0210630000008B +:0210640000008A +:02106500000089 +:02106600000088 +:02106700000087 +:02106800000086 +:02106900000085 +:02106A00000084 +:02106B00000083 +:02106C00000082 +:02106D00000081 +:02106E00000080 +:02106F0000007F +:0210700000007E +:0210710000007D +:0210720000007C +:0210730000007B +:0210740000007A +:02107500000079 +:02107600000078 +:02107700000077 +:02107800000076 +:02107900000075 +:02107A00000074 +:02107B00000073 +:02107C00000072 +:02107D00000071 +:02107E00000070 +:02107F0000006F +:0210800000006E +:0210810000006D +:0210820000006C +:0210830000006B +:0210840000006A +:02108500000069 +:02108600000068 +:02108700000067 +:02108800000066 +:02108900000065 +:02108A00000064 +:02108B00000063 +:02108C00000062 +:02108D00000061 +:02108E00000060 +:02108F0000005F +:0210900000005E +:0210910000005D +:0210920000005C +:0210930000005B +:0210940000005A +:02109500000059 +:02109600000058 +:02109700000057 +:02109800000056 +:02109900000055 +:02109A00000054 +:02109B00000053 +:02109C00000052 +:02109D00000051 +:02109E00000050 +:02109F0000004F +:0210A00000004E +:0210A10000004D +:0210A20000004C +:0210A30000004B +:0210A40000004A +:0210A500000049 +:0210A600000048 +:0210A700000047 +:0210A800000046 +:0210A900000045 +:0210AA00000044 +:0210AB00000043 +:0210AC00000042 +:0210AD00000041 +:0210AE00000040 +:0210AF0000003F +:0210B00000003E +:0210B10000003D +:0210B20000003C +:0210B30000003B +:0210B40000003A +:0210B500000039 +:0210B600000038 +:0210B700000037 +:0210B800000036 +:0210B900000035 +:0210BA00000034 +:0210BB00000033 +:0210BC00000032 +:0210BD00000031 +:0210BE00000030 +:0210BF0000002F +:0210C00000002E +:0210C10000002D +:0210C20000002C +:0210C30000002B +:0210C40000002A +:0210C500000029 +:0210C600000028 +:0210C700000027 +:0210C800000026 +:0210C900000025 +:0210CA00000024 +:0210CB00000023 +:0210CC00000022 +:0210CD00000021 +:0210CE00000020 +:0210CF0000001F +:0210D00000001E +:0210D10000001D +:0210D20000001C +:0210D30000001B +:0210D40000001A +:0210D500000019 +:0210D600000018 +:0210D700000017 +:0210D800000016 +:0210D900000015 +:0210DA00000014 +:0210DB00000013 +:0210DC00000012 +:0210DD00000011 +:0210DE00000010 +:0210DF0000000F +:0210E00000000E +:0210E10000000D +:0210E20000000C +:0210E30000000B +:0210E40000000A +:0210E500000009 +:0210E600000008 +:0210E700000007 +:0210E800000006 +:0210E900000005 +:0210EA00000004 +:0210EB00000003 +:0210EC00000002 +:0210ED00000001 +:0210EE00000000 +:0210EF000000FF +:0210F0000000FE +:0210F1000000FD +:0210F2000000FC +:0210F3000000FB +:0210F4000000FA +:0210F5000000F9 +:0210F6000000F8 +:0210F7000000F7 +:0210F8000000F6 +:0210F9000000F5 +:0210FA000000F4 +:0210FB000000F3 +:0210FC000000F2 +:0210FD000000F1 +:0210FE000000F0 +:0210FF000000EF +:021100000000ED +:021101000000EC +:021102000000EB +:021103000000EA +:021104000000E9 +:021105000000E8 +:021106000000E7 +:021107000000E6 +:021108000000E5 +:021109000000E4 +:02110A000000E3 +:02110B000000E2 +:02110C000000E1 +:02110D000000E0 +:02110E000000DF +:02110F000000DE +:021110000000DD +:021111000000DC +:021112000000DB +:021113000000DA +:021114000000D9 +:021115000000D8 +:021116000000D7 +:021117000000D6 +:021118000000D5 +:021119000000D4 +:02111A000000D3 +:02111B000000D2 +:02111C000000D1 +:02111D000000D0 +:02111E000000CF +:02111F000000CE +:021120000000CD +:021121000000CC +:021122000000CB +:021123000000CA +:021124000000C9 +:021125000000C8 +:021126000000C7 +:021127000000C6 +:021128000000C5 +:021129000000C4 +:02112A000000C3 +:02112B000000C2 +:02112C000000C1 +:02112D000000C0 +:02112E000000BF +:02112F000000BE +:021130000000BD +:021131000000BC +:021132000000BB +:021133000000BA +:021134000000B9 +:021135000000B8 +:021136000000B7 +:021137000000B6 +:021138000000B5 +:021139000000B4 +:02113A000000B3 +:02113B000000B2 +:02113C000000B1 +:02113D000000B0 +:02113E000000AF +:02113F000000AE +:021140000000AD +:021141000000AC +:021142000000AB +:021143000000AA +:021144000000A9 +:021145000000A8 +:021146000000A7 +:021147000000A6 +:021148000000A5 +:021149000000A4 +:02114A000000A3 +:02114B000000A2 +:02114C000000A1 +:02114D000000A0 +:02114E0000009F +:02114F0000009E +:0211500000009D +:0211510000009C +:0211520000009B +:0211530000009A +:02115400000099 +:02115500000098 +:02115600000097 +:02115700000096 +:02115800000095 +:02115900000094 +:02115A00000093 +:02115B00000092 +:02115C00000091 +:02115D00000090 +:02115E0000008F +:02115F0000008E +:0211600000008D +:0211610000008C +:0211620000008B +:0211630000008A +:02116400000089 +:02116500000088 +:02116600000087 +:02116700000086 +:02116800000085 +:02116900000084 +:02116A00000083 +:02116B00000082 +:02116C00000081 +:02116D00000080 +:02116E0000007F +:02116F0000007E +:0211700000007D +:0211710000007C +:0211720000007B +:0211730000007A +:02117400000079 +:02117500000078 +:02117600000077 +:02117700000076 +:02117800000075 +:02117900000074 +:02117A00000073 +:02117B00000072 +:02117C00000071 +:02117D00000070 +:02117E0000006F +:02117F0000006E +:0211800000006D +:0211810000006C +:0211820000006B +:0211830000006A +:02118400000069 +:02118500000068 +:02118600000067 +:02118700000066 +:02118800000065 +:02118900000064 +:02118A00000063 +:02118B00000062 +:02118C00000061 +:02118D00000060 +:02118E0000005F +:02118F0000005E +:0211900000005D +:0211910000005C +:0211920000005B +:0211930000005A +:02119400000059 +:02119500000058 +:02119600000057 +:02119700000056 +:02119800000055 +:02119900000054 +:02119A00000053 +:02119B00000052 +:02119C00000051 +:02119D00000050 +:02119E0000004F +:02119F0000004E +:0211A00000004D +:0211A10000004C +:0211A20000004B +:0211A30000004A +:0211A400000049 +:0211A500000048 +:0211A600000047 +:0211A700000046 +:0211A800000045 +:0211A900000044 +:0211AA00000043 +:0211AB00000042 +:0211AC00000041 +:0211AD00000040 +:0211AE0000003F +:0211AF0000003E +:0211B00000003D +:0211B10000003C +:0211B20000003B +:0211B30000003A +:0211B400000039 +:0211B500000038 +:0211B600000037 +:0211B700000036 +:0211B800000035 +:0211B900000034 +:0211BA00000033 +:0211BB00000032 +:0211BC00000031 +:0211BD00000030 +:0211BE0000002F +:0211BF0000002E +:0211C00000002D +:0211C10000002C +:0211C20000002B +:0211C30000002A +:0211C400000029 +:0211C500000028 +:0211C600000027 +:0211C700000026 +:0211C800000025 +:0211C900000024 +:0211CA00000023 +:0211CB00000022 +:0211CC00000021 +:0211CD00000020 +:0211CE0000001F +:0211CF0000001E +:0211D00000001D +:0211D10000001C +:0211D20000001B +:0211D30000001A +:0211D400000019 +:0211D500000018 +:0211D600000017 +:0211D700000016 +:0211D800000015 +:0211D900000014 +:0211DA00000013 +:0211DB00000012 +:0211DC00000011 +:0211DD00000010 +:0211DE0000000F +:0211DF0000000E +:0211E00000000D +:0211E10000000C +:0211E20000000B +:0211E30000000A +:0211E400000009 +:0211E500000008 +:0211E600000007 +:0211E700000006 +:0211E800000005 +:0211E900000004 +:0211EA00000003 +:0211EB00000002 +:0211EC00000001 +:0211ED00000000 +:0211EE000000FF +:0211EF000000FE +:0211F0000000FD +:0211F1000000FC +:0211F2000000FB +:0211F3000000FA +:0211F4000000F9 +:0211F5000000F8 +:0211F6000000F7 +:0211F7000000F6 +:0211F8000000F5 +:0211F9000000F4 +:0211FA000000F3 +:0211FB000000F2 +:0211FC000000F1 +:0211FD000000F0 +:0211FE000000EF +:0211FF000000EE +:021200000000EC +:021201000000EB +:021202000000EA +:021203000000E9 +:021204000000E8 +:021205000000E7 +:021206000000E6 +:021207000000E5 +:021208000000E4 +:021209000000E3 +:02120A000000E2 +:02120B000000E1 +:02120C000000E0 +:02120D000000DF +:02120E000000DE +:02120F000000DD +:021210000000DC +:021211000000DB +:021212000000DA +:021213000000D9 +:021214000000D8 +:021215000000D7 +:021216000000D6 +:021217000000D5 +:021218000000D4 +:021219000000D3 +:02121A000000D2 +:02121B000000D1 +:02121C000000D0 +:02121D000000CF +:02121E000000CE +:02121F000000CD +:021220000000CC +:021221000000CB +:021222000000CA +:021223000000C9 +:021224000000C8 +:021225000000C7 +:021226000000C6 +:021227000000C5 +:021228000000C4 +:021229000000C3 +:02122A000000C2 +:02122B000000C1 +:02122C000000C0 +:02122D000000BF +:02122E000000BE +:02122F000000BD +:021230000000BC +:021231000000BB +:021232000000BA +:021233000000B9 +:021234000000B8 +:021235000000B7 +:021236000000B6 +:021237000000B5 +:021238000000B4 +:021239000000B3 +:02123A000000B2 +:02123B000000B1 +:02123C000000B0 +:02123D000000AF +:02123E000000AE +:02123F000000AD +:021240000000AC +:021241000000AB +:021242000000AA +:021243000000A9 +:021244000000A8 +:021245000000A7 +:021246000000A6 +:021247000000A5 +:021248000000A4 +:021249000000A3 +:02124A000000A2 +:02124B000000A1 +:02124C000000A0 +:02124D0000009F +:02124E0000009E +:02124F0000009D +:0212500000009C +:0212510000009B +:0212520000009A +:02125300000099 +:02125400000098 +:02125500000097 +:02125600000096 +:02125700000095 +:02125800000094 +:02125900000093 +:02125A00000092 +:02125B00000091 +:02125C00000090 +:02125D0000008F +:02125E0000008E +:02125F0000008D +:0212600000008C +:0212610000008B +:0212620000008A +:02126300000089 +:02126400000088 +:02126500000087 +:02126600000086 +:02126700000085 +:02126800000084 +:02126900000083 +:02126A00000082 +:02126B00000081 +:02126C00000080 +:02126D0000007F +:02126E0000007E +:02126F0000007D +:0212700000007C +:0212710000007B +:0212720000007A +:02127300000079 +:02127400000078 +:02127500000077 +:02127600000076 +:02127700000075 +:02127800000074 +:02127900000073 +:02127A00000072 +:02127B00000071 +:02127C00000070 +:02127D0000006F +:02127E0000006E +:02127F0000006D +:0212800000006C +:0212810000006B +:0212820000006A +:02128300000069 +:02128400000068 +:02128500000067 +:02128600000066 +:02128700000065 +:02128800000064 +:02128900000063 +:02128A00000062 +:02128B00000061 +:02128C00000060 +:02128D0000005F +:02128E0000005E +:02128F0000005D +:0212900000005C +:0212910000005B +:0212920000005A +:02129300000059 +:02129400000058 +:02129500000057 +:02129600000056 +:02129700000055 +:02129800000054 +:02129900000053 +:02129A00000052 +:02129B00000051 +:02129C00000050 +:02129D0000004F +:02129E0000004E +:02129F0000004D +:0212A00000004C +:0212A10000004B +:0212A20000004A +:0212A300000049 +:0212A400000048 +:0212A500000047 +:0212A600000046 +:0212A700000045 +:0212A800000044 +:0212A900000043 +:0212AA00000042 +:0212AB00000041 +:0212AC00000040 +:0212AD0000003F +:0212AE0000003E +:0212AF0000003D +:0212B00000003C +:0212B10000003B +:0212B20000003A +:0212B300000039 +:0212B400000038 +:0212B500000037 +:0212B600000036 +:0212B700000035 +:0212B800000034 +:0212B900000033 +:0212BA00000032 +:0212BB00000031 +:0212BC00000030 +:0212BD0000002F +:0212BE0000002E +:0212BF0000002D +:0212C00000002C +:0212C10000002B +:0212C20000002A +:0212C300000029 +:0212C400000028 +:0212C500000027 +:0212C600000026 +:0212C700000025 +:0212C800000024 +:0212C900000023 +:0212CA00000022 +:0212CB00000021 +:0212CC00000020 +:0212CD0000001F +:0212CE0000001E +:0212CF0000001D +:0212D00000001C +:0212D10000001B +:0212D20000001A +:0212D300000019 +:0212D400000018 +:0212D500000017 +:0212D600000016 +:0212D700000015 +:0212D800000014 +:0212D900000013 +:0212DA00000012 +:0212DB00000011 +:0212DC00000010 +:0212DD0000000F +:0212DE0000000E +:0212DF0000000D +:0212E00000000C +:0212E10000000B +:0212E20000000A +:0212E300000009 +:0212E400000008 +:0212E500000007 +:0212E600000006 +:0212E700000005 +:0212E800000004 +:0212E900000003 +:0212EA00000002 +:0212EB00000001 +:0212EC00000000 +:0212ED000000FF +:0212EE000000FE +:0212EF000000FD +:0212F0000000FC +:0212F1000000FB +:0212F2000000FA +:0212F3000000F9 +:0212F4000000F8 +:0212F5000000F7 +:0212F6000000F6 +:0212F7000000F5 +:0212F8000000F4 +:0212F9000000F3 +:0212FA000000F2 +:0212FB000000F1 +:0212FC000000F0 +:0212FD000000EF +:0212FE000000EE +:0212FF000000ED +:021300000000EB +:021301000000EA +:021302000000E9 +:021303000000E8 +:021304000000E7 +:021305000000E6 +:021306000000E5 +:021307000000E4 +:021308000000E3 +:021309000000E2 +:02130A000000E1 +:02130B000000E0 +:02130C000000DF +:02130D000000DE +:02130E000000DD +:02130F000000DC +:021310000000DB +:021311000000DA +:021312000000D9 +:021313000000D8 +:021314000000D7 +:021315000000D6 +:021316000000D5 +:021317000000D4 +:021318000000D3 +:021319000000D2 +:02131A000000D1 +:02131B000000D0 +:02131C000000CF +:02131D000000CE +:02131E000000CD +:02131F000000CC +:021320000000CB +:021321000000CA +:021322000000C9 +:021323000000C8 +:021324000000C7 +:021325000000C6 +:021326000000C5 +:021327000000C4 +:021328000000C3 +:021329000000C2 +:02132A000000C1 +:02132B000000C0 +:02132C000000BF +:02132D000000BE +:02132E000000BD +:02132F000000BC +:021330000000BB +:021331000000BA +:021332000000B9 +:021333000000B8 +:021334000000B7 +:021335000000B6 +:021336000000B5 +:021337000000B4 +:021338000000B3 +:021339000000B2 +:02133A000000B1 +:02133B000000B0 +:02133C000000AF +:02133D000000AE +:02133E000000AD +:02133F000000AC +:021340000000AB +:021341000000AA +:021342000000A9 +:021343000000A8 +:021344000000A7 +:021345000000A6 +:021346000000A5 +:021347000000A4 +:021348000000A3 +:021349000000A2 +:02134A000000A1 +:02134B000000A0 +:02134C0000009F +:02134D0000009E +:02134E0000009D +:02134F0000009C +:0213500000009B +:0213510000009A +:02135200000099 +:02135300000098 +:02135400000097 +:02135500000096 +:02135600000095 +:02135700000094 +:02135800000093 +:02135900000092 +:02135A00000091 +:02135B00000090 +:02135C0000008F +:02135D0000008E +:02135E0000008D +:02135F0000008C +:0213600000008B +:0213610000008A +:02136200000089 +:02136300000088 +:02136400000087 +:02136500000086 +:02136600000085 +:02136700000084 +:02136800000083 +:02136900000082 +:02136A00000081 +:02136B00000080 +:02136C0000007F +:02136D0000007E +:02136E0000007D +:02136F0000007C +:0213700000007B +:0213710000007A +:02137200000079 +:02137300000078 +:02137400000077 +:02137500000076 +:02137600000075 +:02137700000074 +:02137800000073 +:02137900000072 +:02137A00000071 +:02137B00000070 +:02137C0000006F +:02137D0000006E +:02137E0000006D +:02137F0000006C +:0213800000006B +:0213810000006A +:02138200000069 +:02138300000068 +:02138400000067 +:02138500000066 +:02138600000065 +:02138700000064 +:02138800000063 +:02138900000062 +:02138A00000061 +:02138B00000060 +:02138C0000005F +:02138D0000005E +:02138E0000005D +:02138F0000005C +:0213900000005B +:0213910000005A +:02139200000059 +:02139300000058 +:02139400000057 +:02139500000056 +:02139600000055 +:02139700000054 +:02139800000053 +:02139900000052 +:02139A00000051 +:02139B00000050 +:02139C0000004F +:02139D0000004E +:02139E0000004D +:02139F0000004C +:0213A00000004B +:0213A10000004A +:0213A200000049 +:0213A300000048 +:0213A400000047 +:0213A500000046 +:0213A600000045 +:0213A700000044 +:0213A800000043 +:0213A900000042 +:0213AA00000041 +:0213AB00000040 +:0213AC0000003F +:0213AD0000003E +:0213AE0000003D +:0213AF0000003C +:0213B00000003B +:0213B10000003A +:0213B200000039 +:0213B300000038 +:0213B400000037 +:0213B500000036 +:0213B600000035 +:0213B700000034 +:0213B800000033 +:0213B900000032 +:0213BA00000031 +:0213BB00000030 +:0213BC0000002F +:0213BD0000002E +:0213BE0000002D +:0213BF0000002C +:0213C00000002B +:0213C10000002A +:0213C200000029 +:0213C300000028 +:0213C400000027 +:0213C500000026 +:0213C600000025 +:0213C700000024 +:0213C800000023 +:0213C900000022 +:0213CA00000021 +:0213CB00000020 +:0213CC0000001F +:0213CD0000001E +:0213CE0000001D +:0213CF0000001C +:0213D00000001B +:0213D10000001A +:0213D200000019 +:0213D300000018 +:0213D400000017 +:0213D500000016 +:0213D600000015 +:0213D700000014 +:0213D800000013 +:0213D900000012 +:0213DA00000011 +:0213DB00000010 +:0213DC0000000F +:0213DD0000000E +:0213DE0000000D +:0213DF0000000C +:0213E00000000B +:0213E10000000A +:0213E200000009 +:0213E300000008 +:0213E400000007 +:0213E500000006 +:0213E600000005 +:0213E700000004 +:0213E800000003 +:0213E900000002 +:0213EA00000001 +:0213EB00000000 +:0213EC000000FF +:0213ED000000FE +:0213EE000000FD +:0213EF000000FC +:0213F0000000FB +:0213F1000000FA +:0213F2000000F9 +:0213F3000000F8 +:0213F4000000F7 +:0213F5000000F6 +:0213F6000000F5 +:0213F7000000F4 +:0213F8000000F3 +:0213F9000000F2 +:0213FA000000F1 +:0213FB000000F0 +:0213FC000000EF +:0213FD000000EE +:0213FE000000ED +:0213FF000000EC +:021400000000EA +:021401000000E9 +:021402000000E8 +:021403000000E7 +:021404000000E6 +:021405000000E5 +:021406000000E4 +:021407000000E3 +:021408000000E2 +:021409000000E1 +:02140A000000E0 +:02140B000000DF +:02140C000000DE +:02140D000000DD +:02140E000000DC +:02140F000000DB +:021410000000DA +:021411000000D9 +:021412000000D8 +:021413000000D7 +:021414000000D6 +:021415000000D5 +:021416000000D4 +:021417000000D3 +:021418000000D2 +:021419000000D1 +:02141A000000D0 +:02141B000000CF +:02141C000000CE +:02141D000000CD +:02141E000000CC +:02141F000000CB +:021420000000CA +:021421000000C9 +:021422000000C8 +:021423000000C7 +:021424000000C6 +:021425000000C5 +:021426000000C4 +:021427000000C3 +:021428000000C2 +:021429000000C1 +:02142A000000C0 +:02142B000000BF +:02142C000000BE +:02142D000000BD +:02142E000000BC +:02142F000000BB +:021430000000BA +:021431000000B9 +:021432000000B8 +:021433000000B7 +:021434000000B6 +:021435000000B5 +:021436000000B4 +:021437000000B3 +:021438000000B2 +:021439000000B1 +:02143A000000B0 +:02143B000000AF +:02143C000000AE +:02143D000000AD +:02143E000000AC +:02143F000000AB +:021440000000AA +:021441000000A9 +:021442000000A8 +:021443000000A7 +:021444000000A6 +:021445000000A5 +:021446000000A4 +:021447000000A3 +:021448000000A2 +:021449000000A1 +:02144A000000A0 +:02144B0000009F +:02144C0000009E +:02144D0000009D +:02144E0000009C +:02144F0000009B +:0214500000009A +:02145100000099 +:02145200000098 +:02145300000097 +:02145400000096 +:02145500000095 +:02145600000094 +:02145700000093 +:02145800000092 +:02145900000091 +:02145A00000090 +:02145B0000008F +:02145C0000008E +:02145D0000008D +:02145E0000008C +:02145F0000008B +:0214600000008A +:02146100000089 +:02146200000088 +:02146300000087 +:02146400000086 +:02146500000085 +:02146600000084 +:02146700000083 +:02146800000082 +:02146900000081 +:02146A00000080 +:02146B0000007F +:02146C0000007E +:02146D0000007D +:02146E0000007C +:02146F0000007B +:0214700000007A +:02147100000079 +:02147200000078 +:02147300000077 +:02147400000076 +:02147500000075 +:02147600000074 +:02147700000073 +:02147800000072 +:02147900000071 +:02147A00000070 +:02147B0000006F +:02147C0000006E +:02147D0000006D +:02147E0000006C +:02147F0000006B +:0214800000006A +:02148100000069 +:02148200000068 +:02148300000067 +:02148400000066 +:02148500000065 +:02148600000064 +:02148700000063 +:02148800000062 +:02148900000061 +:02148A00000060 +:02148B0000005F +:02148C0000005E +:02148D0000005D +:02148E0000005C +:02148F0000005B +:0214900000005A +:02149100000059 +:02149200000058 +:02149300000057 +:02149400000056 +:02149500000055 +:02149600000054 +:02149700000053 +:02149800000052 +:02149900000051 +:02149A00000050 +:02149B0000004F +:02149C0000004E +:02149D0000004D +:02149E0000004C +:02149F0000004B +:0214A00000004A +:0214A100000049 +:0214A200000048 +:0214A300000047 +:0214A400000046 +:0214A500000045 +:0214A600000044 +:0214A700000043 +:0214A800000042 +:0214A900000041 +:0214AA00000040 +:0214AB0000003F +:0214AC0000003E +:0214AD0000003D +:0214AE0000003C +:0214AF0000003B +:0214B00000003A +:0214B100000039 +:0214B200000038 +:0214B300000037 +:0214B400000036 +:0214B500000035 +:0214B600000034 +:0214B700000033 +:0214B800000032 +:0214B900000031 +:0214BA00000030 +:0214BB0000002F +:0214BC0000002E +:0214BD0000002D +:0214BE0000002C +:0214BF0000002B +:0214C00000002A +:0214C100000029 +:0214C200000028 +:0214C300000027 +:0214C400000026 +:0214C500000025 +:0214C600000024 +:0214C700000023 +:0214C800000022 +:0214C900000021 +:0214CA00000020 +:0214CB0000001F +:0214CC0000001E +:0214CD0000001D +:0214CE0000001C +:0214CF0000001B +:0214D00000001A +:0214D100000019 +:0214D200000018 +:0214D300000017 +:0214D400000016 +:0214D500000015 +:0214D600000014 +:0214D700000013 +:0214D800000012 +:0214D900000011 +:0214DA00000010 +:0214DB0000000F +:0214DC0000000E +:0214DD0000000D +:0214DE0000000C +:0214DF0000000B +:0214E00000000A +:0214E100000009 +:0214E200000008 +:0214E300000007 +:0214E400000006 +:0214E500000005 +:0214E600000004 +:0214E700000003 +:0214E800000002 +:0214E900000001 +:0214EA00000000 +:0214EB000000FF +:0214EC000000FE +:0214ED000000FD +:0214EE000000FC +:0214EF000000FB +:0214F0000000FA +:0214F1000000F9 +:0214F2000000F8 +:0214F3000000F7 +:0214F4000000F6 +:0214F5000000F5 +:0214F6000000F4 +:0214F7000000F3 +:0214F8000000F2 +:0214F9000000F1 +:0214FA000000F0 +:0214FB000000EF +:0214FC000000EE +:0214FD000000ED +:0214FE000000EC +:0214FF000000EB +:021500000000E9 +:021501000000E8 +:021502000000E7 +:021503000000E6 +:021504000000E5 +:021505000000E4 +:021506000000E3 +:021507000000E2 +:021508000000E1 +:021509000000E0 +:02150A000000DF +:02150B000000DE +:02150C000000DD +:02150D000000DC +:02150E000000DB +:02150F000000DA +:021510000000D9 +:021511000000D8 +:021512000000D7 +:021513000000D6 +:021514000000D5 +:021515000000D4 +:021516000000D3 +:021517000000D2 +:021518000000D1 +:021519000000D0 +:02151A000000CF +:02151B000000CE +:02151C000000CD +:02151D000000CC +:02151E000000CB +:02151F000000CA +:021520000000C9 +:021521000000C8 +:021522000000C7 +:021523000000C6 +:021524000000C5 +:021525000000C4 +:021526000000C3 +:021527000000C2 +:021528000000C1 +:021529000000C0 +:02152A000000BF +:02152B000000BE +:02152C000000BD +:02152D000000BC +:02152E000000BB +:02152F000000BA +:021530000000B9 +:021531000000B8 +:021532000000B7 +:021533000000B6 +:021534000000B5 +:021535000000B4 +:021536000000B3 +:021537000000B2 +:021538000000B1 +:021539000000B0 +:02153A000000AF +:02153B000000AE +:02153C000000AD +:02153D000000AC +:02153E000000AB +:02153F000000AA +:021540000000A9 +:021541000000A8 +:021542000000A7 +:021543000000A6 +:021544000000A5 +:021545000000A4 +:021546000000A3 +:021547000000A2 +:021548000000A1 +:021549000000A0 +:02154A0000009F +:02154B0000009E +:02154C0000009D +:02154D0000009C +:02154E0000009B +:02154F0000009A +:02155000000099 +:02155100000098 +:02155200000097 +:02155300000096 +:02155400000095 +:02155500000094 +:02155600000093 +:02155700000092 +:02155800000091 +:02155900000090 +:02155A0000008F +:02155B0000008E +:02155C0000008D +:02155D0000008C +:02155E0000008B +:02155F0000008A +:02156000000089 +:02156100000088 +:02156200000087 +:02156300000086 +:02156400000085 +:02156500000084 +:02156600000083 +:02156700000082 +:02156800000081 +:02156900000080 +:02156A0000007F +:02156B0000007E +:02156C0000007D +:02156D0000007C +:02156E0000007B +:02156F0000007A +:02157000000079 +:02157100000078 +:02157200000077 +:02157300000076 +:02157400000075 +:02157500000074 +:02157600000073 +:02157700000072 +:02157800000071 +:02157900000070 +:02157A0000006F +:02157B0000006E +:02157C0000006D +:02157D0000006C +:02157E0000006B +:02157F0000006A +:02158000000069 +:02158100000068 +:02158200000067 +:02158300000066 +:02158400000065 +:02158500000064 +:02158600000063 +:02158700000062 +:02158800000061 +:02158900000060 +:02158A0000005F +:02158B0000005E +:02158C0000005D +:02158D0000005C +:02158E0000005B +:02158F0000005A +:02159000000059 +:02159100000058 +:02159200000057 +:02159300000056 +:02159400000055 +:02159500000054 +:02159600000053 +:02159700000052 +:02159800000051 +:02159900000050 +:02159A0000004F +:02159B0000004E +:02159C0000004D +:02159D0000004C +:02159E0000004B +:02159F0000004A +:0215A000000049 +:0215A100000048 +:0215A200000047 +:0215A300000046 +:0215A400000045 +:0215A500000044 +:0215A600000043 +:0215A700000042 +:0215A800000041 +:0215A900000040 +:0215AA0000003F +:0215AB0000003E +:0215AC0000003D +:0215AD0000003C +:0215AE0000003B +:0215AF0000003A +:0215B000000039 +:0215B100000038 +:0215B200000037 +:0215B300000036 +:0215B400000035 +:0215B500000034 +:0215B600000033 +:0215B700000032 +:0215B800000031 +:0215B900000030 +:0215BA0000002F +:0215BB0000002E +:0215BC0000002D +:0215BD0000002C +:0215BE0000002B +:0215BF0000002A +:0215C000000029 +:0215C100000028 +:0215C200000027 +:0215C300000026 +:0215C400000025 +:0215C500000024 +:0215C600000023 +:0215C700000022 +:0215C800000021 +:0215C900000020 +:0215CA0000001F +:0215CB0000001E +:0215CC0000001D +:0215CD0000001C +:0215CE0000001B +:0215CF0000001A +:0215D000000019 +:0215D100000018 +:0215D200000017 +:0215D300000016 +:0215D400000015 +:0215D500000014 +:0215D600000013 +:0215D700000012 +:0215D800000011 +:0215D900000010 +:0215DA0000000F +:0215DB0000000E +:0215DC0000000D +:0215DD0000000C +:0215DE0000000B +:0215DF0000000A +:0215E000000009 +:0215E100000008 +:0215E200000007 +:0215E300000006 +:0215E400000005 +:0215E500000004 +:0215E600000003 +:0215E700000002 +:0215E800000001 +:0215E900000000 +:0215EA000000FF +:0215EB000000FE +:0215EC000000FD +:0215ED000000FC +:0215EE000000FB +:0215EF000000FA +:0215F0000000F9 +:0215F1000000F8 +:0215F2000000F7 +:0215F3000000F6 +:0215F4000000F5 +:0215F5000000F4 +:0215F6000000F3 +:0215F7000000F2 +:0215F8000000F1 +:0215F9000000F0 +:0215FA000000EF +:0215FB000000EE +:0215FC000000ED +:0215FD000000EC +:0215FE000000EB +:0215FF000000EA +:021600000000E8 +:021601000000E7 +:021602000000E6 +:021603000000E5 +:021604000000E4 +:021605000000E3 +:021606000000E2 +:021607000000E1 +:021608000000E0 +:021609000000DF +:02160A000000DE +:02160B000000DD +:02160C000000DC +:02160D000000DB +:02160E000000DA +:02160F000000D9 +:021610000000D8 +:021611000000D7 +:021612000000D6 +:021613000000D5 +:021614000000D4 +:021615000000D3 +:021616000000D2 +:021617000000D1 +:021618000000D0 +:021619000000CF +:02161A000000CE +:02161B000000CD +:02161C000000CC +:02161D000000CB +:02161E000000CA +:02161F000000C9 +:021620000000C8 +:021621000000C7 +:021622000000C6 +:021623000000C5 +:021624000000C4 +:021625000000C3 +:021626000000C2 +:021627000000C1 +:021628000000C0 +:021629000000BF +:02162A000000BE +:02162B000000BD +:02162C000000BC +:02162D000000BB +:02162E000000BA +:02162F000000B9 +:021630000000B8 +:021631000000B7 +:021632000000B6 +:021633000000B5 +:021634000000B4 +:021635000000B3 +:021636000000B2 +:021637000000B1 +:021638000000B0 +:021639000000AF +:02163A000000AE +:02163B000000AD +:02163C000000AC +:02163D000000AB +:02163E000000AA +:02163F000000A9 +:021640000000A8 +:021641000000A7 +:021642000000A6 +:021643000000A5 +:021644000000A4 +:021645000000A3 +:021646000000A2 +:021647000000A1 +:021648000000A0 +:0216490000009F +:02164A0000009E +:02164B0000009D +:02164C0000009C +:02164D0000009B +:02164E0000009A +:02164F00000099 +:02165000000098 +:02165100000097 +:02165200000096 +:02165300000095 +:02165400000094 +:02165500000093 +:02165600000092 +:02165700000091 +:02165800000090 +:0216590000008F +:02165A0000008E +:02165B0000008D +:02165C0000008C +:02165D0000008B +:02165E0000008A +:02165F00000089 +:02166000000088 +:02166100000087 +:02166200000086 +:02166300000085 +:02166400000084 +:02166500000083 +:02166600000082 +:02166700000081 +:02166800000080 +:0216690000007F +:02166A0000007E +:02166B0000007D +:02166C0000007C +:02166D0000007B +:02166E0000007A +:02166F00000079 +:02167000000078 +:02167100000077 +:02167200000076 +:02167300000075 +:02167400000074 +:02167500000073 +:02167600000072 +:02167700000071 +:02167800000070 +:0216790000006F +:02167A0000006E +:02167B0000006D +:02167C0000006C +:02167D0000006B +:02167E0000006A +:02167F00000069 +:02168000000068 +:02168100000067 +:02168200000066 +:02168300000065 +:02168400000064 +:02168500000063 +:02168600000062 +:02168700000061 +:02168800000060 +:0216890000005F +:02168A0000005E +:02168B0000005D +:02168C0000005C +:02168D0000005B +:02168E0000005A +:02168F00000059 +:02169000000058 +:02169100000057 +:02169200000056 +:02169300000055 +:02169400000054 +:02169500000053 +:02169600000052 +:02169700000051 +:02169800000050 +:0216990000004F +:02169A0000004E +:02169B0000004D +:02169C0000004C +:02169D0000004B +:02169E0000004A +:02169F00000049 +:0216A000000048 +:0216A100000047 +:0216A200000046 +:0216A300000045 +:0216A400000044 +:0216A500000043 +:0216A600000042 +:0216A700000041 +:0216A800000040 +:0216A90000003F +:0216AA0000003E +:0216AB0000003D +:0216AC0000003C +:0216AD0000003B +:0216AE0000003A +:0216AF00000039 +:0216B000000038 +:0216B100000037 +:0216B200000036 +:0216B300000035 +:0216B400000034 +:0216B500000033 +:0216B600000032 +:0216B700000031 +:0216B800000030 +:0216B90000002F +:0216BA0000002E +:0216BB0000002D +:0216BC0000002C +:0216BD0000002B +:0216BE0000002A +:0216BF00000029 +:0216C000000028 +:0216C100000027 +:0216C200000026 +:0216C300000025 +:0216C400000024 +:0216C500000023 +:0216C600000022 +:0216C700000021 +:0216C800000020 +:0216C90000001F +:0216CA0000001E +:0216CB0000001D +:0216CC0000001C +:0216CD0000001B +:0216CE0000001A +:0216CF00000019 +:0216D000000018 +:0216D100000017 +:0216D200000016 +:0216D300000015 +:0216D400000014 +:0216D500000013 +:0216D600000012 +:0216D700000011 +:0216D800000010 +:0216D90000000F +:0216DA0000000E +:0216DB0000000D +:0216DC0000000C +:0216DD0000000B +:0216DE0000000A +:0216DF00000009 +:0216E000000008 +:0216E100000007 +:0216E200000006 +:0216E300000005 +:0216E400000004 +:0216E500000003 +:0216E600000002 +:0216E700000001 +:0216E800000000 +:0216E9000000FF +:0216EA000000FE +:0216EB000000FD +:0216EC000000FC +:0216ED000000FB +:0216EE000000FA +:0216EF000000F9 +:0216F0000000F8 +:0216F1000000F7 +:0216F2000000F6 +:0216F3000000F5 +:0216F4000000F4 +:0216F5000000F3 +:0216F6000000F2 +:0216F7000000F1 +:0216F8000000F0 +:0216F9000000EF +:0216FA000000EE +:0216FB000000ED +:0216FC000000EC +:0216FD000000EB +:0216FE000000EA +:0216FF000000E9 +:021700000000E7 +:021701000000E6 +:021702000000E5 +:021703000000E4 +:021704000000E3 +:021705000000E2 +:021706000000E1 +:021707000000E0 +:021708000000DF +:021709000000DE +:02170A000000DD +:02170B000000DC +:02170C000000DB +:02170D000000DA +:02170E000000D9 +:02170F000000D8 +:021710000000D7 +:021711000000D6 +:021712000000D5 +:021713000000D4 +:021714000000D3 +:021715000000D2 +:021716000000D1 +:021717000000D0 +:021718000000CF +:021719000000CE +:02171A000000CD +:02171B000000CC +:02171C000000CB +:02171D000000CA +:02171E000000C9 +:02171F000000C8 +:021720000000C7 +:021721000000C6 +:021722000000C5 +:021723000000C4 +:021724000000C3 +:021725000000C2 +:021726000000C1 +:021727000000C0 +:021728000000BF +:021729000000BE +:02172A000000BD +:02172B000000BC +:02172C000000BB +:02172D000000BA +:02172E000000B9 +:02172F000000B8 +:021730000000B7 +:021731000000B6 +:021732000000B5 +:021733000000B4 +:021734000000B3 +:021735000000B2 +:021736000000B1 +:021737000000B0 +:021738000000AF +:021739000000AE +:02173A000000AD +:02173B000000AC +:02173C000000AB +:02173D000000AA +:02173E000000A9 +:02173F000000A8 +:021740000000A7 +:021741000000A6 +:021742000000A5 +:021743000000A4 +:021744000000A3 +:021745000000A2 +:021746000000A1 +:021747000000A0 +:0217480000009F +:0217490000009E +:02174A0000009D +:02174B0000009C +:02174C0000009B +:02174D0000009A +:02174E00000099 +:02174F00000098 +:02175000000097 +:02175100000096 +:02175200000095 +:02175300000094 +:02175400000093 +:02175500000092 +:02175600000091 +:02175700000090 +:0217580000008F +:0217590000008E +:02175A0000008D +:02175B0000008C +:02175C0000008B +:02175D0000008A +:02175E00000089 +:02175F00000088 +:02176000000087 +:02176100000086 +:02176200000085 +:02176300000084 +:02176400000083 +:02176500000082 +:02176600000081 +:02176700000080 +:0217680000007F +:0217690000007E +:02176A0000007D +:02176B0000007C +:02176C0000007B +:02176D0000007A +:02176E00000079 +:02176F00000078 +:02177000000077 +:02177100000076 +:02177200000075 +:02177300000074 +:02177400000073 +:02177500000072 +:02177600000071 +:02177700000070 +:0217780000006F +:0217790000006E +:02177A0000006D +:02177B0000006C +:02177C0000006B +:02177D0000006A +:02177E00000069 +:02177F00000068 +:02178000000067 +:02178100000066 +:02178200000065 +:02178300000064 +:02178400000063 +:02178500000062 +:02178600000061 +:02178700000060 +:0217880000005F +:0217890000005E +:02178A0000005D +:02178B0000005C +:02178C0000005B +:02178D0000005A +:02178E00000059 +:02178F00000058 +:02179000000057 +:02179100000056 +:02179200000055 +:02179300000054 +:02179400000053 +:02179500000052 +:02179600000051 +:02179700000050 +:0217980000004F +:0217990000004E +:02179A0000004D +:02179B0000004C +:02179C0000004B +:02179D0000004A +:02179E00000049 +:02179F00000048 +:0217A000000047 +:0217A100000046 +:0217A200000045 +:0217A300000044 +:0217A400000043 +:0217A500000042 +:0217A600000041 +:0217A700000040 +:0217A80000003F +:0217A90000003E +:0217AA0000003D +:0217AB0000003C +:0217AC0000003B +:0217AD0000003A +:0217AE00000039 +:0217AF00000038 +:0217B000000037 +:0217B100000036 +:0217B200000035 +:0217B300000034 +:0217B400000033 +:0217B500000032 +:0217B600000031 +:0217B700000030 +:0217B80000002F +:0217B90000002E +:0217BA0000002D +:0217BB0000002C +:0217BC0000002B +:0217BD0000002A +:0217BE00000029 +:0217BF00000028 +:0217C000000027 +:0217C100000026 +:0217C200000025 +:0217C300000024 +:0217C400000023 +:0217C500000022 +:0217C600000021 +:0217C700000020 +:0217C80000001F +:0217C90000001E +:0217CA0000001D +:0217CB0000001C +:0217CC0000001B +:0217CD0000001A +:0217CE00000019 +:0217CF00000018 +:0217D000000017 +:0217D100000016 +:0217D200000015 +:0217D300000014 +:0217D400000013 +:0217D500000012 +:0217D600000011 +:0217D700000010 +:0217D80000000F +:0217D90000000E +:0217DA0000000D +:0217DB0000000C +:0217DC0000000B +:0217DD0000000A +:0217DE00000009 +:0217DF00000008 +:0217E000000007 +:0217E100000006 +:0217E200000005 +:0217E300000004 +:0217E400000003 +:0217E500000002 +:0217E600000001 +:0217E700000000 +:0217E8000000FF +:0217E9000000FE +:0217EA000000FD +:0217EB000000FC +:0217EC000000FB +:0217ED000000FA +:0217EE000000F9 +:0217EF000000F8 +:0217F0000000F7 +:0217F1000000F6 +:0217F2000000F5 +:0217F3000000F4 +:0217F4000000F3 +:0217F5000000F2 +:0217F6000000F1 +:0217F7000000F0 +:0217F8000000EF +:0217F9000000EE +:0217FA000000ED +:0217FB000000EC +:0217FC000000EB +:0217FD000000EA +:0217FE000000E9 +:0217FF000000E8 +:021800000000E6 +:021801000000E5 +:021802000000E4 +:021803000000E3 +:021804000000E2 +:021805000000E1 +:021806000000E0 +:021807000000DF +:021808000000DE +:021809000000DD +:02180A000000DC +:02180B000000DB +:02180C000000DA +:02180D000000D9 +:02180E000000D8 +:02180F000000D7 +:021810000000D6 +:021811000000D5 +:021812000000D4 +:021813000000D3 +:021814000000D2 +:021815000000D1 +:021816000000D0 +:021817000000CF +:021818000000CE +:021819000000CD +:02181A000000CC +:02181B000000CB +:02181C000000CA +:02181D000000C9 +:02181E000000C8 +:02181F000000C7 +:021820000000C6 +:021821000000C5 +:021822000000C4 +:021823000000C3 +:021824000000C2 +:021825000000C1 +:021826000000C0 +:021827000000BF +:021828000000BE +:021829000000BD +:02182A000000BC +:02182B000000BB +:02182C000000BA +:02182D000000B9 +:02182E000000B8 +:02182F000000B7 +:021830000000B6 +:021831000000B5 +:021832000000B4 +:021833000000B3 +:021834000000B2 +:021835000000B1 +:021836000000B0 +:021837000000AF +:021838000000AE +:021839000000AD +:02183A000000AC +:02183B000000AB +:02183C000000AA +:02183D000000A9 +:02183E000000A8 +:02183F000000A7 +:021840000000A6 +:021841000000A5 +:021842000000A4 +:021843000000A3 +:021844000000A2 +:021845000000A1 +:021846000000A0 +:0218470000009F +:0218480000009E +:0218490000009D +:02184A0000009C +:02184B0000009B +:02184C0000009A +:02184D00000099 +:02184E00000098 +:02184F00000097 +:02185000000096 +:02185100000095 +:02185200000094 +:02185300000093 +:02185400000092 +:02185500000091 +:02185600000090 +:0218570000008F +:0218580000008E +:0218590000008D +:02185A0000008C +:02185B0000008B +:02185C0000008A +:02185D00000089 +:02185E00000088 +:02185F00000087 +:02186000000086 +:02186100000085 +:02186200000084 +:02186300000083 +:02186400000082 +:02186500000081 +:02186600000080 +:0218670000007F +:0218680000007E +:0218690000007D +:02186A0000007C +:02186B0000007B +:02186C0000007A +:02186D00000079 +:02186E00000078 +:02186F00000077 +:02187000000076 +:02187100000075 +:02187200000074 +:02187300000073 +:02187400000072 +:02187500000071 +:02187600000070 +:0218770000006F +:0218780000006E +:0218790000006D +:02187A0000006C +:02187B0000006B +:02187C0000006A +:02187D00000069 +:02187E00000068 +:02187F00000067 +:02188000000066 +:02188100000065 +:02188200000064 +:02188300000063 +:02188400000062 +:02188500000061 +:02188600000060 +:0218870000005F +:0218880000005E +:0218890000005D +:02188A0000005C +:02188B0000005B +:02188C0000005A +:02188D00000059 +:02188E00000058 +:02188F00000057 +:02189000000056 +:02189100000055 +:02189200000054 +:02189300000053 +:02189400000052 +:02189500000051 +:02189600000050 +:0218970000004F +:0218980000004E +:0218990000004D +:02189A0000004C +:02189B0000004B +:02189C0000004A +:02189D00000049 +:02189E00000048 +:02189F00000047 +:0218A000000046 +:0218A100000045 +:0218A200000044 +:0218A300000043 +:0218A400000042 +:0218A500000041 +:0218A600000040 +:0218A70000003F +:0218A80000003E +:0218A90000003D +:0218AA0000003C +:0218AB0000003B +:0218AC0000003A +:0218AD00000039 +:0218AE00000038 +:0218AF00000037 +:0218B000000036 +:0218B100000035 +:0218B200000034 +:0218B300000033 +:0218B400000032 +:0218B500000031 +:0218B600000030 +:0218B70000002F +:0218B80000002E +:0218B90000002D +:0218BA0000002C +:0218BB0000002B +:0218BC0000002A +:0218BD00000029 +:0218BE00000028 +:0218BF00000027 +:0218C000000026 +:0218C100000025 +:0218C200000024 +:0218C300000023 +:0218C400000022 +:0218C500000021 +:0218C600000020 +:0218C70000001F +:0218C80000001E +:0218C90000001D +:0218CA0000001C +:0218CB0000001B +:0218CC0000001A +:0218CD00000019 +:0218CE00000018 +:0218CF00000017 +:0218D000000016 +:0218D100000015 +:0218D200000014 +:0218D300000013 +:0218D400000012 +:0218D500000011 +:0218D600000010 +:0218D70000000F +:0218D80000000E +:0218D90000000D +:0218DA0000000C +:0218DB0000000B +:0218DC0000000A +:0218DD00000009 +:0218DE00000008 +:0218DF00000007 +:0218E000000006 +:0218E100000005 +:0218E200000004 +:0218E300000003 +:0218E400000002 +:0218E500000001 +:0218E600000000 +:0218E7000000FF +:0218E8000000FE +:0218E9000000FD +:0218EA000000FC +:0218EB000000FB +:0218EC000000FA +:0218ED000000F9 +:0218EE000000F8 +:0218EF000000F7 +:0218F0000000F6 +:0218F1000000F5 +:0218F2000000F4 +:0218F3000000F3 +:0218F4000000F2 +:0218F5000000F1 +:0218F6000000F0 +:0218F7000000EF +:0218F8000000EE +:0218F9000000ED +:0218FA000000EC +:0218FB000000EB +:0218FC000000EA +:0218FD000000E9 +:0218FE000000E8 +:0218FF000000E7 +:021900000000E5 +:021901000000E4 +:021902000000E3 +:021903000000E2 +:021904000000E1 +:021905000000E0 +:021906000000DF +:021907000000DE +:021908000000DD +:021909000000DC +:02190A000000DB +:02190B000000DA +:02190C000000D9 +:02190D000000D8 +:02190E000000D7 +:02190F000000D6 +:021910000000D5 +:021911000000D4 +:021912000000D3 +:021913000000D2 +:021914000000D1 +:021915000000D0 +:021916000000CF +:021917000000CE +:021918000000CD +:021919000000CC +:02191A000000CB +:02191B000000CA +:02191C000000C9 +:02191D000000C8 +:02191E000000C7 +:02191F000000C6 +:021920000000C5 +:021921000000C4 +:021922000000C3 +:021923000000C2 +:021924000000C1 +:021925000000C0 +:021926000000BF +:021927000000BE +:021928000000BD +:021929000000BC +:02192A000000BB +:02192B000000BA +:02192C000000B9 +:02192D000000B8 +:02192E000000B7 +:02192F000000B6 +:021930000000B5 +:021931000000B4 +:021932000000B3 +:021933000000B2 +:021934000000B1 +:021935000000B0 +:021936000000AF +:021937000000AE +:021938000000AD +:021939000000AC +:02193A000000AB +:02193B000000AA +:02193C000000A9 +:02193D000000A8 +:02193E000000A7 +:02193F000000A6 +:021940000000A5 +:021941000000A4 +:021942000000A3 +:021943000000A2 +:021944000000A1 +:021945000000A0 +:0219460000009F +:0219470000009E +:0219480000009D +:0219490000009C +:02194A0000009B +:02194B0000009A +:02194C00000099 +:02194D00000098 +:02194E00000097 +:02194F00000096 +:02195000000095 +:02195100000094 +:02195200000093 +:02195300000092 +:02195400000091 +:02195500000090 +:0219560000008F +:0219570000008E +:0219580000008D +:0219590000008C +:02195A0000008B +:02195B0000008A +:02195C00000089 +:02195D00000088 +:02195E00000087 +:02195F00000086 +:02196000000085 +:02196100000084 +:02196200000083 +:02196300000082 +:02196400000081 +:02196500000080 +:0219660000007F +:0219670000007E +:0219680000007D +:0219690000007C +:02196A0000007B +:02196B0000007A +:02196C00000079 +:02196D00000078 +:02196E00000077 +:02196F00000076 +:02197000000075 +:02197100000074 +:02197200000073 +:02197300000072 +:02197400000071 +:02197500000070 +:0219760000006F +:0219770000006E +:0219780000006D +:0219790000006C +:02197A0000006B +:02197B0000006A +:02197C00000069 +:02197D00000068 +:02197E00000067 +:02197F00000066 +:02198000000065 +:02198100000064 +:02198200000063 +:02198300000062 +:02198400000061 +:02198500000060 +:0219860000005F +:0219870000005E +:0219880000005D +:0219890000005C +:02198A0000005B +:02198B0000005A +:02198C00000059 +:02198D00000058 +:02198E00000057 +:02198F00000056 +:02199000000055 +:02199100000054 +:02199200000053 +:02199300000052 +:02199400000051 +:02199500000050 +:0219960000004F +:0219970000004E +:0219980000004D +:0219990000004C +:02199A0000004B +:02199B0000004A +:02199C00000049 +:02199D00000048 +:02199E00000047 +:02199F00000046 +:0219A000000045 +:0219A100000044 +:0219A200000043 +:0219A300000042 +:0219A400000041 +:0219A500000040 +:0219A60000003F +:0219A70000003E +:0219A80000003D +:0219A90000003C +:0219AA0000003B +:0219AB0000003A +:0219AC00000039 +:0219AD00000038 +:0219AE00000037 +:0219AF00000036 +:0219B000000035 +:0219B100000034 +:0219B200000033 +:0219B300000032 +:0219B400000031 +:0219B500000030 +:0219B60000002F +:0219B70000002E +:0219B80000002D +:0219B90000002C +:0219BA0000002B +:0219BB0000002A +:0219BC00000029 +:0219BD00000028 +:0219BE00000027 +:0219BF00000026 +:0219C000000025 +:0219C100000024 +:0219C200000023 +:0219C300000022 +:0219C400000021 +:0219C500000020 +:0219C60000001F +:0219C70000001E +:0219C80000001D +:0219C90000001C +:0219CA0000001B +:0219CB0000001A +:0219CC00000019 +:0219CD00000018 +:0219CE00000017 +:0219CF00000016 +:0219D000000015 +:0219D100000014 +:0219D200000013 +:0219D300000012 +:0219D400000011 +:0219D500000010 +:0219D60000000F +:0219D70000000E +:0219D80000000D +:0219D90000000C +:0219DA0000000B +:0219DB0000000A +:0219DC00000009 +:0219DD00000008 +:0219DE00000007 +:0219DF00000006 +:0219E000000005 +:0219E100000004 +:0219E200000003 +:0219E300000002 +:0219E400000001 +:0219E500000000 +:0219E6000000FF +:0219E7000000FE +:0219E8000000FD +:0219E9000000FC +:0219EA000000FB +:0219EB000000FA +:0219EC000000F9 +:0219ED000000F8 +:0219EE000000F7 +:0219EF000000F6 +:0219F0000000F5 +:0219F1000000F4 +:0219F2000000F3 +:0219F3000000F2 +:0219F4000000F1 +:0219F5000000F0 +:0219F6000000EF +:0219F7000000EE +:0219F8000000ED +:0219F9000000EC +:0219FA000000EB +:0219FB000000EA +:0219FC000000E9 +:0219FD000000E8 +:0219FE000000E7 +:0219FF000000E6 +:021A00000000E4 +:021A01000000E3 +:021A02000000E2 +:021A03000000E1 +:021A04000000E0 +:021A05000000DF +:021A06000000DE +:021A07000000DD +:021A08000000DC +:021A09000000DB +:021A0A000000DA +:021A0B000000D9 +:021A0C000000D8 +:021A0D000000D7 +:021A0E000000D6 +:021A0F000000D5 +:021A10000000D4 +:021A11000000D3 +:021A12000000D2 +:021A13000000D1 +:021A14000000D0 +:021A15000000CF +:021A16000000CE +:021A17000000CD +:021A18000000CC +:021A19000000CB +:021A1A000000CA +:021A1B000000C9 +:021A1C000000C8 +:021A1D000000C7 +:021A1E000000C6 +:021A1F000000C5 +:021A20000000C4 +:021A21000000C3 +:021A22000000C2 +:021A23000000C1 +:021A24000000C0 +:021A25000000BF +:021A26000000BE +:021A27000000BD +:021A28000000BC +:021A29000000BB +:021A2A000000BA +:021A2B000000B9 +:021A2C000000B8 +:021A2D000000B7 +:021A2E000000B6 +:021A2F000000B5 +:021A30000000B4 +:021A31000000B3 +:021A32000000B2 +:021A33000000B1 +:021A34000000B0 +:021A35000000AF +:021A36000000AE +:021A37000000AD +:021A38000000AC +:021A39000000AB +:021A3A000000AA +:021A3B000000A9 +:021A3C000000A8 +:021A3D000000A7 +:021A3E000000A6 +:021A3F000000A5 +:021A40000000A4 +:021A41000000A3 +:021A42000000A2 +:021A43000000A1 +:021A44000000A0 +:021A450000009F +:021A460000009E +:021A470000009D +:021A480000009C +:021A490000009B +:021A4A0000009A +:021A4B00000099 +:021A4C00000098 +:021A4D00000097 +:021A4E00000096 +:021A4F00000095 +:021A5000000094 +:021A5100000093 +:021A5200000092 +:021A5300000091 +:021A5400000090 +:021A550000008F +:021A560000008E +:021A570000008D +:021A580000008C +:021A590000008B +:021A5A0000008A +:021A5B00000089 +:021A5C00000088 +:021A5D00000087 +:021A5E00000086 +:021A5F00000085 +:021A6000000084 +:021A6100000083 +:021A6200000082 +:021A6300000081 +:021A6400000080 +:021A650000007F +:021A660000007E +:021A670000007D +:021A680000007C +:021A690000007B +:021A6A0000007A +:021A6B00000079 +:021A6C00000078 +:021A6D00000077 +:021A6E00000076 +:021A6F00000075 +:021A7000000074 +:021A7100000073 +:021A7200000072 +:021A7300000071 +:021A7400000070 +:021A750000006F +:021A760000006E +:021A770000006D +:021A780000006C +:021A790000006B +:021A7A0000006A +:021A7B00000069 +:021A7C00000068 +:021A7D00000067 +:021A7E00000066 +:021A7F00000065 +:021A8000000064 +:021A8100000063 +:021A8200000062 +:021A8300000061 +:021A8400000060 +:021A850000005F +:021A860000005E +:021A870000005D +:021A880000005C +:021A890000005B +:021A8A0000005A +:021A8B00000059 +:021A8C00000058 +:021A8D00000057 +:021A8E00000056 +:021A8F00000055 +:021A9000000054 +:021A9100000053 +:021A9200000052 +:021A9300000051 +:021A9400000050 +:021A950000004F +:021A960000004E +:021A970000004D +:021A980000004C +:021A990000004B +:021A9A0000004A +:021A9B00000049 +:021A9C00000048 +:021A9D00000047 +:021A9E00000046 +:021A9F00000045 +:021AA000000044 +:021AA100000043 +:021AA200000042 +:021AA300000041 +:021AA400000040 +:021AA50000003F +:021AA60000003E +:021AA70000003D +:021AA80000003C +:021AA90000003B +:021AAA0000003A +:021AAB00000039 +:021AAC00000038 +:021AAD00000037 +:021AAE00000036 +:021AAF00000035 +:021AB000000034 +:021AB100000033 +:021AB200000032 +:021AB300000031 +:021AB400000030 +:021AB50000002F +:021AB60000002E +:021AB70000002D +:021AB80000002C +:021AB90000002B +:021ABA0000002A +:021ABB00000029 +:021ABC00000028 +:021ABD00000027 +:021ABE00000026 +:021ABF00000025 +:021AC000000024 +:021AC100000023 +:021AC200000022 +:021AC300000021 +:021AC400000020 +:021AC50000001F +:021AC60000001E +:021AC70000001D +:021AC80000001C +:021AC90000001B +:021ACA0000001A +:021ACB00000019 +:021ACC00000018 +:021ACD00000017 +:021ACE00000016 +:021ACF00000015 +:021AD000000014 +:021AD100000013 +:021AD200000012 +:021AD300000011 +:021AD400000010 +:021AD50000000F +:021AD60000000E +:021AD70000000D +:021AD80000000C +:021AD90000000B +:021ADA0000000A +:021ADB00000009 +:021ADC00000008 +:021ADD00000007 +:021ADE00000006 +:021ADF00000005 +:021AE000000004 +:021AE100000003 +:021AE200000002 +:021AE300000001 +:021AE400000000 +:021AE5000000FF +:021AE6000000FE +:021AE7000000FD +:021AE8000000FC +:021AE9000000FB +:021AEA000000FA +:021AEB000000F9 +:021AEC000000F8 +:021AED000000F7 +:021AEE000000F6 +:021AEF000000F5 +:021AF0000000F4 +:021AF1000000F3 +:021AF2000000F2 +:021AF3000000F1 +:021AF4000000F0 +:021AF5000000EF +:021AF6000000EE +:021AF7000000ED +:021AF8000000EC +:021AF9000000EB +:021AFA000000EA +:021AFB000000E9 +:021AFC000000E8 +:021AFD000000E7 +:021AFE000000E6 +:021AFF000000E5 +:021B00000000E3 +:021B01000000E2 +:021B02000000E1 +:021B03000000E0 +:021B04000000DF +:021B05000000DE +:021B06000000DD +:021B07000000DC +:021B08000000DB +:021B09000000DA +:021B0A000000D9 +:021B0B000000D8 +:021B0C000000D7 +:021B0D000000D6 +:021B0E000000D5 +:021B0F000000D4 +:021B10000000D3 +:021B11000000D2 +:021B12000000D1 +:021B13000000D0 +:021B14000000CF +:021B15000000CE +:021B16000000CD +:021B17000000CC +:021B18000000CB +:021B19000000CA +:021B1A000000C9 +:021B1B000000C8 +:021B1C000000C7 +:021B1D000000C6 +:021B1E000000C5 +:021B1F000000C4 +:021B20000000C3 +:021B21000000C2 +:021B22000000C1 +:021B23000000C0 +:021B24000000BF +:021B25000000BE +:021B26000000BD +:021B27000000BC +:021B28000000BB +:021B29000000BA +:021B2A000000B9 +:021B2B000000B8 +:021B2C000000B7 +:021B2D000000B6 +:021B2E000000B5 +:021B2F000000B4 +:021B30000000B3 +:021B31000000B2 +:021B32000000B1 +:021B33000000B0 +:021B34000000AF +:021B35000000AE +:021B36000000AD +:021B37000000AC +:021B38000000AB +:021B39000000AA +:021B3A000000A9 +:021B3B000000A8 +:021B3C000000A7 +:021B3D000000A6 +:021B3E000000A5 +:021B3F000000A4 +:021B40000000A3 +:021B41000000A2 +:021B42000000A1 +:021B43000000A0 +:021B440000009F +:021B450000009E +:021B460000009D +:021B470000009C +:021B480000009B +:021B490000009A +:021B4A00000099 +:021B4B00000098 +:021B4C00000097 +:021B4D00000096 +:021B4E00000095 +:021B4F00000094 +:021B5000000093 +:021B5100000092 +:021B5200000091 +:021B5300000090 +:021B540000008F +:021B550000008E +:021B560000008D +:021B570000008C +:021B580000008B +:021B590000008A +:021B5A00000089 +:021B5B00000088 +:021B5C00000087 +:021B5D00000086 +:021B5E00000085 +:021B5F00000084 +:021B6000000083 +:021B6100000082 +:021B6200000081 +:021B6300000080 +:021B640000007F +:021B650000007E +:021B660000007D +:021B670000007C +:021B680000007B +:021B690000007A +:021B6A00000079 +:021B6B00000078 +:021B6C00000077 +:021B6D00000076 +:021B6E00000075 +:021B6F00000074 +:021B7000000073 +:021B7100000072 +:021B7200000071 +:021B7300000070 +:021B740000006F +:021B750000006E +:021B760000006D +:021B770000006C +:021B780000006B +:021B790000006A +:021B7A00000069 +:021B7B00000068 +:021B7C00000067 +:021B7D00000066 +:021B7E00000065 +:021B7F00000064 +:021B8000000063 +:021B8100000062 +:021B8200000061 +:021B8300000060 +:021B840000005F +:021B850000005E +:021B860000005D +:021B870000005C +:021B880000005B +:021B890000005A +:021B8A00000059 +:021B8B00000058 +:021B8C00000057 +:021B8D00000056 +:021B8E00000055 +:021B8F00000054 +:021B9000000053 +:021B9100000052 +:021B9200000051 +:021B9300000050 +:021B940000004F +:021B950000004E +:021B960000004D +:021B970000004C +:021B980000004B +:021B990000004A +:021B9A00000049 +:021B9B00000048 +:021B9C00000047 +:021B9D00000046 +:021B9E00000045 +:021B9F00000044 +:021BA000000043 +:021BA100000042 +:021BA200000041 +:021BA300000040 +:021BA40000003F +:021BA50000003E +:021BA60000003D +:021BA70000003C +:021BA80000003B +:021BA90000003A +:021BAA00000039 +:021BAB00000038 +:021BAC00000037 +:021BAD00000036 +:021BAE00000035 +:021BAF00000034 +:021BB000000033 +:021BB100000032 +:021BB200000031 +:021BB300000030 +:021BB40000002F +:021BB50000002E +:021BB60000002D +:021BB70000002C +:021BB80000002B +:021BB90000002A +:021BBA00000029 +:021BBB00000028 +:021BBC00000027 +:021BBD00000026 +:021BBE00000025 +:021BBF00000024 +:021BC000000023 +:021BC100000022 +:021BC200000021 +:021BC300000020 +:021BC40000001F +:021BC50000001E +:021BC60000001D +:021BC70000001C +:021BC80000001B +:021BC90000001A +:021BCA00000019 +:021BCB00000018 +:021BCC00000017 +:021BCD00000016 +:021BCE00000015 +:021BCF00000014 +:021BD000000013 +:021BD100000012 +:021BD200000011 +:021BD300000010 +:021BD40000000F +:021BD50000000E +:021BD60000000D +:021BD70000000C +:021BD80000000B +:021BD90000000A +:021BDA00000009 +:021BDB00000008 +:021BDC00000007 +:021BDD00000006 +:021BDE00000005 +:021BDF00000004 +:021BE000000003 +:021BE100000002 +:021BE200000001 +:021BE300000000 +:021BE4000000FF +:021BE5000000FE +:021BE6000000FD +:021BE7000000FC +:021BE8000000FB +:021BE9000000FA +:021BEA000000F9 +:021BEB000000F8 +:021BEC000000F7 +:021BED000000F6 +:021BEE000000F5 +:021BEF000000F4 +:021BF0000000F3 +:021BF1000000F2 +:021BF2000000F1 +:021BF3000000F0 +:021BF4000000EF +:021BF5000000EE +:021BF6000000ED +:021BF7000000EC +:021BF8000000EB +:021BF9000000EA +:021BFA000000E9 +:021BFB000000E8 +:021BFC000000E7 +:021BFD000000E6 +:021BFE000000E5 +:021BFF000000E4 +:021C00000000E2 +:021C01000000E1 +:021C02000000E0 +:021C03000000DF +:021C04000000DE +:021C05000000DD +:021C06000000DC +:021C07000000DB +:021C08000000DA +:021C09000000D9 +:021C0A000000D8 +:021C0B000000D7 +:021C0C000000D6 +:021C0D000000D5 +:021C0E000000D4 +:021C0F000000D3 +:021C10000000D2 +:021C11000000D1 +:021C12000000D0 +:021C13000000CF +:021C14000000CE +:021C15000000CD +:021C16000000CC +:021C17000000CB +:021C18000000CA +:021C19000000C9 +:021C1A000000C8 +:021C1B000000C7 +:021C1C000000C6 +:021C1D000000C5 +:021C1E000000C4 +:021C1F000000C3 +:021C20000000C2 +:021C21000000C1 +:021C22000000C0 +:021C23000000BF +:021C24000000BE +:021C25000000BD +:021C26000000BC +:021C27000000BB +:021C28000000BA +:021C29000000B9 +:021C2A000000B8 +:021C2B000000B7 +:021C2C000000B6 +:021C2D000000B5 +:021C2E000000B4 +:021C2F000000B3 +:021C30000000B2 +:021C31000000B1 +:021C32000000B0 +:021C33000000AF +:021C34000000AE +:021C35000000AD +:021C36000000AC +:021C37000000AB +:021C38000000AA +:021C39000000A9 +:021C3A000000A8 +:021C3B000000A7 +:021C3C000000A6 +:021C3D000000A5 +:021C3E000000A4 +:021C3F000000A3 +:021C40000000A2 +:021C41000000A1 +:021C42000000A0 +:021C430000009F +:021C440000009E +:021C450000009D +:021C460000009C +:021C470000009B +:021C480000009A +:021C4900000099 +:021C4A00000098 +:021C4B00000097 +:021C4C00000096 +:021C4D00000095 +:021C4E00000094 +:021C4F00000093 +:021C5000000092 +:021C5100000091 +:021C5200000090 +:021C530000008F +:021C540000008E +:021C550000008D +:021C560000008C +:021C570000008B +:021C580000008A +:021C5900000089 +:021C5A00000088 +:021C5B00000087 +:021C5C00000086 +:021C5D00000085 +:021C5E00000084 +:021C5F00000083 +:021C6000000082 +:021C6100000081 +:021C6200000080 +:021C630000007F +:021C640000007E +:021C650000007D +:021C660000007C +:021C670000007B +:021C680000007A +:021C6900000079 +:021C6A00000078 +:021C6B00000077 +:021C6C00000076 +:021C6D00000075 +:021C6E00000074 +:021C6F00000073 +:021C7000000072 +:021C7100000071 +:021C7200000070 +:021C730000006F +:021C740000006E +:021C750000006D +:021C760000006C +:021C770000006B +:021C780000006A +:021C7900000069 +:021C7A00000068 +:021C7B00000067 +:021C7C00000066 +:021C7D00000065 +:021C7E00000064 +:021C7F00000063 +:021C8000000062 +:021C8100000061 +:021C8200000060 +:021C830000005F +:021C840000005E +:021C850000005D +:021C860000005C +:021C870000005B +:021C880000005A +:021C8900000059 +:021C8A00000058 +:021C8B00000057 +:021C8C00000056 +:021C8D00000055 +:021C8E00000054 +:021C8F00000053 +:021C9000000052 +:021C9100000051 +:021C9200000050 +:021C930000004F +:021C940000004E +:021C950000004D +:021C960000004C +:021C970000004B +:021C980000004A +:021C9900000049 +:021C9A00000048 +:021C9B00000047 +:021C9C00000046 +:021C9D00000045 +:021C9E00000044 +:021C9F00000043 +:021CA000000042 +:021CA100000041 +:021CA200000040 +:021CA30000003F +:021CA40000003E +:021CA50000003D +:021CA60000003C +:021CA70000003B +:021CA80000003A +:021CA900000039 +:021CAA00000038 +:021CAB00000037 +:021CAC00000036 +:021CAD00000035 +:021CAE00000034 +:021CAF00000033 +:021CB000000032 +:021CB100000031 +:021CB200000030 +:021CB30000002F +:021CB40000002E +:021CB50000002D +:021CB60000002C +:021CB70000002B +:021CB80000002A +:021CB900000029 +:021CBA00000028 +:021CBB00000027 +:021CBC00000026 +:021CBD00000025 +:021CBE00000024 +:021CBF00000023 +:021CC000000022 +:021CC100000021 +:021CC200000020 +:021CC30000001F +:021CC40000001E +:021CC50000001D +:021CC60000001C +:021CC70000001B +:021CC80000001A +:021CC900000019 +:021CCA00000018 +:021CCB00000017 +:021CCC00000016 +:021CCD00000015 +:021CCE00000014 +:021CCF00000013 +:021CD000000012 +:021CD100000011 +:021CD200000010 +:021CD30000000F +:021CD40000000E +:021CD50000000D +:021CD60000000C +:021CD70000000B +:021CD80000000A +:021CD900000009 +:021CDA00000008 +:021CDB00000007 +:021CDC00000006 +:021CDD00000005 +:021CDE00000004 +:021CDF00000003 +:021CE000000002 +:021CE100000001 +:021CE200000000 +:021CE3000000FF +:021CE4000000FE +:021CE5000000FD +:021CE6000000FC +:021CE7000000FB +:021CE8000000FA +:021CE9000000F9 +:021CEA000000F8 +:021CEB000000F7 +:021CEC000000F6 +:021CED000000F5 +:021CEE000000F4 +:021CEF000000F3 +:021CF0000000F2 +:021CF1000000F1 +:021CF2000000F0 +:021CF3000000EF +:021CF4000000EE +:021CF5000000ED +:021CF6000000EC +:021CF7000000EB +:021CF8000000EA +:021CF9000000E9 +:021CFA000000E8 +:021CFB000000E7 +:021CFC000000E6 +:021CFD000000E5 +:021CFE000000E4 +:021CFF000000E3 +:021D00000000E1 +:021D01000000E0 +:021D02000000DF +:021D03000000DE +:021D04000000DD +:021D05000000DC +:021D06000000DB +:021D07000000DA +:021D08000000D9 +:021D09000000D8 +:021D0A000000D7 +:021D0B000000D6 +:021D0C000000D5 +:021D0D000000D4 +:021D0E000000D3 +:021D0F000000D2 +:021D10000000D1 +:021D11000000D0 +:021D12000000CF +:021D13000000CE +:021D14000000CD +:021D15000000CC +:021D16000000CB +:021D17000000CA +:021D18000000C9 +:021D19000000C8 +:021D1A000000C7 +:021D1B000000C6 +:021D1C000000C5 +:021D1D000000C4 +:021D1E000000C3 +:021D1F000000C2 +:021D20000000C1 +:021D21000000C0 +:021D22000000BF +:021D23000000BE +:021D24000000BD +:021D25000000BC +:021D26000000BB +:021D27000000BA +:021D28000000B9 +:021D29000000B8 +:021D2A000000B7 +:021D2B000000B6 +:021D2C000000B5 +:021D2D000000B4 +:021D2E000000B3 +:021D2F000000B2 +:021D30000000B1 +:021D31000000B0 +:021D32000000AF +:021D33000000AE +:021D34000000AD +:021D35000000AC +:021D36000000AB +:021D37000000AA +:021D38000000A9 +:021D39000000A8 +:021D3A000000A7 +:021D3B000000A6 +:021D3C000000A5 +:021D3D000000A4 +:021D3E000000A3 +:021D3F000000A2 +:021D40000000A1 +:021D41000000A0 +:021D420000009F +:021D430000009E +:021D440000009D +:021D450000009C +:021D460000009B +:021D470000009A +:021D4800000099 +:021D4900000098 +:021D4A00000097 +:021D4B00000096 +:021D4C00000095 +:021D4D00000094 +:021D4E00000093 +:021D4F00000092 +:021D5000000091 +:021D5100000090 +:021D520000008F +:021D530000008E +:021D540000008D +:021D550000008C +:021D560000008B +:021D570000008A +:021D5800000089 +:021D5900000088 +:021D5A00000087 +:021D5B00000086 +:021D5C00000085 +:021D5D00000084 +:021D5E00000083 +:021D5F00000082 +:021D6000000081 +:021D6100000080 +:021D620000007F +:021D630000007E +:021D640000007D +:021D650000007C +:021D660000007B +:021D670000007A +:021D6800000079 +:021D6900000078 +:021D6A00000077 +:021D6B00000076 +:021D6C00000075 +:021D6D00000074 +:021D6E00000073 +:021D6F00000072 +:021D7000000071 +:021D7100000070 +:021D720000006F +:021D730000006E +:021D740000006D +:021D750000006C +:021D760000006B +:021D770000006A +:021D7800000069 +:021D7900000068 +:021D7A00000067 +:021D7B00000066 +:021D7C00000065 +:021D7D00000064 +:021D7E00000063 +:021D7F00000062 +:021D8000000061 +:021D8100000060 +:021D820000005F +:021D830000005E +:021D840000005D +:021D850000005C +:021D860000005B +:021D870000005A +:021D8800000059 +:021D8900000058 +:021D8A00000057 +:021D8B00000056 +:021D8C00000055 +:021D8D00000054 +:021D8E00000053 +:021D8F00000052 +:021D9000000051 +:021D9100000050 +:021D920000004F +:021D930000004E +:021D940000004D +:021D950000004C +:021D960000004B +:021D970000004A +:021D9800000049 +:021D9900000048 +:021D9A00000047 +:021D9B00000046 +:021D9C00000045 +:021D9D00000044 +:021D9E00000043 +:021D9F00000042 +:021DA000000041 +:021DA100000040 +:021DA20000003F +:021DA30000003E +:021DA40000003D +:021DA50000003C +:021DA60000003B +:021DA70000003A +:021DA800000039 +:021DA900000038 +:021DAA00000037 +:021DAB00000036 +:021DAC00000035 +:021DAD00000034 +:021DAE00000033 +:021DAF00000032 +:021DB000000031 +:021DB100000030 +:021DB20000002F +:021DB30000002E +:021DB40000002D +:021DB50000002C +:021DB60000002B +:021DB70000002A +:021DB800000029 +:021DB900000028 +:021DBA00000027 +:021DBB00000026 +:021DBC00000025 +:021DBD00000024 +:021DBE00000023 +:021DBF00000022 +:021DC000000021 +:021DC100000020 +:021DC20000001F +:021DC30000001E +:021DC40000001D +:021DC50000001C +:021DC60000001B +:021DC70000001A +:021DC800000019 +:021DC900000018 +:021DCA00000017 +:021DCB00000016 +:021DCC00000015 +:021DCD00000014 +:021DCE00000013 +:021DCF00000012 +:021DD000000011 +:021DD100000010 +:021DD20000000F +:021DD30000000E +:021DD40000000D +:021DD50000000C +:021DD60000000B +:021DD70000000A +:021DD800000009 +:021DD900000008 +:021DDA00000007 +:021DDB00000006 +:021DDC00000005 +:021DDD00000004 +:021DDE00000003 +:021DDF00000002 +:021DE000000001 +:021DE100000000 +:021DE2000000FF +:021DE3000000FE +:021DE4000000FD +:021DE5000000FC +:021DE6000000FB +:021DE7000000FA +:021DE8000000F9 +:021DE9000000F8 +:021DEA000000F7 +:021DEB000000F6 +:021DEC000000F5 +:021DED000000F4 +:021DEE000000F3 +:021DEF000000F2 +:021DF0000000F1 +:021DF1000000F0 +:021DF2000000EF +:021DF3000000EE +:021DF4000000ED +:021DF5000000EC +:021DF6000000EB +:021DF7000000EA +:021DF8000000E9 +:021DF9000000E8 +:021DFA000000E7 +:021DFB000000E6 +:021DFC000000E5 +:021DFD000000E4 +:021DFE000000E3 +:021DFF000000E2 +:021E00000000E0 +:021E01000000DF +:021E02000000DE +:021E03000000DD +:021E04000000DC +:021E05000000DB +:021E06000000DA +:021E07000000D9 +:021E08000000D8 +:021E09000000D7 +:021E0A000000D6 +:021E0B000000D5 +:021E0C000000D4 +:021E0D000000D3 +:021E0E000000D2 +:021E0F000000D1 +:021E10000000D0 +:021E11000000CF +:021E12000000CE +:021E13000000CD +:021E14000000CC +:021E15000000CB +:021E16000000CA +:021E17000000C9 +:021E18000000C8 +:021E19000000C7 +:021E1A000000C6 +:021E1B000000C5 +:021E1C000000C4 +:021E1D000000C3 +:021E1E000000C2 +:021E1F000000C1 +:021E20000000C0 +:021E21000000BF +:021E22000000BE +:021E23000000BD +:021E24000000BC +:021E25000000BB +:021E26000000BA +:021E27000000B9 +:021E28000000B8 +:021E29000000B7 +:021E2A000000B6 +:021E2B000000B5 +:021E2C000000B4 +:021E2D000000B3 +:021E2E000000B2 +:021E2F000000B1 +:021E30000000B0 +:021E31000000AF +:021E32000000AE +:021E33000000AD +:021E34000000AC +:021E35000000AB +:021E36000000AA +:021E37000000A9 +:021E38000000A8 +:021E39000000A7 +:021E3A000000A6 +:021E3B000000A5 +:021E3C000000A4 +:021E3D000000A3 +:021E3E000000A2 +:021E3F000000A1 +:021E40000000A0 +:021E410000009F +:021E420000009E +:021E430000009D +:021E440000009C +:021E450000009B +:021E460000009A +:021E4700000099 +:021E4800000098 +:021E4900000097 +:021E4A00000096 +:021E4B00000095 +:021E4C00000094 +:021E4D00000093 +:021E4E00000092 +:021E4F00000091 +:021E5000000090 +:021E510000008F +:021E520000008E +:021E530000008D +:021E540000008C +:021E550000008B +:021E560000008A +:021E5700000089 +:021E5800000088 +:021E5900000087 +:021E5A00000086 +:021E5B00000085 +:021E5C00000084 +:021E5D00000083 +:021E5E00000082 +:021E5F00000081 +:021E6000000080 +:021E610000007F +:021E620000007E +:021E630000007D +:021E640000007C +:021E650000007B +:021E660000007A +:021E6700000079 +:021E6800000078 +:021E6900000077 +:021E6A00000076 +:021E6B00000075 +:021E6C00000074 +:021E6D00000073 +:021E6E00000072 +:021E6F00000071 +:021E7000000070 +:021E710000006F +:021E720000006E +:021E730000006D +:021E740000006C +:021E750000006B +:021E760000006A +:021E7700000069 +:021E7800000068 +:021E7900000067 +:021E7A00000066 +:021E7B00000065 +:021E7C00000064 +:021E7D00000063 +:021E7E00000062 +:021E7F00000061 +:021E8000000060 +:021E810000005F +:021E820000005E +:021E830000005D +:021E840000005C +:021E850000005B +:021E860000005A +:021E8700000059 +:021E8800000058 +:021E8900000057 +:021E8A00000056 +:021E8B00000055 +:021E8C00000054 +:021E8D00000053 +:021E8E00000052 +:021E8F00000051 +:021E9000000050 +:021E910000004F +:021E920000004E +:021E930000004D +:021E940000004C +:021E950000004B +:021E960000004A +:021E9700000049 +:021E9800000048 +:021E9900000047 +:021E9A00000046 +:021E9B00000045 +:021E9C00000044 +:021E9D00000043 +:021E9E00000042 +:021E9F00000041 +:021EA000000040 +:021EA10000003F +:021EA20000003E +:021EA30000003D +:021EA40000003C +:021EA50000003B +:021EA60000003A +:021EA700000039 +:021EA800000038 +:021EA900000037 +:021EAA00000036 +:021EAB00000035 +:021EAC00000034 +:021EAD00000033 +:021EAE00000032 +:021EAF00000031 +:021EB000000030 +:021EB10000002F +:021EB20000002E +:021EB30000002D +:021EB40000002C +:021EB50000002B +:021EB60000002A +:021EB700000029 +:021EB800000028 +:021EB900000027 +:021EBA00000026 +:021EBB00000025 +:021EBC00000024 +:021EBD00000023 +:021EBE00000022 +:021EBF00000021 +:021EC000000020 +:021EC10000001F +:021EC20000001E +:021EC30000001D +:021EC40000001C +:021EC50000001B +:021EC60000001A +:021EC700000019 +:021EC800000018 +:021EC900000017 +:021ECA00000016 +:021ECB00000015 +:021ECC00000014 +:021ECD00000013 +:021ECE00000012 +:021ECF00000011 +:021ED00000FF11 +:021ED10000FF10 +:021ED20000FF0F +:021ED30000FF0E +:021ED40000FF0D +:021ED50000FF0C +:021ED60000FF0B +:021ED70000FF0A +:021ED800000008 +:021ED900000007 +:021EDA00000006 +:021EDB00000005 +:021EDC00000004 +:021EDD00000003 +:021EDE00000002 +:021EDF00000001 +:021EE000000000 +:021EE1000000FF +:021EE2000000FE +:021EE3000000FD +:021EE4000000FC +:021EE5000000FB +:021EE6000000FA +:021EE7000000F9 +:021EE8000000F8 +:021EE9000000F7 +:021EEA000000F6 +:021EEB000000F5 +:021EEC000000F4 +:021EED000000F3 +:021EEE000000F2 +:021EEF000000F1 +:021EF0000000F0 +:021EF1000000EF +:021EF2000000EE +:021EF3000000ED +:021EF4000000EC +:021EF5000000EB +:021EF6000000EA +:021EF7000000E9 +:021EF8000000E8 +:021EF9000000E7 +:021EFA000000E6 +:021EFB000000E5 +:021EFC000000E4 +:021EFD000000E3 +:021EFE000000E2 +:021EFF000000E1 +:021F00000000DF +:021F01000000DE +:021F02000000DD +:021F03000000DC +:021F04000000DB +:021F05000000DA +:021F06000000D9 +:021F07000000D8 +:021F08000000D7 +:021F09000000D6 +:021F0A000000D5 +:021F0B000000D4 +:021F0C000000D3 +:021F0D000000D2 +:021F0E000000D1 +:021F0F000000D0 +:021F10000000CF +:021F11000000CE +:021F12000000CD +:021F13000000CC +:021F14000000CB +:021F15000000CA +:021F16000000C9 +:021F17000000C8 +:021F18000000C7 +:021F19000000C6 +:021F1A000000C5 +:021F1B000000C4 +:021F1C000000C3 +:021F1D000000C2 +:021F1E000000C1 +:021F1F000000C0 +:021F20000000BF +:021F21000000BE +:021F22000000BD +:021F23000000BC +:021F24000000BB +:021F25000000BA +:021F26000000B9 +:021F27000000B8 +:021F28000000B7 +:021F29000000B6 +:021F2A000000B5 +:021F2B000000B4 +:021F2C000000B3 +:021F2D000000B2 +:021F2E000000B1 +:021F2F000000B0 +:021F30000000AF +:021F31000000AE +:021F32000000AD +:021F33000000AC +:021F34000000AB +:021F35000000AA +:021F36000000A9 +:021F37000000A8 +:021F38000000A7 +:021F39000000A6 +:021F3A000000A5 +:021F3B000000A4 +:021F3C000000A3 +:021F3D000000A2 +:021F3E000000A1 +:021F3F000000A0 +:021F400000009F +:021F410000009E +:021F420000009D +:021F430000009C +:021F440000009B +:021F450000009A +:021F4600000099 +:021F4700000098 +:021F4800000097 +:021F4900000096 +:021F4A00000095 +:021F4B00000094 +:021F4C00000093 +:021F4D00000092 +:021F4E00000091 +:021F4F00000090 +:021F500000008F +:021F510000008E +:021F520000008D +:021F530000008C +:021F540000008B +:021F550000008A +:021F5600000089 +:021F5700000088 +:021F5800000087 +:021F5900000086 +:021F5A00000085 +:021F5B00000084 +:021F5C00000083 +:021F5D00000082 +:021F5E00000081 +:021F5F00000080 +:021F600000007F +:021F610000007E +:021F620000007D +:021F630000007C +:021F640000007B +:021F650000007A +:021F6600000079 +:021F6700000078 +:021F6800000077 +:021F6900000076 +:021F6A00000075 +:021F6B00000074 +:021F6C00000073 +:021F6D00000072 +:021F6E00000071 +:021F6F00000070 +:021F700000006F +:021F710000006E +:021F720000006D +:021F730000006C +:021F740000006B +:021F750000006A +:021F7600000069 +:021F7700000068 +:021F7800000067 +:021F7900000066 +:021F7A00000065 +:021F7B00000064 +:021F7C00000063 +:021F7D00000062 +:021F7E00000061 +:021F7F00000060 +:021F800000005F +:021F810000005E +:021F820000005D +:021F830000005C +:021F840000005B +:021F850000005A +:021F8600000059 +:021F8700000058 +:021F8800000057 +:021F8900000056 +:021F8A00000055 +:021F8B00000054 +:021F8C00000053 +:021F8D00000052 +:021F8E00000051 +:021F8F00000050 +:021F900000004F +:021F910000004E +:021F920000004D +:021F930000004C +:021F940000004B +:021F950000004A +:021F9600000049 +:021F9700000048 +:021F9800000047 +:021F9900000046 +:021F9A00000045 +:021F9B00000044 +:021F9C00000043 +:021F9D00000042 +:021F9E00000041 +:021F9F00000040 +:021FA00000003F +:021FA10000003E +:021FA20000003D +:021FA30000003C +:021FA40000003B +:021FA50000003A +:021FA600000039 +:021FA700000038 +:021FA800000037 +:021FA900000036 +:021FAA00000035 +:021FAB00000034 +:021FAC00000033 +:021FAD00000032 +:021FAE00000031 +:021FAF00000030 +:021FB00000002F +:021FB10000002E +:021FB20000002D +:021FB30000002C +:021FB40000002B +:021FB50000002A +:021FB600000029 +:021FB700000028 +:021FB800000027 +:021FB900000026 +:021FBA00000025 +:021FBB00000024 +:021FBC00000023 +:021FBD00000022 +:021FBE00000021 +:021FBF00000020 +:021FC00000001F +:021FC10000001E +:021FC20000001D +:021FC30000001C +:021FC40000001B +:021FC50000001A +:021FC600000019 +:021FC700000018 +:021FC800000017 +:021FC900000016 +:021FCA00000015 +:021FCB00000014 +:021FCC00000013 +:021FCD00000012 +:021FCE00000011 +:021FCF00000010 +:021FD00000000F +:021FD10000000E +:021FD20000000D +:021FD30000000C +:021FD40000000B +:021FD50000000A +:021FD600000009 +:021FD700000008 +:021FD800000007 +:021FD900000006 +:021FDA00000005 +:021FDB00000004 +:021FDC00000003 +:021FDD00000002 +:021FDE00000001 +:021FDF00000000 +:021FE0000000FF +:021FE1000000FE +:021FE2000000FD +:021FE3000000FC +:021FE4000000FB +:021FE5000000FA +:021FE6000000F9 +:021FE7000000F8 +:021FE8000000F7 +:021FE9000000F6 +:021FEA000000F5 +:021FEB000000F4 +:021FEC000000F3 +:021FED000000F2 +:021FEE000000F1 +:021FEF000000F0 +:021FF0000000EF +:021FF1000000EE +:021FF2000000ED +:021FF3000000EC +:021FF4000000EB +:021FF5000000EA +:021FF6000000E9 +:021FF7000000E8 +:021FF8000000E7 +:021FF9000000E6 +:021FFA000000E5 +:021FFB000000E4 +:021FFC000000E3 +:021FFD000000E2 +:021FFE000000E1 +:021FFF000000E0 +:00000001FF diff --git a/peripherals/vga/vga_buffer.vhd b/peripherals/vga/vga_buffer.vhd new file mode 100644 index 00000000..d079bf40 --- /dev/null +++ b/peripherals/vga/vga_buffer.vhd @@ -0,0 +1,84 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity vga_buffer is + port( + clk : in std_logic; + rst : in std_logic; + address_vga : in std_logic_vector(31 downto 0); + sdram_data : in std_logic_vector(15 downto 0); + sdram_address : out std_logic_vector(31 downto 0); + sdram_r : out std_logic; + VGA_R : out std_logic_vector(3 downto 0); + VGA_G : out std_logic_vector(3 downto 0); + VGA_B : out std_logic_vector(3 downto 0) + ); +end entity vga_buffer; + +architecture RTL of vga_buffer is + type state_type is (WAIT_READ, WRITING_BANK1, WRITING_BANK2, IDLE); + + signal bank : std_logic; + signal bank_last_value : std_logic; + signal index : natural; + + type mem is array (0 to 15) of std_logic_vector(15 downto 0); + signal memory : mem := (x"0001",x"0001",x"0001",x"0001",x"0001",x"0001",x"0001",x"0001",x"0001",x"0001",x"0001",x"0001",x"0001",x"0001",x"0001",x"0001"); + +begin + + bank <= address_vga(3); + VGA_R <= memory(index)(3 downto 0); + VGA_G <= memory(index)(7 downto 4); + VGA_B <= memory(index)(11 downto 8); + index <= to_integer(unsigned(address_vga(3 downto 0))); + + process(clk, rst) is + variable state : state_type := WAIT_READ; + variable counter : natural := 0; + variable wait_cycles : natural; + begin + if rst = '1' then + state := IDLE; + elsif rising_edge(clk) then + case state is + when IDLE => + if bank /= bank_last_value then + bank_last_value <= bank; + sdram_address <= std_logic_vector(to_unsigned((to_integer(unsigned(address_vga)) + 8), 32)); + sdram_r <= '1'; + wait_cycles := 5; + state := WAIT_READ; + end if; + + when WAIT_READ => + wait_cycles := wait_cycles - 1; + if wait_cycles = 0 then + sdram_r <= '0'; + counter := 0; + if bank = '1' then + state := WRITING_BANK1; + else + state := WRITING_BANK2; + end if; + end if; + + when WRITING_BANK1 => + memory(counter) <= sdram_data; + counter := counter + 1; + if counter = 8 then + state := IDLE; + end if; + + when WRITING_BANK2 => + memory(8 + counter) <= sdram_data; + counter := counter + 1; + if counter = 8 then + state := IDLE; + end if; + end case; + end if; + end process; + +end architecture RTL; diff --git a/peripherals/vga/vga_controller.vhd b/peripherals/vga/vga_controller.vhd new file mode 100644 index 00000000..af9e91be --- /dev/null +++ b/peripherals/vga/vga_controller.vhd @@ -0,0 +1,101 @@ + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +ENTITY vga_controller IS + GENERIC( + h_pulse : INTEGER := 128; --horiztonal sync pulse width in pixels + h_bp : INTEGER := 88; --horiztonal back porch width in pixels + h_pixels : INTEGER := 800; --horiztonal display width in pixels + h_fp : INTEGER := 40; --horiztonal front porch width in pixels + h_pol : STD_LOGIC := '1'; --horizontal sync pulse polarity (1 = positive, 0 = negative) + v_pulse : INTEGER := 4; --vertical sync pulse width in rows + v_bp : INTEGER := 23; --vertical back porch width in rows + v_pixels : INTEGER := 600; --vertical display width in rows + v_fp : INTEGER := 1; --vertical front porch width in rows + v_pol : STD_LOGIC := '1'); --vertical sync pulse polarity (1 = positive, 0 = negative) + PORT( + pixel_clk : IN STD_LOGIC; --pixel clock at frequency of VGA mode being used + reset : IN STD_LOGIC; --active low asycnchronous reset + h_sync : OUT STD_LOGIC; --horiztonal sync pulse + v_sync : OUT STD_LOGIC; --vertical sync pulse + disp_ena : OUT STD_LOGIC; --display enable ('1' = display time, '0' = blanking time) + column : OUT INTEGER; --horizontal pixel coordinate + row : OUT INTEGER; --vertical pixel coordinate + addr : OUT std_logic_vector(12 downto 0); --SRAM Addr + n_blank : OUT STD_LOGIC; --direct blacking output to DAC + n_sync : OUT STD_LOGIC); --sync-on-green output to DAC +END vga_controller; + +ARCHITECTURE behavior OF vga_controller IS + CONSTANT h_period : INTEGER := h_pulse + h_bp + h_pixels + h_fp; --total number of pixel clocks in a row + CONSTANT v_period : INTEGER := v_pulse + v_bp + v_pixels + v_fp; --total number of rows in column + +BEGIN + + n_blank <= '1'; --no direct blanking + n_sync <= '0'; --no sync on green + + prc : PROCESS(pixel_clk, reset) + VARIABLE h_count : INTEGER RANGE 0 TO h_period - 1 := 0; --horizontal counter (counts the columns) + VARIABLE v_count : INTEGER RANGE 0 TO v_period - 1 := 0; --vertical counter (counts the rows) + BEGIN + IF (reset = '1') THEN --reset asserted + h_count := 0; --reset horizontal counter + v_count := 0; --reset vertical counter + h_sync <= NOT h_pol; --deassert horizontal sync + v_sync <= NOT v_pol; --deassert vertical sync + disp_ena <= '0'; --disable display + addr <= (others => '0'); + column <= 0; --reset column pixel coordinate + row <= 0; --reset row pixel coordinate + + ELSIF (pixel_clk'EVENT AND pixel_clk = '1') THEN + + --counters + IF (h_count < h_period - 1) THEN --horizontal counter (pixels) + h_count := h_count + 1; + ELSE + h_count := 0; + IF (v_count < v_period - 1) THEN --veritcal counter (rows) + v_count := v_count + 1; + ELSE + v_count := 0; + END IF; + END IF; + + --horizontal sync signal + IF (h_count < h_pixels + h_fp OR h_count >= h_pixels + h_fp + h_pulse) THEN + h_sync <= NOT h_pol; --deassert horiztonal sync pulse + ELSE + h_sync <= h_pol; --assert horiztonal sync pulse + END IF; + + --vertical sync signal + IF (v_count < v_pixels + v_fp OR v_count >= v_pixels + v_fp + v_pulse) THEN + v_sync <= NOT v_pol; --deassert vertical sync pulse + ELSE + v_sync <= v_pol; --assert vertical sync pulse + END IF; + + --set pixel coordinates + IF (h_count < h_pixels) THEN --horiztonal display time + addr <= Std_logic_vector(To_unsigned(h_count + (h_pixels * v_count),addr'length)); + column <= h_count; --set horiztonal pixel coordinate + END IF; + IF (v_count < v_pixels) THEN --vertical display time + row <= v_count; --set vertical pixel coordinate + END IF; + + --set display enable output + IF (h_count < h_pixels AND v_count < v_pixels) THEN --display time + disp_ena <= '1'; --enable display + ELSE --blanking time + disp_ena <= '0'; --disable display + END IF; + + END IF; + END PROCESS; + +END behavior; diff --git a/tests/Makefile b/tests/Makefile index 9441aad8..d2ea2a84 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -30,7 +30,7 @@ firmware32.hex: firmware.elf hex8tohex32.py start.o: start.S $(CC) -c -nostdlib start.S $(LDLIBS) -firmware.elf: main_vga.o syscalls.o start.o utils.o +firmware.elf: firmware.o syscalls.o start.o utils.o $(CC) $(LDFLAGS),-Map=firmware.map -o $@ $^ -T sections.ld $(LDLIBS) chmod -x firmware.elf diff --git a/tests/firmware.lss b/tests/firmware.lss index 9f6ebf3d..2abc1c8f 100644 --- a/tests/firmware.lss +++ b/tests/firmware.lss @@ -62,24 +62,24 @@ Disassembly of section .rom: 150: 00912a23 sw s1,20(sp) 154: 01212823 sw s2,16(sp) 158: 01312623 sw s3,12(sp) - 15c: 06000437 lui s0,0x6000 - 160: 00f00993 li s3,15 - 164: 000024b7 lui s1,0x2 - 168: 71048493 addi s1,s1,1808 # 2710 <_data_lma+0x1fd4> - 16c: 06008937 lui s2,0x6008 - 170: 01342023 sw s3,0(s0) # 6000000 <_edata+0x3fffbd4> - 174: 00048513 mv a0,s1 - 178: 100000ef jal ra,278 - 17c: 00440413 addi s0,s0,4 - 180: ff2418e3 bne s0,s2,170 - 184: 00000513 li a0,0 - 188: 01c12083 lw ra,28(sp) - 18c: 01812403 lw s0,24(sp) - 190: 01412483 lw s1,20(sp) - 194: 01012903 lw s2,16(sp) - 198: 00c12983 lw s3,12(sp) - 19c: 02010113 addi sp,sp,32 - 1a0: 00008067 ret + 15c: 01412423 sw s4,8(sp) + 160: 01512223 sw s5,4(sp) + 164: 040004b7 lui s1,0x4000 + 168: 00448913 addi s2,s1,4 # 4000004 <_edata+0x1fffbd8> + 16c: 00300a93 li s5,3 + 170: fc000a13 li s4,-64 + 174: 00002437 lui s0,0x2 + 178: 71040413 addi s0,s0,1808 # 2710 <_data_lma+0x1fd4> + 17c: fff00993 li s3,-1 + 180: 01592023 sw s5,0(s2) + 184: 0144a423 sw s4,8(s1) + 188: 00040513 mv a0,s0 + 18c: 0ec000ef jal ra,278 + 190: 00092023 sw zero,0(s2) + 194: 0134a423 sw s3,8(s1) + 198: 00040513 mv a0,s0 + 19c: 0dc000ef jal ra,278 + 1a0: fe1ff06f j 180 000001a4 <_access>: 1a4: 0040006f j 1a8 @@ -434,7 +434,7 @@ Disassembly of section .rom: 688: 000a0c63 beqz s4,6a0 <__call_exitprocs+0x98> 68c: 10442783 lw a5,260(s0) 690: 01478863 beq a5,s4,6a0 <__call_exitprocs+0x98> - 694: fff90913 addi s2,s2,-1 # 6007fff <_edata+0x4007bd3> + 694: fff90913 addi s2,s2,-1 698: ffc40413 addi s0,s0,-4 69c: fbdff06f j 658 <__call_exitprocs+0x50> 6a0: 0044a703 lw a4,4(s1) diff --git a/tests/firmware.map b/tests/firmware.map index d419256b..375d184a 100644 --- a/tests/firmware.map +++ b/tests/firmware.map @@ -35,8 +35,8 @@ Discarded input sections .fini_array 0x0000000000000000 0x4 /home/xtarke/Data/Apps/riscv/riscv32i/lib/gcc/riscv32-unknown-elf/8.2.0/crtbegin.o .init_array 0x0000000000000000 0x4 /home/xtarke/Data/Apps/riscv/riscv32i/lib/gcc/riscv32-unknown-elf/8.2.0/crtbegin.o .comment 0x0000000000000000 0x12 /home/xtarke/Data/Apps/riscv/riscv32i/lib/gcc/riscv32-unknown-elf/8.2.0/crtbegin.o - .data 0x0000000000000000 0x0 main_vga.o - .bss 0x0000000000000000 0x0 main_vga.o + .data 0x0000000000000000 0x0 firmware.o + .bss 0x0000000000000000 0x0 firmware.o .data 0x0000000000000000 0x0 syscalls.o .bss 0x0000000000000000 0x0 syscalls.o .data 0x0000000000000000 0x0 start.o @@ -82,7 +82,7 @@ Linker script and memory map LOAD /home/xtarke/Data/Apps/riscv/riscv32i/lib/gcc/riscv32-unknown-elf/8.2.0/../../../../riscv32-unknown-elf/lib/crt0.o LOAD /home/xtarke/Data/Apps/riscv/riscv32i/lib/gcc/riscv32-unknown-elf/8.2.0/crtbegin.o -LOAD main_vga.o +LOAD firmware.o LOAD syscalls.o LOAD start.o LOAD utils.o @@ -107,7 +107,7 @@ LOAD /home/xtarke/Data/Apps/riscv/riscv32i/lib/gcc/riscv32-unknown-elf/8.2.0/crt 0x0000000000000100 _start 0x0000000000000140 _init 0x0000000000000140 _fini - .text 0x0000000000000144 0x60 main_vga.o + .text 0x0000000000000144 0x60 firmware.o 0x0000000000000144 main .text 0x00000000000001a4 0xd4 syscalls.o 0x00000000000001a4 _getpid @@ -200,7 +200,7 @@ OUTPUT(firmware.elf elf32-littleriscv) .sbss 0x000000000200042c 0x4 syscalls.o .comment 0x0000000000000000 0x11 - .comment 0x0000000000000000 0x11 main_vga.o + .comment 0x0000000000000000 0x11 firmware.o 0x12 (size before relaxing) .comment 0x0000000000000011 0x12 syscalls.o .comment 0x0000000000000011 0x12 utils.o diff --git a/tests/firmware32.hex b/tests/firmware32.hex deleted file mode 100644 index a418bae1..00000000 --- a/tests/firmware32.hex +++ /dev/null @@ -1,730 +0,0 @@ -02001137 -80010113 -020001b7 -00018193 -ff010113 -00012023 -00012223 -00012423 -00012623 -120000ef -00100073 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -02000197 -f0018193 -42c18513 -42c18613 -40a60633 -00000593 -398000ef -00000517 -1b850513 -164000ef -208000ef -00012503 -00410593 -00000613 -00c000ef -1680006f -00008067 -fe010113 -00112e23 -00812c23 -00912a23 -01212823 -01312623 -06000437 -00f00993 -000024b7 -71048493 -06008937 -01342023 -00048513 -100000ef -00440413 -ff2418e3 -00000513 -01c12083 -01812403 -01412483 -01012903 -00c12983 -02010113 -00008067 -0040006f -000007b7 -71478793 -05500713 -100006b7 -00178793 -00e6a023 -0007c703 -fe071ae3 -00100073 -00000513 -00008067 -00c58733 -00e58c63 -100006b7 -00158593 -fff5c783 -00f6a023 -feb71ae3 -00060513 -00008067 -00000513 -00008067 -ff010113 -00112623 -094000ef -00200793 -00f52023 -fff00513 -00c12083 -01010113 -00008067 -00050793 -42c1a703 -00071663 -42c18713 -42e1a623 -42c1a503 -00a787b3 -42f1a623 -00008067 -00100073 -ff010113 -00112623 -00018613 -42c18793 -40c78633 -73c00593 -00018513 -170000ef -00c12083 -01010113 -00008067 -fff00793 -fff50513 -fef51ee3 -00008067 -00050593 -00000693 -00000613 -00000513 -2f40006f -4281a503 -00008067 -ff010113 -00000593 -00812423 -00112623 -00050413 -350000ef -73802503 -03c52783 -00078463 -000780e7 -00040513 -f79ff0ef -ff010113 -000007b7 -00812423 -00000437 -00078713 -00040413 -40e40433 -00912223 -00112623 -40245413 -00078493 -00041c63 -00812403 -00c12083 -00412483 -01010113 -e2dff06f -fff40413 -00241793 -00f487b3 -0007a783 -000780e7 -fd5ff06f -ff010113 -000007b7 -00812423 -00000437 -00078713 -00040413 -40e40433 -00912223 -01212023 -00112623 -40245413 -00000493 -00078913 -04849263 -dd9ff0ef -000007b7 -00000437 -00078713 -00040413 -40e40433 -40245413 -00000493 -00078913 -02849a63 -00c12083 -00812403 -00412483 -00012903 -01010113 -00008067 -00249793 -00f907b3 -0007a783 -00148493 -000780e7 -fa9ff06f -00249793 -00f907b3 -0007a783 -00148493 -000780e7 -fb9ff06f -00a5c7b3 -0037f793 -00c50733 -00079663 -00300793 -02c7e263 -00050793 -0ae57c63 -0005c683 -00178793 -00158593 -fed78fa3 -fee7e8e3 -00008067 -00357693 -00050793 -00068e63 -0005c683 -00178793 -00158593 -fed78fa3 -0037f693 -fe9ff06f -ffc77693 -fe068613 -06c7f463 -0005a383 -0045a283 -0085af83 -00c5af03 -0105ae83 -0145ae03 -0185a303 -01c5a883 -02458593 -0077a023 -ffc5a803 -0057a223 -01f7a423 -01e7a623 -01d7a823 -01c7aa23 -0067ac23 -0117ae23 -02478793 -ff07ae23 -fadff06f -0005a603 -00478793 -00458593 -fec7ae23 -fed7e8e3 -f4e7e8e3 -00008067 -00f00313 -00050713 -02c37e63 -00f77793 -0a079063 -08059263 -ff067693 -00f67613 -00e686b3 -00b72023 -00b72223 -00b72423 -00b72623 -01070713 -fed766e3 -00061463 -00008067 -40c306b3 -00269693 -00000297 -005686b3 -00c68067 -00b70723 -00b706a3 -00b70623 -00b705a3 -00b70523 -00b704a3 -00b70423 -00b703a3 -00b70323 -00b702a3 -00b70223 -00b701a3 -00b70123 -00b700a3 -00b70023 -00008067 -0ff5f593 -00859693 -00d5e5b3 -01059693 -00d5e5b3 -f6dff06f -00279693 -00000297 -005686b3 -00008293 -fa0680e7 -00028093 -ff078793 -40f70733 -00f60633 -f6c378e3 -f3dff06f -73802703 -00050313 -14872783 -00079663 -14c70793 -14f72423 -0047a703 -01f00813 -fff00513 -04e84a63 -00271893 -02030c63 -01178533 -08c52423 -1887a803 -00100613 -00e61633 -00c86833 -1907a423 -10d52423 -00200693 -00d31863 -18c7a683 -00c6e633 -18c7a623 -00170713 -00e7a223 -011787b3 -00b7a423 -00000513 -00008067 -fd010113 -01312e23 -73802983 -01412c23 -01512a23 -01612823 -02112623 -02812423 -02912223 -03212023 -01712623 -00050a93 -00058a13 -00100b13 -1489a483 -00048c63 -0044a403 -fff40913 -00241413 -00848433 -02095863 -02c12083 -02812403 -02412483 -02012903 -01c12983 -01812a03 -01412a83 -01012b03 -00c12b83 -03010113 -00008067 -000a0c63 -10442783 -01478863 -fff90913 -ffc40413 -fbdff06f -0044a703 -00442783 -fff70713 -03271c63 -0124a223 -fe0780e3 -1884a683 -012b1733 -0044ab83 -00d776b3 -02069263 -000780e7 -0044a783 -f77796e3 -1489a783 -fa978ce3 -f61ff06f -00042223 -fcdff06f -18c4a683 -08442583 -00d77733 -00071863 -000a8513 -000780e7 -fcdff06f -00058513 -000780e7 -fc1ff06f -6d696e55 -6d656c70 -65746e65 -79732064 -6d657473 -6c616320 -6163206c -64656c6c -00000a21 -02000000 -00000000 -020002ec -02000354 -020003bc -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000001 -00000000 -abcd330e -e66d1234 -0005deec -0000000b -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -00000000 -02000000 diff --git a/tests/quartus.hex b/tests/quartus.hex index 19645dce..42924211 100644 --- a/tests/quartus.hex +++ b/tests/quartus.hex @@ -85,24 +85,24 @@ :0400540000912a23ca :04005500012128233a :04005600013126232b -:040057000600043764 -:0400580000f0099318 -:04005900000024b7c8 -:04005a007104849316 -:04005b0006008937db -:04005c000134202328 -:04005d000004851303 -:04005e00100000ef9f -:04005f000044041342 -:04006000ff2418e37e -:040061000000051383 -:0400620001c1208335 -:0400630001812403f0 -:0400640001412483af -:040065000101290369 -:0400660000c1298329 -:04006700020101137e -:0400680000008067ad +:04005700014124231c +:04005800015122230d +:04005900040004b7e4 +:04005a0000448913c2 +:04005b0000300a93d4 +:04005c00fc000a1387 +:04005d000000243744 +:04005e007104041312 +:04005f00fff0099312 +:0400600001592023ff +:040061000144a4238f +:04006200000405137e +:040063000ec000efdc +:04006400000920234c +:040065000134a4239b +:04006600000405137a +:040067000dc000efd9 +:04006800fe1ff06f18 :040069000040006fe4 :04006a00000007b7d4 :04006b0071478793bf