Task 1 – Seven-Segment Displays
In lecture, we presented a seven-segment display driver.
RTL code for that seven-segment display is given above
(code).
The seven-segment displays on the DE1 are active low.
That means that putting a FALSE on the wire makes it light up, while
a TRUE means that light is off.
You will have to adjust your design accordingly.
- Create a new project in Quartus Prime and add the seg7
code to it.
- Create a new module that uses two instances of the
seg7 code – one that uses SW3-SW0 as
inputs and outputs to HEX0, and another that uses
SW7-SW4 as inputs and outputs to HEX1.
Task 2 – UPC Code to Display
In Lab 3, we built a system that took in a UPC and output whether a
returned Nordstrom item was on sale and whether it was stolen.
A nearby store, Fred's Pawn Shop, buys used items from customers that
were originally purchased from various stores that also use the UPC
system.
Fred wants a similar item-checking system, but has found that devious
customers are changing the UPC stickers on the items they are selling
to misrepresent the price.
To combat that, Fred would like you to add a
display on HEX5-HEX0 that describes the product
corresponding to that UPC – if the description doesn't
match the item, then someone is trying to cheat Fred!
You already created the logic to output the Discounted and
Stolen signals based on six specific UPC's and whether or
not the item was marked.
To simplify this lab, we will reuse all of that existing logic, but
now add hex display outputs for those six UPC's.
To let you exercise your creativity, you are asked to come up with
new item names.
- Come up with exactly six new items to fill out the
leftmost column of the table below – three expensive items and
three inexpensive items.
You are not allowed to use any of the items from Lab 3 or
the example given below.
- Make sure to match each item with a corresponding expensive
or inexpensive UPC.
- Since we only have six 7-segment displays, you should
consider what items will lend themselves to "good"
(easily-distinguishable) displays.
Item Name
UPC
Discounted?
Expensive?
<New Item 1>
0 0 0
No
Yes
<New Item 3>
0 1 1
Yes
No
<New Item 4>
1 0 0
No
Yes
<New Item 5>
1 0 1
Yes
Yes
<New Item 6>
1 1 0
Yes
No
- Determine corresponding 7-segment encodings for
your six items.
The displays do not need to use the entire item name, but they need
to be at least 3 letters each and easily-distinguishable from the
other UPC descriptions.
You may use upper- and lower-case letters or pictograms.
- Example: The item "Dress Shoe" could be displayed as
There is no "correct" way to encode the entire alphabet on
7-segment displays.
You may use online resources such as
http://tinyurl.com/h99785g
for inspiration, but you should decide for yourself whether or
not your display is easily read or more of a stretch to interpret
correctly.
- Create a high-level design for the circuit using
RTL.
It should have three inputs (U, P, and C),
similar to the seg7 module, but will instead have six
7-bit outputs for the 7-seg displays.
- Simulate your design in ModelSim, then hook it to
the switches and lights of your board to make sure it works.
- Create a new module that uses one instance of your
new display code and one instance of your Lab 3 module.
It should use them both so the system simultaneously computes the
Sale LED, Stolen LED, and HEX displays.
Test and debug with ModelSim, then load onto your board.
ModelSim Tips to help you organize your signals:
- Signals from multiple modules can be
displayed at the same time.
Select modules in the sim tab and then drag-and-drop signals from
the Objects pane to the Wave pane.
- To (re-)order signals, you can click
and drag names in the Wave pane.
- You can create groups of signals.
Highlight multiple signals in the Wave pane, then right-click on
one of the signal names and select "Group."
You can now move the signals as a group, and hide/expose them
easily.
Note: You can only group signals from the same module.
- Don't forget to save the formatting into the
<modulename>_wave.do file!
Task 3 – Don't Cares
Your design has outputs for only 6 of the 8 possible UPC codes.
For the other two cases, a line such as
"default: LEDs = 7'bX;" tells Quartus Prime that it can
treat these cases as a Don't Care condition.
If you didn't do this, go back and correct it to do so.
Test your design on the circuit board, and
record the pattern it shows for these Don't
Care conditions (hand drawn or photo will work).