VHDL kodēšanas valsts ar galīgu aparātu

VHDL Lecture 1 VHDL Basics (Jūnijs 2019).

$config[ads_text] not found
Anonim

VHDL kodēšanas valsts ar galīgu aparātu


Šajā rakstā tiks apskatītas dažādas kodēšanas metodes, kuras var izmantot, lai īstenotu MFV stāvokļus.

Citā AAC rakstā "Ierobežotas valsts mašīnas ieviešana VHDL" tiek apskatīts, kā VHDL sistēmā ieviest ierobežotu valsts iekārtu (FSM).

Šajā rakstā tiks apskatītas dažādas kodēšanas metodes, kuras var izmantot, lai īstenotu MFV stāvokļus. Mēs redzēsim, ka konkrētas valsts diagramma ar valsts kodēšanas metodi var samazināt MFV jaudas patēriņu vai palielināt tā pulksteni.

MFV valsts diagrammas atspoguļojums

Mēs varam izmantot stāvokļa diagrammu, lai attēlotu ierobežotas valsts mašīnas darbību (FSM). Piemēram, ņem vērā stāvokļa diagrammu, kas parādīta 1. attēlā. Šajā MFV ir astoņi stāvokļi: tukšgaitas, r1, r2, r3, r4, c, p1 un p2 . Tāpat tai ir viena ieeja, mem un viena izeja, out1 . Pamatojoties uz diagrammu, MFV izvēlēsies nākamo statusu gaidāmajam pulksteņa atzīmei.

1. attēls

2. attēlā parādīta blokshēma, kuru var izmantot, lai ieviestu 1. attēlā redzamo MFV. Lai saglabātu pašreizējo sistēmas stāvokli, ir pieejami n atmiĦas elementi, kas parādīti šėērsoties kastē. Kastīte ar nosaukumu "Loģika nākamās valsts ģenerēšanai" ir kombinēta shēma, kurā tiek izmantoti flip-flops (FF) izejas un sistēmas ievades, lai noteiktu nākamo stāvokli sistēmā.

Šis nākamais stāvoklis tiks ielādēts FF komplektā pie nākamā pulksteņa atzīmes. Ierakste ar nosaukumu "Logic to Generate Outputs" saņem pašreizējo sistēmas stāvokli un ģenerē izejas signālus. Ņemiet vērā, ka, tā kā "Logic to Generate Outputs" virza tikai sistēmas stāvoklis (nevis ievadi), mums ir Moore valsts mašīna.

2. attēls

Binārā kodēšana, lai ieviestu MFV

1. attēlā mums ir astoņi dažādi stāvokļi. Cik daudz flip-flop mums ir jāuzrāda šīs astoņas valstis: "text-align: center;"> 1. tabula

Šī pārstāvība noved pie blokshēmas, kas parādīta 3. attēlā.

3. attēls

Pieņemsim, ka trīsbitu virze Q3Q2Q1 ir trīs bitu tabula 1. Piemēram, ja MFM stāvoklis ir r3, mums ir Q3Q2Q1 = "011". 3. attēlā ir attēloti trīs kondensatori (Cpar1, Cpar2 un Cpar3). Šie kondensatori kalpo kā kontūrā esošās parazitārās kapacitātes attēlojums ar liekiem elementiem. Šo parazitīvo kapacitāti ievada ķēdes starpsavienojumi un kombinētās shēmas ievades posmi, kas ģenerē nākamo stāvokli un izvades.

Apskatīsim 1. un 3. attēlu ciešāk. Saskaņā ar 1. attēlā redzamo stāvokļu diagrammu, ja mem = 1, katrs pulksteņa rangs padarīs MFV no viena stāvokļa uz citu. Valstis ir attēlotas ar trim flip-flops 3. attēlā, un tādējādi ar katru pulksteņa atzīmi, Q3Q2Q1 vērtība mainās. Tas nozīmē, ka vismaz viens no Cpar1 / Cpar2 / Cpar3 kapacitātes jāuzlādē vai jāizlādē. Piemēram, apsveriet gadījumu, kad MFV sākas no valsts dīkstāves un pēc vairāku pulksteņu ērcēm sasniedz stāvokli p2 . Šajā gadījumā kondensators Cpar1 tiks uzlādēts četras reizes (sk. 1. tabulu). Līdzīgi, Cpar2 un Cpar3 tiks iekasētas divas reizes un vienu reizi attiecīgi.

Pašreizējais tiek patērēts katru reizi, kad jāuzlādē kondensators. Tātad, daļa enerģijas, ko patērē ķēde 3.attēlā, nāk no lādēšanas parazitārās kapacitātes, kas redzamas FF izejā. Kā mēs varam samazināt šīs ķēdes enerģijas patēriņu? Viens no veidiem būtu samazināt, cik reizes mums ir jāmaksā parazitārā kapacitāte. Vai mēs varam pārkārtot 1. tabulas trīsbitu piešķiršanu, lai samazinātu pāreju skaitu FF izejumos? Faktiski tas ir iespējams, un 2. tabulā tiek izmantots risinājums, ko sauc par Gray kodējumu.

2. tabula

Pelēka kodēšana var samazināt enerģijas patēriņu

Ar 2. pelēko kodu, mainot tikai vienu bitu, pārvietojoties starp blakus esošajiem stāvokļiem. Tagad, kad MFV iet no valsts gaidīšanas uz stāvokli p2, vismazākais nozīmīgais bits tiks iekasēts divas reizes, un otrais un trešais bits tiks iekasēts tikai vienu reizi. (Salīdziniet to ar iepriekš pieprasītajiem četriem, diviem un vieniem lādēšanas notikumiem, kā aprakstīts iepriekš.) Tādējādi mēs varam izmantot pelēko kodējumu, lai samazinātu MFV jaudas patēriņu.

Grey kodējums ir liels MFV 1. attēlā, jo konkrētajai valstij ir zināms nākamais sistēmas stāvoklis. Tomēr lielāko daļu laika mēs nezinām nākamo sistēmas stāvokli. Piemēram:

4. attēls. Valsts diagramma, kurā var izmantot pelēko kodējumu. Image pieklājīgi no mazjaudas CMOS shēmām.

4. attēlā atkarībā no izejmateriālu vērtības stāvoklis pēc S29 var būt vai nu S32, vai S30. Šādos gadījumos mums vispirms būtu jānosaka, kādam ceļam ir lielāka varbūtība. Pēc tam mēs varam iestatīt mūsu Grey kodējumu saskaņā ar augstākās varbūtības ceļu.

Pelēka kodēšana var samazināt glitches

Kā minēts iepriekš, Grey kodējumu var izmantot, lai panāktu mazāku jaudas dizainu. Cits šīs kodēšanas piemērs ir aizsargāt asinhronas izejas no glitčiem. Piemēram, pieņemsim, ka mēs izmantojam 5. attēlā redzamo shematisko metodi, lai izveidotu izeju out1 uz 1. diagrammas stāvokļa diagrammas. Šajā skaitlī tiek pieņemts, ka, lai attēlotu MFV stāvokļus, izmanto bināro kodējumu.

5. attēls

Tagad apsveriet viļņu formas, kas parādās 6. attēlā, kuras atbilst stāvokļa izmaiņām no p2 (111) uz dīkstāves (000).

6. attēls

Ja sistēma ir pie p2, out1 ir augsta. T1 stāvoklī stāvoklis mainās uz dīkstāves režīmu. Pēc divu ieeju un vārtu laika aizture, tad mezgls n2 būs nulle pie t2 . Nedaudz vēlāk, pie t4, mezgls n1 būs augsts. Ņemiet vērā, ka tiek pieņemts, ka n1 kavējums ir garāks nekā n2, jo n1 tiek ģenerēts ar trīs ievades un vārtiem, kas novietoti pēc NOT vārtiem.

Kā parādīts 6. attēlā, beigu vērtība beigu 1 būs (pie t5 ); tomēr ir nevajadzīga pāreja no augsta uz zemu pie t3 . Šajās shēmās, piemēram, attēlā 5, nevajadzīga pāreja notiek, jo binārā kodēšana ļauj vienlaicīgi mainīt vairākus bitus. Ar pelēko kodējumu, pārvietojoties starp blakus esošajiem stāvokļiem, tikai viens bits mainās, un tādējādi glitches ir retāk sastopams.

Mēs esam redzējuši, ka atbilstošs valsts uzdevums var samazināt MFV jaudas patēriņu un padarīt tā asinhronas izvades elastīgas, lai glitches. Pastāv vēl viena valsts piešķiršanas metode, proti, viena karsta kodēšana, kas var vienkāršot 2. attēlā redzamos blokus "Logic Generate Outputs" un "Logic to Generate Next State". Ar šo divu bloku vienkāršošanu mēs varam ģenerēt MFV izejas un nākamā valsts ātrāk. Nākamajā sadaļā tiek detalizēti apskatīta šī kodēšana.

One-Hot kodēšana

Ņemiet vērā, ka vienā pulksteņa periodā 2. shēmas kombinētajām shēmām (ti, loģikai, lai radītu izejas un loģiku, lai ģenerētu nākamās valsts shēmas) būtu jāizveido to izejas, lai MFV būtu gatava pāriet uz nākamo stāvokli ar nākamo pulksteņa atzīmi.

Viena karstā kodēšana padara šīs kombinētās shēmas vienkāršākas, kas samazina pavairošanas kavējumu, kas savukārt padara MFV saderīgu ar lielākām pulksteņa frekvencēm. Kompromiss ir tāds, ka viena karstā kodēšana palielina FF skaitu, ko izmanto, lai saglabātu sistēmas stāvokli. Piemēram, tā kā binārā un Grey kodēšana izmanto tikai trīs FF, lai attēlotu astoņus stāvokļus 1.attēlā, karstā kodēšana izmanto astoņas FF (ti, vienu flip-flop uz vienu valsti).

3. tabulā parādīts karsto kodējumu mūsu astoņu valstu MFV.

3. tabula

Kāpēc tas padara vienkāršāku MFV kombinētās shēmas? Tā kā ar bināro un pelēko kodējumu mums ir jāizmanto loģiskie vārti, lai "atšifrētu" 3 bitu reprezentāciju vienā no astoņām valstīm, bet ar vienu karsto kodējumu nav nekādas atšifrēšanas - valsts tieši atbilst vienam bitiem ir karsts".

Kurš valsts uzdevums ir optimāls?

Ir daži citi valsts kodēšanas opcijas, taču praksē mēs parasti lietojam vienu no trim iepriekš aprakstītajiem kodējumiem, ti, bināro, pelēko vai karsto.

Jautājums paliek: kā mums vajadzētu izvēlēties labāko kodējumu konkrētai MFV?

Optimāla valsts piešķīruma iegūšana MFV ir sarežģīta problēma, un jūs varat atrast šīs optimizācijas teoriju tādās mācību grāmatās kā slēgšana ar gala valsts mašīnām: loģikas optimizācija un slēgšana ar gala modeļiem: funkcionālā optimizācija. Praksē FPGA sintēzes rīki var izmantot patentētus optimizācijas algoritmus, lai panāktu efektīvu MFV ieviešanu. Ja jūs iestatāt XST (Xilinx Synthesis Technology) fsm_encoding opciju uz " auto ", programmatūra izvēlēsies labāko kodējumu katrai MFV jūsu dizainā.

Kā piemēru ņem vērā stāvokļa diagrammu, kas parādīta 7. attēlā.

7. attēls

MFV apraksts VHDL 7. attēlā ir šāds:

 1 library ieee; 2 use ieee.std_logic_1164.all; 3 entity fsm_enco is 4 port(clk, reset: in std_logic; 5 mem, a: in std_logic; 6 out1: out std_logic); 7 end fsm_enco; 8 architecture fsm_enco_arch of fsm_enco is 9 type state_type is (idle, r1, r2, r3, r4, c, p1, p2); 10 signal state_reg, state_next: state_type; 11 begin 12 --set of registers in Figure 1 13 process(clk, reset) 14 begin 15 if reset = '1' then 16 state_reg <= idle; 17 elsif (clk'event and clk="1") then 18 state_reg26 if mem="0" then 27 state_next <= idle; 28 else 29 state_next32 state_next34 state_next36 state_next38 state_next40 if a="0" then 41 state_next <= p1; 42 else 43 state_next46 state_next48 state_next <= idle; 49 end case; 50 end process; 51 -- Moore output logic 52 out1 <= '1' when (state_reg = idle or state_reg = p1 or state_reg = p2) else 53 '0'; 54 end fsm_enco_arch; 

Izmantojot XST, lai sintezētu šo kodu, iegūstam šādu sintēzes žurnālu:

================================================== =======================

* Uzlabotā ABL sintēze *

================================================== =======================

Analizējot FSM, lai iegūtu vislabāko kodējumu.

FSMon signāla optimizēšana ar karsto kodējumu.

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

Valsts | Kodēšana

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

tukšgaitas | 00000001

r1 | 00000010

r2 | 00000100

r3 | 00001000

r4 | 00010000

c | 00100000

p1 | 01000000

p2 | 10000000

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

================================================== =======================

Kā jūs varat redzēt, XST optimizācijas algoritmi izvēlējās vienu karsto kā labāko kodēšanas paņēmienu. Ja vēlaties izvēlēties kodēšanas metodi, nevis paļauties uz sintezatoru, to varat izdarīt, izmantojot fsm_encoding opciju.

Kopsavilkums

  • Ar pelēko kodu, pārvietojoties starp blakus esošajiem stāvokļiem, tiek mainīts tikai viens. Rezultātā šī kodēšanas metode var samazināt MFV jaudas patēriņu. Turklāt Grey kodēšana padara asmehronas MFV izvades elastīgas, lai glitches.
  • Viena karstā kodēšana vienkāršo 2. attēlā redzamos blokus "Logic to Generate Outputs" un "Logic to Generate Next State" blokiem. Ar šiem diviem blokiem mēs varam ģenerēt FSM izejas un nākamo statusu ātrāk.
  • Optimāla valsts piešķiršana MFV ir sarežģīta problēma, taču praksē mēs varam izmantot FPGA sintēzes rīkus ar patentētiem optimizācijas algoritmiem, lai panāktu efektīvu MFV ieviešanu.
  • Ja jūs iestatāt opciju XST fsm_encoding uz "auto", programmatūra izvēlēsies labāko kodējumu katrai MFV jūsu dizainā.

Lai apskatītu pilnu manu rakstu sarakstu, lūdzu, apmeklējiet šo lapu.