Lab 2: Programming Hardware
The purpose of this lab is to get you working with larger, pre-built modules in Quartus and to begin programming the DE1 hardware boards.
This lab you will need to complete on your own.
- Start Quartus. Follow the new project wizard and create a new directory for lab 2. Call your first project flash and put it in a subdirectory of your project2 directory. This is the name of the project and the top level entity, but it will not be the only design file you create for this project. You will be placing multiple design files into the same proejct and directory so you can include one or more designs into the top-level entity.
Select File->New and create a new VHDL file. VHDL is a programming
language for specifying hardware configurations. Use the Edit->Insert
Template option to select the Unsigned Adder full design
Change unsigned_adder to boxdriver in both the entity and architecture
declarations. Then save the file as boxdriver.vhd.
For all VHDL files, be sure to make the filename match the entity name.
Simplify the template so it has only a single input signal (delete input b). Then remove the generic block and make both the input and output be std_logic_vector (3 downto 0). The inputs are now standard logic vectors with 4 bits, indexed from 3 down to 0, with index 3 being the most significant bit.
Delete the addition line in the architecture block and then insert the
template for a conditional signal assignment using Edit->Insert
Make the receiving signal be the first bit of the result output signal: result(0). Make the right side assign a '1' to result when a is "0000", "0001", "0010", or "0011" and otherwise '0'. The expression should look like the following.
result(0) <= '1' when a = "0000" or a = "0001" or a = "0010" or a = "0011" else '0';
The above is called a conditional signal assignment. This statement is an asynchronous statement, which means it is running continuously, in parallel to any other statements in your program. Whenever the condition variable a on the right side changes, the value of the left side is updated.
Do the same for the other three result outputs, but make each one a '1' for a different set of four consecutive counter values. So result(1) should be '1' when the input a is equal to 4, 5, 6, or 7 (binary).
- Select Project->Add current file to add the VHDL file to the current project. Then select File->Create symbol file so that you can include the project in other project files. This may require you to fix any bugs in the code. If you just want to check syntax on a VHDL file, select Processing->Analyze File.
Simulate the box driver file. Download
this test bench file and take a look at it.
Then use ghdl to compile it and your boxdriver.vhd file to make a
ghdl -a boxtest.vhd boxdriver.vhd
ghdl -e boxtest
ghdl -r boxtest --vcd=boxtest.vcd
gtkwave boxtest.vcd &
Take a look at the output and make sure you understand what it says about your circuit before continuing.
- Create a new BDF file. Add 2 input pins and 4 output pins to the design. Name the two input pins clock and reset. Name the four output pins HEX0, HEX0, HEX0, and HEX0.
- Add an lpm_counter device: megafunctions->arithmetic. Set up the clock to be 4-bits with a clock and asynchronous clear/reset as the only inputs. After inserting it into your design, hook up the clock and reset signals from the input pins.
Add the boxdriver symbol to the graphic design file. Hook the counter
outputs to the boxdriver inputs. Then hook the four boxdriver outputs
to the four output pins. The circuit should look like the diagram below.
Save the file as flash.bdf, add the project to the file and then compile the project.
Back in Quartus, go to Assignments->Pin Planner. We need to make sure
the input and output pins are connected intelligently when we download
the design to hardware.
You will want to have the DE1 User Manual handy when assigning pins.
Use the popup menus (or just type the names) in the location field for each pin to set them to the desired values, or just type the pin name into the pin field. Connect the clock to the first push button. Connect the reset to the second push button. Connect the four outputs to four LEDs.
- Use the Tools->Programmer to download your circuit to the board. If the programmer says 'No Hardware', then select Hardware Setup and in the popup menu select Byte blaster. Test out your circuit by holding down the reset push button (which is 0 when pressed) and then push the clock input.
When you have completed the lab assignment, go ahead and get started on the second project.