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

VHDL RTL Synthesis Basics

Uploaded by

Ahmed Ashraf
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
34 views

VHDL RTL Synthesis Basics

Uploaded by

Ahmed Ashraf
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 59

VHDL:

RTL Synthesis Basics

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 1 of 59


Goals
• To learn the basics of RTL synthesis.
• To be able to synthesize a digital system, given its VHDL model.
• To be able to relate VHDL code to its synthesized output.
• To appreciate the fact that synthesis is very sensitive to how the
VHDL code is written!
• To learn how to write VHDL code that is efficient at synthesis.
• To get an idea about the synthesis of integer subtypes.
• To understand the synthesis of combinational logic.
• To understand the use of VHDL in synthesizing sequential logic.
• To get familiar with synthesizable process templates.
• To learn the cases when latches and flip-flops are inferred.
• To know how tristate elements are inferred.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 2 of 59


RTL Synthesis
• Synthesis is an automatic method of converting a higher level of
abstraction (RTL) to a lower level of abstraction (gate level netlists).
• Synthesis produces technology-specific implementation from
technology-independent VHDL description.
• Not all VHDL can be used for synthesis. There are the VHDL subset
for synthesis and synthesis style description.
• Synthesis is very sensitive to how the VHDL code is written!
• Gate level netlists Technology
are optimized for libraries
area, speed, RTL The Gate-level
power, or description synthesis netlists
testability. Design process Design
constraints attributes

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 3 of 59


RTL Synthesis (Cont.)
• The essence of RTL is that you define all the registers in the system
and the transfers between those registers that occur on each clock
cycle (i.e., the combinational logic).

• Registers are described either:


1. explicitly through component instantiation, or
2. implicitly through inference (following a few simple rules)
• Combinational logic is described by: sequential control statements,
subprograms, or concurrent statements.

• RTL synthesis describes the behavior of system at each clock period.


• RTL synthesis is used for synchronous design.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 4 of 59


RTL Synthesis (Cont.)
• An RTL architecture can be divided into a datapath and control:
– Datapath: performs operations on data (i.e., ALU),
– Control: tells datapath, memory, etc. what to do.
• The datapath flows left to right, whereas the control flows bottom up.
• Critical path: critical timing path in a logical circuit is the longest
synthesizable path from primary inputs to primary outputs.
• The critical path in the circuit limits the maximum clock frequency.
• Synthesis tools examine all signal paths and spot the critical path.
Register
Data in Data out

Combinational
logic

Clock, set, reset signals Control signals

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 5 of 59


RTL Synthesis (Cont.)

It is recommended to use RTL code whenever possible as it provides the


following:

1. Readable code
2. Ability to use same code for synthesis and simulation

3. Portable code for migration to different technologies


4. Resusable code for later designs

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 6 of 59


Synthesis of Integer Subtypes
• Number of bits in hardware depends on the object type.
• Number of bits required to represent integer subtypes depends on the
largest value of the type.
• If an integer has negative values, 2’s complement format is used.
Example: 1 (Class) Show how each of the types below are synthesized.
SUBTYPE int 1 IS integer RANGE 0 TO 15;
SUBTYPE int 2 IS integer RANGE 10 TO 31;
SUBTYPE int 3 IS positive RANGE 25 DOWNTO 5;
TYPE int 4 IS RANGE -128 TO +15;

SIGNAL a: int 1; -- 4 bits unsigned integer


SIGNAL b: int 2; -- 5 bits unsigned integer
SIGNAL c: int 3; -- 5 bits unsigned integer
SIGNAL d: int 4; -- 8 bits two’s complement integer
SIGNAL e: integer; -- 32 bits two’s complement integer

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 7 of 59


Synthesis of Signal Assignment Statements
Example: 2 (Class) Show how the following selective concurrent signal
assignment statement is synthesized.
LIBRARY ieee;
USE ieee.std logic 1164.ALL;
ENTITY mux IS
PORT( a, b, c, d: IN std logic vector (3 DOWNTO 0);
s: IN std logic vector (1 DOWNTO 0);
x: OUT std logic vector (3 DOWNTO 0));
END ENTITY mux;
ARCHITECTURE rtl OF mux IS BEGIN a[3:0] 0
WITH s SELECT
b[3:0] 1
x <= a WHEN "00", x[3:0]
b WHEN "01", c[3:0]
c WHEN "10",
2
d WHEN "11", d[3:0] 3
"- - - - " WHEN OTHERS;
END ARCHITECTURE rtl;
s[1:0]
Don’t care simplifies synthesized logic.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 8 of 59


Synthesis of Process Statements
• Process statements can by synthesized to either:
1. Pure combinational logic, or
2. A sequential logic with latches or flip-flips inferred from the
given VHDL code.
• For pure combinational logic synthesis of process statements, 3 rules
must be obeyed:
1. The sensitivity list must be complete (i.e., contains all signals
read by the process).
2. There must be no incomplete assignments (i.e., all outputs must
be assigned for all input conditions).
3. There must be no feedback (i.e., no signal or variable may be read
by the process and then subsequently assigned by the process).

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 9 of 59


Synthesis of Variables and Signals
Example: 3 (Class) Show how the assignment statements below are
synthesized.
ENTITY gate IS
PORT( a, b, c, d: IN bit;
z: OUT bit);
END ENTITY gate;

ARCHITECTURE behav OF gate IS


BEGIN
pg: PROCESS (a, b, c, d) IS
VARIABLE t1, t2: bit;
a t1
BEGIN b
t1 := a XOR b; z
t2 := c XOR d;
z <= t1 NOR t2; c
END PROCESS pg;
END ARCHITECTURE behav; d t2

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 10 of 59


Synthesis of Variables and Signals (Cont.)
Example: 4 (Class) Show how the following assignment statements are
synthesized.
ENTITY gate IS
PORT( a, b, c: IN bit;
z: OUT bit);
END ENTITY gate;

ARCHITECTURE behav OF gate IS


BEGIN
pg: PROCESS (a, b, c) IS
VARIABLE t1, t2: bit;
BEGIN
t1 := a AND b;
t2 := t1 XOR c; t1
a t1 t2 z
t1 := a NAND t2;
z <= t1 NOR t2;
b
END PROCESS pg; c
END ARCHITECTURE behav;

Variable t1 has generated two different wires.


Copyright © 2002-2020 VHDL: RTL Synthesis Basics 11 of 59
Synthesis of Variables and Signals (Cont.)
Example: 5 (Class) Show how the following assignment statements are
synthesized.
ENTITY gate IS
PORT( s1, s2, s3: IN bit;
s4: OUT bit);
END ENTITY gate;

ARCHITECTURE behav OF gate IS BEGIN


p1: PROCESS (s1, s2, s3) IS
VARIABLE v: bit;
BEGIN
v := s1 AND s2; s1 v
s4 <= v OR s3;
END PROCESS p1;
s2 s4
END ARCHITECTURE behav; s3
A latch is not required as v is temporary and need not be saved in a latch.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 12 of 59


Synthesis of Variables and Signals (Cont.)
Example: 6 (Class) Comment on the synthesis output if you reverse the
order of execution of the sequential statements in Example 5.
ENTITY gate IS
PORT( s1, s2, s3: IN bit;
s4: OUT bit);
END ENTITY gate;
ARCHITECTURE behav OF gate IS
BEGIN
p1: PROCESS (s1, s2, s3) IS
VARIABLE v: bit;
BEGIN
s4 <= v OR s3;
v := s1 AND s2;
END PROCESS p1;
END ARCHITECTURE behav;

This code contains a feedback. v is read by the process and then assigned
by it. v needs to retain its value for the next process run. Compiler might
generate an error, produce the previous circuit, or infer a latch.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 13 of 59


Synthesis of For-Loop Statements
FOR-LOOPs are the only ones typically supported for synthesis.
Example: 7 (Class) Show how the following for-loop is synthesized.
ENTITY example IS
GENERIC( n: integer := 4);
PORT( a: IN bit vector (0 TO n-1);
f: OUT bit);
END ENTITY example;

ARCHITECTURE behav OF example IS


BEGIN
fl: PROCESS (a) IS
VARIABLE v: bit;
BEGIN
v := ’0’;
FOR j IN a’range LOOP
v := v XOR a(j); 0
END LOOP;
a(0) f
f <= v; a(1)
END PROCESS fl; a(2)
END ARCHITECTURE behav; a(3)

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 14 of 59


Synthesis of For-Loop Statements (Cont.)
Example: 8 (Class) Show how the following DEMUX is synthesized.
LIBRARY ieee;
USE ieee.std logic 1164.ALL;
USE ieee.numeric std.ALL; -- for the to integer function

ENTITY demux IS
PORT( a: IN unsigned (1 DOWNTO 0);
d: IN std logic;
z: OUT unsigned (3 DOWNTO 0));
END ENTITY demux;

ARCHITECTURE rtl OF demux IS


BEGIN
dm: PROCESS (a, d) IS
VARIABLE temp: integer RANGE 0 TO 3;
BEGIN
temp := to integer (a); -- converts an unsigned into an integer
.
.
.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 15 of 59


Synthesis of For-Loop Statements (Cont.)
Example 8: (Cont.) d
.
.
.
a[0]
z[3]
FOR j IN z’range LOOP
IF temp = j THEN a[1]
z(j) <= d; z[2]
ELSE
z(j) <= ’0’;
z[1]
END IF;
END LOOP
END PROCESS dm; z[0]
END ARCHITECTURE rtl;

• NOR’s are used instead of AND’s for area/speed optimizations.

• When the for-loop is expanded, we get the following IF statements:


IF temp = 0 THEN z(0) <= d; ELSE z(0) <= ’0’; END IF;
IF temp = 1 THEN z(1) <= d; ELSE z(1) <= ’0’; END IF;
IF temp = 2 THEN z(2) <= d; ELSE z(2) <= ’0’; END IF;
IF temp = 3 THEN z(3) <= d; ELSE z(3) <= ’0’; END IF;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 16 of 59


Inferring Latches
• A transparent latch will be inferred while synthesizing a process in
two situations:
1. Some branches of IF or CASE statements are incompletely
specified and no default output values are defined before these
two statements.
2. A clock level detection condition is checked in IF or WAIT (or
even in signal assignment statement (conditional or selective)).

• In other words, a latch is inferred if a path through the code exists


such that a particular variable or signal is not assigned a new value.

• The latch will hold the value of that variable or signal.


• On the other hand, a latch will not be generated if a variable or signal
is assigned a value in all branches of the IF or CASE statements.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 17 of 59


Synthesis of IF Statements

IF statements synthesize to either elementary gates or muxs.

IF s THEN
y <= a;
ELSE
y <= b;
END IF;

b s
s y
b 0 y
a a 1

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 18 of 59


Synthesis of IF Statements (Cont.)
Example: 9 (Class) Show how the IF statement below is synthesized.
ENTITY sequence IS
PORT( x, e, f: IN bit;
m: IN boolean;
c: OUT bit);
END ENTITY sequence;

ARCHITECTURE comb OF sequence IS


SIGNAL r: bit;
BEGIN
ps: PROCESS (x, e, f, m, r) IS
BEGIN
r <= e OR x; m
IF m THEN
c <= r AND f;
ELSE f 0
c <= f; c
END IF;
END PROCESS ps; e 1
END ARCHITECTURE comb; x r
Copyright © 2002-2020 VHDL: RTL Synthesis Basics 19 of 59
Synthesis of IF Statements (Cont.)
Example: 10 (Class) Show how the IF statement below is synthesized.
ENTITY circuit IS
PORT( a, b, x, y, z: IN bit;
f: OUT bit);
END ENTITY circuit;
ARCHITECTURE model OF circuit IS BEGIN
p1: PROCESS (a, b, x, y, z) IS
VARIABLE v: bit;
BEGIN
IF x = ’1’ AND y = ’1’ THEN
v := a;
ELSE
z
v := b; y
END IF; x
IF z = ’0’ THEN 0 f
v := NOT v;
END IF;
b 0
f <= v; 1 v
END PROCESS p1;
a 1 v
END ARCHITECTURE model;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 20 of 59


Synthesis of IF Statements (Cont.)
Example: 11 (Class) Show how the IF statement below is synthesized.
ENTITY ct IS
PORT( a, b, c, x, y, z: IN bit;
f: OUT bit);
END ENTITY ct;

ARCHITECTURE model OF ct IS
BEGIN
p2: PROCESS (a, b, c, x, y, z) IS
BEGIN
f <= ’0’;
x
IF x = ’0’ THEN
y
f <= a;
ELSIF y = ’0’ THEN
z
a 0
f <= b; f
b 0
ELSIF z = ’1’ THEN
0 0 1
f <= c;
END IF;
1
END PROCESS p2; c 1
END ARCHITECTURE model;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 21 of 59


Synthesis of IF Statements (Cont.)
Example: 12 (Home) Build a circuit that takes two single-bit inputs and
asserts its output when the second input is greater than the first one.
Example: 13 (Class) Show how the IF statement below is synthesized.
ENTITY compare IS
PORT( a, b: IN bit;
z: OUT bit);
END ENTITY compare;

ARCHITECTURE test OF compare IS


BEGIN
pc: PROCESS (a, b) IS
BEGIN
IF b > a THEN
z <= b;
a
ELSE
z <= a; b z
END IF;
END PROCESS pc;
END ARCHITECTURE test;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 22 of 59


Synthesis of IF Statements (Cont.)
Example: 14 (Class) Show how this priority encoder is synthesized.
ENTITY priority IS priority
PORT( sel: IN bit vector (0 TO 3);
z: OUT bit vector (0 TO 2));
END ENTITY priority; sel[0:3] z[0:2]
ARCHITECTURE behav OF priority IS BEGIN
pp: PROCESS (sel) IS BEGIN
IF sel(0) = ’1’ THEN
z <= "000";
ELSIF sel(1) = ’1’ THEN
z <= "001"; sel[2]
ELSIF sel(2) = ’1’ THEN
z[2]
z <= "010";
ELSIF sel(3) = ’1’ THEN sel[0]
z <= "011"; sel[1]
ELSE z[0]
z <= "111";
END IF; sel[3] z[1]
END PROCESS pp;
END ARCHITECTURE behav;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 23 of 59


Synthesis of IF Statements (Cont.)
Example: 15 (Class) Show how the following code for a latch will be
synthesized.
ENTITY latch delay IS
GENERIC( delay: time := 1 ns);
PORT( a, en: IN bit;
q, qn: OUT bit); a q
d q
END ENTITY latch delay;
ARCHITECTURE behav OF latch delay IS BEGIN
pl: PROCESS (a, en) IS BEGIN clk qn qn
en
IF en = ’1’ THEN
q <= a AFTER delay;
qn <= NOT (a) AFTER delay;
END IF;
END PROCESS pl;
END ARCHITECTURE behav;

• Optimization uses the qn output instead of installing another latch.

• Rule: Synthesis ignores inertial and transport delays.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 24 of 59


Synthesis of IF Statements (Cont.)
Example: 16 (Class) Show how the IF statement below is synthesized.
ENTITY gate IS
PORT( a, b: IN bit;
c: OUT bit);
END ENTITY gate;
ARCHITECTURE behav OF gate IS
BEGIN
pl: PROCESS (a, b) IS
VARIABLE v: bit; a v c
d q
BEGIN
IF b = ’0’ THEN
v := a; b clk qn
END IF;
c <= NOT (v);
END PROCESS pl;
END ARCHITECTURE behav;

• v is not assigned in the ELSE branch of IF statement. This implies a


latch to keep the value of v when b = ’1’.
• If c was inside the IF statement, it would have been connected to qn.
Copyright © 2002-2020 VHDL: RTL Synthesis Basics 25 of 59
Synthesis of IF Statements (Cont.)
Example: 17 (Class) Show how the IF statement below is synthesized.
ENTITY latch 3 IS
PORT( a, b, c, d, en: IN bit;
q: OUT bit);
END ENTITY latch 3;
ARCHITECTURE behave 3 OF latch 3 IS
SIGNAL n: bit;
BEGIN
pl: PROCESS (a, b, c, d, en, n) IS
VARIABLE m: bit;
a
BEGIN
b m
IF en = ’1’ THEN q
m := a NAND b;
c d q
d d q n
n <= c NAND d;
q <= m NOR n;
clk qn clk qn
END IF; en
END PROCESS pl;
END ARCHITECTURE behave 3;

• No need to latch m since the variable is used after it is defined.

• A latch is needed for n since its old value is used every process run.
Copyright © 2002-2020 VHDL: RTL Synthesis Basics 26 of 59
Synthesis of IF Statements (Cont.)
Example: 18 (Class) Show how the increment-by-one circuit below is
synthesized.
LIBRARY ieee; d q
z[0]
USE ieee.std logic 1164.ALL;
USE ieee.numeric std.ALL; clk qn
ENTITY increment IS
PORT( inc: IN bit;
z: OUT unsigned (0 TO 1)); d q
z[1]
END ENTITY increment;
ARCHITECTURE behav OF increment IS clk qn
BEGIN inc
pi: PROCESS (inc) IS
VARIABLE temp: unsigned (0 TO 1) := (OTHERS => ’0’);
BEGIN
IF inc = ’1’ THEN
temp := temp + 1;
END IF;
z <= temp;
END PROCESS pi;
END ARCHITECTURE behav;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 27 of 59


Synthesis of CASE Statements
• CASE statements synthesize to MUXs or elementary gates.
• A latch is inferred if some branches of CASE statement are
unspecified.
• If NULL is used in any of the branches, a latch is inferred.
• In other words, a latch is inferred if a path through the code exists
such that a particular variable or signal is not assigned a new value.
• The latch will hold the value of the signal.
• If we have a CASE statement and do not want a latch, then we must
use OTHERS and must assign a value to the output in every branch.
• Examples:
WHEN OTHERS => y := "0000 0000";
WHEN OTHERS => y := "- - - - - - - - ";

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 28 of 59


Synthesis of CASE Statements (Cont.)
Example: 19 (Class) Show how the CASE statement below is
synthesized.
ENTITY mux IS
PORT( a, b, c, d: IN bit vector (3 DOWNTO 0);
s: IN bit vector (1 DOWNTO 0);
x: OUT bit vector (3 DOWNTO 0));
END ENTITY mux;

ARCHITECTURE rtl OF mux IS BEGIN


sl: PROCESS (a, b, c, d, s) IS
a[3:0] 0
BEGIN
CASE s IS b[3:0] 1
WHEN "00" => x <= a; x[3:0]
WHEN "01" => x <= b; c[3:0] 2
WHEN "10" => x <= c;
WHEN "11" => x <= d; d[3:0] 3
END CASE;
END PROCESS sl;
END ARCHITECTURE rtl; s[1:0]

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 29 of 59


Synthesis of CASE Statements (Cont.)
Example: 20 (Class) Show how the following 3-to-6 decoder with an
enable is synthesized.

inputs outputs
En a2 a1 a0 y5 y4 y3 y2 y1 y0
0 x x x 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 1
1 0 0 1 0 0 0 0 1 0
1 0 1 0 0 0 0 1 0 0
1 0 1 1 0 0 1 0 0 0
1 1 0 0 0 1 0 0 0 0
1 1 0 1 1 0 0 0 0 0

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 30 of 59


Synthesis of CASE Statements (Cont.)
Example 20: (Cont.)

LIBRARY ieee;
USE ieee.numeric bit.ALL;

ENTITY decoder IS
PORT( a: IN integer RANGE 0 TO 7;
en: IN bit;
y: OUT unsigned (5 DOWNTO 0));
END ENTITY decoder;

ARCHITECTURE design OF decoder IS


BEGIN
pd: PROCESS (a, en) IS
BEGIN
IF en = ’0’ THEN
y <= o"00";
ELSE
.
.
.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 31 of 59


Synthesis of CASE Statements (Cont.)
en
Example 20: (Cont.) a[2:0]
a[0]

a[1]
.
.
. a[2]
y[0]
CASE a IS
y[1]
WHEN 0 => y <= o"01";
WHEN 1 => y <= o"02"; y[2]

WHEN 2 => y <= o"04"; y[3]

WHEN 3 => y <= o"10"; y[4]


WHEN 4 => y <= o"20";
y[5]
WHEN 5 => y <= o"40";
WHEN OTHERS => y <= o"00"; y[5:0]

END CASE;
END IF;
END PROCESS pd;
END ARCHITECTURE design;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 32 of 59


Synthesis of CASE Statements (Cont.)
Example: 21 (Class) Show how this CASE statement is synthesized.
PACKAGE collect IS
TYPE state IS (s0, s1, s2, s3);
END PACKAGE collect;

USE WORK.collect.ALL;
ENTITY state update IS
PORT( current state: IN state;
z: OUT integer RANGE 0 TO 3);
END ENTITY state update;
ARCHITECTURE update OF state update IS
BEGIN
cs: PROCESS (current state) IS
BEGIN
CASE current state IS
WHEN s0 | s3 => z <= 0;
WHEN s1 => z <= 3;
WHEN OTHERS => NULL;
END CASE;
END PROCESS cs;
END ARCHITECTURE update;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 33 of 59


Synthesis of CASE Statements (Cont.)
Example 21: (Cont.)

A latch is inferred since z is not assigned a value in the OTHERS


statement even though z is defined in every other branch of CASE
statement.

current_state[0] z[0]
d q

clk qn

d q z[1]

current_state[1] clk qn

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 34 of 59


Synthesis of CASE Statements (Cont.)
Example: 22 (Home) Show how the encoder written using the CASE
statement below is synthesized.
ENTITY latch case IS
PORT (a: IN integer RANGE 0 TO 15;
y: OUT integer RANGE 0 TO 4);
END ENTITY latch case;
ARCHITECTURE rtl OF latch case IS BEGIN
p1: PROCESS (a) BEGIN
CASE a IS
WHEN 0 TO 3 | 5 => y <= 1;
WHEN 6 TO 8 | 10 TO 13 => y <= 2;
WHEN 4 | 9 => y <= 3;
WHEN 15 => y <= 4;
WHEN OTHERS => NULL;
END CASE;
END PROCESS p1;
END ARCHITECTURE rtl;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 35 of 59


Synthesis of CASE Statements (Cont.)
Example: 23 (Home) Show how this CASE statement is synthesized.
PACKAGE types IS
TYPE primecolor IS (red, green, blue);
END PACKAGE types;

LIBRARY ieee;
USE ieee.std logic 1164.ALL;
USE ieee.numeric std.ALL;
USE WORK.types.ALL;

ENTITY latch nested IS


PORT( screencolor: IN primecolor;
number: IN unsigned (1 DOWNTO 0);
a: IN unsigned (3 DOWNTO 0) := "0000";
y: OUT unsigned (3 DOWNTO 0));
END ENTITY latch nested;

ARCHITECTURE rtl OF latch nested IS


BEGIN
.
.
.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 36 of 59


Synthesis of CASE Statements (Cont.)
Example 23: (Cont.)
.
.
.
pc: PROCESS (screencolor, number, a) IS
VARIABLE y var: unsigned (3 DOWNTO 0) := "0000";
BEGIN
CASE screencolor IS
WHEN red => y var := a;
WHEN green => y var := a + 1;
WHEN blue => CASE number IS
WHEN "00" => y var := a;
WHEN "01" => y var := a + 1;
WHEN "10" => y var := a + 2;
WHEN OTHERS => NULL;
END CASE;
WHEN OTHERS => y var:= a + 1;
END CASE;
y <= y var;
END PROCESS pc;
END ARCHITECTURE rtl;

Rule: Synthesis ignores default and initial values.


Copyright © 2002-2020 VHDL: RTL Synthesis Basics 37 of 59
Inferring Flip-Flops
• A flip-flop is inferred in a process if the following conditions are all
satisfied:
– A clock edge detection condition is used in IF or WAIT
statements.
– The process sensitivity list includes the clock and nothing else
except set and reset signals.
– No other statements should be written before or after the
IF/WAIT statement in the process, except reset and set statements.
• Multiple IF statements will selectively infer flip-flops.
• Examples of using clock edge detection conditions:
WAIT UNTIL clock = ’1’ AND clock’event;
WAIT UNTIL rising edge (clock);
IF clock = ’0’ AND clock’event THEN · · ·
IF falling edge (clock) THEN · · ·

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 38 of 59


Inferring Flip-Flops (Cont.)
Example: 24 (Class) Show how the following IF statement is
synthesized.
LIBRARY ieee;
USE ieee.std logic 1164.ALL;

ENTITY ff IS x s
PORT( x, clk: IN std logic;
d q
s: OUT std logic);
END ENTITY ff;
clk qn
ARCHITECTURE ff OF ff IS
BEGIN
f: PROCESS (clk) IS
BEGIN
IF rising edge (clk) THEN
s <= NOT x;
END IF;
END PROCESS f;
END ARCHITECTURE ff;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 39 of 59


Synthesis of WAIT Statements
• Statements after WAIT execute synchronously with clock edge.
• Hence the WAIT statement is synthesized as an edge-triggered
flip-flop.
• Synthesis tools allow only one WAIT statement in the whole process.
It is not possible to model combinational logic in that process.
• On the other hand, IF statements allow defining combinational logic
and inferred latches and flip-flops in the same process.
• Sequential logic is synthesized using a process statement with a
special form:
pw: PROCESS IS BEGIN
WAIT UNTIL clock condition;
-- Synchronous logic described which is
-- executed when clock level or edge occurs.
END PROCESS pw;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 40 of 59


Synthesis of WAIT Statements (Cont.)
• WAIT UNTIL is supported for synthesis under two conditions:
1. WAIT statement must be the first statement in the process.
2. The boolean condition in WAIT UNTIL statement must have one
of the following forms to indicate falling or rising clock edge.
Clock of type std logic.
WAIT UNTIL clock = clock value;
WAIT UNTIL clock = clock value AND clock’event;
WAIT UNTIL rising edge (clock);
WAIT UNTIL falling edge (clock);

• The WAIT statement delays the execution of the whole process until
its expression becomes true.
• This means that all other variable/signal assignment statements in the
process will infer flip-flops.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 41 of 59


Synthesis of WAIT Statements (Cont.)
Example: 25 (Class) Show how Example 9 synchronized is synthesized.
LIBRARY ieee;
USE ieee.std logic 1164.ALL;
ENTITY sequence IS
PORT( e, x, f, clk: IN std logic;
m: IN boolean;
c: OUT std logic); -- c uses a flip-flop with input select
END ENTITY sequence;
ARCHITECTURE test OF sequence IS
SIGNAL r: std logic;
BEGIN
ps: PROCESS IS BEGIN
WAIT UNTIL rising edge (clk);
r <= e OR x; e r
d q c
x d1 q
IF m THEN
c <= r AND f; d0
qn
ELSE
sd
c <= f;
f qn
END IF;
END PROCESS ps; m
END ARCHITECTURE test; clk

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 42 of 59


Synthesis of WAIT Statements (Cont.)
Example: 26 (Class) Show how this WAIT statement is synthesized.
LIBRARY ieee;
USE ieee.std logic 1164.ALL;

ENTITY reg IS
PORT( clk, en: IN std logic;
data: IN std logic vector (0 TO 3);
reg q: OUT std logic vector (0 To 3));
END ENTITY reg;

ARCHITECTURE behav OF reg IS


BEGIN
sy: PROCESS IS
BEGIN
WAIT UNTIL falling edge (clk);
IF en = ’0’ THEN
reg q <= data;
END IF
END PROCESS sy;
END ARCHITECTURE behav;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 43 of 59


Synthesis of WAIT Statements (Cont.)
Example 26: (Cont.)
data[3] d q reg_a[3]

clk qn

data[2] q reg_a[2]
d

en qn

data[1] d q reg_a[1]

qn

data[0] d q reg_a[0]

qn

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 44 of 59


Synthesis of Asynchronous Set or Reset
Example: 27 (Class) Show how asynchronous reset is synthesized.
rs: PROCESS (clock, reset)
BEGIN d q
IF reset = ’1’ THEN
q <= ’0’;
ELSIF rising edge (clock) THEN clock
q <= d;
qn
END IF; reset
END PROCESS rs;

Example: 28 (Class) Show how asynchronous set is synthesized.


st: PROCESS (clock, set)
BEGIN set
IF set = ’1’ THEN d q
q <= ’1’;
ELSIF rising edge (clock) THEN
q <= d;
clock
END IF; qn
END PROCESS st;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 45 of 59


Synthesis of Asynchronous Set or Reset (Cont.)
• Clocked logic with asynchronous reset or set is synthesized by
testing the level of the asynchronous control signal before testing for
the clock edge.

• In fact, the form of the process must be exactly as shown before.


• Both the clock and the asynchronous reset or set must be in the
sensitivity list of the process with nothing else.
• The process must contain one IF statement, with no other statements
before or after that IF statement.

• The IF statement must contain exactly one ELSIF part with no ELSE
part.
• The first condition of the IF statement must test the level of the
asynchronous set or reset and nothing else.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 46 of 59


Synthesis of Asynchronous Set or Reset (Cont.)
• The statements in the first branch of the IF statement must contain
assignments to reset or set all flip-flops inferred by the process.

• The second condition of the IF statement (the ELSIF part) must test
for the clock edge and nothing else.
• The second branch of the IF statement may contain any number and
combination of synthesizable sequential statements.
• The reset, set, and clock signals must not be used anywhere in the
process except in the sensitivity list and IF conditions as described
above.

• All flip-flops inferred from the second branch of the IF statement


must be reset or set in the first branch, and all flip-flops reset or set in
the first branch must be inferred in the second branch.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 47 of 59


Synthesis of Procedures and Functions
• Synthesis tools require that procedures and functions:
– represent blocks of combinational logic,
– do not detect edges or contain WAIT statements.
• Out and inout parameters may be synthesized as registers if the
procedure or function is called from a clocked process.
Example: 29 (Home) Apply above VHDL rules on synthesizing
procedures and functions on the code below.
LIBRARY ieee;
USE ieee.std logic 1164.ALL;
USE ieee.numeric std.ALL;
ENTITY counter IS
PORT( clock, reset, load: IN bit;
start, stop: IN unsigned (3 DOWNTO 0);
count: INOUT unsigned (3 DOWNTO 0));
END ENTITY counter;
ARCHITECTURE rtl OF counter IS
.
.
.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 48 of 59


Synthesis of Procedures and Functions (Cont.)
Example.29: (Cont.)
.
.
PROCEDURE counting( SIGNAL load: bit; SIGNAL start, stop: unsigned;
SIGNAL count: INOUT unsigned) IS
BEGIN
IF load = ’1’ THEN
count <= start;
ELSIF count < stop THEN
count <= count + 1;
ELSE
count <= count + 0;
END IF;
END PROCEDURE counting;
BEGIN
pc: PROCESS (clock, reset) IS BEGIN
IF reset = ’1’ THEN
count <= (OTHERS => ’0’);
ELSIF clock = ’1’ and clock’event THEN
counting (load, start, stop, count);
END IF;
END PROCESS pc;
END ARCHITECTURE rtl;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 49 of 59


Synthesis of Finite-State Machines (FSM)
Example: 30 (Class) Model the following FSM using a two-process
architecture. Represent states using integers. (Hint: the shown FSM has
Moore and Mealy outputs.) Show how the modelled FSM is synthesized.
Assume that IF statements are synthesized using muxs.

u/inc

0 1
[c] [c]
u d
d/dec
Notes:
• When an input is not specified on an FSM, it is a don’t care.
• When an output is not specified on an FSM, it is a zero value.
Copyright © 2002-2020 VHDL: RTL Synthesis Basics 50 of 59
Synthesis of Finite-State Machines (FSM) (Cont.)
Example 30: (Cont.)

LIBRARY ieee;
USE ieee.std logic 1164.ALL;
ENTITY source IS
PORT( reset, u, d: IN bit;
clk: IN std logic;
inc, dec, c: OUT bit);
END ENTITY source;
ARCHITECTURE fsm OF source IS
SIGNAL current state, next state: integer RANGE 0 TO 1;
BEGIN
ps: PROCESS (clk, reset) IS BEGIN
IF reset = ’1’ THEN
current state <= 0;
ELSIF rising edge (clk) THEN
current state <= next state;
END IF;
END PROCESS ps;
.
.
.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 51 of 59


Synthesis of Finite-State Machines (FSM) (Cont.)
Example 30:. (Cont.)
.
.
ns: PROCESS (current state, u, d) IS BEGIN
CASE current state IS
WHEN 0 =>
c <= ’0’; -- Moore output
IF u = ’1’ THEN
inc <= ’1’; dec <= ’0’; next state <= 1;
ELSE
inc <= ’0’; dec <= ’0’; next state <= 0;
END IF;
WHEN 1 =>
c <= ’1’;
IF d = ’1’ THEN
inc <= ’0’; dec <= ’1’; next state <= 0;
ELSE
inc <= ’0’; dec <= ’0’; next state <= 1;
END IF;
END CASE;
END PROCESS ns;
END ARCHITECTURE fsm;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 52 of 59


Synthesis of Finite-State Machines (FSM) (Cont.)

inc

dec
sel
in0
u 0
out c
in1 d q
d 1
qn
clk reset
reset

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 53 of 59


Inferring Tristate Elements

• To create tristate logic we must use std logic type since it has
’Z’ as one of its possible values.

• We get tristate elements when the value ’Z’ is assigned to a target


value.
• It is possible to combine inferring tristate gates with memory
elements (flip-flops and latches).

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 54 of 59


Inferring Tristate Elements (Cont.)
Example: 31 (Class) Show how the code below is synthesized.
LIBRARY ieee;
USE ieee.std logic 1164.ALL;
ENTITY state3 IS
PORT( en: IN std logic;
d in: IN std logic vector (3 DOWNTO 0);
d out: OUT std logic vector (3 DOWNTO 0));
END ENTITY state3;
ARCHITECTURE rtl OF state3 IS BEGIN
p1: PROCESS (en, d in) IS BEGIN
IF en = ’1’ THEN
d out (0) <= d in (0) XNOR d in (1);
ELSE
d out (0) <= ’Z’;
END IF;
CASE en IS
WHEN ’1’ => d out (1) <= d in (2) NOR d in (3);
WHEN OTHERS => d out (1) <= ’Z’;
END CASE;
END PROCESS p1;
.
.
.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 55 of 59


Inferring Tristate Elements (Cont.)
Example 31: (Cont.)
.
.
.
d out (2) <=d in (1) NAND d in (2) WHEN en = ’1’ ELSE ’Z’;
WITH en SELECT
d out (3) <=d in (3) WHEN ’1’,
’Z’ WHEN OTHERS;
END ARCHITECTURE rtl;

d_in[3:0]
d_in(3) d_out(3)
d_in(2) d_out(2)
d_in(1)
d_in(3)
d_out(1)
d_in(2)
d_in(1) d_out(0)
d_in(0)
en d_out[3:0]

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 56 of 59


Inferring Tristate Elements (Cont.)
Example: 32 (Home) Show how the code below is synthesized.
LIBRARY ieee;
USE ieee.std logic 1164.ALL;

ENTITY prebus IS
PORT( my in: IN std logic vector (7 DOWNTO 0);
sel: IN std logic;
my out: OUT std logic vector (7 DOWNTO 0));
END ENTITY prebus;

ARCHITECTURE maxpld OF prebus IS


BEGIN
my out <= my in WHEN sel = ’1’ ELSE
(OTHERS => ’Z’);
END ARCHITECTURE maxpld;

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 57 of 59


Inferring Tristate Elements (Cont.)
Example: 33 (Class) Show how the code below is synthesized.
LIBRARY ieee;
USE ieee.std logic 1164.ALL;

ENTITY trireg IS
PORT( trien, clock, le, din: IN std logic;
ffout, latchout: OUT std logic);
END ENTITY trireg;
ARCHITECTURE mixed OF trireg IS
BEGIN
ff: PROCESS (trien, clock) IS
BEGIN
IF trien = ’0’ THEN
ffout <= ’Z’;
ELSIF rising edge (clock) THEN
ffout <= din;
END IF;
END PROCESS ff;
.
.
.

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 58 of 59


Inferring Tristate Elements (Cont.)
Example 33: (Cont.)
.
.
.
d q
latch: PROCESS (trien, le, din) IS
variable temp: std logic;
clk qn
BEGIN
temp := NOT (trien) XNOR le;
IF temp = ’0’ THEN din
IF trien = ’0’ THEN d q
latchout
latchout <= ’Z’; le
clk qn
ELSE
trien
latchout <= din;
END IF;
END IF; ‘0' d q
END PROCESS latch;
END ARCHITECTURE mixed; qn

d q
ffout
clock
qn

Copyright © 2002-2020 VHDL: RTL Synthesis Basics 59 of 59

You might also like