Title: VHDL Introduction
1VHDL Introduction
2VHDL Introduction
- V- VHSIC
- Very High Speed Integrated Circuit
- H- Hardware
- D- Description
- L- Language
3VHDL Benefits
- Public Standard
- Technology and Process Independent
- Include technology via libraries
- Supports a variety of design methodologies
- Behavioral modeling
- Dataflow or RTL (Register Transfer Language)
Modeling - Structural or gate level modeling
4VHDL Benefits (cont)
- Supports Design Exchange
- VHDL Code can run on a variety of systems
- Supports Design Reuse
- Code objects can be used in multiple designs
- Supports Design Hierarchy
- Design can be implemented as interconnected
submodules
5VHDL Benefits (cont)
- Supports Synchronous and Asynchronous Designs
- Supports Design Simulation
- Functional (unit delay)
- Timing (actual delay)
- Supports Design Synthesis
- Hardware implementation of the design obtained
directly from VHDL code. - Supports Design Documentation
- Original purpose for VHDL Department of Defense
6VHDL Design Units
- Entity Declaration
- Describes external view of the design (e.g. I/O)
- Architecture Body (AB)
- Describes internal view of the design
- Configuration Declaration
- Package Declaration
- Library Declaration
- Package Body
7Architecture Body (AB)
- The architecture body contains the internal
description of the design entity. The VHDL
specification states that a single design entity
can contain multiple architecture bodies. Each
AB can be used to describe the design using a
different level of abstraction.
8VHDL Statement Terminator
- Each VHDL Statements is terminated using a
semicolon -
9VHDL Comment Operator
- To include a comment in VHDL, use the comment
operator - -- This is a comment
- -- This is an example of a comment
- y lt 0 -- can occur at any point
10Signal Assignment Operator
- To assign a value to a signal data object in
VHDL, we use the - signal assignment operator
- lt
- Example
- y lt 1 -- signal y is
assigned the value ONE
11Complete AND GATE Example
-- behavioral model (yc) process(a,b)
begin yc lt 0 if((a1) and
(b 1)) then yc lt
1 else yc lt 0 end
if end process End architecture test
- Library altera
- Use altera.maxplus2.all
- Library ieee
- Use ieee.std_logic_1164.all
- Use ieee.std_logic_arith.all
- Entity and_example is
- port(a,b in std_logic
- ya,yb,yc out std_logic)
- End entity and_example
- Architecture test of and_example is
- begin
- --- dataflow model (ya)
- ya lt a and b
- -- structural model (yb)
- and2a_7408 port map(a,b,yb)
-
12AND GATE Example (cont)
When synthesized, we obtain the following logic
circuit
Synthesis tool creates three AND gates.
Maxplus II Block Diagram
13VHDL Example - Hardware
- It is important to remember that VHDL is a
hardware language, so you must think and code
in hardware. - Statements within the architecture body run
concurrently. That is, order does not
matter!!! - Well introduce sequential statements later
when I introduce process blocks
14VHDL Example Hardware
-- Code Fragment A Architecture test of example
is begin y1 lt a and b y2 lt c and
d y lt y1 or y2 end architecture test
15VHDL Example Hardware
-- Code Fragment B Architecture test of example
is begin y lt y1 or y2 y2 lt c
and d y1 lt a and b end
architecture test
16VHDL Example Hardware
-- Code Fragment C Architecture test of example
is begin y2 lt c and d y lt y1
or y2 y1 lt a and b end
architecture test
All three code fragments produce the same result
17VHDL Syntax
18VHDL Syntax Entity Declaration
Describes I/O of the design. I/O Signals are
called ports. The syntax is Entity design_name
is port(signal1,signal2,..mode type
signal3,signal4,..mode type) End entity
design_name
19VHDL Syntax Entity Example
Entity my_example is port( a,b,c in std_logic
s in std_logic_vector(1
downto 0) e,f out std_logic
y out std_logic_vector(4 downto 0))
end entity my_example
Maxplus II Block Diagram
20Architecture Body Syntax
- Architecture name of entity_name is
- internal signal and constant declarations
- Begin
- Concurrent statement 1
- Concurrent statement 2
- Concurrent statement 3
- Concurrent statement 4
- End architecture name
21VHDL Program Template
- Library altera
- Use altera.maxplus2.all
- Library ieee
- Use ieee.std_logic_1164.all
- Use ieee.std_logic_arith.all
- Entity design_name is
- port(signal1,signal2,..mode type
- signal3,signal4,..mode type)
- End entity design_name
-
- Architecture name of entity_name is
- internal signal and constant declarations
- Begin
- Concurrent statement 1
- Concurrent statement 2
- Concurrent statement 3
- Concurrent statement 4
- End architecture name
22Simple Concurrent StatementsAssignment Operator
- Assignment operator lt
- Ex y lt a and b -- defines a AND gate
- For simulation purposes only, you may specify a
delay. - Ex y lt a and b after 10 ns
- This is useful if you want to also use VHDL to
generate a known test waveform or vector. This
is known as a test bench. However, we will
use Maxplus II to generate test vectors. Note,
you cannot specify a delay for synthesis
purposes.
23Simple Concurrent StatementsLogical Operators
- Logical operators
- And, or, nand, nor, xor, xnor, not
- Operates on std_logic or Boolean data objects
- All operators (except for the not operator)
require at least two arguments - Ex y lt a and b -- AND gate
24Simple Concurrent StatementsLogical Operators
- Logical operators
- Examples y lt a and not b
- Use parenthesis to define order of execution
- Ex ylt (a and b) or c y lt a
and (b or c)
25Complex Concurrent Statementswith-select-when
- with-select-when
- Syntax is
- with select_signal select
- signal_name lt value1 when
value1_of_select_sig, - value2 when
value2_of_select_sig, - value3 when
value3_of_select_sig, - value_default
when others
26Complex Concurrent StatementsWith-select-when
- Example---- library statements (not shown)
- entity my_test is port( a3,a2,a1,a0
in std_logic_vector(3 downto 0) - s in
std_logic_vector(1 downto 0) - y out
std_logic_vector(3 downto 0)) - end entity my_test architecture behavior
of my_test is - begin
- with s select
- y lt a3 when 11,
- a2 when 10,
- a1 when 01,
- a0 when others -- default
condition - end architecture behavior
27Complex Concurrent StatementsWith-select-when
- What is the logic expression for y?
- What is this in hardware?
- A 4-bit 4X1 MUX
A3
A2
Y
A1
A0
S
28VHDL Data Objects
- VHDL is an Object Oriented Programming (OOP)
Language. Objects can have values, attributes
and methods. We will primarily use the following
VHDL data objects - Signals
- Constants
- Variables
29Data ObjectsSignals
- SignalsSignals are data objects in which the
value of the object can be changed. There is an
implied or explicit delay between the signal
assignment and when the signal is updated. We
will use signals to represent nets (i.e. wires)
in our circuits. They can be implemented in
hardware. Signals are defined in port statements
and architecture declaration blocks.
30Data ObjectsConstants
- Constants Constants are data objects in which
the value of the object cannot be changed. They
are defined within an architecture or process
declaration block. They cannot be implemented in
hardware.
31Data ObjectsConstants
- Syntax
- constant name type value
- Example
- constant s0 std_logic_vector(1 downto 0)
01 - Notes
- Use a set of single apostrophes to enclose a
single bit (e.g. 1). - Use a set of quotations to enclose multiple bits
(e.g. 01).
32Data ObjectsVariables
- Variables Variables are data objects in which
the value of the object can be changed. This
change occurs instantaneously. Variables can
only be defined within a process declaration
block. They cannot be implemented in hardware.
More about variables later
33Sequential StatementsProcess Statements
In VHDL, sequential statements are executed
within a process block. Syntax is label
process (sensitivity list) constant
or variable declarations begin
sequential statements end
process label
The sensitivity list contains all of the inputs
to the process block.
34Sequential StatementsProcess Statements (cont)
A process block is considered a single
concurrent statement. Lets review our AND
example
35Sequential StatementsProcess Statements - Example
---- library statements entity and_example is
port(a,b in std_logic ya,yb,yc out
std_logic) End entity and_example Architecture
test of and_example is begin --- dataflow
model ya lt a and b ---
structural model a_7408 port map(a,b,yb)
-- Process Block process(a,b) begin
yc lt 0 if ((a1) and (b
1)) then yc lt 1 else yc lt 0
end if end process End architecture
test
36Sequential StatementsProcess Statements
When synthesized, we obtain the following logic
circuit
The process statement synthesizes into an AND
gate just like the dataflow and structural
statements. Note, the process block synthesized
AND gate runs concurrently with the other
synthesized AND gates.
37Sequential StatementsImplied Registers
Registers
38Sequential StatementsImplied Registers
Positive edge triggered D-FF with asynchronous
reset
Process (d,clock,reset) begin if
(reset 0) then q lt 0
elsif( clockevent and clock1) then
q lt d end if end process
In hardware, this becomes
A clockevent is a 0 to 1 or 1 to 0 transition on
the clock line.
39Sequential StatementsImplied Registers
- How does this produce a register?
- If reset 0, q is set to 0 (asynchronous
reset) - If clock line makes a transition from 0 to 1
- Clockevent and clock 1
- then q is assigned to d
- But, we have not defined an output for
- Reset 1,
- A non Clockevent , or
- ClockEvent and Clock 0
So, VHDL assumes we want to retain the current
value of q for these conditions and synthesizes a
D-FF for us.
40Sequential StatementsImplied Registers
We can easily extend this to a register block by
using a std_logic_vector datatype instead of a
std_logic datatype.
. Signal ns,psstd_logic_vector(7 downto
0) .. Process (ns,clock,reset) begin
if (reset 0) then ps lt
00000000 elsif( clockevent and
clock1) then ps lt ns
end if end process
In hardware, this becomes
41Sequential StatementsImplied Registers
We can also define a S0 (reset state) and use it
to reset the register.
. Signal ns,psstd_logic_vector(7 downto
0) Constant S0std_logic_vector(7 downto 0)
00000000 .. Process (ns,clock,reset)
begin if (reset 0) then
ps lt s0 --- use reset state elsif(
clockevent and clock1) then ps
lt ns end if end process
42Sequential StatementsCase -When Statement
Use a CASE-WHEN statement when priority is not
needed. All FSMs will be implemented using
Case-when statements. Syntax is
Case expression is when choice_1 gt
sequential statements when choice_2 gt
sequential statements
. when choice_n gt sequential
statements when others gt -- default
condition sequential statements end
case
43VHDL FSM Example 1 2-bit Up Counter
44VHDL FSM Example 1
S0 00
S1 01
S2 10
S3 11
Let
ps ns y
S0 S1 0
S1 S2 1
S2 S3 2
S3 S0 3
Let S0 reset state
45Recall Moore FSM
Next State
Present State
Output Vector
Input Vector
Clock
Feedback Path
Reset
Use a case statement to implement the
design since priority is not needed
46VHDL Code - Header Info
- --------------------------------------------------
-------------- - --
- -- Program fsm1.vhd
- --
- -- Description 2-bit up counter.
- --
- -- Author R.J. Perry
- -- Date
- -- Revisions
- --------------------------------------------------
------------- - -- Signal I/O
- --------------------------------------------------
-------------- - -- Signal name Direction
Description - -- clock,reset in
clock,reset - -- count out
output count - --------------------------------------------------
--------------
47VHDL Code - Entity Declaration
- -- Call Altera and IEEE packages
- library altera
- use altera.maxplus2.all
- library ieee
- use ieee.std_logic_1164.all
- use ieee.std_logic_arith.all
- use ieee.std_logic_unsigned.all
- -- define entity
- entity fsm1 is
- port ( clk,reset in std_logic
- count out std_logic_vector(1 downto 0)
- )
- end entity fsm1
-
48VHDL Code - Architecture Dec
- -- define architecture
- architecture fsm of fsm1 is
- -- define constants
- constant s0 std_logic_vector(1 downto 0)
"00" - constant s1 std_logic_vector(1 downto 0)
"01" - constant s2 std_logic_vector(1 downto 0)
"10" - constant s3 std_logic_vector(1 downto 0)
"11" - signal ns,ps std_logic_vector(1 downto 0)
- begin
-
49VHDL Code -- F Logic
- --
- -- this process executes the F logic
- --
- process ( ps)
- begin
- ns lt s0 -- This is the default
output - case ps is
- when s0 gt ns lt s1
- when s1 gt ns lt s2
- when s2 gt ns lt s3
- when s3 gt ns lt s0
- when others gt ns lt s0 --
default condition - end case
- end process
-
State Diagram for F Logic
Input into F logic
Note we only need to describe the
behavior VHDL will figure out the functional
relationships
50VHDL Code -- Register Logic
- --
- -- This process includes the registers
implicitly - --
- reg process (clk, reset, ns)
- begin
- if(reset '0') then
- ps lt s0
- elsif (clk'event and clk '1') then
- ps lt ns
- end if
- end process reg
Inputs to reg logic
51VHDL Code -- H Logic
- --
- -- Use concurrent statement to implement H Logic
- --
- count lt ps
- end architecture fsm
52Recall Gate Level Logic Diagram
53Maxplus II Produces
54Is this correct?
T Toggle FF
We have,
OK, same as before
OK, same as before
T input
How does this code fit into our Moore FSM
architecture?
55System Design Example