0% found this document useful (0 votes)
0 views

IntroToComputing

This laboratory manual is designed for students at Ho Chi Minh City University of Technology to implement digital circuits using logic gates and functional ICs on breadboards and FPGAs. It includes detailed instructions for four labs focusing on Boolean functions, circuit implementation, and the use of various integrated circuits. Additionally, the manual provides prelab requirements, objectives, and installation guidelines for necessary software tools.

Uploaded by

phmthai2300
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
0 views

IntroToComputing

This laboratory manual is designed for students at Ho Chi Minh City University of Technology to implement digital circuits using logic gates and functional ICs on breadboards and FPGAs. It includes detailed instructions for four labs focusing on Boolean functions, circuit implementation, and the use of various integrated circuits. Additionally, the manual provides prelab requirements, objectives, and installation guidelines for necessary software tools.

Uploaded by

phmthai2300
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 80

VIET NAM NATIONAL UNIVERSITY HO CHI MINH CITY – UNIVERSITY OF TECHNOLOGY

FACULTY OF ELECTRICAL AND ELECTRONICS ENGINEERING


DEPARTMENT OF ELECTRONICS
--oOo—

INTRODUCTION TO COMPUTING
LABORATORY MANUAL
TABLE OF CONTENT
ABOUT THE MANUAL ........................................................................................................... 1
LAB 1: IMPLEMENTATION OF BOOLEAN FUNCTION ON BREADBOARD
WITH LOGIC GATES AND FUNCTIONAL ICS .............................................................. 2
A. PRELAB .................................................................................................................2
I. IMPLEMENTATION OF DIGITAL CIRCUIT ON BREADBOARD ............2
II. QUESTIONS: .........................................................................................................6
B. LAB MANUAL: ...................................................................................................13
I. OBJECTIVES: .....................................................................................................13
II. LAB PREPARATION:........................................................................................13
III. LAB INSTRUCTION: .........................................................................................13
LAB 2: IMPLEMENTATION OF BASIC LOGIC GATES AND FUNCTIONAL
ICs ON FPGA ............................................................................................................................ 26
A. PRELAB ...............................................................................................................26
B. LAB MANUAL: ...................................................................................................34
I. OBJECTIVES: .....................................................................................................34
II. LAB PREPARATION:........................................................................................34
III. LAB INSTRUCTIONS:.......................................................................................34
APPENDIX 1: QUARTUS AND UBUNTU INSTALLATION ON WINDOWS . 48
A. UBUNTU INSTALLATION ON WINDOWS: .................................................48
I. Download and install Xming and WSL2: ..........................................................48
II. Install Ubuntu on Windows: ...............................................................................48
III. Some basic commands in Linux..........................................................................51
B. INSTALL QUARTUS 13.0SP1 ...........................................................................53
APPENDIX 2: DIGITAL CIRCUIT DESIGN FLOW USING
SYSTEMVERILOG ................................................................................................................. 54
A. DESIGN FLOW ...................................................................................................54
B. COMBINATIONAL LOGIC MODELING ......................................................55
I. Problem:................................................................................................................55

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 1
II. Design: ...................................................................................................................55
C. SEQUENTIAL LOGIC/FSM MODELING ......................................................69
I. Problem:................................................................................................................69
II. Problem analysis: .................................................................................................69
III. Design: ...................................................................................................................70

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 2
ABOUT THE MANUAL

This document is intended to serve as a lab manual for students enrolled in Introduction to
Computing Lab at HCMC University of Technology. All the Lab Experiment is designed for students
to:

- Implement combinational and sequential systems on testboard, using digital ICs.


- Implement digital systems on FPGA, using SystemVerilog.

There are 4 labs:

Lab 1 – Implementation of Boolean function on breadboard with Logic Gates and Functional ICs.

Lab 2 – Implementation of Boolean function on FPGA with Logic Gates and Functional Digital ICs.

Lab 3 – Implement Arithmetic Circuits and Sequential Circuit on breadboard.

Lab 4 – Implement Arithmetic Circuits and Sequential Circuit on FPGA.

In order to complete the lab on time, all students are required to do prelabs before each class.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 1
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

LAB 1: IMPLEMENTATION OF BOOLEAN


FUNCTION ON BREADBOARD WITH
LOGIC GATES AND FUNCTIONAL ICS
Student’s name: Class:
Student ID: Date:

A. PRELAB
I. IMPLEMENTATION OF DIGITAL CIRCUIT ON BREADBOARD
Breadboard is the component on which the circuits can be set up and external experiments can
be done. The information about usage is given in Figure 1.1 .

Figure 1.1: Breadboard connections


❖ Remember these points when implement digital circuits on breadboard:

- Inserting a DIP – Dual Inline Package:

Before you insert a DIP into the breadboard, make sure all pins are straight. When you insert
a DIP in the breadboard, make sure that the pins on one side of the DIP are not connected to
the pins on the other side of the DIP. This means that the DIP must straddle one of the long
gaps that divide the breadboard into separate sections.
- Providing access to the DIP:

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 2
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

As you wire your circuit, be sure to leave yourself easy access to the DIP's pins so that you can
touch them with a probe and so that you can replace the DIP without disconnecting any wires.
In particular:
 Never pass a wire over a DIP. Instead, route the wires around the DIP.
 When you run wires to a DIP, use the breadboard holes farther away from the DIP before
you use the holes that are closer.

- Removing a DIP:

Do not use your fingers to remove a DIP from the breadboard. It's too easy for your fingers to
slip, causing the DIP to twist. This results in bent pins. Instead, use a chip puller to gently pull
the chip up from the board.
- Input and output connections:

There are two logic levels of input data: HIGH (1) level and LOW (0) level. In this course,
almost digital ICs are TTL, in which HIGH level and LOW level are prescribed as below:
Input: the signal is called HIGH when the voltage is between 2V and 5V, and LOW when
the voltage is from 0 to 0.8V.
Output: the signal is called HIGH when the voltage is between 2.7V and 5V, and LOW
when the voltage is from 0 to 0.5V.
We usually apply 5V to implement HIGH level signal and 0V for LOW level signal.
In this lab, DIP switches are used to supply input signal. Several ways of input connections are
shown in Figure 1.2; resistors in these circuits are usually chosen 10 Kohm. It is recommended
that students implement input circuit as in Figure 1.2 (c), in which the signal equal 1 when the
switch is at upper position and vice versa.

(a) (b) (c)

Figure 1.2: Input connections

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 3
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

Outputs are commonly displayed in LEDs, bar-LEDs, 7-segment LEDs,… Figure 1.3 shows
how to connect the output to LED; LEDs in the left circuit will be on when the signal is 1 while
level 1 signal turn off the lights in the right circuit. Resistors in output circuits are usually
chosen 1 Kohm.

Figure 1.3: Output connections

Example: Implement function 𝑓 (𝑎, 𝑏) = 𝑎 + 𝑏.


- Inputs: a,b. - Outputs: f. - ICs : 74HC32.

Figure 1.4: Implementation of Boolean function F(a,b) = a + b

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 4
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

Figure 1.5: Implementation of Boolean function F(a,b) = a + b – application circuit.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 5
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

II. QUESTIONS:
1. What is numbering principle in DIP IC?

2. Identify X, Y, Z, W in four circuits below:

3. If f1,f2,f3,f4 are respectively 0,1,1,0. Indentify status of each LEDs in below figure.

4. Hoàn thành bảng sau (xem datasheet của chúng)

IC Definition Pins

74LS00 4 cổng NAND 14-VCC; 7-GND; 3 = 1 nand 2; 6 = 4 nand 5; …….

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 6
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

74LS02
74LS04
74LS08
74LS32
74LS86
74LS125
74LS126
74LS138
74LS151

5. Compare IC 74LS125 and IC 74LS126. Explain the difference between these 2 ICs.

6. Implement boolean function 𝑓(𝑥, 𝑦, 𝑧) = 𝑥̅ . 𝑦 + 𝑦̅𝑧:


ICs and quantity:

Circuit implementation (remember to note pin numbers on ICs)

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 7
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

7. Implement boolean function 𝑓(𝑥, 𝑦, 𝑧) = 𝑥̅ . 𝑦 + 𝑦̅𝑧 using NAND2 gates (2-input NAND
gates).
Convert the function using NAND equivalents:

Circuit implementation (remember to note pin numbers on ICs)

8. Implement Boolean function 𝑓(𝑥, 𝑦, 𝑧) = m1 + m3 + m6 (z is LSB):

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 8
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

Write F in SOP form:

List all ICs used to implement the circuit:

Circuit implementation (remember to note pin numbers on ICs)

9. Implement boolean function 𝑓(𝑥, 𝑦, 𝑧) = m1 + m3 + m6, using NOR2 gates (2-input NOR
gates)
Convert the function using NOR equivalents:

Circuit implementation (remember to note pin numbers on ICs)

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 9
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

10. Given following circuit:

Write 𝑓(𝑥, 𝑦, 𝑧) expression in SOP

Circuit implementation (remember to note pin numbers on ICs)

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 10
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

11. Implement 𝑓(𝑥, 𝑦, 𝑧) = ∑(2,3,5,7) using IC 74LS151:


Draw the circuit that implement F using IC 74LS151 and logic gates:

Circuit implementation (remember to note pin numbers on ICs).

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 11
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

12. Implement 𝑓(𝑥, 𝑦, 𝑧) = ∑(0,3,4,7) using 74LS138:


Draw the circuit that implement F using IC 74LS138 and logic gates:

Circuit implementation (remember to note pin numbers on ICs).

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 12
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

B. LAB MANUAL:
I. OBJECTIVES:
- Getting familiar with TTL 74LS series IC.
- Implementation of simplified Boolean functions with different logic gate combinations.
- Getting to know functional combinational ICs.
II. LAB PREPARATION:

Students have to complete Prelab before class. Students without lab preparation won’t be
allowed to join in the class.
III. LAB INSTRUCTION:

EXPERIMENT 1
Objectives: Implementation of a function math 𝑓(𝑥, 𝑦, 𝑧) = 𝑥̅ . 𝑦 + 𝑦̅𝑧 in AND – OR form.
Equipments:
- Analog Discovery Studio
- Integrated Circuits (ICs) : 74LS04, 74LS08, 74LS32
- Connection wires.
Procedure:
- Construct the circuit and apply the power (remember to note pin numbers on ICs).
- Apply all possible combinations to the inputs; obtain the output values then take note of
the output fTest in the Table 1.1.

x y z f fTest fnand
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Table 1.1

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 13
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

Student’s implementation on breadboard:

➢ Draw the schematic that implement F using NAND equipvalents.

NAND equipvalent circuit – application circuit.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 14
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

- Construct the circuit and apply the power (remember to note pin numbers on ICs).
- Apply all possible combinations to the inputs and obtain and take note of the outputs
fNAND in the Table 1.1

Student’s implementation on breadboard

EXPERIMENT 2
Objectives: Implementation of a boolean function given in the truth table (Figure 1.2).
Equipments:
- Analog Discovery Studio
- Integrated Circuits (ICs) : 74LS04, 74LS08, 74LS32
- Connection wires.
Procedure:

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 15
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

- Construct the circuit and apply the power (remember to note pin numbers on ICs).
- Apply all possible combinations to the inputs; obtain the output values then take note of
the output fTest in the Table 1.2.
- Write the Boolean expression: F =

x y z f fTest fnor
0x 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0
Table 1.2

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 16
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

Student’s implementation on breadboard

➢ Draw the schematic that implement F using NOR equipvalents.

NOR equipvalent circuit – application circuit.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 17
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

- Construct the circuit and apply the power (remember to note pin numbers on ICs).
- Apply all possible combinations to the inputs; obtain the output value then take note of
the outputs fNOR in the Table 1.2.

Student’s implementation on breadboard

EXPERIMENT 3
Objectives: Implementation of a boolean function given in the following schematic.

Figure 1.6

Equipments:
- Analog Discovery Studio
- Integrated Circuits (ICs) : 74LS04, 74LS08, 74LS32, 74LS86.
- Connection wires.
Procedure:
- Construct the circuit and apply the power (remember to note pin numbers on ICs).
- Apply all possible combinations to the inputs; obtain the output value then take note of the
outputs F1 in the Table 1.3.

x y z F1 F2

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 18
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Table 1.3

Student’s implementation on breadboard

➢ Optimize boolean function F1 and draw the schematic: F2 =

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 19
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

- Construct the circuit and apply the power (remember to note IC codes and their pin numbers).
- Apply all possible combinations to the input; obtain the output value then take note of the
outputs F2 in the Table 1.3.

Student’s implementation on breadboard

➢ Give your comments on F1 and F2 results:

EXPERIMENT 4
Objectives: Implementation of a Boolean function 𝑓 (𝑥, 𝑦, 𝑧) = ∑(2,3,5,7) by using a 8x1
Multiplexer.
Connection diagram and function table:

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 20
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

Equipments:
- Analog Discovery Studio
- Integrated Circuits (ICs): 74LS151, 74LS04.
- Connection wires.
Procedure:
Draw the schematic diagram to implement the boolean function using 74LS151.

Application cicruit

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 21
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

- Construct the circuit and apply the power (remember to note IC pin numbers).
- Apply all possible combinations to the inputs and obtain and take note of the outputs FTest in
the Table 1.4.

x y z f fTest
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Table 1.4

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 22
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

Student’s implementation on breadboard

EXPERIMENT 5
Objectives: Implementation of a Boolean function (𝑥, 𝑦, 𝑧) = ∑(2,3,5,7) by using a 3x8
Decoder.
Equipments: x y z f fTest
- Analog Discovery Studio 0 0 0
- Integrated Circuits (ICs): 74LS138, and other logic 0 0 1
gates. 0 1 0
- Connection wires.
0 1 1
Connection diagram and function table: 1 0 0
1 0 1
1 1 0
1 1 1
Table 1.5

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 23
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

Procedure:
Draw the schematic diagram to implement the boolean function using 74LS138.

Application cicruit

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 24
Lab 1: Implementation of Boolean function on breadboard with logic gates and functional ICs

- Construct the circuit and apply the power (remember to note IC pin numbers).
- Apply all possible combinations to the inputs and obtain and take note of the outputs FTest in
the Table 1.5.
Student’s implementation on breadboard

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 25
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

LAB 2: IMPLEMENTATION OF BASIC LOGIC


GATES AND FUNCTIONAL ICs ON FPGA
Họ và tên: Lớp TN:
MSSV: Ngày:

A. PRELAB
In Lab 2, the project use the LEDR, LEDG, and SW as peripherals. Below are the basic
headers code of these peripherals when students synthesize a project on Intel Quartus. (Note:
Import file DE2_pin_list/assignment).

Note, the top-level file of the project must be named the name of the header file, for example
"lab2tn1_wrapper", with the module "lab2tn1" being the module containing the code
describing the design of experiment 1.

Ex: The experiment of writing hardware design in SystemVerilog language for the function
𝑓 (𝑥, 𝑦, 𝑧) = x̅𝑦𝑧 as experiment 1 of lab 2, we have the following SystemVerilog code:

Figure 2.1: Implementation of 𝑓(𝑥, 𝑦, 𝑧) = 𝑥̅ 𝑦𝑧 – module “lab2tn1”

Below is top level “lab2tn1_wrapper” that implement 𝑓 (𝑥, 𝑦, 𝑧) = x̅𝑦𝑧:

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 26
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

Figure 2.2: Implementation of 𝑓(𝑥, 𝑦, 𝑧) = 𝑥̅ 𝑦𝑧 – module “lab2tn1_wrapper”

Next, students perform the simulation, and load the Kit as instructed at Lab 0.
For the experiments that require the use of IC 74LS151/74LS138, students write the code
describing this IC and call that module as above.
PREPARATION 1
Objective: Implementation of Boolean function 𝑓 (𝑥, 𝑦, 𝑧) = 𝑥̅ 𝑦𝑧 + 𝑥𝑦
̅̅̅𝑧 + 𝑥𝑦 on FPGA DE2.
Procedure:
● Construct the truth table of 𝑓 (𝑥, 𝑦, 𝑧) = 𝑥̅ 𝑦𝑧 + 𝑥𝑦
̅̅̅𝑧 + 𝑥𝑦
● Write the SystemVerilog code that describe 𝑓(𝑥, 𝑦, 𝑧) = 𝑥̅ 𝑦𝑧 + 𝑥𝑦
̅̅̅𝑧 + 𝑥𝑦s
instructed in lab 0 with the following pin assignment:
○ Pins x, y, z assigned to SW2, SW1, SW0 and LEDR2, LEDR1, LEDR0
respectively.
○ Pin f assigned to LEDG0.
● Compile and simulate the project. The output waveform have to show all possible input
combinations. Capture the output waveform.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 27
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

Truth table SystemVerilog code

Waveform:

PREPARATION 2
Objectives: Write SystemVerilog code to X Y Z F Fsim FKit
describe the truth table in Table 2.1. 0 0 0 1
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 0
1 1 0 0
1 1 1 1
Table 2.1

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 28
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

Procedure:
● Write the SystemVerilog code that describe the digital circuit in Figure 2.3 with the
following pin assignment:
○ Pins x, y, z assigned to SW2, SW1, SW0 and LEDR2, LEDR1, LEDR0
respectively.
○ Pin f assigned to LEDG0.
● Compile and simulate the project. The output waveform have to show all possible input
combinations. Capture the output waveform.

Truth table SystemVerilog code

Waveform:

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 29
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

PREPARATION 3
Objective: Write SystemVerilog code to describe the digital circuit in Figure 2.3.

Figure 2.3

Procedure:
● Write the SystemVerilog code that describe the digital circuit in Figure 2.3 with the
following pin assignment:
○ Pins x, y, z assigned to SW2, SW1, SW0 and LEDR2, LEDR1, LEDR0
respectively.
○ Pin f assigned to LEDG0.
● Compile and simulate the project. The output waveform have to show all possible input
combinations. Capture the output waveform.

Truth table SystemVerilog code

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 30
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

Waveform:

PREPARATION 4
Objective: Write SystemVerilog code to describe IC Multiplexer 74LS151. Implement
function 𝑓 (𝑥, 𝑦, 𝑧) = ∑(1,2,4,7) using that multiplexer.
Procedure:
● Write SystemVerilog code describe IC multiplexer 74LS151 operation.
● Using above multiplexer, write SytemVerilog code implementing Boolean function
𝑓 (𝑥, 𝑦, 𝑧) = ∑(1,2,4,7):
○ Pins x, y, z assigned to SW2, SW1, SW0 and LEDR2, LEDR1, LEDR0
respectively
○ Pin f assigned to LEDG0
○ Call IC 74LS151 as a submodule.
● Compile and simulate the project. The output waveform have to show all possible input
combinations. Capture the output waveform.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 31
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

Truth table SystemVerilog code

Waveform:

PREPARATION 5
Objective: Write SystemVerilog code to describe IC Decoder 74LS138. Implement function
𝑓 (𝑥, 𝑦, 𝑧) = ∑(0,2,5,7) using that decoder.
Procedure:
● Write SystemVerilog code describe IC decoder 74LS138 operation.
● Using above decoder, write SytemVerilog code implementing Boolean function
𝑓 (𝑥, 𝑦, 𝑧) = ∑(0,2,5,7):

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 32
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

○ Pins x, y, z assigned to SW2, SW1, SW0 and LEDR2, LEDR1, LEDR0


respectively
○ Pin f assigned to LEDG0
○ Call IC 74LS138 as a submodule.
● Compile and simulate the project. The output waveform have to show all possible input
combinations. Capture the output waveform.

Truth table SystemVerilog code

Waveform:

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 33
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

B. LAB MANUAL:

I. OBJECTIVES:

- Understand how to use FPGA kits, programming software .


- Understand how to design a basic functional ICs on FPGA
- Understand the process of describing hardware on FPGAs.

II. LAB PREPARATION:

- To prepare well for the test, students MUST read Appendix 1 first and complete the
steps of Sample lab in Appendix 2, and submit it with Prelab 2 before entering class.
- Students must complete and submit Prelab 2 before entering class.
- Students read the appendix and the Kit DE2 Manual to understand how to use the DE2
Kit, wiring, peripherals, and how to use Quartus software to simulate and synthesize
circuits. Students refer to the documentation to understand how to write hardware
designs in the SystemVerilog language.

III. LAB INSTRUCTIONS:

EXPERIMENT 1
Objectives: Implementation of a function math 𝑓(𝑥, 𝑦, 𝑧) = 𝑥̅ . 𝑦 + 𝑦̅𝑧 on DE 2 kit.
Procedure:
x y z f fSim fKit
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Table 2.2

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 34
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

➢ Apply all possible combinations to the inputs and take note the outputs in the f column
of Table 2.2.

➢ Draw the logic diagram of F:

➢ Write the SystemVerilog describe the operation of 𝑓 (𝑥, 𝑦, 𝑧) = 𝑥̅ 𝑦𝑧 + ̅̅̅𝑧


𝑥𝑦 + 𝑥𝑦 with
the pin assignment as follows:
o Pins x, y, z assigned to SW2, SW1, SW0 and LEDR2, LEDR1, LEDR0
respectively.
o Pin f assigned to LEDG0.

➢ Synthesize the SystemVerilog design and take note the output in the fsim column in
Table 2.2.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 35
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

(Insert a photo demonstrating simulation results)

➢ Students view the result of the circuit (Tool → Netlist Viewer → RTL Viewer). Is this
result similar to the logic gate diagram drawn above? Exlain.

(RTL viewer result)

➢ Download the code to DE2 Kit. Does the design perform exactly as required? Take
note the results in f Kit column of Table 2.2

(Project demonstration on DE2 kit)

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 36
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

EXPERIMENT 2
Objectives: Implementation of a boolean function given in the truth table on DE 2 kit.

X Y Z F Fsim FKit

0 0 0 1

0 0 1 1

0 1 0 0

0 1 1 1

1 0 0 1

1 0 1 0

1 1 0 0

1 1 1 1
Table 2.3

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 37
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

Procedure:
➢ Write the Boolean expression of f (x, y, z):

➢ Draw the logic diagram of f:

➢ Write the SystemVerilog describe the operation of 𝑓 (𝑥, 𝑦, 𝑧) with the pin assignment
as follows:
o Pins x, y, z assigned to SW2, SW1, SW0 and LEDR2, LEDR1, LEDR0
respectively.
o Pin f assigned to LEDG0.

➢ Synthesize the SystemVerilog design and take note the output in the fsim column in
Table 2.3.

(Insert a photo demonstrating simulation results)

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 38
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

➢ Students view the result of the circuit (Tool → Netlist Viewer → RTL Viewer). Is this
result similar to the logic gate diagram drawn above? Exlain.

(RTL viewer result)

➢ Download the code to DE2 Kit. Does the design perform exactly as required? Take
note the results in f Kit column of Table 2.3.

(Project demonstration on DE2 kit)

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 39
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

EXPERIMENT 3
Objectives: Implementation of a boolean function given in the following schematic.
X Y Z Fsim FKit
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Figure 2.4 Table 2.4

Procedure:

➢ Write the SystemVerilog describe the operation of 𝑓 (𝑥, 𝑦, 𝑧) with the pin assignment
as follows:
o Pins x, y, z assigned to SW2, SW1, SW0 and LEDR2, LEDR1, LEDR0
respectively.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 40
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

o Pin f assigned to LEDG0.


➢ Synthesize the SystemVerilog design and take note the output in the fsim column in
Table 2.4.

(Insert a photo demonstrating simulation results)

➢ Students view the result of the circuit (Tool → Netlist Viewer → RTL Viewer). Is this
result similar to the logic gate diagram drawn above? Exlain.

(RTL viewer result)

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 41
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

➢ Download the code to DE2 Kit. Does the design perform exactly as required? Take
note the results in f Kit column of Table 2.4.

(Project demonstration on DE2 kit)

EXPERIMENT 4
Objectives: Write SystemVerilog code to describe IC x y z f fsim fKit
Multiplexer 74LS151. 0 0 0
Implement function 𝑓 (𝑥, 𝑦, 𝑧) = ∑(1,2,4,7) using that 0 0 1
multiplexer. 0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Table 2.5

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 42
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

Procedure:
➢ Draw the circuit that implement f(x,y,z) using 74LS151.

➢ Write SystemVerilog code describe IC multiplexer 74LS151 operation.


➢ Using above multiplexer, write SytemVerilog code implementing Boolean function
𝑓 (𝑥, 𝑦, 𝑧) = ∑(1,2,4,7):
o Pins x, y, z assigned to SW2, SW1, SW0 and LEDR2, LEDR1, LEDR0
respectively
o Pin f assigned to LEDG0
o Call IC 74LS151 as a submodule.
➢ Synthesize the SystemVerilog design and take note the output in the fsim column in

Table 2.5. (Insert a photo demonstrating simulation results)

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 43
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

➢ Students view the result of the circuit (Tool → Netlist Viewer → RTL Viewer). Is this
result similar to the logic gate diagram drawn above? Exlain.

(RTL viewer result)

➢ Download the code to DE2 Kit. Does the design perform exactly as required? Take
note the results in f Kit column of Table 2.5.

(Project demonstration on DE2 kit)

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 44
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

EXPERIMENT 5
Objectives: Write SystemVerilog code to describe IC x y z f fsim fKit
Decoder 74LS138. 0 0 0
Implement function 𝑓 (𝑥, 𝑦, 𝑧) = ∑(0,2,5,7) using that 0 0 1
decoder. 0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Table 2.6

Procedure:
➢ Draw the circuit that implement f(x,y,z) using 74LS138.

➢ Write SystemVerilog code describe IC decoder 74LS138 operation.


➢ Using above multiplexer, write SytemVerilog code implementing Boolean function
𝑓 (𝑥, 𝑦, 𝑧) = ∑(0,2,5,7):
o Pins x, y, z assigned to SW2, SW1, SW0 and LEDR2, LEDR1, LEDR0
respectively
o Pin f assigned to LEDG0
o Call IC 74LS138 as a submodule.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 45
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

➢ Synthesize the SystemVerilog design and take note the output in the fsim column in

Table 2.5. (Insert a photo demonstrating simulation results)

➢ Students view the result of the circuit (Tool → Netlist Viewer → RTL Viewer). Is this
result similar to the logic gate diagram drawn above? Exlain.

(RTL viewer result)

➢ Download the code to DE2 Kit. Does the design perform exactly as required? Take
note the results in f Kit column of Table 2.5.

(Project demonstration on DE2 kit)

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 46
Lab 2: Implementation of Boolean function with logic gates and functional ICs on FPGA

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 47
Appendix 1: Quartus and Ubuntu Installation on Windows.

APPENDIX 1: QUARTUS AND UBUNTU


INSTALLATION ON WINDOWS
A. UBUNTU INSTALLATION ON WINDOWS:
I. Download and install Xming and WSL2:

Download and install Xming:


Xming is X Server on Windows operating system, used to run Linux applications on
Windows.
Xming download link: https://sourceforge.net/projects/xming/
Download WSL2 Kernel: (only do this step if the computer uses Windows 11 operating
system)
WSL2 Kernel is a tool that allows users to run Linux in Windows.
Link download:
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

II. Install Ubuntu on Windows:

Step 1: Turn on Windows Subsystem for Linux

- Open Control Panel ➔Programs and


Features ➔“Turn Windows features
on or off”.
- Select “Windows Subsystem for
Linux, Virtual Machine Platform”
- For Windows 11, install WSL2
Kernel.
- Restart Windows.

Figure Appendix 1.1 “Turn Windows features on or off”

Step 2: Open Windows Store Find and Install Ubuntu 22.04.1 LTS

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 48
Appendix 1: Quartus and Ubuntu Installation on Windows.

Figure Appendix 1.2 Windows Store


Figure Appendix 1.3 Starting Ubuntu

- Boot Ubuntu 22.04.1 LTS


- Set Username and Password. Note: the password will NOT be displayed on the
screen.

Figure Appendix 1.4 Setting UNIX username and password

- Determine the working directory of Ubuntu in Windows:enter command cd ~;


explorer.exe . .In the home directory , find a folder named username set; Right
click on this folder, select Pin to Quick Access . All files and folders created in
Ubuntu are stored in the username folder.

Bước 3: Download the following file (install203.tar) and save it in a folder named username set:
https://drive.google.com/file/d/1F2aKS83WR8D6xWmu1k4xSWetmcbcmeue/view?usp=shar
ing

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 49
Appendix 1: Quartus and Ubuntu Installation on Windows.

Figure Appendix 1.5 Position of “install203” folder

Test: After completing the above steps, when booting Ubuntu ➔ type “ ls ” (list the files in
the directory) ➔ the install203.tar file appears.

Install the install203.tar file :

Open Ubuntu 22.04.1 LTS and run the following command:

$ sudo apt -y install make


$ chmod 755 install203.tar
$ tar xvf install203.tar
$ cd install203/
$ make

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 50
Appendix 1: Quartus and Ubuntu Installation on Windows.

III. Some basic commands in Linux

In the Ubuntu terminal, in front of the $ Displays the name of the current directory.

Figure Appendix 1.6 Terminal Ubuntu

Some basic commands:

ls List (list) files in the directory


tree Similar to ls as in a directory tree
mkdir abc Make directory (create directory) name “ abc ”
cd abc Change directory (go to directory) abc
cd .. Change directory to previous directory
micro file1.sv Tạo/soạn thảo file tên “file1.sv” bằng micro
cp file1.sv file2.sv Copy file1.sv to the current directory and name it file2.sv
cp file1.sv abc/ Copy file1.sv to folder abc
cp file1.sv abc/file3.sv Copy file1.sv to abc folder and name it file3.sv
mv file1.sv file0.sv Move file1.sv to file0.sv (rename)
mv file0.sv abc/ Move file0.sv to folder abc
mv abc/file3.sv . Move file3.sv in directory abc to current directory
cp -r abc/ xyz/ Copy directory abc và đặt tên là xyz
pwd Indicate current directory path
rm file1.sv Remove (delete) file1.sv
rm file2.sv xyz/file1.sv Remove (delete) file2.sv and file1.sv in folder xyz
rm -rf xyz Remove directory xyz

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 51
Appendix 1: Quartus and Ubuntu Installation on Windows.

You should type these commands in the above order, each time you enter, remember to enter
ls or tree , and pwd to understand how it works.
Micro : Alt+G for keyboard shortcuts, for example “^S Save” means to Save, press Ctrl+S..

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 52
Appendix 1: Quartus and Ubuntu Installation on Windows.

B. INSTALL QUARTUS 13.0SP1


Step 1: Download and install Quartus 13.0sp1.
Download link: https://www.intel.com/content/www/us/en/software-kit/711791/intel-quartus-
ii-web-edition-design-software-version-13-0sp1-for-windows.html
Unzip the installation file. Right click the Setup file ➔ select Run as Administrator .
Choose the installation address as C:\altera .
Note: When installing Quartus, select components : select Cyclone devices to communicate
with DE2 and DE10 kit.
Step 2: Install the communication driver with the FPGA kit
- USB connection between the FPGA kit and the computer. Power supply to the
FPGA kit.
- Open Control Panel ➔Device Manager ➔Other devices, right click USB-Blaster
➔select Update Driver ➔Browse for drivers on your computer ➔select the path
to the folder containing the USB – Blaster.

Figure Appendix 1.7 Installing the USB driver – Blaster

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 53
Appendix 2: Sample lab.

APPENDIX 2: DIGITAL CIRCUIT DESIGN FLOW


USING SYSTEMVERILOG

A. DESIGN FLOW

Figure Appendix 2.1 Digital design flow using SystemVerilog

1. RTL Coding: Algorithm design, FSM,... to solve the set requirements, the design
language here is SystemVerilog HDL.
2. Lint Check: Checks for syntax/syntax errors or coding practices that may cause errors
or bugs. Lint needs to be run after writing the code. Note, Lint Check is a static code
checking process - ie the code will not be run, so the correctness and operation of the
code will not be checked.
→ If Lint Check gives an error, need to read the error to know what is the error, in
which line → Correct the code
3. Verification: Check the operation of the code - based on the design requirements, for
this input, the code is expected to give the output. This is the process of checking the
correctness of the code.
→ If Verification has an error, need to read the code to know what is the error, in
which line → Correct the code → Lint Check
4. Implementation: The design after Verification is completed and meets the
requirements, it will be uploaded to the KIT (DE2 or DE10 or other FPGA KIT).

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 54
Appendix 2: Sample lab.

B. COMBINATIONAL LOGIC MODELING


I. Problem:

Design the following combinational circuit


Inputs:
data0, data1 : 3 bit
sel : 2 bit
Outputs:
result : 3 bit

Operation:
sel result
0 0 0
0 1 data0 & data1
1 0 data0 | data1
1 1 data0 ^ data1

II. Design:

Create Project
At ~ ( cd ~ if necessary), create directory projects , in it create directory lab0 , in lab0
get the template on GitHub to use, name it ex01 .

gettemplate ex01
Type ls to see the files and directories in the current directory, or tree if you want to see the
directory tree.

$ tree
.
└── ex01
├── filelist
├── makefile
├── quartus
│ ├── de10_pin_assign.qsf
│ └── de2_pin_assign.qsf
└── test
├── driver.cpp
└── tb_top.cpp

3 directories, 6 files

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 55
Appendix 2: Sample lab.

A project should be neatly organized as follows:


• Go to ex01 : (cd ex01 )and create directory src : mkdir src
• All design .sv files need to be placed in the src directory .
• Edit: create file or edit file (if file already exists) type: micro <filename>
• Design files need to be declared in the filelist.

Figure Appendix 2.2 Create project

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 56
Appendix 2: Sample lab.

Code
Create a design file named design_1.sv and place it in src.
micro src/design_1.sv hoặc cd src rồi micro design_1.sv

src/design_1.sv

1 module design_1 (
2 // input
3 input logic [2:0] data0_i,
4 input logic [2:0] data1_i,
5 input logic [1:0] sel_i,
6
7 // output
8 output logic [2:0] result_o
9 );
10
11 // local declaration
12 logic [2:0] and_tmp; // temporary for and result
13 logic [1:0] or_tmp; // temporary for or result
14 logic [2:0] xor_tmp; // temporary for xor result
15
16 assign and_tmp = data0_i & data1_i;
17 assign or_tmp = data0_i | data1_i;
18 assign xor_tmp = data0_i ~^ data1_i;
19
20 always_comb begin : proc_mux
21 case (sel_i)
22 2'b00: result_o = '0;
23 2'b01: result_o = and_tnp;
24 2'b11: result_o = or_tmp;
25 2'b11: result_o = xor_tmp;
26 endcase
27 end
28
29 endmodule : design_1

At ex01, open and add the filename to the filelist . Enter micro filelist or if in src
then go to ex01 by typing cd ..

filelist

1 src/design_1.sv

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 57
Appendix 2: Sample lab.

Lint Check
Step 1: Run Lint Check to check for errors, type make lint.

$ make lint
------------------> LINT CHECK <------------------
%Error: src/design_1.sv:23:25: Can't find definition of variable: 'and_tnp'
: ... Suggested alternative: 'and_tmp'
23 | 2'b01: result_o = and_tnp;
| ^~~~~~~
%Error: Exiting due to 1 error(s)
make: *** [makefile:50: lint] Error 1
$
Bước 2: Analysis and debugging

After running Lint, the above code has a bug on line 23, and_tnp could not be found
because it was mistyped here and declared as and_tmp . Correct line 23, repeat Step 1 , make
lint.

$ make lint
------------------> LINT CHECK <------------------
%Warning-WIDTH: src/design_1.sv:17:18: Operator ASSIGNW expects 2 bits on the Assign
RHS, but Assign RHS's OR generates 3 bits.
: ... In instance design_1
17 | assign or_tmp = data0_i | data1_i;
| ^
... For warning description see
https://verilator.org/warn/WIDTH?v=4.225
... Use "/* verilator lint_off WIDTH */" and lint_on around source to
disable this message.
%Warning-WIDTH: src/design_1.sv:24:23: Operator ASSIGN expects 3 bits on the Assign
RHS, but Assign RHS's VARREF 'or_tmp' generates 2 bits.
: ... In instance design_1
24 | 2'b11: result_o = or_tmp;
| ^
%Warning-CASEOVERLAP: src/design_1.sv:25:7: Case values overlap (example pattern 0x3)
25 | 2'b11: result_o = xor_tmp;
| ^~~~~
%Warning-CASEINCOMPLETE: src/design_1.sv:21:5: Case values incompletely covered
(example pattern 0x2)
21 | case (sel_i)
| ^~~~
%Error: Exiting due to 4 warning(s)
make: *** [makefile:50: lint] Error 1
$

Analysis and debugging:

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 58
Appendix 2: Sample lab.

1. The first error, %Warning-WIDTH: src/design_1.sv:17 → error about bit length


mismatch, further reading we see that or_tmp is 2 bits but the RHS (Right Hand Side -
right) result is 3 bits, this is because the declaration of or_tmp is 2 bits ( [1:0]). → Fix
or_tmp declaration line (line 12) to 3 bits: [2:0]

2. The next error on line 24 is similar.

3. Error on line 25, %Warning-CASEOVERLAP: src/design_1.sv:25 → error about


duplicate value compare case. Reviewing the code, there are 2 cases 2'b11.

4. Error on line 21, %Warning-CASEINCOMPLETE: src/design_1.sv:21 → error about

missing case comparison. This error is caused by the missing 2'b10 instance .
So error lines 21 and 25 are related, fix line 24 to 2'b10.

Bước 3: Sau khi debug, lặp lại Bước 1, make lint.

$ make lint
------------------> LINT CHECK <------------------
$
No errors, the next step is Verification.

Verification
Set Up: To verify the above design, it is necessary to create a driver to drive the input and set
the condition in the output corresponding to the specific input.
Input values, aka test transactions, are generated randomly, so we don't know exactly what
inputs are being fed into and pre-compute the outputs for comparison. In addition, manual
calculation that way, for large design with thousands of test samples, will be difficult for the
designer, so have to check the output automatically, here using assertions to check.
Bước 1: Create file top.sv in directory ex01 , call file design_1.sv.

1. Declare input and output as in design_1 , add clock. Each clock pulse is a test
transaction.
top.sv

1 module top (
2 // input
3 input logic clk_i,
4 input logic [2:0] data0_i,
5 input logic [2:0] data1_i,
6 input logic [1:0] sel_i ,

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 59
Appendix 2: Sample lab.

7 // output
8 output logic [2:0] result_o
9 );
10

2. Call the design_1 module. Note, after the dot is the port name of the design, in the
brackets is the signal/data name connected to that port.
top.sv

11 design_1 dut (
12 .data0_i (data0_i ),
13 .data1_i (data1_i ),
14 .sel_i (sel_i ),
15 .result_o(result_o)
16 );
17

3. Set the condition for the output. Use the assert keyword to constrain the output like
the code below as required by the design, for example, if sel = 2'b11 , then the result
must be equal to xor two data, otherwise the simulation will fail because the design is
not satisfactory. assertion case. Here there is a total of 4 conditions with 4 sel values.
top.sv

18 always @(posedge clk_i) begin : proc_assertions


19 if (sel_i == 2'b00)
20 assert (result_o == '0);
21 if (sel_i == 2'b01)
22 assert (result_o == (data0_i & data1_i));
23 if (sel_i == 2'b10)
24 assert (result_o == (data0_i | data1_i));
25 if (sel_i == 2'b11)
26 assert (result_o == (data0_i ^ data1_i));
27 end
28
29 endmodule : top

Step 2: Create driver to drive input randomly (easier to detect bugs than preset input and check
output, because output output only needs to be constrained to check correctness)

1. Create file driver.cpp in test : micro test/driver.cpp or cd test then micro


driver.cpp

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 60
Appendix 2: Sample lab.

test/driver.cpp

1 #define MAX_SIM 20
2
3 void set_random(Vtop *dut, vluint64_t sim_unit) {
4 dut->data0_i = rand()%8;
5 dut->data1_i = rand()%8;
6 dut->sel_i = rand()%4;
7 }
2. Note 1: the input includes data0_i, data1_i, and sel_i, but needing to be in the form
dut->data0_i, … clk_i is always automatically given, so top.sv should always
have the logical input clk_i
3. Note 2: this is a C++ file, to generate random, use the function rand() , divide the
remainder by 4 because sel_i only has 2 bits, and data has 3 bits, so divide and divide
by 8. If you want to keep the value fixed, for example data0_i is 3'b101 , just assign
dut->data0_i = 0b101 (C++ assignment).
4. Note 3: MAX_SIM is the number of random samples generated.
Simulating:
Step 1: Run Simulating to check for errors, enter make sim.

$ make sim
-------------------> BUILD <----------------------
...
...
...
-----------------> SIMULATING <-------------------
[0] %Error: top.sv:26: Assertion failed in TOP.top.proc_assertions: 'assert' failed.
%Error: top.sv:26: Verilog $stop
Aborting...
make: *** [makefile:61: sim] Aborted (core dumped)
$
Read the error and see Assertion failed on line 26 of top.sv , check line 26 and see that
this assertion binds the output of sel = 2'b11 , which proves design_1.sv is false when
sel = 2'b11.

Step 2 : Open waveform to observe, enter make wave . Select top → Select all signals in the
lower cell → Select Insert . Output is 001 instead of 110.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 61
Appendix 2: Sample lab.

Figure Appendix 2.3 Kết quả mô phỏng bước Verification

It is possible to open the menu and save the selection of this signal: File → Write Save File

Step 3: Check the design_1.sv code again and observe:

src/design_1.sv

18 assign xor_tmp = data0_i ~^ data1_i;


Bug on line 18 because the math was supposed to be ^ but was ~^ . Edit code.
Step 4 : Repeat Step 1 . Run sim: make sim.

$ make sim
-------------------> BUILD <----------------------
...
...
...
-----------------> SIMULATING <-------------------
$
No error. Repeat Step 2 , observing the waveform: make wave.

$ make wave
-----------------> WAVEFORMS <--------------------

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 62
Appendix 2: Sample lab.

Figure Appendix 2.4 Kết quả mô phỏng sau khi hoàn tất bước Verification

Step 5: Done.

Implementation
Set Up
Step 1: Create wrapper.sv file.
The wrapper file will call design_1 like top.sv , but the input and output will be from the
following file:
https://www.terasic.com.tw/cgi-bin/page/archive.pl?CategoryNo=53&No=30&PartNo=4
(download file DE2_UserManual_1.6 or DE2 Pin Table )
input has data0_i , data1_i , and sel_i , uses switches as input, pin name as shown in table
4.1 in above file. There are 8 bits in total, assign data0_i as SW 2, SW 1, and SW 0, data1_i
as SW 5, SW 4, and SW 3, and sel_i as SW 7 and SW 6. So input will be declared as line 3
and assigned as 3 lines 9, 10, 11.
Output has only result_o and has 3 bits, used as output, table 4.3 in the file above mentions
led. Select red LEDR 2, LEDR 1, and LEDR 0. So the output will be declared as line 5 and
assigned as line 12.

quartus/wrapper.sv

1 module wrapper (
2 // input
3 input logic [7:0] SW,
4 // output
5 output logic [2:0] LEDR
6 );
7
8 design_1 dut (

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 63
Appendix 2: Sample lab.

9 .data0_i (SW[2:0] ),
10 .data1_i (SW[5:3] ),
11 .sel_i (SW[7:6] ),
12 .result_o(LEDR[2:0])
13 );
14
15 endmodule : wrapper

Step 2 : Create a project in Quartus.

1. Open Quartus.
2. Choose File → New Project Wizard.
a. To directory quartus in ex01.

Figure Appendix 2.5 Project directory

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 64
Appendix 2: Sample lab.

b. Name the project wrapper . Since the actual project is the ex01 directory , it
needs to be named exactly like the file name of the file, wrapper.sv.

Figure Appendix 2.6 Directory, Name, Top-Level Entity settings.

c. Next to continue.
3. Select … to get the source code
a. Point to directory wrapper.sv which is quartus, select all files → Open →
Add .
b. Point to the directory containing the source code as src, select all files → Open
→ Add.
c. Make sure the Type column is SystemVerilog HDL File.
d. Next to continue.
4. For DE2
a. Device family selects Cyclone II .
b. Available devices select EP2C35F672C6 .

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 65
Appendix 2: Sample lab.

c. Finish to complete.

Figure Appendix 2.7 Family and device settings.

Step 3: Import pin assignment of DE2.


1. Choose Assignments➔Import Assignments .
2. Select … , point to quartus and select de2_pin_assign.qsf➔Open➔OK.
Step 4: Compilation
Ctrl+L or Processing → Start Compilation

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 66
Appendix 2: Sample lab.

Figure Appendix 2.8 Compilation resultsf

Check the message window has no errors → proceed to upload to KIT.

Programmers

1. Connect the DE2 using the USB cord at the Blaster port

Figure Appendix 2.9 DE2 connection

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 67
Appendix 2: Sample lab.

2. Choose Tools → Programmers

Figure Appendix 2.10 Programmer

3. Check connected: USB-Blaster X, if No Hardware is displayed, click Hardware Setup


and select USB-Blaster X → Close.

4. Select Start to start loading. Check in the box Progress is 100% (successful), ie
successfully loaded.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 68
Appendix 2: Sample lab.

Figure Appendix 2.11 Nạp kit thành công

C. SEQUENTIAL LOGIC/FSM MODELING

I. Problem:

Design a circuit to count the number of button presses, if pressed and held, it is still counted as
a press, and a 7-segment LED display shows the number of presses..
II. Problem analysis:

The system receives input from a push button (when the button is pressed, the system receives
bit 1, otherwise, the system receives bit 0) and displays the output on a 7-segment LED (output
less than or equal to 9). In addition, the sequential system has clock and reset inputs (selective
active low reset). When the push button is pressed, the sequencer receives signal 1 for only 1
cycle.
The circuit includes a counter, the state of the counter increments by 1 when receiving an input
signal of 1. In addition, the system needs a circuit that converts BCD to 7-segment LED,
displays the status of the counter on LED 7. paragraph.
The button block is an FSM (Finite State Machine) with 3 states: IDLE (waiting to receive),
PRESS (when the button is pressed in the first cycle), HOLD (the state is holding the button).

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 69
Appendix 2: Sample lab.

Figure Appendix 2.12 Block diagram

Figure Appendix 2.13 Button block – state diagram

III. Design:

Create Project
Source template from GitHub to use, name it ex02

gettemplate ex02

Code

1. Create a design file named button.sv.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 70
Appendix 2: Sample lab.

src/button.sv

1 module button (
2 // input
3 input logic clk_i,
4 input logic rst_ni,
5
6 input logic button_i,
7
8 // output
9 output logic stable_o
10 );
11
12 // local declaration
13 typedef enum logic [1:0] {
14 IDLE,
15 PRESS,
16 HOLD
17 } state_e;
18
19 state_e state_d;
20 state_e state_q;
21
22 always_comb begin : proc_next_state
23 case (state_q)
24 IDLE: state_d = button_i ? PRESS : IDLE;
25 PRESS: state_d = button_i ? PRESS : IDLE;
26 HOLD: state_d = button_i ? HOLD : IDLE;
27 default: state_d = IDLE;
28 endcase
29 end
30
31 always_ff @(posedge clk_i) begin : proc_state_register
32 if (!rst_ni)
33 state_q <= IDLE;
34 else
35 state_q <= state_d;
36 end
37
38 // output combinational logic
39 assign stable_o = (state_q == PRESS) ? 1'b1 : 1'b0;
40
41 endmodule : button

2. Create a design file named counter.sv.


src/counter.sv

1 module counter (
2 // input
3 input logic clk_i,
4 input logic rst_ni,

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 71
Appendix 2: Sample lab.

5
6 input logic inc_i,
7
8 // output
9 output logic [3:0] counter_o
10 );
11
12 always_ff @(posedge clk_i) begin : proc_counter
13 if (!rst_ni)
14 counter_o <= '0;
15 else begin
16 if ((counter_o < 4'h9) && inc_i)
17 counter_o <= counter_o + 4'h1;
18 end
19 end
20
21 endmodule : counter

3. Create a design file named hexled.sv.


src/hexled.sv

1 module hexled (
2 // input
3 input logic [3:0] data_i,
4
5 // output
6 output logic [6:0] hex_o
7 );
8
9 always_comb begin : proc_7seg_decoder
10 case (data_i)
11 4'h0: hex_o = 7'b100_0000;
12 4'h1: hex_o = 7'b111_1001;
13 4'h2: hex_o = 7'b010_0100;
14 4'h3: hex_o = 7'b011_0000;
15 4'h4: hex_o = 7'b001_1001;
16 4'h5: hex_o = 7'b001_0010;
17 4'h6: hex_o = 7'b000_0010;
18 4'h7: hex_o = 7'b101_1000;
19 4'h8: hex_o = 7'b000_0000;
20 4'h9: hex_o = 7'b001_1000;
21 4'ha: hex_o = 7'b000_1000;
22 4'hb: hex_o = 7'b000_0011;
23 4'hc: hex_o = 7'b100_0110;
24 4'hd: hex_o = 7'b010_0001;
25 4'he: hex_o = 7'b000_0110;
26 4'hf: hex_o = 7'b000_1110;
27 endcase
28 end
29
30 endmodule : hexled

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 72
Appendix 2: Sample lab.

4. Create a design file named design_2.sv.


src/design_2.sv

1 module design_2 (
2 // input
3 input logic clk_i,
4 input logic rst_ni,
5
6 input logic button_i,
7
8 // output
9 output logic [6:0] led_o
10 );
11
12 // local declaration
13 logic inc;
14 logic [3:0] counter;
15
16 button button0 (
17 .clk_i (clk_i ),
18 .rst_ni (rst_ni ),
19 .button_i(button_i),
20 .stable_o(inc )
21 );
22
23 counter counter0 (
24 .clk_i (clk_i ),
25 .rst_ni (rst_ni ),
26 .inc_i (inc ),
27 .counter_o(counter)
28 );
29
30 hexled hexled0 (
31 .data_i(counter),
32 .hex_o (led_o)
33 );
34
35 `ifdef VERILATOR
36 /*verilator lint_off UNUSED*/
37 logic pastvld;
38 always @(posedge clk_i) begin
39 pastvld <= 1'b1;
40
41 if (pastvld && $past(inc))
42 assert(!inc);
43
44 assert(counter <= 4'h9);
45 end
46 /*verilator lint_on UNUSED*/
47 `endif
48
49 endmodule : design_2

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 73
Appendix 2: Sample lab.

Note: in the previous post because the circuit does not have a clock, but the assertion requires a
clock, so you must create assertions in the file top.sv . As for this example, there is clock and
binding outputs including outputs of button and counter , so assertions need to be placed in
design_2.sv , so can set binding for button output - with 1 click driving only output up 1
in 1 cycle, which means the button's output cannot be equal to 1 in 2 consecutive cycles (line
42) – and counter – only counts from 0 to 9 (line 44).
There is an extra signal pastvld, because in order to use $past to get the value at the previous
cycle, that value needs to be valid.
Since the pastvld is the signal for verification, and the asserts too, need to be ignored when
pouring into the KIT, put those lines in the following block:

35 `ifdef VERILATOR
36 /*verilator lint_off UNUSED*/

.. ...

46 /*verilator lint_on UNUSED*/


47 `endif
So, when running Lint Check, the part for this verification will be ignored, and so will when
running Quartus to dump it on KIT.

5. At ex02, open and add the filename in the filelist.


filelist

1 src/button.sv
2 src/counter.sv
3 src/hexled.sv
4 src/design_2.sv

6. At ex02, create a design file named top.sv.


top.sv

1 module top (
2 // input
3 input logic clk_i,
4 input logic rst_ni,
5
6 input logic button_i,
7
8 // output
9 output logic [6:0] led_o
10 );
11
12 design_2 dut (

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 74
Appendix 2: Sample lab.

13 .clk_i (clk_i ),
14 .rst_ni (rst_ni ),
15 .button_i(button_i),
16 .led_o (led_o )
17 );
18
19 endmodule : top

7. Create file driver.cpp in directory test


test/driver.cpp

1 #define MAX_SIM 200


2
3 void set_random(Vtop *dut, vluint64_t sim_unit) {
4 dut->rst_ni = (sim_unit > 4) && (rand()%30 != 0);
5 dut->button_i = (rand()%8 > 2);
6 }

a. Note 1: the input consists of rst_ni and button_i.


b. Because this test needs to run a lot to see the counter counting to 9, it is necessary
to set MAX_SIM to a large value, for example 200.
c. Note 2: dut->button_i = (rand()%8 > 2); the value of button_i will be
the result of rand()%8 , i.e. get a random number from 0 to 7, then compare it
with 2, which means button_i will be equal to 1 when the random number is
divided remainder is 3 to 7, and zero in the other case. Thus, we have the
probability:
P(button_i = 1) = 5/8 = 62.5%, P(button_i = 0) = 3/8 = 37.5%.
This makes the probability of button_i getting 1 of 2 consecutive cycles higher,
or the case of holding down is higher.
d. Note 3: dut->rst_ni = (sim_unit > 4) && (rand()%30 != 0); the value
of rst_ni will be always zero, i.e. reset, when sim_unit <= 4 . sim_unit is
simulating unit, each clock pulse corresponds to 1 sim_unit . Thus, we have a
circuit that will reset for the first 4 cycles, then based on the probability of
(rand()%30 != 0) is 29/30 = 96.7%, or P( rst_ni = 0 ) = 3.3 %. This makes
the probability that rst_ni is positively low, making it easier to count up to 9
(and not count any more)..

Lint Check & Verification


Step 1: Run Lint Check to check for errors, make lint.

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 75
Appendix 2: Sample lab.

Step 2: Run Simulating to verify, make sim →Debug


Step 3: Open waveform to observe the waveform, make wave.

Figure Appendix 2.14 Simulation result

DEBUG: bug at line 25 in button.sv


PRESS : state_d = button_i ? PRESS : IDLE;
→ PRESS : state_d = button_i ? HOLD : IDLE;
Recommended to fix a few more places in the button and counter modules to know when
there is a bug, how to read WARNING and ERROR to be able to debug.
Implementation
Step 1: Create wrapper.sv file.
The KEY push buttons are used to control the button_i, and rst_ni inputs (pin names as shown
in Table 4.2 in the DE2 Manual - see previous example). Assign button_i as KEY 2, rst_ni as
KEY 0. So input will be declared on line 4 and assigned on lines 12 and 13. Since the KEYs on
DE2 kit when not pressed give the value 1, to match the device Next, the button_i input of the
system is NOT of KEY 2, and rst_ni is an active low input, so there is no need to perform the
NOT operation.
For the clock input, select the 50MHz clock (de2 pin clock, listed in table 4.5). Declare clock as
line 3 and wire as line 10.
The output led_o is a 7-segment led of 7 bits (the 7-segment LED on the DE2 kit is shown in
table 4.4 of the DE2 Manual file). Select led 7 segment number 0, HEX0, so the output will be
declared as line 7 and assigned as line 14.

quartus/wrapper.sv

1 module wrapper (
2 // input
3 input logic CLOCK_50,
4 input logic [2:0] KEY,
5
6 // output

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 76
Appendix 2: Sample lab.

7 output logic [6:0] HEX0


8 );
9
10 design_2 dut (
11 .clk_i (CLOCK_50),
12 .rst_ni (KEY[0] ),
13 .button_i(~KEY[2] ),
14 .led_o (HEX0 )
15 );
16
17 endmodule : wrapper
Step 2 : Create a project in Quartus (similar to the combinatorial design example).
Step 3: Import pin assignment of DE2 (similar to the combinatorial design example).
Step 4 : Compilation (similar to the combinatorial design example).
Step 5: Programmer (similar to the combinatorial design example).
---END---

Electronics Department
Ho Chi Minh City University of Technology, Vietnam 77

You might also like