B. Tech Project
B. Tech Project
B. Tech Project
by bit serially out from UART while UART receiver receives the serial in data bit by
bit and converts them into a byte of data.
UART starts the data transmission by asserting a bit called the "Start Bit" to
the beginning of each data that is to be transmitted. The Start Bit is also used to
inform the receiver that a byte of data is about to be sent. After the Start Bit, the
individual bits of the byte of data are sent, with the Least Significant Bit (LSB) being
sent first. Each bit in the transmission is transmitted for exactly the same amount of
time as all of the other bits. On the other, UART the receiver will need to sample the
logic value that being received at approximately halfway through the period assigned
to each bit to determine if it is logic 1 or logic 0.
When a byte of data has been sent, the transmitter may add a Parity Bit. The
Parity Bit may be used by the receiver to perform simple error checking. In this
project, parity bit is not being implemented. After this, a Stop Bit is sent by the
transmitter to indicate the transmitter has completed the data transmission. If another
byte of data is to be transmitted, the Start Bit for the new data can be sent as soon as
the Stop Bit for the previous word has been sent. Figure 2.1 below shows the typical
UART data frames format that used by the IOP UART module in this project.
Thus, if the line is operating at 9600 baud, the line can switch states 9,600
times per second. This means each bit has the duration of 1/9600 of a second or about
100 micro second. In this project the baud rate of UART module in IOP is set as 9600.
As shown in Figure 2.1, each character or byte requires 10 bits to be transmitted.
Thus, IOP is able to transfer 960 bytes of data in a second.
CHAPTER 2
INTRODUCTION TO UART
Serial communication is an essential to computers and allows them to
communicate with low speed peripheral devices, such as the keyboard, the mouse,
modems etc. Thus, the UART or Universal Asynchronous Receiver/ Transmitter is
the most important component required in serial communication.
Asynchronous communication is performed between two (or more) devices if the
devices operate on independent clocks. This is because there is no guarantee that the
clocks of the communicating devices will have the exact frequency and phase over
extended periods. To combat this problem, asynchronous communication requires
additional synchronisation bits to be added around actual data in order to maintain
signal integrity. Figure 1 below illustrate the waveform of an asynchronous serial data
stream.
Receiver
Transmitter
The transmitter block is responsible for the serial transmitting of the data,
which is written by the uP (CPU) onto the TxD Hold register (or FIFO) at the CPU
Bus controller block. First the transmitter detects whether the UART transmitter
buffer (FIFO or TxD Hold Register) contains data for transmission. If it does, it loads
the data onto the transmit register at the transmitter circuit via the local data bus
(which connects the CPU Bus controller and the transmitter) and sets a signal to
indicate _Transmit data Read_. This signal initiates a sequence where the CPU Bus
controller informs the CPU via an interrupt about the transmitted data, so that the
CPU can load a new value. Synchronous to the baud clock which is generated by the
baud rate generator, the transmitter sets the start bit on the TxD signal line to initiate
the start of a frame and then bit by bit the symbol data. It finally completes the
transmission by sending a parity bit that represents the parity of transmitted data and
completes the frame with the final stop bit. The procedure will be repeated for another
symbol, if the transmitter buffer contains another symbol, else the transmitter goes to
an idle mode, transmitting _Marks_.
2.6 UART DESIGN SPECIFICATION
As part of this laboratory, only the receiver baud rate generator and the
transmitter circuit shall be designed. The CPU bus control and register block is not a
part of the scope of this laboratory.
The targeted UART circuit shall supports following features:
The Figure below illustrates the block diagram and the external interface of the UART
circuit that shall be design as part of this laboratory:
CHAPTER 3
FIFO ARCHITECTURE
FIFO Types:
Every memory in which the data word that is written in first also comes out first
when the memory is read is a first-in first-out memory. Figure 1 illustrates the data
flow in a FIFO. There are three kinds of FIFO:
Shift register FIFO with an invariable number of stored data words and,
thus, the necessary synchronism between the read and the write operations
because a data word must be read every time one is written
10
11
12
In order to understand FIFO design, one needs to understand how the FIFO
pointers work. The write pointer always points to the next word to be written;
therefore, on reset, both pointers are set to zero, which also happens to be the next
FIFO word location to be written. On a FIFO-write operation, the memory location
that is pointed to by the write pointer is written, and then the write pointer is
incremented to point to the next location to be written. Similarly, the read pointer
always points to the current FIFO word to be read. Again on reset, both pointers are
reset to zero, the FIFO is empty and the read pointer is pointing to invalid data
(because the FIFO is empty and the empty flag is asserted). As soon as the first data
word is written to the FIFO, the write pointer increments, the empty flag is cleared,
and the read pointer that is still addressing the contents of the first FIFO memory
word, immediately drives that first valid word onto the FIFO data output port, to be
read by the receiver logic. The fact that the read pointer is always pointing to the next
FIFO word to be read means that the receiver logic does not have to use two clock
periods to read the data word. If the receiver first had to increment the read pointer
before reading a FIFO data word, the receiver would clock once to output the data
word from the FIFO, and clock a second time to capture the data word into the
receiver. That would be needlessly inefficient. The FIFO is empty when the read and
write pointers are both equal. This condition happens when both pointers are reset to
zero during a reset operation, or when the read pointer catches up to the write pointer,
having read the last word from the FIFO. A FIFO is full when the pointers are again
equal, that is, when the write pointer has wrapped around and caught up to the read
pointer. This is a problem. The FIFO is either empty or full when the pointers are
equal, but which? One design technique used to distinguish between full and empty is
to add an extra bit to each pointer. When the write pointer increments past the final
FIFO address, the write pointer will increment the unused MSB while setting the rest
of the bits back to zero as shown in Figure 1 (the FIFO has wrapped and toggled the
pointer MSB). The same is done with the read pointer. If the MSBs of the two
pointers are different, it means that the write pointer has wrapped one more time that
the read pointer. If the MSBs of the two pointers are the same, it means that both
pointers have wrapped the same number of times.
13
Using n-bit pointers where (n-1) is the number of address bits required to
access the entire FIFO memory buffer, the FIFO is empty when both pointers,
including the MSBs are equal. And the FIFO is full when both pointers, except the
MSBs are equal. The FIFO design in this project uses n-bit pointers for a FIFO with
2(n-1) write-able locations to help handle full and empty conditions.
14
15
CHAPTER 4
THE FIFO BLOCK DIAGRAM
16
read-clock domain to insure that the empty flag is detected immediately when the
FIFO buffer is empty, that is, the instant that the read pointer catches up to the write
pointer (including the pointer MSBs). The FIFO design in this project assumes that
the full flag will be generated in the write-clock domain to insure that the full flag is
detected immediately when the FIFO buffer is full, that is, the instant that the write
pointer catches up to the read pointer (except for different pointer MSBs).
Pointers that are one bit larger than needed to address the FIFO memory buffer are
used. If the extra bits of both pointers (the MSBs of the pointers) are equal, the
pointers have wrapped the same number of times and if the rest of the read pointer
equals the synchronized write pointer, the FIFO is empty.
The write pointer must be synchronized into the read-clock domain through a pair of
synchronizer registers found in the sync_w2r module. In order to efficiently register
the rempty output, the synchronized write pointer is actually compared against the
rnext .
17
The FIFO described in this paper has implemented full-removal and emptyremoval using a pessimistic method. That is, full and empty are both asserted
exactly on time but removed late. Since the write clock is used to generate the FIFOfull status and since FIFO-full occurs when the write pointer catches up to the
synchronized read pointer, full-detection is accurate and immediate. Removal of
full status is pessimistic because full comparison is being done with a
synchronized read pointer. When the read
longer full, but the full-generation logic will not detect the change until two rising
wclk edges synchronize the updated rptr into the wclk domain. This is generally not a
problem, since it means that the data-sending hardware is being held-off or
informed that the FIFO is still full for a couple of extra wclk edges. The important
detail is to insure that the FIFO does not overflow. Signaling the data-sender to not
send more data for a couple of extra wclk edges merely gives time for the FIFO to
make room to receive more data. Similarly, since the read clock is used to generate
the FIFO-empty status and since FIFO-empty occurs when the read pointer catches up
to the synchronized write pointer, empty-detection is accurate and immediate.
Removal of empty status is pessimistic because empty comparison is being done
with a synchronized write pointer. When the write pointer does increment, the FIFO is
no longer empty, but the empty-generation logic will not detect the change until two
rising rclk edges synchronize the updated wptr into the rclk domain. This is generally
not a problem, since it means that the data-receiving logic is being held-off or
informed that the FIFO is still empty for a couple of extra rclk edges. The important
detail is to insure that the FIFO does not underflow. Signaling the data-receiver to
stop removing data from the FIFO for a couple of extra rclk edges merely gives time
for the FIFO to be filled with more data.
18
simultaneous to the write-to-full operation, but the read pointer had not yet been
synchronized into the write-clock domain. The setting of the full flag was slightly too
early and slightly pessimistic. This is not a design problem.
19
20
read out only if it is stored in the FIFO. Then, a clock edge is applied to the READ
CLOCK input, causing the first word in the data queue to appear on the data output.
The timing diagram in Figure 9 shows the resetting of the FIFO that is always
necessary at the beginning. Then, three data words are written in. The data words D1
through D3 appear one after the other on the INPUT DATA inputs and clock edges are
applied to WRITE CLOCK for transfer of the data. Once the first data word has been
written into the FIFO, the EMPTY signal changes from low level to high level.
Another two data words are written into the FIFO before the first read cycle. The
subsequent reading out of the first data word with the aid of a clock edge on READ
CLOCK does not alter the status signals. With the writing of another two data words,
the FIFO is full. This is indicated by the FULL signal. Finally, the four data words D2
through D5 remaining in the FIFO are read out. Thus, the FIFO is empty again, so the
EMPTY status line shows this by low level.
4.9 SYNCHRONOUS FIFOS
Synchronous FIFOs are controlled based on methods of control proven in
processor systems. Every digital processor system works synchronized with a systemwide clock signal. This system timing continues to run even if no actions are being
executed. Enable signals, also often called chip-select signals, start the synchronous
execution of write and read operations in the various devices, such as memories and
ports.
The block diagram in Figure 11 shows all the signal lines of a synchronous FIFO. It
requires a free-running clock from the writing system and another from the reading
system. Writing is controlled by the WRITE ENABLE input synchronous with
WRITE CLOCK. The FULL status line can be synchronized entirely with WRITE
CLOCK by the free-running clock. In an analogous manner, data words are read out
by a low level on the READ ENABLE input synchronous with READ CLOCK. Here,
too, the free-running clock permits 100 percent synchronization of the EMPTY signal
with READ CLOCK.
21
22
23
CHAPTER 5
IMPLEMENTATION OF A MULTI-CHANNEL UART
CONTROLLER BASED ON FIFO TECHNIQUE USING FPGA
An asynchronous FIFO refers to a FIFO design where data values are written
to a FIFO buffer from one clock domain and the data value are read from the same
FIFO buffer from another clock domain, where the two clock domains are
asynchronous to each other. FIFOs are always used for data cache,
storing
24
25
also be influenced by the operation that caused the pointers to become equal. If a reset
or read makes the pointers equal to each other, the FIFO is really empty. If a write
makes the pointers equal, the FIFO is full [5]. In order to exactly know weather the
FIFO is full or
empty, we can set a direction flag keeps track of what causes the pointers to become
equal to each other. The flag tells the status circuit the direction in which the FIFO is
currently
headed. The implementation of the direction flag is a little complex because you have
to set the threshold of _going toward full_ and _going toward empty_. In this paper,
this method is instead of another design technique used to distinguish between full
and empty is to add an extra bit to each pointer
.
5.3 SOLUTIONS OF METASTABILITY:
Metastability can cause unpredictable problems in a FIFO, so in the designing
stage we should do the best to reduce the metastability. If asynchronous element is in
a system, metastability is unavoidable. There is absolutely no way to eliminate
metastability completely, so what we do is calculate a _probability_ of error and
express this in terms of time ie. MTBF (Mean Time between Failures). MTBF is a
statistical measure of failure probability, and requires some much more complex,
empirical and experimental data to arrive at. In a D flip-flop, when the input signal
changes instantaneously from 0 to 1 at time 0. t =0, the value of Q is uncertain. This is
metastability.
In the FIFO, it needs to sample the value of a counter with a clock that is
synchronous to the counter clock. Thus it will meet a situation where the counter is
changing from FFFF to
0000, and every single bit goes metastable. This means that the counter would
potentially read any value between FFFF to 0000 and the FIFO does not work. The
most important things that must to be done are to make sure that not all bits of the
counter will change simultaneously. In order to minimize the probability of
occurrence of such errors, we should make sure that precisely one bit changes every
time the counter increments. So we need a counter that counts in
the Gray codes. Gray codes are named after the person who originally patented the
26
code back in 1953, Frank Gray. Gray code is different form binary code that is every
next value
differs from the previous in only one bit position. There are multiple ways to design a
Gray code counter and this paper details a simple and straight forward method to do
the design. The technique describe in this paper uses only one set of flip-flops for the
Gray code counter as shown in figure.
In a FIFO, converts the Gray code to Binary code, increments it and convert it
back to the Gray code and store it. The Gray code counter assumes that the outputs of
registers bits are the Gray code value. The Gray code outputs are then passed to the
Gray to binary converter which is
passed to a binary adder to generate the next binary value which is passed to the
binary to Gray converter that generates the next Gray code value stored in register.
The first fact to remember about a Gray code is that the code distance between any
two adjacent words is just 1(only one bit can change from one Gray count to the
next). The second fact to remember about a Gray code counter is that most useful
Gray code counters must have power-of-2 counts in the sequence.
27
and send it to the TXD pin one by one bit. The Receive Circuit consists of a Receive
Shift Register and a Receive Buffer. The Receive Shift Register receives data from
RXD one by one bit. The Receive Buffer loads data from long-distance MCU and gets
it ready for the local PC to read. The Control Register a special function register is
used to control the UART and indicate status of it. According to each bits value the
UART will choose different kind of communication method and the UART knows
what to do to receive or transmit data. FIFOs are used to store data received from the
PC and get ready for sub MCUs. When writing data into FIFOs and reading data out
of FIFOs we could set different clock domains according to the PCs and MCUs
Baud Rate. So it can be used to implement communications between MCUs at
different Baud Rate .
The controller also has a block of Baud Rate Generator to engender different
Baud Rates to content requirements for different kind of systems. This block is
constituted by timers (32/16 bits timers), frequency dividers and a Baud Rate setting
register.
28
29
CHAPTER 6
PROJECT ADVANTAGES
Configuration capability
In the FIFO mode transmitter and receiver are each buffered with 16 byte or
64 byte FIFO to reduce the number of interrupts presented to the CPU
Independently controlled transmit, receive, line status, and data set interrupts
Baud generation
30
CHAPTER 7
APPLICATIONS
Modem interface
31
CHAPTER 8
HARDWARE DESCRIPTION LANGUAGE(VHDL)
8.1 HDL(VHDL)
8.1.1 why (v) hdl?
Interoperability
Technology independence
Design reuse
Readability
Standard language
Widely supported
32
8.2.1 entities:
33
Port directions:
In: A value of a port can be read inside the component, but cannot be assigned.
Multiple reads of port are allowed.
Out: Assignments can be made to a port, but data from a port cannot be read.
Multiple assignments are allowed.
In out: Bi-directional, assignments can be made and data can be read. Multiple
assignments are allowed.
Buffer: An out port with read capability. May have at most one assignment.
(are not recommended)
8.2.2 Architectures:
Eg:
Architecture Comparator1 of Comparator is
Begin
EQ <= 1when (A=B) else 0;
End Comparator1;
8.3 LEVELS OF ABSTRACTION:
34
VHDL supports many possible styles of design description, which differ primarily in
how closely they relate to the HW.
It is possible to describe a circuit in a number of ways.
Structural-------
Dataflow -------
Behavioral -------
If there is no 3rd party models for registers => you must write the behavioral
description of registers.
35
The concept of time may be expressed precisely using delays (e.g., A <= B
after 10 ns)
In the lower levels of abstraction (e.g., RTL) synthesis tools ignore detailed
timing specifications.
CHAPTER 9
FPGA ARCHITECTURE
A field-programmable gate array (FPGA) is a semiconductor device that can be
configured by the customer or designer after manufacturinghence the name "fieldprogrammable". FPGAs are programmed using a logic circuit diagram or a source
code in a hardware description language (HDL) to specify how the chip will work.
They can be used to implement any logical function that an application-specific
integrated circuit (ASIC) could perform, but the ability to update the functionality
after shipping offers advantages for many applications.
FPGAs contain programmable logic components called "logic blocks", and a
hierarchy of reconfigurable interconnects that allow the blocks to be "wired
together"somewhat like a one-chip programmable breadboard. Logic blocks can be
configured to perform complex combinational functions, or merely simple logic gates
like AND and XOR. In most FPGAs, the logic blocks also include memory elements,
which may be simple flip-flops or more complete blocks of memory.
HISTORY : The FPGA industry sprouted from programmable read only memory
(PROM) and programmable logic devices (PLDs). PROMs and PLDs both had the
option of being programmed in batches in a factory or in the field (field
programmable), however programmable logic was hard-wired between logic gates.
36
Xilinx Co-Founders, Ross Freeman and Bernard Vonderschmitt, invented the first
commercially viable field programmable gate array in 1985 the XC2064. The
XC2064 had programmable gates and programmable interconnects between gates, the
beginnings of a new technology and market. The XC2064 boasted a mere 64
configurable logic blocks (CLBs), with two 3-input lookup tables (LUTs). More than
20 years later, Freeman was entered into the National Inventor's Hall of Fame for his
invention.
Some of the industrys foundational concepts and technologies for programmable
logic arrays, gates, and logic blocks are founded in patents awarded to David W. Page
and LuVerne R. Peterson in 1985.
In the late 1980s the Naval Surface Warfare Department funded an experiment
proposed by Steve Casselman to develop a computer that would implement 600,000
reprogrammable gates. Casselman was successful and the system was awarded a
patent in 1992.
Xilinx continued unchallenged and quickly growing from 1985 to the mid-1990s,
when competitors sprouted up, eroding significant market-share. By 1993, Actel was
serving about 18 percent of the market.
The 1990s were an explosive period of time for FPGAs, both in sophistication and the
volume of production. In the early 1990s, FPGAs were primarily used in
telecommunications and networking. By the end of the decade, FPGAs found their
way into consumer, automotive, and industrial applications.
FPGAs got a glimpse of fame in 1997, when Adrian Thompson merged genetic
algorithm technology and FPGAs to create a sound recognition device. Thomsons
algorithm allowed an array of 64 x 64 cells in a Xilinx FPGA chip to decide the
configuration needed to accomplish a sound recognition task.
MODERN DEVELOPMENTS
A recent trend has been to take the coarse-grained architectural approach a step
further by combining the logic blocks and interconnects of traditional FPGAs with
embedded microprocessors and related peripherals to form a complete "system on a
37
programmable chip". This work mirrors the architecture by Ron Perlof and Hana
Potash of Burroughs Advanced Systems Group which combined a reconfigurable
CPU architecture on a single chip called the SB24. That work was done in 1982.
Examples of such hybrid technologies can be found in the Xilinx Virtex-II PRO and
Virtex-4 devices, which include one or more PowerPC processors embedded within
the FPGA's logic fabric. The Atmel FPSLIC is another such device, which uses an
AVR processor in combination with Atmel's programmable logic architecture.
An alternate approach to using hard-macro processors is to make use of "soft"
processor cores that are implemented within the FPGA logic. (See "Soft processors"
below).
As previously mentioned, many modern FPGAs have the ability to be reprogrammed
at "run time," and this is leading to the idea of reconfigurable computing or
reconfigurable systems CPUs that reconfigure themselves to suit the task at hand.
The Mitrion Virtual Processor from Mitrionics is an example of a reconfigurable soft
processor, implemented on FPGAs. However, it does not support dynamic
reconfiguration at runtime, but instead adapts itself to a specific program.
Additionally, new, non-FPGA architectures are beginning to emerge. Softwareconfigurable microprocessors such as the Stretch S5000 adopt a hybrid approach by
providing an array of processor cores and FPGA-like programmable cores on the
same chip.
APPLICATIONS :
Applications of FPGAs include digital signal processing, software-defined radio,
aerospace and defense systems, ASIC prototyping, medical imaging, computer vision,
speech recognition, cryptography, bioinformatics, computer hardware emulation,
radio astronomy and a growing range of other areas.
FPGAs originally began as competitors to CPLDs and competed in a similar space,
that of glue logic for PCBs. As their size, capabilities, and speed increased, they began
to take over larger and larger functions to the state where some are now marketed as
full systems on chips (SoC). Particularly with the introduction of dedicated multipliers
38
into FPGA architectures in the late 1990s, applications, which had traditionally been
the sole reserve of DSPs, began to incorporate FPGAs instead.
FPGAs especially find applications in any area or algorithm that can make use of the
massive parallelism offered by their architecture. One such area is code breaking, in
particular brute-force attack, of cryptographic algorithms.
FPGAs are increasingly used in conventional high performance computing
applications where computational kernels such as FFT or Convolution are performed
on the FPGA instead of a microprocessor.
The inherent parallelism of the logic resources on an FPGA allows for considerable
computational throughput even at a low MHz clock rates. The flexibility of the FPGA
allows for even higher performance by trading off precision and range in the number
format for an increased number of parallel arithmetic units. This has driven a new
type of processing called reconfigurable computing, where time intensive tasks are
offloaded from software to FPGAs.
The adoption of FPGAs in high performance computing is currently limited by the
complexity of FPGA design compared to conventional software and the extremely
long turn-around times of current design tools, where 4-8 hours wait is necessary after
even minor changes to the source code.
Traditionally, FPGAs have been reserved for specific vertical applications where the
volume of production is small. For these low-volume applications, the premium that
companies pay in hardware costs per unit for a programmable chip is more affordable
than the development resources spent on creating an ASIC for a low-volume
application. Today, new cost and performance dynamics have broadened the range of
viable applications.
ARCHITECTURE :
The most common FPGA architecture consists of an array of configurable logic
blocks (CLBs), I/O pads, and routing channels. Generally, all the routing channels
have the same width (number of wires). Multiple I/O pads may fit into the height of
one row or the width of one column in the array.
39
An application circuit must be mapped into an FPGA with adequate resources. While
the number of CLBs and I/Os required is easily determined from the design, the
number of routing tracks needed may vary considerably even among designs with the
same amount of logic. (For example, a crossbar switch requires much more routing
than a systolic array with the same gate count.) Since unused routing tracks increase
the cost (and decrease the performance) of the part without providing any benefit,
FPGA manufacturers try to provide just enough tracks so that most designs that will
fit in terms of LUTs and IOs can be routed. This is determined by estimates such as
those derived from Rent's rule or by experiments with existing designs.
The FPGA is an array or island-style FPGA. It consists of an array of logic blocks and routing
channels. Two I/O pads fit into the height of one row or the width of one column, as shown
below. All the routing channels have the same width (number of wires).
FPGA STRUCTURE
A classic FPGA logic block consists of a 4-input lookup table (LUT), and a flip-flop,
as shown below. In recent years, manufacturers have started moving to 6-input LUTs
in their high performance parts, claiming increased performance.
40
CHAPTER 10
SIMULATION AND VERIFICATION
To verify design of the controller a test bench is written to make verification in
Modelsim. Data received from the PC or other main MCU will be stored in FIFOs
within FPGA till the controller received the commands to order the controller to send
data to sub-controllers. Then the controller will set a kind of Baud Rate according to
commands desired. As showing in figure 8, the controller is receiving data and store
the data received to different FIFO waiting for read.
When sub-controllers are required to receive data at different Baud Rates, the
controller can set each channel at its required Baud Rate to transmit data. The
transmitting
sequence is showing as following in figure 9. The controller sends data at the same
time but at different Baud Rate When sub-controllers are required to receive data at
the
same Baud Rate, the controller can also set all channels at the same Baud Rate to
transmit data as showing in figure 9. All sub-MCU can receive data at the same time.
We design four channels in Verilog HDL as totally the same structure use always
block to implement communication. So on theory, there are no time differences
between sub-controller when the controller transmits data to sub-controllers at the
same time. But in fact, there are hardware delays in FPGAs and these delays may
41
causes subcontrollers can not receiver data from the controller at the same time
precisely. Comparing with the delays in RS485
net these delays can be ignored. So using this controller can greatly improve
synchronization of sub-controllers.
RTL SCHEMATIC
42
43
RTL SCHEMATIC
RTL SCHEMATIC
44
45
46
SIMULATIO
47
SYNTHESIS REPORT
Macro Statistics
# RAMs
:3
48
49
Macro Statistics
# Registers
: 44
Flip-Flops
: 44
=============================================================
========
34 out of 960 3%
44 out of 1920 2%
65 out of 1920 3%
8
5 out of 108
4%
1 out of 24
4%
RTL SCHEMATIC
50
CHAPTER 11
CONCLUSION
This project introduces a method to design a synchronous FIFO based on
FPGA. And using synchronous FIFO technique implements a multi-channel
UART controller within FPGA .The controller can be used to implement
communications in complex system with different Baud Rates of sub-controllers.
It can be used to reduce time delays between sub-controllers of a complex control
system to improve the synchronization of each sub-controller. The controller is
reconfigurable and scalable
In the serial communication between a computer and different devices, UART
play a major role in the data transmission. Here the computer is working with a
particular frequency and the devices connected to it work with different frequency.
To convert these asynchronous domains to synchronous domains , we use a UART
consisting of a FIFO.
FIFO converts asynchronous to synchronous where as the UART converts the
serial data to parallel and then parallel to serial. Here we conclude that using FIFO
in the UART is very advantageous when compared with the normal UART.
51
CHAPTER 12
REFERENCES
1)FIFO Architecture,
Functions,
and Applications
by
Peter
Forstner
TEXAS
INSTRUMENTS
2) Simulation and Synthesis Techniques for synchronous FIFO Design by Clifford E.
Cummings
3) Synchronous FIFO 5.0-XILINX
4) http://en.wikipedia.org/wiki/First-in,_first-out
5)http://www.xilinx.com/support/documentation/ipmeminterfacestorelement_fifo_synchfifo.h
tm
6) http://semiconductors.globalspec.com/Industrial-Directory/synchronous_fifo
52