Implementing designs directly in schematics or structural (gate-level) Verilog can give you the best control, and often the smallest designs. But, sometimes it can be a real pain to optimize all the way down at that level. An alternative is high-level (Register Transfer Level – RTL) Verilog, where you tell the CAD tools what you what the output to look like, and it automatically does the Boolean algebra for you!
In lecture, we presented a seven-segment display driver. RTL code for that seven-segment display is given above (code).
seg7, or you could add a single line of code afterward. Either is a legitimate approach.
double_seg7, 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.double_seg7_tb that verifies the behavior of your top-level module.In Lab 3, we built a system that took in a UPC and output whether a returned Nordstrom item was on sale for a discount and whether it was stolen. A nearby store, McCluskey's Pawn Shop, buys used items from customers that were originally purchased from various stores that also use the UPC system. Old Mr. McCluskey 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, Mr. McCluskey 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 Mr. McCluskey!
pawn_shop. Copy your nordstrom module over to this project too, you're going to use it later.upc_display and 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. Each output should be driven by a 7-bit 6-to-1 multiplexor, illustrated with standard "trapezoid" notation. Be sure to label the select value for each mux inputs and indicate the bit width of every bus in your diagram. If you're unsure whether you're using correct notation, ask your course staff.
upc_display_tb. Simulate your module thoroughly in ModelSim to make sure it works.
pawn_shop that shows an instance of upc_display and an instance of nordstrom sitting next to eachother. The design should use them both so the system simultaneously computes the
Discounted LED, Stolen LED, and HEX displays. Make sure the diagram shows what board peripherals each module is connected to.pawn_shop based on your block diagram. Create a corresponding test bench pawn_shop_tb that verifies the behavior of your top-level module. Test and debug with ModelSim, then load onto your board. 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).
60 points for correctness, style, and testing.