Jak na VHDL
Transkript
Jak na VHDL
Prácee v jazyk ku VHDL L 1. Z Základní loogické funk kce v jazyk ku VHDL P Poté, co jsm me v minullém projekttu ověřili, že ž jsme sch hopni korekktně nakonffigurovat hradlovvé pole, můžžeme přistou upit k impleementaci záákladních lo ogických fuunkcí. Impleementaci provedeeme v soubběžné domééně (nebo také paraleelní doméně), což znaamená, že všechny implem mentované obbvody poběěží současněě. Opačným m typem je sekvenční ddoména, ve které se příkazy vykonávajíí jeden po druhém, d poddobně jako je j tomu v prrocesoru. V VHDL obsaahuje tyto lo ogické operrátory: - NOT - neggace, - AND - loggický součin n, - OR - logiccký součet, - NAND - negovaný n lo ogický součiin, - NOR - neggovaný logiický součet,, - XOR - loggická nerovn nost, - NXOR - loogická rovn nost. První V VHDL kód bude b podrob bně popsán, aby bylo patrno, co jednotlivé řáddky znamen nají. D Definice záákladních kn nihoven, kteeré jsou pou užity. Kniho ovna „ieee. std_logic_1 1164.all“ definujee typ „std_llogic“, který ý byl vyvinnut právě prro potřeby syntézy s a siimulace čísllicových systémůů. Tento typp může nabý ývat těchto hhodnot: - ‘U‘ - uninnitialized - ‘X‘ - forciing unknow wn - ‘0‘ - logic 0 (driven, forcing) - ‘1‘ - logic 1 (driven, forcing) - ‘Z‘ - high h impedance - ‘W‘ - weaak unknown n - ‘L‘ - logicc 0 (read, weeak) - ‘H‘ - logicc 1 (read, weak) - ‘-‘ - don’t care Tučně jsou zvýraznněny hodnoty, které buudeme v náv vrhu nejčasttěji používat at. Definicee entity. Jaak již bylo řečeno, EN NTITY deffinuje rozhraní (interfface) navrh hovaného moduluu. V sekci PO ORT jsou přímo deklarrovány: - vstupyy: o jednotlivéé vstupy: jm méno_vstupuu : IN STD_ _LOGIC; o sběrnice : jméno_sběěrnice : IN S STD_LOGIIC_VECTOR(MSB dow wnto LSB);; - výstuppy o jednotlivéé výstupy: jm méno_výstuupu : OUT STD_LOGI S IC; o sběrnice : jméno_sběěrnice : OUT T STD_LOGIC_VECT TOR(MSB ddownto LSB B); P Popis chováání v bloku ARCHITE ECTURE. V tomto jedn noduchém ppřípadě se používají p pouze vvstupy a výsstupy entity y. Protože jaak připojeníí LED (LED D_R) diod, ttak přepínaačů (SW) je definováno jako sběrnice, musíme m z tétto sběrnice vybrat pouzze jeden pinn. Toto prov vedeme následuj ujícím zápiseem: - LED_R(0)) - vybere nejnižší n (čísllo 0) pin sběrnice - SW(1) - vybere druhý ý nejnižší piin sběrnice Dále se zde setkávááme s operáátorem přiřaazení hodno oty signálu: - ‘<=’ - nappř.: o LE ED_R(0) <= = SW(0); -- propojení dvou d signálů ů o LE ED_R(2 dow wnto 0) <= SW(2 down nto 0); -- prropojení 3 bbitů ze dvou u sběrnic o LE ED_R(0) <= = SW(0) andd SW(1); --- přiřazení výsledku v opperace - podobbným typem m operátoru je j přiřazení hodnoty prroměnné: ‘:= =’ - jednottlivé příkazyy se oddělujjí pomocí sttředníku: “;”” - komenntáře se zapisují pomoccí: „--“ 2. P Připojení dalších d výsttupů a aritm metické funkce A Abychom mohli m vyzko oušet aritmeetické funkcce (další kaapitola) je vvhodné být schopný si výsleedek zobrazit. Proto se v tomtoo projektu naučíme, jak j zobrazoovat hodno oty na 7 segmenttovém displleji. Jednotliivé vstupní piny displejje odpovídaají segmentů ům, přesně podle p násleedujícího ob brázku: P Připojení prvních p čtyřř displejů k FPGA uk kazuje náslledující sezznam. Podlee tohoto seznamuu musíme do d projektu vložit v další výstup a ko orektně je propojit s pinny FPGA. Jméno F FPGA Pin HEX0[00] PIN_AF110 Seven-Seegment segm ment 0[0] HEX0[11] PIN_AB12 Seven-Segment seggment 0[1] HEX0[22] PIN_AC12 Seven-Segment seggment 0[2] HEX0[33] PIN_AD11 Seven-S Segment seggment 0[3] HEX0[44] PIN_AE111 Seven-Segment seggment 0[4] HEX0[55] PIN_V144 Seven-Seg gment segm ment 0[5] HEX0[66] PIN_V133 Seven-Seg gment segm ment 0[6] gment segm ment 1[0] HEX1[00] PIN_V200 Seven-Seg HEX1[11] PIN_V211 Seven-Seg gment segm ment 1[1] HEX1[22] PIN_W21 Seven-Segment segm ment 1[2] HEX1[33] PIN_Y222 Seven-Seg gment segm ment 1[3] HEX1[44] PIN_AA24 Seven-S Segment seggment 1[4] HEX1[55] PIN_A233 Seven-Seg gment segm ment 1[5] HEX1[66] PIN_AB224 Seven-Segment seggment 1[6] Jméno F FPGA Pin HEX2[00] PIN_AB223 Seven-Segment seggment 2[0] HEX2[11] PIN_V2225 Seven-Seegment segm ment 2[1] HEX2[22] PIN_AC225 Seven-Segment seggment 2[2] HEX2[33] PIN_AC226 Seven-Segment seggment 2[3] HEX2[44] PIN_AB226 Seven-Segment seggment 2[4] HEX2[55] PIN_AB225 Seven-Segment seggment 2[5] HEX2[66] PIN_Y244 Seven-Seg gment segm ment 2[6] HEX3[00] PIN_Y233 Seven-Seg gment segm ment 3[0] HEX3[11] PIN_AA25 Seven-S Segment seggment 3[1] HEX3[22] PIN_AA26 Seven-S Segment seggment 3[2] HEX3[33] PIN_Y266 Seven-Seg gment segm ment 3[3] HEX3[44] PIN_Y255 Seven-Seg gment segm ment 3[4] HEX3[55] PIN_U222 Seven-Seg gment segm ment 3[5] HEX3[66] PIN_W24 Seven-Segment segm ment 3[6] Následuující ukázkky kódu by y měl obsaahovat i Váš V VHDL kód. Upraavte části souboru „top_bloock.vhd“. Knihovnny nutné prro základní aritmetické funkce a Definicee entity včeetně 7 segmeentových diisplejů HEX X0 až HEX3 3 Jednoduuchý kód prro ověření funkce fu 7 seggmentový diisplejů T Tento jednooduchý kód ověří funkcci 7 segmen ntových disp plejů. Na vššechny displeje jsou připojenny přepínačče 0 až 6, které rozsvvěcují nebo o zhasínají jednotlivé segmenty displejů. Segmen nty svítí, pookud se na ně přivedee log 0. Pozn.: JJednoduchýý multiplexeer v jazyku VHDL: JJednoduchýý dekodér ve VHDL - vvšechny hod dnoty jsou zapsaný z binnárně JJednoduchýý dekodér ve v VHDL - hodnoty v podmíncee jsou zapssány v HEX X (x“A“ oodpovídá 0xxA H) D Definice vnnitřního sign nálu: Signálly se definujjí na začátk ku bloku „A ARCHITECT TURE“. Z Základní arritmetické a relační opeerátory: Aritmetické operáátory: + - ssčítání - - oodčítání * - nnásobení / - ddělení (pozoor, někdy lzee dělit moccninou dvěm ma - 2,4,8,16,32 atd.) Modd - modul Abss - absolutníí hodnota ** - umocnění Relačníí operátoryy: = - rovnost //= - nerovnoost > - větší nežž < - menší neež > >= - větší nebo n rovno < <= - menší nebo rovno o Operátor zřetězen ní: & - zřetězenní Priorita operátorů K Konverzní funkce f - conv_integger(std_logic_ vector) - převod std d_logic_vecctor na typ iinteger - conv_std__logic_vecto or(integer, ššířka sběrniice v bitech h) - převod z čísla typu u integer na std_llogic_vector o dané šířce 3. S Sekvenční doména D Doposud vššechny projjekty, které jsme vytvo ořili, běžely y pouze v pparalelní (so ouběžné) doméněě. To znameená, že všeechny příkaazy se vždy y vykonávally najednouu bez ohled du na to, v jakém m pořadí jsouu příkazy naapsány. O Opakem tohhoto chován ní je sekvennční doménaa, kde se přííkazy vykonnávají v tom m pořadí, ve kteréém jsou zappsány. Pozo or si však m musíme dátt na to, že vykonávání v í příkazů neeprobíhá jako v pprocesoru. Tento T probléém bude poopsán dále. S Sekvenční doména se do paralellní vkládá pomocí, p tzv v. procesu. Pokud vložíme do paralelnní domény více proceesů, budem me mít více sekvenčních domén, které opětt poběží paralelnně vedle sebbe. Tímto způsobem see z hradlového pole získá maximáální výkon,, protože můžemee vytvořit více v paraleln ně běžících vvýpočetních h jednotek S Sekvenční loogikou jsou realizoványy operace, u kterých stav v na výstupuu není závisslý pouze na souččasném stavu vstupů, jaako je tomuu u kombin nační logiky y, u které vvystačíme s popisem logickým mi rovnicem mi. Stav na výstupu je zde ovlivňo ován i předešlým staveem vstupů (případně ( výstupů). Z toho plyne, p že sekvenční loogika by měla m být, až na výjimkky, synchron nizována hodinovvým signálem m. Procesyy Z Základním stavebním kamenem sekvenční domény je proces. Prrávě uvnitř procesu jsou přííkazy vykonnávány v zaapsaném poořadí. Záklaadní syntaxee procesu j e ukázána v kód 1. Na této ukázce si vysvětlíme v základní z fakkta: n zapis ovat 1.) jjméno proccesu není nutno 2.) V závorce za „PROCE ESS“ je citllivostní sez znam. Jedn ná se o seznnam signállů, které aaktivují prroces. Tedy y, pokud se některému u signálu z citlivostníh ího seznamu změní ú úroveň, ak ktivuje se proces a proovedou se příkazy p uvn nitř processu. Pokud se s změní ssignál, kterrý není na citlivostním c m seznamu procesu, proces p se neespustí. 3.) P Proměnné deklarovan d né v těle proocesu jsou dostupné d a viditelné v poouze v něm,, nikoli v ccelém modu ulu a jejich h hodnoty zzůstávají neeměnné mezzi jednotlivýými starty procesu. p D Deklarace proměnný ých a siggnálů neníí nutná, pokud p se používají signály d deklarovan né na začáttku architeektury, nebo pokud see pracuje see vstupy a výstupy eentity. 4.) M Mezi „BEG GIN“ a „END D PROCESS;;“ se zapisu ují příkazy sekvenční domény. ngují sekvenční signálly v procesu u Jak fun Uvažujm me následujjící jednodu uchý příkladd, kdy máme 3 proměnn né: signal a : integer := = 1; signal b : integer := = 2; signal c : integer := = 3; process((a,b) begin a <= b; c <= a; end process; Pokud by tato sekvence příkazů proběhla v procesoru, tak by výsledné hodnoty byly: a = 2; b = 2; c = 2; Oproti tomu v hradlovém poli, při použití signálů, budou výsledné hodnoty tyto: a = 2; b = 2; c = 1; Hlavní rozdíl je v tom, že všechny hodnoty, které se mají přečíst, se přečtou na začátku vykonávání procesu a všechny hodnoty, které se mají zapsat se zapíšou až na konci přenosu. V tomto případě tedy nebude hodnota v „a“ přepsána uprostřed procesu, ale až na konci a proto přiřazení c <= a uloží do „c“ původní hodnotu „a“, což je 1. Pokud máme stejné výchozí hodnoty a následující proces: process(a,b) begin c <= a; c <= b; end process; tak po vykonání procesu bude v „c“ hodnota 2, což je hodnota v „b“. Platí tedy, že poslední řádek v procesu má nejvyšší prioritu. Pokud chceme, aby se příkazy v procesu prováděly skutečně sekvenčně, musíme místo signálu použít proměnné (variable). Přiřazení signálů v sekvenční doméně Základní přiřazení hodnoty signálů je stejné jako v paralelní doméně a jedná se operátor „<=“. Existují dvě základní syntaxe pro podmíněné přiřazení signálů: Příkaz IF – THEN – ELSE Jedná o sekvenční příkaz, který lze užívat pouze v rámci procesu. Má charakter prioritního přiřazení a může tudíž vést na složitější obvodové řešení po kompilaci. Syntaxe: 1) IF podmínka THEN příkaz END IF; 2) IF podmínka THEN příkaz_1 ELSE příkaz_2 END IF; 3) IF podmínka_1 THEN příkaz_1 ELSIF podmínka_2 THEN příkaz_2 ELSIF podmínka_3 THEN příkaz_3 END IF; Při použžití třetí moožnosti defi finice takovvéto podmín nky je u slo ožitějších koonstrukcí vhodnější použít ppříkaz CA ASE – WH HEN. Komppilátor obv vykle dokážže takto naapsaný kód d lépe a úsporněěji přeložit. Příkaz CASE Podmínnky pro pouužití tohoto příkazu jsoou totožné jako u přík kazu IF – T THEN, rozd díl je ve výslednné hardwaroové implemeentaci po koompilaci. Syntaxee: CASE vvýraz IS WHEN N hodnota_vvýrazu_1 => > příkaz_1; WHEN N hodnota_vvýrazu_2 => > příkaz_2; WHEN N hodnota_vvýrazu_3 => > příkaz_3; WHEN N OTHERS S => příkaz_ _4; END CASE; Základní logické obvody o pop psané jazyk kem VHDL L D klopn né obvody V této kkapitole si ukážeme, u jaak popsat jazzykem VHD DL D klopn né obvody, reagující naa úroveň a na hraanu. Popis D klopného obvodu o reag gujícího na úroveň (vleevo) a na hrranu (vpravoo) Poslednním příkladdem bude zápis z D kloopného obv vodu reagujjícího na vvzestupnou hranu s asynchrronním resetem. D klopnýý obvod s asyynchronním resetem Čítače Zde si uukážeme zákkladní syntaaxi pro popiis čítače v jaazyku VHD DL Základní čítač s čítání nahoru (vlevo o) a dolů (vpraavo) Poslednní ukázka buude složitějšší čítač, kterrý umožňuje: - resetováníí čítače - říd dicí signál „rreset“ - čítání nahooru nebo do olů - řídicí ssignál „coun nt_direction n“- fialová ččást kódu - nahrát hoddnotu, od ktteré se budee čítat - řídiccí signál „lo oad_enable““ - červená část č kódu - zastavení nebo n povolení čítání - řídicí signáál „clock_en nable“ - zeleená část kód du - samotný čítač č je zobrrazen modřee To, o čem jsme se zatím nezmínili, je šířka čítače. Tu jsme nedefinovali nikde v procesu, protože se definuje šířkou signálu „count“: - 8bitový čítač tedy bude mít signál „count“ deklarován takto: o signal count : std_logic_vector(7 downto 0); - 11bitový čítač: o signal count : std_logic_vector(10 downto 0); Pokud budeme chtít vytvořit čítač do určité hodnoty, musíme do procesu přidat podmínku, která resetuje čítač, pokud tento dosáhne požadované hodnoty 4. S Stavové au utomaty S Stavové auutomaty přředstavují přechod od o běžné logiky k mikrokontrolérům. Sekvenčční způsobb práce mikrokontro m olérů (postupné vyk konávání innstrukcí) dovoluje d mikrokoontroléry pooužít v mn noha aplikaccích pro řešení nejrůznějších úlooh a propůjčuje jim tedy vellkou univerrzálnost. Naa druhé stranně je však příčinou p nižšší rychlosti reakce, pro otože pro vytvoření odpovídajících výsttupních siggnálů musí u typického o mikrokonntroléru pro oběhnout několik (často velm mi mnoho) instrukčních i h cyklů. S Stavový konnečný autom mat je synchhronní mod del (zařízeníí), které v ppřesně defin novaných okamžiccích (obvykkle s náběžžnou hranoou hodinovéého signálu u) přechází mezi jedn notlivými definovanými stavvy. Tyto přechody p nnejsou náh hodné, ale opisují přřechodový diagram stavového automattu. To znam mená, že dallší stav, do kterého auttomat přejdee při přícho odu další náběžnéé hrany, závvisí jednak na současnném stavu au utomatu a jednak j na vvstupních siignálech. Stavovéé automatyy mohou být b synchroonní i asyn nchronní. Zde Z se buudeme zabý ývat jen synchroonními stavoovými autom maty. Mealy vvs. Moore Stavovéé automaty jsou j dvou druhů: d Moorrův a Mealy yho. Hlavní a jediné rozzdíly spočív vají v: - Moorůův automat o výstupní signály s záviisí jen na staavu automaatu o výstupy se mohou měnit jen v okkamžiku ak ktivní hrany hodinovéhho signálu - u Meaalyho autom matu o výstupní signály s záviisí i na vstup upních signáálech o kombinačční výstupy reagují okaamžitě na zm měny vstupn ních signálůů, na nichž jsou j závislé o výstupní signály s moh hou být dánny: kom mbinační log gikou kom mbinační log gikou s regisstrovým výsstupem Zápis sttavových automatů a v jazyku VH HDL S Stavový auttomat můžeeme zapsat ppomocí něk kolika proceesů. Nejpouužívanějším m je zápis pomocí tří procesůů, ale např.. firma Alteera uvádí ve v svých scchématech zzápis pomo ocí dvou s auttomat však llze komplettně popsat i jedním proocesem. procesůů. Konečný stavový Stavový auttomat typu Mealy - záppis pomocí dvou procesů V prvníí ukázce si ukážeme, jaak stavový automat zaapsat pomoccí dvou proocesů. Tento o způsob doporuččuje ALTER RA ve vývo ojovém prosstředí Quarttus II. Nejprrve si definuujeme entitu u: V dalšíí ukázce jee začátek definice d arrchitektury. Zde je dů ůležitá ukáázka definicce stavů stavového automatuu a registrů ů, v nichž buude uložen vnitřních v staav automatuu. V následující ukázcce je zobrazzen první prroces, který definuje přřechodovouu funkci auto omatu. Následuující stav je závislý jak na současnném stavu au utomatu, tak k na vstupní ním signálu „input“. Poslednní ukázka popisuje druhý d procees, jehož úkolem je definice výstupů au utomatu. Podívám me-li se naa citlivostní seznam prrocesu, vid díme, že pro oces se spuustí při zm měně, jak vnitřnícch stavů autoomatu („staate“), tak vsttupu (input)). Stavový auttomat typu Moore - záppis pomocí dvou proceesů R Rozdíl v záápisu mezi automatem a ttypu Mealy y a Moore, je j v poslednním procesu u. Jak již bylo řeečeno, výstuupy jsou nastaveny n ppouze na základě z vnittřních stavůů, tudíž zd de chybí podmínnky pro signnál „input“. Stavový auttomat zapsaaný pomocí jednoho prrocesu P Pomocí tohhoto zápisu u bude vytvvořen autom mat, jehož výstup budde nastaven n jak na základě stavu autom matu, tak sttavu vstupnních signálů ů. Současně však výstuppy automatu nejsou kombinnační funkcí, ale jsou reegistrované a tedy také synchronníí s hodinovýým signálem m. N Nevýhoda synchronních výstupůů spočívá v tom, že výstup v nereeaguje okam mžitě na vstupní proměnné,, ale až po příchodu hhrany hodinového sig gnálu, což vvede na zpožděnou reakci vvýstupu. Výýhodou je, že synchronnní automat není n náchylný na hazarrdní stavy
Podobné dokumenty
2013 - cerpadlo
Celonerezové drenážní čerpadlo určené díky perfektnímu materiálovému provedení
do náročných podmínek – přečerpávání znečištěné vody s pevnými příměsemi do
10 mm, z výkopů, jímek, nádrží atd., vhodn...