Introduction to VHDL.

Slides:



Advertisements
Similar presentations
Verilog Intro: Part 1.
Advertisements

1 Lecture 13 VHDL 3/16/09. 2 VHDL VHDL is a hardware description language. The behavior of a digital system can be described (specified) by writing a.
History TTL-logic PAL (Programmable Array Logic)
VHDL ELEC 418 Advanced Digital Systems Dr. Ron Hayne Images Courtesy of Thomson Engineering.
Introduction to VHDL (Lecture #5) ECE 331 – Digital System Design The slides included herein were taken from the materials accompanying Fundamentals of.
Comprehensive VHDL Module 6 Types November Comprehensive VHDL: Types Copyright © 2000 Doulos Types Aim ©To understand the use and synthesis.
VHDL Data Types Module F3.1. VHDL Data Types Scalar Integer Enumerated Real (floating point)* Physical* Composite Array Record Access (pointers)* * Not.
VHDL Quick Start Peter J. Ashenden The University of Adelaide.
FPGAs and VHDL Lecture L12.1. FPGAs and VHDL Field Programmable Gate Arrays (FPGAs) VHDL –2 x 1 MUX –4 x 1 MUX –An Adder –Binary-to-BCD Converter –A Register.
Introduction to VHDL CSCE 496/896: Embedded Systems Witawas Srisa-an.
ELEN 468 Lecture 191 ELEN 468 Advanced Logic Design Lecture 19 VHDL.
FPGAs and VHDL Lecture L13.1 Sections 13.1 – 13.3.
VHDL And Synthesis Review. VHDL In Detail Things that we will look at: –Port and Types –Arithmetic Operators –Design styles for Synthesis.
VHDL. What is VHDL? VHDL: VHSIC Hardware Description Language  VHSIC: Very High Speed Integrated Circuit 7/2/ R.H.Khade.
VHDL Asutosh Kar Asst. Prof. in IIIT, Bhubaneswar.
ECE 2372 Modern Digital System Design
1 Part I: VHDL CODING. 2 Design StructureData TypesOperators and AttributesConcurrent DesignSequential DesignSignals and VariablesState Machines A VHDL.
System Arch 2008 (Fire Tom Wada) /10/9 Field Programmable Gate Array.
VHDL – Dataflow and Structural Modeling and Testbenches ENGIN 341 – Advanced Digital Design University of Massachusetts Boston Department of Engineering.
A VHDL Tutorial ENG2410. ENG241/VHDL Tutorial2 Goals Introduce the students to the following: –VHDL as Hardware description language. –How to describe.
The Xilinx Spartan-3E FPGA family. Field Programmable Gate Array (FPGA) Configurable Logic Block (CLB) –Look-up table (LUT) –Register –Logic circuit Adder.
陳慶瀚 機器智慧與自動化技術 (MIAT) 實驗室 國立中央大學資工系 2009 年 10 月 8 日 ESD-04 VHDL 硬體描述語言概論 VHDL Hardware Description Language.
Lecture 2 VHDL: Introduction Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
1 Introduction to VHDL Spring What is VHDL? VHDL can be uses to model and synthesise digital systems. VHDL = VHSIC Hardware Description Language.
Introduction to VLSI Design – Lec01. Chapter 1 Introduction to VLSI Systems Lecture # 6 Computer-Aided Design Technology for VLSI.
Fall 2004EE 3563 Digital Systems Design EE 3563 VHDL – Basic Language Elements  Identifiers: –basic identifier: composed of a sequence of one or more.
Lecture #8 Page 1 Lecture #8 Agenda 1.VHDL : Operators 2.VHDL : Signal Assignments Announcements 1.HW #4 assigned ECE 4110– Digital Logic Design.
Copyright(c) 1996 W. B. Ligon III1 Getting Started with VHDL VHDL code is composed of a number of entities Entities describe the interface of the component.
VHDL Very High Speed Integrated Circuit Hardware Description Language Shiraz University of shiraz spring 2011.
Introductory project. Development systems Design Entry –Foundation ISE –Third party tools Mentor Graphics: FPGA Advantage Celoxica: DK Design Suite Design.
Electrical and Computer Engineering University of Cyprus LAB 1: VHDL.
Sequential statements. If statement [if_label:] if boolean_expression then {sequential_statement} {elsif boolean_expression then {sequential_statement}}
Introduction to VHDL. VHDL DARPA, VHSIC (Very High Speed Integrated Circuits) program Different manufacturers Standard language to describe –Structure.
1 Introduction to VHDL Part 2 Fall We will use Std_logic And, Or have same precedence See slide 8 of part 1.
CEC 220 Digital Circuit Design Introduction to VHDL Wed, February 25 CEC 220 Digital Circuit Design Slide 1 of 19.
© 조준동 2008 ECE C03 Lecture 121 Lecture 12 Introduction to VHDL Hai Zhou ECE 303 Advanced Digital Design Spring 2002.
04/26/20031 ECE 551: Digital System Design & Synthesis Lecture Set : Introduction to VHDL 12.2: VHDL versus Verilog (Separate File)
VHDL Programming Fundamentals Presented By Dr. Pradyut Kumar Biswal Department of Electronics, IIIT Bhubaneswar.
Scalar Data Types and Operations 大同大學 資訊工程系 副教授 鄭福炯
VHDL Tutorial.
Case Study: Xilinx Synthesis Tool (XST). Arrays & Records 2.
CEC 220 Digital Circuit Design Introduction to VHDL Wed, Oct 14 CEC 220 Digital Circuit Design Slide 1 of 19.
1 Introduction to Engineering Spring 2007 Lecture 18: Digital Tools 2.
Introduction to the FPGA and Labs
IAY 0600 Digital Systems Design
Introduction To VHDL 홍 원 의.
Basic Language Concepts
Subject Name: FUNDAMENTALS OF HDL Subject Code: 10EC45
Design Entry: Schematic Capture and VHDL
Operators Assignment Operators Logical Operators Relational Operators
VHDL Basics.
Introduction Introduction to VHDL Entities Signals Data & Scalar Types
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
Field Programmable Gate Array
Field Programmable Gate Array
ECE 434 Advanced Digital System L17
Field Programmable Gate Array
CHAPTER 10 Introduction to VHDL
Peter J. Ashenden The University of Adelaide
Week 5, Verilog & Full Adder
VHDL VHSIC Hardware Description Language VHSIC
CPE/EE 422/522 Advanced Logic Design L11
ECE 434 Advanced Digital System L10
Founded in Silicon Valley in 1984
VHDL Tutorial.
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
Data Flow Description of Combinational-Circuit Building Blocks
Data Flow Description of Combinational-Circuit Building Blocks
VHDL Data Types Module F3.1.
EEL4712 Digital Design (VHDL Tutorial).
Presentation transcript:

Introduction to VHDL

VHDL DARPA, VHSIC (Very High Speed Integrated Circuits) program Different manufacturers Standard language to describe Structure Function VHDL (VHSIC Hardware Description Language) Based on ADA

VHDL Requirements 1987, IEEE Standard 1076, VHDL-87 Revisions: Describe structure Specification Simulation Synthesis 1987, IEEE Standard 1076, VHDL-87 Revisions: 1992-1993, VHDL-93 1998-2001, VHDL-2001

Domains and Levels of Modeling

VHDL Modeling Concepts Entity Black box Describe connections of the module Port types: in, out, inout Architecture Define operation details More than one architecture for each entity entity reg4 is port ( d0, d1, d2, d3, en, clk : in bit; q0, q1, q2, q3 : out bit ); end reg4;

Behavioral Model architecture behav of reg4 is begin storage : process is variable stored_d0, stored_d1, stored_d2, stored_d3 : bit; if en = '1' and clk = '1' then stored_d0 := d0; stored_d1 := d1; stored_d2 := d2; stored_d3 := d3; end if; q0 <= stored_d0 after 5 ns; q1 <= stored_d1 after 5 ns; q2 <= stored_d2 after 5 ns; q3 <= stored_d3 after 5 ns; wait on d0, d1, d2, d3, en, clk; end process storage; end architecture behav;

Structural Model

Structural Model entity d_latch is port ( d, clk : in bit; q : out bit ); end d_latch; architecture basic of d_latch is begin latch_behavior : process is if clk = '1' then q <= d after 2 ns; end if; wait on clk, d; end process latch_behavior; end architecture basic; entity and2 is port ( a, b : in bit; y : out bit ); end and2; architecture basic of and2 is begin and2_behavior : process is y <= a and b after 2 ns; wait on a, b; end process and2_behavior; end architecture basic;

Structural Model architecture struct of reg4 is component d_latch is port ( d, clk : in bit; q : out bit ); end component; component and2 is port ( a, b : in bit; y : out bit ); signal int_clk : bit; begin bit0 : d_latch port map(d => d0, clk => int_clk, q => q0); bit1 : d_latch port map(d => d1, clk => int_clk, q => q1); bit2 : d_latch port map(d => d2, clk => int_clk, q => q2); bit3 : d_latch port map(d => d3, clk => int_clk, q => q3); gate : and2 port map(a => en, b => clk, y => int_clk); end architecture struct;

Lexical elements Comment Identifiers variable data : bit; --description of variable data --this is a long ... --... long comment Identifiers ‘A’ to ‘Z’, ‘a’ to ‘z’, ‘0’ to ‘9’ and ‘_’ Must start with an alphabetic letter No successive underlines, not end with underline Case insensitive: Cat, CAT, cat, CaT are the same

Numbers Decimal literals Real literals Number base 23, 0, 146 Real literals 23.1, 0.0, 3.14159 46E5, 1E+12, 34.0e-08 Number base 2#111111011#, 16#FD#, 16#0fd#, 8#0375# 2#0.1000#, 8#0.4#, 12#0.6# 123_456, 3.141_592_6, 2#1111_1100#

Characters, strings, bit strings ‘A’, ‘z’, ‘,’, ‘’’, ‘ ‘ Strings ”A string”, ”” --empty string Bit strings Binary, B”0110001”, b”0110_0111” Octal, O”372”, o”00” Hex, X”FA”, x”0d”

Predefined types Enumeration type Integer Real Physical type Bits: type bit is (’0’, ’1’); Integer 32bit singed integer Real 32bit single precision floating point number Physical type Time: 1fs Type conversion real(123) integer(1.23)

Signal, Constant and Variable declaration signal identifier {, ...}: subtype_indication [:= expression]; constant identifier {, ...}: subtype_indication [:= expression]; variable identifier {, ...}: subtype_indication [:= expression]; signal d_reg : bit := ’1’; signal accumulator : integer := 0; constant number_of_bytes : integer := 4; constant number_of_bits : integer := 8* number_of_bytes; constant e : real := 2.718281828; constant prop_delay : time := 3 ns; constant size_limit, count_limit : integer := 255; variable index : integer := 0; variable sum, average, largest : real; variable start, finish : time := 0 ns;

Expressions and operators ** exponentiation abs absolute value not negation * multiplication / division mod modulo rem remainder + identity - negation + addition - subtraction & concatenation sll shift-left logical srl shift-right logical sla shift-left arithmetic sra shift-right arithmetic rol rotate left ror rotate right = equality /= inequality < less than <= less than or equal > greater than >= greater than or equal and logical and or logical or nand negated logical and nor negated logical or xor exclusive or xnor negated exclusive or

Type declarations type identifier is type_definition Integer types type_definition <= range expr. (to | downto) expr. type apples is range 0 to 100; type oranges is range 0 to 100; oranges:=apples; --illegal!!! constant number_of_bits : integer :=32; type bit_index is range 0 to number_of_bits-1;

Subtypes subtype identifier is type_mark [ range expr. (to | downto) expr.] Predefinied subtypes subtype natural is integer range 0 to highest_integer; subtype positive is integer range 1 to highest_integer;

Floating-point types type_definition <= range expr. (to | downto) expr. type input_level is range -10.0 to +10.0; type probability is range 0.0 to 1.0;

Physical types range expr. (to | downto) expr. units identifier; {identifier = physical_literal;} end units [identifier]; physical_literal <= [decimal_literal | based_literal] unit_name

Physical types type resistance is range 0 to 1E9 units ohm; end units resistance; type length is range 0 to 1E9 um; --primary unit micron mm=1000 um; --metric units m=1000 mm; inch=25400 um; --English units foot=12 inch; end units length;

Physical types type time is range impl. def. units fs; ps=1000 fs; ns=1000 ps; us=1000 ns; ms=1000 us; sec=1000 ms; min=60 sec; hr=60 min; end units;

Arrays type type_name is array (expr ( to | downto) expr) of subtype; type word is array (0 to 31) of bit type word is array (31 downto 0) of bit; type type_name is array (natural range <>) of subtype; type bit_vector is array (natural range <> ) of bit; signal csr_offset : bit_vector(2 downto 1);

Library and package library ieee; use ieee.std_logic_1164.all; Standard types, operators, functions std_logic, std_logic_vector use ieee.numeric_std.all; Signed and unsigned types, operators, functions

Standard logic Standard logic type std_ulogic is ( ’U’, --Uninitialized ’X’, --Forcing unknown ’0’, --Forcing 0 ’1’, --Forcing 1 ’Z’, --High impedance ’W’, --Weak unknown ’L’, --Weak 0 ’H’, --Weak 1 ’-’, --Don’t care );

Architecture Body architecture identifier of entity_name is {block_declarative_item} begin {concurrent_statement} end [architecture][identifier];

Process statement [process_label:] process [(signal_name{,…}|all)] [is] {process_declarative_item} begin {sequential_statement} end process [process_label];

Variable and signal assignment signal s_y : std_logic; variable v_y : std_logic; s_y <= not (a or b) after 5 ns; v_y := not (a or b);

If statement [if_label:] if boolean_expression then {sequential_statement} {elsif boolean_expression then {sequential_statement}} {else boolean_expression end if; [if_label];

If statement if en = '1' then stored_value := data_in; end if; if sel = 0 then result <= input_0; -- executed if sel = 0 else result <= input_1; -- executed if sel /= 0

If statement type mode_type is (immediate, other_mode); type opcode_type is (load, add, subtract, other_opcode); if mode = immediate then operand := immed_operand; elsif opcode = load or opcode = add or opcode = subtract then operand := memory_operand; else operand := address_operand; end if;

Case statement [case_label:] case expression is (when choices => {sequential_statement}) {...} end case [case_label]; choices <= (simple_expression | discrete_range | others){ | ...}

Case statement type alu_func is (pass1, pass2, add, subtract); case func is when pass1 => result := operand1; when pass2 => result := operand2; when add => result := operand1 + operand2; when subtract => result := operand1 - operand2; end case;

Case statement type opcodes is (nop, add, subtract, load, store, jump, jumpsub, branch, halt); subtype control_transfer_opcodes is opcodes range jump to branch; case opcode is when load | add | subtract => operand := memory_operand; when store | jump | jumpsub | branch => operand := address_operand; when others => operand := 0; end case;

Null statement type opcode_type is (nop, add, subtract); case opcode is when add => Acc := Acc + operand; when subtract => Acc := Acc - operand; when nop => null; end case;

Loop, For loop and While loop [loop_label:] loop {sequential_statement} end loop [loop_label]; while boolean_expression loop end loop [loop_label:]; for identifier in discrete_range loop

Exit and next statement loop if condition then exit; end if; end loop; exit when condition; next; next when condition; next loop_label; next loop_label when condition;

Discrete event simulation Transaction After signal assignment, new value at simulation time T Active signal Signal is updated at time T Event New value /= old value

Discrete event simulation Initialization phase Each signal is given an initial value Simulation time is set to 0 Each process is activated Signals assigned, transactions scheduled Simulation cycle Signal update Advance time to the next transaction Perform all scheduled transactions for this time Process execution Wake processes which is sensitive to the previous events New events may occur

Delta delay Signal assignment without after equivalent to a delay of 0 fs BUT the signal value does not change as soon as the signal assignment statement is executed Assignment schedules a transaction for the signal The process does NOT see the effect of the assignment until it next time resumes

Signal attributes S’event S’active S’last_event S’last_active True if there is an event on S in the current simulation cycle, false otherwise S’active True if there is a transaction on S in the current simulation cycle, false otherwise S’last_event The time interval since the last event on S S’last_active The time interval since the last transaction on S S’last_value The value of S just before the last event on S

Test Benches

Test Benches entity test_bench is end entity test_bench; architecture test_reg4 of test_bench is signal d0, d1, d2, d3, en, clk, q0, q1, q2, q3 : bit; begin dut : entity work.reg4(behav) port map ( d0, d1, d2, d3, en, clk, q0, q1, q2, q3 ); stimulus : process is d0 <= '1'; d1 <= '1'; d2 <= '1'; d3 <= '1'; en <= '0'; clk <= '0'; wait for 20 ns; en <= '1'; wait for 20 ns; clk <= '1'; wait for 20 ns; d0 <= '0'; d1 <= '0'; d2 <= '0'; d3 <= '0'; wait for 20 ns; en <= '0'; wait for 20 ns; -- . . . wait; end process stimulus; end architecture test_reg4;

Latch With Positive Gate process(G,D) begin if G=’1’ then Q <= D; end if; end process;

D Flip-Flop process(c) begin if c’event and c=’1’ then q <= d; end if; end process;

D Flip-Flop and asynchronous reset process(c,clr) begin if clr=‘1’ then q <= ‘0’; elsif c’event and c=‘0’ then q <= d; end if; end process;

D Flip-Flop and Synchronous Set process(c) begin if c’event and c=‘1’ then if s=‘1’ then q <= ‘1’; else q <= d; end if; end process;

D Flip-Flop and Clock Enable process(c) begin if c’event and c=‘1’ then if ce=‘1’ then q <= d; end if; end process;

D Flip-Flop, Asynchronous Set, and Clock Enable process(c,pre) begin if pre=‘1’ then q <= ‘1’; elsif c’event and c=‘1’ then if ce=’1’ then q <= d; end if; end process;

Tristate buffer process(I,T) begin if T=’0’ then O <= I; else O <= ’Z’; end if; end process;

4-to-1 1-Bit MUX Using IF Statement process(a,b,c,d,s) begin if s="00" then o<=a; elsif s="01" then o<=b; elsif s="10" then o<=c; else o<=d; end if; end process;

4-to-1 1-Bit MUX Using Case Statement process(a,b,c,d,s) begin case s is when "00" => o<=a; when "01" => o<=b; when "10" => o<=c; when others => o<= d; end case; end process;

The Xilinx Spartan-3E FPGA family

Field Programmable Gate Array (FPGA) Configurable Logic Block (CLB) Look-up table (LUT) Register Logic circuit Adder Multiplier Memory Microprocessor Input/Output Block (IOB) Programmable interconnect

Xilinx FPGA families High performance Low cost Mid-range Virtex (1998) 768-12.2K LC, 0.22µm Virtex-E/EM (1999) 768-32.4K LC, 0.18µm Virtex-II (2000) 512-93.1K LC, 0.15µm Virtex-II Pro/X (2002) 2.8K-111.2K LC, 0.13µm Virtex-4 (2004) [LX, FX, SX] 12.2K-178.1K LC, 90nm Virtex-5 (2006) [LX, LXT, SXT] 19.2-207.3K LC, 65nm Virtex-6 (2009) [LXT, SXT, HXT] 46.5K-474.2K LC, 40nm Virtex-7 (2010) 178.8K-1.22M LC, 28nm Low cost Spartan-II (2000) 0.22µm Spartan-IIE (2001) 0.18µm Spartan-3 (2003) 1.5K-66.5K LC, 90nm Spartan-3E (2005) 1.9K-29.5K LC, 90nm Spartan-6 (2009) 1.5K-92.1K LC, 45nm Artix-7 (2010) 11.2K-220K LC, 28nm Mid-range Kintex-7 (2010) 19K-254K LC, 28nm

Spartan-3E architecture

Interconnect Types

Resources in a Slice

Carry Logic

Block RAM

Dedicated 18x18bit Multiplier

Resource comparison Virtex-5 Virtex-6 Virtex-7 Spartan-6 Artix-7 Kintex-7 Spartan-3E Slice 51,840 118,560 305,400 23,040 55,050 63,500 1,164 BRAM 36Kbit 516 1,064 1,800 134 335 795 10 Mult 18x25bit 1,056 2,016 3,960 182 700 1,540 20 I/O 1,200 498 450 500 232 Serial I/O 24 48+24 72+16 8 4 16 - V5 6.5Gb/s, V6 6.6Gb/s + 11Gb/s, V7 13.1Gb/s + 28.05 Gb/s, S6 3.2Gb/s, A7 3.75Gb/s, K7 10.3125Gb/s,

Introductory project

Design Flow Design Entry Design Synthesis Schematic Hardware description language (VHDL, Verilog) Intellectual Property IP blocks Xilinx CoreGen Design Synthesis High level description -> Circuit

Design Flow Design Verification Behavioral Simulation Checking high level description of the circuit Functional Simulation Checking synthesized circuit Timing Simulation Static Timing Analysis Searching critical paths In-Circuit Verification

Design Flow Optimization (NGDBuild) Mapping (MAP) Merge multiple design files into a single netlist Mapping (MAP) Group logical symbols from the netlist (gates) into physical components (slices and IOBs)

Design Flow Place & Route (PAR): Bitstream Generation (BitGen) Place components onto the chip, connect the components, and extract timing data into reports Bitstream Generation (BitGen) Create configuration file

Create new project Select: File -> New Project Choose project directory and name (myand2) Set top-level source type to HDL

Set Device Properties (Nexys2) Select: Family: Spartan3E Device: XC3S500E Package: FG320 Speed: -5 Synthesis tool: XST Simulator: ISIM Preferred Language: VHDL

Set Device Properties (Atlys) Select: Family: Spartan6 Device: XC6SLX45 Package: CS324 Speed: -3 Synthesis tool: XST Simulator: ISIM Preferred Language: VHDL

Create new source Click New Source… Select VHDL Module from the list Choose File name (myand2)

Define Module Set two inputs (a,b) and one output (c)

Project Navigator Source files Built-in editor / Report summary Processes / Utilities Console

Simple VHDL source

Create Testbench Right click myand2 - behavioral in the sources window and select New Source Select VHDL Test Bench from the list Choose File name (myand2_tb)

Associate testbench

Find testbench files From the Sources for: list select Behavioral Simulation Open myand2_tb

Create stimulus

The user interface of the ModelSim VHDL simulator

Design Synthesis Set Sources for to Implementation Select myand2 - Behavioral In the Processes for window double click Synthesize - XST

View RTL Schematic

View Technology Schematic

Create Implementation Constraints Right click myand2 - behavioral in the sources window and select New Source Select VHDL Test Bench from the list Choose File name (myand2)

Assign Package Pins Select: myand2.ucf In the Processes for window open User Constraints double click Edit Constraints (Text)

Assign Package Pins (Nexys2) Connect pins of the design to physical FPGA pins NET "a" LOC = "H18"; NET "b" LOC = "G18"; NET "c" LOC = "J14";

Assign Package Pins (Atlys) Connect pins of the design to physical FPGA pins NET "a" LOC = "A10"; NET "b" LOC = "D14"; NET "c" LOC = "U18";

Implement Design In the Processes for window double click Implement Design Check Place and Route Report for LOCed IBUFs/IOBs

Set Programming File Properties (Nexys2 only) Right click Generate Programming File in the Processes for window and select Properties… Set Startup Options / FPGA Start-Up Clock to JTAG Clock Double click Generate Programming File

Configuring the device Attach and Turn On Nexys2 board Start Digilent / Adept / ExPort Click Initialize Chain Bypass configuration ROM

Configuring the device Browse to the project directory Select myand2.bit Click Program Chain Test your first circuit implemented on FPGA

Full Adder

4-bit Ripple Carry Adder