Toto je starší verze dokumentu!


3. Principy VHDL

Úvod

Myšlenka

Jazyk pro popis hardwaru (Hardware Description Language)

Algoritmus
Algoritmus je konečná uspořádaná množina úplně definovaných kroků pro vyřešení nějakého problému. Intuitivně algoritmem rozumíme postup, který nás dovede k řešení úlohy. Formálněji vyjádřeno se jedná o přesně definovanou konečnou posloupnost příkazů (kroků), jejichž prováděním pro každé přípustné vstupní hodnoty získáme po konečném počtu kroků odpovídající hodnoty výstupní.

algoritmus lze naimplementovat softwarově, hardwarově, jejich kombinace

Jsme-li schopni naimplementovat sekvenci, selekci, iteraci, je možné řešit každý algoritmicky řešitelný problém.

sekvence

selekce

iterace

výhody obvodové implementace

  • výrazně rychlejší, vyšší stupeň paralelismu, specifické komponenty (Fourierova transformace)
  • obvykle menší plocha čipu (pouze nezbytné součásti) a spotřeba energie

nevýhody obvodové implementace

  • vyšší výrobní náklady než u obecného procesoru
  • obtížnějsí návrh než software
  • často jednoúčelové

Způsoby popisu

  • strukturálně - popis pomocí komponent a zapojení (vodičů), bližší konečnému návrhu
  • behaviorální - popis konstrukcemi běžnými v prog. jazycích (cykly, procedury, funkce), vhodné pro simulaci

elementární komponenty jsou popsány behaviorálně (např. AND ⇒ nemá smysl popisovat jeho strukturu)

Proces syntézy

  • behaviorální syntéza - popis na nejvyšší úrovni (viz. behaviorální popis), výstupem popis na úrovni meziregistrových přenosů, nevýhodou je nemožnost ovlivnit výsledný popis (závislí na vývojových nástrojích)
  • RTL (Register Transfer Language) syntéza - popis pomocí registrů, čítačů, automatů, atd., oddělena datová (registry, sčítačky, …) a řídící část (FSM), výstupem popis pomocí hradel
  • logická syntéza - popis na úrovní hradel, sestaven z komponent cílové architektury propojených vodiči

Základní kontrukce jazyka

-- knihovny
library IEEE;
use IEEE.std_logic_1164.all;

-- popis rozhraní
entity FA is
  port (
    A, B, CI : in std_logic;
    S, COUT : out std_logic);
end FA;

-- realizace rozhraní
architecture RTL of FA is
begin
  S <= A xor B xor CI;
  COUT <= (A and B) or (A and CI) or (B and CI);
end RTL;

Popis kódu

  • uvedení knihoven, které se budou používat (na začátku kódu)
    • library - použivá knihovna
    • use - výběr dané komponenty z knihovny
  • popis rozhraní obvodu
    • entity jmeno is
    • port - deklarace signálů (in, out, inout; std_logic, std_logic_vector, …)
  • implementace rozhraní
    • architecture typ_popisu of jmeno is
    • uvnitř je popis, který probíhá paralélně (nezávisí na pořadí příkazů)
    • před begin deklarace signálů, komponent, atd. použitých v implementaci
  • přiřazení logické hodnoty signálu

Strukturální popis sčítačky

definice komponent

library IEEE;
use IEEE.std_logic_1164.all;

entity OR3 is
  port (
  A, B, C : in std_logic;
  Z : out std_logic);
end OR3;

architecture DF of OR3 is
begin
  Z <= A or B or C;
end DF;

+ další komponenty

popis obvodu z komponent

library IEEE;
use IEEE.std_logic_1164.all;

entity FA is
  port(
    A, B, CI : in std_logic;
    S, COUT : out std_logic);
end FA;

architecture LIB of FA is
  component EO
    port( A, B : in std_logic; Z : out std_logic);
  end component;
  
  component AN2
    port( A, B : in std_logic; Z : out std_logic);
  end component;
  
  component OR3
    port( A, B, C : in std_logic; Z : out std_logic);
  end component;
  
  signal S1, A1, A3, A2 : std_logic;
begin
  u0 : EO port map( A => A, B => B, Z => S1);
  u1 : EO port map( A => CI, B => S1, Z => S);
  u2 : AN2 port map( A => A, B => B, Z => A1);
  u3 : AN2 port map( A => A, B => CI, Z => A2);
  u4 : AN2 port map( A => B, B => CI, Z => A3);
  u5 : OR3 port map( A => A1, B => A2, C => A3, Z => COUT);
end LIB;

Popis kódu

  • component - include komponenty vytvořené v jiném souboru
  • port map - propojení portů jednotlivých komponent (mapování portů)
    • port_komponenty ⇒ signal definovaný pro architecture
    • u0 : E0 - pojmenovani_instance : komponenta

Behaviorální popis sčítačky

architecture BEH of FA is
begin
  p1 : PROCESS(A, B, CIN)
  BEGIN
    IF (A='1' AND B='1') OR (A='1' AND CIN='1') OR
    (B ='1' AND CIN='1') THEN
      COUT <= '1';
    ELSE
      COUT <= '0';
    END IF;
    S <= A XOR B XOR CIN;
  END PROCESS;
end BEH;

Popis kódu

  • PROCESS - pro popis chování obvodu a jeho části, příkazy se v něm vykonávají sekvenčně
    • může obsahovat proměnné, řídící struktury, přiřazení signálů
    • návěstí p1 je nepovinné, v závorkách seznam citlivých signálů - proces se provede, je-li aktivní jeden ze signálů

Test Bench

sada testů pro danou komponentu

-- testbench pro FA
library ieee;
use ieee.std_logic_1164.all;

entity tb_fa is
end tb_fa;

architecture arch_tb_fa of tb_fa is
  -- pomoci techto signalu se pripojime k testovane jednotce
  signal A, B, CI: std_logic;
  signal S, COUT : std_logic;
  
  -- tuto jednotku budeme testovat ("deklarace")
  component FA port (
    A, B, CI : in std_logic;
    S, COUT : out std_logic);
  end component;
begin
  -- "instance" testovane jednotky je pripojena pomoci zavedenych signalu
  UUT : FA
  port map (
    S => S, COUT => COUT);
    
  -- vlastni testovani zkousi vsechny kombinace na vstupech
  process
  begin
    A <= '0'; B <= '0'; CI <= '0';
    wait for 10 ns;
    A <= '0'; B <= '0'; CI <= '1';
    wait for 10 ns;
    A <= '0'; B <= '1'; CI <= '0';
    wait for 10 ns;
    A <= '0'; B <= '1'; CI <= '1';
    wait for 10 ns;
    A <= '1'; B <= '0'; CI <= '0';
    wait for 10 ns;
    A <= '1'; B <= '0'; CI <= '1';
    wait for 10 ns;
    A <= '1'; B <= '1'; CI <= '0';
    wait for 10 ns;
    A <= '1'; B <= '1'; CI <= '1';
    wait for 10 ns;
  end process;
end arch_tb_fa;

Průběh testů

Vybrané konstrukce

Knihovny

ieee.std_logic_1164.all

umožňuje vícehodnotové stavy

std_logic - jeden vodič
std_logic_vector - skupina vodičů (např. sběrnice)

ieee.std_logic_unsigned.all

definuje aritmetické operátory nad binárními vektory pro operace sčítání (+), odčítání (-) a násobení (*).

ieee.std_logic_arith.all

umožňuje pracovat s čísly se znaménkem i bez znaménka tak, že zavádí dva nové typy signed a unsigned. Binární hodnotu h datového typu std_logic_vector můžeme zkonvertovat na typ unsigned zápisem unsigned (h) a na typ signed zápisem signed(h).
Pomocí funkce conv_integer je možné provádět konverze mezi hodnotami typu integer a std_logic_vector, např.

signal c : std_logic_vector (3 downto 0);
signal ci : integer;
c <= “1000”;
ci <= conv_integer(signed(c)); -- v ci bude -8

Konstanty

CONSTANT constant_name : type_name [:= value];
CONSTANT PI : REAL := 3.14;
CONSTANT SPEED : INTEGER;

Diskuze

vagyvagabund, 2011/05/04 17:59

VHDL (VHSIC hardware description language)
VHSIC (very-high-speed integrated circuits)

Fituska Userfituska, 2011/08/22 20:08

Zde je příklad strukturálního popisu sčítačky: http://www.urel.feec.vutbr.cz/~kolouch/pld/2_cviceni/kapitola03_05.html

Vložte svůj komentář
 
temata/10-principy_vhdl/main.1301565528.txt.gz · Poslední úprava: 2011/03/31 11:58 autor: vagabund
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki