aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgithub-classroom[bot] <66690702+github-classroom[bot]@users.noreply.github.com>2026-02-05 19:36:36 +0000
committerGitHub <noreply@github.com>2026-02-05 19:36:36 +0000
commitead28dd6fed440ccf4667c459778012bb0d95733 (patch)
treebbc326fa1b487efc0fe163ef733a76c8a241fbb0
Initial commit
-rw-r--r--.gitignore20
-rw-r--r--README.md394
-rw-r--r--bonus/ball.sv11
-rw-r--r--bonus/balls.sv11
-rw-r--r--figures/construction.svg51
-rw-r--r--figures/construction_dimensions.obj1956
-rw-r--r--figures/construction_dimensions.pngbin0 -> 69782 bytes
-rw-r--r--figures/interface_timing.pngbin0 -> 6812 bytes
-rw-r--r--figures/pixel_grid.pngbin0 -> 15496 bytes
-rw-r--r--figures/reuleaux.svg15
-rw-r--r--figures/top_level.pngbin0 -> 516499 bytes
-rw-r--r--figures/top_level.png.pngbin0 -> 516499 bytes
-rw-r--r--figures/toplevel.pngbin0 -> 358083 bytes
-rw-r--r--figures/vga_adapter_ifc.jpgbin0 -> 12138 bytes
-rw-r--r--settings/DE0_CV.qsf515
-rw-r--r--settings/DE10_Lite.qsf446
-rw-r--r--settings/DE1_SoC.qsf953
-rw-r--r--task1/.gitignore18
-rw-r--r--task1/vga_demo.sv29
-rw-r--r--task2/.gitignore18
-rw-r--r--task2/README.md13
-rw-r--r--task2/fillscreen.sv7
-rw-r--r--task2/task2.sv12
-rw-r--r--task2/tb_rtl_fillscreen.sv5
-rw-r--r--task2/tb_rtl_task2.sv5
-rw-r--r--task2/tb_syn_fillscreen.sv5
-rw-r--r--task2/tb_syn_task2.sv5
-rw-r--r--task2/tb_task2.sv5
-rw-r--r--task3/.gitignore18
-rw-r--r--task3/README.md12
-rw-r--r--task3/circle.sv8
-rw-r--r--task3/task3.sv12
-rw-r--r--task3/tb_rtl_circle.sv5
-rw-r--r--task3/tb_rtl_task3.sv5
-rw-r--r--task3/tb_syn_circle.sv5
-rw-r--r--task3/tb_syn_task3.sv5
-rw-r--r--task3/tb_task3.sv5
-rw-r--r--task4/.gitignore18
-rw-r--r--task4/README.md12
-rw-r--r--task4/reuleaux.sv8
-rw-r--r--task4/task4.sv12
-rw-r--r--task4/tb_rtl_reuleaux.sv5
-rw-r--r--task4/tb_rtl_task4.sv5
-rw-r--r--task4/tb_syn_reuleaux.sv5
-rw-r--r--task4/tb_syn_task4.sv5
-rw-r--r--task4/tb_task4.sv5
-rw-r--r--vga-core/de1_vga_gui.tcl107
-rw-r--r--vga-core/vga_adapter.sv283
-rw-r--r--vga-core/vga_adapter.v263
-rw-r--r--vga-core/vga_address_translator.sv39
-rw-r--r--vga-core/vga_address_translator.v35
-rw-r--r--vga-core/vga_controller.sv216
-rw-r--r--vga-core/vga_controller.v212
-rw-r--r--vga-core/vga_pll.sv173
-rw-r--r--vga-core/vga_pll.v173
-rw-r--r--vga-hacks/vga_adapter_sim.sv22
-rw-r--r--vga-hacks/vga_adapter_window.sv24
-rw-r--r--vga-hacks/vga_window.tcl85
58 files changed, 6276 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..13cb9d1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,20 @@
+*.swp
+.DS_Store
+transcript
+tcl_stacktrace.txt
+c5_pin_model_dump.txt
+*.mti
+*.mpf
+*.wlf
+*.qdb
+*.qpg
+*.qtl
+*.qws
+*.qpf
+*.sof
+*.bak
+work/
+db/
+incremental_db/
+simulation/
+output_files/
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..6eaa4aa
--- /dev/null
+++ b/README.md
@@ -0,0 +1,394 @@
+# Lab 2: Circles and Triangles
+
+## Contents
+
+* [Overview](#overview)
+* [External IP](#external-ip)
+ * [Task 1: Understanding the VGA adapter core](#task-1-understanding-the-vga-adapter-core)
+* [Design](#design)
+ * [Task 2: Fill the Screen](#task-2-fill-the-screen)
+ * [Task 3: Bresenham Circle Algorithm](#task-3-bresenham-circle-algorithm)
+ * [Task 4: The Reuleaux Triangle](#task-4-the-reuleaux-triangle)
+* [Deliverables and Evaluation](#deliverables-and-evaluation)
+ * [Marks Breakdown](#marks-breakdown)
+* [Autograder Marking Process](#autograder-marking-process)
+ * [Autograder Marks](#autograder-marks)
+
+
+## Overview
+
+In this lab, you will get more experience creating datapaths and state machines. You will also learn how to use an embedded VGA adapter core that we will give you to draw images on the screen.
+
+The top level diagram of your lab is shown below. The VGA Core is the part given to you, so all the excitement will be in the block labeled “your circuit.”
+
+<p align="center"><img src="figures/top_level.png" width="75%" height="75%" title="top-level design"></p>
+
+## External IP
+
+In the digital design industry, most designs incorporate modules provided by another team or another company. In this lab, we provide you with a VGA adapter core that converts a framebuffer view of the screen to the actual signals expected on the physical VGA port.
+
+### Task 1: Understanding the VGA adapter core
+
+The VGA adapter was created at the University of Toronto for a course similar to CPEN 311. The description below is enough for you to use the core, but you can find the complete specification at [the original site](http://www.eecg.utoronto.ca/~jayar/ece241_07F/vga). Some of the following figures have been taken with permission from that website (with permission).
+
+The VGA adapter has been set up to display a grid of 160×120 pixels, only _slightly_ worse than the [Atari 2600](https://en.wikipedia.org/wiki/Atari_2600_hardware). The interface is as shown below:
+
+<p align="center"><img src="figures/vga_adapter_ifc.jpg" width="50%" height="50%" title="VGA adapter interface (source: UofT)"></p>
+
+| Signal | Direction | Semantics |
+| --- | --- | --- |
+| resetn | input | active-low reset |
+| clock | input | 50MHz clock |
+| colour[2:0] | input | pixel colour (3 bits), each bit indicating the presence of one of the RGB components |
+| x[7:0] | input | x coordinate of pixel to be drawn (0 ≤ x < 160) |
+| y[6:0] | input | x coordinate of pixel to be drawn (0 ≤ x < 120) |
+| plot | input | active-high plot enable signal |
+| VGA_CLK | output | VGA clock (25 MHz) |
+| VGA_R[9:0] | output | VGA red component |
+| VGA_G[9:0] | output | VGA green component |
+| VGA_B[9:0] | output | VGA blue component |
+| VGA_HS | output | VGA horizontal sync |
+| VGA_VS | output | VGA vertical sync |
+| VGA_SYNC | output | VGA special synchronization mode |
+| VGA_BLANK | output | VGA special blank mode |
+
+You will connect all outputs of the VGA core directly to the appropriate output pins of the FPGA. The VGA core will then continuously draw pixels on a VGA monitor connected to your board.
+
+You can picture the VGA pixel grid as shown below. The (_x_,_y_) position (0,0) is located on the top-left corner and (159,119) is at the other extreme end. The pixel colours are stored in each cell. This grid is stored in on-chip memory, and is called a framebuffer.
+
+<p align="center"><img src="figures/pixel_grid.png" width="60%" height="60%" title="screen coordinates (source: UofT)"></p>
+
+Initially, all pixels have a value that depends on how the FPGA was powered up (black if you're lucky) because the framebuffer is just a memory on the FPGA. To change the colour of a pixel, you must write to the framebuffer memory. To do this, you drive the _x_ input with the x position of the pixel, drive the _y_ input with the y position of the pixel, and _colour_ with the colour you wish to use. You then raise the _plot_ signal. At the next rising clock edge, the new colour is written to the framebuffer. At some point in the near future, during the next screen refresh cycle, the entire framebuffer is read out and all of the then-current pixel colours will be drawn on the screen.
+
+In the following timing diagram, two pixels are turned on: one at (15,62) and the other at (109,12). As you can see, the first pixel drawn is green and is placed at (15,62), while the second is a yellow pixel at (109,12). It is important to note that, at most, one pixel can be turned on each cycle — thus, if you want to turn on _m_ pixels, you need _m_ cycles.
+
+<p align="center"><img src="figures/interface_timing.png" width="80%" height="80%" title="VGA interface timing (source: UofT)"></p>
+
+The source code for the VGA adapter is in the `vga-core` folder in this repository.
+
+To help you understand the interface, we have created a `vga_demo.sv` file which connects the core I/O to switches on the DE1-SoC so you can experiment. We suggest you understand this module and try it out to make sure you understand how the inputs of the core work. (Note that you will not use this file for the other tasks in this Lab.)
+
+#### VGA bus widths on the DE1-SoC, DE10 Lite, and DE0-CV
+
+The VGA module we have provided has 10 bits of precision for the VGA red, green, and blue component signals. The DE1-SoC FPGA board we are using, though, has a DAC with only has 8 bits of precision for the same signals (you can see this in the pin assignment file). This means that you need to take the 8 most significant bits output by the VGA adapter core to drive the board outputs. (If you are using the DE0-CV or DE10 Lite, the DAC is even less accurate and only has 4 bits of precision for the three signals.)
+
+#### Simulation with the VGA core
+
+To simulate the VGA core in ModelSim, you will need to load the `altera_mf_ver` library to provide the block RAMs and PLL modules needed by the VGA core. For post-synthesis simulation, you will additionally require `cyclonev_ver`, `altera_ver`, and `altera_lnsim_ver` to model the FPGA logic cells, registers, and internal memories.
+
+We have also hacked up a simulation GUI similar to the one from Lab 1. It intercepts the signals passed to the VGA adapter and draws the pixels in an on-screen window. You need to load the `de1_vga_gui.tcl` script as you did for the GUI in Lab 1 (quo vide); the SystemVerilog component is included in the VGA adaptor Verilog (at the end of the file). If you wish, you can use this in conjunction with the fake DE1-SoC GUI from Lab 1, which might be helpful for Task 1; read Lab 1 for details.
+
+Note that your testbenches must not access any VGA adapter internals and must not depend on the GUI.
+
+#### Verification with the VGA core
+
+So how do you verify that things are working?
+
+Well, if you were really building a chip, you would verify the entire thing end-to-end by checking that the analog VGA outputs are exactly what they should be. But to save you some time (and learning the finer points of VGA signalling), we will not require you to test the VGA core itself — i.e., for this lab, it will suffice to test the inputs that go into the VGA core.
+
+This is easy to do with the RTL, since you can reach in and look at what is being fed to the VGA core. But what about the post-synthesis netlist? All those signals will have gone away, so you can't reach in and examine them using hierarchical naming.
+
+To help you with this, we have provided external ports for the VGA core inputs in the toplevel files. These ports will survive synthesis (and, indeed, be assigned pin locations on the FPGA), so you will be able to access them to validate your post-synthesis netlist.
+
+
+
+## Design
+
+### Task 2: Fill the Screen
+
+You will first create a simple circuit that fills the screen. Each column will be a different colour (repeating every 8 columns). Remember that you can only turn on one pixel at a time, so you would need an algorithm similar to this pseudocode:
+
+ for x = 0 to 159:
+ for y = 0 to 119:
+ turn on pixel (x, y) with colour (x mod 8)
+
+You are to create a circuit that implements the above algorithm. A skeleton file `fillscreen.sv`, and a top-level skeleton `task2.sv`, are in the task2 folder.
+
+**As preparation of the midterm and exams, it is highly recommended that you
+each work individually on this specific task. However, only one solution needs
+to be pushed to GitHub.**
+
+The interface to the `fillscreen` module is as follows:
+
+| Signal | Direction | Semantics |
+| --- | --- | --- |
+| clk | input | clock |
+| rst_n | input | active-low synchronous reset |
+| colour | input | fill colour (ignored for Task 2) |
+| start | input | assert to start filling the screen |
+| done | output | goes high once the entire screen is filled |
+| vga_* | output | outputs to the VGA adapter core |
+
+The user of the `fillscreen` module will assert `start` and hold it high until your module
+asserts `done`. Any time after `done` is received, the user may de-assert
+`start`.
+After `start` is deasserted, your module should deassert `done` and must be
+prepared for the possibility that `start` may be immediately asserted again.
+
+You will need to ignore the `colour` input for Task 2, but it will be useful for the later tasks.
+
+The `task2` module is the toplevel module you will load into the FPGA. It should instantiate the VGA adapter and your `fillscreen` module.
+Upon asserting _reset_ (KEY3, active-low, synchronous) and with no other user activity, it should automatically start the process of filling the entire screen with black pixels. Due to the internal workings of the VGA adapter, clearing the screen can only be done by setting each pixel individually to a certain colour - we will use black (000) as the clear screen colour. After reset (which included clearing the VGA screen), the circuit waits for `start` to be asserted. Upon asserting `start`, the circuit proceeds to plot the vertical stripes as per the pseudocode above. At any point in time, if the `reset` signal is asserted, the circuit should initialize all the flip-flops in "your circuit" and clear the screen. Plotting the vertical stripes must be finished in 19,210 cycles of CLOCK_50 from the time the `start` input is _asserted_, i.e., one cycle per screen pixel plus 10 extra cycles; you will need to finish drawing and then assert `done` at some point within that time budget.
+
+Note that you are using CLOCK_50, the 50MHz clock, to clock your circuit. This is different than Lab 1 where you used a pushbutton switch for your clock.
+
+Exhaustively test your design by writing a testbench and simulating everything in ModelSim (hint: look at the counters first). You will need to demonstrate and submit comprehensive testbenches both for the fillscreen module and the toplevel module, with separate RTL and netlist testbenches.
+
+Make sure your pixel colours are correct.
+
+
+### Task 3: Bresenham Circle Algorithm
+
+The Bresenham Circle algorithm is an integer-only circle-drawing algorithm. The basic algorithm is described in the following pseudocode (modified from Wikipedia):
+
+ drawCircle(centre_x, centre_y, radius):
+ offset_y = 0
+ offset_x = radius
+ crit = 1 - radius
+ while offset_y ≤ offset_x:
+ setPixel(centre_x + offset_x, centre_y + offset_y) -- octant 1
+ setPixel(centre_x + offset_y, centre_y + offset_x) -- octant 2
+ setPixel(centre_x - offset_x, centre_y + offset_y) -- octant 4
+ setPixel(centre_x - offset_y, centre_y + offset_x) -- octant 3
+ setPixel(centre_x - offset_x, centre_y - offset_y) -- octant 5
+ setPixel(centre_x - offset_y, centre_y - offset_x) -- octant 6
+ setPixel(centre_x + offset_x, centre_y - offset_y) -- octant 8
+ setPixel(centre_x + offset_y, centre_y - offset_x) -- octant 7
+ offset_y = offset_y + 1
+ if crit ≤ 0:
+ crit = crit + 2 * offset_y + 1
+ else:
+ offset_x = offset_x - 1
+ crit = crit + 2 * (offset_y - offset_x) + 1
+
+In this task, you are to implement a circuit that draws a circle with its centre at specified coordinates, a specified radius, and a specified colour. The interface to this `circle` module is as follows:
+
+| Signal | Direction | Semantics |
+| --- | --- | --- |
+| clk | input | clock |
+| rst_n | input | active-low synchronous reset |
+| colour | input | drawing colour |
+| centre_x | input | the x-coordinate of the centre |
+| centre_y | input | the y-coordinate of the centre |
+| radius | input | the radius in pixels |
+| start | input | assert to start filling the screen |
+| done | output | goes high once the entire circle is drawn |
+| vga_* | output | outputs to the VGA adapter core |
+
+As with the `fillscreen` module, the user will assert `start` and hold it high until your module asserts `done`.
+After `start` is deasserted, your module should deassert `done` and must be
+prepared for the possibility that `start` may be immediately asserted again.
+
+Your `circle` module must work for _any_ centre and radius inputs, _including_ centres and radii where parts of the circle would be off the screen (in which case you must draw only the on-screen parts). Any pixels whose coordinates fall outside of the screen area must not be drawn. It must only write pixels on the circle; it must not write other background pixels (i.e., do not fill the screen inside circle).
+
+The clock cycle budget you have for `circle` is the number of pixels that are actually drawn for the circle with the specified radius, plus 10 extra cycles. This budget includes pixels that _would have been_ drawn if the circle fit on the screen. You must assert `done` within the cycle budget to receive full credit.
+
+Upon `reset` (KEY3, active-low, synchronous) your circuit should initialize all flops/registers in "your circuit" and clear the VGA screen, identical to task 2.
+Subsequently, upon `start` being asserted,
+your top-level module `task3` should fill the screen with black pixels and draw
+a pure-green circle with the centre at (80,60) and a radius of 40. The clock
+cycle budget for this is 19,200 plus your `circle` budget plus 10. Note that
+you must clear the screen to black even if on your board is initially black;
+the initialization state of circuits cannot in general be relied upon.
+You should test your `circle` module with different radii, not just what the
+top-level module uses.
+
+
+In designing the datapath for this algorithm, remember that you can only update
+one pixel per clock cycle. This means that each iteration through the loop
+should take at most 8 clock cycles to draw one pixel in each octant.
+
+As before, you will need to demonstrate and submit comprehensive testbenches both for the circle module and the toplevel module, separately for RTL and for the netlist.
+
+Be especially careful that your pixel positions are **exactly correct**.
+
+<!-- The autograder will treat the screen as initially undefined, and it will
+compare the pixels you output against the reference solution, looking for
+pixels that overlap, extra pixels, and missing pixels. If you draw a circle in
+a different place than requested or with an incorrect radius, it is not likely
+that many pixels will overlap.
+-->
+
+
+
+### Task 4: The Reuleaux Triangle
+
+This task requires you to draw a [Reuleaux triangle](https://en.wikipedia.org/wiki/Reuleaux_triangle). This is a figure similar to a chubby equilateral triangle, where each triangle side is replaced by a section of a circle centred at the opposite corner:
+
+<p align="center"><img src="figures/reuleaux.svg" title="Reuleaux triangle"></p>
+
+You can think of this figure as the boundary of the intersection of three circles like this:
+
+<p align="center"><img src="figures/construction.svg" height="40%" width="40%" title="Construction by compass"></p>
+
+For the Reuleaux triangle, the _centre_ is defined as the point equidistant from all three corners, while the _diameter_ D is defined as usual as any segment that passes through the centre and whose endpoints lie on the Reuleaux triangle. Observe that this diameter is the same as the length of one side of the inscribed triangle, R1 + R2, and the same as the _radius_ of the three circles used to construct it.
+
+Your job is to write a module which draws this figure with the centre coordinates and the diameter as inputs (pointy end up, as in the figures above). You will probably want to use your circle design and carefully control when the pixels are drawn.
+
+Any fractional coordinates that you may need to compute must be converted to an
+integer using fixed-point calculations. Because there are different ways to do
+rounding, you will want to use these equations compute the location of the
+three corners:
+
+ assign c_x = centre_x;
+ assign c_y = centre_y;
+ assign c_x1 = c_x + diameter/2;
+ assign c_y1 = c_y + diameter * $sqrt(3)/6;
+ assign c_x2 = c_x - diameter/2;
+ assign c_y2 = c_y + diameter * $sqrt(3)/6;
+ assign c_x3 = c_x;
+ assign c_y3 = c_y - diameter * $sqrt(3)/3;
+
+Note that the code given above is not synthesizable. You will have to create a
+synthesizable version that produces the exact same results as these equations
+under simulation.
+
+Because of potential ambiguity in rounding, there may be pixel errors. To minimize these on our side,
+we will only test your triangle with even diameters. To minimize these on your
+side, be careful when clipping (i.e., omitting portions of the circle when
+drawing). Clipping introduces up to four thresholds for the minimum or maximum
+values of x and y. To reduce errors, choose as few thresholds as needed and reuse
+the values already computed as shown above rather than trying to compute any other threshold values.
+
+
+The interface for module `reuleaux` is the same as the one for `circle` from Task 3, except we specify the _diameter_ of the Reuleaux triangle instead of the radius of the circle.
+
+The clock cycle budget you have for `reuleaux` is the number of cycles that would be required to fully draw all three circles used to construct the Reuleaux triangle, plus 15 cycles; this includes pixels that fall outside of the screen coordinates. The `done` signal that indicates you are finished must be asserted within this budget. (Note that this is _a lot_ more than is needed to draw the actual triangle; you might want to think about how you would do it without wasting cycles on pixels you never draw.)
+
+Upon asserting `start` and with no other user activity,
+your top-level module `task4` should fill the screen with black pixels and draw
+a green Reuleaux triangle with the centre at (80,60) and a diameter of 80. The
+cycle budget is 19,200 plus your `reuleaux` budget, plus 10 cycles. `Reset` must work identical to task 2 and 3.
+
+
+As before, you will need to demonstrate and submit comprehensive testbenches both for the reuleaux module and the toplevel module, both for the RTL and the netlist.
+
+As with the circle task, be especially careful that your pixel positions are **exactly correct**.
+
+<!-- The autograder will compare pixel positions against a reference solution.-->
+
+
+
+## Deliverables and Evaluation
+
+Demo and grading process are described separately on Canvas. I will leave the previous
+marking process below for you, so you know what you're missing. **Do** keep the
+file names and structure as per the instructions in the "Old Marking Process"
+shown below.
+
+In this lab (and future labs), you might need separate testbench files for RTL
+(original source Verilog) and post-synthesis netlist (the `.vo` file generated
+by Quartus). You will probably start the post-synthesis netlist testbench
+(`tb_syn_*`) by copying a complete RTL testbench (`tb_rtl_*`), but often you need
+to make changes to the netlist version, e.g. a different timespec, add extra tests,
+change the clock period and other time delays, etc.
+
+### Marks Breakdown
+
+#### Task 1
+
+No deliverables.
+
+
+#### Task 2 [1 mark]
+
+Deliverables in folder `task2`:
+
+- Modified `task2.sv` (the toplevel)
+- Modified `tb_rtl_task2.sv`
+- Modified `tb_syn_task2.sv`
+- Modified `fillscreen.sv`
+- Modified `tb_rtl_fillscreen.sv`
+- Modified `tb_syn_fillscreen.sv`
+- Modified `README.md` describing the work done by each member of the team
+- Any other modified/added source/testbench files for your design
+- Do not copy the VGA files into the task files; this will conflict with the autograder's custom VGA module
+- It is highly recommended that you each work individually on this specific task. However, only one solution needs to be pushed to GitHub.
+
+#### Task 3 [4 marks]
+
+Deliverables in folder `task3`:
+
+- Modified `task3.sv` (the toplevel)
+- Modified `tb_syn_task3.sv`
+- Modified `tb_rtl_task3.sv`
+- Modified `circle.sv`
+- Modified `tb_rtl_circle.sv`
+- Modified `tb_syn_circle.sv`
+- All `*.stats.rpt` files showing coverage results for all testbench files.
+- Modified `README.md` describing the work done by each member of the team
+- Any other modified/added source/testbench files for your design
+- Do not copy the VGA files into the task files; this will conflict with the autograder's custom VGA module
+- Use GitHub to track collaboration: each member must push their own changes, frequently
+
+
+#### Task 4 [5 marks]
+
+Deliverables in folder `task4`:
+
+- Modified `task4.sv` (the toplevel)
+- Modified `tb_rtl_task4.sv`
+- Modified `tb_syn_task4.sv`
+- Modified `reuleaux.sv`
+- Modified `tb_rtl_reuleaux.sv`
+- Modified `tb_syn_reuleaux.sv`
+- All `*.stats.rpt` files showing coverage results for all testbench files.
+- Modified `README.md` describing the work done by each member of the team
+- Any other modified/added source/testbench files for your design
+- Do not copy the VGA files into the task files; this will conflict with the autograder's custom VGA module
+- Use GitHub to track collaboration: each member must push their own changes, frequently
+
+
+## Autograder Marking Process
+
+The autograder will not be used for grading. This section is kept intact for
+legacy purposes.
+
+In the past, the course placed a heavy emphasis on automated testing of labs.
+This section is left here for legacy purposes. **In particular, you should
+follow the rules below about not modifying filenames or module/port/signal
+declarations that have been provided to you.**
+
+We will be marking your code via an automatic testing infrastructure. Your
+autograder marks will depend on the fraction of the testcases your code passed
+(i.e., which features work as specified), and how many cases your testbenches
+cover.
+
+It is essential that you understand how this works so that you submit the
+correct files — if our testsuite is unable to compile and test your code, you
+will not receive marks.
+
+The testsuite evaluates each task separately. For each design task folder
+(e.g., `task4`), it collects all Verilog files (`*.sv`) that do not begin with
+`tb_` and compiles them **all together**. Separately, each required `tb_*.sv`
+file is compiled with the relevant `*.sv` design files. This means that
+
+1. You must not **rename any files** we have provided.
+1. You must not **add** any files that contain unused Verilog code; this may cause compilation to fail.
+1. Your testbench files must begin with `tb_` and **correspond to design file names** (e.g., `tb_rtl_foo.sv` and `tb_syn_foo.sv` for design `foo.sv`).
+1. You must not have **multiple copies of the same module** in separate committed source files in the same task folder. This will cause the compiler to fail because of duplicate module definitions.
+1. Your modules must not **rely on files from another folder** with the exception of the VGA modules. The autograder will only look in the relevant task folder, and will have its own version of the VGA modules.
+1. You must not copy the VGA files into the task folders; this will conflict with the autograder's custom VGA module.
+
+The autograder will instantiate and test each module exactly the way it is defined in the provided skeleton files. This means that
+1. You must not **alter the module declarations, port lists, etc.**, in the provided skeleton files.
+1. You must not **rename any modules, ports, or signals** in the provided skeleton files.
+1. You must not **alter the width or polarity of any signal** in the skeleton files (e.g., everything depending on the clock is posedge-triggered, and `rst_n` must remain active-low).
+1. Your sequential elements must be triggered **only on the positive edge of the clock** (and the negative edge of reset if you have an asynchronous active-low reset). No non-clock (or possibly reset) signal edges, no negative-edge clock signals, or other shenanigans.
+1. You must not add logic to the clock and reset signals (e.g., invert them). When building digital hardware, it is extremely important that the clock and reset arrive at exactly the same time to all your FFs; otherwise your circuit will at best be slow and at worst not working.
+
+If your code does not compile, synthesize, and simulate under these conditions
+(e.g., because of syntax errors, misconnected ports, or missing files), you
+will receive **0 marks**.
+
+You will submit your RTL and you may optionally submit the post-synthesis
+netlist `.vo` file (the autograder will generate its own netlist from your RTL
+and mark that, though).
+
+### Autograder Marks (legacy, AG not used 2025w2)
+
+The evaluation of your submission consists of several parts:
+- *30%*: automatic testing of your RTL code (`*.sv`)
+- *20%*: automatic testing of your RTL testbench coverage (`tb_rtl_*.sv`)
+- *30%*: automatic testing of the netlist we synthesize from your RTL
+- *20%*: automatic testing of your post-synthesis testbench on the netlist we synthesize from your RTL (`tb_syn_*.sv`)
diff --git a/bonus/ball.sv b/bonus/ball.sv
new file mode 100644
index 0000000..0e4c9f3
--- /dev/null
+++ b/bonus/ball.sv
@@ -0,0 +1,11 @@
+module ball(input logic CLOCK_50, input logic [3:0] KEY, // KEY[3] is async active-low reset
+ input logic [9:0] SW, output logic [9:0] LEDR,
+ output logic [6:0] HEX0, output logic [6:0] HEX1, output logic [6:0] HEX2,
+ output logic [6:0] HEX3, output logic [6:0] HEX4, output logic [6:0] HEX5,
+ output logic [7:0] VGA_R, output logic [7:0] VGA_G, output logic [7:0] VGA_B,
+ output logic VGA_HS, output logic VGA_VS, output logic VGA_CLK);
+
+ // instantiate and connect the VGA adapter and your module
+
+endmodule: ball
+
diff --git a/bonus/balls.sv b/bonus/balls.sv
new file mode 100644
index 0000000..06b72d7
--- /dev/null
+++ b/bonus/balls.sv
@@ -0,0 +1,11 @@
+module balls(input logic CLOCK_50, input logic [3:0] KEY, // KEY[3] is async active-low reset
+ input logic [9:0] SW, output logic [9:0] LEDR,
+ output logic [6:0] HEX0, output logic [6:0] HEX1, output logic [6:0] HEX2,
+ output logic [6:0] HEX3, output logic [6:0] HEX4, output logic [6:0] HEX5,
+ output logic [7:0] VGA_R, output logic [7:0] VGA_G, output logic [7:0] VGA_B,
+ output logic VGA_HS, output logic VGA_VS, output logic VGA_CLK);
+
+ // instantiate and connect the VGA adapter and your module
+
+endmodule: balls
+
diff --git a/figures/construction.svg b/figures/construction.svg
new file mode 100644
index 0000000..08d301e
--- /dev/null
+++ b/figures/construction.svg
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1"
+ id="svg2718" inkscape:output_extension="org.inkscape.output.svg.inkscape" inkscape:version="0.46" sodipodi:docname="Construction Triangle Reuleaux.svg" sodipodi:version="0.32" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 530.7 511"
+ style="enable-background:new 0 0 530.7 511;" xml:space="preserve">
+<style type="text/css">
+ .st0{fill:#D4D4D4;stroke:#0000FF;stroke-width:3.5433;}
+ .st1{fill:none;stroke:#000000;}
+ .st2{fill:none;stroke:#000000;stroke-dasharray:11.8201,11.8201;}
+ .st3{fill:none;stroke:#000000;stroke-dasharray:11.8249,11.8249;}
+ .st4{fill:none;stroke:#000000;stroke-dasharray:11.8057,11.8057;}
+ .st5{fill:none;stroke:#0000FF;stroke-width:3.554;}
+ .st6{fill:none;stroke:#FF0000;stroke-width:3.554;}
+ .st7{fill:none;stroke:#008000;stroke-width:3.554;}
+</style>
+<defs>
+
+
+ <inkscape:perspective id="perspective2724" inkscape:persp3d-origin="372.04724 : 350.78739 : 1" inkscape:vp_x="0 : 526.18109 : 1" inkscape:vp_y="0 : 1000 : 0" inkscape:vp_z="744.09448 : 526.18109 : 1" sodipodi:type="inkscape:persp3d">
+ </inkscape:perspective>
+</defs>
+<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" guidetolerance="5" id="base" inkscape:current-layer="layer1" inkscape:cx="607.40618" inkscape:cy="764.09947" inkscape:document-units="mm" inkscape:guide-bbox="true" inkscape:object-nodes="true" inkscape:object-paths="true" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:window-height="1005" inkscape:window-width="1280" inkscape:window-x="-4" inkscape:window-y="-4" inkscape:zoom="0.5" pagecolor="#ffffff" showgrid="false" showguides="true">
+ </sodipodi:namedview>
+<g id="layer1" transform="translate(285.23624,-35.071592)" inkscape:groupmode="layer" inkscape:label="Layer 1">
+ <path id="path3553" class="st0" d="M-20.9,211.7c-52.2,30.2-87.3,86.7-87.3,151.4c25.6,15,55.6,23.5,87.6,23.5
+ c31.7,0,61.7-8.5,87.6-23.5l0,0C66.5,298.7,31.3,241.9-20.9,211.7z"/>
+ <g id="path3589">
+ <g>
+ <polyline class="st1" points="-107.3,360.7 -108.8,363.1 -105.7,363.1 "/>
+ <line class="st2" x1="-99.9" y1="363.1" x2="60.7" y2="363.5"/>
+ <polyline class="st1" points="63.4,363.5 66.5,363.5 64.9,361 "/>
+ <line class="st3" x1="62.2" y1="355.8" x2="-18.1" y2="216.9"/>
+ <polyline class="st1" points="-19.6,214.2 -21.2,211.7 -22.7,214.2 "/>
+ <line class="st4" x1="-25.4" y1="219.4" x2="-105.7" y2="358"/>
+ </g>
+ </g>
+
+ <path id="path2750" sodipodi:cx="425.73569" sodipodi:cy="698.96478" sodipodi:rx="355.40839" sodipodi:ry="355.40839" sodipodi:type="arc" class="st5" d="
+ M241.4,363.1c0,96.8-78.5,174.9-174.9,174.9c-96.8,0-174.9-78.5-174.9-174.9l0,0c0-96.8,78.5-174.9,174.9-174.9
+ S241.4,266.7,241.4,363.1L241.4,363.1z"/>
+
+ <path id="path3538" sodipodi:cx="425.73569" sodipodi:cy="698.96478" sodipodi:rx="355.40839" sodipodi:ry="355.40839" sodipodi:type="arc" class="st6" d="
+ M154.1,211.7c0,96.8-78.5,174.9-174.9,174.9c-96.8,0-174.9-78.5-174.9-174.9l0,0c0-96.8,78.5-174.9,174.9-174.9
+ C75.6,36.8,154.1,115.3,154.1,211.7L154.1,211.7z"/>
+
+ <path id="path3540" sodipodi:cx="425.73569" sodipodi:cy="698.96478" sodipodi:rx="355.40839" sodipodi:ry="355.40839" sodipodi:type="arc" class="st7" d="
+ M66.5,363.1c0,96.8-78.5,174.9-174.9,174.9c-96.8,0-174.9-78.5-174.9-174.9l0,0c0-96.8,78.5-174.9,174.9-174.9
+ S66.5,266.7,66.5,363.1L66.5,363.1z"/>
+</g>
+</svg>
diff --git a/figures/construction_dimensions.obj b/figures/construction_dimensions.obj
new file mode 100644
index 0000000..d090059
--- /dev/null
+++ b/figures/construction_dimensions.obj
@@ -0,0 +1,1956 @@
+%TGIF 4.2.5
+state(0,37,100.000,0,0,0,16,0,8,1,1,0,2,3,0,1,0,'Helvetica',0,97920,0,0,0,10,0,0,1,1,0,16,0,0,1,1,1,1,1088,1408,1,0,2880,0).
+%
+% @(#)$Header$
+% %W%
+%
+unit("1 pixel/pixel").
+color_info(11,65535,0,[
+ "magenta", 65535, 0, 65535, 65535, 0, 65535, 1,
+ "red", 65535, 0, 0, 65535, 0, 0, 1,
+ "green", 0, 65535, 0, 0, 65535, 0, 1,
+ "blue", 0, 0, 65535, 0, 0, 65535, 1,
+ "yellow", 65535, 65535, 0, 65535, 65535, 0, 1,
+ "pink", 65535, 49344, 52171, 65535, 49344, 52171, 1,
+ "cyan", 0, 65535, 65535, 0, 65535, 65535, 1,
+ "CadetBlue", 24415, 40606, 41120, 24415, 40606, 41120, 1,
+ "white", 65535, 65535, 65535, 65535, 65535, 65535, 1,
+ "black", 0, 0, 0, 0, 0, 0, 1,
+ "DarkSlateGray", 12079, 20303, 20303, 12079, 20303, 20303, 1
+]).
+script_frac("0.6").
+fg_bg_colors('white','white').
+dont_reencode("FFDingbests:ZapfDingbats").
+objshadow_info('#c0c0c0',2,2).
+rotate_pivot(0,0,0,0).
+spline_tightness(1).
+page(1,"",1,'').
+ppm_true('black','#ffffff',0,64,64,864,834,0,0,800,770,0,0,0,0,0,1,88215,0,[
+ "/9j/4AAQSkZJRgABAQABLAEsAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgG",
+ "BgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMD",
+ "AwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ",
+ "EBAQEBAQEBAQEBAQEBD/wAARCAMCAyADAREAAhEBAxEB/8QAHQABAAICAwEBAAAA",
+ "AAAAAAAAAAgJBgcBBAUCA//EAF4QAAEDAwIDBQQFBgkJBQUECwEAAgMEBQYHEQgS",
+ "IQkTMUFRFCJhcTJCUoGRFSNicoKhFiQzQ1NzkqKxFxg0Y4OTo8HCVLLD0dIlZLO0",
+ "02aUltQZJjVER1ZXZXaExP/EAB0BAQACAwEBAQEAAAAAAAAAAAAGBwQFCAMCAQn/",
+ "xABSEQACAQIDAwcIBwYEBQIFAwUAAQIDBAUGESExQQcSUWFxgZETFCIyobHB0QhC",
+ "UmJy4fAVIzOCkqIWJLLCQ1Nj0vElgxc0RJOzJnOj4kVGw9P/2gAMAwEAAhEDEQA/",
+ "ALU0AQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAE",
+ "AQBAEBx4eKA/GsrqO3076uvq4aaCMbvlmkDGNHqXHYBfMpKC1k9EetGjUuJqnSi5",
+ "Se5JavwRqnLuLLh6wsyRXXU+01E8fQw25zq1+/p+ZDgD8yFq6+O4fb7J1U31bfcT",
+ "3CeSvN+M6SoWM4xfGelNf3tPwRpzJ+0p0tt5dFiuF5FeHt8H1Bio4nfI7vd/dWnr",
+ "ZwtYbKUJS8F8yxsN+jljtxpK/uaVJdXOm/dFe01XkPaYaj1Ye3GNPsdtgP0TWTTV",
+ "bh/ZMY/ctVVzjcy/hU0u3V/Inlh9G/BqWjvrypU/CowXtU37TEncXfGJnG7cXqK0",
+ "Nd15bNjjJfwJje796xf29jFz/C1/lj+TJAuSbk5wT/55R1/6tZr2c6K9h9CPtA8y",
+ "bzA6msbL+k+gaf8A4YCaY/cfb93yPznckeDvT/KtrsqP/cfLeGLjcyIGS50uQO5v",
+ "E1+UR7/eDOU/Y2N1fWT75L5n6+Urkxw/ZQlT/koS+FNHP+YbxO3H/TobW3m8e/vg",
+ "f/hzJ/hjE5+tp/Ufn/xzyPb/AMJz7qTXv0PpvZ2cQJ8ZMXb87o7/AJRL9/wnf/d8",
+ "fyPl/SCyiuFX+hf9xwezx4hYTzxHGnEeHJdXA/vjC/P8KYgt3N8fyP1fSAyhLZLy",
+ "vfTX/ccf5kfFhavettNC4t8PZchYw/3nNT/DmKw9X2SP3/405AutlaT/AJqLfuTO",
+ "Bobx34o/nt0eaxBvnQ5K2Qfg2fr+Cfs3HaHq87ul+Z+vO3JVii0rOg/x0Gva6Zy/",
+ "NOP7CvzlSdR2tZ9aptbq1n4ujeCjucftt/P71r8GfkcG5JcZ2Q822/ZqKD9kos/a",
+ "j48+JzFJmwZJDaqx7Ts5l0spgef92Y+v3L9jmfE6D0qaPtjp7tDzrchmSMUi5WTn",
+ "FdNOrzl/cpmwMc7Te7xubHlmlVHOD9KW23J0RHyZIx2/9pbCjnKa/i0l3P56kRxD",
+ "6NdvJa4ffyXVOCfti4+42zivaIaCX3u4742/49I7o51XQ99ED+tA552/ZC2tDNlh",
+ "V2T1j2rX3akAxT6P2bLLV2vk6y+7Lmvwmor2m6cQ1w0hz3lZiOo1guMr/CBlaxk/",
+ "+6eQ/wDctzb4laXX8Gon37fDeVri2Ssw4Fq8Qs6kEuLi3H+pax9pm+49VnEXOUAQ",
+ "BAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEA",
+ "QBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAE",
+ "B4eV5xh2C243XMsntllpADtLXVTIQ7bybzHdx+A3K8K9zRto86tJRXW9DaYVgmI4",
+ "5W8hhtCdWXRGLl46bu16IjZqF2i2kGNmWkwi13XLKpm4bIxnsdISP9ZIOc9fSP71",
+ "HLvNtnR2UE5vwXt2+wujAPo95ixHSpilSFtF8G+fPwj6PjLuI85Lx08SGpdcbLp/",
+ "QQWYze7HTWS3uq6tw9Od4ed/i1rVH62ZcRvJcy3XN6orV/H3Fv4dyI5My5S85xeb",
+ "q6b5VZqEF3JxXi2dGj4W+L/Wqpbcs0jukTHkEVGU3VzeXf0hJfI35cgXnHBcXxF8",
+ "6tr/ADP4bX7DKrcp3J3k2Do4a4NrhQpp6/zaRi/6mbXxHsyY+VsueaoPJO3PT2eh",
+ "AA9dpZT/AOGtrQyat9er4L4v5EBxb6SctXHCrHvqS/2xX+43Ni/Abw5Y4GPq8Xrb",
+ "7Mwfyl0uEj9z8WRljD+C3NHLGHUd8XLtb+GiK3xPlyzliOqp140U+EIRXtlzpe02",
+ "tjujulOJBpxrTjG7c9nhJT2yFsn9vl5v3raUsPtaH8OnFdyIFiGbsfxXXz29qzT4",
+ "OctPDXT2GWsjjjaGRsDGt6BrRsB9yy9NCPOTk9XvPrYei/T8GwHgEBygCAIAgONh",
+ "6BANggOvXW23XOE09xoaeqicNiyeJsjSPk4FfMoRmtJLU9qFzWtpc+jNxfSm0/Ya",
+ "9yThr0GywON60oxxz3/Slp6NtLIf24eV371r62D2Ff16UfDT3aEvw7lGzXhWnm1/",
+ "V0XByc14T5yNSZV2dWhd5a9+PVWQY9L4sFPWCoiHzbM1ziP2gtTXynY1P4bce/X3",
+ "/MsHC/pB5ps2leRp1lx1jzX4waX9ppTMuzTz63CSowbPrPeGt6thr4X0UpHoC3vG",
+ "k/MtWluMn14baFRS7dnzLMwf6R+E3GkMUtJ0n0wamvB8x+xmDGy8b/DwS+lZmNHb",
+ "6c+NNJ+U6ANHmWjvI2j5gLC8njeE7uckuj0l8USjz3kw5QNlTyEqkvtLyVTx9CT7",
+ "mzOcD7SbPrS9lHqLhVsvcTTyvqKB7qOoHqS08zHH4AMWba5vr09lxBS61sfxXuIv",
+ "jn0c8Juk6mDXMqT4Kek49z9GS7dZEmNOuNnQDUF0NIcqdjtfLsBS3yP2bqfITbmI",
+ "9f0wfgpLaZjsLrRc/mvols9u72lJ5h5GM24ApVPIeXpr61J87+3ZP+3vN6U1XTVt",
+ "PHV0lRHPBK0OjkjeHMeD4EEdCPkt5GSktU9hVtWlOjN06iakt6exrtR+q/TzCAIA",
+ "gCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI",
+ "AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgON0BpXVji90S",
+ "0l76iuOStvN3i3Btlo5aiZrh5PcCI4/iHOB+BWlvsesrHWMpc6XQtr+SLLyryS5n",
+ "zXzatGh5Ki/r1NYrTqWnOl3LTrIhagcfWteo1f8Awf0ssjcciqnGOCOihNdcZt/I",
+ "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",
+ "xGtKrUfGTbfYuhdS0SPaXsa0IAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA",
+ "IAgOPFAay1d4cdJ9aqV/8McbibcuXliu1HtDWx+n5wD3wPsvDm/Bay/wi0xFfvo7",
+ "elbH4/Mm+U+UPMGTZr9nV35PjTl6UH/Lw7YtPrIMao8GmtuhF0/hxpbda6+0FC4y",
+ "xV1o54bjSAdd3xMPMRt4ujLhtvuGhQe9y9e4ZLy9q3JLitkl3fI6kyzywZYzzQ/Z",
+ "eO040ak9jjU0lSn2SexPoUkn0Nsz3QvtEa6ifBjeutC6oiBEbb7RQgSs8t54G9Hf",
+ "F0YB6fQJ6rPwzNko6U75fzL4r5eBFM7/AEfaVZSvcqz5r3+Sk9j/AATe7qUtV95E",
+ "48YyrHMzstNkWKXqjuttq280NTSyiRjvUbjwI8CD1B6EBTejXp3EFUpSTT4o5exL",
+ "C7zB7mVnf0pU6kd8ZLR/+OhrY+B6q9TACAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA",
+ "IAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC",
+ "AIAgCA6tzudus1BUXW719PRUdLGZZ6iokEccTB4uc52wAHqV8znGnFzm9Ej3trat",
+ "eVY0LeDnOT0SSbbfQktrZBziF7Qcg1OJaENBO5ilyKeLceh9micOv9Y8fJvg5QjF",
+ "c1b6Vj/V8l8X4HUOQOQL1cQzV2qin/8Akkv9MX2y3owDRfgr1R1tuQz7V+6XGy2q",
+ "4PFRLNWuMl0uAPXmDZNzGCPrydfDZpHVYGHZdusSl5e8bjF7dvrPx3dr8CW5x5Zc",
+ "CyZR/ZOXacatWC5qUdlKn1Nx9Zr7Me+SZPvTTSPT7SKyCw4FjdNbYSB38oHNPUuH",
+ "1pZT7zz8zsPIAdFPLOwt7CHk6EdF7X2vicmZkzXi+bLrzvFqzqPgt0YrojFbEuza",
+ "+LbMxWYR0IAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA4QGhd",
+ "eODnS/WltReIKVuOZPIC4XWhiG0z/wD3iLo2X9bo/wDS26LQ4nl+1xHWaXNn0r4r",
+ "j7y18jcr2OZNcbaUvL2y/wCHJ7l9yW1x7NseriQjrLVxI8EWYCsp5pae3VUuwni5",
+ "qi03QD6r2nYB+3k7lkHXY7dVCpQxLLdbnLc++L/XczpyjdZL5acO8nNJ1Irc9I1q",
+ "fWnt2a8VzoPjt2E1+HrjF0+1vZBYa9zMdywtANsqZQWVTvM00h25/XkOzx16OA5l",
+ "NMJzBb4lpTl6NTofHsfHs3nM+f8AkixfJTld0v39r9uK2x/HHh+JaxfSm9CQC35U",
+ "gQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBA",
+ "EAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAYBrFrhgGh+NuyDNboGSSBwo6CHZ1V",
+ "WvH1Y2b+Hhu47Nbv1PhvgYhiVvhtPylZ9i4vsJblDJWLZ1vVaYZT1S9ab2QgumT9",
+ "yWrfBFdud6sa78aGax4djFqqGWrvO8p7JRyEU1OwH+XqpTsHEfbfsAejWgnY17dX",
+ "19mGt5GkvR+yty62/i+47CwPKuVeRzDHiN9UTq6aOrJenJ/Zpx2ta/Zjq3vk2lsl",
+ "5w68E2DaQNpsly4U+TZYzZ7Z5I96Sif/AKiN3i4H+ccObpu0MUtwnLlCw0qVvTqe",
+ "xdi+PuOeeUHlnxTNrlZYfrQtHs0T9Oa+/Jbk/sR2dLkSUA2UkKWOUAQBAEAQBAEA",
+ "QBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEB59+x+yZRaKmw5FaqW5W",
+ "6tYY6ilqohJFI30LT0P/ACK86tKFaDp1FqnwZl2N/dYZcQu7Oo6dSL1Uotpp9TRA",
+ "viJ4Brtjck+b6Ee01tHE7v5LEXl1XT7deamf4ygeTCecbdC89BBMWyvOjrXsdq+z",
+ "xXZ09m/tOreT7l2t8RUcLzVpGb2KrppCXDSot0W/tL0XxUT54cOPG8YxPT4FrtJU",
+ "1dDE72eK+PY51VSEHblqW/SkaPAv25xt1DvJhGZ50WqF9tX2uK7ent39p9conIbb",
+ "YnCWLZVSjN7XSTXMlx1pvdFv7Pqvg48Z92q7Wy+26mu9muFPXUNZGJqepp5BJHKw",
+ "+DmuHQg+oU8hUjVipweqfE5NurWvY1pW9zBwnF6OLWjTXBp7Uztr7McIAgCAIAgC",
+ "AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAg",
+ "CAIAgCAIAgCAIAgCAIAgI98TfF1iuhNHJj9mFPesynj3ioA/eKjBHuyVJHUDzEY9",
+ "536IPMo/jOPUsMj5OHpVOjo638t5bvJtyT3+eKiu7nWlZp7Z6bZ6b4w139Dk/RXW",
+ "9hDfS3RLWTjHzWoz3M7zVRWd83LW3yqZu0hp/wBHpI+jTt4bN2Yzz69DD7LDbzMF",
+ "Z3FZ+jxk/cl+kjo/M+dMt8kOGRwnDaadZL0aUX0/XqS2vb0vWUuGzarG9LdJME0d",
+ "xqPF8EssdFTDZ08zvenqpAP5SaTbd7v3DwAA6KxLKwoYfT8lQjova+1nG2Z814rm",
+ "+9d9itXnS4LdGK6Irgva97be0zFZhHAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA",
+ "IAgCAIAgCAIAgCAIAgCAIAgCAIAgI7cSnB1h2t0E+R4+KewZiGlwrmM2hriPBtS1",
+ "vifISD3h58wACj2MZfo4knUp+jU6eD7fnv7S4uTnlexHJc42V3rWs/s6+lDrpt/6",
+ "X6L4c17SHemGtOsvBtnE+CZlaKqSztm5q2yVL/cLXH/SKSTq0E7b8zd2P8D1G7Yh",
+ "ZYjeZfruhWXo8Yv3p/pM6KzNk3LfK/hccVw2olW09GrFbdV9SpHfs6H6Ud62bHZF",
+ "ppqfhereL0+XYPeI66in917foy08m3WKVnix49D4+IJBBVjWd7Rv6Sq0Hqvd1M4x",
+ "zHlnEsqX0sPxSm4TW7okuEovin09z0eqMrWUaEIAgCAIAgCAIAgCAIAgCAIAgCAI",
+ "AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA",
+ "iLxbcaNJpyKvTjSyshq8pIMVdcW7PitfkWt8nz/D6LPPc+6IljuYVaa29q9Z8XwX",
+ "5+46E5KeRypmFwxnHouNrvjDc6nW+Kh7ZcNFtemuGDg5v2r9bHqnrK+uisFVKauK",
+ "nnkcKu8ucdzI9595sTj15vpP8th7y0+C5fqX8vOrzXmPbpxl+XtftLI5TOV60ylS",
+ "eBZbUXXiua2kuZSS2aJbnNdHqx46v0SxO02i12G201nstvp6Gho4mw09NTxiOOKM",
+ "DYNa0dAArCp040oqEFolwOO7q7r31aVzczc5yerk3q23xbe87i+zHCAIAgCAIAgC",
+ "AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgNd61aF4Jrp",
+ "jD8fy+gAqIg51BcoWgVNFIfrMcfFp6czD7rvmARr8RwyhidLydZbeD4r9dBMMm53",
+ "xXJF8rvDp+i/Xg/Vmuhrp6JLauzVOuust+t/Axqmyqgk7yiqTtHMA42+9UzT1a4f",
+ "VeN+o+mwncEg7uryUL3LV1qtz8JL9d6OxKNxlfluwF05LScd62eUozfFPin0+rNb",
+ "GtVorD9DNecJ15xVuQYvUdxWU4ay42yZ4M9FKR4O+0w7HleOjgPIggWDhuKUcTpe",
+ "Upb+K4r9cGcf52yLieRr/wA0vlrB68ya9Wa6uhr60XtXWmm9krZELCAIAgCAIAgC",
+ "AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAg",
+ "CAIAgCAIAgCAhVxi8Zn8GjXaUaSXMG7+9BdrxA/pReToIHD+d8nPH0PAe9uWwzMG",
+ "YfI62to/S4vo6l19fDt3dL8kPI9+0vJ4/mCH7nfTpv6/RKa+x0R+tvfo+tjvCHwW",
+ "uuho9WNZ7a50DyKm12Opad5t+rZ6lp+r5tjP0vF3T3Tj4Dl3n6Xd4tm9Rfvfy8Tc",
+ "crPLIrXn4BlufpL0alWPDg4U2uPByW7dHbtU9WMaxoYxoa1o2AA2ACnaWhyi25PV",
+ "n0h+BAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQ",
+ "BAEAQBAEBjOomnWI6p4rWYdmtpjr7dVjwPSSGQfRljd4se3ycPiDuCQca7tKN7Sd",
+ "GstU/wBarrN1l/MOIZYv4YlhlRwqR8GuMZLjF8U+1aPRlaOomnGrfBNqlSZTi9zm",
+ "ktksrhbbo2M9xWReLqWpYOnNsOrPPbmYdx7tbXdpd5culVpP0eD4Pqf660dr5fzF",
+ "l/lnwKdhfQSqJenT19KD3KpTe/TXc+HqyW3bP3h54hsS1/xMXa0ObRXmia1l1tT3",
+ "7yUsh8HNP14nbHlf9x2IIU9wrFqWKUufDZJb10fl0M5Mz/yf4hkPEPN7j0qM9XTq",
+ "JbJLofRJfWj3rVPU2utqQEIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgIa8afF3/AyKr0k0wum2QStM",
+ "V3uUDv8A9nsI6wxuH88R9J31B+kfdh2Yse83TtLV+lxfR1Lr93bu6P5G+Sb9sShm",
+ "DHIfuFtpwf8AxH9qS+wuC+u/u+tjPBnwdd/7DrDq3bOYP5aqy2epZvzebaqdp/Fj",
+ "D8HHyCxsvZf10vLtdcU/e/gu83fLDyvczymXMvT6Y1akfBwg14Skvwriyd4GynRy",
+ "qcoAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIAgPBzjB8Y1Gxiuw/MLVFcLXcI+SWKQdQfJ7T4te09Q4dQQvC5tqV3Sd",
+ "GstYs2uCY3fZevqeI4dUcKsHqmvamuKe5p7GisrUrTjVLgn1ZosqxS5TyWySVxtV",
+ "zLN4quHxfSVLR05ttuZvmNnt2I92tLy0usuXaq0n6PB9K6H+utHbmXMxYFyzZfnY",
+ "X8EqqS8pDjGXCpTe/TXc+Hqy1W+wfQPXbFdesKiyWxPbT19PyxXS2vfvLRzkeB+0",
+ "x2xLX+Y9CCBYGF4nSxSj5Snsa3rofy6GciZ7yPf5FxN2V2udTlq6c9Nk4/CS3Sjw",
+ "fSmm9mLZEJCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIAgCAIAgCAIAgCAIAgIwcZnFPHo7Yzg2E10bszu0O5kaQ78l07v50j+l",
+ "d9Rp8PpHoAHRnMON/s+HkKD/AHj/ALV09vR4l4cj3Jg83XX7UxOL8zpvd/zJL6q+",
+ "6vrP+VbddNJcFnClNnFdDrTqrQyT2oSmotNFVguNxm5t/aZebq6IO6gH6bup90e9",
+ "pcu4G7mSvbpejwT4vpfV7+zfZ3LJypRwSlLLOAySq6aVJR/4cdPUjpuk1va9RbF6",
+ "Xq2FgAdArAOQTlAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQB",
+ "AEAQBAEAQBAEAQBAEAQBAEAQBAY3qHp7iuqOJV+F5jbW1ltr2crh4PiePoyxu+q9",
+ "p6g/4gkHGu7Sle0nRrLVP9arrNzl/H7/ACziFPE8NnzakH3NcYyXGL3NfHRlZl5t",
+ "mqfAvrdFWW+Z1VRScxppnAtprzQFw5o3gfReOm48WP2cNwQTWtSF1lq9TjtXDoku",
+ "j9bmdt2dzgPLdlh06y5s16y3yo1NNjXSnwe6UdU9uullGlOqGL6wYTQZxiVV3lJW",
+ "N5ZInEd7TTDbnhkA8HtJ+RBBG4IKsixvaV/RVek9j9j6GcWZoyzfZSxOpheIR0nH",
+ "c+EovdKPSn7HqntTMvWWR4IAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIDUPEvxAWXQHA5LzL3dVfriH09moHH+",
+ "VmA6yPA690zcFx8/db4uWoxjFYYXQ572ye5dfyX5FhcnGQrnPmKq2jrGhDR1J9Ee",
+ "hfeluXRte5EI+F3QPIuJrUSu1Q1NmqavHqetNRcqiYkOulWTzeztPkwDbn2+i3la",
+ "NtxtCsFwupjNw7q52wT2v7T6Pn1bDp3lNz3Z8m2D08DwRKNxKOkIrdShu57639XX",
+ "fLWT1022a01NT0VPFR0cEcEEDGxxRRtDWMY0bBrQOgAAAACstJRWi3HEdSpOtN1K",
+ "jbk3q29rbe9t8Wz9V+nwEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQB",
+ "AEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQGv9bdGcW1xwarw7JYQyQ7zUFc1gMtF",
+ "UgbNkb6jyc36zSR6EYGJYfSxKg6NTufQ+kluS84X+ScUhiVk9VunHhOPGL96fB7e",
+ "lOu/STUbPeC/WquxPM6Wo/JEk7ae9UTCXMmh/m6yDf6RDTzNP1mlzTsfCvbC7uMv",
+ "XrpVl6P1l1cGv11HYOa8vYTyx5Zp4hhsl5VJulJ71L61OfQm9j6HpJarfaFY73ac",
+ "ks9Hf7FXw11uuEDKmlqYXbsljcN2uB9CCrOp1IVoKpB6p7Uzhu9srjDridpdQcKk",
+ "G4yi96a2NM7y+zFCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIAgCAIAgCAIAgCAIDws4zXHtO8UueaZVXCktdqgdPPJ4k7dA1o+s5ziG",
+ "tHmSAvC5uKdpSlWqvSKNrgmDXmYMQpYbYR51Wo9Eve30JLa3wSKxaaHUPjk4gXPm",
+ "fLS0DjzPI9+Kz2tjujR5F53/AG5HE9B4VmlcZlv9uxf6Y/rxZ2/Ung/InlFKKUqn",
+ "g6tVrf1L/TBab99neFYZj2nuLW3DcVoG0drtUAgp4h1Ow8XOP1nOJLnOPUkkqzLa",
+ "3p2tKNGktIo4exnGLzH7+riV/PnVaj1b+C6ElsS4JaHuL3NYEAQBAEAQBAEAQBAE",
+ "AQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBA",
+ "EBH/AIvOG6m11wv8pWKCOPL7FG6S2y7Ae1R+LqV59HeLSfov9A5y0GPYQsTo86H8",
+ "SO7r6vl1ltck3KLPJGJ+Rum3aVmlNfZe5VEurdLpj1pEbuBbiNqsEyH/ACGag1T6",
+ "a111S6K1Pqt2Ggri4h1O7f6LJHbgA/Rk/WO0cy1i7tanmNw9It7NeD6O/wB/aXPy",
+ "3cnkMcs/8U4RHnVYRTqKO3n09Nk1pvcVx4w/CixAdVYRx8coAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIDhAVtca2u1",
+ "z1l1CpdGNPTNW2i01zaXkpTzflO5k8nu7fSawksb5Fxc7qNtq4zFicsQuFZW+2Ke",
+ "mzjL8tyO0ORrI9DJ+DzzLi+kKtSHO1ls8nS0129DlpzpdC0W/UmPwxaCWzQTTuCy",
+ "uZHLkFyDKq91beveT7dI2n+jjBLW+p5nfWUwwbC44XbqH13tk+vo7Ec5cpWeq+es",
+ "YlcptW8NY0o9EftP70t76Ni4G31tyvAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA",
+ "IAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAICBHH9w5G31Lte",
+ "MKonNjme1uQwQt27uQkBlWNvDmOzXn7XK7zcVA804RzH5/RX4vn8zrDkH5Q/OILK",
+ "mJy2pPyLfFb3T7t8erVcEjdPBbxE/wCWbBP4OZJWc+W41GyKsc8+9WU30Y6n4n6r",
+ "/wBLY/XAW6y7i37RoeTqP95Hf1rg/n+ZWfLJyff4OxXzyyjpaV23HTdCW+UOzjHq",
+ "2fVZI5SIpsIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC",
+ "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",
+ "KdvZrpCS1gPoXbOjPqSz0UGyzeysbx2lXYpbOyS+e7wOqOW/LNHNOXKeYcP9KVBc",
+ "9NfWpSSb8Nk10LndJZSrIOLAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIAgCAIAgCAIAgCAhH2kOrpoLNZ9G7TVbS3Plut2DXdRAxxEEZ/WeHPI/",
+ "1bfVQrN1/wAyEbOD37X2cPbt7jpz6O2U/L3NbMlxHZT/AHdP8TXptdkWo/zPoNs8",
+ "EWkP+S7ReiuFxpe6vWVlt2reYbOZE5v8XiP6sZ5tvJ0jltct2HmVmpSXpT2v4Lw9",
+ "5AOWnNn+Jsyzo0Za0bfWnHobT9OXfLZ1qKJBqQFRBAEAQBAEAQBAEAQBAEAQBAEA",
+ "QBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAE",
+ "AQBAEAQFcPaB6WVWA6oWzV7G2vpabI3NdNLD7vcXODY84I8C9oa8ermPKrrNVk7W",
+ "6jd09il7JL57/E7L5BMz08dwKrl299KVDcn9alPXZ1qL1i+pxRNzQPVGm1i0osGd",
+ "RuYKqrpxFcI2/wA1WR+7M3byHMC4fouaprhd6sQtYV1ve/tW85iz1lieUMfuMKl6",
+ "sXrB9MJbYvw2PrTNhLYERCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI",
+ "AgCAIAgCAIAgCAIAgPwrq2lttFPcK6dkFNSxPmmledmxsaCXOPwABK+ZSUIuUtyP",
+ "WhRqXFWNGktZSaSXS3sS72VZ4lR1fF1xbOr7lHJJaa+4ur6ljv5m1U2wZGfTmY2O",
+ "P9aTdVfQi8exbnS9VvV/hXD3LvO7MVrU+Sfk+VKi0qsIKEX01p75dejcpdkS1GNj",
+ "I2NjjYGtaNg0DYAeQCtJLQ4PlJyer3n0h+BAEAQBAEAQBAEAQBAEAQBAEAQBAEAQ",
+ "BAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEA",
+ "QGruJbSxmsGjl/xGKEPuLYfbrWdurayEF0YHpze8w/B5Wsxiy8/s50Vv3rtW75d5",
+ "OeTjM7yjmO3xCT0p682f4JbJeGyXaiI3ZwaoyWXLr3pDdZnMgvMZuNvjf05KuEbS",
+ "sA9XR7E/1KiWUb3ydaVpPdLau1b/ABXuOhPpEZYV5h9DMVutZUnzJtcYS2xfYpbP",
+ "5ywpWAchBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQB",
+ "AEAQEcuO/Uw4DoXW2aiqO7uWXSi0Q7H3hARzVDvl3Y5P9oFHczXnmti4R3z2d3H2",
+ "bO8uTkOy3+3s007mqtadsvKP8W6C/q9L+UwLs3dMRZsIvWqVfThtTkFR7BQuI6ik",
+ "gPvuHwdKSP8AZBYGULLydCV1JbZPRdi/P3Er+kTmXzzFKGBUn6NFc+X457k+yG3+",
+ "ZkylMTnAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI",
+ "AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIDg9QgKueIux1/DfxYNzPHoHR",
+ "UktfDk1vY0crXMe8meH025xMzb7LgqwxalLCMV8tT3aqS+K8dUd08nt7R5RMgvDb",
+ "x6zUJUJ9KaXoS7ebzXr0plnFgvVvySx2/IbTOJqG50sVZTSD68UjA5p/AhWXSqRr",
+ "QVSG5rVd5xDfWdbDrqpZ3C0nTk4yXQ4vR+1HfXoYgQBAEAQBAEAQBAEAQBAEAQBA",
+ "EAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAVo8e2Z12o2vdv03sZNQ3H4obbBC07",
+ "h9fUlrn7fH3oWfNpVbZouJXd+raG3m6Lvf6SO1uQrB6WXsp1MauvR8s5Tb6KdPVL",
+ "3Sl3lhOm2F0OnWBWDB7cGmGy0ENHzNH8o9rfff8ANz+Zx+JVgWdvG0oQoR3RWhyH",
+ "mLGauYcWuMUrb6s5S7E3sXctF3GSrJNKEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEA",
+ "QBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAE",
+ "AQERu0a04/hDpdbdQqOn5qrFa0MqHBvX2SoIYd/lKIv7RUSzbZ+VtY3C3wfsf56H",
+ "Qf0ecxfs/HauD1H6NxHVfjhq14x53gj3+z/1FOZaHR41VzF9diNW+3EH6Rpn/nID",
+ "8gHPYP6tZGVrvzix8m98Hp3b18u41PL1l79j5od7TWkLmKn/ADL0Zr2KT/ESaUlK",
+ "SCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA6N9vFF",
+ "j1lr79cpO7pLbSy1lQ/7McbC9x/AFfFWpGlB1JbktfAyrG0q39zTtKK1nUkortk9",
+ "F7WVm8I9lrta+Kx2d3uN0raGoq8orNxuBKX/AJlu59JZGEfBirXAacsRxXy8+Gsn",
+ "8PaztnlXvKWTMhLCrV6c+MKEezT0n3xi0+0s/HRWacOHKAIAgCAIAgCAIAgCAIAg",
+ "CAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIAgCAIAgMc1Gw6j1BwS/4TXhvc3q3z0RcfqOewhr/m13K4fELHu7dXVC",
+ "dGX1k0bjL2L1MAxW3xOlvpTjLtSe1d61XeV7cAGX1mCa83HTy7uNOMgpZ6CSF525",
+ "a2lJe3f47Nmb+0q/ytXdrfyt57Ocmu9fpnXvLzhNPHMqUsYt9vkZRmn9ypon7XB9",
+ "xZYrIOKggCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAg",
+ "I/cc+b/wN4eL5TwzCOqyKWGyw9epEh5pf+FHIPvWgzLc+b4fNLfLSPjv9iZbfIlg",
+ "v7YzhQnJaxoKVV/y7I/3OL7jWnZqYMLdgeS6gVEAE16uDKCncfHuKdu7iPgZJSP2",
+ "Frcn23MoTuH9Z6dy/Nk1+kdjbuMVtcIg9lKDm/xTei17Ix9pMxTE5vCAIAgCAIAg",
+ "CAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIAgCAIAgCAIAgCAIAgOD4ICrriPpZ9CuMSTMbdG6KB10o8ngDRtzskcH",
+ "Tt+RkbM35FVji8XhmMeWju1UvHf7dTufk8qxzvycrDqz1l5OdB9TitIPui4MtAo6",
+ "qnrqSGtpJWyQVEbZYnt8HMcNwR9xCs2MlJKS3HDlWlOhUlSqLSSbTXWtjP2X6eYQ",
+ "BAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEBAXtNMxMt2w",
+ "zAYZBtTwVF4qGb+Je4RRbj4Bkv4qB5yuNZ0qC4at+5e5nWP0bcI5tvfYtJes400+",
+ "xc6Xvj4EquGTDf4B6D4Xjz4hHOLXHWVDdtiJqjeZ4PxBk2+5SnBrfzaxpU+Omr7X",
+ "t+JQ3KTjH7czXfXiesfKOK/DD0F7I6m0FsyDhAEAQBAEAQBAEAQBAEAQBAEAQBAE",
+ "AQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBA",
+ "EAQBAEAQBAQU7TXDgYcLz+GP6LqizVL9vIgSwjf7plBs5W+ylcLrT96+J1P9GzF9",
+ "JX2ESf2akV/bL/YSN4S8xOb8PeGXWWXvJ6WgFsnJ8eemcYevxLWNP3qRYFcec4fS",
+ "k96WnhsKb5VcI/Yub763itIynz12VEp+xtruNvLbleBAEAQBAEAQBAEAQBAEAQBA",
+ "EAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEBweg3QFXvE2+XVvjLkxCAmSE3S245Fsd+",
+ "Vo5BL+D5JSqxxnW/xnyK6Yx92vtbO5eTWMcqcm6xGWx8yrWfb6Tj4pRLP4IY6eFk",
+ "ELAyONoYxo8A0DYD8FZqSS0Rw5OcqknKT1bP0X6fIQBAEAQBAEAQBAEAQBAEAQBA",
+ "EAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQB",
+ "AEAQBAEAQBAEAQGgeObFP4UcOWQysZzT2SSmu0XTfbu5A15/3cj1ocy0PLYdN8Y6",
+ "PwfyZbXIlin7MzlbRfq1VKm/5lqv7kjWvZo5U6v07ynDpZQ51nu0dZGN+ojqIttv",
+ "lzQOP3rW5Or863qUX9V6+K/Imn0j8LVDGLTEYr+LTcX2wlr7prwJkKYHOIQBAEAQ",
+ "BAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAfMj2sYXvcGtaNyT4A",
+ "DxR7D9inJ6Iq/wCFyN2p/GXHldQTNGbldMgkJG/lIYz9z5I/3KscFXnmM+VfTKXv",
+ "+Z3JynSWWeTd2ENj5lKiv7U/ZFloI6DZWccNHKAIAgCAIAgCAIAgCAIAgCAIAgCA",
+ "IAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgC",
+ "AIAgCAIAgCAIDHNRsdjy7AMkxaRge27Wmrotj6yROaP3kLHu6Xl7edLpTXijcZex",
+ "B4Ti1rfxf8OpCX9Mkyv/ALNzInWvWC/YxM5zGXayPeGk7bzQTMIG3qGvk/eoDlCr",
+ "zLydJ8Y+1P8A8nW30isPV1l23vo7XTqpfyzi171EsjVjHGIQBAEAQBAEAQBAEAQB",
+ "AEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAYhrBfRjGlOYZAX8jrfYq6oYd/rtg",
+ "fy/3tliYhV8ja1KnRF+4kOUrF4lj9lZ6a8+rTT7HJa+wg12Z9iZVaj5ZkbowfydZ",
+ "Y6Rp2+i6eYH/AAhKg+TqXOualTojp4v8jqP6SF86WDWdkn69Vy/oi175liisM47C",
+ "AIAgCAIAgCA43HqgPznqaelhdUVU8cMTBu58jg1o+ZPRfjaitWfkpKK1bMHyDXrR",
+ "XF+YX3VXFaV7ejojdYXSD9hri79ywquJ2dH16sV3o11bGLChsqVop9qMBvHHLwzW",
+ "kEM1CNe8fVorbVS7/I92G/vWDUzHhtP/AImvYn8jW1c2YTS2eV17E/kYfcu0f0Fp",
+ "NxRWrLa9w8DHboo2n73yg/uWJPNljHcpPuXzMGpnjDYeqpPuXzMeq+0107Yf4jpt",
+ "k0w9ZZ6aP/Bzljyzhb/Vpy9hiyz7afVpS9n5nmy9p5j4JEOj90ePIvu8Tf8ACMrz",
+ "ecafCk/H8jyefqXCg/6vyPyHafWjf3tGa8D4Xth/8Ffn+MYf8r+78j8/x9T/AOQ/",
+ "6v8A+k7MHadYs7/SdJLxH/V3OF/+LAvpZxpcaT8fyPpZ+oPfRfivkevRdpjpVIQL",
+ "hgWW0+/iYxTSgf8AEC9Y5vtfrQl7Pme8c+WT9anL2fNGTW3tEeHeu2FVNktu38fa",
+ "bSXbf7p71kwzVh8t+q7V8mzMp51wue9yXavk2ZpZuMnhpvnK2m1VttO931a2Gal2",
+ "+ZkYB+9ZlPH8Oq7qq79V70Z9LM+FVvVrJdqa96Ni2HUrTvKQ3+DWd4/dS/bYUdzh",
+ "mP4NcSs+leW9b+HNPsaNnRv7W4/g1Iy7GmZHuskyzlAEAQBAEAQBAEAQBAEAQBAE",
+ "AQBAEAQBAcbjfbfqgPwrK+it1O+rr6uGmgZ9KSaQRtHzLtgvSlSqVpKFOLbfBLV+",
+ "w/G0trNb5NxQ8OuIFzMg1swumlZvzQtvEMso+BZG5zt/uUpsch5nxLbbWFVrp5kk",
+ "vFpI8ZXVGHrTXiayv3aR8INk3bFqdLc5B9Sgs9ZJ/edG1v71K7TkSztdbXaKC+9O",
+ "C9ik37DwliVtH62vczBLv2tPDXQ8zbdYM5uTh4GO2wRNP3vnB/cpDbfR3zVV/i1K",
+ "MO2cn7oP3njLFqC3JmLVnbB6VsP/ALO0ly2cf66ppYj+5zlt6X0bcYf8W9pLsU37",
+ "0jzeMU+EWeVL2xeMAn2fQm7vHkX32Jp/dCVmR+jVd/WxGP8A9t/96Pz9sR+x7T8m",
+ "9sbYiff0DuQHwyGM/wD/ADr7f0arjhiUf/tP/vPz9sL7HtO5TdsRhLtvbdEr9D69",
+ "1doJP8WNXhU+jXiC/h38H2wkviz9WMR4wfie7b+190Pmc1tz04zil3+kYmUkwH/G",
+ "aStfW+jhmCK1pXVF9vPX+1n2sYpcYv2GZWntUOFS5be2V+VWrfx9rsjnbf7l71o7",
+ "jkBzhQ9SNOf4an/conosVt3v1XcbCx/j04SMl5RQ62WWme76txinotvmZo2j96jV",
+ "5ySZ0sdfKWE3+Fxn/pk2e0b+2lumbVxrVTTLMwz+CGoeNXvn25Rb7tT1BPw2Y8lQ",
+ "++y/i2Ga+e2tSnp9qEo+9IyI1ac/Vkn3mUbjz8lqD0Hj4IDlAEAQBAEAQBAcHwQF",
+ "X2hwdpzx0R2T+ShiyW6Wjl9WSCZkY/EsVY4b/lMc5nDnSXjqkdy520zDyWu63ydC",
+ "lU748yT+JaCOoBVnHDRygCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI",
+ "AgCAIAgCA0nxn3htl4ac1n5tn1FNBRt+Pe1ETCP7JK0uYank8NqvpSXi0WbyO2jv",
+ "M62MeEZSl/TCT96RpbsybUIsQze+8vWrudLSB239FE5+3/GWmybDSjVqdLS8F+ZZ",
+ "X0k7rnYjYWn2YTl/VJL/AGk1VMzmgIAgCAIDzb7kmPYvQvueS3ygtVGz6U9bUsgj",
+ "H7TyAvOrWp0Y86pJJdb0PKtXpW8efVkorpb0NDZvx6cPOIGSC35BWZNVR7jurPSG",
+ "Rm/9bJyRkfEErR3OZbC32Rk5PqXxeiI5d5vwy11UZOb+6vi9EaEzPtNcoqOeHA9N",
+ "rbb2kbNnu9W+pefj3cfI0f2itHcZwqS2UKaXbt92hGrrPlaWqtqSXW237Foa9Ovv",
+ "G1rG8sxaqymSnf0Dces/s8Tf9sxm4+Zetf8AtPGb9/uudp91ae1L4ms/bGYMTf7l",
+ "y0+6tPal8T9IODni71IkFbl8U8RkO/e5Df8AvX/e0OkcPwC/VgGLXe2t/dL/AMs/",
+ "VljG770q/wDdLX5szmw9mNmc3Ick1QslBv8ASbQW+Wp2+ReY/wDBZ1PJ9aX8Wql2",
+ "Jv5GxpZCry/jVkuxN/I2DaOzL03gLfy9qNk1dt9IU0VPTA/LdryFnQyfbL16jfZo",
+ "vmbOnkK0X8SrJ9mi+ZmFv7PLh1otvaKPIq/bx9ou7m7/AO7a1ZkcrYfHem+/5aGf",
+ "DJeFw3qT7X8kjI6Lgd4YaMAHTRtQR5z3Ssf/AOLsveOXMNj/AMP2v5mTDKeEQ/4W",
+ "v80vmelHwd8NEQ2ZpHZz+u+Zx/e9eywLDl/wl7fme6y1hS3UV7fmfoeELhsI2OkN",
+ "i+5sg/61+/sPD/8AlL2/M/f8OYX/AMle35nXm4NOGWcEP0ltjd/6OoqGf92QL4eA",
+ "Yc99JeL+Z8PLOEy30V4v5njV/AfwyVm5iwOppCfOnu9WNv7UhXjLLWGy3Q0738zH",
+ "nlDCJbqen80vmYzc+zj0CrWO9hr8stzz9HurkyRo+6SNxP4rGqZTsZ7nJd6+RiVc",
+ "kYbU9VyXY18UYVeOzEx2Vrjj2rV1pj9VtbbIpwfgSx7P8Fh1MnU2v3dVrtWvxRr6",
+ "uQaLX7qs12rX3NGucg7NTVu3h02OZji91DOrWy99SSn5bte0f2lr6uUbuP8ADmn4",
+ "r4Grr5FvYL91UjLxXwfvMaOi3HJpG4yY/T5lFBGOn5DvHtcTgP8AVMkJI+BYsf8A",
+ "Z+N2O2nztOp6+xMxf2XmHDdtLn6L7MtV4J/A7Ns43uKfTeqZb81jhrjEdjBkFlNP",
+ "KR6czBE7f4ndfsMxYpaPm1tv4lp7tD6p5rxmxfMuFr1Sjo/ZozcOF9prj1QY4NQN",
+ "Na+h8n1Npqm1LPn3cnI4D5OK29vnCm9lem12PX2PT3m8tc+0pbLmk11p6+x6e8kD",
+ "gnFhoDqG6OCx6jW2nrJB0pLkTRTb/ZAmDQ4/qkrfW2N2N1shUSfQ9nvJNZ5iw292",
+ "U6qT6Hs9/wADbUcscrGyRPa9jwC1zTuCD6HzW0T12o3Saa1R9r9P0IAgCAIAgCAI",
+ "AgCAIDjcDxQHiZXnGG4LbXXjNcqtFhoWAk1FyrY6aPp+lIRv9yz8Pwq+xar5Cwoy",
+ "qz6IRcn7Ez5nONNayehGXUbtO+F3B++prJfbrmFZFuO7stCe65vTvpixhHxbzK18",
+ "F5Cc3YrpO4pxoRfGpLbp+GPOfc9DAqYnbw3PXsIzZ/2v+f15lp9NNKrJZ2H3WVF4",
+ "q5K2Qj7QZH3TQfhu5Wtg/wBG/DaWksVvJ1H0QSgvF89v2GDUxib9SOnaa0/zhe0Z",
+ "19e4YlV51NRyjZv8GrKaKBgP+vijaR83SfepX/g3kwygv87GipL/AJtTnyf8spP2",
+ "RPDzi9uPV17kfvR9nxxwapytuOdNFM+U799k2S9/J8y1jpXj5EBedTljyBgC8lh+",
+ "1LhSpc1e1QR+rD7qrtn7WbLxvsd82qDG7LtabJbz/ONtlqmqtvk6R8X+Cil99JOw",
+ "hqrKwnLo584x9iU/ee8cHk/WkbPsfZAaPU7mHJNUMxuHL9IUkdLSNd/aZIR+Kid3",
+ "9JDHJp+a2lKH4nOXucT3jg9L60mZ5bOyz4UKABtXacmuYH/ar29u/wDumsUdr8vu",
+ "ca3qTpw7Ka/3OR7LC7db9fEym39nPwdW9oA0fjqCPrVF4r5Cfxm2/ctRW5ac8Vn/",
+ "APO6dkKa/wBh9rDrZfV9rPYi4DuEaEBseh9iIH25Kh/+MiwZcrWdJb8Qn4RX+0+/",
+ "MLb7CP0dwLcJbhsdDcd+4TD/AMRfK5V85r/+4VP7f+0eY2/2EdSp4AuECqBEuiNq",
+ "bv8A0VZVx/8AdmC9ocr+dqe6/l3xg/fE/Hh9s/qe8x25dmfwfV5Jg04raEnzpr7W",
+ "jb7nyOC2dDlyztR9a6Uu2nT+EUfDwy2f1fazD732TPDRco3fk28ZvapD9HubnDK0",
+ "fdJCSfxW8tfpDZroP97CjNdcJL/TNe48pYTQe5tGu8h7HTG5o3uxTXC6Ujh9Flxs",
+ "0dQD83RyM/wUms/pKXUWvPMPjL8M3H2OMveeMsHj9WfsNUZR2R+vVo3qMTzjD70x",
+ "h3a18s9FMfkHRuaP7amNh9IrLtz6N5b1afdGa9kk/YY88IrL1WmYqdEu0k0Jc6XH",
+ "6bUSGlgHQWK8m407mjz7mKR+4+bFt/8AFPJbmxaXLoOT/wCZDmS/qlGPskefkL2h",
+ "u17nqehYu0k4xtLq2K06hUlBd3w+6+nyOxOo6jl/Wi7p2/xIP3rHu+RHI+P03Wwy",
+ "UqafGlU50fCXPXg0fUcSuaT0nt7Ub9097YDB68w02p2lV4s7nHldVWerZWx7/aMc",
+ "gje0fAFx+arjGfo34hR1nhN5Cp1Ti4PxXOT8EZdPGIP+JHTsJR6a8ZfDTqu6KnxT",
+ "VmytrZQOWhuTzQVJd9kMnDec/qlyqPHOTPNWXtZXllPmL60PTj26w1079DPpXtCr",
+ "6svgboa9j2h7HAtcAQQehHwUFaaejMo+l+AIAgCA4PgUBV/rhz4Nx2uurNo2RZPa",
+ "LnuPNsgge/8AHdyrLEv8tjvP+9F+47kyVpjfJX5u9rdCtDvXPS+BaAOoVmnDZygC",
+ "AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAjL2hlw9i4eJaf",
+ "f/T71Q0+3rtzyf8AhqNZrnzcPa6ZL4v4F28gFDy2cFP7FKo/dH/cdTs5raKPQOqr",
+ "C3Z1fkFXNv6hscLB+9pXxlKHNsG+mT+CMj6Qtx5bNkKf2KMF4ucviSlUoKKCA69d",
+ "cKC10ktwuVbBSUsDS+WeeQRxxtHiXOcQAPmvmU4wXOk9EfM5xpxcpvRLiyOmpvHv",
+ "obgfe0WP19RmNyj3aIrSB7OHejqh+zNviznUfvMzWVtsg+e+rd4/LUi1/nDDrPWN",
+ "N+Ul1bvH5akXsw47+IbU+4fwf03tcdgFQS2Kls1I6tr5AfLvHNJ3+LGNUar5lxC8",
+ "lzLdc3XoWr/XYkRC5zfid/LydpHm68IrV+PySOlYeDbim1lr237PpZrb3x3NZlFx",
+ "fLUEee0Q55B8jyL4pYBid/Ln13p1ye3w2s+KOWMYxSXlLl6dc3t8Nr8dDfeDdmrp",
+ "xahHUZ9mV5yCdoBdDSNbQ05PmDtzSEfHmat5bZRt6e2vNyfVsXxZI7TItpT0dzNy",
+ "fVsXxftRv7DOHLQ7AOR+L6Y2Gnmj25amamFTOCPPvZeZ+/3rfW+FWVr/AA6a978W",
+ "SW1wTD7P+DRin0tavxerNjNYxjQxjQ1rRsAOgA+S2G42umhz4eCA5QBAEAQBAEAQ",
+ "BAEAQBAcbDffZAdS6We03uldQ3m2UlfTP6OhqoGyscPi1wIXxOnCoubNJrrPipSh",
+ "VjzaiTXXtNN5rwX8OubCSWfAKez1Uh39ossjqJwPryM/Nn72Fai4y/h9xvp6Pq2f",
+ "l7DRXWV8Lu99Lmvpjs9m72Ee897MqdokqNNNR2SDqWUd8ptvkO/hH+Ma0Nzk9rbb",
+ "VO5/NfIi95kJr0rSr3SXxXyNRS4TxncMUjqq0syehtkB5jLbJvyjbSPV8Y52NH67",
+ "Glal22MYO9Yc5Lq2rw2rxNI7THsAesOcoro9KPhtXijZWm3aV5LQGKh1UwmlusLd",
+ "mvr7Q/2ecfF0LyWOPycz5LY2mbqkNI3UNetbH4bvcbaxz3VhpG9p6rpjsfhufsJa",
+ "aX8TmiurpjpsSzWlbcZAP/Zld/FasH0Eb9uf9guClVnjFnfbKU9vQ9j/AD7ia2GP",
+ "WGJaKjUXO6Hsft392ptLdbM3BygCAIAgCAIDo3m+WXHbbPecgu9FbLfSt556usnZ",
+ "DDE31c95DWj5lZFta172rGhbQc5y3Rim2+xLaz8lJRWrZEnWHtQuHjTvvrfhctdn",
+ "11j3aG2sdzRB3o6qkGxHxja8K5st8g2Zsa0q36VrTf29s+6C90nE11bFKNPZH0n+",
+ "uJDvNO0V4uNcbucX0ntjsfFTu2Kgxi3vrLhI34zOa9+43+lG1iu7DORfJeVKPneM",
+ "z8rpvlVkoQX8qaXdJyNbPEbmu+bT2dm8/PE+zu4wdcLkMm1QrvyGag80lblVzkqq",
+ "57fhE0ySA/ovLF9Yjyz5JyrS80wiPlNN0aMFGC/mfNXfFSEMOua751TZ2kntOOyQ",
+ "0YsAiqtSMyyDLKloHPDTltupHeoLWc0p/wB4FU+N/SKx281hhdCFCPS9akvbpH+1",
+ "mdTwilHbNt+wk7gPC9w+aY92/CdIsZoKiLbkq30TaipG3+um5pP7yqbF8+Zlx3VX",
+ "97Uknw5zjH+mOkfYZ9O1o0vUijZ7WNaA1oAAGwHkAom23tZ7nIAHQBfgOUAQBAEA",
+ "QBAEAQBAEAQHGw3326oDzb7jGOZTROtmTWG3XejeNnU9fSx1Ebh8WvBCyrS+urCp",
+ "5W0qSpy6Ytxfimj5lGM1pJakfdQ+zu4U9QRJMdOWY5WSb/xnH6h1EW7+kQ3h/wCG",
+ "rJwblmzjg2kfOvKxXCqlP+7ZP+4w6mHW9T6unYRZ1L7H+804lq9ItVqasaATHQZD",
+ "TGF3wHtEIc0n5xtVvYH9JGhPSGNWbj0ypPVf0y0f9zMCrg7305eJpSTH+0F4N3ma",
+ "ibmNsslKd+ekeLtZ+UebmDvImA/pNYVPI3nJrylrm1PJTqy+1+6q9z9GT7m0YvNv",
+ "LPdrp4o3TpH2vN6pDBbtbNOYK6IbNfdMef3UoHq6mlcWOPryyM+SgmYvo40KmtXA",
+ "bpxf2Kq1XdOK1XfF9plUcXa2VY+BODR7iv0E10bHDp9qHb6i5SDraqsmlrmnzHcy",
+ "bOft6s5h8VQOZOT7MeU25YlbSUF9ePpQ/qjql2S0fUbWjd0a/qS2m3AQfBQsyDlA",
+ "EBWL2gMDrJxIxXaEbPqLRb6wH1cxz2f+GFWeaV5PEVNdCf68Dt/kFmr3Jbt5bo1K",
+ "kfFJ/wC4szoallbRQVjPozxMlHyc0H/mrKjLnRTOJa9J0asqb3pteB+6+jyCAIAg",
+ "CAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAiH2llY6LR7HaIeE+S",
+ "RvP7FNN/6lEs4S0s4R+98GdC/RxoqWY7mq+FF+2cPkZrwFUvs/DTj8u2xqau4Sn4",
+ "/wAZe3/pWbliOmGwfS37yNculXymdbmP2Y01/Yn8TdeX5viOAWaXIM0yKgs1vi+l",
+ "PVzCNpP2Wg9XO9GtBJ9Fuq9xStYeUrSUV1lL3N3Qs6fla8lFdZDvV7tJLRQma1aM",
+ "40bjIN2/le7sdFAPjHACHvHxeWfIqI3+bYR1hZx163u7l89Owg2JZ5pw1p2EOc+l",
+ "7u5b/HTsNE0OE8W3F5Wsulzku1fapH8zKu5SexWqEb+MUYAa7b/VscfUrSRt8Vx2",
+ "XOlq49L2R7vyRHIWuN5llz56uPS9ke5bvBMkdpf2buB2RsNfqnktXklWNnPoaImk",
+ "owfslw/OvHx3Z8lIbPKVClpK5lzn0LYvn7iVYfka2o6SvJOb6FsXzfsJTYbp3gun",
+ "lvFswjE7VZKfYNc2ipmxl+3m9wHM8/FxJUmt7Whax5tGCiupEwtbK3so8y3gorqX",
+ "v6TIlkGUEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEBxsEBq/Uvhm0T1XbLNlmC0Pt8",
+ "oP8A7RoW+y1YPqZI9uf9sOHwWsu8Is73bVgtelbH7Piai+wHD8R1damtelbH4rf3",
+ "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",
+ "lbTwPq5RBTtllawzSkEhjATu52zSeUbnYE+SA/dAEAQHXuFvortQVNrudMypo6yF",
+ "9PUQvG7ZI3gtc0/MEr5lGM4uMlqmfFSnGrB05rVNaNdKZAi1XG/cI/EbDXw99NSW",
+ "qq3I/wC32mbxHoSWfhJGPRVvByy5i2j9R+2L+XvRTv7zKuM9MU/GD/L2otls13t2",
+ "QWiivtnq2VVDcKeOqpp2HdskT2hzXD5ggqyi4qdSNWCnB6prVdjO6h9hAEAQBAEA",
+ "QBAEAQBAEAQBAEBF7tANWW4NpD/Aq3VQZdczkNHytd7zKJmzp3fJ27I/iHu9FGM0",
+ "33m1p5GL9Kezu4/IvLkGyq8bzF+060daVqud1Oo9kF3bZdqXSeJ2dOk5xnTu4anX",
+ "Om5a7Kpe5oy4bFlDC4gEenPJzH4hjCvHKVj5G3dzJbZ7uxfN+42f0hM1ftLGKeB0",
+ "JehbrWXXUkv9sdF2tol4pac9BAEAQBAEAQBAEAQBAEAQHj5hidizvFrthuT0DK20",
+ "3qjloayBw+nFI0tdt6HruD4ggHyWbhuIXGE3lK+tJc2pTkpRfQ09V+fSj5nBVIuM",
+ "tzKatLsiyXgC4yaiw5PNMbNSVhtN2fsQ2ttE7muiqgPAlre7mAHgWOb6ruTH7K15",
+ "X8jRuLRLyso8+H3asdU4d71h2NPoI1SlLD7nSW7c+wuopqiCrp46qlmZNDMwSRyR",
+ "uDmvaRuHAjoQQQQuEJwlTk4TWjWxroJOnrtP1XyAgCAIAgCAq+4ts6vHELxG0unO",
+ "HyGrpLRVtx61sad2SVbngVE3Ty5xtv8AZh3Va45czxXEFb0tqT5q7eL/AFwRUOZL",
+ "ueNYqrShtUXzV28X4+xFjWmmBWfTDA7JgdiYBR2akZTtftsZX+L5D+k95c4/FysG",
+ "0toWdCNCG6K/T7y07GzhYW0LanuitPm+97TJ1kmWEAQBAEAQBAEAQBAEAQBAEBoL",
+ "jU0fOq+i9fNbaXvb3jJddreGjd8jWN/PxD9aPcgebmMWhzFYefWbcV6Udq+K8C2O",
+ "RvNv+Fsy041paUa/7ufQm36Eu6WzXgmzSvZwaxNlpLtoreKr34C+7WbmPiwke0RD",
+ "5EtkA/SkPktLlHENVKym+tfFfHxLM+kRlFxqUczW0dj0p1O1epJ9q1i31RJzqcHL",
+ "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",
+ "Lfv9h3PlLAcN5Hcq1L7EmvKtKVWS3uX1acenRvmrpbcti3WQaTaY49pBgdrwPGo/",
+ "4tb4/wA7O5oElTO7rJM/9JzuvwGwHQBWLY2VOwoRoU9y9r4s4zzVmW8zbi1XFb1+",
+ "lN7FwjFerFdSXi9W9rZmCzCOhAEAQBAEAQBAEAQBAEAQBAEAQBAEAQFc/bAaZ+14",
+ "5hGrtHTkvt1VNYK54HUxTAzQb/Bro5h85F079G/HfJ3V5gs3smlUj2x9GXinHwNL",
+ "jFLWMai7CRnZ+6lu1N4WMPq6qcy12PxPx6sJdzEOpTyx7n1MJhP3qseWHA1gWb7q",
+ "EFpCq1Vj/Ptf9/ORm4fV8rbxfRs8CRirAzT5e5rWlziAANySfAICrXTCN2v3G5Ff",
+ "Z2iaiqMjqL07m6tFJSEuhafhtHC371WVmv2njPlHu5zfctq9yRT1gv2xmDyj2rnO",
+ "XdHavckWljwVmlwnKAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA48UBXPxucOVbpjlD",
+ "db9OYZKWz11Y2etZS7sNrry7mbKwj6Mb3dQR9F/ToHNCrvMeESsqvntvsi3t0+q+",
+ "nsfsZ2RyL8odLMti8sYy1KtCLUXLb5Snpo4vXfKK2P7UdvBsk9wk8SVFrxhnsV5l",
+ "ihy+yRMjucA2b7SzwbVMH2XHo4D6LungW7ybAsXWJ0ebP+JHf19fz6GUdyrcnVTI",
+ "2JeVtk3aVW3B/Ze902+lfVf1o9aZvtb4qgIAgCAIAgCAIDr3CupbZQ1Fxrpmw01L",
+ "E+eaR3gxjWlzifkAV6UaU69SNKmtZSaSXW9iPxvRaspB0CZVcQXGlT5jdonTRVl/",
+ "rcrq2vG/JHG988bflzd0z8F3byg1oZJ5OqllQejVKFCPW5JQb8OcyM2i85u1J9Op",
+ "an1PVx3J8SuDuwk4QHzJLHEAZZGMDnBgLnAbuPgBv5nyHmgPpAEAQBAEAQBAEAQB",
+ "AEAQBAEAQBAEAQBAEAQBAEAQBAEBiGr2KjNdMcmxkMD5au3SugG2+00Y7yM/2mD8",
+ "Vg4nb+d2dSj0p6dq2r2o1uMWvnthVocXF6dq2r2ojz2bmbusurt4wueYtgyW0mWN",
+ "m/Q1FK7nb9/dyTf2VHMlXHOpXFq+HNmvHmy8dY+BAMh3XMuats3skte9fkyyhTEt",
+ "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",
+ "Eg9NkBg2rmpGGYBitxblF9p6SprqGohpKXq+ed743Nbyxt97l3I3cdgPVa/Er63s",
+ "qEvLy01T0XF7OCN3hWU8YzPRrLDKDnGEZOUt0IpRbesns16Ftb6CurCJc0hyOmps",
+ "AfdRfayOWhgba+f2mRsrOWSNnJ7x5m7g7eW/kqwsL++t41beyk15ZKMkltaUlJLp",
+ "W1J7NOjcYX0V7HBbvNt1c45GDpUbeVROo1zYyVSmlJ67Nib0112vp0Jn6A9npNM6",
+ "myrXecsaSJWY9Sze87z/AIzM09PiyM7+rx1CkmF5Ub0q339K+L+C8Tp7PnL/ABgp",
+ "WGVVrwdaS2f+3F/6pLsjxJyWSx2fG7XTWOwWult1vo2CKnpaWJscUTR5Na3oFOKd",
+ "KFGKhTWiXBHLt7e3OI15XV3Uc6knq5Sbbb62zvL7MUIAgCAIAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIAgCAIAgCAIAgCAIDXvENH3ugepEZ88Su/8A8pIpJk183Mdg/wDrUv8A",
+ "XE8bj+DPsfuK8Ox5ftqLqFH9qyUZ/CoP/mumvpJL/wBLsX/1J/6TTYP68uw73Cgf",
+ "ZeNinif0IuV9j2+PdVC/nvgmzGV2y9zIBl183MCXXP3SLQ1ZRbwQBAEAQBAEAQBA",
+ "EAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEB+czO8ifHtvzNI/EL9i9GmCjrhU0",
+ "8uGues1bpNV5G63NkorjVUlQ+Hvu7mhO7WuG4JYeoOx3Hl6Ho3l+5IMtVMD/AMSY",
+ "dRVC650FJw2Qnzt7lDdr96PNbfralkcm/LnmLK9SOH3svObZfVm/TivuT2vT7suc",
+ "uC0NvZTprxGcJt9ddQ2uoKJ0gaLnb3Ge21Y36CTccvXybK0O9PVcTJYtlqbcfU8Y",
+ "PtXB+D6GdUUMRyLyx2ioVlGVVL1ZehWh+Fra1+Fyj0m4dM+N2yXYQ2zU2kns1Wdm",
+ "m4UZfJSvPq+Pcvj+7nHyUkw/NNpdejcfu5eMfHeu/wASlc3/AEfcWwtyuMAn5xT+",
+ "w9I1F2boz7ua+pkjrPkVBkNuiu9hvsVxoZhvHUUtT3sbv2mnx+B6qTJqSUovVPjw",
+ "8SgruzuMPrytrunKnUjvjJOLXanoztElxLnEknxJO5K/TGOEB9MlmjG0c0jAeuzX",
+ "kf4ID69pqf8AtU/+9d/5oDh800g2knkePRzyR+9AfCA5DnNIc1xaR1BB2IQH37TV",
+ "f9qn/wB67/zQD2mp/wC1T/7x3/mgPz6k7k7lAEB9NlmYOVk0jR6NeQEBz38/9PL/",
+ "AGygOHSSP+nI523hzOJQHygOQS07tJB9QUB9d9N/Sv8A7RQHHey/0r/7RQHygCA5",
+ "D3gbBxH3oDnnf9t34oDgknxJKA4QAHbwQHPMfVAYxnOpeD6c0ftmZZHS2/dvNHAT",
+ "z1Ev6kTd3u+e23xWJd31vYx59xNR977FvZIsu5SxrNdbyOEW8qnS1shH8U3pFeOv",
+ "URZ1L41MhvJktOmFrdZ6d55BcKprZKt/6jOrI/7zviFDL/NlWs/JWMdNeL2vuXD2",
+ "nTWUfo+WGHpXmZ6vlZLb5OLcaa/FLZKX9q6dTzMK4RNa9T7fcdRs+lqrBa46Sevl",
+ "rbxzyV1WGRl45IXEP2OwHM8tGx3HN4LHoZcvLqMrq/k47G9u2T2ezv29RlZ95Xsr",
+ "5WwivguAwjVlzJxSp6RpQ1i16yWj06Ip68WjLezTgiqNZ8hqpIWuMeMyOY4tBLHO",
+ "qYPA+XTcfJfeT1zbua+78UfzlyGnG+qJfY+MSyVWGWoEAQBAEAQBAEAQBAEAQBAE",
+ "AQBAEAQBAEAQBAEAQBAEAQBAEAQBAa54j5m0/D7qXM47BuI3c7//AOpIpPkmPPzL",
+ "h8V/zqX+uJ43P8GfY/cV79jvEXZ/qJMB0ZZqFpPznef+S6V+knLTDbCP35/6V8zT",
+ "YP68uw7WiQNk49m0j/d5MsvVMf2m1IH/ACX898OXk8d0f2pfEr7CU6WZNH9ua/1F",
+ "oY8ArMLgOUAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAcO8Pv",
+ "CApu4BdrJx6Q2iX3XGbIKLb4timO3/DXcXK9/muTp1l0UJeLj8yNWHo3enaXGVdJ",
+ "SV9NLR11NFUU87CyWKVgex7T4tc09CD6FcONKS0ZKaVWdGaqU21JbU1safSnwIv6",
+ "w9n/AKV52Z7tgcr8Nu0m7uSmj7ygkd8YNwY/9mQB9kqN3+V7S7bnS9CXVu8PloXf",
+ "lHl4x/AlG3xRedUl9p6VEuqe3X+ZNvpREPKtEOJjhkuMt+oYLlBQRnd12skrqije",
+ "0eczQPdHwlYAoy7TGMAk50W+Z1bYvtXzXeXza5nyByrUY2l4oOq90Kq5lRP7ktdv",
+ "8kn1ozLAeOKtgEVFqVjDapv0TcLXtHJ83QuPK79lzfktvY5wpz9G8hzeuO1eD2+D",
+ "fYV3mf6OXrVsuXP/ALdX4TS/1RfaSMwnV/TbURjBieW0NVUOG/scju5qW/OJ+zj+",
+ "zuPipVa3tvfR51vNS7N/et68Dn/MOS8fytNxxa1lTX2tNYPsnHWPtT6jMSCDykEE",
+ "eIKyiLhAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEBw97Y43SvcGsYN3PcdmtHqSeg",
+ "Q/UnJqK3s1TnfE7pFgokp35AL1Xs3Hslp2nIPo6TcRt/tE/Baa9x6xstVOesuiO1",
+ "/JeJZ2WuSDNeZdKkLfyNJ/Xq+gtOlR057/p06yOma8X+qObVIsuA20WCKpf3UTaN",
+ "pqa+UnoAH7dCf0Gg/FRW5zPe3svJWUObr0bZP9dS7zoHL/IRlrLtLz3H6vl3Ha+c",
+ "+ZSXatdv80muo9rTTgY1x1UrWZBqDUSYxRVREktTdi6e4TA+Yg35gf6xzPkV9WuV",
+ "7u8n5a/nzde+T+C73qug+8w8uGWMr0fMcv01XlHYlBKFKP8ANpt/kTT6UTW0e4Tt",
+ "HNGe5r7JYPyne4gD+V7pyz1DXesY2DIv2Gg7eJKmNhhdrhq0t4aPpe2T7+HYtF1H",
+ "NWbeUvMWcm4X9bm0v+XD0Yd63y/mb6tDN9XqptDpNmta47CDHrlJv8qaQr1v5c21",
+ "qv7svcytMTlzLKtLohL3Mgz2ZFKXaiZfWbdIbFBET8Xzg/8AQoXk9a3FSXV8SvMh",
+ "x1uqsvu/EsUU/LQCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIA",
+ "gNQ8Xda2g4YNUqhztt8UuMQPxfC5g/e4KacnNLy2bcOj/wBam/CSfwMa8elCfYyE",
+ "nY30Lzd9U7gW+7HT2iAH4l9S4j+6Ffn0lqq8hhtLpdV+yC+Jq8GW2b7Pidac/wAG",
+ "u0I3dswOz1p6+Tahw/5SrgV/uce/n97/ADK/l/l8zf8Aue9/mWgjwVlFunKAIAgC",
+ "AIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgOD4ICmvRBr8L7TsUkhDB",
+ "Fnl8odvhN7VG0f8AEC7jzU1ifJNz1xt6Mv6fJt+4jVD0L/vfxLlGndoPwXDjJKco",
+ "DgtDgQ4Ag9EBpTVHg90M1TM1ZX4q2zXSXcm42YillLvV7ADG8+pc0n4rUXuB2V9t",
+ "qQ0l0rY/k+9Fk5Y5WM05WSp29x5SkvqVPTj2Jt86PdJLqIl6j9nNqhjb5LhpvkFD",
+ "k9PGeeOnlIoqwbdQBzExuI9edvyUWuspXFCXPs566dOx+O73F/Zf+kJgeJQVDHaE",
+ "qLextfvIPtWnOXZzZdprSPVPib0Jq47PlDb3SwxnlZR5DRulheP0Hv67fqP2WPHG",
+ "MZwp8y5Ta+8tfCW/2s39xye8nfKBB3OHcxTe1yoSUWvxQWz+qGptLEuOizThkGcY",
+ "VVUbjsHVNsmEzD8e6k2cB8nlbq1zfbVNlxBw616S+D95VuO/RwxK31qYNdxqr7NR",
+ "cyXZzo6xfeom5sW190fzHkZZ87tsc8h2FPWvNJLv6bS7An5Erf2+KWV3/Bqp9Wuj",
+ "8HoyocZ5OM1YBq72xqc1fWiufHxhztO/Qz+N7JomzwubJE4btkYeZpHwI6FZ+4hL",
+ "XNlzXv6OPgc7g+CAIAgCAIAgCAIAgCAIAgCAbjwQHVul2tVjpzWXu50lugaNzLVz",
+ "shaPveQF8ylGC50nouvYZFpaXF/UVK0pyqSfCKcn4JM1ZlfFXori4fHHkr71UMHS",
+ "G1QGYE/1juWP+8Vp7nMOHW2x1Oc+iO38vaWZgvIxnHGtJea+Ri+NVqH9u2f9ppbM",
+ "OObIKoPp8GxCjtzD0bVXGQ1Eu3qGN5WA/PmUdus4yey2p6dctvsXzLiwH6N9nR0q",
+ "Y3eSqPjGmuYv6nrJ9yiYfb8Q4rOJGRj2W/JLvbpSC2Wo/idtaD5gu5Ijt+iCVg+b",
+ "43jXr6qL6fRj4bNe5Mm3n3JtyYJqj5KFVcI/vKuvW/Sku9pG+9M+zUO8Nfq1nG+x",
+ "DnW6yN/c6okH4hsfyK3NnlCjT9K7m5PoWxeO9+wrTMn0ja9TWll+1UV9urtfdCL0",
+ "XfJ9hLTTfRDSvSamEGB4Zb7bLy8r6sM7yqkHnzTP3kPy32+ClNtaULOPMt4KK6uP",
+ "a977ygMfzbjWaKnlcWuZVOhN+iuyK0iu5GdLII6EBq/iguP5K4e9QavfbewVUIPx",
+ "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",
+ "AgCAIAgCAIAgCAIAgCA69wrqa2UFRcq2UR09JE+eV58GsY0ucfwBXzOShFyluR8z",
+ "mqcXOW5bSsPhGo6rV3i8bm1fG6RsNTccnqN/Jzi4R/g+Zn9lVtgcXfYt5aXS5P8A",
+ "Xa0VHluLxLHPOJcHKb/Xa0WhgbDZWWW8coAgCAIAgCAIAgCAIAgCAIAgCAIAgCAI",
+ "AgCAIAgCAIAgCAIAgCA8bM8losMxC95fciBSWO3VNynJOw7uGN0jv3NWdhljUxO9",
+ "o2VL1qkoxXbJpfE+ZyUIuT4FSXZm41XamcW9ZqNd4xM+xUNwvs8rhuDV1Lu6b9+8",
+ "8jh+quzeXO+p4FkuGF0Hp5SUKaX3YLnP/Sl3kdwyLq3HPfDVlw3guJCSHB8EBVnq",
+ "q13D9xsy5FEzuaGnyGnvjdugNJVEOmaPhtJM37lWV7/6XjPlFu5yl3Pa/iinsR/9",
+ "GzB5VbEpKXc9r97RaXG9kkbZI3tcxwBa5p3BB8CCrMW3cXAmmtUfS/T9CAIAgCAI",
+ "AgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIDh3h+9AUv07v81XtG+V5fSWu",
+ "gzAsJPRrbXcfA+hDYakf2Pgu65r/AOIHJfqvSqSof/yUvi5Q9pGf/lb3q19j/wDJ",
+ "dAPBcKEmOUAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEBpTjIzk4J",
+ "w8ZZWQzmKrutO2zUux2JfUu7t23xEZkP3LT49c+bWFSS3vZ4/lqaDM935nhdWS3y",
+ "XNXfsfs1NDdmVg/c2rMdRp4SPaZ4bLSPI+rG3vZdvmZIh+ytFk+20hUuHx2L3v4E",
+ "byFaaU6t0+LUV738CcimpYYQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQ",
+ "BAEAQBAEBFjtKdRm4DwrZBQQ1DY63LainsFP16lsju8m6encxSA/rK3eRDBXi+cK",
+ "FSS1jQUqj7lpH+6SfcYGJVPJ27XTsNU9kPp1+R9Lcu1MqqcNmyS7Mt9M4+Jp6Rm5",
+ "I+BlmeP9mpj9I3GvOcXtcKg9lGDk/wAU38IxXiY+EU+bTlPpfuJ+rnE24QECu00w",
+ "HlqsR1NpoPdlZLY614b5jeWDc/Izj7goNnC20dO5XY/eviVvnyz0dK8j+F+9fEkx",
+ "woagDUjQTE75NP3lbSUYtdbud3Cem/NEn4ua1r/2lJMEuvO7GnPilo+7Z+ZLcu3n",
+ "n2G0qj3paPtWz8zbq2puwgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA",
+ "IAgCAICqztd9MnWjUPD9WaGnLIb9b32mskb0AqaZ3PG5x9XRy7D4RfBdf/Ryx1XO",
+ "GXWDVHtpSU4r7s1o+5Sj/caDF6Wk41Fx+BP/AIXNTmaw6A4RnxnEtVX2qKKuPNuR",
+ "WQ/mZ9/9pG4/Ihc359wJ5bzJeYbppGM24/gl6Uf7Wjb2tXy1GMzaiiBkBAEAQBAE",
+ "AQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQECO0z1AbJWYlpjSz7iBkt8rmB3m",
+ "d4oNx67Cc/eFBs33Wrp2y7X7l8St8+XmsqVnH8T9y+JJzhSwE6caCYlYp4O6raii",
+ "FyrQRs7v6k96Q74tDmt/ZUkwW280sacHva1fftJdl6z8xw2lTa2tavte38jba2pu",
+ "ggCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAICqrtddTvy1qLiO",
+ "ktvqC+PH6B91rI29QamqIbG0j1EUW4+EvxXX/wBHPAvNcLusZqLbVkoRf3YbW+xy",
+ "en8poMXq86caa4fEsD4X9M/8kGgOD4BJAIaq3WiJ9c3l2/jk280//EkePuXN2fMc",
+ "/wASZjvMST1jOb5v4Y+jH+1I29rS8jRjDqNpKImQEBqPis06dqdoRlOP00He19NS",
+ "/lOgA8faKc94Gj4uaHs/bWqxq188salNb0tV2rb+RpMw2Xn+HVKSW1LVdq2+3cRh",
+ "7M/UhsNflGlVZPs2qYy+W9rj9ZvLHOB8S0wu/ZKjWULvSU7WXavc/gRHIl9pKpZS",
+ "/Evc/h4E+lOiyQgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIC",
+ "NnaFaUO1W4X8nioqbvrnjAZkdCAzd29MD3wHnuYHTD57K0+RvMP+H8228pvSnW1p",
+ "S/n9XwmomFiFLytB6b1tI99kLqyK3Hcw0WuFSTLbKhl/trXEbmCXliqGj0DXtid8",
+ "5SrK+kdl7yV1a49TWyadOfbHWUfFOS/lMLCKusZUn2li65iN0EAQBAEAQBAEAQBA",
+ "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",
+ "s4rg10orC2ur7KV66VRaxe9cJLpXwfc+KLK9MdUcN1exOlzLCLo2roaj3Xsds2am",
+ "lA96KVn1HjfqPA9CCQQVYtneUb6kq1F6p+zqZbFhf0MSoqvbvVPxT6H1mWrKM0IA",
+ "gCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgNG8V3ClhPFFhBs93Ed",
+ "uyO3Ne+yXtkfNJSyHxjePF8LiBzM+Ths4KwOT7lBv8hYh5eh6dCenlKeuyS6V0SX",
+ "B9z2MxLu0hdQ0e/gysbRzWbW3s89Zbjgmc2Wqls0k7TebG6TeGqiPRlbRyH3eYtH",
+ "uvHR4HI/Yj3OsMy5ZwDllwOniOH1EqqX7uppti+NOot+mu9b4v0o6p7dFRrVcOqu",
+ "E1s4r4ouA0w1QwnWLC7fn2n97hulouLN2SM6PjePpRSMPVkjT0c09R8iCeJ8ewG/",
+ "y1fzw3EqbhUhw4NcGnxT4NEkpVYVoqcHsMrWnPQIAgCAIAgCAIAgCAj1xUcWWP6D",
+ "2p+P2IwXTNa2HemoieaOiY4dJ6jbwHm1ni74N6rQY1jdPDIcyG2o9y6Ot/LiRjMO",
+ "Y6WD0/J0/SqvcujrfwXHsIh8OnDhm3FJmdVqdqdcK92OSVZmr7hM4ie7TA9YYT9V",
+ "g25XPHRoHK3r9GKYVhNbGazublvma7XxfUv1s3IhGCYHcZguHeXjfM12vjJ9C+fD",
+ "cizOyWS043aKSw2G3QUFvoIW09NTQMDI4o2jYNaB4BWPTpwowUILRLci2qVKFCCp",
+ "01pFbEkd5fZ6BAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAPBARC",
+ "42+O6wcPVsqMDwGemuuotXDsI+kkNmY4dJpx4OkIO7Ij8HO2bsHXVyW8k1znKrHE",
+ "cSThZRfY6jX1Y9EftS7o7dWtde36t1zIbZe4iBwb8GGYcUeWSa4a5VNxkxKesdVy",
+ "y1cjvasiqObdwa89RDv0fIPHbkZ5ll18pfKdZZCs1l/L6irlR5qSS5tGOmzVbudp",
+ "6seHrS4J62zspXUvK1d3vLcrXa7dZbdS2i0UMFFQ0ULKempqeMRxQxMADWMaOjWg",
+ "AAAeC4vr16t1VlXrScpybbberbe1tvi2SJJRWiO0vI/QgCAIAgCAIAgCAIAgCAIA",
+ "gCAIAgCAIDXutmiGFa64jJi+XUnLLHzSW+4RNHtFDMR9OMnxB6BzD0cPHrsRgYhh",
+ "1HEqXkqq7HxRrMVwq3xeg6Nddj4p/reuJXIW64cC2q249+jqT0PvG3Xylaf7r27/",
+ "AK8ZPm0+9Xv+dy3ddT8JL9d6Ks/9Qyje/df9Ml8/avfYnodr7gmvOMi+YpWd1W07",
+ "Wi42udw9popD5OA+kw9eV46O+BBAsDDsToYnT59J7eK4r9dJaOE4xbYxR8pRe1b1",
+ "xX5dDNlLYm1CAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIDTXE1",
+ "wu6e8TuFux7KoBR3eja99nvcMYNRQSn8OeJxA54ydj4jZwDhOMi59xPIl/5zZvnU",
+ "5ac+m36M18JL6suHWtU8a5tYXUebLfwZVpjmVcRXZuazz2W60ZmttW4PqqB0jjbL",
+ "9SA7CaF+3uvA8Hgc7D7rwRu09d3uH5Y5bcCVejLScd0tF5SlL7MlxT4rXmyW2L10",
+ "a0EZ1sNq6Pd7GWyaB8QunHEZhUWY6f3USFnLHX26chtXb5iN+7mYD08+Vw3a4DcE",
+ "9duN835NxTJd+7HEoacYyXqzXTF+9PauKJDb3ELmPOgbMUUPcIAgCAIAgCAICKHF",
+ "bxq2nS1lXgOmlRT3PLyDFU1Q2kp7SfPm8pJh5M8Gnq7w5TF8bzDCy1oW+2p08F83",
+ "+n0EMzFmqGHJ21o9avF8I/N9XDj0GgeGbhKyrXy9f5WNXqmvbjdXUGqc+pkd7XfJ",
+ "CdyQ4+82Inxk8XeDPtDRYRgdXE5+dXbfMe3rl+XX4dUawHLdbGKnnt+3zG9du+X5",
+ "dfh0qyG0Wi12G2UtmstBBQ0NFE2Cnp4IwyOKNo2a1rR0AAVhU6caUVCC0SLVp04U",
+ "YKnTWiW5I7i+z7CAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA4J2",
+ "6lAQL43O0VtenMdfpVoVcoLjlvvU9xvcfLJTWk+DmRHq2WoHmerIz48zgWt6K5LO",
+ "RetjbhjGYYOFvscab2SqdDlxjB+MuGi2vUX2IqnrTo7+noNIcFfAPkWtd1h1u4gY",
+ "64YzVze301DWSP8Aa7/I48xmmcTztgcevMTzyeWzTzGfcqHK7bZXovAMtOPl4rmu",
+ "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",
+ "vf3Pj37e0xTSTjf1f0ZuJwnVy1V+Q0FA4QTQXEOgutFt0253jd+32ZBuemzwFi2O",
+ "Y7vD5eRu05JdPrL9dfiYWG5svsLl5vfRcktm3ZJd79z8UTs0n190s1poBVYLk8FR",
+ "VNZzT22f8zWwevPCeu36TeZvoVN7LE7XEI60Javo4+H6RY2HYxZ4pHW2nq+h7Gu7",
+ "4rYbDWebMIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCA4c5rQXOIAA",
+ "3JKAibxXcS/DO7GrhpxlGP0GplVLu19rgcHU9NKBsHOqh/JPHXrETIPgsS3z/Xyj",
+ "dK7witKNePGL2dkuDXSmmulETxnNGH2cXSX7yXQt3e/lqyuzT/Q/Jc1rLpNpVprc",
+ "7qKUS1MraWM1Bp4+rhEJX7Au26Nbvzu28CV4Zl5RM6crl1Ts8RuUqTaSgv3dGL+1",
+ "Pfr0uUnJrbzdFsK8SxPMFVxoxbXQtkV2v57eg50T17wrRzVh9TrJopNfqOhkELqS",
+ "sc6Ksts7XdZDTSbRyPHh3cgG224IK6Lwb6J9qsHhdrEI1bt+kmlrQa4KLXpP8e1P",
+ "7CJHg+C22HVPKXkefL2Lue/vLe9GOIbR3XmzNuemGZUVxdGwOqLe49zW0nltLA7Z",
+ "7Rv05gC07dCVV2ZsmY3lCt5HFqDguEt8Jfhktj7N64pFi0LilXWtNmyfHwUXPc5Q",
+ "BAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEAQBAEB8SzRQRvmmkaxkbS5znHY",
+ "NA8ST5D4r9jFzajFatgiDxD9pborpF7VYMClbnuTRc0fd2+YC307/D87VDcP2+zE",
+ "HeBBLVdeTOQ7Hsx825xFebUHt1kvTa+7DY12y06Uma24xOlR9GHpP2EEKq6cY3aH",
+ "Zb7JBHV19mpp9+5h3o7Dat/N5O7XPAPi4ySkb7b+C6Hp2+R+Rmy58mo1Wt79OtU7",
+ "OKXZzYLialu5xGXV7F+vEnjwydm/pPok6kyrOhDm+XxbSNnqof4hRSeO8EDt+ZwP",
+ "hJJuegLWsK53z1y2YzmlSs8P1t7Z7NE/TkvvSW5P7MdFwbkbe1w2nQ9Ke1+wl8AB",
+ "4KlDYnKAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIDX2rG",
+ "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",
+ "Sc1p82KlM1fSCxrFOdQwWmran9rZKo+9rmx7k2uEjZUMKpw21Hq/YTVx3GcdxG0U",
+ "9gxaxUFotlI3lgo6GmZBDGP0WMAA/BUPe31ziNaVzeVJVJy3yk22+1vabOMYwXNi",
+ "tEemsU+ggCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAgCAIAg",
+ "CAIAgCAIDpXay2i/UEtqvlrpLjRTjaWmqoGzRPHoWOBB/BfE6cKseZNJroZ51KUK",
+ "0XCpFNPg9qI76j8AehObGSrx+hrMQr37nntUm9OXepgk3aB8Gci0F3lixudsE4Pq",
+ "3eD+GhGL7J2HXfpU04Pq3eD+GhGnM+z01wwyrN207v1uyJsBL4X01QbfXN28wHnl",
+ "3+Uijlxla9t3zreSlp3P2/Mid1kvELWXPtZKenQ9H7dntMfptf8AjM0ElbQZZPkL",
+ "aWEgCHJrc6pieB5NncOYj9WReCxPGMMfNq66feWvte3wZixxjHsHfNr87RfbWvte",
+ "3wZtjDe04mAZFn+mDXjpz1VmrdvwimH/AIi2lvnDhXp+D+D+ZurbPumy6o98X8H8",
+ "zd2KceHDhk3KyqyursMzvCO7UEkQ3/rGB7P7y3VDMuH1tjlzX1r5aokNtm7CrjY5",
+ "uL60/etV7Tb2OaoacZfG2TFs8x+7B/gKS4wyu+9oduPwW1pXlvX/AIU0+xo3dDEL",
+ "W5/g1Iy7GjJt1kmWNwem4QHKAIAgCAIAgCA43B8CgPieogponT1MzIo2Ddz3uDWj",
+ "5k9F+NpLVn45KK1Zr/KOIfQ7DeZuRaqY3TSM+lCyvZNKP9nHzO/csGtitlQ/iVY+",
+ "OvsRra+NYfbfxa0V36vwWrNOZd2i2hViD4scpb/kkw6MNNR+zwuP68xa7b5NK1Ff",
+ "NdjS2U9Zd2i9vyNDc52w6jspKU31LRe3b7DRmadpTqVd3PpMEwmy2Jkh5WSVb311",
+ "QPTYe4zf9ly0lxm64qbKEFHt2v4L2Eeus9XdXZbU1Ht2v4L2GFG08bnEg7esjzCt",
+ "ttQd/wCMO/JduLT5hp7tjh8g4rD8njWLb+c0+5fBGv8AJZhxz1uc4vp9GPwRs/T3",
+ "szr3U93Van5/TUMZ2c6iskJmkPwM0oDWn5Mctla5Qm9tzU06lt9r+TNvZZDqS9K8",
+ "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"],[
+ ],[
+]).
+poly('yellow','',2,[
+ 594,559,365,427],3,2,1,9,0,0,0,0,0,0,0,'2',0,0,
+ "0","",[
+ 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[
+]).
+poly('CadetBlue','',2,[
+ 463,483,463,559],3,2,1,20,2,0,0,0,0,0,0,'2',0,0,
+ "","",[
+ 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[
+]).
+text('black',516,520,1,0,1,13,22,26,18,4,0,0,0,0,-65534,13,22,0,0,"",0,0,0,0,538,'',[
+minilines(13,22,0,0,0,0,0,[
+mini_line(13,18,4,0,0,0,[
+str_block(0,13,18,4,0,-1,0,0,0,[
+str_seg('yellow','Helvetica',0,103680,13,18,4,0,-1,0,0,0,0,0,
+ "D")])
+])
+])]).
+text('black',468,413,1,0,1,12,22,31,18,4,0,0,0,0,-65534,12,22,0,0,"",0,0,0,0,431,'',[
+minilines(12,22,0,0,0,0,0,[
+mini_line(12,18,4,0,0,0,[
+str_block(0,12,18,4,0,0,0,0,0,[
+str_seg('white','Helvetica',0,103680,12,18,4,0,0,0,0,0,0,0,
+ "A")])
+])
+])]).
+poly('white','',2,[
+ 463,332,463,483],3,2,1,40,2,0,0,0,0,0,0,'2',0,0,
+ "","",[
+ 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[
+]).
+text('black',468,509,1,0,1,13,22,57,18,4,0,0,0,0,-65534,13,22,0,0,"",0,0,0,0,527,'',[
+minilines(13,22,0,0,0,0,0,[
+mini_line(13,18,4,0,0,0,[
+str_block(0,13,18,4,0,-1,0,0,0,[
+str_seg('CadetBlue','Helvetica',0,103680,13,18,4,0,-1,0,0,0,0,0,
+ "B")])
+])
+])]).
+poly('magenta','',2,[
+ 463,559,331,559],3,2,1,66,0,0,0,0,0,0,0,'2',0,0,
+ "0","",[
+ 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[
+]).
+poly('magenta','',2,[
+ 595,559,463,559],3,2,1,70,0,0,0,0,0,0,0,'2',0,0,
+ "0","",[
+ 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[
+]).
+text('black',506,560,1,0,1,22,22,72,18,4,0,0,0,0,-65534,22,22,0,0,"",0,0,0,0,578,'',[
+minilines(22,22,0,0,0,0,0,[
+mini_line(22,18,4,0,0,0,[
+str_block(0,22,18,4,0,-1,0,0,0,[
+str_seg('magenta','Helvetica',0,103680,22,18,4,0,-1,0,0,0,0,0,
+ "R2")])
+])
+])]).
+text('black',409,560,1,0,1,22,22,75,18,4,0,0,0,0,-65534,22,22,0,0,"",0,0,0,0,578,'',[
+minilines(22,22,0,0,0,0,0,[
+mini_line(22,18,4,0,0,0,[
+str_block(0,22,18,4,0,-3,0,0,0,[
+str_seg('magenta','Helvetica',0,103680,22,18,4,0,-3,0,0,0,0,0,
+ "R1")])
+])
+])]).
+poly('magenta','',2,[
+ 462,331,396,445],3,2,1,96,0,0,0,0,0,0,0,'2',0,0,
+ "0","",[
+ 0,10,4,0,'10','4','0'],[0,10,4,0,'10','4','0'],[
+]).
+text('black',390,399,1,0,1,22,22,112,18,4,0,0,0,0,-65534,22,22,0,0,"",0,0,0,0,417,'',[
+minilines(22,22,0,0,0,0,0,[
+mini_line(22,18,4,0,0,0,[
+str_block(0,22,18,4,0,-3,0,0,0,[
+str_seg('magenta','Helvetica',0,103680,22,18,4,0,-3,0,0,0,0,0,
+ "R1")])
+])
+])]).
+oval('black','',462,482,464,484,1,1,1,161,0,0,0,0,0,'1',0,[
+]).
+text('black',469,468,1,0,1,52,22,164,18,4,0,0,0,0,-65534,52,22,0,0,"",0,0,0,0,486,'',[
+minilines(52,22,0,0,0,0,0,[
+mini_line(52,18,4,0,0,0,[
+str_block(0,52,18,4,0,-1,0,0,0,[
+str_seg('black','Helvetica',0,103680,52,18,4,0,-1,0,0,0,0,0,
+ "centre")])
+])
+])]).
diff --git a/figures/construction_dimensions.png b/figures/construction_dimensions.png
new file mode 100644
index 0000000..d64518e
--- /dev/null
+++ b/figures/construction_dimensions.png
Binary files differ
diff --git a/figures/interface_timing.png b/figures/interface_timing.png
new file mode 100644
index 0000000..d95a23f
--- /dev/null
+++ b/figures/interface_timing.png
Binary files differ
diff --git a/figures/pixel_grid.png b/figures/pixel_grid.png
new file mode 100644
index 0000000..71e4eb6
--- /dev/null
+++ b/figures/pixel_grid.png
Binary files differ
diff --git a/figures/reuleaux.svg b/figures/reuleaux.svg
new file mode 100644
index 0000000..34da9a5
--- /dev/null
+++ b/figures/reuleaux.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="36 40 107 106" width="107pt" height="106pt" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata> Produced by OmniGraffle 7.6
+ <dc:date>2018-01-22 03:15:32 +0000</dc:date>
+ </metadata>
+ <defs/>
+ <g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1">
+ <title>Canvas 1</title>
+ <g>
+ <title>Layer 1</title>
+ <path d="M 141.34092 131.15601 C 141.34044 92.86243 120.53398 59.43051 89.61096 41.542 C 58.68794 59.430986 37.88148 92.86243 37.881 131.15601 C 53.09871 139.9592 70.76545 145 89.61096 145 C 108.45647 145 126.12321 139.9592 141.34092 131.15601 Z" stroke="#011893" stroke-linecap="butt" stroke-linejoin="round" stroke-width="2"/>
+ </g>
+ </g>
+</svg>
diff --git a/figures/top_level.png b/figures/top_level.png
new file mode 100644
index 0000000..0dc05c9
--- /dev/null
+++ b/figures/top_level.png
Binary files differ
diff --git a/figures/top_level.png.png b/figures/top_level.png.png
new file mode 100644
index 0000000..0dc05c9
--- /dev/null
+++ b/figures/top_level.png.png
Binary files differ
diff --git a/figures/toplevel.png b/figures/toplevel.png
new file mode 100644
index 0000000..9b18d58
--- /dev/null
+++ b/figures/toplevel.png
Binary files differ
diff --git a/figures/vga_adapter_ifc.jpg b/figures/vga_adapter_ifc.jpg
new file mode 100644
index 0000000..b2b1a6d
--- /dev/null
+++ b/figures/vga_adapter_ifc.jpg
Binary files differ
diff --git a/settings/DE0_CV.qsf b/settings/DE0_CV.qsf
new file mode 100644
index 0000000..b2e6f0e
--- /dev/null
+++ b/settings/DE0_CV.qsf
@@ -0,0 +1,515 @@
+#============================================================
+# Altera DE0-CV board settings
+#============================================================
+
+set_global_assignment -name FAMILY "Cyclone V"
+set_global_assignment -name DEVICE 5CEBA4F23C7
+set_global_assignment -name TOP_LEVEL_ENTITY "DE0_CV"
+set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA
+set_global_assignment -name DEVICE_FILTER_PIN_COUNT 484
+set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 7
+set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO"
+
+#============================================================
+# CLOCK
+#============================================================
+set_location_assignment PIN_M9 -to CLOCK_50
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK_50
+
+#============================================================
+# CLOCK2
+#============================================================
+set_location_assignment PIN_H13 -to CLOCK2_50
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK2_50
+
+#============================================================
+# CLOCK3
+#============================================================
+set_location_assignment PIN_E10 -to CLOCK3_50
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK3_50
+#============================================================
+# CLOCK4
+#============================================================
+set_location_assignment PIN_V15 -to CLOCK4_50
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK4_50
+
+#============================================================
+# DRAM
+#============================================================
+set_location_assignment PIN_W8 -to DRAM_ADDR[0]
+set_location_assignment PIN_T8 -to DRAM_ADDR[1]
+set_location_assignment PIN_U11 -to DRAM_ADDR[2]
+set_location_assignment PIN_Y10 -to DRAM_ADDR[3]
+set_location_assignment PIN_N6 -to DRAM_ADDR[4]
+set_location_assignment PIN_AB10 -to DRAM_ADDR[5]
+set_location_assignment PIN_P12 -to DRAM_ADDR[6]
+set_location_assignment PIN_P7 -to DRAM_ADDR[7]
+set_location_assignment PIN_P8 -to DRAM_ADDR[8]
+set_location_assignment PIN_R5 -to DRAM_ADDR[9]
+set_location_assignment PIN_U8 -to DRAM_ADDR[10]
+set_location_assignment PIN_P6 -to DRAM_ADDR[11]
+set_location_assignment PIN_R7 -to DRAM_ADDR[12]
+set_location_assignment PIN_T7 -to DRAM_BA[0]
+set_location_assignment PIN_AB7 -to DRAM_BA[1]
+set_location_assignment PIN_V6 -to DRAM_CAS_N
+set_location_assignment PIN_R6 -to DRAM_CKE
+set_location_assignment PIN_AB11 -to DRAM_CLK
+set_location_assignment PIN_U6 -to DRAM_CS_N
+set_location_assignment PIN_Y9 -to DRAM_DQ[0]
+set_location_assignment PIN_T10 -to DRAM_DQ[1]
+set_location_assignment PIN_R9 -to DRAM_DQ[2]
+set_location_assignment PIN_Y11 -to DRAM_DQ[3]
+set_location_assignment PIN_R10 -to DRAM_DQ[4]
+set_location_assignment PIN_R11 -to DRAM_DQ[5]
+set_location_assignment PIN_R12 -to DRAM_DQ[6]
+set_location_assignment PIN_AA12 -to DRAM_DQ[7]
+set_location_assignment PIN_AA9 -to DRAM_DQ[8]
+set_location_assignment PIN_AB8 -to DRAM_DQ[9]
+set_location_assignment PIN_AA8 -to DRAM_DQ[10]
+set_location_assignment PIN_AA7 -to DRAM_DQ[11]
+set_location_assignment PIN_V10 -to DRAM_DQ[12]
+set_location_assignment PIN_V9 -to DRAM_DQ[13]
+set_location_assignment PIN_U10 -to DRAM_DQ[14]
+set_location_assignment PIN_T9 -to DRAM_DQ[15]
+set_location_assignment PIN_U12 -to DRAM_LDQM
+set_location_assignment PIN_AB6 -to DRAM_RAS_N
+set_location_assignment PIN_N8 -to DRAM_UDQM
+set_location_assignment PIN_AB5 -to DRAM_WE_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_BA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_BA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CAS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CKE
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[13]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[14]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[15]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_LDQM
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_RAS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_UDQM
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_WE_N
+
+#============================================================
+# GPIO
+#============================================================
+set_location_assignment PIN_N16 -to GPIO_0[0]
+set_location_assignment PIN_B16 -to GPIO_0[1]
+set_location_assignment PIN_M16 -to GPIO_0[2]
+set_location_assignment PIN_C16 -to GPIO_0[3]
+set_location_assignment PIN_D17 -to GPIO_0[4]
+set_location_assignment PIN_K20 -to GPIO_0[5]
+set_location_assignment PIN_K21 -to GPIO_0[6]
+set_location_assignment PIN_K22 -to GPIO_0[7]
+set_location_assignment PIN_M20 -to GPIO_0[8]
+set_location_assignment PIN_M21 -to GPIO_0[9]
+set_location_assignment PIN_N21 -to GPIO_0[10]
+set_location_assignment PIN_R22 -to GPIO_0[11]
+set_location_assignment PIN_R21 -to GPIO_0[12]
+set_location_assignment PIN_T22 -to GPIO_0[13]
+set_location_assignment PIN_N20 -to GPIO_0[14]
+set_location_assignment PIN_N19 -to GPIO_0[15]
+set_location_assignment PIN_M22 -to GPIO_0[16]
+set_location_assignment PIN_P19 -to GPIO_0[17]
+set_location_assignment PIN_L22 -to GPIO_0[18]
+set_location_assignment PIN_P17 -to GPIO_0[19]
+set_location_assignment PIN_P16 -to GPIO_0[20]
+set_location_assignment PIN_M18 -to GPIO_0[21]
+set_location_assignment PIN_L18 -to GPIO_0[22]
+set_location_assignment PIN_L17 -to GPIO_0[23]
+set_location_assignment PIN_L19 -to GPIO_0[24]
+set_location_assignment PIN_K17 -to GPIO_0[25]
+set_location_assignment PIN_K19 -to GPIO_0[26]
+set_location_assignment PIN_P18 -to GPIO_0[27]
+set_location_assignment PIN_R15 -to GPIO_0[28]
+set_location_assignment PIN_R17 -to GPIO_0[29]
+set_location_assignment PIN_R16 -to GPIO_0[30]
+set_location_assignment PIN_T20 -to GPIO_0[31]
+set_location_assignment PIN_T19 -to GPIO_0[32]
+set_location_assignment PIN_T18 -to GPIO_0[33]
+set_location_assignment PIN_T17 -to GPIO_0[34]
+set_location_assignment PIN_T15 -to GPIO_0[35]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[13]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[14]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[15]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[16]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[17]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[18]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[19]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[20]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[21]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[22]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[23]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[24]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[25]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[26]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[27]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[28]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[29]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[30]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[31]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[32]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[33]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[34]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[35]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[9]
+
+set_location_assignment PIN_H16 -to GPIO_1[0]
+set_location_assignment PIN_A12 -to GPIO_1[1]
+set_location_assignment PIN_H15 -to GPIO_1[2]
+set_location_assignment PIN_B12 -to GPIO_1[3]
+set_location_assignment PIN_A13 -to GPIO_1[4]
+set_location_assignment PIN_B13 -to GPIO_1[5]
+set_location_assignment PIN_C13 -to GPIO_1[6]
+set_location_assignment PIN_D13 -to GPIO_1[7]
+set_location_assignment PIN_G18 -to GPIO_1[8]
+set_location_assignment PIN_G17 -to GPIO_1[9]
+set_location_assignment PIN_H18 -to GPIO_1[10]
+set_location_assignment PIN_J18 -to GPIO_1[11]
+set_location_assignment PIN_J19 -to GPIO_1[12]
+set_location_assignment PIN_G11 -to GPIO_1[13]
+set_location_assignment PIN_H10 -to GPIO_1[14]
+set_location_assignment PIN_J11 -to GPIO_1[15]
+set_location_assignment PIN_H14 -to GPIO_1[16]
+set_location_assignment PIN_A15 -to GPIO_1[17]
+set_location_assignment PIN_J13 -to GPIO_1[18]
+set_location_assignment PIN_L8 -to GPIO_1[19]
+set_location_assignment PIN_A14 -to GPIO_1[20]
+set_location_assignment PIN_B15 -to GPIO_1[21]
+set_location_assignment PIN_C15 -to GPIO_1[22]
+set_location_assignment PIN_E14 -to GPIO_1[23]
+set_location_assignment PIN_E15 -to GPIO_1[24]
+set_location_assignment PIN_E16 -to GPIO_1[25]
+set_location_assignment PIN_F14 -to GPIO_1[26]
+set_location_assignment PIN_F15 -to GPIO_1[27]
+set_location_assignment PIN_F13 -to GPIO_1[28]
+set_location_assignment PIN_F12 -to GPIO_1[29]
+set_location_assignment PIN_G16 -to GPIO_1[30]
+set_location_assignment PIN_G15 -to GPIO_1[31]
+set_location_assignment PIN_G13 -to GPIO_1[32]
+set_location_assignment PIN_G12 -to GPIO_1[33]
+set_location_assignment PIN_J17 -to GPIO_1[34]
+set_location_assignment PIN_K16 -to GPIO_1[35]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[13]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[14]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[15]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[16]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[17]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[18]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[19]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[20]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[21]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[22]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[23]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[24]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[25]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[26]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[27]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[28]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[29]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[30]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[31]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[32]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[33]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[34]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[35]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[9]
+
+#============================================================
+# HEX0
+#============================================================
+set_location_assignment PIN_U21 -to HEX0[0]
+set_location_assignment PIN_V21 -to HEX0[1]
+set_location_assignment PIN_W22 -to HEX0[2]
+set_location_assignment PIN_W21 -to HEX0[3]
+set_location_assignment PIN_Y22 -to HEX0[4]
+set_location_assignment PIN_Y21 -to HEX0[5]
+set_location_assignment PIN_AA22 -to HEX0[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[6]
+
+#============================================================
+# HEX1
+#============================================================
+set_location_assignment PIN_AA20 -to HEX1[0]
+set_location_assignment PIN_AB20 -to HEX1[1]
+set_location_assignment PIN_AA19 -to HEX1[2]
+set_location_assignment PIN_AA18 -to HEX1[3]
+set_location_assignment PIN_AB18 -to HEX1[4]
+set_location_assignment PIN_AA17 -to HEX1[5]
+set_location_assignment PIN_U22 -to HEX1[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[6]
+
+#============================================================
+# HEX2
+#============================================================
+set_location_assignment PIN_Y19 -to HEX2[0]
+set_location_assignment PIN_AB17 -to HEX2[1]
+set_location_assignment PIN_AA10 -to HEX2[2]
+set_location_assignment PIN_Y14 -to HEX2[3]
+set_location_assignment PIN_V14 -to HEX2[4]
+set_location_assignment PIN_AB22 -to HEX2[5]
+set_location_assignment PIN_AB21 -to HEX2[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[6]
+
+#============================================================
+# HEX3
+#============================================================
+set_location_assignment PIN_Y16 -to HEX3[0]
+set_location_assignment PIN_W16 -to HEX3[1]
+set_location_assignment PIN_Y17 -to HEX3[2]
+set_location_assignment PIN_V16 -to HEX3[3]
+set_location_assignment PIN_U17 -to HEX3[4]
+set_location_assignment PIN_V18 -to HEX3[5]
+set_location_assignment PIN_V19 -to HEX3[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[6]
+
+#============================================================
+# HEX4
+#============================================================
+set_location_assignment PIN_U20 -to HEX4[0]
+set_location_assignment PIN_Y20 -to HEX4[1]
+set_location_assignment PIN_V20 -to HEX4[2]
+set_location_assignment PIN_U16 -to HEX4[3]
+set_location_assignment PIN_U15 -to HEX4[4]
+set_location_assignment PIN_Y15 -to HEX4[5]
+set_location_assignment PIN_P9 -to HEX4[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[6]
+
+#============================================================
+# HEX5
+#============================================================
+set_location_assignment PIN_N9 -to HEX5[0]
+set_location_assignment PIN_M8 -to HEX5[1]
+set_location_assignment PIN_T14 -to HEX5[2]
+set_location_assignment PIN_P14 -to HEX5[3]
+set_location_assignment PIN_C1 -to HEX5[4]
+set_location_assignment PIN_C2 -to HEX5[5]
+set_location_assignment PIN_W19 -to HEX5[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[6]
+
+#============================================================
+# KEY
+#============================================================
+set_location_assignment PIN_U7 -to KEY[0]
+set_location_assignment PIN_W9 -to KEY[1]
+set_location_assignment PIN_M7 -to KEY[2]
+set_location_assignment PIN_M6 -to KEY[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[3]
+
+#============================================================
+# KEY (Reset)
+#============================================================
+set_location_assignment PIN_P22 -to FPGA_RESET_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_RESET_N
+
+#============================================================
+# LEDR
+#============================================================
+set_location_assignment PIN_AA2 -to LEDR[0]
+set_location_assignment PIN_AA1 -to LEDR[1]
+set_location_assignment PIN_W2 -to LEDR[2]
+set_location_assignment PIN_Y3 -to LEDR[3]
+set_location_assignment PIN_N2 -to LEDR[4]
+set_location_assignment PIN_N1 -to LEDR[5]
+set_location_assignment PIN_U2 -to LEDR[6]
+set_location_assignment PIN_U1 -to LEDR[7]
+set_location_assignment PIN_L2 -to LEDR[8]
+set_location_assignment PIN_L1 -to LEDR[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[9]
+
+#============================================================
+# microSD Card
+#============================================================
+set_location_assignment PIN_H11 -to SD_CLK
+set_location_assignment PIN_B11 -to SD_CMD
+set_location_assignment PIN_K9 -to SD_DATA[0]
+set_location_assignment PIN_D12 -to SD_DATA[1]
+set_location_assignment PIN_E12 -to SD_DATA[2]
+set_location_assignment PIN_C11 -to SD_DATA[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_CMD
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_DATA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_DATA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_DATA[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SD_DATA[3]
+
+#============================================================
+# PS2
+#============================================================
+set_location_assignment PIN_D3 -to PS2_CLK
+set_location_assignment PIN_G2 -to PS2_DAT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_DAT
+
+set_location_assignment PIN_E2 -to PS2_CLK2
+set_location_assignment PIN_G1 -to PS2_DAT2
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_CLK2
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_DAT2
+
+#============================================================
+# SW
+#============================================================
+set_location_assignment PIN_U13 -to SW[0]
+set_location_assignment PIN_V13 -to SW[1]
+set_location_assignment PIN_T13 -to SW[2]
+set_location_assignment PIN_T12 -to SW[3]
+set_location_assignment PIN_AA15 -to SW[4]
+set_location_assignment PIN_AB15 -to SW[5]
+set_location_assignment PIN_AA14 -to SW[6]
+set_location_assignment PIN_AA13 -to SW[7]
+set_location_assignment PIN_AB13 -to SW[8]
+set_location_assignment PIN_AB12 -to SW[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[9]
+
+#============================================================
+# VGA
+#============================================================
+set_location_assignment PIN_B6 -to VGA_B[0]
+set_location_assignment PIN_B7 -to VGA_B[1]
+set_location_assignment PIN_A8 -to VGA_B[2]
+set_location_assignment PIN_A7 -to VGA_B[3]
+set_location_assignment PIN_L7 -to VGA_G[0]
+set_location_assignment PIN_K7 -to VGA_G[1]
+set_location_assignment PIN_J7 -to VGA_G[2]
+set_location_assignment PIN_J8 -to VGA_G[3]
+set_location_assignment PIN_A9 -to VGA_R[0]
+set_location_assignment PIN_B10 -to VGA_R[1]
+set_location_assignment PIN_C9 -to VGA_R[2]
+set_location_assignment PIN_A5 -to VGA_R[3]
+set_location_assignment PIN_H8 -to VGA_HS
+set_location_assignment PIN_G8 -to VGA_VS
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_HS
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_VS
+
+#============================================================
+# End of pin and io_standard assignments
+#============================================================
+
+
+set_global_assignment -name LAST_QUARTUS_VERSION 14.0
+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 SDC_FILE DE0_CV.sdc
+
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to VGA_*
+
+set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
diff --git a/settings/DE10_Lite.qsf b/settings/DE10_Lite.qsf
new file mode 100644
index 0000000..35833b9
--- /dev/null
+++ b/settings/DE10_Lite.qsf
@@ -0,0 +1,446 @@
+#============================================================
+# Altera DE10-Lite board settings
+#============================================================
+
+
+set_global_assignment -name FAMILY "MAX 10 FPGA"
+set_global_assignment -name DEVICE 10M50DAF484C6GES
+set_global_assignment -name TOP_LEVEL_ENTITY "DE10_Lite"
+set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA
+set_global_assignment -name SDC_FILE DE10_Lite.sdc
+set_global_assignment -name INTERNAL_FLASH_UPDATE_MODE "SINGLE IMAGE WITH ERAM"
+
+#============================================================
+# CLOCK
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK_50
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK2_50
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK_ADC_10
+set_location_assignment PIN_P11 -to CLOCK_50
+set_location_assignment PIN_N14 -to CLOCK2_50
+set_location_assignment PIN_N5 -to CLOCK_ADC_10
+
+#============================================================
+# Arduino
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[13]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[14]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_IO[15]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ARDUINO_RESET_N
+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
+
+#============================================================
+# Accelerometer
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to G_SENSOR_CS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to G_SENSOR_INT[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to G_SENSOR_INT[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to G_SENSOR_SCLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to G_SENSOR_SDI
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to G_SENSOR_SDO
+set_location_assignment PIN_AB16 -to G_SENSOR_CS_N
+set_location_assignment PIN_Y14 -to G_SENSOR_INT[1]
+set_location_assignment PIN_Y13 -to G_SENSOR_INT[2]
+set_location_assignment PIN_AB15 -to G_SENSOR_SCLK
+set_location_assignment PIN_V11 -to G_SENSOR_SDI
+set_location_assignment PIN_V12 -to G_SENSOR_SDO
+
+#============================================================
+# GPIO, GPIO connect to GPIO Default
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[13]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[14]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[15]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[16]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[17]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[18]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[19]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[20]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[21]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[22]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[23]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[24]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[25]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[26]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[27]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[28]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[29]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[30]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[31]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[32]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[33]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[34]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO[35]
+set_location_assignment PIN_V10 -to GPIO[0]
+set_location_assignment PIN_W10 -to GPIO[1]
+set_location_assignment PIN_V9 -to GPIO[2]
+set_location_assignment PIN_W9 -to GPIO[3]
+set_location_assignment PIN_V8 -to GPIO[4]
+set_location_assignment PIN_W8 -to GPIO[5]
+set_location_assignment PIN_V7 -to GPIO[6]
+set_location_assignment PIN_W7 -to GPIO[7]
+set_location_assignment PIN_W6 -to GPIO[8]
+set_location_assignment PIN_V5 -to GPIO[9]
+set_location_assignment PIN_W5 -to GPIO[10]
+set_location_assignment PIN_AA15 -to GPIO[11]
+set_location_assignment PIN_AA14 -to GPIO[12]
+set_location_assignment PIN_W13 -to GPIO[13]
+set_location_assignment PIN_W12 -to GPIO[14]
+set_location_assignment PIN_AB13 -to GPIO[15]
+set_location_assignment PIN_AB12 -to GPIO[16]
+set_location_assignment PIN_Y11 -to GPIO[17]
+set_location_assignment PIN_AB11 -to GPIO[18]
+set_location_assignment PIN_W11 -to GPIO[19]
+set_location_assignment PIN_AB10 -to GPIO[20]
+set_location_assignment PIN_AA10 -to GPIO[21]
+set_location_assignment PIN_AA9 -to GPIO[22]
+set_location_assignment PIN_Y8 -to GPIO[23]
+set_location_assignment PIN_AA8 -to GPIO[24]
+set_location_assignment PIN_Y7 -to GPIO[25]
+set_location_assignment PIN_AA7 -to GPIO[26]
+set_location_assignment PIN_Y6 -to GPIO[27]
+set_location_assignment PIN_AA6 -to GPIO[28]
+set_location_assignment PIN_Y5 -to GPIO[29]
+set_location_assignment PIN_AA5 -to GPIO[30]
+set_location_assignment PIN_Y4 -to GPIO[31]
+set_location_assignment PIN_AB3 -to GPIO[32]
+set_location_assignment PIN_Y3 -to GPIO[33]
+set_location_assignment PIN_AB2 -to GPIO[34]
+set_location_assignment PIN_AA2 -to GPIO[35]
+
+#============================================================
+# HEX0
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[7]
+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]
+
+#============================================================
+# HEX1
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[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]
+
+#============================================================
+# HEX2
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[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]
+
+#============================================================
+# HEX3
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[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]
+
+#============================================================
+# HEX4
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[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]
+
+#============================================================
+# HEX5
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[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]
+
+#============================================================
+# KEY
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3 V SCHMITT TRIGGER" -to KEY[0]
+set_instance_assignment -name IO_STANDARD "3.3 V SCHMITT TRIGGER" -to KEY[1]
+set_location_assignment PIN_B8 -to KEY[0]
+set_location_assignment PIN_A7 -to KEY[1]
+
+#============================================================
+# LED
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[9]
+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]
+
+#============================================================
+# SDRAM
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_BA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_BA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CAS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CKE
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[13]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[14]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[15]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_LDQM
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_RAS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_UDQM
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_WE_N
+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
+
+#============================================================
+# SW
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[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]
+
+#============================================================
+# VGA
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_HS
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_VS
+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
+
+#============================================================
+# End of pin and io_standard assignments
+#============================================================
+
diff --git a/settings/DE1_SoC.qsf b/settings/DE1_SoC.qsf
new file mode 100644
index 0000000..f20aaec
--- /dev/null
+++ b/settings/DE1_SoC.qsf
@@ -0,0 +1,953 @@
+#============================================================
+# Altera DE1-SoC board settings
+#============================================================
+
+
+set_global_assignment -name FAMILY "Cyclone V"
+set_global_assignment -name DEVICE 5CSEMA5F31C6
+set_global_assignment -name TOP_LEVEL_ENTITY "DE1_SoC"
+set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA
+set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO"
+set_global_assignment -name SDC_FILE DE1_SoC.sdc
+
+
+#============================================================
+# ADC
+#============================================================
+set_location_assignment PIN_AJ4 -to ADC_CS_N
+set_location_assignment PIN_AK4 -to ADC_DIN
+set_location_assignment PIN_AK3 -to ADC_DOUT
+set_location_assignment PIN_AK2 -to ADC_SCLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_CS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_DIN
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_DOUT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to ADC_SCLK
+
+#============================================================
+# AUD
+#============================================================
+set_location_assignment PIN_K7 -to AUD_ADCDAT
+set_location_assignment PIN_K8 -to AUD_ADCLRCK
+set_location_assignment PIN_H7 -to AUD_BCLK
+set_location_assignment PIN_J7 -to AUD_DACDAT
+set_location_assignment PIN_H8 -to AUD_DACLRCK
+set_location_assignment PIN_G7 -to AUD_XCK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUD_ADCDAT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUD_ADCLRCK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUD_BCLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUD_DACDAT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUD_DACLRCK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to AUD_XCK
+
+#============================================================
+# CLOCK
+#============================================================
+set_location_assignment PIN_AF14 -to CLOCK_50
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK_50
+
+#============================================================
+# CLOCK2
+#============================================================
+set_location_assignment PIN_AA16 -to CLOCK2_50
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK2_50
+
+#============================================================
+# CLOCK3
+#============================================================
+set_location_assignment PIN_Y26 -to CLOCK3_50
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK3_50
+
+#============================================================
+# CLOCK4
+#============================================================
+set_location_assignment PIN_K14 -to CLOCK4_50
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to CLOCK4_50
+
+#============================================================
+# DRAM
+#============================================================
+set_location_assignment PIN_AK14 -to DRAM_ADDR[0]
+set_location_assignment PIN_AH14 -to DRAM_ADDR[1]
+set_location_assignment PIN_AG15 -to DRAM_ADDR[2]
+set_location_assignment PIN_AE14 -to DRAM_ADDR[3]
+set_location_assignment PIN_AB15 -to DRAM_ADDR[4]
+set_location_assignment PIN_AC14 -to DRAM_ADDR[5]
+set_location_assignment PIN_AD14 -to DRAM_ADDR[6]
+set_location_assignment PIN_AF15 -to DRAM_ADDR[7]
+set_location_assignment PIN_AH15 -to DRAM_ADDR[8]
+set_location_assignment PIN_AG13 -to DRAM_ADDR[9]
+set_location_assignment PIN_AG12 -to DRAM_ADDR[10]
+set_location_assignment PIN_AH13 -to DRAM_ADDR[11]
+set_location_assignment PIN_AJ14 -to DRAM_ADDR[12]
+set_location_assignment PIN_AF13 -to DRAM_BA[0]
+set_location_assignment PIN_AJ12 -to DRAM_BA[1]
+set_location_assignment PIN_AF11 -to DRAM_CAS_N
+set_location_assignment PIN_AK13 -to DRAM_CKE
+set_location_assignment PIN_AH12 -to DRAM_CLK
+set_location_assignment PIN_AG11 -to DRAM_CS_N
+set_location_assignment PIN_AK6 -to DRAM_DQ[0]
+set_location_assignment PIN_AJ7 -to DRAM_DQ[1]
+set_location_assignment PIN_AK7 -to DRAM_DQ[2]
+set_location_assignment PIN_AK8 -to DRAM_DQ[3]
+set_location_assignment PIN_AK9 -to DRAM_DQ[4]
+set_location_assignment PIN_AG10 -to DRAM_DQ[5]
+set_location_assignment PIN_AK11 -to DRAM_DQ[6]
+set_location_assignment PIN_AJ11 -to DRAM_DQ[7]
+set_location_assignment PIN_AH10 -to DRAM_DQ[8]
+set_location_assignment PIN_AJ10 -to DRAM_DQ[9]
+set_location_assignment PIN_AJ9 -to DRAM_DQ[10]
+set_location_assignment PIN_AH9 -to DRAM_DQ[11]
+set_location_assignment PIN_AH8 -to DRAM_DQ[12]
+set_location_assignment PIN_AH7 -to DRAM_DQ[13]
+set_location_assignment PIN_AJ6 -to DRAM_DQ[14]
+set_location_assignment PIN_AJ5 -to DRAM_DQ[15]
+set_location_assignment PIN_AB13 -to DRAM_LDQM
+set_location_assignment PIN_AE13 -to DRAM_RAS_N
+set_location_assignment PIN_AK12 -to DRAM_UDQM
+set_location_assignment PIN_AA13 -to DRAM_WE_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_ADDR[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_BA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_BA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CAS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CKE
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_CS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[13]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[14]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_DQ[15]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_LDQM
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_RAS_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_UDQM
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to DRAM_WE_N
+
+#============================================================
+# FAN
+#============================================================
+set_location_assignment PIN_AA12 -to FAN_CTRL
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FAN_CTRL
+
+#============================================================
+# FPGA
+#============================================================
+set_location_assignment PIN_J12 -to FPGA_I2C_SCLK
+set_location_assignment PIN_K12 -to FPGA_I2C_SDAT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_I2C_SCLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to FPGA_I2C_SDAT
+
+#============================================================
+# GPIO
+#============================================================
+set_location_assignment PIN_AC18 -to GPIO_0[0]
+set_location_assignment PIN_AH18 -to GPIO_0[10]
+set_location_assignment PIN_AH17 -to GPIO_0[11]
+set_location_assignment PIN_AG16 -to GPIO_0[12]
+set_location_assignment PIN_AE16 -to GPIO_0[13]
+set_location_assignment PIN_AF16 -to GPIO_0[14]
+set_location_assignment PIN_AG17 -to GPIO_0[15]
+set_location_assignment PIN_AA18 -to GPIO_0[16]
+set_location_assignment PIN_AA19 -to GPIO_0[17]
+set_location_assignment PIN_AE17 -to GPIO_0[18]
+set_location_assignment PIN_AC20 -to GPIO_0[19]
+set_location_assignment PIN_Y17 -to GPIO_0[1]
+set_location_assignment PIN_AH19 -to GPIO_0[20]
+set_location_assignment PIN_AJ20 -to GPIO_0[21]
+set_location_assignment PIN_AH20 -to GPIO_0[22]
+set_location_assignment PIN_AK21 -to GPIO_0[23]
+set_location_assignment PIN_AD19 -to GPIO_0[24]
+set_location_assignment PIN_AD20 -to GPIO_0[25]
+set_location_assignment PIN_AE18 -to GPIO_0[26]
+set_location_assignment PIN_AE19 -to GPIO_0[27]
+set_location_assignment PIN_AF20 -to GPIO_0[28]
+set_location_assignment PIN_AF21 -to GPIO_0[29]
+set_location_assignment PIN_AD17 -to GPIO_0[2]
+set_location_assignment PIN_AF19 -to GPIO_0[30]
+set_location_assignment PIN_AG21 -to GPIO_0[31]
+set_location_assignment PIN_AF18 -to GPIO_0[32]
+set_location_assignment PIN_AG20 -to GPIO_0[33]
+set_location_assignment PIN_AG18 -to GPIO_0[34]
+set_location_assignment PIN_AJ21 -to GPIO_0[35]
+set_location_assignment PIN_Y18 -to GPIO_0[3]
+set_location_assignment PIN_AK16 -to GPIO_0[4]
+set_location_assignment PIN_AK18 -to GPIO_0[5]
+set_location_assignment PIN_AK19 -to GPIO_0[6]
+set_location_assignment PIN_AJ19 -to GPIO_0[7]
+set_location_assignment PIN_AJ17 -to GPIO_0[8]
+set_location_assignment PIN_AJ16 -to GPIO_0[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[13]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[14]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[15]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[16]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[17]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[18]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[19]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[20]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[21]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[22]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[23]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[24]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[25]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[26]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[27]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[28]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[29]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[30]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[31]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[32]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[33]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[34]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[35]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_0[9]
+
+set_location_assignment PIN_AB17 -to GPIO_1[0]
+set_location_assignment PIN_AG26 -to GPIO_1[10]
+set_location_assignment PIN_AH24 -to GPIO_1[11]
+set_location_assignment PIN_AH27 -to GPIO_1[12]
+set_location_assignment PIN_AJ27 -to GPIO_1[13]
+set_location_assignment PIN_AK29 -to GPIO_1[14]
+set_location_assignment PIN_AK28 -to GPIO_1[15]
+set_location_assignment PIN_AK27 -to GPIO_1[16]
+set_location_assignment PIN_AJ26 -to GPIO_1[17]
+set_location_assignment PIN_AK26 -to GPIO_1[18]
+set_location_assignment PIN_AH25 -to GPIO_1[19]
+set_location_assignment PIN_AA21 -to GPIO_1[1]
+set_location_assignment PIN_AJ25 -to GPIO_1[20]
+set_location_assignment PIN_AJ24 -to GPIO_1[21]
+set_location_assignment PIN_AK24 -to GPIO_1[22]
+set_location_assignment PIN_AG23 -to GPIO_1[23]
+set_location_assignment PIN_AK23 -to GPIO_1[24]
+set_location_assignment PIN_AH23 -to GPIO_1[25]
+set_location_assignment PIN_AK22 -to GPIO_1[26]
+set_location_assignment PIN_AJ22 -to GPIO_1[27]
+set_location_assignment PIN_AH22 -to GPIO_1[28]
+set_location_assignment PIN_AG22 -to GPIO_1[29]
+set_location_assignment PIN_AB21 -to GPIO_1[2]
+set_location_assignment PIN_AF24 -to GPIO_1[30]
+set_location_assignment PIN_AF23 -to GPIO_1[31]
+set_location_assignment PIN_AE22 -to GPIO_1[32]
+set_location_assignment PIN_AD21 -to GPIO_1[33]
+set_location_assignment PIN_AA20 -to GPIO_1[34]
+set_location_assignment PIN_AC22 -to GPIO_1[35]
+set_location_assignment PIN_AC23 -to GPIO_1[3]
+set_location_assignment PIN_AD24 -to GPIO_1[4]
+set_location_assignment PIN_AE23 -to GPIO_1[5]
+set_location_assignment PIN_AE24 -to GPIO_1[6]
+set_location_assignment PIN_AF25 -to GPIO_1[7]
+set_location_assignment PIN_AF26 -to GPIO_1[8]
+set_location_assignment PIN_AG25 -to GPIO_1[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[10]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[11]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[12]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[13]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[14]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[15]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[16]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[17]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[18]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[19]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[20]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[21]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[22]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[23]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[24]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[25]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[26]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[27]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[28]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[29]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[30]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[31]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[32]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[33]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[34]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[35]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to GPIO_1[9]
+
+#============================================================
+# HEX0
+#============================================================
+set_location_assignment PIN_AE26 -to HEX0[0]
+set_location_assignment PIN_AE27 -to HEX0[1]
+set_location_assignment PIN_AE28 -to HEX0[2]
+set_location_assignment PIN_AG27 -to HEX0[3]
+set_location_assignment PIN_AF28 -to HEX0[4]
+set_location_assignment PIN_AG28 -to HEX0[5]
+set_location_assignment PIN_AH28 -to HEX0[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX0[6]
+
+#============================================================
+# HEX1
+#============================================================
+set_location_assignment PIN_AJ29 -to HEX1[0]
+set_location_assignment PIN_AH29 -to HEX1[1]
+set_location_assignment PIN_AH30 -to HEX1[2]
+set_location_assignment PIN_AG30 -to HEX1[3]
+set_location_assignment PIN_AF29 -to HEX1[4]
+set_location_assignment PIN_AF30 -to HEX1[5]
+set_location_assignment PIN_AD27 -to HEX1[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX1[6]
+
+#============================================================
+# HEX2
+#============================================================
+set_location_assignment PIN_AB23 -to HEX2[0]
+set_location_assignment PIN_AE29 -to HEX2[1]
+set_location_assignment PIN_AD29 -to HEX2[2]
+set_location_assignment PIN_AC28 -to HEX2[3]
+set_location_assignment PIN_AD30 -to HEX2[4]
+set_location_assignment PIN_AC29 -to HEX2[5]
+set_location_assignment PIN_AC30 -to HEX2[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX2[6]
+
+#============================================================
+# HEX3
+#============================================================
+set_location_assignment PIN_AD26 -to HEX3[0]
+set_location_assignment PIN_AC27 -to HEX3[1]
+set_location_assignment PIN_AD25 -to HEX3[2]
+set_location_assignment PIN_AC25 -to HEX3[3]
+set_location_assignment PIN_AB28 -to HEX3[4]
+set_location_assignment PIN_AB25 -to HEX3[5]
+set_location_assignment PIN_AB22 -to HEX3[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX3[6]
+
+#============================================================
+# HEX4
+#============================================================
+set_location_assignment PIN_AA24 -to HEX4[0]
+set_location_assignment PIN_Y23 -to HEX4[1]
+set_location_assignment PIN_Y24 -to HEX4[2]
+set_location_assignment PIN_W22 -to HEX4[3]
+set_location_assignment PIN_W24 -to HEX4[4]
+set_location_assignment PIN_V23 -to HEX4[5]
+set_location_assignment PIN_W25 -to HEX4[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX4[6]
+
+#============================================================
+# HEX5
+#============================================================
+set_location_assignment PIN_V25 -to HEX5[0]
+set_location_assignment PIN_AA28 -to HEX5[1]
+set_location_assignment PIN_Y27 -to HEX5[2]
+set_location_assignment PIN_AB27 -to HEX5[3]
+set_location_assignment PIN_AB26 -to HEX5[4]
+set_location_assignment PIN_AA26 -to HEX5[5]
+set_location_assignment PIN_AA25 -to HEX5[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HEX5[6]
+
+#============================================================
+# IRDA
+#============================================================
+set_location_assignment PIN_AA30 -to IRDA_RXD
+set_location_assignment PIN_AB30 -to IRDA_TXD
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to IRDA_RXD
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to IRDA_TXD
+
+#============================================================
+# KEY
+#============================================================
+set_location_assignment PIN_AA14 -to KEY[0]
+set_location_assignment PIN_AA15 -to KEY[1]
+set_location_assignment PIN_W15 -to KEY[2]
+set_location_assignment PIN_Y16 -to KEY[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to KEY[3]
+
+#============================================================
+# LEDR
+#============================================================
+set_location_assignment PIN_V16 -to LEDR[0]
+set_location_assignment PIN_W16 -to LEDR[1]
+set_location_assignment PIN_V17 -to LEDR[2]
+set_location_assignment PIN_V18 -to LEDR[3]
+set_location_assignment PIN_W17 -to LEDR[4]
+set_location_assignment PIN_W19 -to LEDR[5]
+set_location_assignment PIN_Y19 -to LEDR[6]
+set_location_assignment PIN_W20 -to LEDR[7]
+set_location_assignment PIN_W21 -to LEDR[8]
+set_location_assignment PIN_Y21 -to LEDR[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to LEDR[9]
+
+#============================================================
+# PS2
+#============================================================
+set_location_assignment PIN_AD7 -to PS2_CLK
+set_location_assignment PIN_AE7 -to PS2_DAT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_DAT
+
+set_location_assignment PIN_AD9 -to PS2_CLK2
+set_location_assignment PIN_AE9 -to PS2_DAT2
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_CLK2
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to PS2_DAT2
+
+#============================================================
+# SW
+#============================================================
+set_location_assignment PIN_AB12 -to SW[0]
+set_location_assignment PIN_AC12 -to SW[1]
+set_location_assignment PIN_AF9 -to SW[2]
+set_location_assignment PIN_AF10 -to SW[3]
+set_location_assignment PIN_AD11 -to SW[4]
+set_location_assignment PIN_AD12 -to SW[5]
+set_location_assignment PIN_AE11 -to SW[6]
+set_location_assignment PIN_AC9 -to SW[7]
+set_location_assignment PIN_AD10 -to SW[8]
+set_location_assignment PIN_AE12 -to SW[9]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[8]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to SW[9]
+
+#============================================================
+# TD
+#============================================================
+set_location_assignment PIN_H15 -to TD_CLK27
+set_location_assignment PIN_D2 -to TD_DATA[0]
+set_location_assignment PIN_B1 -to TD_DATA[1]
+set_location_assignment PIN_E2 -to TD_DATA[2]
+set_location_assignment PIN_B2 -to TD_DATA[3]
+set_location_assignment PIN_D1 -to TD_DATA[4]
+set_location_assignment PIN_E1 -to TD_DATA[5]
+set_location_assignment PIN_C2 -to TD_DATA[6]
+set_location_assignment PIN_B3 -to TD_DATA[7]
+set_location_assignment PIN_A5 -to TD_HS
+set_location_assignment PIN_F6 -to TD_RESET_N
+set_location_assignment PIN_A3 -to TD_VS
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_CLK27
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_DATA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_DATA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_DATA[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_DATA[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_DATA[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_DATA[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_DATA[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_DATA[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_HS
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_RESET_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to TD_VS
+
+#============================================================
+# USB
+#============================================================
+set_location_assignment PIN_AF4 -to USB_B2_CLK
+set_location_assignment PIN_AH4 -to USB_B2_DATA[0]
+set_location_assignment PIN_AH3 -to USB_B2_DATA[1]
+set_location_assignment PIN_AJ2 -to USB_B2_DATA[2]
+set_location_assignment PIN_AJ1 -to USB_B2_DATA[3]
+set_location_assignment PIN_AH2 -to USB_B2_DATA[4]
+set_location_assignment PIN_AG3 -to USB_B2_DATA[5]
+set_location_assignment PIN_AG2 -to USB_B2_DATA[6]
+set_location_assignment PIN_AG1 -to USB_B2_DATA[7]
+set_location_assignment PIN_AF5 -to USB_EMPTY
+set_location_assignment PIN_AG5 -to USB_FULL
+set_location_assignment PIN_AF6 -to USB_OE_N
+set_location_assignment PIN_AG6 -to USB_RD_N
+set_location_assignment PIN_AG7 -to USB_RESET_N
+set_location_assignment PIN_AG8 -to USB_SCL
+set_location_assignment PIN_AF8 -to USB_SDA
+set_location_assignment PIN_AH5 -to USB_WR_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_B2_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_B2_DATA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_B2_DATA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_B2_DATA[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_B2_DATA[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_B2_DATA[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_B2_DATA[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_B2_DATA[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_B2_DATA[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_EMPTY
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_FULL
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_OE_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_RD_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_RESET_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_SCL
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_SDA
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to USB_WR_N
+
+#============================================================
+# VGA
+#============================================================
+set_location_assignment PIN_B13 -to VGA_B[0]
+set_location_assignment PIN_G13 -to VGA_B[1]
+set_location_assignment PIN_H13 -to VGA_B[2]
+set_location_assignment PIN_F14 -to VGA_B[3]
+set_location_assignment PIN_H14 -to VGA_B[4]
+set_location_assignment PIN_F15 -to VGA_B[5]
+set_location_assignment PIN_G15 -to VGA_B[6]
+set_location_assignment PIN_J14 -to VGA_B[7]
+set_location_assignment PIN_F10 -to VGA_BLANK_N
+set_location_assignment PIN_A11 -to VGA_CLK
+set_location_assignment PIN_J9 -to VGA_G[0]
+set_location_assignment PIN_J10 -to VGA_G[1]
+set_location_assignment PIN_H12 -to VGA_G[2]
+set_location_assignment PIN_G10 -to VGA_G[3]
+set_location_assignment PIN_G11 -to VGA_G[4]
+set_location_assignment PIN_G12 -to VGA_G[5]
+set_location_assignment PIN_F11 -to VGA_G[6]
+set_location_assignment PIN_E11 -to VGA_G[7]
+set_location_assignment PIN_B11 -to VGA_HS
+set_location_assignment PIN_A13 -to VGA_R[0]
+set_location_assignment PIN_C13 -to VGA_R[1]
+set_location_assignment PIN_E13 -to VGA_R[2]
+set_location_assignment PIN_B12 -to VGA_R[3]
+set_location_assignment PIN_C12 -to VGA_R[4]
+set_location_assignment PIN_D12 -to VGA_R[5]
+set_location_assignment PIN_E12 -to VGA_R[6]
+set_location_assignment PIN_F13 -to VGA_R[7]
+set_location_assignment PIN_C10 -to VGA_SYNC_N
+set_location_assignment PIN_D11 -to VGA_VS
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_B[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_BLANK_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_G[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_HS
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_R[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_SYNC_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to VGA_VS
+
+#============================================================
+# HPS
+#============================================================
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_CONV_USB_N
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[0]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[1]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[2]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[3]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[4]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[5]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[6]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[7]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[8]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[9]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[10]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[11]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[12]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[13]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ADDR[14]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_BA[0]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_BA[1]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_BA[2]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_CAS_N
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_CKE
+set_instance_assignment -name IO_STANDARD "Differential 1.5-V SSTL Class I" -to HPS_DDR3_CK_N
+set_instance_assignment -name IO_STANDARD "Differential 1.5-V SSTL Class I" -to HPS_DDR3_CK_P
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_CS_N
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DM[0]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DM[1]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DM[2]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DM[3]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[0]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[1]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[2]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[3]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[4]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[5]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[6]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[7]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[8]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[9]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[10]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[11]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[12]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[13]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[14]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[15]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[16]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[17]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[18]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[19]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[20]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[21]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[22]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[23]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[24]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[25]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[26]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[27]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[28]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[29]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[30]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_DQ[31]
+set_instance_assignment -name IO_STANDARD "Differential 1.5-V SSTL Class I" -to HPS_DDR3_DQS_N[0]
+set_instance_assignment -name IO_STANDARD "Differential 1.5-V SSTL Class I" -to HPS_DDR3_DQS_N[1]
+set_instance_assignment -name IO_STANDARD "Differential 1.5-V SSTL Class I" -to HPS_DDR3_DQS_N[2]
+set_instance_assignment -name IO_STANDARD "Differential 1.5-V SSTL Class I" -to HPS_DDR3_DQS_N[3]
+set_instance_assignment -name IO_STANDARD "Differential 1.5-V SSTL Class I" -to HPS_DDR3_DQS_P[0]
+set_instance_assignment -name IO_STANDARD "Differential 1.5-V SSTL Class I" -to HPS_DDR3_DQS_P[1]
+set_instance_assignment -name IO_STANDARD "Differential 1.5-V SSTL Class I" -to HPS_DDR3_DQS_P[2]
+set_instance_assignment -name IO_STANDARD "Differential 1.5-V SSTL Class I" -to HPS_DDR3_DQS_P[3]
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_ODT
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_RAS_N
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_RESET_N
+set_instance_assignment -name IO_STANDARD "SSTL-15 CLASS I" -to HPS_DDR3_RZQ
+set_instance_assignment -name IO_STANDARD "SSTL-15 Class I" -to HPS_DDR3_WE_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_GTX_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_INT_N
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_MDC
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_MDIO
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_RX_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_RX_DATA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_RX_DATA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_RX_DATA[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_RX_DATA[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_RX_DV
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_TX_DATA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_TX_DATA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_TX_DATA[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_TX_DATA[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_ENET_TX_EN
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_FLASH_DATA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_FLASH_DATA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_FLASH_DATA[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_FLASH_DATA[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_FLASH_DCLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_FLASH_NCSO
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_GSENSOR_INT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_I2C1_SCLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_I2C1_SDAT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_I2C2_SCLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_I2C2_SDAT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_I2C_CONTROL
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_KEY
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_LED
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_LTC_GPIO
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_SD_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_SD_CMD
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_SD_DATA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_SD_DATA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_SD_DATA[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_SD_DATA[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_SPIM_CLK
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_SPIM_MISO
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_SPIM_MOSI
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_SPIM_SS
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_UART_RX
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_UART_TX
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_CLKOUT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_DATA[0]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_DATA[1]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_DATA[2]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_DATA[3]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_DATA[4]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_DATA[5]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_DATA[6]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_DATA[7]
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_DIR
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_NXT
+set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to HPS_USB_STP
+set_instance_assignment -name io_standard "3.3-V LVTTL" -to HPS_GPIO[0]
+set_instance_assignment -name io_standard "3.3-V LVTTL" -to HPS_GPIO[1]
+
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[10]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[11]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[12]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[13]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[14]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[2]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[3]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[4]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[5]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[6]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[7]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[8]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ADDR[9]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_BA[0]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_BA[1]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_BA[2]
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_CAS_N
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_CKE
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_CS_N
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_ODT
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_RAS_N
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_WE_N
+set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to HPS_DDR3_RESET_N
+
+set_instance_assignment -name D5_DELAY 2 -to HPS_DDR3_CK_P
+set_instance_assignment -name D5_DELAY 2 -to HPS_DDR3_CK_N
+
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[0]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[1]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[2]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[3]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[4]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[5]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[6]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[7]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[8]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[9]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[10]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[11]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[12]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[13]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[14]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[15]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[16]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[17]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[18]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[19]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[20]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[21]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[22]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[23]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[24]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[25]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[26]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[27]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[28]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[29]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[30]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[31]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_P[0]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_P[1]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_P[2]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_P[3]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_N[0]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_N[1]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_N[2]
+set_instance_assignment -name INPUT_TERMINATION "PARALLEL 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_N[3]
+
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[4]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[5]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[6]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[7]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[8]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[9]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[10]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[11]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[12]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[13]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[14]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[15]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[16]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[17]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[18]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[19]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[20]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[21]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[22]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[23]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[24]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[25]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[26]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[27]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[28]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[29]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[30]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQ[31]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_P[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_P[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_P[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_P[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_N[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_N[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_N[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DQS_N[3]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to HPS_DDR3_CK_P
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITHOUT CALIBRATION" -to HPS_DDR3_CK_N
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DM[0]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DM[1]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DM[2]
+set_instance_assignment -name OUTPUT_TERMINATION "SERIES 50 OHM WITH CALIBRATION" -to HPS_DDR3_DM[3]
+
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[0]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[1]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[2]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[3]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[4]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[5]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[6]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[7]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[8]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[9]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[10]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[11]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[12]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[13]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[14]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[15]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[16]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[17]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[18]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[19]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[20]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[21]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[22]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[23]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[24]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[25]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[26]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[27]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[28]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[29]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[30]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQ[31]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DM[0]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DM[1]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DM[2]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DM[3]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQS_P[0]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQS_P[1]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQS_P[2]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQS_P[3]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQS_N[0]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQS_N[1]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQS_N[2]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_DQS_N[3]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[0]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[10]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[11]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[12]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[13]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[14]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[1]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[2]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[3]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[4]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[5]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[6]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[7]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[8]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ADDR[9]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_BA[0]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_BA[1]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_BA[2]
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_CAS_N
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_CKE
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_CS_N
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_ODT
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_RAS_N
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_WE_N
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_RESET_N
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_CK_P
+set_instance_assignment -name PACKAGE_SKEW_COMPENSATION OFF -to HPS_DDR3_CK_N
+
+#============================================================
+# End of pin and io_standard assignments
+#============================================================
+
diff --git a/task1/.gitignore b/task1/.gitignore
new file mode 100644
index 0000000..b0345dc
--- /dev/null
+++ b/task1/.gitignore
@@ -0,0 +1,18 @@
+.DS_Store
+transcript
+tcl_stacktrace.txt
+c5_pin_model_dump.txt
+*.mti
+*.mpf
+*.wlf
+*.qdb
+*.qpg
+*.qtl
+*.qpf
+*.sof
+*.bak
+work/
+db/
+incremental_db/
+simulation/
+output_files/
diff --git a/task1/vga_demo.sv b/task1/vga_demo.sv
new file mode 100644
index 0000000..88aa64e
--- /dev/null
+++ b/task1/vga_demo.sv
@@ -0,0 +1,29 @@
+// synopsys translate_off
+`timescale 1 ps / 1 ps
+// synopsys translate_on
+
+module vga_demo(input logic CLOCK_50, input logic [3:0] KEY, input logic [9:0] SW,
+ output logic [7:0] VGA_R, output logic [7:0] VGA_G, output logic [7:0] VGA_B,
+ output logic VGA_HS, output logic VGA_VS, output logic VGA_CLK,
+ output logic [7:0] VGA_X, output logic [6:0] VGA_Y,
+ output logic [2:0] VGA_COLOUR, output logic VGA_PLOT);
+
+logic [9:0] VGA_R_10;
+logic [9:0] VGA_G_10;
+logic [9:0] VGA_B_10;
+logic VGA_BLANK, VGA_SYNC;
+
+assign VGA_R = VGA_R_10[9:2];
+assign VGA_G = VGA_G_10[9:2];
+assign VGA_B = VGA_B_10[9:2];
+
+assign VGA_X = {3'b0,SW[4:0]};
+assign VGA_Y = {2'b0,SW[9:5]};
+assign VGA_PLOT = ~KEY[0];
+assign VGA_COLOUR = SW[2:0];
+
+vga_adapter#(.RESOLUTION("160x120")) vga_u0(.resetn(KEY[3]), .clock(CLOCK_50), .colour(SW[2:0]),
+ .x({3'b0,SW[4:0]}), .y({2'b0,SW[9:5]}), .plot(~KEY[0]),
+ .VGA_R(VGA_R_10), .VGA_G(VGA_G_10), .VGA_B(VGA_B_10),
+ .*);
+endmodule: vga_demo
diff --git a/task2/.gitignore b/task2/.gitignore
new file mode 100644
index 0000000..b0345dc
--- /dev/null
+++ b/task2/.gitignore
@@ -0,0 +1,18 @@
+.DS_Store
+transcript
+tcl_stacktrace.txt
+c5_pin_model_dump.txt
+*.mti
+*.mpf
+*.wlf
+*.qdb
+*.qpg
+*.qtl
+*.qpf
+*.sof
+*.bak
+work/
+db/
+incremental_db/
+simulation/
+output_files/
diff --git a/task2/README.md b/task2/README.md
new file mode 100644
index 0000000..700d8b9
--- /dev/null
+++ b/task2/README.md
@@ -0,0 +1,13 @@
+# Contributions
+List of contributions made by members of the team.
+
+It is highly recommended that you each work individually on this specific task. However, only one solution needs to be pushed to GitHub.
+
+## Contributions made by ABC DEF
+- contribution 1
+- contribution 2
+
+## Contributions made by TUV XYZ
+- contribution 1
+- contribution 2
+
diff --git a/task2/fillscreen.sv b/task2/fillscreen.sv
new file mode 100644
index 0000000..323e7a5
--- /dev/null
+++ b/task2/fillscreen.sv
@@ -0,0 +1,7 @@
+module fillscreen(input logic clk, input logic rst_n, input logic [2:0] colour,
+ input logic start, output logic done,
+ output logic [7:0] vga_x, output logic [6:0] vga_y,
+ output logic [2:0] vga_colour, output logic vga_plot);
+ // fill the screen
+endmodule
+
diff --git a/task2/task2.sv b/task2/task2.sv
new file mode 100644
index 0000000..8389348
--- /dev/null
+++ b/task2/task2.sv
@@ -0,0 +1,12 @@
+module task2(input logic CLOCK_50, input logic [3:0] KEY,
+ input logic [9:0] SW, output logic [9:0] LEDR,
+ output logic [6:0] HEX0, output logic [6:0] HEX1, output logic [6:0] HEX2,
+ output logic [6:0] HEX3, output logic [6:0] HEX4, output logic [6:0] HEX5,
+ output logic [7:0] VGA_R, output logic [7:0] VGA_G, output logic [7:0] VGA_B,
+ output logic VGA_HS, output logic VGA_VS, output logic VGA_CLK,
+ output logic [7:0] VGA_X, output logic [6:0] VGA_Y,
+ output logic [2:0] VGA_COLOUR, output logic VGA_PLOT);
+
+ // instantiate and connect the VGA adapter and your module
+
+endmodule: task2
diff --git a/task2/tb_rtl_fillscreen.sv b/task2/tb_rtl_fillscreen.sv
new file mode 100644
index 0000000..0c8013b
--- /dev/null
+++ b/task2/tb_rtl_fillscreen.sv
@@ -0,0 +1,5 @@
+module tb_rtl_fillscreen();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_rtl_fillscreen
diff --git a/task2/tb_rtl_task2.sv b/task2/tb_rtl_task2.sv
new file mode 100644
index 0000000..736b1f6
--- /dev/null
+++ b/task2/tb_rtl_task2.sv
@@ -0,0 +1,5 @@
+module tb_rtl_task2();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_rtl_task2
diff --git a/task2/tb_syn_fillscreen.sv b/task2/tb_syn_fillscreen.sv
new file mode 100644
index 0000000..11d80a4
--- /dev/null
+++ b/task2/tb_syn_fillscreen.sv
@@ -0,0 +1,5 @@
+module tb_syn_fillscreen();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_syn_fillscreen
diff --git a/task2/tb_syn_task2.sv b/task2/tb_syn_task2.sv
new file mode 100644
index 0000000..31aa3a9
--- /dev/null
+++ b/task2/tb_syn_task2.sv
@@ -0,0 +1,5 @@
+module tb_syn_task2();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_syn_task2
diff --git a/task2/tb_task2.sv b/task2/tb_task2.sv
new file mode 100644
index 0000000..ceb4e98
--- /dev/null
+++ b/task2/tb_task2.sv
@@ -0,0 +1,5 @@
+module tb_task2();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_task2
diff --git a/task3/.gitignore b/task3/.gitignore
new file mode 100644
index 0000000..b0345dc
--- /dev/null
+++ b/task3/.gitignore
@@ -0,0 +1,18 @@
+.DS_Store
+transcript
+tcl_stacktrace.txt
+c5_pin_model_dump.txt
+*.mti
+*.mpf
+*.wlf
+*.qdb
+*.qpg
+*.qtl
+*.qpf
+*.sof
+*.bak
+work/
+db/
+incremental_db/
+simulation/
+output_files/
diff --git a/task3/README.md b/task3/README.md
new file mode 100644
index 0000000..7a55339
--- /dev/null
+++ b/task3/README.md
@@ -0,0 +1,12 @@
+# Contributions
+List of contributions made by members of the team.
+
+## Contributions made by ABC DEF
+- contribution 1
+- contribution 2
+
+## Contributions made by TUV XYZ
+- contribution 1
+- contribution 2
+
+
diff --git a/task3/circle.sv b/task3/circle.sv
new file mode 100644
index 0000000..112426d
--- /dev/null
+++ b/task3/circle.sv
@@ -0,0 +1,8 @@
+module circle(input logic clk, input logic rst_n, input logic [2:0] colour,
+ input logic [7:0] centre_x, input logic [6:0] centre_y, input logic [7:0] radius,
+ input logic start, output logic done,
+ output logic [7:0] vga_x, output logic [6:0] vga_y,
+ output logic [2:0] vga_colour, output logic vga_plot);
+ // draw the circle
+endmodule
+
diff --git a/task3/task3.sv b/task3/task3.sv
new file mode 100644
index 0000000..d22ae1c
--- /dev/null
+++ b/task3/task3.sv
@@ -0,0 +1,12 @@
+module task3(input logic CLOCK_50, input logic [3:0] KEY,
+ input logic [9:0] SW, output logic [9:0] LEDR,
+ output logic [6:0] HEX0, output logic [6:0] HEX1, output logic [6:0] HEX2,
+ output logic [6:0] HEX3, output logic [6:0] HEX4, output logic [6:0] HEX5,
+ output logic [7:0] VGA_R, output logic [7:0] VGA_G, output logic [7:0] VGA_B,
+ output logic VGA_HS, output logic VGA_VS, output logic VGA_CLK,
+ output logic [7:0] VGA_X, output logic [6:0] VGA_Y,
+ output logic [2:0] VGA_COLOUR, output logic VGA_PLOT);
+
+ // instantiate and connect the VGA adapter and your module
+
+endmodule: task3
diff --git a/task3/tb_rtl_circle.sv b/task3/tb_rtl_circle.sv
new file mode 100644
index 0000000..8f1fbaa
--- /dev/null
+++ b/task3/tb_rtl_circle.sv
@@ -0,0 +1,5 @@
+module tb_rtl_circle();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_rtl_circle
diff --git a/task3/tb_rtl_task3.sv b/task3/tb_rtl_task3.sv
new file mode 100644
index 0000000..3404a06
--- /dev/null
+++ b/task3/tb_rtl_task3.sv
@@ -0,0 +1,5 @@
+module tb_rtl_task3();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_rtl_task3
diff --git a/task3/tb_syn_circle.sv b/task3/tb_syn_circle.sv
new file mode 100644
index 0000000..9134b68
--- /dev/null
+++ b/task3/tb_syn_circle.sv
@@ -0,0 +1,5 @@
+module tb_syn_circle();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_syn_circle
diff --git a/task3/tb_syn_task3.sv b/task3/tb_syn_task3.sv
new file mode 100644
index 0000000..fe0a6f4
--- /dev/null
+++ b/task3/tb_syn_task3.sv
@@ -0,0 +1,5 @@
+module tb_syn_task3();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_syn_task3
diff --git a/task3/tb_task3.sv b/task3/tb_task3.sv
new file mode 100644
index 0000000..1d5c655
--- /dev/null
+++ b/task3/tb_task3.sv
@@ -0,0 +1,5 @@
+module tb_task3();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_task3
diff --git a/task4/.gitignore b/task4/.gitignore
new file mode 100644
index 0000000..b0345dc
--- /dev/null
+++ b/task4/.gitignore
@@ -0,0 +1,18 @@
+.DS_Store
+transcript
+tcl_stacktrace.txt
+c5_pin_model_dump.txt
+*.mti
+*.mpf
+*.wlf
+*.qdb
+*.qpg
+*.qtl
+*.qpf
+*.sof
+*.bak
+work/
+db/
+incremental_db/
+simulation/
+output_files/
diff --git a/task4/README.md b/task4/README.md
new file mode 100644
index 0000000..7a55339
--- /dev/null
+++ b/task4/README.md
@@ -0,0 +1,12 @@
+# Contributions
+List of contributions made by members of the team.
+
+## Contributions made by ABC DEF
+- contribution 1
+- contribution 2
+
+## Contributions made by TUV XYZ
+- contribution 1
+- contribution 2
+
+
diff --git a/task4/reuleaux.sv b/task4/reuleaux.sv
new file mode 100644
index 0000000..abcde5e
--- /dev/null
+++ b/task4/reuleaux.sv
@@ -0,0 +1,8 @@
+module reuleaux(input logic clk, input logic rst_n, input logic [2:0] colour,
+ input logic [7:0] centre_x, input logic [6:0] centre_y, input logic [7:0] diameter,
+ input logic start, output logic done,
+ output logic [7:0] vga_x, output logic [6:0] vga_y,
+ output logic [2:0] vga_colour, output logic vga_plot);
+ // draw the Reuleaux triangle
+endmodule
+
diff --git a/task4/task4.sv b/task4/task4.sv
new file mode 100644
index 0000000..71d43be
--- /dev/null
+++ b/task4/task4.sv
@@ -0,0 +1,12 @@
+module task4(input logic CLOCK_50, input logic [3:0] KEY,
+ input logic [9:0] SW, output logic [9:0] LEDR,
+ output logic [6:0] HEX0, output logic [6:0] HEX1, output logic [6:0] HEX2,
+ output logic [6:0] HEX3, output logic [6:0] HEX4, output logic [6:0] HEX5,
+ output logic [7:0] VGA_R, output logic [7:0] VGA_G, output logic [7:0] VGA_B,
+ output logic VGA_HS, output logic VGA_VS, output logic VGA_CLK,
+ output logic [7:0] VGA_X, output logic [6:0] VGA_Y,
+ output logic [2:0] VGA_COLOUR, output logic VGA_PLOT);
+
+ // instantiate and connect the VGA adapter and your module
+
+endmodule: task4
diff --git a/task4/tb_rtl_reuleaux.sv b/task4/tb_rtl_reuleaux.sv
new file mode 100644
index 0000000..4e77c33
--- /dev/null
+++ b/task4/tb_rtl_reuleaux.sv
@@ -0,0 +1,5 @@
+module tb_rtl_reuleaux();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_rtl_reuleaux
diff --git a/task4/tb_rtl_task4.sv b/task4/tb_rtl_task4.sv
new file mode 100644
index 0000000..47f6810
--- /dev/null
+++ b/task4/tb_rtl_task4.sv
@@ -0,0 +1,5 @@
+module tb_rtl_task4();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_rtl_task4
diff --git a/task4/tb_syn_reuleaux.sv b/task4/tb_syn_reuleaux.sv
new file mode 100644
index 0000000..d39f0bb
--- /dev/null
+++ b/task4/tb_syn_reuleaux.sv
@@ -0,0 +1,5 @@
+module tb_syn_reuleaux();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_syn_reuleaux
diff --git a/task4/tb_syn_task4.sv b/task4/tb_syn_task4.sv
new file mode 100644
index 0000000..8c66b3f
--- /dev/null
+++ b/task4/tb_syn_task4.sv
@@ -0,0 +1,5 @@
+module tb_syn_task4();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_syn_task4
diff --git a/task4/tb_task4.sv b/task4/tb_task4.sv
new file mode 100644
index 0000000..04f882f
--- /dev/null
+++ b/task4/tb_task4.sv
@@ -0,0 +1,5 @@
+module tb_task4();
+
+// Your testbench goes here. Our toplevel will give up after 1,000,000 ticks.
+
+endmodule: tb_task4
diff --git a/vga-core/de1_vga_gui.tcl b/vga-core/de1_vga_gui.tcl
new file mode 100644
index 0000000..a6a3a4a
--- /dev/null
+++ b/vga-core/de1_vga_gui.tcl
@@ -0,0 +1,107 @@
+# vim: set sw=4 ai cin et:
+
+# NOTE: this must be sychronized with VGA adaptor module
+
+
+if { [namespace exists ::de1vga] } { namespace delete ::de1vga }
+
+namespace eval ::de1vga {
+ namespace eval var {
+ set zoom 4
+ set width 160
+ set height 120
+ set bg "#808080"
+ set count 0
+ }
+
+
+ proc init {} {
+ if ({[winfo exists .de1vga]}) { destroy .de1vga }
+
+ toplevel .de1vga -padx 5 -pady 5
+ wm title .de1vga "fake VGA screen"
+
+ frame .de1vga.draw
+ pack .de1vga.draw -expand 1 -fill both
+
+ frame .de1vga.status
+ button .de1vga.status.reset -width 5 -relief ridge -text "CLEAR" -command [namespace code reset]
+ label .de1vga.status.count_legend -text " count:"
+ label .de1vga.status.count_val -relief groove -width 10
+
+ label .de1vga.status.drawn_legend -text "last:"
+ label .de1vga.status.drawn_pos -relief groove -width 7
+ label .de1vga.status.click_legend -text " clicked:"
+ label .de1vga.status.click_pos -relief groove -width 7
+ label .de1vga.status.mouse_legend -text " mouse:"
+ label .de1vga.status.mouse_pos -relief groove -width 7
+ pack .de1vga.status.reset .de1vga.status.count_legend .de1vga.status.count_val -side left
+ pack .de1vga.status.mouse_pos .de1vga.status.mouse_legend .de1vga.status.click_pos .de1vga.status.click_legend \
+ .de1vga.status.drawn_pos .de1vga.status.drawn_legend -side right
+ pack .de1vga.status -side bottom -fill x
+ .de1vga.status.drawn_pos configure -text "-,-"
+ .de1vga.status.mouse_pos configure -text "-,-"
+ .de1vga.status.click_pos configure -text "-,-"
+
+ set w [expr $var::width * $var::zoom]
+ set h [expr {$var::height * $var::zoom}]
+ canvas .de1vga.draw.c -width $w -height $h -bg $var::bg
+ pack .de1vga.draw.c -expand 1 -fill both
+ bind .de1vga.draw.c <Motion> [namespace code { show_mouse %x %y }]
+ bind .de1vga.draw.c <ButtonPress> [namespace code { show_click %x %y }]
+ bind .de1vga.draw.c <Leave> [namespace code { .de1vga.status.mouse_pos configure -text "-,-" }]
+ }
+
+ proc reset {} {
+ .de1vga.draw.c create rectangle 0 0 [expr $var::width * $var::zoom - 1] [expr $var::height * $var::zoom - 1] -outline $var::bg -fill $var::bg
+ set var::count 0
+ .de1vga.status.count_val configure -text "$var::count"
+ .de1vga.status.drawn_pos configure -text "-,-"
+ }
+
+ proc rgb_to_hex {c} {
+ set b [expr ($c & 1) * 255]
+ set g [expr (($c >> 1) & 1) * 255]
+ set r [expr (($c >> 2) & 1) * 255]
+ return [format "#%02x%02x%02x" $r $g $b]
+ }
+
+ proc plot {x y c} {
+ if !({[winfo exists .de1vga]}) {init}
+
+ set x [string tolower $x]
+ set y [string tolower $y]
+ set c [string tolower $c]
+ if { [string equal $x "x"] || [string equal $x "z" ]} { return }
+ if { [string equal $y "x"] || [string equal $y "z" ]} { return }
+ if { [string equal $c "x"] || [string equal $c "z" ]} { return }
+ if {[expr $x < 0]} { return }
+ if {[expr $x >= $var::width]} { return }
+ if {[expr $y < 0]} { return }
+ if {[expr $y >= $var::height]} { return }
+ if !({[winfo exists .de1vga]}) { init }
+ set x0 [expr $x * $var::zoom]
+ set y0 [expr $y * $var::zoom]
+ set x1 [expr ($x+1) * $var::zoom - 1]
+ set y1 [expr ($y+1) * $var::zoom - 1]
+ set clr [rgb_to_hex $c]
+ .de1vga.draw.c create rectangle $x0 $y0 $x1 $y1 -outline $clr -fill $clr
+ incr var::count
+ .de1vga.status.count_val configure -text "$var::count"
+ .de1vga.status.drawn_pos configure -text "$x,$y:$c"
+ }
+
+ proc show_mouse {x0 y0} {
+ set x [expr $x0 / $var::zoom]
+ set y [expr $y0 / $var::zoom]
+ .de1vga.status.mouse_pos configure -text "$x,$y"
+ }
+
+ proc show_click {x0 y0} {
+ set x [expr $x0 / $var::zoom]
+ set y [expr $y0 / $var::zoom]
+ .de1vga.status.click_pos configure -text "$x,$y"
+ }
+}
+
+namespace inscope ::de1vga init
diff --git a/vga-core/vga_adapter.sv b/vga-core/vga_adapter.sv
new file mode 100644
index 0000000..3b9209c
--- /dev/null
+++ b/vga-core/vga_adapter.sv
@@ -0,0 +1,283 @@
+// synopsys translate_off
+`timescale 1 ps / 1 ps
+// synopsys translate_on
+
+/* VGA Adapter
+ * ----------------
+ *
+ * This is an implementation of a VGA Adapter. The adapter uses VGA mode signalling to initiate
+ * a 640x480 resolution mode on a computer monitor, with a refresh rate of approximately 60Hz.
+ * It is designed for easy use in an early digital logic design course to facilitate student
+ * projects on the Altera DE2 Educational board.
+ *
+ * This implementation of the VGA adapter can display images of varying colour depth at a resolution of
+ * 320x240 or 160x120 superpixels. The concept of superpixels is introduced to reduce the amount of on-chip
+ * memory used by the adapter. The following table shows the number of bits of on-chip memory used by
+ * the adapter in various resolutions and colour depths.
+ *
+ * -------------------------------------------------------------------------------------------------------------------------------
+ * Resolution | Mono | 8 colours | 64 colours | 512 colours | 4096 colours | 32768 colours | 262144 colours | 2097152 colours |
+ * -------------------------------------------------------------------------------------------------------------------------------
+ * 160x120 | 19200 | 57600 | 115200 | 172800 | 230400 | 288000 | 345600 | 403200 |
+ * 320x240 | 78600 | 230400 | ############## Does not fit ############################################################## |
+ * -------------------------------------------------------------------------------------------------------------------------------
+ *
+ * By default the adapter works at the resolution of 320x240 with 8 colours. To set the adapter in any of
+ * the other modes, the adapter must be instantiated with specific parameters. These parameters are:
+ * - RESOLUTION - a string that should be either "320x240" or "160x120".
+ * - MONOCHROME - a string that should be "TRUE" if you only want black and white colours, and "FALSE"
+ * otherwise.
+ * - BITS_PER_COLOUR_CHANNEL - an integer specifying how many bits are available to describe each colour
+ * (R,G,B). A default value of 1 indicates that 1 bit will be used for red
+ * channel, 1 for green channel and 1 for blue channel. This allows 8 colours
+ * to be used.
+ *
+ * In addition to the above parameters, a BACKGROUND_IMAGE parameter can be specified. The parameter
+ * refers to a memory initilization file (MIF) which contains the initial contents of video memory.
+ * By specifying the initial contents of the memory we can force the adapter to initially display an
+ * image of our choice. Please note that the image described by the BACKGROUND_IMAGE file will only
+ * be valid right after your program the DE2 board. If your circuit draws a single pixel on the screen,
+ * the video memory will be altered and screen contents will be changed. In order to restore the background
+ * image your circuti will have to redraw the background image pixel by pixel, or you will have to
+ * reprogram the DE2 board, thus allowing the video memory to be rewritten.
+ *
+ * To use the module connect the vga_adapter to your circuit. Your circuit should produce a value for
+ * inputs X, Y and plot. When plot is high, at the next positive edge of the input clock the vga_adapter
+ * will change the contents of the video memory for the pixel at location (X,Y). At the next redraw
+ * cycle the VGA controller will update the contants of the screen by reading the video memory and copying
+ * it over to the screen. Since the monitor screen has no memory, the VGA controller has to copy the
+ * contents of the video memory to the screen once every 60th of a second to keep the image stable. Thus,
+ * the video memory should not be used for other purposes as it may interfere with the operation of the
+ * VGA Adapter.
+ *
+ * As a final note, ensure that the following conditions are met when using this module:
+ * 1. You are implementing the the VGA Adapter on the Altera DE2 board. Using another board may change
+ * the amount of memory you can use, the clock generation mechanism, as well as pin assignments required
+ * to properly drive the VGA digital-to-analog converter.
+ * 2. Outputs VGA_* should exist in your top level design. They should be assigned pin locations on the
+ * Altera DE2 board as specified by the DE2_pin_assignments.csv file.
+ * 3. The input clock must have a frequency of 50 MHz with a 50% duty cycle. On the Altera DE2 board
+ * PIN_N2 is the source for the 50MHz clock.
+ *
+ * During compilation with Quartus II you may receive the following warnings:
+ * - Warning: Variable or input pin "clocken1" is defined but never used
+ * - Warning: Pin "VGA_SYNC" stuck at VCC
+ * - Warning: Found xx output pins without output pin load capacitance assignment
+ * These warnings can be ignored. The first warning is generated, because the software generated
+ * memory module contains an input called "clocken1" and it does not drive logic. The second warning
+ * indicates that the VGA_SYNC signal is always high. This is intentional. The final warning is
+ * generated for the purposes of power analysis. It will persist unless the output pins are assigned
+ * output capacitance. Leaving the capacitance values at 0 pf did not affect the operation of the module.
+ *
+ * If you see any other warnings relating to the vga_adapter, be sure to examine them carefully. They may
+ * cause your circuit to malfunction.
+ *
+ * NOTES/REVISIONS:
+ * July 10, 2007 - Modified the original version of the VGA Adapter written by Sam Vafaee in 2006. The module
+ * now supports 2 different resolutions as well as uses half the memory compared to prior
+ * implementation. Also, all settings for the module can be specified from the point
+ * of instantiation, rather than by modifying the source code. (Tomasz S. Czajkowski)
+ */
+
+module vga_adapter(
+ resetn,
+ clock,
+ colour,
+ x, y, plot,
+ /* Signals for the DAC to drive the monitor. */
+ VGA_R,
+ VGA_G,
+ VGA_B,
+ VGA_HS,
+ VGA_VS,
+ VGA_BLANK,
+ VGA_SYNC,
+ VGA_CLK);
+
+ parameter BITS_PER_COLOUR_CHANNEL = 1;
+ /* The number of bits per colour channel used to represent the colour of each pixel. A value
+ * of 1 means that Red, Green and Blue colour channels will use 1 bit each to represent the intensity
+ * of the respective colour channel. For BITS_PER_COLOUR_CHANNEL=1, the adapter can display 8 colours.
+ * In general, the adapter is able to use 2^(3*BITS_PER_COLOUR_CHANNEL ) colours. The number of colours is
+ * limited by the screen resolution and the amount of on-chip memory available on the target device.
+ */
+
+ parameter MONOCHROME = "FALSE";
+ /* Set this parameter to "TRUE" if you only wish to use black and white colours. Doing so will reduce
+ * the amount of memory you will use by a factor of 3. */
+
+ parameter RESOLUTION = "320x240";
+ /* Set this parameter to "160x120" or "320x240". It will cause the VGA adapter to draw each dot on
+ * the screen by using a block of 4x4 pixels ("160x120" resolution) or 2x2 pixels ("320x240" resolution).
+ * It effectively reduces the screen resolution to an integer fraction of 640x480. It was necessary
+ * to reduce the resolution for the Video Memory to fit within the on-chip memory limits.
+ */
+
+ parameter BACKGROUND_IMAGE = "background.mif";
+ /* The initial screen displayed when the circuit is first programmed onto the DE2 board can be
+ * defined useing an MIF file. The file contains the initial colour for each pixel on the screen
+ * and is placed in the Video Memory (VideoMemory module) upon programming. Note that resetting the
+ * VGA Adapter will not cause the Video Memory to revert to the specified image. */
+
+ parameter USING_DE1 = "FALSE";
+ /* If set to "TRUE" it adjust the offset of the drawing mechanism to account for the differences
+ * between the DE2 and DE1 VGA digital to analogue converters. Set to "TRUE" if and only if
+ * you are running your circuit on a DE1 board. */
+
+ /*****************************************************************************/
+ /* Declare inputs and outputs. */
+ /*****************************************************************************/
+ input resetn;
+ input clock;
+
+ /* The colour input can be either 1 bit or 3*BITS_PER_COLOUR_CHANNEL bits wide, depending on
+ * the setting of the MONOCHROME parameter.
+ */
+ input [((MONOCHROME == "TRUE") ? (0) : (BITS_PER_COLOUR_CHANNEL*3-1)):0] colour;
+
+ /* Specify the number of bits required to represent an (X,Y) coordinate on the screen for
+ * a given resolution.
+ */
+ input [((RESOLUTION == "320x240") ? (8) : (7)):0] x;
+ input [((RESOLUTION == "320x240") ? (7) : (6)):0] y;
+
+ /* When plot is high then at the next positive edge of the clock the pixel at (x,y) will change to
+ * a new colour, defined by the value of the colour input.
+ */
+ input plot;
+
+ /* These outputs drive the VGA display. The VGA_CLK is also used to clock the FSM responsible for
+ * controlling the data transferred to the DAC driving the monitor. */
+ output [9:0] VGA_R;
+ output [9:0] VGA_G;
+ output [9:0] VGA_B;
+ output VGA_HS;
+ output VGA_VS;
+ output VGA_BLANK;
+ output VGA_SYNC;
+ output VGA_CLK;
+
+ /*****************************************************************************/
+ /* Declare local signals here. */
+ /*****************************************************************************/
+
+ wire valid_160x120;
+ wire valid_320x240;
+ /* Set to 1 if the specified coordinates are in a valid range for a given resolution.*/
+
+ wire writeEn;
+ /* This is a local signal that allows the Video Memory contents to be changed.
+ * It depends on the screen resolution, the values of X and Y inputs, as well as
+ * the state of the plot signal.
+ */
+
+ wire [((MONOCHROME == "TRUE") ? (0) : (BITS_PER_COLOUR_CHANNEL*3-1)):0] to_ctrl_colour;
+ /* Pixel colour read by the VGA controller */
+
+ wire [((RESOLUTION == "320x240") ? (16) : (14)):0] user_to_video_memory_addr;
+ /* This bus specifies the address in memory the user must write
+ * data to in order for the pixel intended to appear at location (X,Y) to be displayed
+ * at the correct location on the screen.
+ */
+
+ wire [((RESOLUTION == "320x240") ? (16) : (14)):0] controller_to_video_memory_addr;
+ /* This bus specifies the address in memory the vga controller must read data from
+ * in order to determine the colour of a pixel located at coordinate (X,Y) of the screen.
+ */
+
+ wire clock_25;
+ /* 25MHz clock generated by dividing the input clock frequency by 2. */
+
+ wire vcc, gnd;
+
+ /*****************************************************************************/
+ /* Instances of modules for the VGA adapter. */
+ /*****************************************************************************/
+ assign vcc = 1'b1;
+ assign gnd = 1'b0;
+
+ vga_address_translator user_input_translator(
+ .x(x), .y(y), .mem_address(user_to_video_memory_addr) );
+ defparam user_input_translator.RESOLUTION = RESOLUTION;
+ /* Convert user coordinates into a memory address. */
+
+ assign valid_160x120 = (({1'b0, x} >= 0) & ({1'b0, x} < 160) & ({1'b0, y} >= 0) & ({1'b0, y} < 120)) & (RESOLUTION == "160x120");
+ assign valid_320x240 = (({1'b0, x} >= 0) & ({1'b0, x} < 320) & ({1'b0, y} >= 0) & ({1'b0, y} < 240)) & (RESOLUTION == "320x240");
+ assign writeEn = (plot) & (valid_160x120 | valid_320x240);
+ /* Allow the user to plot a pixel if and only if the (X,Y) coordinates supplied are in a valid range. */
+
+ /* Create video memory. */
+ altsyncram VideoMemory (
+ .wren_a (writeEn),
+ .wren_b (gnd),
+ .clock0 (clock), // write clock
+ .clock1 (clock_25), // read clock
+ .clocken0 (vcc), // write enable clock
+ .clocken1 (vcc), // read enable clock
+ .address_a (user_to_video_memory_addr),
+ .address_b (controller_to_video_memory_addr),
+ .data_a (colour), // data in
+ .q_b (to_ctrl_colour) // data out
+ );
+ defparam
+ VideoMemory.width_a = ((MONOCHROME == "FALSE") ? (BITS_PER_COLOUR_CHANNEL*3) : 1),
+ VideoMemory.width_b = ((MONOCHROME == "FALSE") ? (BITS_PER_COLOUR_CHANNEL*3) : 1),
+ VideoMemory.intended_device_family = "Cyclone II",
+ VideoMemory.operation_mode = "DUAL_PORT",
+ VideoMemory.widthad_a = ((RESOLUTION == "320x240") ? (17) : (15)),
+ VideoMemory.numwords_a = ((RESOLUTION == "320x240") ? (76800) : (19200)),
+ VideoMemory.widthad_b = ((RESOLUTION == "320x240") ? (17) : (15)),
+ VideoMemory.numwords_b = ((RESOLUTION == "320x240") ? (76800) : (19200)),
+ VideoMemory.outdata_reg_b = "CLOCK1",
+ VideoMemory.address_reg_b = "CLOCK1",
+ VideoMemory.clock_enable_input_a = "BYPASS",
+ VideoMemory.clock_enable_input_b = "BYPASS",
+ VideoMemory.clock_enable_output_b = "BYPASS",
+ VideoMemory.power_up_uninitialized = "TRUE";
+
+ vga_pll mypll(clock, clock_25);
+ /* This module generates a clock with half the frequency of the input clock.
+ * For the VGA adapter to operate correctly the clock signal 'clock' must be
+ * a 50MHz clock. The derived clock, which will then operate at 25MHz, is
+ * required to set the monitor into the 640x480@60Hz display mode (also known as
+ * the VGA mode).
+ */
+
+ vga_controller controller(
+ .vga_clock(clock_25),
+ .resetn(resetn),
+ .pixel_colour(to_ctrl_colour),
+ .memory_address(controller_to_video_memory_addr),
+ .VGA_R(VGA_R),
+ .VGA_G(VGA_G),
+ .VGA_B(VGA_B),
+ .VGA_HS(VGA_HS),
+ .VGA_VS(VGA_VS),
+ .VGA_BLANK(VGA_BLANK),
+ .VGA_SYNC(VGA_SYNC),
+ .VGA_CLK(VGA_CLK)
+ );
+ defparam controller.BITS_PER_COLOUR_CHANNEL = BITS_PER_COLOUR_CHANNEL ;
+ defparam controller.MONOCHROME = MONOCHROME;
+ defparam controller.RESOLUTION = RESOLUTION;
+ defparam controller.USING_DE1 = USING_DE1;
+
+ // synthesis translate_off
+ always @(posedge clock, negedge resetn) begin
+ if (resetn === 1'b0) begin
+`ifdef MODEL_TECH
+ mti_fli::mti_Command("if { [namespace exists ::de1vga] } { ::de1vga::reset } else { echo \"VGA RESET\" }");
+`else
+ $display("VGA RESET");
+`endif
+ end else if (plot === 1'b1) begin
+`ifdef MODEL_TECH
+ mti_fli::mti_Command($sformatf("if { [namespace exists ::de1vga] } { ::de1vga::plot %0d %0d %0d } else { echo \"VGA PLOT %0d,%0d %0d\" }", x, y, colour, x, y, colour));
+`else
+ $display("VGA PLOT %0d,%0d %0d", x, y, colour);
+`endif
+ end
+ end
+ // synthesis translate_on
+
+endmodule
diff --git a/vga-core/vga_adapter.v b/vga-core/vga_adapter.v
new file mode 100644
index 0000000..83e7413
--- /dev/null
+++ b/vga-core/vga_adapter.v
@@ -0,0 +1,263 @@
+/* VGA Adapter
+ * ----------------
+ *
+ * This is an implementation of a VGA Adapter. The adapter uses VGA mode signalling to initiate
+ * a 640x480 resolution mode on a computer monitor, with a refresh rate of approximately 60Hz.
+ * It is designed for easy use in an early digital logic design course to facilitate student
+ * projects on the Altera DE2 Educational board.
+ *
+ * This implementation of the VGA adapter can display images of varying colour depth at a resolution of
+ * 320x240 or 160x120 superpixels. The concept of superpixels is introduced to reduce the amount of on-chip
+ * memory used by the adapter. The following table shows the number of bits of on-chip memory used by
+ * the adapter in various resolutions and colour depths.
+ *
+ * -------------------------------------------------------------------------------------------------------------------------------
+ * Resolution | Mono | 8 colours | 64 colours | 512 colours | 4096 colours | 32768 colours | 262144 colours | 2097152 colours |
+ * -------------------------------------------------------------------------------------------------------------------------------
+ * 160x120 | 19200 | 57600 | 115200 | 172800 | 230400 | 288000 | 345600 | 403200 |
+ * 320x240 | 78600 | 230400 | ############## Does not fit ############################################################## |
+ * -------------------------------------------------------------------------------------------------------------------------------
+ *
+ * By default the adapter works at the resolution of 320x240 with 8 colours. To set the adapter in any of
+ * the other modes, the adapter must be instantiated with specific parameters. These parameters are:
+ * - RESOLUTION - a string that should be either "320x240" or "160x120".
+ * - MONOCHROME - a string that should be "TRUE" if you only want black and white colours, and "FALSE"
+ * otherwise.
+ * - BITS_PER_COLOUR_CHANNEL - an integer specifying how many bits are available to describe each colour
+ * (R,G,B). A default value of 1 indicates that 1 bit will be used for red
+ * channel, 1 for green channel and 1 for blue channel. This allows 8 colours
+ * to be used.
+ *
+ * In addition to the above parameters, a BACKGROUND_IMAGE parameter can be specified. The parameter
+ * refers to a memory initilization file (MIF) which contains the initial contents of video memory.
+ * By specifying the initial contents of the memory we can force the adapter to initially display an
+ * image of our choice. Please note that the image described by the BACKGROUND_IMAGE file will only
+ * be valid right after your program the DE2 board. If your circuit draws a single pixel on the screen,
+ * the video memory will be altered and screen contents will be changed. In order to restore the background
+ * image your circuti will have to redraw the background image pixel by pixel, or you will have to
+ * reprogram the DE2 board, thus allowing the video memory to be rewritten.
+ *
+ * To use the module connect the vga_adapter to your circuit. Your circuit should produce a value for
+ * inputs X, Y and plot. When plot is high, at the next positive edge of the input clock the vga_adapter
+ * will change the contents of the video memory for the pixel at location (X,Y). At the next redraw
+ * cycle the VGA controller will update the contants of the screen by reading the video memory and copying
+ * it over to the screen. Since the monitor screen has no memory, the VGA controller has to copy the
+ * contents of the video memory to the screen once every 60th of a second to keep the image stable. Thus,
+ * the video memory should not be used for other purposes as it may interfere with the operation of the
+ * VGA Adapter.
+ *
+ * As a final note, ensure that the following conditions are met when using this module:
+ * 1. You are implementing the the VGA Adapter on the Altera DE2 board. Using another board may change
+ * the amount of memory you can use, the clock generation mechanism, as well as pin assignments required
+ * to properly drive the VGA digital-to-analog converter.
+ * 2. Outputs VGA_* should exist in your top level design. They should be assigned pin locations on the
+ * Altera DE2 board as specified by the DE2_pin_assignments.csv file.
+ * 3. The input clock must have a frequency of 50 MHz with a 50% duty cycle. On the Altera DE2 board
+ * PIN_N2 is the source for the 50MHz clock.
+ *
+ * During compilation with Quartus II you may receive the following warnings:
+ * - Warning: Variable or input pin "clocken1" is defined but never used
+ * - Warning: Pin "VGA_SYNC" stuck at VCC
+ * - Warning: Found xx output pins without output pin load capacitance assignment
+ * These warnings can be ignored. The first warning is generated, because the software generated
+ * memory module contains an input called "clocken1" and it does not drive logic. The second warning
+ * indicates that the VGA_SYNC signal is always high. This is intentional. The final warning is
+ * generated for the purposes of power analysis. It will persist unless the output pins are assigned
+ * output capacitance. Leaving the capacitance values at 0 pf did not affect the operation of the module.
+ *
+ * If you see any other warnings relating to the vga_adapter, be sure to examine them carefully. They may
+ * cause your circuit to malfunction.
+ *
+ * NOTES/REVISIONS:
+ * July 10, 2007 - Modified the original version of the VGA Adapter written by Sam Vafaee in 2006. The module
+ * now supports 2 different resolutions as well as uses half the memory compared to prior
+ * implementation. Also, all settings for the module can be specified from the point
+ * of instantiation, rather than by modifying the source code. (Tomasz S. Czajkowski)
+ */
+
+module vga_adapter(
+ resetn,
+ clock,
+ colour,
+ x, y, plot,
+ /* Signals for the DAC to drive the monitor. */
+ VGA_R,
+ VGA_G,
+ VGA_B,
+ VGA_HS,
+ VGA_VS,
+ VGA_BLANK,
+ VGA_SYNC,
+ VGA_CLK);
+
+ parameter BITS_PER_COLOUR_CHANNEL = 1;
+ /* The number of bits per colour channel used to represent the colour of each pixel. A value
+ * of 1 means that Red, Green and Blue colour channels will use 1 bit each to represent the intensity
+ * of the respective colour channel. For BITS_PER_COLOUR_CHANNEL=1, the adapter can display 8 colours.
+ * In general, the adapter is able to use 2^(3*BITS_PER_COLOUR_CHANNEL ) colours. The number of colours is
+ * limited by the screen resolution and the amount of on-chip memory available on the target device.
+ */
+
+ parameter MONOCHROME = "FALSE";
+ /* Set this parameter to "TRUE" if you only wish to use black and white colours. Doing so will reduce
+ * the amount of memory you will use by a factor of 3. */
+
+ parameter RESOLUTION = "320x240";
+ /* Set this parameter to "160x120" or "320x240". It will cause the VGA adapter to draw each dot on
+ * the screen by using a block of 4x4 pixels ("160x120" resolution) or 2x2 pixels ("320x240" resolution).
+ * It effectively reduces the screen resolution to an integer fraction of 640x480. It was necessary
+ * to reduce the resolution for the Video Memory to fit within the on-chip memory limits.
+ */
+
+ parameter BACKGROUND_IMAGE = "background.mif";
+ /* The initial screen displayed when the circuit is first programmed onto the DE2 board can be
+ * defined useing an MIF file. The file contains the initial colour for each pixel on the screen
+ * and is placed in the Video Memory (VideoMemory module) upon programming. Note that resetting the
+ * VGA Adapter will not cause the Video Memory to revert to the specified image. */
+
+ parameter USING_DE1 = "FALSE";
+ /* If set to "TRUE" it adjust the offset of the drawing mechanism to account for the differences
+ * between the DE2 and DE1 VGA digital to analogue converters. Set to "TRUE" if and only if
+ * you are running your circuit on a DE1 board. */
+
+ /*****************************************************************************/
+ /* Declare inputs and outputs. */
+ /*****************************************************************************/
+ input resetn;
+ input clock;
+
+ /* The colour input can be either 1 bit or 3*BITS_PER_COLOUR_CHANNEL bits wide, depending on
+ * the setting of the MONOCHROME parameter.
+ */
+ input [((MONOCHROME == "TRUE") ? (0) : (BITS_PER_COLOUR_CHANNEL*3-1)):0] colour;
+
+ /* Specify the number of bits required to represent an (X,Y) coordinate on the screen for
+ * a given resolution.
+ */
+ input [((RESOLUTION == "320x240") ? (8) : (7)):0] x;
+ input [((RESOLUTION == "320x240") ? (7) : (6)):0] y;
+
+ /* When plot is high then at the next positive edge of the clock the pixel at (x,y) will change to
+ * a new colour, defined by the value of the colour input.
+ */
+ input plot;
+
+ /* These outputs drive the VGA display. The VGA_CLK is also used to clock the FSM responsible for
+ * controlling the data transferred to the DAC driving the monitor. */
+ output [9:0] VGA_R;
+ output [9:0] VGA_G;
+ output [9:0] VGA_B;
+ output VGA_HS;
+ output VGA_VS;
+ output VGA_BLANK;
+ output VGA_SYNC;
+ output VGA_CLK;
+
+ /*****************************************************************************/
+ /* Declare local signals here. */
+ /*****************************************************************************/
+
+ wire valid_160x120;
+ wire valid_320x240;
+ /* Set to 1 if the specified coordinates are in a valid range for a given resolution.*/
+
+ wire writeEn;
+ /* This is a local signal that allows the Video Memory contents to be changed.
+ * It depends on the screen resolution, the values of X and Y inputs, as well as
+ * the state of the plot signal.
+ */
+
+ wire [((MONOCHROME == "TRUE") ? (0) : (BITS_PER_COLOUR_CHANNEL*3-1)):0] to_ctrl_colour;
+ /* Pixel colour read by the VGA controller */
+
+ wire [((RESOLUTION == "320x240") ? (16) : (14)):0] user_to_video_memory_addr;
+ /* This bus specifies the address in memory the user must write
+ * data to in order for the pixel intended to appear at location (X,Y) to be displayed
+ * at the correct location on the screen.
+ */
+
+ wire [((RESOLUTION == "320x240") ? (16) : (14)):0] controller_to_video_memory_addr;
+ /* This bus specifies the address in memory the vga controller must read data from
+ * in order to determine the colour of a pixel located at coordinate (X,Y) of the screen.
+ */
+
+ wire clock_25;
+ /* 25MHz clock generated by dividing the input clock frequency by 2. */
+
+ wire vcc, gnd;
+
+ /*****************************************************************************/
+ /* Instances of modules for the VGA adapter. */
+ /*****************************************************************************/
+ assign vcc = 1'b1;
+ assign gnd = 1'b0;
+
+ vga_address_translator user_input_translator(
+ .x(x), .y(y), .mem_address(user_to_video_memory_addr) );
+ defparam user_input_translator.RESOLUTION = RESOLUTION;
+ /* Convert user coordinates into a memory address. */
+
+ assign valid_160x120 = (({1'b0, x} >= 0) & ({1'b0, x} < 160) & ({1'b0, y} >= 0) & ({1'b0, y} < 120)) & (RESOLUTION == "160x120");
+ assign valid_320x240 = (({1'b0, x} >= 0) & ({1'b0, x} < 320) & ({1'b0, y} >= 0) & ({1'b0, y} < 240)) & (RESOLUTION == "320x240");
+ assign writeEn = (plot) & (valid_160x120 | valid_320x240);
+ /* Allow the user to plot a pixel if and only if the (X,Y) coordinates supplied are in a valid range. */
+
+ /* Create video memory. */
+ altsyncram VideoMemory (
+ .wren_a (writeEn),
+ .wren_b (gnd),
+ .clock0 (clock), // write clock
+ .clock1 (clock_25), // read clock
+ .clocken0 (vcc), // write enable clock
+ .clocken1 (vcc), // read enable clock
+ .address_a (user_to_video_memory_addr),
+ .address_b (controller_to_video_memory_addr),
+ .data_a (colour), // data in
+ .q_b (to_ctrl_colour) // data out
+ );
+ defparam
+ VideoMemory.WIDTH_A = ((MONOCHROME == "FALSE") ? (BITS_PER_COLOUR_CHANNEL*3) : 1),
+ VideoMemory.WIDTH_B = ((MONOCHROME == "FALSE") ? (BITS_PER_COLOUR_CHANNEL*3) : 1),
+ VideoMemory.INTENDED_DEVICE_FAMILY = "Cyclone II",
+ VideoMemory.OPERATION_MODE = "DUAL_PORT",
+ VideoMemory.WIDTHAD_A = ((RESOLUTION == "320x240") ? (17) : (15)),
+ VideoMemory.NUMWORDS_A = ((RESOLUTION == "320x240") ? (76800) : (19200)),
+ VideoMemory.WIDTHAD_B = ((RESOLUTION == "320x240") ? (17) : (15)),
+ VideoMemory.NUMWORDS_B = ((RESOLUTION == "320x240") ? (76800) : (19200)),
+ VideoMemory.OUTDATA_REG_B = "CLOCK1",
+ VideoMemory.ADDRESS_REG_B = "CLOCK1",
+ VideoMemory.CLOCK_ENABLE_INPUT_A = "BYPASS",
+ VideoMemory.CLOCK_ENABLE_INPUT_B = "BYPASS",
+ VideoMemory.CLOCK_ENABLE_OUTPUT_B = "BYPASS",
+ VideoMemory.POWER_UP_UNINITIALIZED = "FALSE",
+ VideoMemory.INIT_FILE = BACKGROUND_IMAGE;
+
+ vga_pll mypll(clock, clock_25);
+ /* This module generates a clock with half the frequency of the input clock.
+ * For the VGA adapter to operate correctly the clock signal 'clock' must be
+ * a 50MHz clock. The derived clock, which will then operate at 25MHz, is
+ * required to set the monitor into the 640x480@60Hz display mode (also known as
+ * the VGA mode).
+ */
+
+ vga_controller controller(
+ .vga_clock(clock_25),
+ .resetn(resetn),
+ .pixel_colour(to_ctrl_colour),
+ .memory_address(controller_to_video_memory_addr),
+ .VGA_R(VGA_R),
+ .VGA_G(VGA_G),
+ .VGA_B(VGA_B),
+ .VGA_HS(VGA_HS),
+ .VGA_VS(VGA_VS),
+ .VGA_BLANK(VGA_BLANK),
+ .VGA_SYNC(VGA_SYNC),
+ .VGA_CLK(VGA_CLK)
+ );
+ defparam controller.BITS_PER_COLOUR_CHANNEL = BITS_PER_COLOUR_CHANNEL ;
+ defparam controller.MONOCHROME = MONOCHROME;
+ defparam controller.RESOLUTION = RESOLUTION;
+ defparam controller.USING_DE1 = USING_DE1;
+
+endmodule
+ \ No newline at end of file
diff --git a/vga-core/vga_address_translator.sv b/vga-core/vga_address_translator.sv
new file mode 100644
index 0000000..cc63fac
--- /dev/null
+++ b/vga-core/vga_address_translator.sv
@@ -0,0 +1,39 @@
+// synopsys translate_off
+`timescale 1 ps / 1 ps
+// synopsys translate_on
+
+/* This module converts a user specified coordinates into a memory address.
+ * The output of the module depends on the resolution set by the user.
+ */
+module vga_address_translator(x, y, mem_address);
+
+ parameter RESOLUTION = "320x240";
+ /* Set this parameter to "160x120" or "320x240". It will cause the VGA adapter to draw each dot on
+ * the screen by using a block of 4x4 pixels ("160x120" resolution) or 2x2 pixels ("320x240" resolution).
+ * It effectively reduces the screen resolution to an integer fraction of 640x480. It was necessary
+ * to reduce the resolution for the Video Memory to fit within the on-chip memory limits.
+ */
+
+ input [((RESOLUTION == "320x240") ? (8) : (7)):0] x;
+ input [((RESOLUTION == "320x240") ? (7) : (6)):0] y;
+ output reg [((RESOLUTION == "320x240") ? (16) : (14)):0] mem_address;
+
+ /* The basic formula is address = y*WIDTH + x;
+ * For 320x240 resolution we can write 320 as (256 + 64). Memory address becomes
+ * (y*256) + (y*64) + x;
+ * This simplifies multiplication a simple shift and add operation.
+ * A leading 0 bit is added to each operand to ensure that they are treated as unsigned
+ * inputs. By default the use a '+' operator will generate a signed adder.
+ * Similarly, for 160x120 resolution we write 160 as 128+32.
+ */
+ wire [16:0] res_320x240 = ({1'b0, y, 8'd0} + {1'b0, y, 6'd0} + {1'b0, x});
+ wire [15:0] res_160x120 = ({1'b0, y, 7'd0} + {1'b0, y, 5'd0} + {1'b0, x});
+
+ always @(*)
+ begin
+ if (RESOLUTION == "320x240")
+ mem_address = res_320x240;
+ else
+ mem_address = res_160x120[14:0];
+ end
+endmodule
diff --git a/vga-core/vga_address_translator.v b/vga-core/vga_address_translator.v
new file mode 100644
index 0000000..bf97e90
--- /dev/null
+++ b/vga-core/vga_address_translator.v
@@ -0,0 +1,35 @@
+/* This module converts a user specified coordinates into a memory address.
+ * The output of the module depends on the resolution set by the user.
+ */
+module vga_address_translator(x, y, mem_address);
+
+ parameter RESOLUTION = "320x240";
+ /* Set this parameter to "160x120" or "320x240". It will cause the VGA adapter to draw each dot on
+ * the screen by using a block of 4x4 pixels ("160x120" resolution) or 2x2 pixels ("320x240" resolution).
+ * It effectively reduces the screen resolution to an integer fraction of 640x480. It was necessary
+ * to reduce the resolution for the Video Memory to fit within the on-chip memory limits.
+ */
+
+ input [((RESOLUTION == "320x240") ? (8) : (7)):0] x;
+ input [((RESOLUTION == "320x240") ? (7) : (6)):0] y;
+ output reg [((RESOLUTION == "320x240") ? (16) : (14)):0] mem_address;
+
+ /* The basic formula is address = y*WIDTH + x;
+ * For 320x240 resolution we can write 320 as (256 + 64). Memory address becomes
+ * (y*256) + (y*64) + x;
+ * This simplifies multiplication a simple shift and add operation.
+ * A leading 0 bit is added to each operand to ensure that they are treated as unsigned
+ * inputs. By default the use a '+' operator will generate a signed adder.
+ * Similarly, for 160x120 resolution we write 160 as 128+32.
+ */
+ wire [16:0] res_320x240 = ({1'b0, y, 8'd0} + {1'b0, y, 6'd0} + {1'b0, x});
+ wire [15:0] res_160x120 = ({1'b0, y, 7'd0} + {1'b0, y, 5'd0} + {1'b0, x});
+
+ always @(*)
+ begin
+ if (RESOLUTION == "320x240")
+ mem_address = res_320x240;
+ else
+ mem_address = res_160x120[14:0];
+ end
+endmodule
diff --git a/vga-core/vga_controller.sv b/vga-core/vga_controller.sv
new file mode 100644
index 0000000..4217c13
--- /dev/null
+++ b/vga-core/vga_controller.sv
@@ -0,0 +1,216 @@
+// synopsys translate_off
+`timescale 1 ps / 1 ps
+// synopsys translate_on
+
+/* This module implements the VGA controller. It assumes a 25MHz clock is supplied as input.
+ *
+ * General approach:
+ * Go through each line of the screen and read the colour each pixel on that line should have from
+ * the Video memory. To do that for each (x,y) pixel on the screen convert (x,y) coordinate to
+ * a memory_address at which the pixel colour is stored in Video memory. Once the pixel colour is
+ * read from video memory its brightness is first increased before it is forwarded to the VGA DAC.
+ */
+module vga_controller( vga_clock, resetn, pixel_colour, memory_address,
+ VGA_R, VGA_G, VGA_B,
+ VGA_HS, VGA_VS, VGA_BLANK,
+ VGA_SYNC, VGA_CLK);
+
+ /* Screen resolution and colour depth parameters. */
+
+ parameter BITS_PER_COLOUR_CHANNEL = 1;
+ /* The number of bits per colour channel used to represent the colour of each pixel. A value
+ * of 1 means that Red, Green and Blue colour channels will use 1 bit each to represent the intensity
+ * of the respective colour channel. For BITS_PER_COLOUR_CHANNEL=1, the adapter can display 8 colours.
+ * In general, the adapter is able to use 2^(3*BITS_PER_COLOUR_CHANNEL) colours. The number of colours is
+ * limited by the screen resolution and the amount of on-chip memory available on the target device.
+ */
+
+ parameter MONOCHROME = "FALSE";
+ /* Set this parameter to "TRUE" if you only wish to use black and white colours. Doing so will reduce
+ * the amount of memory you will use by a factor of 3. */
+
+ parameter RESOLUTION = "320x240";
+ /* Set this parameter to "160x120" or "320x240". It will cause the VGA adapter to draw each dot on
+ * the screen by using a block of 4x4 pixels ("160x120" resolution) or 2x2 pixels ("320x240" resolution).
+ * It effectively reduces the screen resolution to an integer fraction of 640x480. It was necessary
+ * to reduce the resolution for the Video Memory to fit within the on-chip memory limits.
+ */
+
+ parameter USING_DE1 = "FALSE";
+ /* If set to "TRUE" it adjust the offset of the drawing mechanism to account for the differences
+ * between the DE2 and DE1 VGA digital to analogue converters. Set to "TRUE" if and only if
+ * you are running your circuit on a DE1 board. */
+
+ //--- Timing parameters.
+ /* Recall that the VGA specification requires a few more rows and columns are drawn
+ * when refreshing the screen than are actually present on the screen. This is necessary to
+ * generate the vertical and the horizontal syncronization signals. If you wish to use a
+ * display mode other than 640x480 you will need to modify the parameters below as well
+ * as change the frequency of the clock driving the monitor (VGA_CLK).
+ */
+ parameter C_VERT_NUM_PIXELS = 11'd480;
+ parameter C_VERT_SYNC_START = 11'd493;
+ parameter C_VERT_SYNC_END = 11'd494; //(C_VERT_SYNC_START + 2 - 1);
+ parameter C_VERT_TOTAL_COUNT = 11'd525;
+
+ parameter C_HORZ_NUM_PIXELS = 11'd640;
+ parameter C_HORZ_SYNC_START = 11'd659;
+ parameter C_HORZ_SYNC_END = 11'd754; //(C_HORZ_SYNC_START + 96 - 1);
+ parameter C_HORZ_TOTAL_COUNT = 11'd800;
+
+ /*****************************************************************************/
+ /* Declare inputs and outputs. */
+ /*****************************************************************************/
+
+ input vga_clock, resetn;
+ input [((MONOCHROME == "TRUE") ? (0) : (BITS_PER_COLOUR_CHANNEL*3-1)):0] pixel_colour;
+ output [((RESOLUTION == "320x240") ? (16) : (14)):0] memory_address;
+ output reg [9:0] VGA_R;
+ output reg [9:0] VGA_G;
+ output reg [9:0] VGA_B;
+ output reg VGA_HS;
+ output reg VGA_VS;
+ output reg VGA_BLANK;
+ output VGA_SYNC, VGA_CLK;
+
+ /*****************************************************************************/
+ /* Local Signals. */
+ /*****************************************************************************/
+
+ reg VGA_HS1;
+ reg VGA_VS1;
+ reg VGA_BLANK1;
+ reg [9:0] xCounter, yCounter;
+ wire xCounter_clear;
+ wire yCounter_clear;
+ wire vcc;
+
+ reg [((RESOLUTION == "320x240") ? (8) : (7)):0] x;
+ reg [((RESOLUTION == "320x240") ? (7) : (6)):0] y;
+ /* Inputs to the converter. */
+
+ /*****************************************************************************/
+ /* Controller implementation. */
+ /*****************************************************************************/
+
+ assign vcc =1'b1;
+
+ /* A counter to scan through a horizontal line. */
+ always @(posedge vga_clock or negedge resetn)
+ begin
+ if (!resetn)
+ xCounter <= 10'd0;
+ else if (xCounter_clear)
+ xCounter <= 10'd0;
+ else
+ begin
+ xCounter <= xCounter + 1'b1;
+ end
+ end
+ assign xCounter_clear = (xCounter == (C_HORZ_TOTAL_COUNT-1));
+
+ /* A counter to scan vertically, indicating the row currently being drawn. */
+ always @(posedge vga_clock or negedge resetn)
+ begin
+ if (!resetn)
+ yCounter <= 10'd0;
+ else if (xCounter_clear && yCounter_clear)
+ yCounter <= 10'd0;
+ else if (xCounter_clear) //Increment when x counter resets
+ yCounter <= yCounter + 1'b1;
+ end
+ assign yCounter_clear = (yCounter == (C_VERT_TOTAL_COUNT-1));
+
+ /* Convert the xCounter/yCounter location from screen pixels (640x480) to our
+ * local dots (320x240 or 160x120). Here we effectively divide x/y coordinate by 2 or 4,
+ * depending on the resolution. */
+ always @(*)
+ begin
+ if (RESOLUTION == "320x240")
+ begin
+ x = xCounter[9:1];
+ y = yCounter[8:1];
+ end
+ else
+ begin
+ x = xCounter[9:2];
+ y = yCounter[8:2];
+ end
+ end
+
+ /* Change the (x,y) coordinate into a memory address. */
+ vga_address_translator controller_translator(
+ .x(x), .y(y), .mem_address(memory_address) );
+ defparam controller_translator.RESOLUTION = RESOLUTION;
+
+
+ /* Generate the vertical and horizontal synchronization pulses. */
+ always @(posedge vga_clock)
+ begin
+ //- Sync Generator (ACTIVE LOW)
+ if (USING_DE1 == "TRUE")
+ VGA_HS1 <= ~((xCounter >= C_HORZ_SYNC_START-2) && (xCounter <= C_HORZ_SYNC_END-2));
+ else
+ VGA_HS1 <= ~((xCounter >= C_HORZ_SYNC_START) && (xCounter <= C_HORZ_SYNC_END));
+ VGA_VS1 <= ~((yCounter >= C_VERT_SYNC_START) && (yCounter <= C_VERT_SYNC_END));
+
+ //- Current X and Y is valid pixel range
+ VGA_BLANK1 <= ((xCounter < C_HORZ_NUM_PIXELS) && (yCounter < C_VERT_NUM_PIXELS));
+
+ //- Add 1 cycle delay
+ VGA_HS <= VGA_HS1;
+ VGA_VS <= VGA_VS1;
+ VGA_BLANK <= VGA_BLANK1;
+ end
+
+ /* VGA sync should be 1 at all times. */
+ assign VGA_SYNC = vcc;
+
+ /* Generate the VGA clock signal. */
+ assign VGA_CLK = vga_clock;
+
+ /* Brighten the colour output. */
+ // The colour input is first processed to brighten the image a little. Setting the top
+ // bits to correspond to the R,G,B colour makes the image a bit dull. To brighten the image,
+ // each bit of the colour is replicated through the 10 DAC colour input bits. For example,
+ // when BITS_PER_COLOUR_CHANNEL is 2 and the red component is set to 2'b10, then the
+ // VGA_R input to the DAC will be set to 10'b1010101010.
+
+ integer index;
+ integer sub_index;
+
+ wire on_screen;
+
+ assign on_screen = (USING_DE1 == "TRUE") ?
+ (({1'b0, xCounter} >= 2) & ({1'b0, xCounter} < C_HORZ_NUM_PIXELS+2) & ({1'b0, yCounter} < C_VERT_NUM_PIXELS)) :
+ (({1'b0, xCounter} >= 0) & ({1'b0, xCounter} < C_HORZ_NUM_PIXELS+2) & ({1'b0, yCounter} < C_VERT_NUM_PIXELS));
+
+ always @(pixel_colour or on_screen)
+ begin
+ VGA_R <= 'b0;
+ VGA_G <= 'b0;
+ VGA_B <= 'b0;
+ if (MONOCHROME == "FALSE")
+ begin
+ for (index = 10-BITS_PER_COLOUR_CHANNEL; index >= 0; index = index - BITS_PER_COLOUR_CHANNEL)
+ begin
+ for (sub_index = BITS_PER_COLOUR_CHANNEL - 1; sub_index >= 0; sub_index = sub_index - 1)
+ begin
+ VGA_R[sub_index+index] <= on_screen & pixel_colour[sub_index + BITS_PER_COLOUR_CHANNEL*2];
+ VGA_G[sub_index+index] <= on_screen & pixel_colour[sub_index + BITS_PER_COLOUR_CHANNEL];
+ VGA_B[sub_index+index] <= on_screen & pixel_colour[sub_index];
+ end
+ end
+ end
+ else
+ begin
+ for (index = 0; index < 10; index = index + 1)
+ begin
+ VGA_R[index] <= on_screen & pixel_colour[0:0];
+ VGA_G[index] <= on_screen & pixel_colour[0:0];
+ VGA_B[index] <= on_screen & pixel_colour[0:0];
+ end
+ end
+ end
+
+endmodule
diff --git a/vga-core/vga_controller.v b/vga-core/vga_controller.v
new file mode 100644
index 0000000..0e4cfba
--- /dev/null
+++ b/vga-core/vga_controller.v
@@ -0,0 +1,212 @@
+/* This module implements the VGA controller. It assumes a 25MHz clock is supplied as input.
+ *
+ * General approach:
+ * Go through each line of the screen and read the colour each pixel on that line should have from
+ * the Video memory. To do that for each (x,y) pixel on the screen convert (x,y) coordinate to
+ * a memory_address at which the pixel colour is stored in Video memory. Once the pixel colour is
+ * read from video memory its brightness is first increased before it is forwarded to the VGA DAC.
+ */
+module vga_controller( vga_clock, resetn, pixel_colour, memory_address,
+ VGA_R, VGA_G, VGA_B,
+ VGA_HS, VGA_VS, VGA_BLANK,
+ VGA_SYNC, VGA_CLK);
+
+ /* Screen resolution and colour depth parameters. */
+
+ parameter BITS_PER_COLOUR_CHANNEL = 1;
+ /* The number of bits per colour channel used to represent the colour of each pixel. A value
+ * of 1 means that Red, Green and Blue colour channels will use 1 bit each to represent the intensity
+ * of the respective colour channel. For BITS_PER_COLOUR_CHANNEL=1, the adapter can display 8 colours.
+ * In general, the adapter is able to use 2^(3*BITS_PER_COLOUR_CHANNEL) colours. The number of colours is
+ * limited by the screen resolution and the amount of on-chip memory available on the target device.
+ */
+
+ parameter MONOCHROME = "FALSE";
+ /* Set this parameter to "TRUE" if you only wish to use black and white colours. Doing so will reduce
+ * the amount of memory you will use by a factor of 3. */
+
+ parameter RESOLUTION = "320x240";
+ /* Set this parameter to "160x120" or "320x240". It will cause the VGA adapter to draw each dot on
+ * the screen by using a block of 4x4 pixels ("160x120" resolution) or 2x2 pixels ("320x240" resolution).
+ * It effectively reduces the screen resolution to an integer fraction of 640x480. It was necessary
+ * to reduce the resolution for the Video Memory to fit within the on-chip memory limits.
+ */
+
+ parameter USING_DE1 = "FALSE";
+ /* If set to "TRUE" it adjust the offset of the drawing mechanism to account for the differences
+ * between the DE2 and DE1 VGA digital to analogue converters. Set to "TRUE" if and only if
+ * you are running your circuit on a DE1 board. */
+
+ //--- Timing parameters.
+ /* Recall that the VGA specification requires a few more rows and columns are drawn
+ * when refreshing the screen than are actually present on the screen. This is necessary to
+ * generate the vertical and the horizontal syncronization signals. If you wish to use a
+ * display mode other than 640x480 you will need to modify the parameters below as well
+ * as change the frequency of the clock driving the monitor (VGA_CLK).
+ */
+ parameter C_VERT_NUM_PIXELS = 11'd480;
+ parameter C_VERT_SYNC_START = 11'd493;
+ parameter C_VERT_SYNC_END = 11'd494; //(C_VERT_SYNC_START + 2 - 1);
+ parameter C_VERT_TOTAL_COUNT = 11'd525;
+
+ parameter C_HORZ_NUM_PIXELS = 11'd640;
+ parameter C_HORZ_SYNC_START = 11'd659;
+ parameter C_HORZ_SYNC_END = 11'd754; //(C_HORZ_SYNC_START + 96 - 1);
+ parameter C_HORZ_TOTAL_COUNT = 11'd800;
+
+ /*****************************************************************************/
+ /* Declare inputs and outputs. */
+ /*****************************************************************************/
+
+ input vga_clock, resetn;
+ input [((MONOCHROME == "TRUE") ? (0) : (BITS_PER_COLOUR_CHANNEL*3-1)):0] pixel_colour;
+ output [((RESOLUTION == "320x240") ? (16) : (14)):0] memory_address;
+ output reg [9:0] VGA_R;
+ output reg [9:0] VGA_G;
+ output reg [9:0] VGA_B;
+ output reg VGA_HS;
+ output reg VGA_VS;
+ output reg VGA_BLANK;
+ output VGA_SYNC, VGA_CLK;
+
+ /*****************************************************************************/
+ /* Local Signals. */
+ /*****************************************************************************/
+
+ reg VGA_HS1;
+ reg VGA_VS1;
+ reg VGA_BLANK1;
+ reg [9:0] xCounter, yCounter;
+ wire xCounter_clear;
+ wire yCounter_clear;
+ wire vcc;
+
+ reg [((RESOLUTION == "320x240") ? (8) : (7)):0] x;
+ reg [((RESOLUTION == "320x240") ? (7) : (6)):0] y;
+ /* Inputs to the converter. */
+
+ /*****************************************************************************/
+ /* Controller implementation. */
+ /*****************************************************************************/
+
+ assign vcc =1'b1;
+
+ /* A counter to scan through a horizontal line. */
+ always @(posedge vga_clock or negedge resetn)
+ begin
+ if (!resetn)
+ xCounter <= 10'd0;
+ else if (xCounter_clear)
+ xCounter <= 10'd0;
+ else
+ begin
+ xCounter <= xCounter + 1'b1;
+ end
+ end
+ assign xCounter_clear = (xCounter == (C_HORZ_TOTAL_COUNT-1));
+
+ /* A counter to scan vertically, indicating the row currently being drawn. */
+ always @(posedge vga_clock or negedge resetn)
+ begin
+ if (!resetn)
+ yCounter <= 10'd0;
+ else if (xCounter_clear && yCounter_clear)
+ yCounter <= 10'd0;
+ else if (xCounter_clear) //Increment when x counter resets
+ yCounter <= yCounter + 1'b1;
+ end
+ assign yCounter_clear = (yCounter == (C_VERT_TOTAL_COUNT-1));
+
+ /* Convert the xCounter/yCounter location from screen pixels (640x480) to our
+ * local dots (320x240 or 160x120). Here we effectively divide x/y coordinate by 2 or 4,
+ * depending on the resolution. */
+ always @(*)
+ begin
+ if (RESOLUTION == "320x240")
+ begin
+ x = xCounter[9:1];
+ y = yCounter[8:1];
+ end
+ else
+ begin
+ x = xCounter[9:2];
+ y = yCounter[8:2];
+ end
+ end
+
+ /* Change the (x,y) coordinate into a memory address. */
+ vga_address_translator controller_translator(
+ .x(x), .y(y), .mem_address(memory_address) );
+ defparam controller_translator.RESOLUTION = RESOLUTION;
+
+
+ /* Generate the vertical and horizontal synchronization pulses. */
+ always @(posedge vga_clock)
+ begin
+ //- Sync Generator (ACTIVE LOW)
+ if (USING_DE1 == "TRUE")
+ VGA_HS1 <= ~((xCounter >= C_HORZ_SYNC_START-2) && (xCounter <= C_HORZ_SYNC_END-2));
+ else
+ VGA_HS1 <= ~((xCounter >= C_HORZ_SYNC_START) && (xCounter <= C_HORZ_SYNC_END));
+ VGA_VS1 <= ~((yCounter >= C_VERT_SYNC_START) && (yCounter <= C_VERT_SYNC_END));
+
+ //- Current X and Y is valid pixel range
+ VGA_BLANK1 <= ((xCounter < C_HORZ_NUM_PIXELS) && (yCounter < C_VERT_NUM_PIXELS));
+
+ //- Add 1 cycle delay
+ VGA_HS <= VGA_HS1;
+ VGA_VS <= VGA_VS1;
+ VGA_BLANK <= VGA_BLANK1;
+ end
+
+ /* VGA sync should be 1 at all times. */
+ assign VGA_SYNC = vcc;
+
+ /* Generate the VGA clock signal. */
+ assign VGA_CLK = vga_clock;
+
+ /* Brighten the colour output. */
+ // The colour input is first processed to brighten the image a little. Setting the top
+ // bits to correspond to the R,G,B colour makes the image a bit dull. To brighten the image,
+ // each bit of the colour is replicated through the 10 DAC colour input bits. For example,
+ // when BITS_PER_COLOUR_CHANNEL is 2 and the red component is set to 2'b10, then the
+ // VGA_R input to the DAC will be set to 10'b1010101010.
+
+ integer index;
+ integer sub_index;
+
+ wire on_screen;
+
+ assign on_screen = (USING_DE1 == "TRUE") ?
+ (({1'b0, xCounter} >= 2) & ({1'b0, xCounter} < C_HORZ_NUM_PIXELS+2) & ({1'b0, yCounter} < C_VERT_NUM_PIXELS)) :
+ (({1'b0, xCounter} >= 0) & ({1'b0, xCounter} < C_HORZ_NUM_PIXELS+2) & ({1'b0, yCounter} < C_VERT_NUM_PIXELS));
+
+ always @(pixel_colour or on_screen)
+ begin
+ VGA_R <= 'b0;
+ VGA_G <= 'b0;
+ VGA_B <= 'b0;
+ if (MONOCHROME == "FALSE")
+ begin
+ for (index = 10-BITS_PER_COLOUR_CHANNEL; index >= 0; index = index - BITS_PER_COLOUR_CHANNEL)
+ begin
+ for (sub_index = BITS_PER_COLOUR_CHANNEL - 1; sub_index >= 0; sub_index = sub_index - 1)
+ begin
+ VGA_R[sub_index+index] <= on_screen & pixel_colour[sub_index + BITS_PER_COLOUR_CHANNEL*2];
+ VGA_G[sub_index+index] <= on_screen & pixel_colour[sub_index + BITS_PER_COLOUR_CHANNEL];
+ VGA_B[sub_index+index] <= on_screen & pixel_colour[sub_index];
+ end
+ end
+ end
+ else
+ begin
+ for (index = 0; index < 10; index = index + 1)
+ begin
+ VGA_R[index] <= on_screen & pixel_colour[0:0];
+ VGA_G[index] <= on_screen & pixel_colour[0:0];
+ VGA_B[index] <= on_screen & pixel_colour[0:0];
+ end
+ end
+ end
+
+endmodule
diff --git a/vga-core/vga_pll.sv b/vga-core/vga_pll.sv
new file mode 100644
index 0000000..d433ef5
--- /dev/null
+++ b/vga-core/vga_pll.sv
@@ -0,0 +1,173 @@
+// megafunction wizard: %ALTPLL%
+// GENERATION: STANDARD
+// VERSION: WM1.0
+// MODULE: altpll
+
+// ============================================================
+// File Name: VgaPll.v
+// Megafunction Name(s):
+// altpll
+// ============================================================
+// ************************************************************
+// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
+//
+// 5.0 Build 168 06/22/2005 SP 1 SJ Full Version
+// ************************************************************
+
+
+//Copyright (C) 1991-2005 Altera Corporation
+//Your use of Altera Corporation's design tools, logic functions
+//and other software and tools, and its AMPP partner logic
+//functions, and any output files any of the foregoing
+//(including device programming or simulation files), and any
+//associated documentation or information are expressly subject
+//to the terms and conditions of the Altera Program License
+//Subscription Agreement, Altera MegaCore Function License
+//Agreement, or other applicable license agreement, including,
+//without limitation, that your use is for the sole purpose of
+//programming logic devices manufactured by Altera and sold by
+//Altera or its authorized distributors. Please refer to the
+//applicable agreement for further details.
+
+
+// synopsys translate_off
+`timescale 1 ps / 1 ps
+// synopsys translate_on
+module vga_pll (
+ clock_in,
+ clock_out);
+
+ input clock_in;
+ output clock_out;
+
+ wire [5:0] clock_output_bus;
+ wire [1:0] clock_input_bus;
+ wire gnd;
+
+ assign gnd = 1'b0;
+ assign clock_input_bus = { gnd, clock_in };
+
+ altpll altpll_component (
+ .inclk (clock_input_bus),
+ .clk (clock_output_bus)
+ );
+ defparam
+ altpll_component.operation_mode = "NORMAL",
+ altpll_component.intended_device_family = "Cyclone II",
+ altpll_component.lpm_type = "altpll",
+ altpll_component.pll_type = "FAST",
+ /* Specify the input clock to be a 50MHz clock. A 50 MHz clock is present
+ * on PIN_N2 on the DE2 board. We need to specify the input clock frequency
+ * in order to set up the PLL correctly. To do this we must put the input clock
+ * period measured in picoseconds in the inclk0_input_frequency parameter.
+ * 1/(20000 ps) = 0.5 * 10^(5) Hz = 50 * 10^(6) Hz = 50 MHz. */
+ altpll_component.inclk0_input_frequency = 20000,
+ altpll_component.primary_clock = "INCLK0",
+ /* Specify output clock parameters. The output clock should have a
+ * frequency of 25 MHz, with 50% duty cycle. */
+ altpll_component.compensate_clock = "CLK0",
+ altpll_component.clk0_phase_shift = "0",
+ altpll_component.clk0_divide_by = 2,
+ altpll_component.clk0_multiply_by = 1,
+ altpll_component.clk0_duty_cycle = 50;
+
+ assign clock_out = clock_output_bus[0];
+
+endmodule
+
+// ============================================================
+// CNX file retrieval info
+// ============================================================
+// Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0"
+// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg"
+// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz"
+// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz"
+// Retrieval info: PRIVATE: SPREAD_USE STRING "0"
+// Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0"
+// Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1"
+// Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575"
+// Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0"
+// Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000"
+// Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000"
+// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1"
+// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1"
+// Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500"
+// Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0"
+// Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0"
+// Retrieval info: PRIVATE: STICKY_CLK0 STRING "1"
+// Retrieval info: PRIVATE: BANDWIDTH STRING "1.000"
+// Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0"
+// Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any"
+// Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000"
+// Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "0"
+// Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1"
+// Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0"
+// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0"
+// Retrieval info: PRIVATE: USE_CLK0 STRING "1"
+// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1"
+// Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "0"
+// Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0"
+// Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0"
+// Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0"
+// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "50.000"
+// Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0"
+// Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0"
+// Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0"
+// Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz"
+// Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz"
+// Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0"
+// Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1"
+// Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0"
+// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1"
+// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1"
+// Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1"
+// Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0"
+// Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1"
+// Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0"
+// Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1"
+// Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0"
+// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available"
+// Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "1"
+// Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz"
+// Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "0"
+// Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "50.000"
+// Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0"
+// Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1"
+// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "25.000"
+// Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0"
+// Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0"
+// Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0"
+// Retrieval info: PRIVATE: DEV_FAMILY STRING "Cyclone II"
+// Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1"
+// Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1"
+// Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low"
+// Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "1"
+// Retrieval info: PRIVATE: USE_CLKENA0 STRING "0"
+// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg"
+// Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0"
+// Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0"
+// Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0"
+// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
+// Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50"
+// Retrieval info: CONSTANT: LPM_TYPE STRING "altpll"
+// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "1"
+// Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "20000"
+// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "2"
+// Retrieval info: CONSTANT: PLL_TYPE STRING "FAST"
+// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
+// Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL"
+// Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0"
+// Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0"
+// Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT VCC "c0"
+// Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT VCC "@clk[5..0]"
+// Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT GND "inclk0"
+// Retrieval info: USED_PORT: @extclk 0 0 4 0 OUTPUT VCC "@extclk[3..0]"
+// Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0
+// Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0
+// Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll.v TRUE FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll.inc FALSE FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll.cmp FALSE FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll.bsf FALSE FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll_inst.v FALSE FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll_bb.v FALSE FALSE
diff --git a/vga-core/vga_pll.v b/vga-core/vga_pll.v
new file mode 100644
index 0000000..bbf375f
--- /dev/null
+++ b/vga-core/vga_pll.v
@@ -0,0 +1,173 @@
+// megafunction wizard: %ALTPLL%
+// GENERATION: STANDARD
+// VERSION: WM1.0
+// MODULE: altpll
+
+// ============================================================
+// File Name: VgaPll.v
+// Megafunction Name(s):
+// altpll
+// ============================================================
+// ************************************************************
+// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
+//
+// 5.0 Build 168 06/22/2005 SP 1 SJ Full Version
+// ************************************************************
+
+
+//Copyright (C) 1991-2005 Altera Corporation
+//Your use of Altera Corporation's design tools, logic functions
+//and other software and tools, and its AMPP partner logic
+//functions, and any output files any of the foregoing
+//(including device programming or simulation files), and any
+//associated documentation or information are expressly subject
+//to the terms and conditions of the Altera Program License
+//Subscription Agreement, Altera MegaCore Function License
+//Agreement, or other applicable license agreement, including,
+//without limitation, that your use is for the sole purpose of
+//programming logic devices manufactured by Altera and sold by
+//Altera or its authorized distributors. Please refer to the
+//applicable agreement for further details.
+
+
+// synopsys translate_off
+`timescale 1 ps / 1 ps
+// synopsys translate_on
+module vga_pll (
+ clock_in,
+ clock_out);
+
+ input clock_in;
+ output clock_out;
+
+ wire [5:0] clock_output_bus;
+ wire [1:0] clock_input_bus;
+ wire gnd;
+
+ assign gnd = 1'b0;
+ assign clock_input_bus = { gnd, clock_in };
+
+ altpll altpll_component (
+ .inclk (clock_input_bus),
+ .clk (clock_output_bus)
+ );
+ defparam
+ altpll_component.operation_mode = "NORMAL",
+ altpll_component.intended_device_family = "Cyclone II",
+ altpll_component.lpm_type = "altpll",
+ altpll_component.pll_type = "FAST",
+ /* Specify the input clock to be a 50MHz clock. A 50 MHz clock is present
+ * on PIN_N2 on the DE2 board. We need to specify the input clock frequency
+ * in order to set up the PLL correctly. To do this we must put the input clock
+ * period measured in picoseconds in the inclk0_input_frequency parameter.
+ * 1/(20000 ps) = 0.5 * 10^(5) Hz = 50 * 10^(6) Hz = 50 MHz. */
+ altpll_component.inclk0_input_frequency = 20000,
+ altpll_component.primary_clock = "INCLK0",
+ /* Specify output clock parameters. The output clock should have a
+ * frequency of 25 MHz, with 50% duty cycle. */
+ altpll_component.compensate_clock = "CLK0",
+ altpll_component.clk0_phase_shift = "0",
+ altpll_component.clk0_divide_by = 2,
+ altpll_component.clk0_multiply_by = 1,
+ altpll_component.clk0_duty_cycle = 50;
+
+ assign clock_out = clock_output_bus[0];
+
+endmodule
+
+// ============================================================
+// CNX file retrieval info
+// ============================================================
+// Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0"
+// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg"
+// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz"
+// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz"
+// Retrieval info: PRIVATE: SPREAD_USE STRING "0"
+// Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0"
+// Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1"
+// Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575"
+// Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0"
+// Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000"
+// Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000"
+// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "1"
+// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1"
+// Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500"
+// Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0"
+// Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0"
+// Retrieval info: PRIVATE: STICKY_CLK0 STRING "1"
+// Retrieval info: PRIVATE: BANDWIDTH STRING "1.000"
+// Retrieval info: PRIVATE: BANDWIDTH_USE_CUSTOM STRING "0"
+// Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "Any"
+// Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000"
+// Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "0"
+// Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1"
+// Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0"
+// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0"
+// Retrieval info: PRIVATE: USE_CLK0 STRING "1"
+// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1"
+// Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "0"
+// Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0"
+// Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0"
+// Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0"
+// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "50.000"
+// Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0"
+// Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0"
+// Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0"
+// Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz"
+// Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz"
+// Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0"
+// Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1"
+// Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0"
+// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1"
+// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1"
+// Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1"
+// Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0"
+// Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1"
+// Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0"
+// Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1"
+// Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0"
+// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available"
+// Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "1"
+// Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz"
+// Retrieval info: PRIVATE: PLL_ENA_CHECK STRING "0"
+// Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "50.000"
+// Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0"
+// Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1"
+// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "25.000"
+// Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0"
+// Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0"
+// Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0"
+// Retrieval info: PRIVATE: DEV_FAMILY STRING "Cyclone II"
+// Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1"
+// Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1"
+// Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low"
+// Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "1"
+// Retrieval info: PRIVATE: USE_CLKENA0 STRING "0"
+// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg"
+// Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0"
+// Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0"
+// Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0"
+// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
+// Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50"
+// Retrieval info: CONSTANT: LPM_TYPE STRING "altpll"
+// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "1"
+// Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "20000"
+// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "2"
+// Retrieval info: CONSTANT: PLL_TYPE STRING "FAST"
+// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone II"
+// Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL"
+// Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0"
+// Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0"
+// Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT VCC "c0"
+// Retrieval info: USED_PORT: @clk 0 0 6 0 OUTPUT VCC "@clk[5..0]"
+// Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT GND "inclk0"
+// Retrieval info: USED_PORT: @extclk 0 0 4 0 OUTPUT VCC "@extclk[3..0]"
+// Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0
+// Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0
+// Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll.v TRUE FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll.inc FALSE FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll.cmp FALSE FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll.bsf FALSE FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll_inst.v FALSE FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL VgaPll_bb.v FALSE FALSE
diff --git a/vga-hacks/vga_adapter_sim.sv b/vga-hacks/vga_adapter_sim.sv
new file mode 100644
index 0000000..1fb0142
--- /dev/null
+++ b/vga-hacks/vga_adapter_sim.sv
@@ -0,0 +1,22 @@
+// For simulation only
+
+module vga_adapter(input logic resetn, input logic clock, input logic [2:0] colour,
+ input logic [7:0] x, input logic [6:0] y, input logic plot,
+ output logic [9:0] VGA_R, output logic [9:0] VGA_G, output logic [9:0] VGA_B,
+ output logic VGA_HS, output logic VGA_VS, output logic VGA_BLANK,
+ output logic VGA_SYNC, output logic VGA_CLK);
+ parameter BITS_PER_COLOUR_CHANNEL = 1;
+ parameter MONOCHROME = "FALSE";
+ parameter RESOLUTION = "320x240";
+ parameter BACKGROUND_IMAGE = "background.mif";
+ parameter USING_DE1 = "FALSE";
+
+ always_ff @(posedge clock, negedge resetn) begin
+ if (~resetn) begin
+ $display("VGA: reset");
+ end else if (plot) begin
+ $display("VGA: plot (%d,%d) colour %03b", x, y, colour);
+ end
+ end
+endmodule: vga_adapter
+
diff --git a/vga-hacks/vga_adapter_window.sv b/vga-hacks/vga_adapter_window.sv
new file mode 100644
index 0000000..278903c
--- /dev/null
+++ b/vga-hacks/vga_adapter_window.sv
@@ -0,0 +1,24 @@
+// For simulation only
+
+module vga_adapter(input logic resetn, input logic clock, input logic [2:0] colour,
+ input logic [7:0] x, input logic [6:0] y, input logic plot,
+ output logic [9:0] VGA_R, output logic [9:0] VGA_G, output logic [9:0] VGA_B,
+ output logic VGA_HS, output logic VGA_VS, output logic VGA_BLANK,
+ output logic VGA_SYNC, output logic VGA_CLK);
+ parameter BITS_PER_COLOUR_CHANNEL = 1;
+ parameter MONOCHROME = "FALSE";
+ parameter RESOLUTION = "320x240";
+ parameter BACKGROUND_IMAGE = "background.mif";
+ parameter USING_DE1 = "FALSE";
+
+ always_ff @(posedge clock, negedge resetn) begin
+ if (!resetn) begin
+ void'(mti_fli::mti_Cmd("vga::reset"));
+ end else if (plot) begin
+ if ((^x === 1'bx) || (^y === 1'bx) || (^colour === 1'bx))
+ $error("cannot plot undefined values");
+ else
+ void'(mti_fli::mti_Cmd($sformatf("vga::plot %d %d %d", x, y, colour)));
+ end
+ end
+endmodule: vga_adapter
diff --git a/vga-hacks/vga_window.tcl b/vga-hacks/vga_window.tcl
new file mode 100644
index 0000000..5ad7aaf
--- /dev/null
+++ b/vga-hacks/vga_window.tcl
@@ -0,0 +1,85 @@
+namespace eval vga {
+ set zoom 4
+ set width 160
+ set height 120
+ set bg "#808080"
+ set count 0
+}
+
+proc vga::init {} {
+ toplevel .vga -padx 5 -pady 5
+ wm title .vga "fake VGA screen"
+
+ frame .vga.draw
+ pack .vga.draw -expand 1 -fill both
+
+ frame .vga.status
+ button .vga.status.reset -width 5 -relief ridge -text "reset" -command { vga::reset }
+ label .vga.status.count_legend -text " count:"
+ label .vga.status.count_val -relief groove -width 10
+
+ label .vga.status.drawn_legend -text "last:"
+ label .vga.status.drawn_pos -relief groove -width 7
+ label .vga.status.click_legend -text " clicked:"
+ label .vga.status.click_pos -relief groove -width 7
+ label .vga.status.mouse_legend -text " mouse:"
+ label .vga.status.mouse_pos -relief groove -width 7
+ pack .vga.status.reset .vga.status.count_legend .vga.status.count_val -side left
+ pack .vga.status.mouse_pos .vga.status.mouse_legend .vga.status.click_pos .vga.status.click_legend \
+ .vga.status.drawn_pos .vga.status.drawn_legend -side right
+ pack .vga.status -side bottom -fill x
+ .vga.status.drawn_pos configure -text "-,-"
+ .vga.status.mouse_pos configure -text "-,-"
+ .vga.status.click_pos configure -text "-,-"
+
+ set w [expr $vga::width * $vga::zoom]
+ set h [expr {$vga::height * $vga::zoom}]
+ canvas .vga.draw.c -width $w -height $h -bg $vga::bg
+ pack .vga.draw.c -expand 1 -fill both
+ bind .vga.draw.c <Motion> { vga::show_mouse %x %y }
+ bind .vga.draw.c <ButtonPress> { vga::show_click %x %y }
+ bind .vga.draw.c <Leave> { .vga.status.mouse_pos configure -text "-,-" }
+}
+
+proc vga::reset {} {
+ .vga.draw.c create rectangle 0 0 [expr $vga::width * $vga::zoom - 1] [expr $vga::height * $vga::zoom - 1] -outline $vga::bg -fill $vga::bg
+ set vga::count 0
+ .vga.status.count_val configure -text "$vga::count"
+ .vga.status.drawn_pos configure -text "-,-"
+}
+
+proc vga::rgb_to_hex {c} {
+ set b [expr ($c & 1) * 255]
+ set g [expr (($c >> 1) & 1) * 255]
+ set r [expr (($c >> 2) & 1) * 255]
+ return [format "#%02x%02x%02x" $r $g $b]
+}
+
+proc vga::plot {x y c} {
+ if {[expr $x < 0]} { return }
+ if {[expr $x >= $vga::width]} { return }
+ if {[expr $y < 0]} { return }
+ if {[expr $y >= $vga::height]} { return }
+ if !({[winfo exists .vga]}) {vga::init}
+ set x0 [expr $x * $vga::zoom]
+ set y0 [expr $y * $vga::zoom]
+ set x1 [expr ($x+1) * $vga::zoom - 1]
+ set y1 [expr ($y+1) * $vga::zoom - 1]
+ set clr [vga::rgb_to_hex $c]
+ .vga.draw.c create rectangle $x0 $y0 $x1 $y1 -outline $clr -fill $clr
+ incr vga::count
+ .vga.status.count_val configure -text "$vga::count"
+ .vga.status.drawn_pos configure -text "$x,$y:$c"
+}
+
+proc vga::show_mouse {x0 y0} {
+ set x [expr $x0 / $vga::zoom]
+ set y [expr $y0 / $vga::zoom]
+ .vga.status.mouse_pos configure -text "$x,$y"
+}
+
+proc vga::show_click {x0 y0} {
+ set x [expr $x0 / $vga::zoom]
+ set y [expr $y0 / $vga::zoom]
+ .vga.status.click_pos configure -text "$x,$y"
+}