1 of 205

Automatizovani dizajn elektronskih kola i sistemaSimulacija elektronskih kola - SEK

VHDL Programiranje

Specijalističke studije, Master studije, ETF Podgorica

Primijenjene studije, ETF

Prof dr Radovan Stojanović

Univerzitet Crne Gore

Akademska, 2024

2 of 205

��1. U V O D

    • Opis kursa.
    • Zašto automatizovani dizajn (AD)?
    • AD methodologija.

3 of 205

Opis kursa (1)

  • Ciljevi:

    • Upoznavanje sa osnovnim principima i tehnikama automatizovanog dizajna i simulacije elektronskih kola i hardverskih sistema za različite namjene (elektronika, telekomunikacija, računari itd).

    • Razumijevanje nivoa apstrakcije.

    • Upoznavanje i ovladavanje sa elementima HDL-a (Hardware description language) kao i osnovnim CAD (Computer aided design) alatima za opis, simulaciju i sintezu digitalnih elektronskih kola.

    • Upoznavanje i ovladavanje sa izabranim softverima i alatima za simulaciju analognih elektronskih kola.

    • Praktično projektovanje digitalnih elektronskih kola i sistema u FPGA tehnologiji.

4 of 205

Opis kursa (2)

  • Metodologija nastave:
    • Teorijsko-praktičnog tipa: predavanja, prezentacije, lab vježbe, praktični problemi, seminarski, lektira.
  • Metodologija provjere znanja:
    • Svake godine se mijenja, pogledati na sajtu predmeta.

5 of 205

Opis kursa (3)

  • Metodologija ocjenjivanja:
    • >= 90%: A.
    • >= 80%, < 90%: B.
    • >= 70%, < 80%: C.
    • >= 60%, < 70%: D.
    • >= 50%, < 60%: E.
    • < 50%: F.
  • Kredit:
    • 6 ECTS poena?
  • Softverski alati u procesu nastave:
    • Altera, sada Intel, Quartus II Ver 9.1 (web free) ili jedna od zadnjih
  • Hardverski alati u procesu nastave:
    • EP1C6 Cyclone family II i DG2 i DG115 education board
    • Dokumentacija na sajtu predmeta

6 of 205

Opis kursa (4)

  • Literatura:
    • R. Stojanovic, AUTOMATIZOVANO PROJEKTOVANJE DIGITALNIH SISTEMA, TEMPUS EDICIJA 2008.
    • WEB site.
    • LAB CD
    • Dodatne knjige, (Internet, Članci, Popularne i stručne knjige)
  • WEB sajt kursa
  • Mjesto, vrijeme, konsultacije:
    • Laboratorija za elektroniku, fleksibilno vrijeme.
  • Kontakt:
    • Tel. 068 317 729
    • stox@ucg.ac.me

7 of 205

Lektira

Na našem jeziku i engleskom (VHDL):

8 of 205

Uvod

9 of 205

Evolucija

10 of 205

Jack Kilby, TI, 1959 konstruiše prvo

integrisano kolo (IC).

Robert Noyce

Fairchild

Intel, 1959, razvija

prvo pravo IC.

Integarcija

11 of 205

1961: TI i Fairchild izbacuju prvo logičko IC (dupli flip flop sa 4 tranzistora), >$50!

Integarcija…

1963: Već imamo 4 flip-flopa.

1967: Fairchild prvi “programabilno” (semi-custom) čip. Tranzistori (organizovani u kolone) mogli su biti konfigurisani u različita kola (~150 logičkih kapija).

12 of 205

Electronics, Volume 38, Number 8, April 19, 1965

Murovo proročanstvo

  • Samo par godina poslije početka Gordon Mur proriče
  • Broj tranzistora na čipu se udvostručava svakih 2 godine

13 of 205

Murovo proročanstvo…

1968: Prvi operacioni pojačavač, početak integrisane analogne ere

1968: Noyce and Moore leave Fairchild to

form Intel.

1970: Intel, 1k bit RAM, 1103.

1971: Ted Hoff u Intelu projektuje prvi

microprocessor, 4004, 4-bit buss, 108 KHz,

2300 transistora, 10 um process.

14 of 205

1972: 8080 pronadjen, 8 bit, 3,500 tranz.

Murovo proročanstvo...

  • 1976 – prvi mikrokontroler u automobilu (GeneralMotors)

• 1978 – prvi 16-bitni mikroprocesor (Intel 8086).

• 1981 – prvi IBM PC XT

• 1984 – prva 1 Mb memorija.

• 1995 – prva eksperimentalna 1 Gb memorija

• 1985 – prvi 32-bitni procesor (Intel 80386)

• 1989 – Intel 80486, 1.2 miliona tranzistora.

• 1993 – Intel Pentium I.

• 2000 – Nevjerovatan rast mobilne telefonije u svetu.

1982: Time-ov čovjek

godine, kompjuter

15 of 205

Kontraverza

“I think there is a world market for maybe five computers” IBM Chairman Thomas Watson, 1943

“640,000 bytes of memory ought to be enough for anybody”, Bill Gates, 1981.

“The Internet will catastrophically collapse in 1996”, Robert Metcalfe

16 of 205

Murovo proročantvo...

Moore

Realni trend

GWP

  • GWP – Gross world product, Bruto svetski proizvod.
  • Kapacitet svetske ekonomije ne može pratiti troškove razvoja i proizvodnje kola tolikog stepena integracije i tako malih dimenzija
  • Zakon 7/10, svake godine cijena čipa iz serije pada 30%.

17 of 205

EDA

  • EDA – Electronic Design Automation.
  • Ili “Mašina pravi mašinu”.
  • Jednostavno projektovanje pomoću računara, proračuni svih bitnih parametara, simulacija, verifikacija, korekcija rada i mnogi drugi zahtjevi se obavljaju pomoću računara.
  • Samo na taj način Mooreov zakon je mogao biti ostvariv.
  • Prvi pentium kada je bio projektovan iznajmljen je hangar za potrebe crtanje.
  • EDA se primjenjuje podjednako na ANALOGNI, DIGITALNI, RF i MJEŠOVITI dizajn.
  • Danas pentium core staje na jedan CD.
  • DA je prisutna i u drugim disciplinama, gradjevinarstvu, mašinstvu (CAD) itd.

18 of 205

EDA�(zašto?)

Time-to-market

Složenost

Problemi

Heterogenost

  • Manja geometrija veći problemi:
    • Kapacitivnost
    • Veze
    • Induktivnost
    • Otpornost
    • Sum
    • Kasnjenje

  • Veća raznovrsnost funkcionalnih cjelina na čipu
    • Processor
    • Softver
    • Memorija
    • Analogni dio

  • Skraćeno vrijeme dizajniranja
  • Manja tolerancija za reviziju
  • Preko 10M tranzistora
  • Preko 1M linija koda

Stojanovic, Inaguraciono, Maj, 2013.

19 of 205

EDA fakti

Dimenzije tranzistora

Silicon atom = 0.24nm

Rhinovirus = 20nm

2008 Core 2 Quad, 45nm

2007 Core 2 Duo, 65nm

2006 Dual Core, 65nm

2005 Pentium D, 90nm

2003 Pentium M, 0,13um

2002 Itanium 2, 0,18um

2000 Pentium 4, 0,18um

1999 Celeron, 0,25um

1999 Pentium III, 0,25um

Očekivalo se da 2000ta bude kritična

20 of 205

Zašto AD? (1)

    • AD = Automatized design (Design Automatization)
    • Svjedoci smo prave “eksplozije” elektronske tehnologije.
    • Elektronski čipovi postaju sve složeniji i sve manjih dimenzija.
    • Cjelokupan uredjaj treba biti realizovan na jednom čipu, system on chip.
    • Put od ideje do realizacije proizvoda mora biti što kraći.

Neki od čipova visoke koncetracije

21 of 205

Gustina pakovanja

Intel Pentium (IV) Microprocessor (physical layout),

2000 to 2008

22 of 205

Ekonomski aspekti EDA

23 of 205

Digitalni dizajn na ETF-u

  • Pretežno u svrhe primjene
  • Akcenat na mikrokontrolerima i FPGA
  • U okviru APEG lab (FPGA)

24 of 205

Circuit’s design�pristupi i softveri

Rezultati

(produktivnost projektovanja)

(softver)

Fizički nivo – transistor entry

(Calma, Computervision, Magic)

Šematski nivo - Schematic entry

(Daisy, Mentor, Valid)

Sinteza –syntese

(Cadence, Synopsys, Mentor)

Visoki nivo

abstarkcije, MATLAB,

System C ?

  • McKinseyeva-Kriva

Šta je sledeće?

U korjenu svega:

      • Analogni dizajn, SPICE, PSPICE, 70s, Nagel and Pederson
      • Digitalni dizajn, Verilog, VHDL, 80s.

25 of 205

Projektovanje digitalnih kola visoke integracije�VHDL & FPGA

26 of 205

Faze projektovanja

Pakovanje

Fabri-�kacija

Fizički

Dizajn

Tehnološko

mapiranje

Sinteza

Specifikacija

Opis na

visokom

nivou

Funkcionalni

Opis

Smeštanje�& Povezivanje

X=(AB*CD)+

(A+D)+(A(B+C))

Y = (A(B+C)+AC+

D+A(BC+D))

Gate-level

Opis

Logički�Opis

27 of 205

Faze logičkog i fizičkog projektovanja…

Predmet našeg interesovanja

28 of 205

Naši primjeri

Od ideje do realizacije, radovi studenata

FPGA kolo za racunanje kvadratnog korjena

FPGA VGA kontroler

29 of 205

FPGA čip za mjerenje krvnog pritiska

  • Problem sa mehaničkim djelovima,
  • Mažetna, pumpa
  • Potrošnja.
  • Neugodnost pri mjerenju.
  • Šum
  • Postoji jasna veza izmedju PTTa parametra (Pulse Transmit Time) i BPa. Veći BP manji PTT.

30 of 205

FPGA

Čip za mjerenje krvnog pritiska

Čitav sistem za mjerenje

krvnog pritiska na jednom

čipu. Algoritmi obrade

Signala od filtera, preko

Waveleta do FFT, sve

u kodu (VHDL)

Knezevic Sasa, 2013

31 of 205

Tok projektovanja - “Design flow”

XC4000

XC4000

XC4000

3

Design Entry direktno šema ili unošenje programa (koda), VHDL, and/or Verilog.

Implementation Kompajliranje, analiza, simulacija, tajmming, korekcija

Uploading, direktno u čipove, pomoću ISP ili programatora

1

2

32 of 205

Tok projektovanja - Primjer

Konstruisemo kolo (čip) koji obavlja funkciju alarma za automobil. Alarm se uključuje i isključuje pomoću prekidača za uključivanje, što se signalizira crvenom LED diodom, alarm uključen. Kada se bilo koja od 5 vrata otvore, ako je alarm uključen, aktivira se izlaz za sirenu, izlaz alarma.

a

b

c

d

e

ao

onal

l1

Alarm

Vcc=5V

a, b, c, d, e, onal

Otvaranje vrata otvara prekidac,

Dovodeci logicku “1” na jedan od

ulaza “a….e”. Zatim se aktivira a0, logicka “1”,

ako je I1 uklucen. Znaci, logicki ulaz, dovodimo

Preko prekidaca “0” ili “1”, a logicki izlaz provjeravamo pomocu LED diode, “0”” ili “1”

Step1: Napravimo kod alarma ili semu

Step2: Provjerimo ispravnost koda, kompalacijom i simulacijom

Step3: Ubacimo kod u cip.

Step 4: Provjerimo funkcionalnost na ploci

a0, I1

33 of 205

ENTITY alarm IS

PORT

(

a, b, c, d, e, onal : IN BIT;

ao,l1 : OUT BIT

);

END alarm;

ARCHITECTURE myarch OF alarm IS

BEGIN

ao<= (a or b or c or d or e) and onal;

l1<=not(not onal);

END myarch;

DE2-70 FPGA pins

Onal SW[0] PIN_AA23

a SW[1] PIN_AB26

b SW[2] PIN_AB25

c SW[3] PIN_AC27

d SW[4] PIN_AC26

e SW[5] PIN_AC24

11 LEDR[0] PIN_AJ6

ao LEDR[1] PIN_AK5

Ako je “onal” SW[0] ukljucen, to idicira LEDR[0], kolo je sposobno da funkcioniše; Izlaz “ao” koji je vezan na LEDR[1] se automatski aktivira ako su bilo koja od 5 vrata “a…e” otvorena (pri otvaranju vrata se aktiviraju odgovarajući mikroprekidači, koje ovdje simuliramo sa Sw[1]…Sw[5].

Tok projektovanja, primjer

Cyclone II EP2C70F896

Cyclone II EP2C70F896

34 of 205

A B C Y�0 0 0 0�0 0 1 0�0 1 0 0�0 1 1 1�1 0 0 0�1 0 1 1�1 1 0 1�1 1 1 1

--- Cyclone II EP2C70F896

a SW[1] PIN_AB26

b SW[2] PIN_AB25

c SW[3] PIN_AC27

y LEDR[0] PIN_AJ6

Tok projektovanja, primjer

Realizovati primjer preko seme i koda, “mayority_vote”

35 of 205

VHDL

  • Šta je VHDL?
    • VHDL je internacionalni IEEE standardizovan jezik

(IEEE 1076-1993) za opis elektronskog hardvera.

    • VHDL je akronim za VHSIC

(Very High Speed Integrated Circuit)

Hardware Description Language

    • VHDL je jezik visokog nivoa abstrakcije

(slično C-u, Paskalu, itd)

  • VHDL filozofija

Maximalno tačan i pouzdan dizajn uz najmanju

cijenu koštanja u najkraćem roku razvijanja.

36 of 205

Istorija

  • Ideja 1980.
  • 1981 prve konkretne aktivnosti.
  • U julu 1983 IBM i Texas Instruments

potpisali Ugovor o razvijanju VHDL-a

  • U avgustu 1985 završena VHDL version 7.2.
  • U decembru 1987 VHDL postaje IEEE

standard 1076-1987 i 1988 ANSI standard.

  • U septembru 1993 VHDL je

re-standardizovan, VHDL-1993.

37 of 205

Struktura koda

  • Cjeline koda (programa)

38 of 205

Model “crne kutije”

y

x

carry

resut

enable

Interna

Funkcionalnost

Half-adder

Spoljašni izvodi

x

y

enable

carry

result

Half Adder

39 of 205

Entitet

x

y

carry

result

Half

Adder

ENTITY half_adder IS

PORT( x, y, enable: IN BIT;

carry, result: OUT BIT);

END half_adder;

a[3..0]

b[3..0]

equals

Byn

Comp

entity eq_comp4 is

port (

a:in bit_vector(3 downto 0);

b:in bit_vector(3 downto 0);

equals: out bit );

end eq_comp4;

40 of 205

Arhitektura (1)

Nivo abstrakcije

Strukturni

opis

Opis

ponašanja

paralelno

(istovremeno)

serijsko

(redosledno)

Ili (najčešće) kombinacijom

  • Opisuje unutrašnjost entiteta na više načina.

A

B

B<= NOT A

Fizički

(implementacioni)

opis

41 of 205

Arhitektura (2)

  • Strukturalni opis, kreiran iz pre-definisanih komponeti

(ovdje u0,1,2,3,4). Podrazumijeva se da je korisnik familijaran sa električnom šemom. U jednom programu se daje opis interkonekcije komponenti, spoljašnih izvoda i unutrašnjih pomoćnih izvoda.

Šema binarnog komparatora 4-bitnog

42 of 205

Arhitektura (3)

library ieee;

use ieee.std_logic_1164.all;

entity eq_comp4 is

port (

a : in std_logic_vector(3 down_to 0);

b : in std_logic_vector(3 down_to 0);

equals: out std_logic );

end eq_comp4;

architecture struct of eq_comp4 is

signal x : std_logic_vector(0 to 3);

 

begin

u0: xnor_2 port map (a(0), b(0), x(0));

u1: xnor_2 port map (a(1), b(1), x(1));

u2: xnor_2 port map (a(2), b(2), x(2));

u3: xnor_2 port map (a(3), b(3), x(3));

u4: and_4 port map (x(0), x(1), x(2), x(3), equals );

end struct;

Mapiranje

Strukturalni opis, kod

43 of 205

Arhitektura (4)

  • Upotreba logičkih izraza kojim se opisuje funkcija, tok podataka, (“concurrent behavioral description – dataflow”).

ARCHITECTURE half_adder_b OF half_adder IS

BEGIN

carry <= enable AND (x AND y);

result <= enable AND (x XOR y);

END half_adder_b;

opis ponašanja, paraleni

44 of 205

Arhitektura (5)

ARCHITECTURE half_adder_a OF half_adder IS

BEGIN

PROCESS (x, y, enable)

BEGIN

IF enable = ‘1’ THEN

result <= x XOR y;

carry <= x AND y;

ELSE

carry <= ‘0’;

result <= ‘0’;

END IF;

END PROCESS;

END half_adder_a;

  • U formi izraza koji se redosledno izvršavaju, (“sequential behavioral”). Ti izrazi mogu biti i konstrukcije kao što su “if”, “case”, “loop”, “for”, and “while”. Sve se odigrava unutar “process” sekvence, može biti više procesa.

opis ponašanja, serijski

45 of 205

Entity, sintaksa

entity program_rom is

port ( address : in bit_vector (14 downto 0) ;

data : out bit_vector (7 downto 0) ;

enable : in bit );

subtype instruction_byte is bit_vector (7 downto 0);

type program is array (0 to 2**14-1) of instruction_byte;

end entity program_rom;

Samo type deklaracija, signal

deklaracija i konstante, ne variable.

entity entity_name is �  [generics] �  [ports] �  [declarations (types, constants, signals)] �  [definitions (functions, procedures)] �[begin statements] – ne upotrebljava se

end [entity_name];

Sintaksa u širem smislu

46 of 205

Architektura, sintaksa

arch_body <=

architecture id of entity_name is

{ block_decl_item }

begin

{ concurrent_stmt }

end [ architecture ] [ id ] ;

Ime arhitekture

Ime entiteta

Process i

component

izrazi

Type, signal

i constant

deklaracije.

47 of 205

Architecture, primjer

architecture primitive of and_or_inv is

signal and_a, and_b, or_a_b : bit;

begin

and_a: process is

begin

and_a <= a1 and a2;

wait on a1, a2;

end process;

……

end architecture;

48 of 205

Primjer #1

  • POLU SABIRAČ (Half_Adder)

Simbol, blok šema

Logička šema

ENTITY half_adder IS

PORT( x, y, enable: IN BIT;

carry, result: OUT BIT);

END half_adder;

ARCHITECTURE half_adder_b OF

half_adder IS

BEGIN

carry <= enable AND (x AND y);

result <= enable AND (x XOR y);

END half_adder_b;

enable, x, y, result, carry

1 0 0 0 0

1 1 0 1 0

1 0 1 1 0

1 1 1 0 1

0 x x 0 0

Tabela stanja - funkcionalnost

C1

VHDL kod

49 of 205

Klasična implementacija

S <= A XOR B;

C <= A AND B;

S <= A XOR B XOR Cin ;

Cout <= (A AND B) OR

(Cin AND A) OR (Cin AND B)

Sema

Logika

čip

7486

Čip

7408

Zaključak: U slučaju klasične implementacije polusabirača trebamo 2 klasična TTL kola, a već za puni sabirač stvari se komplikuju pa trebamo 3 TTL kola.

Čip

7432

50 of 205

8_bitni sabirac

Fo

Ao

Bo

Cout

Cin

#include <stdio.h>

void main(void)

{

uint 8_t a, b;

Unit16_t c;

c= (unit 16_t)(a+b);

}

+

B[0..7]

A[0..7]

F[8..0]

F8

Cout

Cin

C code

Puni sabirac preko polu sabiraca

8bits full adder

Half-adder>Full_adder>8bits full adder

C1

difinition of the component fulladder

library IEEE;

use IEEE.std_logic_1164.all;

ENTITY fulladder IS

PORT( A, B, Cin : IN STD_LOGIC;

Sum, Cout : OUT STD_LOGIC);

END ENTITY fulladder;

ARCHITECTURE logicfunc OF fulladder IS

BEGIN

Sum <= A xor B xor Cin;

Cout <= (A and B) or (( A xor B) and Cin);

END ARCHITECTURE logicfunc;

51 of 205

Klasična implementacija u okviru jednog kola 4 bitni sabirač

C4

C0

52 of 205

8bits adder preko 1bit full adder

Cin

Cout

S

-- difinition of the component fulladder

library IEEE;

use IEEE.std_logic_1164.all;

ENTITY fulladder IS

PORT( A, B, Cin : IN STD_LOGIC;

Sum, Cout : OUT STD_LOGIC);

END ENTITY fulladder;

ARCHITECTURE logicfunc OF fulladder IS

BEGIN

Sum <= A xor B xor Cin;

Cout <= (A and B) or (( A xor B) and Cin);

END ARCHITECTURE logicfunc;

full_adder

C1

53 of 205

Vježba #1: �Unos, kompajliranje i simulacija

      • KORAK 1: Ponoviti “klasiku digitalnih kola”
      • KORAK 2: Instalirati besplatni Quartus program.
      • KORAK 3: Postati familijaran sa softverom Quartus
      • KORAK 4 Kreirati i unijeti VHDL kod u text editoru (half_adder.vhd).
      • KORAK 5: Provjeriti ispravnost koda datog u obliku VHDL programa (half_adder.vhd) i simulirati rad kola koristeći Altera Quartus II programski paket.
      • KORAK 6: Izvršimo provjeru koda, kompalaciju i simulaciju kola. Kreirati simbol “half_adder” .
      • KORAK 7: Izvršimo provjeru koda, kompalaciju i simulaciju kola punog sabirača (full adder). Kreirati simbol “fulladder” .

C1

54 of 205

Vježba #1, koraci 1-6

  • Kod, kompalacija, simulacija, verifikacija

enable, x, y, result, carry

1 0 0 0 0 (1)

1 1 0 1 0 (2)

1 0 1 1 0 (3)

1 1 1 0 1 (4)

0 x x 0 0 (5)

(1)

(2)

(3)

(4)

(5)

ENTITY half_adder IS

PORT( x, y, enable: IN BIT;

carry, result: OUT BIT);

END half_adder;

ARCHITECTURE half_adder_b OF

half_adder IS

BEGIN

carry <= enable AND (x AND y);

result <= enable AND (x XOR y);

END half_adder_b;

Kod

Kompalacija

Simulacija

Verifikacija.

Da li dobijamo na simulacionim

dijagramima ono sto odgovara

tabeli stanja?

55 of 205

Moduli

  • Modul je kolekcija često korištenih podataka, komponenti, funkcija, podprograma itd.

Ako je objekt deklarisan i definisan u modulu on može biti korišten u svim VHDL programima.

U modulima se preporučuje definisanje globalnih informacija, značajnih parametara kao i osnovnih komponenti u. Nesto slično kao “include” u C-u.

Modul sadrži “deklarativni” i “body” dio. Ponekad može samo figurisati deklarativni dio.

Primjer deklaracije modula:

package MY_PACK is �  type SPEED is (STOP, SLOW, MEDIUM, FAST); �  component HA �    port (I1, I2 : in bit; S, C : out bit); �  end component; �  constant DELAY_TIME : time; �  function INT2BIT_VEC (INT_VALUE : integer) �    return bit_vector; �end MY_PACK;

Primjer “body-a”:

package body MY_PACK is �  constant DELAY_TIME : time := 1.25 ns; �  function INT2BIT_VEC (INT_VALUE : integer) �    return bit_vector is �  begin �    -- sequential behavioral description

(omitted here) �  end INT2BIT_VEC; �end MY_PACK;

56 of 205

Biblioteke

  • Sadrže modul ili kolekciju modula
  • Biblioteke proizvodjača
    • Standard Package
    • IEEE developed packages
    • Altera Component packages
  • Radne Biblioteke
    • Work.xx.xx

57 of 205

Biblioteke...

  • LIBRARY std;
    • Sadrži sledeće module (pakete):
      • Standard (Types: Bit, Boolean, Integer, Real, and Time.

All operator functions to support types)

      • Textio (File operations)
  • LIBRARY ieee;
    • Sadrži sledeće module (pakete):
      • std_logic_1164 (std_logic types & related functions)
      • std_logic_arith (arithmetic functions
      • std_logic_signed (signed arithmetic functions)
      • std_logic_unsigned (unsigned arithmetic functions)

58 of 205

Biblioteke...

STD_LOGIC_1164:

Declaration: �type std_logic 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"

ENTITY mux2to1 IS

PORT( d0, d1, s :IN STD_LOGIC;

f :OUT STD_LOGIC);

END mux2to1;

ARCHITECTURE behavior OF mux2to1 IS

BEGIN

WITH s SELECT

f <= d0 WHEN '0',

d1 WHEN OTHERS;

END behavior;

LIBRARY ieee;

USE ieee.std_logic_1164.all;

Sintaksa upotrebe biblioteke:

LIBRARY <any_name>;

USE <any_name>.<package_name>.all;

Pozivanje biblioteke

59 of 205

Mux4to1 preko Mux2to1

d0

d1

f

s

mux2to1

d0

d1

f

s

mux2to1

d0

d1

f

s

mux2to1

wo

w1

w2

w3

sel0

sel1

I1

I2

60 of 205

Moduli…

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE work.mux2to1_package.all;

ENTITY mux4to1 IS

PORT(w0, w1, w2, w3, sel0, sel1 :IN STD_LOGIC;

f :OUT STD_LOGIC);

END mux4to1;

ARCHITECTURE structure OF mux4to1 IS

SIGNAL I1, I2 :STD_LOGIC;

BEGIN

u1:mux2to1 PORT MAP(w0, w1, sel0, I1);

u2:mux2to1 PORT MAP(w2, w3, sel0, I2);

u3:mux2to1 PORT MAP(I1, I2, sel1, f);

END structure;

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY mux2to1 IS

PORT (d0, d1, s :IN STD_LOGIC;

f :OUT STD_LOGIC);

END mux2to1;

ARCHITECTURE LogicFunc OF mux2to1 IS

BEGIN

f <= (d0 AND (NOT s)) OR (d1 AND s);

END LogicFunc;

LIBRARY ieee;

USE ieee.std_logic_1164.all;

PACKAGE mux2to1_package IS

COMPONENT mux2to1

PORT (d0, d1, s :IN STD_LOGIC;

f :OUT STD_LOGIC);

END COMPONENT;

END mux2to1_package;

Fajl#1 u radnom direktrorijumu, mora

biti kompajliran (mux2to1.vhd)

Fajl#2, trenutni projekat (mux4to1.vhd)

NAPOMENA: Pri kompajliranju mux4to1.vhd kao projekta u

Qurtusu II, nije dovoljno ukključiti package sa USE

work.mux2to1_package.all; već treba mux2to1.vhd dodati

projektu sa Project-> Add/Remove files in Project

C1

C1

61 of 205

Komponenta kao dio koda

  • Strukturalni opis

-- Include the componente which is defined in the same file

library ieee;

use ieee.std_logic_1164.all;

entity adder4_combin is

port( X, Y : in std_logic_vector (3 downto 0);

Ci : in std_logic;

S : out std_logic_vector (3 downto 0);

Co : out std_logic);

end entity adder4_combin;

architecture structure of adder4_combin is

signal C : std_logic_vector (0 to 2);

-- declaration of the component

component fulladder is

port ( A, B, Cin : in std_logic;

Sum, Cout : out std_logic);

end component fulladder;

begin

FA_0: fulladder port map (X(0), Y(0), Ci, S(0), C(0));

FA_1: fulladder port map (X(1), Y(1), C(0), S(1), C(1));

FA_2: fulladder port map (X(2), Y(2), C(1), S(2), C(2));

FA_3: fulladder port map (X(3), Y(3), C(2), S(3), Co);

end architecture structure;

-- difinition of the component fulladder

library IEEE;

use IEEE.std_logic_1164.all;

ENTITY fulladder IS

PORT( A, B, Cin : IN STD_LOGIC;

Sum, Cout : OUT STD_LOGIC);

END ENTITY fulladder;

ARCHITECTURE logicfunc OF fulladder IS

BEGIN

Sum <= A xor B xor Cin;

Cout <= (A and B) or (( A xor B) and Cin);

END ARCHITECTURE logicfunc;

FA_0

FA_1

FA_2

FA_3

C(0)

C(1)

C(2)

C(3)

Co

X(0)

Y(0)

S(0)

C1

62 of 205

Library…

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity adder is

port(A,B : in std_logic_vector(7 downto 0);

SUM : out std_logic_vector(8 downto 0);

end adder;

architecture archi of adder is

begin

-- ??? SUM <= A + B;

SUM <= ('0' & A) + ('0' & B);

end archi;

VHDL concatenation operator (&) je upotrijebljen da doda nulu sa lijeva brojeva A i B prije sabiranja.

RESULT <= ('0' & NUMBER); -- join a 0 to the beginning of NUMBER and put into RESULT

RESULT <= (NUMBER & '0'); -- join a 0 to the end of NUMBER and put into RESULT

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

USE ieee.std_logic_arith.all;

entity adder is

port(A,B : in std_logic_vector(7 downto 0);

SUM : out integer);

end adder;

architecture archi of adder is

begin

SUM <= CONV_INTEGER(A+B);

end archi;

8bits adder using different libraries

C1

C1

63 of 205

NAČINI MODELOVANJA (kodiranja)

  • VHDL kod može biti paralelan (concurrent), sekvencijalan i strukturalan. Ova podjela je vrlo bitna jer, omogućava bolje razumijevanje kakve se komande koriste gdje, kao i posledice primjene jednog odnosno drugog načina.

64 of 205

PARALELNO kodiranje

  • WHEN / ELSE:

assignment WHEN condition ELSE

assignment WHEN condition ELSE

...;

  • · WITH / SELECT / WHEN:

WITH identifier SELECT

assignment WHEN value,

· Primjer:

------ With WHEN/ELSE -------------------------

outp <= "000" WHEN (inp='0' OR reset='1') ELSE

"001" WHEN ctl='1' ELSE

"010";

---- With WITH/SELECT/WHEN --------------------

WITH control SELECT

output <= "000" WHEN reset,

"111" WHEN set,

UNAFFECTED WHEN OTHERS;

65 of 205

Sekvencijalno modelovanje

  • Processes
  • If-then-else
  • Case
  • For
  • While

66 of 205

STRUKTURALNO KODIRANJE

  • Strukturno modelovanje omogućava manuelnu konekciju više komponenata u funkcionalnu cjelinu upotebom signala za povezivanje. Sve komponente koje se koriste moraju prethodno biti definisane svojim entitetom i arhitekturom što može biti u posebnim ili zajedničkom fajlu. Strukturno modelovanje je slično sastavljanju šeme složenog kola iz komponenti.

67 of 205

STRUKTURALNO KODIRANJE...

  • COMPONENT
    • Sintaksa deklaracije komponente:

COMPONENT component_name IS

PORT ( port_name : signal_mode signal_type; port_name : signal_mode signal_type;

...);

END COMPONENT;

- Sintaksa povezivanja komponente:

label: component_name PORT MAP (port_list);

68 of 205

Strukturalno kodiranje, primjer #5

· Primer deklaracije PACKAGE koji sadrži komponenate:

----- File my_components.vhd: ---------------

LIBRARY ieee;

USE ieee.std_logic_1164.all;

------------------------

PACKAGE my_components IS

------ inverter: -------

COMPONENT inverter IS

PORT (a: IN STD_LOGIC; b: OUT STD_LOGIC);

END COMPONENT;

------ 2-input nand: ---

COMPONENT nand_2 IS

PORT (a, b: IN STD_LOGIC; c: OUT STD_LOGIC);

END COMPONENT;

------ 3-input nand: ---

COMPONENT nand_3 IS

PORT (a, b, c: IN STD_LOGIC; d: OUT STD_LOGIC);

END COMPONENT;

END my_components;

  • Primer projekta u kome će se koristiti prethodno kreirani package

sa datim komponentama:

----- File project.vhd: ---------------------

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE work.my_components.all;

---------------------------------

ENTITY project IS

PORT ( a, b, c, d: IN STD_LOGIC;

x, y: OUT STD_LOGIC);

END project;

---------------------------------

ARCHITECTURE structural OF project IS

SIGNAL w: STD_LOGIC;

BEGIN

U1: inverter PORT MAP (b, w);

U2: nand_2 PORT MAP (a, b, x);

U3: nand_3 PORT MAP (w, c, d, y);

END structural;

C1

69 of 205

“Behavioral”…

library ieee;

use ieee.std_logic_1164.all;

entity MUX41 is

port --define inputs and outputs

(

S1 : in bit; -- input S1

S0 : in bit;

D3 : in bit;

D2 : in bit;

D1 : in bit;

D0 : in bit;

Y : out bit -- output Y, note: NO ‘;’ used on the last line

);

end MUX41;

architecture logic of MUX41 is -- Note MUX41 is the same as entity name above

begin

Y <= (D0 and (not S1) and (not S0)) or

(D1 and (not S1) and S0 ) or

(D2 and S1 and (not S0)) or

(D3 and S1 and S0 ) ;

end logic; -- Note matching names ‘logic’

library ieee;

use ieee.std_logic_1164.all;

entity MUX2to1 is port(

A, B: in std_logic_vector(7 downto 0);

Sel: in std_logic;

Y: out std_logic_vector(7 downto 0));

end MUX2to1;

architecture behavior of MUX2to1 is

begin

process (Sel, A, B) -- rerun process if any changes, sensitivity list, all inputs

begin

if (Sel = '1') then

Y <= B;

else

Y <= A;

end if; -- note that *end if* is two words

end process;

end behavior;

library ieee;

use ieee.std_logic_1164.all;

entity MUX2to1 is port(

A, B: in std_logic_vector(7 downto 0);

Sel: in std_logic;

Y: out std_logic_vector(7 downto 0));

end MUX2to1;

architecture behavior of MUX2to1 is

begin

process (Sel, A, B) -- rerun process if any changes, sensitivity list, all inputs

begin

case Sel is

when '0' =>

Y <= A;

when '1' =>

Y <=B;

end case;

end process;

end behavior;

logic

if/else

case

C1

C1

C1

70 of 205

Vježba #2

  • Projektovati 8 bitni sabirač u sematskom editor gdje se koristi symbol punog sabiraca (1bit full adder). Koristiti semu na sa slide 52.
  • Projektovati 4 bitni sabirac pomocu kodiranja na strukturalnom nivou upotrebom „package“ i „components“.
  • Simulirati razlicita stanja za provjeru rezultata…
  • Uociti efekat aktiviranja Cin, Cout

71 of 205

Ideja integracije

Veza izmedju hiararhijskih nivoa u projektu

72 of 205

Tipovi kašnjenja

  • VHDL precizira vremenski period koji mora proći dok signali poprime nove vrijednosti.
  • Precizirana kašnjenja mogu biti podijeljena u sledeće kategorije:
    • Transport -- propagaciono kašnjenje
    • Inertial – propagaciono kašnjenje i minimalna širina ulaznog impulsa.
    • Delta – uobičajeno kašnjenje, ako nije definisano u kodu

Input

delay

Output

73 of 205

Transport delay

  • Mora biti eksplicitno definisano
    • Npr. riječ “TRANSPORT” mora biti upotrijebljena
  • Signal prima novu vrijednost poslije definisanog perioda

-- TRANSPORT delay example

Output <= TRANSPORT NOT Input AFTER 10 ns;

0 5 10 15 20 25 30 35

Input

Output

10ns

74 of 205

Inertial delay

Nema uticaja jer je 5ns

  • Definiše propagaciono kašnjenje i ulaznu širinu impulsa, tj. ‘inerciju’ izlaza:

  • Inertial delay je uobičajen (ugradjen u kompajleru) a REJECT je opcion:

Output <= NOT Input AFTER 10 ns;

-- Propagation delay and minimum pulse width are 10ns

Input

Output

0 5 10 15 20 25 30 35

target <= [REJECT time_expression] INERTIAL waveform;

Drugi impuls se invertuje poslije

10ns

75 of 205

Inertial delay...

  • Primjer kada je ‘inercia’ manja od vremena propagacije
    • Npr. Inverter sa propagation delay od 10ns koji ignoriše impulse kraće od 5ns
  • PS: REJECT je opcija VHDL 1076-1993

Output <= REJECT 5ns INERTIAL NOT Input AFTER 10ns;

Input

Output

0 5 10 15 20 25 30 35

“klin”

76 of 205

Inertial vs Transport

  • Inertial Delay
    • Uobičajeno u VHDLu.
    • Guta “klinove”.
    • Najcesce koristen u simultoru.

  • Transport Delay
    • Mora biti specificirano sa riječju TRANSPORT.
    • Moze izbeci impulse bilo koje sirine.
    • Dobro za delay blokove/sekcije.

Glavna razlika: �inertial delay je “default” delay,i.e to je 

kasnjenje samih komponenti,

dok je “transport” vezan za

provodnike (zice-wire) .

77 of 205

Delta delay=0

  • Kako se ponaša C?

A

NAND gate “okida” prvo:

IN: 1->0

A: 0->1

B: 1->0

C: 0->0

AND gate “okida” prvo:

IN: 1->0

A: 0->1

C: 0->1

B: 1->0

C: 1->0

1

IN:

1->0

B

C

NAND

AND

NOT

78 of 205

Jos o kasnjenju…

q<=r nor nq after 1ns;

nq<=s nor q after 1ns;

q<=transport r nor nq after 1ns;

nq<=transport s nor q after 1ns;

79 of 205

Delta delay

  • Uobičajeno kašnjenje
    • VHDL signal ne prima novu vrijednost trenutno

Output <= NOT Input;

-- Output assumes new value in one delta cycle

-- Primjer realizacije RS flip flopa

-- Uociti delta delay

ENTITY rsff IS

PORT (r, s: IN BIT;

q, qn: INOUT BIT);

END rsff;

ARCHITECTURE behave OF rsff IS

BEGIN

q <= r NOR qn;

qn <= s NOR q;

END behave;

Delta delay

C1

80 of 205

Tipovi podataka u VHDLu

  • VHDL je strogo “tipski” orjentisan jezik. Svaki objekat kao sto su konstante, promenljive, signali, portovi pridruzuju vrijednosti odredjenog tipa.

Types

Access

Scalar

Composite

Array

Record

Integer

Real

Enumerated

Physical

81 of 205

Skalarni tipovi podataka

  • Slično kao u Pascalu i C-u.
    • Intidžer (Integer)
    • - 2,147,483,647 do 2,147,483,647 (oblast definisanosti)
    • Primjer pridruživanja

ARCHITECTURE test_int OF test IS

BEGIN

PROCESS (X)

VARIABLE a: INTEGER;

BEGIN

a := 1; -- OK

a := -1; -- OK

a := 1.0; -- illegal

END PROCESS;

END test_int;

82 of 205

Skalarni tipovi ...

  • Realni (Real)
    • -1.0E38 do 1.0E38 (oblast definisanosti)
    • Primjer pridruživanja

ARCHITECTURE test_real OF test IS

BEGIN

PROCESS (X)

VARIABLE a: REAL;

BEGIN

a := 1.3; -- OK

a := -7.5; -- OK

a := 1; -- illegal

a := 1.7E13; -- OK

a := 5.3 ns; -- illegal

END PROCESS;

END test_real;

83 of 205

Nenumerisani i fizički

  • Nenumerisani (bezimeni), Enumerated
    • Korisnik definiše vrijednosti.
    • Primjer:

TYPE binary IS ( ON, OFF );

... some statements ...

ARCHITECTURE test_enum OF test IS

BEGIN

PROCESS (X)

VARIABLE a: binary;

BEGIN

a := ON; -- OK

... more statements ...

a := OFF; -- OK

... more statements ...

END PROCESS;

END test_enum;

84 of 205

Nenumerisani i fizički...

  • Fizički (physical)
    • Zahtijeva pridruženje jedinica.
    • Oblast mora biti definisana-
    • Vrijeme je jedini predefinisani fizički tip u VHDLu.

TYPE resistance IS RANGE 0 TO 10000000

UNITS

ohm; -- ohm

Kohm = 1000 ohm; -- i.e. 1 KΩ

Mohm = 1000 kohm; -- i.e. 1 MΩ

END UNITS;

85 of 205

Kompozitni tipovi

  • Nizovi (array)
    • Koristi grupu elemenata istog tipa u VHDL objektu.
    • Ime, Indeks, Oblast definisanosti (zadata u kodu).
    • Primjer:

TYPE data_bus IS ARRAY(0 TO 31) OF BIT;

0

31

0

1

...element indices...

...array values...

VARIABLE X : data_bus;

VARIABLE Y : BIT;

Y := X(12); -- Y gets value of element at index 12

86 of 205

Kompozitni tipovi...

  • Primjer sa DOWNTO (od većeg prema manjem)

TYPE reg_type IS ARRAY(15 DOWNTO 0) OF BIT;

0

1

15

0

...element indices...

...array values...

VARIABLE X : reg_type;

VARIABLE Y : BIT;

Y := X(4); -- Y gets value of element at index 4

87 of 205

Kompozitni tipovi ...

  • Višedimenzioni vektor (matrica)

type MEMORY is array (0 to 7, 0 to 3) of bit; �...                         8×4 bit array constant ROM: MEMORY := (  ('0','0','0','0'), �                          ('0','0','0','1'), �                          ('0','0','1','0'), �                          ('0','0','1','1'), �                          ('0','1','0','0'), �                          ('0','1','0','1'), �                          ('0','1','1','0'), �                          ('0','1','1','1')); �variable DATA_BIT: bit; �... �-- access to one element: �DATA_BIT := ROM (5,3);                     

88 of 205

Kompozitni tipovi...

  • Struktura (Records)
    • Grupa elemenata različitog karaktera u jednom objektu
    • Elementi su indeksirani kroz ime polja
    • Primjer:

TYPE binary IS ( ON, OFF );

TYPE switch_info IS

RECORD

status : BINARY;

IDnumber : INTEGER;

END RECORD;

VARIABLE switch : switch_info;

switch.status := ON; -- status of the switch

switch.IDnumber := 30; -- e.g. number of the switch

89 of 205

Pristupni tip

  • Access
    • Slično kao “pointer”
    • Omogućava dinamičku alokaciju memorije
    • Pogodan za implemenatciju “stakova”, fifo:

type CELL;                       --    incomplete type �type LINK is access CELL;                -- access type �type CELL is          --- full type declaration for CELL �  record �    VALUE : integer; �    NEXTP : LINK; �  end; �variable HEAD, TEMP : LINK;         -- pointer to CELL �... �TEMP := new CELL'(0, null);   -- new data object with initial values �for I in 1 to 5 loop �  HEAD := new CELL;               --additional objects �  HEAD.VALUE := I;          --access to record element �  HEAD.NEXTP := TEMP; �  TEMP := HEAD; �end loop; �... �deallocate(TEMP);                   -- free the memory ��-- allocate new memory �new CELL;                                -- new object new CELL'(I, TEMP);     ... with initial values

90 of 205

Pod-tipovi

  • Subtypes
    • Omogućava korisniku da definiše sopstvena ograničenja.
    • Može sadržavati definisane tipove ali u modifikovanom opsegu

SUBTYPE name IS base_type RANGE <user range>;

SUBTYPE first_ten IS INTEGER RANGE 0 TO 9;

91 of 205

VHDL objekti

  • VHDL objekti
    • Konstante
    • Promenljive
    • Signali
    • Fajlovi
      • Objekti definisani u “package” su dostupni svim VHDL programima koji ga koriste.
      • Objekti definisani u entitetima su dostupni svim arhitekturama

koje koriste dati entitet.

      • Objekti deklarisani u arhitekturi su dostupni svim naredbama u arhitekturi.
      • Objekti deklarisani u procesu su dostupni samo unutar njega.

92 of 205

Konstante

  • Ime pridruženo za specifičnu vrijednost tipa
  • Omogućava jednostavnije izmjene i dopune

CONSTANT constant_name : type_name [:= value];

CONSTANT PI : REAL := 3.14;

CONSTANT SPEED : INTEGER;

93 of 205

Promjenljive

  • Konvencionalni mehanizam za lokalne promenljive
    • Npr: petlje, brojači
    • Definišu se samo unutar procesa ili drugih blokova (funkcija, procedura)
  • Sve varijalbe uzimaju vrijednost trenutno
    • Nema delta ili pre-definisanog kašnjenja

VARIABLE variable_name : type_name [:= value];

VARIABLE opcode : BIT_VECTOR(3 DOWNTO 0) := "0000";

VARIABLE freq : INTEGER;

94 of 205

Signali

  • Služe za komunikaciju izmedju VHDL komponenti
  • Realni fizički signali (žice)
  • Podrazumijevaju kašnjenje pri pridruživanju.
  • Glavna razlika izmedju promenljivih i signala je pridruženo kašnjenje.

SIGNAL signal_name : type_name [:= value];

SIGNAL brdy : BIT;

brdy <= ‘0’ AFTER 5ns, ‘1’ AFTER 10ns;

95 of 205

Promenljive vs signali

 

 

signal A, B, C, X, Y : integer;�begin�  process (A, B, C)�   variable M, N : integer;  begin�    M := A;�    N := B;�    X <= M + N;�    M := C;�    Y <= M + N;�  end process;

signal A, B, C, Y, Z : integer;�signal M, N : integer;begin�  process (A, B, C, M, N)�  begin�    M <= A;�    N <= B;�    X <= M + N;�    M <= C;�    Y <= M + N;

end process;

ENTITY var_sig_var IS

PORT( a, b, c: IN BIT;

out_4 : OUT BIT);

END var_sig_var;

ARCHITECTURE var_ex OF var_sig_var IS

BEGIN

PROCESS (a, b, c)

VARIABLE out_3 : BIT;

BEGIN

out_3 := a NAND b;

out_4 <= out_3 XOR c;

END PROCESS;

END var_ex;

ENTITY var_sig_sig IS

PORT( a, b, c: IN BIT;

out_2 : OUT BIT);

END var_sig_sig;

ARCHITECTURE sig_ex OF var_sig_sig IS

signal out_1: BIT;

BEGIN

PROCESS (a, b, c, out_1)

BEGIN

out_1 <= a NAND b;

out_2 <= out_1 XOR c;

END PROCESS;

END sig_ex;

Isto kolo

Paznja

:= i <=

C1

C1

96 of 205

Promenljive vs signali…

-- Ilustration of signals and variables

-- one ENTITY

ENTITY var_sig_var IS

PORT( a, b, c: IN BIT;

out_1 : OUT BIT);

END var_sig_var;

-- 3 architectures

-- architecture #1 without variables and signals

ARCHITECTURE ex OF var_sig_var IS

BEGIN

PROCESS (a, b, c)

BEGIN

out_1 <= (a NAND b) XOR c;

END PROCESS;

END ex;

-- architecture #2 by variable out_2

ARCHITECTURE var_ex OF var_sig_var IS

BEGIN

PROCESS (a, b, c)

VARIABLE out_2 : BIT; -- variable

BEGIN

out_2 := a NAND b; -- assign mid result to variable

out_1 <= out_2 XOR c; -- assign fin result to signal

END PROCESS;

END var_ex;

 

-- architecture #3 by signal out_2

ARCHITECTURE sig_ex OF var_sig_var IS

signal out_2: BIT; -- signal

BEGIN

PROCESS (a, b, c, out_2)

BEGIN

out_2 <= a NAND b; -- assign mid result to signal

out_1 <= out_2 XOR c; -- assign fin result to signal

END PROCESS;

END sig_ex;

 

-- configuration, chose architecture to assign to entity

CONFIGURATION config OF var_sig_var IS

FOR ex

END FOR;

END config;

C1

97 of 205

Promenljive vs signali…

Variable se upotrebljavaju kada hocete da upotrebljavte “serijski kod”, za razliku od “parallelnog coda”. Variable, samo u processu pridruzivanje nije paralelno. Na primjer:

signal a,b : std_logic_vector(0 to 4);

process (CLK)

begin

if (rising_edge(clk)) then

a <= '11111';

b <= a;

end if;

end process;

stavlja b prije starta processa, ne '11111'. Sa druge strane kod

signal a,b : std_logic_vector(0 to 4);

process (CLK)

variable var : std_logic_vector(0 to 4);

begin

if (rising_edge(clk)) then

var := '11111';

a <= var;

b <= var;

end if;

end process;

stavlja '11111' u a i b.

98 of 205

VHDL Operatori

  • Logički, relacioni i aritmetički

  • Logički “and”, “or”, ...

  • Relacioni se upotrebljavaju za komparaciju

  • Arithmetički za matematičke operacije

99 of 205

  • Vraćaju boolean vrijednosti
  • Upotrebljavaju se sa if-then-else, do,... za kontrolu toka programa.

VHDL Operatori, relacioni

100 of 205

  • Za tipove integer, real,....
  • Ne primenjuju se za vektore

VHDL Operatori, arithmetički

101 of 205

Process

  • Sekvencijalno izvršenje naredbi

  • Sintaksa: Opciono label, ključna riječ “PROCESS”, i sensitivna lista

102 of 205

  • Izvršava se kontinualno
  • Aktivira se kada se neki od signala u sensitivnoj listi promijeni, ili ima neki “event”.
  • Sensitivna lista mora biti kompletna da bi se proces uspješno odvijao.

Process…

103 of 205

IF

  • “if” testira uslov, i izvršava različit set komandi u zavisnosti od rezultata.
  • Dvije forme if-then i the if-then-else

104 of 205

  • IF-ELSEIF omogućava testiranje serije uslova, i prvi uslov koji je tačan uzrokovaće izvršenje naradbi koje slijede iza njega.
  • Tok se nastavlja poslije END IF riječi
  • Redosled uslova je značajan
  • Može biti više njih tačnih ali prvi ima prioritet.

IF-ELSIF

105 of 205

  • Ako je x= “0000”, tada su oba seta uslova zadovoljena.
  • Kako je x = “0000” testirano prvo, z će poprimiti vrijednost a.
  • IF-ELSIF ima ugradjeni prioritet.

IF-ELSIF

106 of 205

CASE

  • CASE uzima u obzir sve moguće vrijednosti koje jedan izraz može da poprimi i izvršava naredbe specificirane za aktuelnu vrijednost.

107 of 205

  • Vrijednosti ne mogu biti specificirane više puta!
  • Moraju biti specificirane eksplicitno ili sa “others”

CASE...

108 of 205

FOR Petlja

  • Standardna For petlja

//C

for(i=0;i<=5; i++)

{

}

%MATLAB???

for i=0: 10

A=4;

end

109 of 205

WHILE

  • Ovo je petlja koja se ponavlja sve do onog momenta do koga je zadovoljen neki uslov.
  • Sintaksa:

[label:] WHILE condition LOOP

(sequential statements)

END LOOP [label];

· Primjer:

WHILE (i < 10) LOOP

WAIT UNTIL clk'EVENT AND clk='1';

(other statements)

END LOOP;

110 of 205

3 to 8 decoder…

library IEEE;�use IEEE.STD_LOGIC_1164.all;��entity decoder3_8 is�     port(�         din : in STD_LOGIC_VECTOR(2 downto 0);�         dout : out STD_LOGIC_VECTOR(7 downto 0)�         );�end decoder3_8;���architecture decoder3_8_arc of decoder3_8 is�begin��    dout <= ("10000000") when (din="000") else�            ("01000000") when (din="001") else�            ("00100000") when (din="010") else�            ("00010000") when (din="011") else�            ("00001000") when (din="100") else�            ("00000100") when (din="101") else�            ("00000010") when (din="110") else�            ("00000001") ;��end decoder3_8_arc;

library IEEE;�use IEEE.STD_LOGIC_1164.ALL;�use IEEE.STD_LOGIC_ARITH.ALL;�use IEEE.STD_LOGIC_UNSIGNED.ALL;��entity decoder3x8 is�Port ( i : in  STD_LOGIC_VECTOR (2 downto 0);�y : out  STD_LOGIC_VECTOR (7 downto 0));�end decoder3x8;��architecture Behavioral of decoder3x8 is��begin

process(i)�begin�case i is�when "111" => y<="00000001";�when "110" => y<="00000010";�when "101" => y<="00000100";�when "100" => y<="00001000";�when "011" => y<="00010000";�when "010" => y<="00100000";�when "001" => y<="01000000";��when "000" => y<="10000000";�when others => null;�end case;�end process;�end Behavioral;

Paralelno kodiranje

With WHEN/ELSE

Sekvencijalno kodiranje

case

C1

C1

111 of 205

Atrubuti

  • Povezano sa dogadjajem, tj stanjem.
  • Generalna forma upotrebe atributa :

  • VHDL ime više predefinisanih atributa:

name'attribute_identifier -- read as “tick”

X’delayed(T)

Signal koji uzima iste vrijednosti kao X samo

pomjeren u vremenu za T

X’stable(T)

Logi

čki signal koji je istinit ako u

intervalu T signal X bio stabilan

X’quiet(T)

Logi

čki signal koji je istinit ako u

intervalu T nije bilo transakcija signala

X

X’transaction

Signal koji mijenja vrijednost iz ‘0’-

‘1’

i obrnuto

svaki put kada se dogodi transakcija signala X

112 of 205

Atributi...

X’event

Istinit

ako

je

došlo do

doga

đaja

na signaluX u

teku

ćem

simulacionm

ciklusu

X’active

Istinit

ako

je

došlo do

transakcije

signala X u

teku

ćem

simulacionom

ciklusu

X’last_event

Vrijeme

poslednjeg

dogadjaja

X’last_active

posledenje

transakcije

X’last_value

signala X prije

poslednjeg

dogadjaja

Vrijeme

Vrijednost

VHDL podržava nekoliko tipova atributa. Vezani su za signale, promjenljive i podatke tipa „type“. Označavaju se sa (‘) iza čega slijedi naziv atributa. Sledeća tabela pokazuje nekoliko attributa vezanih za signale.

113 of 205

Atributi…

entity attr_ex is

port (B,C : in bit;

Z : out bit

);

end attr_ex;

architecture test of attr_ex is

signal A, C_delayed5 : bit;

begin

A <= B and C;

C_delayed5 <= A'delayed(5 ns);

Z<=C_delayed5;

end test;

C

B

A

Z

5ns

C1

114 of 205

Atributi, primjer

  • Kako se atributi mogu koristiti u primjeru 8-bitnog registra.
  • Specifikacija :
    • Trigger na uzlaznoj ivici
    • Lečovanje samo kada je enable high
    • Data setup vrijeme x_setup
    • Propagaciono kašnjenje prop_delay

ENTITY 8_bit_reg IS

GENERIC (x_setup, prop_delay : TIME);

PORT(enable, clk : IN qsim_state;

a : IN qsim_state_vector(7 DOWNTO 0);

b : OUT qsim_state_vector(7 DOWNTO 0));

END 8_bit_reg;

  • qsim_state predefinisan tip sa parametrima 0, 1, X, i Z

115 of 205

Primjer atributi…

ARCHITECTURE first_attempt OF 8_bit_reg IS

BEGIN

PROCESS (clk)

BEGIN

IF (enable = '1') AND a'STABLE(x_setup) AND

(clk = '1') THEN

b <= a AFTER prop_delay;

END IF;

END PROCESS;

END first_attempt;

Kada se signal ustabili

ARCHITECTURE behavior OF 8_bit_reg IS

BEGIN

PROCESS (clk)

BEGIN

IF (enable = '1') AND a'STABLE(x_setup) AND

(clk = '1') AND (clk'LAST_VALUE = '0') THEN

b <= a AFTER delay;

END IF;

END PROCESS;

END behavior;

116 of 205

DFF

  • DFF sa RESETOM, primjer atributa

-- DFF

------------------------------------------------

LIBRARY ieee;

USE ieee.std_logic_1164.all;

------------------------------------------------

ENTITY dff IS

PORT (d, clk, rst: IN STD_LOGIC;

q: OUT STD_LOGIC);

END dff;

------------------------------------------------

ARCHITECTURE behavior OF dff IS

BEGIN

PROCESS (clk, rst)

BEGIN

IF (rst='1') THEN

q <= '0';

ELSIF (clk'EVENT AND clk='1') THEN -- atribut

q <= d;

END IF;

END PROCESS;

END behavior;

C1

117 of 205

Simulacija

  • Simulacija

q=d, na prednjoj ivica clk-a

q=0, za bilo koje clk, zato sto je rst=1

118 of 205

GENERIC

Promjenljiva koja je deklarisana korišćenjem ključne riječi GENERIC predstavlja konstantu koja se može samo čitati. Ova riječ se upotrebljava najčešće kada je potrebno projektovati dizajn čiji se neki od parametara mogu mijenjati (npr. dubina i širina memorije, dužina registra i sl.). Za dizajnera je mnogo jednostavnije da napravi komponentu koja se u daljem radu može koristiti nezavisno od parametara kakvi su već navedeni.

· Primjer:

library ieee;

use ieee.std_logic_1164.all;

use ieee.numeric_std.all;

entity signed_adder is

generic (DATA_WIDTH : natural := 8);

port

(

a : in signed ((DATA_WIDTH-1) downto 0);

b : in signed ((DATA_WIDTH-1) downto 0);

result : out signed ((DATA_WIDTH-1) downto 0)

);

end entity;

119 of 205

Primjer Generic

entity Gen_Gates is

generic (Delay : Time := 10 ns);

port (In1, In2 : in bit;

Output : out bit);

end Gen_Gates;

architecture Gates of Gen_Gates is

begin

Output <= In1 or In2 after Delay;

end Gates;

In1

In2

Output

Simbol

Parametar se mijenja lako

C1

120 of 205

Brojač koji koristi generic i atribut

----------------------------------counter------------------

Library Ieee;

Use ieee.std_logic_1164.all;

Use Ieee.std_logic_arith.all;

Use ieee.std_logic_unsigned.all;

-----------------------------------------------------------

entity counter is

generic(word_length : integer:=4);

port(

clk, en, rst: in std_logic;

output : out std_logic_vector(word_length-1 downto 0)

);

end counter;

-----------------------------------------------------------

architecture counter_behav of counter is

signal counting : std_logic_vector(word_length-1 downto 0);

begin

process(clk, rst, en)

begin

if rst='1' then

output<=(others=>'0');

counting<=(others=>'0');

elsif clk'event and clk='1' then

if en='1' then

output<=counting;

counting<=counting+'1';

end if;

end if;

end process;

end architecture;

C1

121 of 205

...

-------------------------package---------------------------

Library Ieee;

Use ieee.std_logic_1164.all;

Use Ieee.std_logic_arith.all;

Use ieee.std_logic_unsigned.all;

-----------------------------------------------------------

package counter_package is

component counter

generic(word_length : integer:=16);

port(

clk, en, rst: in std_logic;

output : out std_logic_vector(word_length-1 downto 0)

);

end component;

end package counter_package;

122 of 205

Vježba #3

  1. Konstruisati BCD-SEDMOSEGMENTNI dekoder. Displej može prikazivati i brojeve (0 do 9) i slova (A, B, C, D, E i F). Displej je aktivan logičkom 1. Prikazati rezultat simulacije za BCD=“0111“, „7“. Upotribijeti „case“ i „if elesif“. Priložiti kod i simulacioni dijagram.

  • Simulirati rad 4bitnog up brojača, koristeći donji kod

C1

123 of 205

8bitni Shift Registar

  • Bez flip flopa

library IEEE;

use IEEE.std_logic_1164.all;

entity SHIFTR is

port (

CLK, RSTn, SI : in std_logic;

SO : out std_logic);

end SHIFTR;

architecture RTL of SHIFTR is

signal FF8 : std_logic_vector(7 downto 0);

begin

posedge : process (RSTn, CLK)

begin

if (RSTn = '0') then

FF8 <= (FF8'range => '0');

elsif (CLK'event and CLK = '1') then

FF8 <= SI & FF8(FF8'length-1 downto 1);

end if;

nd process;

SO <= FF8(0);

end RTL;

Sematski prikaz

Kod

C1

124 of 205

Vježba #4

Q0

Q1

Q2

Q3

not

clk

4_bit jonson counter sa DFF. Simulirati rad? Ako su ukloni not gate simulirati ring counter

C1

125 of 205

Podprogrami

  • Dva tipa podprograma: procedure i funkcije. Moraju imati deklaraciju i definiciju. Slicno kao u Cu. Omogucavaju preglednost programa, medjutim treba biti pazljiv pri radu sa njima. Ne zaboravite ovo je hardverski jezik.

126 of 205

Pod-programi

  • Peomjenljive unutar podprograma su lokalne.
  • Validne su samo za vrijeme izvršavanja pod-programa
  • Sadrže sekvencijalne naredbe
  • Funkcije:

-vraćaju jedan argument

-svi parametri su ulazni

function vector2int(vec : bit_vector) return integer is

variable tmp : integer;

begin

tmp := 0;

for i in vec’range loop

if vec(i) = ‘1’ then

tmp := tmp+1;

end if;

end loop;

return tmp;

end vector2int;

function increment(val: bit_vector(7 downto 0)) return bit_vector(7 downto 0);

127 of 205

Pod-programi...

  • Procedure
    • Sadrže više ulazno-izlaznih parametara

procedure vector2int(signal vec : in bit_vector;

variable int: inout integer) is

begin

int := 0;

for i in vec’range loop

if vec(i) = ‘1’ then

int := int+1;

end if;

end loop;

end vector2int;

Ulazno-izlaznog tipa,

moze biti inout ili out

procedure count_256( variable init: in integer; variable compteur:out word_32 )

128 of 205

Pod-programi...

  • Poziv procedure

Myproc1(my_signal,my_variable,1);

Myproc1(formal1 => ‘1’, formal2=>”111” ,formal3 =>1);

Myprocedure3; --No parameters

129 of 205

Pod-programi...

  • Primjer pozivanja funkcije za konverziju tipa

U biblioteci

C1

130 of 205

Pod-programi...

-- ilustration of function and procedure

libraryieee;

use ieee.std_logic_1164.all;

Entity comp_by_func_by_proc is

port

(

X,Y : in bit;

Z1,Z2 : out bit

);

end entity;

architecturebehav of comp_by_func_by_proc is

-- comparator by function

function COMP_BITS(A, B: in bit) return bit is

begin

if A=B then return '1'; else return '0';

end if;

end COMP_BITS;

-- comparator by procedure

procedure COMP_BITS(signal A, B: bit; signal C: out bit) is

begin

if A=B then C<='1'; else C<='0'; end if;

end procedure;

-- begin of architecture

begin

Z1<=COMP_BITS(X,Y); -- call function

COMP_BITS(X,Y,Z2); -- call procedure

end architecture;

Projektovati VHDL kod komparatora koristeći funkciju:

function COMP_BITS(A, B: in bit) return bit is

…….

end COMP_BITS;

funkcija vraća logičku “1” ako je A>B. U ostalim slucajevima “0”.

Projektovati isti kod koristeci proceduru

procedure COMP_BITS(signal A, B: bit; signal C: out bit) is

........

C1

131 of 205

Pod-programi...

--- DFF preko procedure

entity flop is port(clk: in bit;

data_in: in bit_vector(7 downto 0);

data_out, data_out_bar: out bit_vector(7 downto 0));

end flop;

architecture design of flop is

procedure dff(signal d: bit_vector; signal clk: bit;

signal q, q_bar: out bit_vector) is

begin

if clk'event and clk = '1' then

q <= d; q_bar <= not(d);

end if;

end procedure;

begin

dff(data_in, clk, data_out,data_out_bar);

end design;

C1

132 of 205

Pod-programi...

  • Uvježbavanje poziva funkcije iz ugradjenih biblioteka na primjeru množača

LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_unsigned.ALL;

ENTITY design_one IS

PORT (a,b : IN STD_LOGIC_VECTOR (7 DOWNTO 0);

f : OUT STD_LOGIC_VECTOR (15 DOWNTO 0));

END design_one;

ARCHITECTURE add_design OF design_one IS

BEGIN

f <= a * b;

END add_design;

Funkcija množenja definisana u ovoj biblioteci

package std_logic_unsigned is

......................................

function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;

......................................

function "-"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;

......................................

function "*"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;

......................................

function "<"(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;

....................................

end std_logic_unsigned;

a[7..0]

b[7..0]

c[15..0]

a*b

C1

133 of 205

Vježba #5

a) Projektovati VHDL kod MAX_MIN koristeći funkciju:

function MAX_MIN(A, B,C: in integer; D: in bit, ) return integer is

…….

end MAX_MIN;

Aka je D=0 funkcija vraca maximalnu vrijednost (najveci od) ulaznih parametara

A,B,C, ako je D=1 funkcija vraca minimalnu vrijednost (najmanji od) ulaznih

parametara .

b) Realizovati isti kod koristeći proceduru.

Priložiti kod i simulacione dijagrame.

c) Napraviti package my_pack koji pored ostalog sadrzi funkciju function vector2int. Iz drugog *.vhd programa pozvati datu funkciju i ilustrovati njen rad pomoću simulacionih dijagrama.

C1

134 of 205

Vježba #6…

d)

Projektovati VHDL kod koji će polu-sabirač realizovati pomoću funkcije ADD_BITS(X,Y) tako da se izlazni signali mogu izraziti preko ulaznih u formi.

............

RESULT<=ADD_BITS(X,Y);

CARRY<=X AND Y;

............

Funkcija ADD_BITS ima oblik

function ADD_BITS(A, B: in bit) return bit is

begin

return(A XOR B)

end ADD_BITS;

Isti kod realizovati preko procedure ADD_BITS

procedure ADD_BITS(signal A, B: bit; signal q: out bit) is

begin

q<=A XOR B;

end procedure;

C1

135 of 205

Vježba #7…

C1

C1

136 of 205

Vježba #7…

-- Taken from https://allaboutfpga.com/sequence-detector-using-mealy-and-moore-state-machine-vhdl-codes/

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity mealy is

Port ( clk : in STD_LOGIC;

din : in STD_LOGIC;

rst : in STD_LOGIC;

dout : out STD_LOGIC);

end mealy;

architecture Behavioral of mealy is

type state is (st0, st1, st2, st3);

signal present_state, next_state : state;

begin

syncronous_process : process (clk)

begin

if rising_edge(clk) then

if (rst = '1') then

present_state <= st0;

else

present_state <= next_state;

end if;

end if;

end process;

next_state_and_output_decoder : process(present_state, din)

begin

dout <= '0'; case (present_state) is when st0 =>

if (din = '1') then

next_state <= st1;

dout <= '0';

else

next_state <= st0;

dout <= '0'; end if; when St1 =>

if (din = '1') then

next_state <= st1;

dout <= '0';

else

next_state <= st2;

dout <= '0'; end if; when St2 =>

if (din = '1') then

next_state <= st1;

dout <= '1';

else

next_state <= st0;

dout <= '0'; end if; when others =>

next_state <= st0;

dout <= '0';

end case;

end process;

end Behavioral;

-- Taken from https://allaboutfpga.com/sequence-detector-using-mealy-and-moore-state-machine-vhdl-codes/

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity mealy is

Port ( clk : in STD_LOGIC;

din : in STD_LOGIC;

rst : in STD_LOGIC;

dout : out STD_LOGIC);

end mealy;

architecture Behavioral of mealy is

type state is (st0, st1, st2, st3);

signal present_state, next_state : state;

begin

syncronous_process : process (clk)

begin

if rising_edge(clk) then

if (rst = '1') then

present_state <= st0;

else

present_state <= next_state;

end if;

end if;

end process;

next_state_and_output_decoder : process(present_state, din)

begin

dout <= '0'; case (present_state) is when st0 =>

if (din = '1') then

next_state <= st1;

dout <= '0';

else

next_state <= st0;

dout <= '0'; end if; when St1 =>

if (din = '1') then

next_state <= st1;

dout <= '0';

else

next_state <= st2;

dout <= '0'; end if; when St2 =>

if (din = '1') then

next_state <= st1;

dout <= '1';

else

next_state <= st0;

dout <= '0'; end if; when others =>

next_state <= st0;

dout <= '0';

end case;

end process;

end Behavioral;

Present State

Input

Next State

Output

S0

0

S0

0

S0

1

S1

0

S1

0

S2

0

S1

1

S1

0

S2

0

S0

0

S2

1

S1

1

The Transition Table

State diagram

Simulation

C1

Detektor sekvence "1001"

137 of 205

Vježba #7…

  • There are two types of the finite state machine: Mealy Machine, Moore Machine
  • The Key Difference Between Mealy Machine And Moore Machine is that Moore Machine Output depends only upon the current state whereas  Mealy Machine Output depends on the current state as well as current input.

Mealy Machine

Moore Machine

Output depends on the present state as well as the present input.

Output depends only upon the present state.

If input changes, output also changes.

If input changes, the output does not change.

Asynchronous output generation.

Synchronous output generation.

Fewer states than the Moore machine.

More states than the Mealy machine.

A Counter is not a Mealy Machine

A Counter is Moore Machine

It requires less hardware

It requires more hardware

Difficult to Design

Easy to Design

C1

138 of 205

Vježba #7…

--Isti problem, resenje pomocu shift registra

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

entity shift_register_det is

Port ( CLK : in STD_LOGIC;

D : in STD_LOGIC;

LED : out STD_LOGIC);

end shift_register_det;

architecture Behavioral of shift_register_det is

signal shift_reg : STD_LOGIC_VECTOR(2 downto 0) := B"000";

signal det: STD_LOGIC;

begin

process (CLK)

begin

if (CLK'event and CLK = '1') then

shift_reg(2) <= D;

shift_reg(1) <= shift_reg(2);

shift_reg(0) <= shift_reg(1);

--condition for "101"

if shift_reg(2) = '1' and shift_reg(1) = '0' and shift_reg(0) = '1' then

det <= '1';

else

det <= '0';

end if;

end if;

end process;

-- hook up the det bi to the led

LED <= det;

end Behavioral;

C1

139 of 205

PLD - FPGA

Programabilna logička kola

(PLD – Programmable Logic Devices)

Lokalno Programibilne Sekvencijalne mreže

(FPGA - Field Programmable Gate Array)

140 of 205

Sadržaj

  • Pregled digitalnih elektronskih komponenata prema teh. izrade.
  • Standardna logika vs programabilna (PLD)

- Mjesto PLDs u elektronskoj industriji

- Vrste PLD

  • FPGA

- Konfigurisanje FPGA čipova

  • FPGA “Design Flow”
  • Važniji proizvodjači FPGA
  • Konfigurisanje FPGA čipova
  • Dizajn primjer
  • Proizvodjači FPGA čipova

141 of 205

Elektronske komponente, tehnologija

  • Digitalne komponente prema tehnologiji izrade

142 of 205

Standardna logika vs Programabilna

.

.

.

Konvecionalni AND simbol

.

.

.

Programabilni simbol

Glavna razlika!

a

b

c

F

F = a.b.c

a

b

c

F = 0

F = a.c

143 of 205

Mjesto PLDs u elektronskoj industriji

PLDs su ključne komponente

elektronskih sistema:

  • Processor
  • Memory
  • Logic

Prednosti: Brz i jeftin razvoj,

idealne za proto-tipove, mogućnost

višestruke upotrebe

i raznovrsne implementacije:

Mane: dimenzije, skupe za serijsku proizvodnju,

veća potrošnja, veće kašnjenje.

PLD

144 of 205

Vrste PLDs

  • PROM (Programmable ROM) - radjeno
  • PLA (Programmable Logic Array) - radjeno
  • PAL (Programmable Array Logic) - radjeno
  • GAL (Generic Array Logic) - radjeno
  • CPLD (Complex Programmable Logic Device
  • FPGA (Field Programmable Gate Array)

145 of 205

CPLD

  • Sadrži više PAL blokova na jednom čipu sa programabilnim linijama izmedju njih.
  • Svaki PAL blok se sastoji od izvesnog broja makro-ćelija (macro cells).

PLD

Block

PLD

Block

Interconnection Matrix

I/O Block

I/O Block

PLD

Block

PLD

Block

I/O Block

I/O Block

Interconnection Matrix

146 of 205

CPLD Primjer - Altera MAX7000

EPM7000 Series Block Diagram

147 of 205

CPLD Primjer - Altera MAX7000, Makroćelija

EPM7000 Series Device Macrocell

148 of 205

FPGA

  • FPGA su PLD velikog kapaciteta
  • Sastoje se od programabilnih ćelija okruženih programabilnim inter-konekcijama.
  • Pronadjene su 1985 (Xilinx)
  • Mogu implementirati kombinacionu i sekevncionalnu logiku
  • Kapacitet: 1K do 1M logičkih kapija
  • Brzina: do 200MHz.
  • Aplikacije: izrada prototipova, FPGA bazirani kompjuteri, DSP, mrezne komponente, itd,itd

149 of 205

FPGA, struktura

Programabilne

Interkonekcije

Programabilni

Logički blokovi

Programabilni

I-O Blokovi

150 of 205

Ostali FPGA blokovi

  • Clock distribucija
  • Usadjeni memorijski blokovi
  • Blokovi specijalne namjene:
    • DSP blok:
      • Hardware multipliers, adders and registers
    • Usadjeni microprocessors/microcontrollers
    • UART (serijska komunikacija)
    • USB komunikacija
    • Itd.

151 of 205

FPGA – Osnovni logički elemenat

  • LUT služe za implementaciju kombinacione logike.
  • Registri za implementaciju sekvencijalne logike.
  • Ostala logika (nije prikazana):
    • Carry logika za aritmetičke funkcije
    • Proširena logika za funkcije koje zahtijevaju više od 4 ulaza

LUT

Out

Select

D

Q

A

B

C

D

Clock

152 of 205

Look-Up Tables (LUT)

Truth-table

A

B

C

D

Z

0

0

0

0

0

0

0

0

1

1

0

0

1

0

1

0

0

1

1

1

0

1

0

0

0

0

1

0

1

1

0

1

1

0

1

0

1

1

1

1

1

0

0

0

0

1

0

0

1

1

1

0

1

0

1

1

0

1

1

1

1

1

0

0

0

1

1

0

1

0

1

1

1

0

0

LUT

A

B

C

D

Z

A

B

C

D

Z

LUT implementation

Gate implementation

  • Look-up table sa N-ulaza može biti upotrebljena za implementaciju bilo koje kombinacione funkcije od N ulaza
  • LUT se programila sa tabelom istinitosti

=

153 of 205

LUT Implementacija

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

X1

X2

X3

F

Configuration memory

cells

  • Primjer: 3-input LUT
  • Bazirana na multipleksorima (prekidačkim tranzistorima)
  • Sadržaj LUT smješten u ćelijama konfiguracione memorije

X1

X2

X3

F/F

0

0

0

1/0

0

0

1

1/1

F=/X1/X2/X3 or /X1/X2X3

F=/X1/X2/X3

itd..

…………………….

154 of 205

Programabilne interkonekcije

LE

LE

LE

LE

LE

LE

Switch

Matrix

Switch Matrix

  • Interkonekcijska hiararhija (nije prikazana)
    • Brze lokalne interkonekcije
    • Horizontalne i vertikalne linije različite dužine

155 of 205

Prekidačka matrica

  • 6 tranzistora po tački interkonekcije
  • Tranzistori se ponašaju kao programabilni prekidači
  • “Geta-ovi” dranzistora su spojeni na bitove konfiguracione memorije

Poslije programiranja

Prije programiranja

0/1

156 of 205

FPGA – Altera FLEX 8000

- od 4000 do 15000 logickih kapija, izgled jedne makro ćelije (MC) ili logičkog elementa (LE)

157 of 205

FPGA – ALTERA Cyclone Seria

  • Cyclone FPGA familija je bazirana na 1.5V, 0.13um, SRAM procesu sa gustinom do 20060 logičkih elemenata (LEs) i do 288 Kbita RAMa. Takodje posjeduje PLL strukture i veliki broj dodatnih pogodnosti. Ova familija je pogodna za interkonekciju različitih periferija, gdje podržava brzine transfera do 311 megabita po sekundi.
  • Cyclone ugradjena memorija se sastoji od banaka (kolona) M4K blokova. Svaki M4K blok može implementirati različite tipove memorije sa ili bez parnosti, uključujući i nekoliko vrsta dual port and single port RAM, ROM i FIFO. Ukupno sadrži 4,608 RAM bitova.
  • U Cyclone arhitekturi konekcija izmedju LEta, M4K memorijskih blokova i I-O pinova je omogućena pomoću MultiTrack interconnect structure sa DirectDrive tehnologijom.

158 of 205

Cyclone Serie - LE

159 of 205

Konfigurisanje FPGA čipova

  • Konfigurabilnost PLD kola omogućena je postojanjem internih

programabilnih tačka koje, u suštini, predstavljaju prekidačke

elemente koji se mogu programirati tako da se ponašaju kao

kratko-spojeni ili otvoreni prekidači. U fazi programiranja kola,

signali koji se dovode na ulaz kola otvaraju i zatvaraju

programabilne tačke (elektronske prekidače) i na taj način

ostvaruju željene oblike povezivanja internih komponenta.

  • Kod prvih PLD kola za realizaciju programabilnih prekidača

korišćeni su poluprovodnički osigurači. Inicijalno svi osigurači

su "nesagoreni". Pobuđivanje kola nešto višim naponima od

radnih uslovljava da kroz PLD protiču velike struje.

Kao posledica, veze koje formiraju osigurači se raskidaju.

Treba pri ovome naglasiti da ne postoji metod za rekonstrukciju

(obnavljanje) stanja prekidača, tj. njegovo sagorevanje je

trajno ili bespovratno. Tipičan predstavnik ovakvih

kola je programabilni ROM ili PROM.

160 of 205

Konfigurisanje FPGA čipova...

  • Danas, kod SPLD i CPLD kola, za realizaciju programabilnih prekidača, preovladavaju tehnologije zasnovane na tranzistorima sa izolovanim gejtom (floating-gate) EPROM ili EEPROM tipa, dok se kod FPGA uglavnom koriste SRAM (Static RAM) i antifuse tehnologije.
  • SRAM tehnologija programiranja. Kod ove tehnologije, konfigurisanje kola se ostvaruje pomoću pass tanzistora i multipleksera koji se upravljaju SRAM ćelijama. Par “SRAM ćelija - pass tranzistor” se koristi kao programabilna veza između dva žičana segmenta, slika.

Xilinix, Altera,

Plessey, Algotronix,

Concurent Logic i Toshiba.

161 of 205

Konfigurisanje FPGA čipova...

  • Floating_Gate tehnologija. Radi se o istoj tehnologiji koja se sreće kod EPROM i EEPROM memorija. Programabilni prekidač je tranzistor sa izolovanim gejtom (EPROM tranzistor), koji se, programiranjem, može permanentno zakočiti, slika. Ovo se postiže injektovanjem naelektrisanja na izolovani gejt tranzistora (gejt 2). Do injektovanja nelektrisanja dolazi kada se između upravljačkog gejta (gejt 1) i drejna tranzistora dovede visok napon. Injektovano naelektrisanje povećava napon praga tranzistora, tako da on, u normalnom režimu rada, ostaje stalno zakočen (tj. neprovodan).

Altera, Plus Logic

162 of 205

Konfigurisanje FPGA čipova...

  • Antifuse tehnologija programiranja. Antifuse je komponenta sa dva kraja koja u neprogramiranom stanju poseduje veoma veliku serijsku otpornost (tj. predstavlja otvoren prekidač). Antifuse se sastoji od tri sloja. Krajnji slojevi su provodni, a sloj u sredini je dialektrik. Anifuse se postavlja između dva žičana segmenta, slika. Programiranje se vrši dovođenjem visokog napona (od 11 do 20V, što zavisi od tipa antifusa) na krajeve antifuse-a.

Actel, Quck Logic,

Crosspoint

163 of 205

REALNI FPGA CIP

Više vrsta pinova

  • Za napajanje (VCC,GND)
  • Za konfigurisanje

(nSP, MSEL1, MSEL0,

DCLK, DATA0, nCONFIG

CONF_DONE, nSTATUS)

  • Za klok (CLK)
  • .....

Npr: EPF8452ALC84-2

ima 84 pina od kojih 8 ide na

masu (GND), 5 na VCC, 8 na konf.

164 of 205

Načini konfigurisanja FPGA

  • Moguće konfiguracione šeme

Konfiguraciona šema

Akronim

Izvor podataka

Aktivna serijska

AS

Konfiguracioni EPROM

Aktivna paralelna gornja

APU

Paralelni EPROM

Aktivna paralelna donja

APD

Paralelni EPROM

Pasivna serijska

PS

Serijski kanal podataka

Pasivna paralelna sinhrona

PPS

Inteligentni host

Pasivna paralelna asinhrona

PPA

Inteligentni host

165 of 205

Eksterni kontroleri za konfiguraciju

  • U aplikacijama, koje zahtjevaju rekonfiguraciju u realnom vremenu uredjaja najbolji izbor je ponovo pasivna konfiguraciona šema. Rekonfigurabilnost dozvoljava da se logički resursi iskoriste na drugačiji način umjesto da se dizajnira druga logika ili koristi više kola u sistemu.Pasivna konfiguracija lako podržava eventualnu potrebu za više izvora konfiguracionih podataka koja se može javiti .
  • PS konfiguraciona veza koristi eksterni kontroler za konfiguraciju npr. FLEX serije uredjaja sa serijskim nizom bitova. Pri tome se FPGA čip tretira kao slejv uredjaj sa petožičanim interfejsom ka eksternom kontroleru. Eksterni kontroler može biti :
  • Quartus II programer, korišten zajedno sa PL-MPU (Master Programming Unit), odgovarajućim adapterom i FLEX download kablom.
  • Inteligentni host kao što je mikrokontroler ili CPU.
  • Altera “ByteBlaster download kabal.
  • U našim primjerima korištena konfiguracija sa ByteBlaster kablom. Podaci se sinhronizuju sa eksternim klokom iz izvora podataka. Pri tome se koristi ili Quartus II programer. Uredjaj se konfiguriše sa “SRAM Object File” (.sof) koji se generiše automatski u toku procesa kompalacije.

166 of 205

Izvodjenje konfiguracije, tajming

  • Šema veze FLEX 8000 za konfiguraciju u PS modu

167 of 205

Načini konfigurisanja FPGA

  • Principijelna šema Byte Blastera MV.

168 of 205

Važniji proizvodjači FPGA

  • ALTERA - www.altera.com

  • XILINX – www.xilinx.com

  • CYPRESS – www.cypress.com

  • ATMEL – www.atmel.com

  • LATTICE – www.latticesemi.com

169 of 205

Implementacija u programabilno-konfiguratibilnom čipu, FPGA

Kod, kompalacija, simulacija, verifikacija simulacije

Na

racunaru

cip

Konfiguracija, verifikacija rada, pomocu konfiguratora/programatora ili na razvojnoj ploci

170 of 205

DC adapter

Pročitati fajl:

  • “Getting_Started_with_DE2-70_board.pdf”
  • Pročitati fajl “DE2_70_User_manual_v109.pdf”
  • Presnimiti odgovarajući CD

Quartus

+

Drivers

USB kabal

FPGA cip

Cyclone II,

EP2C70F896C

Periferije

Periferije

Implementacija ns FPGA ploči

171 of 205

Altera DE2-70 ploča (board)

  • Ploca koju mi koristimo i sadrzi:
  • · Altera Cyclone® II 2C70 FPGA device, cip EP2C70F896C
  • · Altera Serial Configuration device - EPCS16
  • USB Blaster (on board) for programming and user API control; both JTAG and Active Serial (AS) programming modes are supported
  • 2-Mbyte SSRAM
  • · Two 32-Mbyte SDRAM
  • · 8-Mbyte Flash memory
  • · SD Card socket
  • · 4 pushbutton switches
  • · 18 toggle switches
  • · 18 red user LEDs
  • · 9 green user LEDs
  • · 50-MHz oscillator and 28.63-MHz oscillator for clock sources
  • · 24-bit CD-quality audio CODEC with line-in, line-out, and microphone-in jacks
  • · VGA DAC (10-bit high-speed triple DACs) with VGA-out connector
  • · 2 TV Decoder (NTSC/PAL/SECAM) and TV-in connector
  • · 10/100 Ethernet Controller with a connector
  • · USB Host/Slave Controller with USB type A and type B connectors
  • · RS-232 transceiver and 9-pin connector
  • · PS/2 mouse/keyboard connector
  • · IrDA transceiver
  • · 1 SMA connector
  • · Two 40-pin Expansion Headers with diode protection

172 of 205

DE2-70 raspored pinova...

173 of 205

Vjezba #1, konfiguracija, provjera funkcionalnosti

  • Projektujmo i realizujmo polusabirac “do kraja”

ENTITY half_adder IS

PORT( x, y, enable: IN BIT;

carry, result: OUT BIT);

END half_adder;

ARCHITECTURE half_adder_b OF

half_adder IS

BEGIN

carry <= enable AND (x AND y);

result <= enable AND (x XOR y);

END half_adder_b;

Kompalacija

Simulacija i ver.

Assignment i

Konfiguracija na čipu

Provjera funkcionalnosti

“Core”files za fabrikaciju

174 of 205

LAB- Vjezba #1, konfiguracija i provjera funkcionalnosti

5V

5V

5V

SW[0] PIN_AA23

SW[1] PIN_AB26

SW[2] PIN_AB25

LEDR[0] PIN_AJ6

LEDR[1] PIN_ AK5

FPGA cip,

Cyclone II,

EP2C70F896C

DE2-70 ploča

Demonstracija rada polusabirača preko na DE2-70 ploči

175 of 205

a

b

c

d

e

ao

onal

ENTITY alarm IS

PORT

(

a, b, c, d, e, onal : IN BIT;

ao,l1 : OUT BIT

);

END alarm;

ARCHITECTURE myarch OF alarm IS

BEGIN

ao<= (a or b or c or d or e) and onal;

l1<=not(not onal);

END myarch;

l1

Vcc

Sw(0..)

DE2-70 FPGA pins

Onal SW[0] PIN_AA23

a SW[1] PIN_AB26

b SW[2] PIN_AB25

c SW[3] PIN_AC27

d SW[4] PIN_AC26

e SW[5] PIN_AC24

11 LEDR[0] PIN_AJ6

ao LEDR[1] PIN_AK5

LEDR(0..)

Hocemo da konstruisemo kolo (cip) koji je alarm otvorenosti vrata automobila

Naime, izlaz “ao” koji je vezan na LEDR[1] se automatski aktivira ako su bilo koja od 5 vrata “a…e” otvorena (pri otvaranju vrata se aktiviraju odgovarajući mikroprekidači, koje ovdje simuliramo sa Sw[1]…Sw[5]. Ako je “onal” SW[0] ukljucen, to idicira LEDR[0], kolo je sposobno da funkcioniše;

Step1: Napravimo VHDL cod alarma

Step2: Dodijelimo cip

Step3: Dodijelimo pinove

Step 4: Provjerimo funkcionalnost na ploci

Alarm

onal

Lab Vježba #2, Demonstracija prostog upotrebljivog kola

176 of 205

Lab Vježba #3, Demonstracija prostog upotrebljivog kola �

177 of 205

Napredne tehnike projektovanja FPGA kola

178 of 205

Zašto napredni dizajn?

Prosti FPGA dizajn ima odredjene mane i ne može se koristiti u profesionalne svrhe. Optimalne performanse u procesu projektovanje FPGA kola mogu se očekivati ako smo ispoštovali veliki broj pravila proisteklih iz znanja i iskustva. Takva pravila se mogu ugraditi u VHDL kodu ili pak u šematskom prikazu. To se odnosi na tehnike kao što su prednosti sinhronog u odnosu na asinhroni dizajn, dupliciranje Flip-Flopova u svrhu smanjenja fan-outa, “Pipelining”, I/O Flip-Flops, kola za sinhronizaciju i reset itd. Takodje su važne i tehnike koje smanjuju potrošnju (konzumaciju) FPGA kola.

179 of 205

Sinhrona vs. asinhrona kola

Sinhrona kola su mnogo pouzdanija.

  • Glavni princip ovih kola je da su sva zbivanja sinhronizovana sa klokom.
  • Izlaz iz jednog logičkog stanja treba da ima jedan puni period kloka da dodje do drugog.
  • “Skew faktor” – faktor skošenja, mora biti unutar istog klok intervala.

Generalno, gdje god je to moguće treba koristiti sinhroni pristup.

Asinhrona kola su manje pouzdana.

  • Uticaj kašnjenja je izražen (npr. 12ns).
  • Višestruka kašnjenja mogu da dovedu do različitih posledica(e.g. DATA dolazi 5ns prije SELECT)

Treba ih izbjegavati prilikom projektovanja

180 of 205

Kombinacione Petlje

Najčešći uzrok nestabilnosti i nepouzdanosti. Moraju se izbjegavati gdje je to moguće.

181 of 205

Generatori impulsa i multivibratori

Asinhroni (ne preporučuju se).

Koristiti sinhroni tamo gdje je to potrebno.

182 of 205

“Clocking” šeme

“Registrovanje” izlaza kombinacione logike prije korišćenja kloka.

183 of 205

“Clocking” šeme...

  • Clock divider.
  • Klasični (proizvodi clock “skew” izmedju CLK1 i CLK2)
  • Preporuceni (eliminisan) “clock skew”

184 of 205

“Clocking” šeme...

  • Multiplexiranje clocka, pogodno za telekomunikacione šeme.

185 of 205

“Clocking” šeme...

  • Eliminacija “Glitcheva”
  • Zato što su današnji klokovi kod FPGA veoma brzi, mogu izazvati pojavu kratkih impulsa.
  • Nikada ne snadbijevaj klok signal iz kombinacione logike.
  • Moraju se uvesti tehnike “gated clock” radi eliminacije glitcheva.

“glitch”

186 of 205

“Clocking” šeme...

  • Eliminacija “Glitcheva”, gornja funkcija, ali bez glitcheva.

187 of 205

“Clocking” šeme...

  • “Gated clock”

188 of 205

“Clocking” šeme...

  • Preporučena “Clock-Gating” tehnika.

189 of 205

Set/Reset “Glitchevi”...

  • Glitch-glič, greška, neželjen impuls.
  • Glitchevi na asinhronom clearu mogu izazvati probleme u kolu.

glitch

190 of 205

Set/Reset “Glitchevi”...

  • Pretvoriti asinhroni u sinhroni set ili reset, gdje je moguće.

191 of 205

Clock “Skew”...

  • skew –izvitoperiti.
  • Šift registar ne radi ispravno zbog clock “skew”a!

Expected operation

Clock

Q_A

Q_B

Q_C

3 cycles

Clock skewed version

A & C Clock

Q_A

Q_B

Q_C

B Clock

2 cycles

“kasnjenje”

192 of 205

Dupliciranje Flip-Flopova...

  • Visoki-”fanout”, prekoračenje, može izazvati probleme (usporiti rad kola). (Fan - out) mogućnost opterećenja izlaza, najveci broj standardnih kola koje je moguće vezati na izlaz datog kola (kao opterećenje).
  • Dupliciranje flip-flopa može pomoći.

193 of 205

“Pipelining” Koncept...

pipe-line, cjevovod

194 of 205

Kašnjenja u “pipeline” arhitekturama

  • Svaka “pipelin” faza dodaje kašnjenje od jednog kloka.
  • Tehnika “filling the pipeline” može pomoći.

195 of 205

“Pipelining” Primjer

  • Originalno kolo

  • Dva logička nivoa izmedju SOURCE_FFS i DEST_FF

  • –fMAX= ~233 MHz, max frekvencija koja ne izaziva probleme.

196 of 205

“Pipelining” Primjer...

  • Filling
  • Jedan logički nivo izmedju svakog seta flip-flopova
  • –fMAX= ~385 MHz , max frekvencija koja ne izaziva probleme.

197 of 205

Primjer

  • Problem pipelining u orginalnom kolu?
  • Kako ga izbjeći?
  • Šta je problem u “pipelined” circuit?

198 of 205

Primjer…

  • Dodavanje flip-flopa na SELECT otklanja problem.
  • Svi ulazni podaci sada imaju isto kašnjenje.

199 of 205

Kola za sinhronizaciju

  • Circuit 1:
  • Upotrebljava se kada će ulazni impulsi biti makar dužine kloka
  • “extra” flip-flop protiv metastabilnosti.

200 of 205

Kola za sinhronizaciju...

  • Circuit 2:
  • Ulazni signal može biti manji od dužine kloka.
  • –FF1 “captures” (hvata) kratki impuls.

201 of 205

Kola za sinhronizaciju...

  • Capturing a Bus. “Leading edge detector”, ulazni impulsi biti makar dužine kloka.

202 of 205

Kola za sinhronizaciju...

“Leading edge detector”

  • Ulazni signal može biti manji od dužine kloka

203 of 205

Napredni dizajn

Primjer realizacije Fleksibilnog FPGA

baziranog IIR filtra.

  • U okviru ovog paragrafa dat je primjer realizacije jednog složenijeg sistema, konkretno IIR filtra.
  • Upoznajmo se prvo sa osnovnom funkcijom tj. jednačinom IIR sistema.

204 of 205

Opšta forma funkcije prenosa digitalnog sistema

  • Svaki digitalni sistem se može predstaviti takozvanom funkcijom prenosa, čiji je opšti oblik dat formulom.

  • Datoj funkciji prenosa u vremenskom domenu odgovara diferencna jednačina:

  • Kao sto se vidi sastavni djelovi su kolo za kasnjenje, mnozac i sabirac. Vise o realizaciji digitalnog filtra u FPGA tehnologiji, (Zoran_Jaksic _Diplomski _Rad .pdf)

205 of 205

Ostali primjeri

  • Digitalna obrada slike (M_Zogovic_Diplomski.pdf).
  • Instrumentacija (Banjevic_Davidovic_FM.pdf).
  • Energetska elektronika (Milic_ETRAN_2006.pdf).

(Pogledati radove na ovu temu, date u prilozima).