Laboratory Exercise 1 Switches, Lights, and Multiplexers

$30.00

Download Details:

  • Name: Assignment-1-Switches-Lights-and-Multiplexers-rfv7ib.zip
  • Type: zip
  • Size: 19.01 MB

Description

Rate this product

The purpose of this exercise is to learn how to connect simple input and output devices to
an FPGA chip and implement a circuit that uses these devices. We will use the switches
17 0 SW −
on the DE2-115 board as inputs to the circuit. We will use light emitting diodes (LEDs)
and 7-segment displays as output devices.
Part I
The DE2-115 board provides 18 toggle switches, called 17 0 SW −
, that can be used as
inputs to a circuit, and 18 red lights, called LEDR17 0−
, that can be used to display output
values. Figure 1 shows a simple Verilog module that uses these switches and shows their
states on the LEDs. Since there are 18 switches and lights it is convenient to represent them
as vectors in the Verilog code, as shown. We have used a single assignment statement for all
18 LEDR outputs, which is equivalent to the individual assignments
assign LEDR[17] = SW[17];
assign LEDR[16] = SW[16];
. . .
assign LEDR[0] = SW[0];
The DE2-115 board has hardwired connections between its FPGA chip and the switches
and lights. To use 17 0 SW −
and LEDR17 0−
it is necessary to include in your Quartus II project
the correct pin assignments, which are given in the DE2-115 User Manual. For example, the
manual specifies that SW0 is connected to the FPGA pin AB28 and LEDR 0 is connected to
pin G19. A good way to make the required pin assignments is to import into the Quartus II
software the file called DE2-115_ pin_assignments.csv, which is provided on the DE2-115
System CD and in the University Program section of Altera’s web site. The procedure for
making pin assignments is described in the tutorial Quartus II Introduction using Verilog
Design, which is also available from Altera.
It is important to realize that the pin assignments in the DE2-115 pin assignments.csv file
are useful only if the pin names given in the file are exactly the same as the port names used in
your Verilog module. The file uses the names SW[0] . . . SW[17] and LEDR[0] . . . LEDR[17] for
the switches and lights, which is the reason we used these names in Figure 1.
1
// Simple module that connects the SW switches to the LEDR lights
module part1 (SW, LEDR);
input [17:0] SW; // toggle switches
output [17:0] LEDR; // red LEDs
assign LEDR = SW;
endmodule
Figure 1.Verilog code that uses the DE2-115 board switches and lights.
Perform the following steps to implement a circuit corresponding to the code in Figure 1
on the DE2-115 board.
1. Create a new Quartus II project for your circuit. Select Cyclone IV EP4CE115F29C8 as the
target chip, which is the FPGA chip on the Altera DE2-115 board.
2. Create a Verilog module for the code in Figure 1 and include it in your project.
3. Include in your project the required pin assignments for the DE2 board, as discussed
above. Compile the project.
4. Download the compiled circuit into the FPGA chip. Test the functionality of the circuit by
toggling the switches and observing the LEDs.
Part II
Figure 2a shows a sum-of-products circuit that implements a 2-to-1 multiplexer with a
select input s. If s = 0 the multiplexer’s output m is equal to the input x, and if s = 1 the output is
equal to y. Part b of the figure gives a truth table for this multiplexer, and part c shows its circuit
symbol.
Figure 2.A 2-to-1 multiplexer.
2
The multiplexer can be described by the following Verilog statement:
assign m = (∼s & x) | (s & y);
You are to write a Verilog module that includes eight assignment statements like the one
shown above to describe the circuit given in Figure 3a. This circuit has two eight-bit inputs, X
and Y, and produces the eight-bit output M. If s = 0 then M = X, while if s = 1 then M = Y. We
refer to this circuit as an eight-bit wide 2-to-1 multiplexer. It has the circuit symbol shown in
Figure 3b, in which X, Y, and M are depicted as eight-bit wires. Perform the steps shown
below.
Figure 3.An eight-bit wide 2-to-1 multiplexer.
1. Create a new Quartus II project for your circuit.
2. Include your Verilog file for the eight-bit wide 2-to-1 multiplexer in your project. Use switch
SW 17 on the DE2-115 board as the s input switches SW7−0 as the X input and 15 8 SW −
as
the Y input. Connect the SW switches to the red lights LEDR and connect the output M to
the green lights LEDG7 0−
.
3. Include in your project the required pin assignments for the DE2-115 board. As discussed
in Part I, these assignments ensure that the input ports of your Verilog code will use the
pins on the Cyclone IV FPGA that are connected to the SW switches, and the output ports
of your Verilog code will use the FPGA pins connected to the LEDR and LEDG lights.
4. Compile the project.
5. Download the compiled circuit into the FPGA chip. Test the functionality of the eight-bit
wide 2-to-1 multiplexer by toggling the switches and observing the LEDs.
3
Part III
In Figure 2 we showed a 2-to-1 multiplexer that selects between the two inputs x and y.
For this part consider a circuit in which the output m has to be selected from five inputs u, v, w,
x, and y. Part a of Figure 4 shows how we can build the required 5-to-1 multiplexer by using
four 2-to-1 multiplexers. The circuit uses a 3-bit select input 2 1 0 s s s and implements the truth
table shown in Figure 4b. A circuit symbol for this multiplexer is given in part c of the figure.
Recall from Figure 3 that an eight-bit wide 2-to-1 multiplexer can be built by using eight
instances of a 2-to-1 multiplexer. Figure 5 applies this concept to define a three-bit wide 5-to-1
multiplexer. It contains three instances of the circuit in Figure 4a.
Figure 4.A 5-to-1 multiplexer.
4
Figure 5.A three-bit wide 5-to-1 multiplexer.
Perform the following steps to implement the three-bit wide 5-to-1 multiplexer.
1. Create a new Quartus II project for your circuit.
2. Create a Verilog module for the three-bit wide 5-to-1 multiplexer. Connect its select inputs
to switches 17 15 SW −
, and use the remaining 15 switches 14 0 SW −
to provide the five 3-bit
inputs U to Y. Connect the SW switches to the red lights LEDR and connect the output M
to the green lights LEDG2 0−
.
3. Include in your project the required pin assignments for the DE2-115 board. Compile the
project.
4. Download the compiled circuit into the FPGA chip. Test the functionality of the three-bit
wide 5-to-1 multiplexer by toggling the switches and observing the LEDs. Ensure that each
of the inputs U to Y can be properly selected as the output M.
Part IV
Figure 6 shows a 7-segment decoder module that has the three-bit input 2 1 0 c c c . This
decoder produces seven outputs that are used to display a character on a 7-segment display.
Table 1 lists the characters that should be displayed for each valuation of 2 1 0 c c c . To keep the
design simple, only four characters are included in the table (plus the ‘blank’ character, which
is selected for codes 100 − 111).The seven segments in the display are identified by the
indices 0 to 6 shown in the figure.
5
Each segment is illuminated by driving it to the logic value 0. You are to write a Verilog
module that implements logic functions that represent circuits needed to activate each of the
seven segments. Use only simple Verilog assign statements in your code to specify each logic
function using a Boolean expression.
Figure 6.A 7-segment decoder.
Perform the following steps:
1. Create a new Quartus II project for your circuit.
2. Create a Verilog module for the 7-segment decoder. Connect the 2 1 0 c c c inputs to switches
2 0 SW −
, and connect the outputs of the decoder to the HEX0 display on the DE2-115
board.
3. The segments in this display are called 0 HEX 0 ,
1 6 HEX HEX 0 ,…, 0 , corresponding to
Figure 6. You should declare the 7-bit port output [0:6] HEX0_D;
in your Verilog code so that the names of these outputs match the corresponding names in
the DE2-115 User Manual and the DE2-115 pin assignments.csv file.
4. After making the required DE2-115 board pin assignments, compile the project.
6
5. Download the compiled circuit into the FPGA chip. Test the functionality of the circuit by
toggling the 2 0 SW −
switches and observing the 7-segment display.
Part V
Consider the circuit shown in Figure 7. It uses a three-bit wide 5-to-1 multiplexer to enable
the selection of five characters that are displayed on a 7-segment display. Using the
7-segment decoder from Part IV this circuit can display any of the characters H, E, L, O, and
‘blank’. The character codes are set according to Table 1 by using the switches 14 0 SW −
, and a
specific character is selected for display by setting the switches 17 15 SW −
.
An outline of the Verilog code that represents this circuit is provided in Figure 8. Note that
we have used the circuits from Parts III and IV as subcircuits in this code. You are to extend the
code in Figure 8 so that it uses five 7-segment displays rather than just one. You will need to
use five instances of each of the sub circuits. The purpose of your circuit is to display any word
on the five displays that is composed of the characters in Table 1, and be able to rotate this
word in a circular fashion across the displays when the switches 17 15 SW −
are toggled. As an
example, if the displayed word is HELLO, then your circuit should produce the output patterns
illustrated in Table 2.
Figure 7.A circuit that can select and display one of five characters.
7
module part5 (SW, HEX0);

input [17:0] SW; // toggle switches

output [0:6] HEX0_D; // 7-seg displays
wire [2:0] M;
mux 3bit 5to1 M0 (SW[17:15], SW[14:12], SW[11:9], SW[8:6], SW[5:3], SW[2:0], M);
char 7seg H0 (M, HEX0_D);
endmodule
// implements a 3-bit wide 5-to-1 multiplexer
module mux 3bit 5to1 (S, U, V, W, X, Y, M);
input [2:0] S, U, V, W, X, Y;
output [2:0] M;
. . . code not shown
endmodule
// implements a 7-segment decoder for H, E, L, O, and ‘blank’
module char 7seg (C, Display);

input [2:0] C; // input code

output [0:6] Display; // output 7-seg code
. . . code not shown
endmodule
Figure 8.Verilog code for the circuit in Figure 7.
Table 2.Rotating the word HELLO on five displays.
8
Perform the following steps.
1. Create a new Quartus II project for your circuit.
2. Include your Verilog module in the Quartus II project. Connect the switches 17 15 SW −
to
the select inputs of each of the five instances of the three-bit wide 5-to-1 multiplexers. Also
connect 14 0 SW −
to each instance of the multiplexers as required to produce the patterns of
characters shown in Table 2. Connect the outputs of the five multiplexers to the 7-segment
displays HEX4_D, HEX3_D, HEX2_D, HEX1_D, and HEX0_D.
3. Include the required pin assignments for the DE2-115 board for all switches, LEDs, and
7-segment displays. Compile the project.
4. Download the compiled circuit into the FPGA chip. Test the functionality of the circuit by
setting the proper character codes on the switches 14 0 SW −
and then toggling 17 15 SW −
to
observe the rotation of the characters.
Part VI
Extend your design from Part V so that is uses all eight 7-segment displays on the
DE2-115 board. Your circuit should be able to display words with five (or fewer) characters on
the eight displays, and rotate the displayed word when the switches 17 15 SW −
are toggled. If
the displayed word is HELLO, then your circuit should produce the patterns shown in Table 3.

Table 3.Rotating the word HELLO on eight displays.
Perform the following steps:
1. Create a new Quartus II project for your circuit and select as the target chip the Cyclone IV
EP4CE115F29C8.
2. Include your Verilog module in the Quartus II project. Connect the switches 17 15 SW −
to
the select inputs of each instance of the multiplexers in your circuit.
9
Also connect 14 0 SW −
to each instance of the multiplexers as required to produce the
patterns of characters shown in Table 3. (Hint: for some inputs of the multiplexers you will
want to select the ‘blank’ character.) Connect the outputs of your multiplexers to the
7-segment displays HEX7_D, . . ., HEX0_D.
3. Include the required pin assignments for the DE2-115 board for all switches, LEDs, and
7-segment displays. Compile the project.
4. Download the compiled circuit into the FPGA chip. Test the functionality of the circuit by
setting the proper character codes on the switches 14 0 SW −
and then toggling SW17−15
to observe the rotation of the characters.