Escolar Documentos
Profissional Documentos
Cultura Documentos
USING VLSI
(ABG)
PROJECT REPORT
Submitted By
S. MEENU (A1306016)
M. PRAVEENA MEENA KUMARI (A1306019)
2003-2004
CERTIFICATE
C O M PA N Y P R O F I L E
Chip Quest is an education and R&D division rendering professional
services. Recently the company etched its future plans with the distinctive focus by
implementing ITS ladder model.
VISION
Chip Quest has the vision transcend time with timeless services
by bringing the most advanced knowledge of high-end technology, a fierce
dedication to client satisfaction and a tradition of aspiring to that special
touch of genius.
Chip Quest has also got a distinctive focus to deliver the best of
technology services offering solutions to help our clients stay competitively ahead.
MISSION
ChipQuest has the missionary zeal of serving the students
community that is an insurmountable resource for the industry. The super
value education on the advanced technologies is to act as incubators for new
product development and process re - engineering.
BUSINESS MODEL
Our “Ladder” Business model:
Research &
Automotives Development
S
VLSI E
Consumer
Electronics
I R Onsite
Consultancy
V
N I
Micro Electronics C Turn Key
Projects
D Embedded E
S
Telecommunication U OFDC
S
Networking
T Networking Domain
Education
ACKNOWLEDGEMENT
I would also like to thank all our staff members for their kind
cooperation during this project and for providing us with the proficient and professional
resources for the project.
Finally I would like to thank all of our friends who came with thriving
ideas regarding the project and helped me in all possible ways to make this project a
complete and successful one.
SYNOPSIS
A network is a well – defined collection of Communication
(characters) transmitted per unit of time. Each symbol will normally consist
of a number of bits, so the baud rate will only be the same as the bit rate
arriving via rs232 transmission (i.e. PC serial port.).This module allows for
rate to match incoming serial data, regardless of the FPGA clock rate. It
works by measuring the speed of the incoming characters and producing its
CONTENTS
S.NO CONTENTS PAGE. NO
1. VLSI 01
2. VHDL 04
3. Software Tools 07
3.1 Leonardospectrum 08
3.2 Modelsim 13
4.1 Introduction 14
4.2 Baudrate in Communication 15
4.3 Purpose 16
4.4 Features 17
4.5 Working 18
4.6 Algorithm 24
4.7 Operation 30
4.8 Applications 47
4.9 Extent of the Project 49
4.10 Conclusion 50
5. Synthesis 51
6. Simulation 58
7. Appendix 71
8. Bibliography 78
ABOUT VLSI
Digital circuit design has evolved rapidly over the last 25 years.
The earliest digital circuits were designed with vaccum tubes and transistors.
Integrated circuits were then invented where logic gates were placed on a
single chip .The first integrated circuit ( IC ) chips were SSI (small scale
integration) chips where the gate count was very small. As technologies
gates on a chip. These chips were called MSI (medium scale integration)
chips. With thee advent of LSI (large scale integration), designers could put
getting very complicated, and designers felt the need to automate these
designers began to use circuit and logic simulation techniques to verify the
circuits were still tested on the breadboard, and the layout was done on paper
technology, designers could design single chips with more than 100,000
became popular. The designers were now building gate-level digital circuits
manually on graphic terminals. They would build small building blocks and
then derive higher-level blocks from them. This process would continue
until they had built the top-level block. Logic simulators came into existence
chip.
VLSI - AN OVERVIEW
This engineering field deals with the never-ending quest to create electronic
circuits that are physically small yet contain massive amounts of computing
power.
years after the first planar integrated circuit was discovered. Moore’s law
states that “Number of transistors per integrated circuits would double every
11118 months”.
1975.Though Intel’s technology. Moore’s Law has been maintained for far
longer and still holds true as we enter the new century. The mission of
Moore’s law.
VHDL
The letters VHDL stand for the VHSIC (Very High Speed
to gate level, and is also used to synthesize (i.e. automatically generate) gate
VHDL is commonly used to support the high level design (or language
the language has been widely used in the electronics industry and academia.
words given in Capitalized Italics are technical terms whose definitions may
interface to the block of hardware (i.e. the inputs and outputs), whilst the
and the lower level Entity and Architecture is only made when the complete
Component is made in the Configuration, which is like a parts list for the
Signal has a Type, as does every value in VHDL. The Type defines both a
set of values and the set of operations that can be performed on those values.
(which represent the leaves in the hierarchy tree of the design). Each Process
executes concurrently with respect to all other Processes, but the statements
inside a process execute in sequential order and are in many ways similar to
computer. That text file is then submitted to a VHDL compiler, which builds
the data files necessary for simulation or synthesis. The proper jargon for the
steps performed by the compiler are Analysis, which checks the VHDL
source for errors and puts the VHDL into a Library, and Elaboration, which
SIMULATOR MODELSIM
SYNTHESIS LEONARDO
DESIGN FLOW
PHASE - 1
MAIN MODELSIM RTL
(DESIGN &
MODULE DEBUGGING SYNTHE -
SIZEABLE
VHDL)
TOOL
PHASE - 2
MODELSIM
VHDL SYNTHESIS
LIBRARY
DEBUGGING
TOOL
NETLIST
-------------------------------------------------------------------------------
PHASE - 3
MODELSIM
DEBUGGING
VHDL PLACE &
LIBRARY TOOL ROUTE
NET
LIST
LEONARDOSPECTRUM
LEONARDOSPECTRUM FEATURES
OPERATING SYSTEMS
Hewlett-Packard HP-UX
Sun Solaris
IBM AIX
SYSTEM MANAGEMENT
Master tree
A Master tree is the first Mentor Graphics tree you install on a
workstation or file server and usually serves other client workstations
of the same binary type. Links within a Master tree typically resolve
to software physically located within that tree; that is, a Master tree is
a completely self-contained tree with no external links outside of the
tree.
User tree
A User tree is a Mentor Graphics tree that resides on a user's local
system. To conserve disk space, the user tree normally contains copies
of frequently used packages and accesses other less frequently used
packages via symbolic links to a Master tree. In a User tree, the shared
directory is a link to Master tree's shared directory. User trees are
optional.
BINARY - COMPATIBILITY
The Mentor Graphics tree structure only supports the binary
files built to execute on one type of processor, and cannot contain binary
files for more than one type of processor. Therefore, at least one Mentor
Graphics Master tree must exist for each network.
MODELSIM PROJECT
PCserialport).
received character are then used to generate a baud rate clock for use in
serial communications back and forth with the device that originally
regardless of the FPGA clock rate. It works by measuring the speed of the
incoming characters, and producing its own clock to match. It has been
SYSTEMS
hardware generates.
Data rate is the bits per second - equal or higher than baud rate -
(characters) transmitted per unit of time. Each symbol will normally consist
of a number of bits, so the baud rate will only be the same as the bit rate
when there is one bit per symbol. The term originated as a measure for the
terms of modem operation. It is recommended that all data rates are referred
symbol is known.
GENERATOR
change dynamically.
It has been tested at clock rates ranging from 1.5 MHz upto 98 MHz.
It has been tested at the lowest 110 BAUD as well the highest
115200 BAUD.
BAUD with any FPGA board clock between 30 MHz and 100 MHz.
Clock speeds lower than 30 MHz support lower BAUD rates, like
9600.
It has been tested at 110 BAUD as well. That is a really slow speed
Will operate just fine with "non standard" BAUD rates – such as
GENERATOR
the "start" bit. When a condition resembling a start bit is detected, the
module then begins a measurement window, to try and determine the BAUD
different bit transitions because of their different data content, this module
actually only "targets" a single character -- in this case the "carriage return"
rate clock.
The module uses this BAUD rate clock internally to verify the
character, including start/stop bits. Parity is supported, but has never been
return character, the measurement is accepted as valid, and the module then
produces the BAUD rate clock externally, and flags that it has "locked" onto
waveform
time for each bit. However, actual measurements taken using a logic
analyzer on characters received from a PC show that the times are not equal.
The "high" times turned out shorter, and the "low" times longer... Therefore,
this module attempts to average out this discrepancy by measuring one low
small amounts of error, the measurements are made during the beginning 2
bits of the received character, (that is, start bit and data bit zero). Then the
verification in this module is: carriage return (CR) = 0x0d = 13. This
command interpreter. It is anticipated that the user would press the "enter"
key once upon initializing communications with the electronic device, and
BAUDrate, thus allowing the device to respond at the correct rate, and to
baud rate to match the baud rate of the received data. This works for all
baud rates, within certain limits, and for all system clock rates, within certain
limits.
generated baud rate, then the measurement is scrapped, and the unit goes
that the unit might accept the measurement and produce a baud clock too
low.
CASE 3 :- (Multiple Carriage Return)
Press "enter" multiple times at the slow speeds. Has been tested
Therefore, each and every carriage return actually causes a new baud rate
no apparent effect as an old BAUD clock is stopped and a new one started.
MULTIPLICATION FACTOR
one single clock wide, occurring at a rate suitable for use in serial
CALCULATION OF BAUD-RATE
switch able frequency flip flop chain which can be set up to give the
appropriate sampling and shifting rates for the desired baud rate, based on
the PIC’s crystal frequency XTAL (e.g. for 20MHz, XTAL = 20) giving: -
It may be advantageous to use the high baud rate (BRGH = 1)
even for slower baud clocks as this may reduce baud rate error in some
cases.
ALGORITHM
S P E C I F I C AT I O N S
Counter
CLOCK_FACTOR prescaler.
BITS_PER_CHAR = 8 //Include parity,if used,but not
termination flag
This module uses a counter to divide down the clk_i signal to produce
module.
serial data (2x because there are two bits involved in the
measurement!)
log2_max_count_pp = (max_count * clock_factor_pp)/fclk_i
EXAMPLE:-1
ceil(log_base_2(2*Fclk_i/(Fbaud_max*CLOCK_FACTOR_PP)))
>= ceil(log_base_2(2*20E6/(115200*4)))
>= ceil(log_base_2(86.8))
>= 7 bits.
1.15%. This is an acceptable level of error for a baud rate clock. Notice that
the lower baud rates have an even smaller error percentage (Yes!) but that
EXAMPLE:-2
>= ceil(log_base_2(33333.3))
>= ceil(15.024678)
>= 16 bits.
greater than a few percent, you might want to use a higher Fclk_i or else a
(MHz)
BAUDRATE GENERATOR
BLOCK DIAGRAM
RSR (Receive Shift Register) registers and the receive control. The control
interfaces with SCSR (Serial Communications Control Register), and RDR
can drive data onto the data bus. The first process represents the
When there is data to be received, RxD becomes '0' which signifies the start
bit. Then, using a shift register, the eight data bits are clocked. Once the stop
bit is detected, the receiver is ready to output its data. The second process
updates the registers on the rising edge of the clock. The signal
BclkX8_rising is '1' for one system clock time following the rising edge of
BclkX8, which is output from the baud rate generator code. BclkX8_rising is
The receiver sends its data through the cipher encoder, which
will encode the data in the following manner. The VHDL code for the cipher
encoder takes the binary output from the UART receiver (RDR[7..0]) and
adds an offset to it, which in our case will be four. To implement the
in the appropriate manner. For example, if the result from the +4 operation is
greater than 21 then we subtract 22 from the value to wrap back around to
the beginning of the alphabet; otherwise, the value of the letter is just the
equivalent letter of our result. This output is displayed on the LEDs, and it is
also sent to the transmitter as a binary value for displaying on the terminal
window.
and sends it back to the terminal window. In order to notify the transmitter
that there was data ready to be transmitted, we took the SetRDRF signal
from the receiver and sent it through a D-type flip-flop to delay the system
clock even further. Then the output of the D flip-flop is sent to the LoadTDR
second D flip-flop with the output of the first D flip-flop as an input for the
second one, and the output of the second D flip-flop was inverted and sent to
the TDRE input on the transmitter. This is because the TDRE needs to be
inverted whenever there is valid data to be transmitted. For the Rst_b signal,
we use a D flip-flop with vcc as its input, and the output of the flip-flop was
The transmitter contains the TDR (Transmit Data Register) and TSR
(Transmit Shift Register) registers and the transmit control. It interfaces with
TDRE (Transmit Date Register Empty) and the data bus (DBUS). The first
and control signals. The second process updates the registers on the rising
edge of the clock. The signal Bclk_rising is '1' for one system clock time
Then Bclk_rising is '1' if the current value of Bclk is '1' and the
previous value (stored in Bclk_Dlayed) is '0'. Thus, Bclk_rising <= Bclk and
not Bclk_Dlayed
The output of the transmitter is sent to the terminal window for
display.
RS232TX
sending it out the "txd" line in a serial fashion. The user is responsible for
providing appropriate clk and clock enable (tx_clk) to achieve the desired
to adjust the clock_factor in order to generate good BAUD clocks from odd
However, the load will only be accepted when load_request is also high
(which just happens to coincide with tx_clk_1x inside of the state
only lasts for one single clk cycle, so be careful how you use it!) If the
"load_request" line is tied to "load," the unit will send data characters
not provided for 1.5 stop bits, only integral numbers of stop bits are allowed.
transmitted, although the length of the transmitter shift register will also
RS232RX
This block takes care of receiving an RS232 input word, from the
desired BAUD rate. Set it to anything between 2 and 16, inclusive. Values
higher than 16 will not "buy" much for you, and the state machine might not
work well for values less than four either, because of the difficulty in
sampling rxd at the "middle" of the bit time. However, it may be useful to
adjust the clock_factor around in order to generate good BAUD clocks from
Each time the "word_ready" line drives high the unit has put a
newly received data word into its output buffer, and is possibly already in
the process of receiving the next one. Note that support is not provided for
1.5 stop bits, only integral numbers of stop bits are allowed. However, a
selection >2 for number of stop bits will still work (it will simply receive
CLOCK DIVIDER
signal. I put it in a separate module because I did not know of another way to
CLOCK MULTIPLIER
configured to provide clocks at 16x the desired transmit BAUD rates for
RS232 serial I/O. This is done so that the rs232rx module can easily share
module has a BAUD rate selection input field of three bits. This field
"clock_gen" block which uses parameters to specify the desired values for
REG4PACK_CLRSET
four locations present in the module. In order to read data from a register
location, the we_i line must be inactive (low), and the "sel_i" signal must
also be active (high.) Then, the unit will drive the data bus. Writing is
similar - drive we_i active (high), make sel_i high, drive the write data onto
the data bus, and provide a "posedge clk_i" to store the data into the selected
register.
The registers are composed of d-flip-flops (DFFs), clocked by
the "pre" and "clr" input vectors. A "1" in the corresponding bit position has
priority is as follows: rst, clr, set, then normal read and write operations.
The clr and set operations are synchronous. They occur at the rising clock
registers become read-only locations, and the upper (4-N) registers remain
Thus, for N=2, then r0 and r1 are "read-only" locations (no actual registers
REG_8PACK
location, the we_i line must be inactive (low), and the "sel_i" signal must
also be active (high.) Then, the unit will drive the data bus. Writing is
similar - drive we_i active (high), make sel_i high, drive the write data onto
the data bus, and provide a "posedge clk_i" to store the data into the selected
and the upper (8-N) registers remain as R/W (storage registers,) for a
r3 are "read-only" locations (no actual registers are synthesized,) but r4, r5,
SQUARE_ WAVE_DDS
very simple: A counter advances in phase each clock cycle, and the most
significant bits are used to index into a waveform lookup table. This
particular version does not include the lookup table, because I am initially
looking for squarewave output only, so I am using the most significant bit of
the counter as the output. The frequency resolution of a DDS can be very
fine indeed, depending on how many bits are included in the phase
Fout = frequency/(2^DDS_BITS_PP)*Fclk
using a sine wave lookup table, with appropriate filtering. For the digital
squarewave output, such as that produced by this module, the output can
RAM
based systems. The data used in a program as well as the instructions for
which both read and write operations can be Performed. Any random
AUTOMATIC_BAUD_WITH_TRACKING
This condition signals the middle of a bit time, for use during
the verify stage. Also, this signal is used to advance the main count, instead
for the measurement (which would otherwise "truncate" any fraction of time
then latched into "measurement" when the state machine determines that the
During verify time (when the new candidate baud rate clock is
being tested) this counter is allowed to run freely, advancing once each
clk_i, but being reset when it reaches a total count of "measurement" clock
cycles.
BAUD COUNTER
and the signal "run" goes high. From then on, this counter is allowed to run
freely, advancing once each clk_i, but being reset when it reaches a total
count of "baud" clock cycles. This counter's reset signal is the output baud
rate clock.
SHIFT REGISTER
verification as they are "received" (sampled) using the candidate baud clock.
FLIP-FLOP
or not. Any target bits that do not match the received data at the sampling
edge, will cause the verify_failed bit to go high. This is what the state
this latch upon completion of the measurement/ interval. The value stored in
this latch is used for the baud clock generated during verify, but a different
is stored in this register after a good verify. The value stored in this latch is
FLIP-FLOP
or not. Initially following reset, there is no baud clock being produced. But,
tracking changes are made over time. Thus, this bit goes high as a result of
the first "verify_good" pulse, and it remains high forever, until the unit is
reset. This is state machine m1. It checks the status of the serial_dat_i line
and coordinates the measurement of the time interval of the first two bits of
STATE MACHINE
measurement is accepted, and the baud rate clock is driven onto the
filters out all characters which are not the desired target character for
It has also been tested with "text file transfer" in hyperterm and
simulated. It can also be fitted on a real FPGA board. The system the use of
characters.
Its Main applications are
RS232 Serial Communication
U A RT
EXTENT OF THE PROJECT
I also have a new version of "rs232_syscon" which Incorporate
clock speed. We can change baud rates, and it follows along when you hit
sessions.
controller" for debugging purposes. Specifically, the unit allows the user to
and write cycles on the Wishbone compatible bus. The command structure
is quite terse and spartan in nature, this is for the sake of the logic itself.
much as possible) the menus and command responses were kept as small as
possible. In most cases, the responses from the unit to the user consist of a
"newline" and one or two visible characters. The command structure
C O N C LU S I O N
synthesized and then using the design manager, ’place & Route ‘ is
performed.
APPENDIX
AU T O B AU D W I T H T R A C K I N G C O R E
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
use work.numeric_std.all;
ENTITY auto_baud_with_tracking IS
GENERIC (
-- CLOCK_FACTOR_PP can be from [2..16] inclusive.
-- Parameters
CLOCK_FACTOR_PP : integer := 8;
LOG2_MAX_COUNT_PP : integer := 16;
m1_idle : std_logic_vector(3 DOWNTO 0) := "0000";
m1_measure_0 : std_logic_vector(3 DOWNTO 0) := "0001";
m1_measure_1 : std_logic_vector(3 DOWNTO 0) := "0010";
m1_measure_2 : std_logic_vector(3 DOWNTO 0) := "0011";
m1_measure_3 : std_logic_vector(3 DOWNTO 0) := "0100";
m1_measure_4 : std_logic_vector(3 DOWNTO 0) := "0101";
m1_verify_0 : std_logic_vector(3 DOWNTO 0) := "1000";
m1_verify_1 : std_logic_vector(3 DOWNTO 0) := "1001";
m1_run : std_logic_vector(3 DOWNTO 0) := "0110";
m1_verify_failed : std_logic_vector(3 DOWNTO 0) := "0111");
PORT (
clk_i : IN std_logic;
reset_i : IN std_logic;
serial_dat_i : IN std_logic;
auto_baud_locked_o : OUT std_logic;
baud_clk_o : OUT std_logic);
END auto_baud_with_tracking;
PROCESS(clk_i,reset_i)
BEGIN
IF (reset_i = '1') THEN
clock_count <= "0000";
ELSE
IF (clear_counters = '1') THEN
clock_count <= "0000";
ELSE
IF (enable_clock_count = '1') THEN
IF (clock_count_rollover = '1') THEN
clock_count <= "0000";
ELSE
clock_count <= (clock_count + "0001");
END IF;
END IF;
END IF;
END IF;
if(clock_count = conv_std_logic_vector((CLOCK_FACTOR_PP - 1), 4)) then
clock_count_rollover <='1';
else
clock_count_rollover <='0';
end if;
if (clock_count = (conv_std_logic_vector((CLOCK_FACTOR_PP/2),4) - '1')) then
temp1<='1';
else
temp1<='0';
end if;
PROCESS(clk_i,reset_i)
BEGIN
IF (reset_i = '1') THEN
main_count <= (OTHERS => '0');
ELSE
IF (clear_counters = '1') THEN
main_count <= (OTHERS => '0');
ELSE
IF ((measure AND mid_bit_count) = '1') THEN
main_count <= main_count + "0000000000000001";
ELSE
IF (verify = '1') THEN
IF (main_count_rollover = '1') THEN
main_count <= (OTHERS => '0');
ELSE
main_count <= main_count + "0000000000000001";
END IF;
END IF;
END IF;
END IF;
END IF;
if(main_count = measurement) then
main_count_rollover <='1';
else
main_count_rollover <='0';
end if;
END PROCESS;
PROCESS(clk_i,reset_i)
BEGIN
IF (reset_i = '1') THEN
baud_count <= (OTHERS => '0');
ELSE
IF (run = '1') THEN
IF (baud_count_rollover = '1') THEN
baud_count <= (OTHERS => '0');
ELSE
baud_count <= baud_count + "0000000000000001";
END IF;
END IF;
END IF;
if(baud_count = baud) then
baud_count_rollover <= '1';
else
baud_count_rollover <= '0';
end if;
END PROCESS;
PROCESS(clk_i,reset_i)
BEGIN
IF (reset_i = '1') THEN
target_bits <= "010000110";
ELSE
IF (NOT verify = '1') THEN
target_bits <= "010000110";
END IF;
IF ((verify AND mid_bit_count) = '1') THEN
target_bits <= ('0' & target_bits(8 downto 1));
END IF;
END IF;
if (target_bits = "000000001") then
t1<='1';
else
t1<='0';
end if;
verify_done <= t1 AND verify AND mid_bit_count ;
END PROCESS;
PROCESS(clk_i,reset_i)
BEGIN
IF (reset_i = '1') THEN
character_miscompare <= '0';
ELSE
IF (idle = '1') THEN
character_miscompare <= '0';
END IF;
IF (((verify AND mid_bit_count) AND (target_bits(0) XOR serial_dat_i)) = '1')
THEN
character_miscompare <= '1';
END IF;
END IF;
END PROCESS;
PROCESS(clk_i,reset_i)
BEGIN
measurement <= (OTHERS => '1');
ELSE
IF (clear_counters = '1') THEN
measurement <= ('0' & main_count(15 downto 1));
END IF;
END IF;
END PROCESS;
PROCESS(clk_i,reset_i)
BEGIN
IF (reset_i = '1') THEN
baud <= (OTHERS => '1');
ELSE
IF (verify_good = '1') THEN
baud <= measurement;
END IF;
END IF;
END PROCESS;
PROCESS(clk_i,reset_i)
BEGIN
IF (reset_i = '1') THEN
run <= '0';
ELSE
IF (verify_good = '1') THEN
run <= '1';
END IF;
END IF;
END PROCESS;
baud_clk_o_xhdl2 <= baud_count_rollover ;
m1_state_register : PROCESS(clk_i,reset_i)
BEGIN
-- WAIT UNTIL (clk_i'EVENT AND clk_i = '1') OR (reset_i'EVENT AND reset_i =
'1');
IF (reset_i = '1') THEN
m1_state <= m1_idle;
ELSE
m1_state <= m1_next_state;
END IF;
END PROCESS;
m1_state_logic :
PROCESS(m1_state,mid_bit_count,serial_dat_i,verify_done,character_miscompare,run)
BEGIN
idle <= '0';
verify_good <= '0';
measure <= '0';
clear_counters <= '0';
verify <= '0';
CASE m1_state IS
WHEN "0000" =>
idle <= '1';
IF (serial_dat_i = '0') THEN
m1_next_state <= m1_measure_0;
ELSE
m1_next_state <= m1_idle;
END IF;
WHEN "0001" =>
measure <= '1';
IF ((mid_bit_count AND NOT serial_dat_i) = '1') THEN
m1_next_state <= m1_measure_1;
ELSE
IF ((mid_bit_count AND serial_dat_i) = '1') THEN
m1_next_state <= m1_idle;
ELSE
m1_next_state <= m1_measure_0;
END IF;
END IF;
WHEN "0010" =>
measure <= '1';
IF (serial_dat_i = '1') THEN
m1_next_state <= m1_measure_2;
ELSE
m1_next_state <= m1_measure_1;
END IF;
WHEN"0011" =>
measure <= '1';
IF ((mid_bit_count AND serial_dat_i) = '1') THEN
m1_next_state <= m1_measure_3;
ELSE
IF ((mid_bit_count AND NOT serial_dat_i) = '1') THEN
m1_next_state <= m1_idle;
ELSE
m1_next_state <= m1_measure_2;
END IF;
END IF;
WHEN "0100"=>
measure <= '1';
IF (NOT serial_dat_i = '1') THEN
m1_next_state <= m1_measure_4;
ELSE
m1_next_state <= m1_measure_3;
END IF;
WHEN "0101" =>
clear_counters <= '1';
m1_next_state <= m1_verify_0;
WHEN "1000"=>
verify <= '1';
IF (verify_done = '1') THEN
m1_next_state <= m1_verify_1;
ELSE
m1_next_state <= m1_verify_0;
END IF;
WHEN "1001"=>
IF (character_miscompare = '1') THEN
m1_next_state <= m1_verify_failed;
ELSE
m1_next_state <= m1_run;
END IF;
WHEN "0111"=>
clear_counters <= '1';
m1_next_state <= m1_idle;
WHEN "0110" =>
verify_good <= '1';
m1_next_state <= m1_idle;
WHEN OTHERS =>
m1_next_state <= m1_idle;
END CASE;
Reference
1. www.necel.com
2. www.cieloinc.com
3. www.ee.itb.ac.id
4. www.techfest.com
5. www.cisco.com
6. www.entmag.com
7. www.xilinx.com
CLOCK DIVIDER
CLOCK MULTIPLIER
REG_4_PACK_CLRSET
REG_8_PACK
SQUAREWAVE_DDS
RS232TX
AUTO_BAUD_WITH_TRACKING
CLOCK DIVIDER
CLOCK MULTIPLY
IBUF
IBUFG
OBUF
CLOCK DLL
REG4PACK_CLRSET
REG8PACK_CLRSET
SQUAREWAVE_DDS
RS232TX
RS232RX
RAM
AUTO_BAUD_WITH_TRACKING