Magas szintű hardware szintézis
Magas szintű hardware szintézis
Magas szintű hardware szintézis Viselkedési leírásból (C nyelvű leírásból) vezérlés és adatfolyam gráf transzformáció
Magas szintű hardware szintézis A magas szintű HW szintézis előnyei 1. Rövidebb tervezési ciklus 2. Alacsonyabb tervezési költségek 3. Kisebb gyártási költségek 4. Kevesebb tervezési hiba 5. Tervezési kompromisszumok könnyebb meghozatala (több verzió elkészíthető a döntés ezek ereményének ismeretében hozható meg) 6. A dokumentáció gyorsabban és standardizálva készül 7. Specifikáció módosítás, változó körülményekhez, feltételekhez való igazítás könnyebben, gyorsabban végezhető el
Magas szintű hardware szintézis A magas szintű szintézis részfeladatai · Allokáció: az erőforrások feladatokhoz rendelése erőforrás típusok meghatározása, erőforrások számának meghatározása erőforrás: műveletvégző adattároló adatút (MUX, BUSZ) · Ütemezés: műveletek ütemekhöz, időlépésekhez rendelése, diszkrét időlépések, szinkron szekvenciális hálózat adatfüggőség befolyásolja · Modulok kiválasztása: erőforrás könyvtárból kiválasztjuk, hogy milyen erőforrás típusok vannak szempontok sebesség helyigény tápfelvétel · Bekötés: műveletvégzőművelet összerendelése tárolásregiszterek, memória · Vezérlés létrehozása, optimalizálása az ütemzést biztosító FSM létrehozás Speciális szempont: párhuzamosítás
Magas szintű hardware szintézis Algoritmikus leírás Fordítás Adatfolyam gráf Ütemezés Allokáció kényszerek Cimkézett Adatfolyam gráf Adatút diagram Regiszterek (adattárolók) FSM
Hierarchikus Task Gráf (HTG)
Kód mozgatás a párhuzamosítás növelésére
Ütemezés-allokáció Párhuzamosítás g, e és c egy-egy ADD, SUB, COM
VHDL kód a vezlérlőről S0 S1 S2 S3 S4 S5 S6 case CurrentState when S0 => a; b; p; NextState <= S1; when S1 => d; k; q; NextState <= S2; when S3 => if not(p) then if (q) then i; NextState <= S4; else c; NextState <= S4; end if; when S4 => h; NextState <= S5; when S5 => l; NextState <= S6; m; NextState <= S6; j; NextState <= S5; when S6 => n; NextState <= S0; end case; S0 S1 S2 S3 S4 S5 S6
Erőforrás bekötés Sok mux
Állapot hozzárendelés Lokális szeletelés (a) globális szeletelés (b)
Kód generálás (VHDL)
VHDL kód res_CMP_4_in0_MUXES: PROCESS(CURRENT_STATE, regNum1, hT0, regNum0, hT1, hT39, regNum6) variable mux_select : std_logic_vector(7 downto 0); BEGIN mux_select := "00000000"; if (CURRENT_STATE(1) = '1') then mux_select(0) := '1'; end if; if (CURRENT_STATE(3) = '1' and hT0) then mux_select(1) := '1'; if (CURRENT_STATE(4) = '1' and hT0 and hT1 and NOT(hT39)) then mux_select(2) := '1'; if (CURRENT_STATE(5) = '1' and hT0 and hT1 and NOT(hT39)) then mux_select(3) := '1'; case mux_select is when "00000001" => res_CMP_4_in0 <= regNum1; when "00000010" => res_CMP_4_in0 <= regNum0; when "00000100" => when "00001000" => res_CMP_4_in0 <= regNum6; when others => res_CMP_4_in0 <= 0; END CASE; END PROCESS; -- res_CMP_4_in0_MUXES END PROCESS;