Tải bản đầy đủ (.pdf) (15 trang)

Hardware software co design implement two bit full adder on zybo zynq 7000 board by using verilog

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.91 MB, 15 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>HO CHI MINH CITY </b>

<b>UNIVERSITY OF TECHNOLOGY AND EDUCATIONFACULTY OF HIGH QUALITY TRANING</b>

<b>Trần Nguyễn Anh Khoa 20119188</b>

<i><b>Ho Chi Minh City, March 2023</b></i>

<b>Overview...31. Introduction...4</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>2. Methodology...4</b>

<b>2.1. Zynq-7000 SoC...4</b>

<b>2.2. Vivado...7</b>

<b>2.3. 2-bit Full Adder...8</b>

<b>2.4. Code for module Full Adder in Verilog...11</b>

<b>2.5. Code for module 2 bit Full Adder in Verilog...12</b>

<b>3. Result from Simulation...13</b>

<b>4. Conclusion...14</b>

<b>5. References...14</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

The Zybo Zynq-7000 board is a powerful development platform that combines a high-performance ARM-based processor with programmable logic. The board features a Xilinx Zynq-7000 All-Programmable System-on-Chip (SoC) that includes a dual-core ARM Cortex-A9 processor and an FPGA fabric. The FPGA fabric can be programmed using the Verilog language, which is a popular hardware description language used for digital circuit design.

A Full Adder circuit consists of three inputs: A, B, and Cin, and two outputs: S and Cout. The output S represents the sum of the three inputs, while the output Cout represents the carry-out. To implement a 2-bit Full Adder circuit, we need to cascade two Full Adder circuits together. The first Full Adder takes inputs A0, B0, and Cin, and produces outputs S0 and C1. The second Full Adder takes inputs A1, B1, and C1, and produces outputs S1 and Cout. To implement this circuit on the Zybo Zynq-7000 board, we will use the Verilog language. Verilog is a hardware description language that allows us to describe the behavior of digital circuits. We will use the Xilinx Vivado development environment to create a project, write the Verilog code, and simulate and synthesize the design. We will also generate a bitstream file that can be programmed onto the FPGA fabric of the Zybo Zynq-7000 board.

In the next sections, we will discuss the steps involved in implementing a 2-bit Full Adder circuit on the Zybo Zynq-7000 board using Verilog.

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

1. Introduction

The Full Adder is a digital circuit that can perform the addition of three binary digits: A, B, and Carry-in (Cin) to produce a Sum (S) and a Carry-out (Cout). Full Adder circuits are essential building blocks of digital systems and are widely used in arithmetic circuits, such as calculators, digital signal processors, and microprocessors. In this essay, we will discuss the implementation of a 2-bit Full Adder circuit on the Zybo Zynq-7000 board using the Verilog hardware description language. We will explore the basic principles of Full Adder circuits, the features of the Zybo Zynq-7000 board, and the steps involved in implementing the circuit using Verilog.

2. Methodology

2.1. Zynq-7000 SoC

The Zynq-7000 family offers the flexibility and scalability of an FPGA, while providing performance, power, and ease of use

typically associated with ASIC and ASSPs. The range of devices in the Zynq-7000 family allows designers to target

cost-sensitive as well as high-performance applications from a single platform using industry-standard tools. While each

device in the Zynq-7000 family contains the same PS, the PL and I/O resources vary between the devices. As a result, the

Zynq-7000 and Zynq-7000S SoCs are able to serve a wide range of applications including:

• Automotive driver assistance, driver information, and infotainment • Broadcast camera

• Industrial motor control, industrial networking, and machine vision • IP and Smart camera

• LTE radio and baseband • Medical diagnostics and imaging • Multifunction printers

• Video and night vision equipment

The Zynq-7000 architecture enables implementation of custom logic in the PL and custom software in the PS. It allows for

the realization of unique and differentiated system functions. The integration of the PS with the PL allows levels of

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

performance that two-chip solutions (e.g., an ASSP with an FPGA) cannot match due to their limited I/O bandwidth, latency,

and power budgets.

Xilinx offers a large number of soft IP for the Zynq-7000 family. Stand-alone and Linux device drivers are available for the

peripherals in the PS and the PL. The Vivado® Design Suite development environment enables a rapid product

development for software, hardware, and systems engineers. Adoption of the ARM-based PS also brings a broad range of

third-party tools and IP providers in combination with Xilinx’s existing PL ecosystem. The inclusion of an application processor enables high-level operating system support, e.g., Linux. Other standard operating

systems used with the Cortex-A9 processor are also available for the Zynq-7000 family.

The PS and the PL are on separate power domains, enabling the user of these devices to power down the PL for power

management if required. The processors in the PS always boot first, allowing a software centric approach for PL

configuration. PL configuration is managed by software running on the CPU, so it boots similar to an ASSP.

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Figure 1. Architectural Overview

Figure 1 illustrates the functional blocks of the Zynq-7000 SoC. The PS and the PL are on separate power domains, enabling the user of these devices to power down the PL for power management if required.

The ZYBO (ZYnq BOard) is a feature-rich, ready-to-use, entry-level embedded software and digital circuit development platform built around the smallest member of the Xilinx Zynq-7000 family, the Z-7010. The Z-7010 is based on the Xilinx All Programmable System-on-Chip (AP SoC) architecture, which tightly integrates a dual-core ARM Cortex-A9 processor with Xilinx 7-series Field Programmable Gate Array (FPGA) logic. When coupled with the rich set of multimedia and connectivity peripherals available on the ZYBO, the Zynq Z-7010 can host a whole system design. The on-board memories, video and audio I/O, dual-role USB, Ethernet, and SD slot will have your design up-and-ready with no additional hardware needed. Additionally, six Pmod ports are available to put any design on an easy growth path.

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

Figure 2. DIGILENT ZYBO Zynq-7000

2.2. Vivado

Vivado is a software tool suite from Xilinx that is used for designing, synthesizing, and analyzing digital circuits for FPGA (Field Programmable Gate Array) and SoC (System-on-Chip) devices. It provides a graphical user interface (GUI) for designing digital circuits and includes various tools for debugging, simulating, and

implementing designs on Xilinx FPGA and SoC devices. Vivado is widely used in industries such as telecommunications, aerospace, defense, and automotive for developing digital circuits. It supports a wide range of digital design languages such as VHDL, Verilog, and SystemVerilog, and includes advanced features such as high-level

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

synthesis (HLS) and partial reconfiguration. Overall, Vivado is a powerful tool suite for designing complex digital circuits and is used by engineers and designers in many industries.

2.3. 2-bit Full Adder

 Full Adder is the adder that adds three inputs and produces two outputs. The first two inputs are A and B and the third input is an input carry as C-IN. The output carry is designated as C-OUT and the normal output is designated as S which is SUM. A full adder logic is designed in such a manner that can take eight inputs together to create a byte-wide adder and cascade the carry bit from one adder to another. we use a full adder because when a carry-in bit is available, another 1-bit adder must be used since a 1-bit half-adder does not take a carry-in bit. A 1-bit full adder adds three operands and generates 2-bit results.

Figure 3. Block diagram of Full Adder

Figure 4. Truth Table of Full Adder

 To design a 2-bit full adder, we can use two 1-bit full adders, one for the least significant bit (LSB) and one for the most significant bit (MSB). The input bits of the two 1-bit full adders are the corresponding bits of the two 2-bit binary numbers being added, and the carry-in bit of the LSB full adder is the carry-in bit of the 2-bit full adder. The output bits of the two 1-bit full adders are the corresponding bits of the 2-bit binary sum, and the carry-out bit of the MSB full adder is the carry-out bit of the 2-bit full adder. The carry-out bit of the LSB full adder is connected to the carry-in input of the MSB full adder. The

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

carry-out bit of the MSB full adder is the carry-out bit of the 2-bit full adder. To combine the two carry-out bits, we use an OR gate. The output of the OR gate is the final carry-out bit of the 2-bit full adder. Here's a schematic diagram of a 2-bit full adder:

Figure 5. Block diagram of 2-bit full adder circuit

Figure 6. Truth Table of 2 bit Full Adder

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

2.4. Code for module Full Adder in Verilog

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

assign COUT = (A&B)|(B&C)|(C&A);

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

3. Result from Simulation

After simulating on Vivado, we got the signal waveforms illustrate all the state similar to the Truth Table.

Figure 7. Simulation 1

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

Figure 8. Simulation 2

Figure 9. Block Diagram taken from Vivado

4. Conclusion

In conclusion, implementing a two-bit full adder on the ZYBO ZYNQ-7000 board using Verilog is a complex yet rewarding task. Through this project, we have learned how to design and simulate digital circuits using Verilog, and how to program and deploy them on a FPGA board. We have also gained a deeper understanding of how a full adder works, and how it can be used to perform arithmetic operations on binary numbers.

This project has also taught us the importance of testing and debugging in the design process, as even small errors in the Verilog code can lead to unexpected behavior in the circuit. By carefully analyzing and correcting these errors, we were able to ensure that our two-bit full adder performed as expected.

Overall, this project has been a valuable learning experience, and has given us the skills and knowledge necessary to design and implement more complex digital circuits in the future. We look forward to continuing to explore the world of digital design and FPGA programming, and to using these skills to solve real-world engineering problems.

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

5. References

"Digital Design and Computer Architecture" by David Harris and Sarah Harris "Verilog HDL: A Guide to Digital Design and Synthesis" by Samir Palnitkar "Introduction to Digital Systems: Modeling, Synthesis, and Simulation Using VHDL" by Mohammed Ferdjallah

"Digital Design: With an Introduction to Verilog HDL" by M. Morris Mano and Michael D. Ciletti

"Zybo Z7-10 Reference Manual" by Digilent

"Zynq-7000 All Programmable SoC: Embedded Design Tutorial" by Xilinx "FPGA Prototyping by Verilog Examples: Xilinx Spartan-3 Version" by Pong P. Chu "Vivado Design Suite User Guide" by Xilinx

"Vivado Design Suite Tutorial" by Xilinx

</div>

×