Jednoduché prioritní rozhodčí: Přidělování zdrojů v integrovaných systémech …

Tento článek pojednává o případech použití a výhodách rozhodčího s jednoduchou implementací prioritního rozhodčího ve VHDL.
Arbitráž je nezbytnou součástí každého moderního počítačového systému. Od rozhodčích po sběrnici v komunikačních protokolech, jako jsou I.2C a CAN, až po paměťové rozhodování v systémech s více procesory, lze najít rozhodce všude tam, kde je třeba sdílet zdroj.
Rozhodčí mohou být synchronní (tj. Simultánní) nebo asynchronní a pracovat zadáváním požadavků a udělením přístupu k prostředkům na základě těchto požadavků.
Zdroje jsou ve vestavěném světě vždy omezené. Použití rozhodce může zjednodušit řízení zdrojů a zvýšit výkon a robustnost systému a upřednostnit konkurenční subsystémy.
Základy
Co je to rozhodčí?
Ve své nejjednodušší formě je rozhodčí zařízení, které bere N vstupních požadavků a generuje jednu stopu v jedné aktivní formě. Jeden horký je libovolně velká skupina bitů skládající se ze všech kromě jedné nuly; to znamená, že jeden bit je logicky vysoký nebo „horký“. Tímto způsobem se rozhodčí podívá na své vstupy a umožní jedinému zařízení přístup ke zdroji.
Příklad rozhodčího v akci
Řekněme, že máme tři zařízení, každé se signálem požadavku připojeným k rozhodčímu. „Zařízení“ se zde používá jako obecný termín pro libovolného žadatele. Žadatelem je fronta FIFO (první dovnitř, první ven), CPU, stavový automat atd. Může se to stát. Když zařízení potřebuje přístup ke zdroji, jednoduše nastaví vysoký požadavekový signál. Rozhodčí zkontroluje vaše lístky a udělí přístup.
Obrázek 1 ukazuje blokové schéma s pravdivostní tabulkou pod ním. V tomto příkladu se token grantu nepoužívá konkrétním způsobem. Jak indikátor grantu přistupuje ke zdroji, závisí na aplikaci a aplikaci.
Obrázek 1. S požadavky rozhodčího a známkami privilegia.
Obrázek 1 ukazuje situaci, kdy každé zařízení zadává požadavek samostatně.
Co se stane, když dvě nebo více zařízení zadá požadavky současně? Při řešení tohoto problému můžeme dát přednost našemu rozhodčímu.
Jak nastavit prioritu v rozhodčím
Obrázek 2 ukazuje upravenou tabulku pravdivosti s volitelnou prioritou. S požadavkem R3 má Dev3 přednost před Dev2 (s R2) a Dev1 (s R1). Dev2 má přednost před Dev1 (s R1) tím, že požaduje R2. Nezapomeňte znovu, že franšízovým výstupem je vždy jedno teplo. To je nezbytné, aby se zabránilo více zařízením v přístupu ke stejnému prostředku současně.

Obrázek 2. Tabulka přesnosti rozhodčích se signály priority a odměny poptávky.
Uplatnění arbitrů v designu
Nyní víme, jaká je základní myšlenka a logické chování rozhodčího. Odtud můžeme začít implementovat náš design.
Stejné funkce lze implementovat různými způsoby. Výše uvedenou tabulku pravdivosti můžete zjednodušit pomocí mapy Karnaugh nebo můžete spustit aplikaci v jazyce popisu hardwaru.
Osobně rád nakreslím logický diagram, pokud to není příliš komplikované. Schopnost zobrazit logické brány spolu s tabulkou pravdy to usnadňuje, pouze když je čas stavět.
Rozhodčí ve společnosti Logisim
Logisim je open source logický simulátor pro digitální designéry, fandy a studenty. Je plně grafický a umožňuje uživateli vytvářet a testovat jednoduché návrhy pomocí všech logických bloků logu, včetně bran AND, multiplexerů, sčítačů, klopných obvodů, registrů a dokonce i paměti s náhodným přístupem (RAM).
Obrázek 3 a obrázek 4 níže ukazují tříbitový prioritní arbitr. Jsou volány značky s písmeny „a“ a „b“ tunely Y znamená, že tečky se stejným písmenem jsou navzájem spojeny, i když mezi nimi není žádný fyzický vodič. Jasně zelené silnice představují vysoké nebo SKUTEČNÉ logické signály.

Obrázek 3. Simulovaný tříbodový rozhodčí v Logisimu
Chcete-li začít, všimněte si, že první vstup horní brány AND (A1) je udržován vysoko. Tato vysoká logika dostane AND na A2 s doplňkem požadavku R3. Výstup A2 dostane ANDed v A4 po dokončení požadavku R2. Výtisk A4 určuje, zda je požadavek R1 proveden či nikoli.
Tímto způsobem můžete vidět, že tato vysoká počáteční logika kolísá rozhodčím. Pokud je jakýkoli požadavek vysoký, jeho doplněk postoupí rozhodčímu a zajistí, že pod ním nebude uplatněn žádný nárok. Tímto způsobem vytváříme prioritu rozhodčího. Obrázek 3 ukazuje, že ačkoliv rozhodčí obdržel dvě žádosti, R1 a R3, byl udělen pouze jeden grant (G3).
Obrázek 4 ukazuje podobnou situaci, kromě toho, že je požadována R1 a R2 soutěží o přístup ke zdroji.

Obrázek 4
Požadavek R2 má vyšší prioritu než R1, takže signál vysokého odchozího oprávnění je G2. Vidíme, že tato vysoká priorita je způsobena tím, že se požadavek R2 dokončí na bráně A4 a zabrání tomu, aby byl výstup A5 (tj. Grant G1) vysoký.
Simulace malých logických diagramů, jako jsou ty výše, je skvělé pro rychlý důkaz konceptu. Pokud potřebujete postavit něco velkého, musíte použít pokročilejší nástroj.
Rozhodčí ve VHDL
Použil jsem Xilinx ISE k implementaci našeho rozhodčího ve VHDL. Fungovat budou i další nástroje, jako je Quartus II nebo Active-HDL.
Seznam 1 níže ukazuje aplikaci prioritního arbitra se třemi položkami.
- Listado 1: Árbitro
biblioteca IEEE;
use IEEE.STD_LOGIC_1164.ALL;
árbitro de entidad es
Puerto(
R: en STD_LOGIC_VECTOR (3 abajo a 1);
G: out STD_LOGIC_VECTOR (3 abajo a 1));
árbitro final
La concesión de arquitectura del árbitro es
empezar
sol
Výpis 1. Rozhodčí implementován ve VHDL
Všimněte si použití std_logic_vector v bloku aktiv k vytvoření požadavku a zřízení portů.
Vektor R představuje tři příchozí požadavky a G se používá pro odchozí granty. Pokud jde o architekturu, používáme pouze kombinační logiku, takže nevidíte žádný proces.
Když architektura začíná, první řádek nastaví G na ‘100, když je R (3) vysoká, ignoruje zbývající položky. Dále, pokud je R (3) nízká, zkontrolujeme R (2) a pokud je R (2) vysoká, nastavíme G na ‘010’. Všimněte si, že stále ignorujeme R (1). Pokud jsou obě R (3) a R (2) nízké, zkontrolujeme R (1). Pokud je R (1) vysoká, G dostane „001“. Nakonec použijeme příkaz else, abychom se ujistili, že G je nastaveno na ‘000’, pokud jsou všechny vstupy nízké. Toto je jednoduchý způsob, jak implementovat naše prioritní schéma ve VHDL.
Testování VHDL arbitra v Testbench
Nyní otestujte náš kód. Výpis 2 ukazuje jednoduché testovací zařízení, které můžeme použít k ztělesnění a testování našeho nového designu.
- Listado 2: Arbiter TestBench
biblioteca ieee;
use ieee.std_logic_1164.all;
entidad arbitrerTest es
end arbitrerTest;
comportamiento de la arquitectura de la prueba de árbitro es
- Declaración del componente para la unidad bajo prueba (UUT)
árbitro componente
Puerto(
R: en std_logic_vector (3 abajo a 1);
G: out std_logic_vector (3 abajo a 1)
);
componente final
--Inputs
señal r: std_logic_vector (3 abajo a 1): = (otros => '0');
--Salidas
señal g: std_logic_vector (3 abajo a 1);
empezar
- Crear una instancia de la unidad bajo prueba (UUT)
uut: mapa del puerto del árbitro (
r => R,
g => G
);
- Proceso de estímulo.
stim_proc: proceso
empezar
r
Seznam 2. Testovací stůl arbitra použit ve VHDL
I když je design společnosti Testben nad rámec tohoto článku, níže je uveden stručný popis.
V zásadě prohlašuji součást rozhodčího spolu se zkušebními známkami r a g. Dále ztělesňuji rozhodčí komponentu jako svoji testovanou jednotku a mapuji testovací signály na porty. Pak spustím všech osm vstupních kombinací a mezi nimi čekám nanosekundu. Uvedl jsem je tak, aby odpovídaly tabulce pravdy na obrázku 2. Poslední část benchmarku nastavuje položky rovné ‘000 a pak čeká věčně. I když existují elegantnější způsoby testování všech vstupních kombinací, zdá se to jako nejjednodušší a nejjednodušší aplikace.
Abych viděl, jak se rozhodčí chová v tomto měřítku, simuloval jsem měřítko na ISE a vytvořil časový diagram zobrazený na obrázku 5.

Obrázek 5. Tabulka časování testovací stolice rozhodčího
Horní lišta je náš vektor požadavku, druhá lišta je vektor grantu.
Tento grantový vektor byl rozšířen, takže můžeme vidět G3, G2 a G1. Všimněte si, že když je požadavek R3 (nejvýznamnější bit vektoru požadavku) vysoký, příspěvek G3 je také vysoký bez ohledu na stav ostatních vstupů. G2 je vysoká, když je poptávka vysoká R2 a R3 nízká. G1 je vysoká, pouze když jsou všechny požadavky kromě R1 nízké. Díky tomuto časovému diagramu vidíme, že se náš rozhodčí chová podle očekávání.
Jednoduchý prioritní rozhodčí je jednoduchý, jak název napovídá. Existují lepší a účinnější způsoby, jak použít rozhodčího. Jeden problém s prioritním rozhodčím je, že žádosti s nízkou prioritou nelze nikdy přijmout. Jedním ze způsobů, jak to vyřešit, je použít sekvenčního arbitra, který každému z žadatelů umožní přístup ke zdroji na krátkou dobu. Můžete kombinovat rozhodčího a prioritního rozhodčího, abyste z obou aplikací dostali to nejlepší. Tyto návrhy mohou být přezkoumány v budoucím článku.
výsledek
Tento článek představuje rozhodčího s aplikací jednoduchého prioritního rozhodčího ve VHDL. Arbitr je prostředníkem mezi různými komponentami systému a systémovými prostředky. Mohou to být dvě jádra CPU, která potřebují přístup ke sdílené paměti, nebo dva mikrokontroléry, které se snaží převzít kontrolu nad komunikační sběrnicí. Bez ohledu na praxi je rozhodčí často relativně jednoduchým a levným řešením složitého problému.

