Digital Logic Design: VHDL Coding For Fpgas Unit 1
Digital Logic Design: VHDL Coding For Fpgas Unit 1
Digital Logic Design: VHDL Coding For Fpgas Unit 1
Daniel Llamocca
DESIGN FLOW (ISE Software)
Synthesis: It makes sure that the VHDL file is syntax free.
If ok, the logical circuit is ready for behavioral simulation.
Simulate Behavioral Model: It requires the creation of a
VHDL file in which we specify the stimuli to the logic
circuit. This file is called ‘testbench’.
Implement Design (Translate + Map + Place & Route):
Generate Programming File: Here, a configuration file
(bitstream) is generated. This file will configure the FPGA
so that the logic circuit is implemented on it.
Configure Target Device (iMPACT software): Here, the
configuration file (.bit file) previously created is
downloaded onto the FPGA. At this stage, we can verify
whether the actual hardware is actually working.
Daniel Llamocca
LOGIC DATA TYPES
Type: There are many ways to define data types in VHDL. A very common
IEEE standard is std_logic_1164. The following types are available:
std_logic, std_logic_vector, std_logic_2d
The ‘std_logic’ type define nine (9) possible states:
‘U’ : Uninitialized
‘X’ : Forced Unknown
‘0’ : Zero
‘1’ : One
‘Z’ : High impedance
‘W’ : Weak unknown
‘L’ : Weak Zero
‘H’ : Weak One
‘-’ : Don’t care
Other data types:
integer
array
User-defined
Daniel Llamocca
DATA TYPES:
Mode:
Physical characteristics of inputs/outputs of a logic circuit. The
following modes are available in VHDL:
Daniel Llamocca
LOGIC GATES IN VHDL
VHDL allows for the specification of Boolean functions
based on the following gates: AND, OR, NOT, XOR,
NAND, and NOR.
C
x
B
F
A y
Daniel Llamocca
LOGIC GATES IN VHDL
EXAMPLE: VHDL code: example.vhd
library ieee;
use ieee.std_logic_1164.all;
I/Os are specified here
entity example is
port ( A, B, C: in std_logic; A
F: out std_logic); B logic F
circuit
end example; C
Daniel Llamocca
TESTBENCH GENERATION
library ieee;
EXAMPLE: use ieee.std_logic_1164.all;
the outputs
We retrieve
Unit port ( A,B,C: in std_logic;
We provide
stimuli
# Outputs OFF(0)
Daniel Llamocca
VIVADO: I/O ASSIGNMENT
XDC file: Here, we map the I/Os of our logic circuit to physical
FPGA pins. In a board (e.g., Nexys-4), these FPGA pins are
wired to specific components: LEDs, switches, buttons, etc.
Example: Nexys-4 Artix-7 FPGA Board:
The inputs a, b, c are assigned to switches. The output f is
assigned to an LED (ON if F is ‘1’).
Vivado: The I/O standard and the pin must be specified for
every pin. The pin names are case-sensitive.
XDC file: example.xdc
# Inputs
set_property PACKAGE_PIN U9 [get_ports {a}]
set_property IOSTANDARD LVCMOS33 [get_ports {a}] FPGA pins: R7 U8 U9 T8
set_property PACKAGE_PIN U8 [get_ports {b}]
set_property IOSTANDARD LVCMOS33 [get_ports {b}] NEXYS 4
schematic names: SW2 SW1 SW0 LED0
set_property PACKAGE_PIN R7 [get_ports {c}] ON (1)
set_property IOSTANDARD LVCMOS33 [get_ports {c}]
OFF(0)
# Outputs
a b c f
set_property PACKAGE_PIN T8 [get_ports {f}] I/O VHDL names:
entity test is
port ( A: in std_logic_vector (3 downto 0);
-- A: |A3|A2|A1|A0|
y: out std_logic); A = A3A2A1A0
end test; A(3)
A(2)
y
architecture struct of test is A(1)
A(0)
begin
-- The circuit represents an AND gate
-- with 4 inputs: A(3), A(2), A(1), A(0)
y <= A(3) and A(2) and A(1) and A(0);
end struct;
Daniel Llamocca
std_logic_vector
In the example, we use the std_logic_vector type for an output signal.
library ieee;
use ieee.std_logic_1164.all;
entity tst is
port ( A,B: in std_logic;
F: out std_logic_vector (3 downto 0);
-- F: |F3|F2|F1|F0
end tst;
A B F = F3F2F1F0
architecture struct of tst is F(3)
begin F(2)
Daniel Llamocca
EXAMPLE: Security Combination
A lock is opened only when a certain combination of
switches exist: Switches: 01101011
The lock will be represented by 8 LEDs. Open Lock All
LEDS ON.
SW7 SW6 SW5 SW4 SW3 SW2 SW1 SW0
ON (1)
OFF (0)
LED7
LED6
LED5
LED4
LED3
LED2
LED1
LED0
sec_comb.zip: sec_comb.vhd, tb_sec_comb.vhd,
sec_comb.ucf
Daniel Llamocca