RTL modellezés
Esettanulmány
Budapesti Műszaki és Gazdaságtudományi Egyetem
Egyszerű mikroprocesszor – RTL modellek (VHDL) Horváth Péter Elektronikus Eszközök Tanszéke
2014. augusztus 11.
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
1 / 17
RTL modellezés
Esettanulmány
Alapok
RTL modellezés – alapfogalmak
elnevezés: Register-Transfer Level: az adattároló elemek közötti adatáramlást írjuk le nyelvek: tipikusan hardverleíró nyelvek (VHDL, Verilog), de a rendszerszintű modellező nyelvek (SystemVerilog, SystemC stb.) is le tudják írni ezt a fajta absztrakciót nyelvi eszközök: a hardverleíró nyelvek nyelvi szerkezeteinek csak egy részhalmaza tartozik az RTL nyelvi eszközök közé (szintetizálható nyelvi szerkezetek) az RTL modell a legmagasabb elvonatkoztatási szintű modell, ami a klasszikus eszközökkel szintetizálható
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
2 / 17
RTL modellezés
Esettanulmány
Nyelvi eszközök
Leggyakoribb nyelvi szerkezet – folyamat Az RTL modellek egyik leggyakrabban alkalmazott nyelvi szerkezete a folyamat (VHDL-ben process, Verilog-ban always-block). Leírhatók vele kombinációs hálózatok (kombinációs folyamat) és szinkron hálózatok (szinkron folyamat) egyaránt. Szerkezete érzékenységi lista: jelek halmaza, amelyek változása a folyamat törzsének lefutását eredményezi törzs: sorrendi utasítások, amelyek akkor hajtódnak végre, ha az érzékenységi listán valami változás történt
A fenti viselkedést mindegyik RTL modellező nyelv implementálja valamilyen formában (VHDL, Verilog egyértelmű, SystemC-t lásd később)
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
3 / 17
RTL modellezés
Esettanulmány
Nyelvi eszközök
Leggyakoribb nyelvi szerkezet – folyamat Kombinációs folyamat: minden jobbérték az érzékenységi lista része L_ADDER : process ( op_a , op_b ) begin result <= unsigned ( op_a ) + unsigned ( op_b ); end process ;
Szinkron folyamat: CSAK az órajel (és legfeljebb az aszinkron reset) van az érzékenységi listában L_REGISTER : process ( clk ) begin if ( rising_edge ( clk ) ) then if ( reset = ’1 ’ ) then dout <= ( others = > ’0 ’); elsif ( ce = ’1 ’ ) then dout <= din ; end if ; end if ; end process ;
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
4 / 17
RTL modellezés
Esettanulmány
Nyelvi eszközök
Állapotgépek Az RTL modellekben központi szerepe van az állapotgépek leírásának. Feladatai: vezérlési feladatok esetén a kimenetek időzítése, adatfeldolgozás esetén a műveletvégző erőforrások (ALU, regiszterek stb.) vezérlő jeleinek előállítása Részei állapotregiszter következőállapot-logika kimeneti logika
HDL modellezés módjai egy-process: az összes kimenet szinkron (nagy erőforrásigény, glitch-mentes vezérlési vonalak) két-process: kisebb erőforrásigény, Mealy-bemenetek okozhatnak problémát három-process: a szintézis kimenete ua., mint a két-process megoldásnál Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
5 / 17
RTL modellezés
Esettanulmány
Mikroprocesszor RTL modellje
HW/SW partícionálás
Az RTL modell elkészítésekor a kiindulási alap általában valamilyen magasabb szintű modell (procedurális vagy objektum-orientált) El kell dönteni, hogy mit valósítunk meg hardverben és mi az, ami majd egy processzoron futó programként valósul meg. Az assembler + mikroprocesszor modell esetén ez egyszerű az assembler a leendő mikroprocesszoros rendszer szoftver komponense a mikroprocesszor magjáról, az utasításmemóriáról és az adatmemóriáról hardvermodell készül
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
6 / 17
RTL modellezés
Esettanulmány
Mikroprocesszor RTL modellje
HDL forrásfájlok
00_package_demo_processor.vhd: konstansok definíciója 01_memories.vhd: utasítás- és adatmemória modellje 02_core.vhd: a mikroprocesszor két különböző RTL implementációja 03_structural_RTL_components.vhd: a strukturális RTL modell műveletvégző egységének komponensei 04_structural_RTL_datapath.vhd: a strukturális RTL modell műveletvégző egysége 05_structural_RTL_controller.vhd: a strukturális RTL modell vezérlő állapotgépe 06_testbench.vhd: tesztkörnyezet
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
7 / 17
RTL modellezés
Esettanulmány
Mikroprocesszor RTL modellje
Memóriák
Az utasítás- és adatmemória modelljei egyazon HDL forrásfájlban: 01_memories.vhd
data_width
write_enable
data_in address_width
clk
address
Mindkét modell generikus; címhossz és szóméret. Az utasításmemória a tesztprogram gépi kódjával, az adatmemória a bemenő adatokkal inicializált. Mindkét memória szinkron kimenetű.
Horváth Péter
data_out data_width
clk data_in write_enable data_out content[address]
0xEA
0xEA 0xEA
Egyszerű mikroprocesszor – RTL modellek (VHDL)
8 / 17
RTL modellezés
Esettanulmány
Mikroprocesszor RTL modellje
A mikroprocesszor
A mikroprocesszor RTL modelljei viselkedési RTL: A mikroprocesszor "monolit" megvalósítása. Egyetlen állapotgép, amely minden adat-manipulációt leír. A processzor belső erőforrási belső jelekként jelennek meg. strukturális RTL: A mikroprocesszor "finomabb felbontású" modellje. Nyelvi szinten megjelenik a műveletvégző - vezérlő szerkezet. A belső erőforrások különálló tervezési egyedek.
A két RTL modell egyazon tervezési egyed (entity) két különálló implementációjaként (architecture) van leírva. (behavioral_RTL és structural_RTL)
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
9 / 17
RTL modellezés
Esettanulmány
Mikroprocesszor RTL modellje
Hierarchia
A testkörnyezet (06_testbench.vhd) példányosítja a mikroprocesszort, az utasítás- és adatmemóriát. Az órajelet és a stimulust is előállítja. entity testbench entity instruction_cache
entity core
entity data_cache
architecture behavior
architecture behavioral_RTL
architecture behavior
architecture structural_RTL process
process
clock
reset,run
controller datapath
Horváth Péter
+
Egyszerű mikroprocesszor – RTL modellek (VHDL)
10 / 17
RTL modellezés
Esettanulmány
RTL implementációs részletek
Viselkedési RTL modell A mikroprocesszor viselkedése egyetlen állapotgépben van leírva. Az adattároló erőforrások belső jelekként, az adatmanipuláló erőforrások a nyelv beépített operátorain keresztül valósulnak meg. ... type RF_type is array (0 to 15) of signed (7 downto 0); signal RF : RF_type := ( others = > ( others = > ’0 ’)); signal op_a : signed (7 downto 0) := ( others = > ’0 ’); signal op_b : signed (7 downto 0) := ( others = > ’0 ’); signal imm : signed (7 downto 0) := ( others = > ’0 ’); ... case state is when execute = > case instru c t i o n _ c o d e is when i_i2rf = > RF ( destination ) <= imm ; state <= assert_flags ; when i_m2rf = > state <= d a t a _ c a c h e _ r e a d _ a c c e s s ; when i_rf2m = > w r i t e _ d a t a _ c ac h e <= ’1 ’; state <= d a t a _ c a c h e _ w r i t e _ a c c e s s ; when i_add = > RF ( destination ) <= op_a + op_b ; state <= assert_flags ; end case ; ... end case ; ... Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
11 / 17
RTL modellezés
Esettanulmány
RTL implementációs részletek
Strukturális RTL modell
A strukturális RTL modell két fő komponensből áll műveletvégző egység (04_structural_RTL_datapath.vhd), amely az adattároló (regiszterek és regisztertömbök) és adatmanipuláló (operátorok) erőforrások példányosítását tartalmazza vezérlő egységet leíró állapotgép (04_structural_RTL_controller.vhd)
A structural_RTL architektúra csak e két komponens példányosítását és összeköttetéseiket tartalmazza.
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
12 / 17
RTL modellezés
Esettanulmány
RTL implementációs részletek
Strukturális RTL komponensek – adattárolás data_width
wa
RF
we_RF
din
addr_width
aa
data_width
reg ce
addr_width
ab
di addr_width
clk reset
do
ac
doc
data_width
data_width
doa
dob data_width
data_width
clk di ce do
clk 0xEA
0xEA
0x00
data_in write_enable aa; wa doa content[11]
reset
Horváth Péter
0xEA
0x0B 0xEA 0xEA
Egyszerű mikroprocesszor – RTL modellek (VHDL)
13 / 17
RTL modellezés
Esettanulmány
RTL implementációs részletek
Strukturális RTL modell – ALU Az aritmetikai-logikai egység egy kombinációs folyamatként van megvalósítva. L_MA IN_PROCESS : process ( alu_function , op_a , op_b ) variable v_result : signed (7 downto 0); begin case alu_function is when a_add = > v_result := signed ( op_a ) + signed ( op_b ); when a_sub = > v_result := signed ( op_a ) - signed ( op_b ); when a_and = > v_result := signed ( op_a and op_b ); when a_or = > v_result := signed ( op_a or op_b ); when a_xor = > v_result := signed ( op_a xor op_b ); when others = > v_result := signed ( op_b ); end case ; result <= std_logic_ v e c t o r ( v_result ); if ( v_result = 0 ) then Z_out <= "1"; else Z_out <= "0"; end if ; if ( v_result (7) = ’1 ’ ) then N_out <= "1"; else N_out <= "0"; end if ; end process ;
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
14 / 17
RTL modellezés
Esettanulmány
RTL implementációs részletek
Strukturális RTL modell – műveletvégző egység A műveletvégző egység az erőforrások példányosításából és összeköttetéseikből áll. signal from_IR : st d _ l o g i c _ v ec t o r (15 downto 0); signal from_mux_IP : st d _ l og i c _ v e c t o r (7 downto 0); signal from_IP : st d _ l o g i c _ v ec t o r (7 downto 0); ... L_IR : entity work . sta n d a r d _ r e g i s t e r ( behavior ) generic map (16) port map ( clk , reset , ce_IR , data_from_instruction_cache , from_IR ); L_MUX_IP : entity mux2 ( behavior ) generic map (8) port map ("00000000" , from_IP_add_result , sel_IP , from_mux_IP ); L_IP : entity work . sta n d a r d _ r e g i s t e r ( behavior ) generic map (8) port map ( clk , reset , ce_IP , from_mux_IP , from_IP ); ...
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
15 / 17
RTL modellezés
Esettanulmány
RTL implementációs részletek
Strukturális RTL modell – vezérlő egység A vezéslő egység egy egy-process megvalósítású állapotgép. A kimeneti buffer-ek glitch-mentesítik a vezérlő vonalakat és csökkentik a clock-to-output késleltetést. ... case state is when wait_for_run = > if ( run = ’1 ’ ) then end_of_job <= ’0 ’; sel_IP <= ’0 ’; ce_IP <= ’1 ’; state <= fetch_1 ; else state <= wait_for_run ; end if ; ... end case ; ...
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
16 / 17
RTL modellezés
Esettanulmány
RTL implementációs részletek
Strukturális RTL mdoell – RTL kapcsolási séma address_to_instruction_cache
data_from_instruction_cache 16
IR
0
run end_of_job
1
sel_IP
we_RF write_data_cache ce_IR
[11:8]
ce_IP
4
8
ce_instruction_code
ce_IP
ce_dest.
IP
4
1
wa
8
[7:4]
4
[3:0]
4
[11:8]
4
sel_IP_add
0
+
ce_MDR ce_Z ce_N sel_IP
aa
sel_IP_add sel_ALU
ab ac
ss_instruction_code ss_Z
8
doc
ss_N 8
doa
8
dob
8
[7:0]
8
8
8
+
[15:12]
4
ce_op_b ce_MAR
din
8 8
ce_op_a ce_imm
we_RF
RF
8
8
8
8
8
8
ce_destination
8
8
destination
16
8
1
8
8
structural_RTL_controller
8
address_to_data_cache data_from_data_cache
8
ce_IR
8
0
data_to_data_cache structural_RTL_datapath
8
8
8 ce_instr.c.
ce_imm
ce_op_a
instr_code
imm
ce_MAR
ce_op_b
op_a
op_b
MAR
8
4
ce_MDR
MDR 8 8
8
opcode alu_f.
0
8
ss_instruction_code
opA 3
8
8
8
2
8
8 1
sel_ALU
opB
func.
Z_out
instr_dec.
ALU
N_out
ce_Z
Z
8 ce_N
result
ss_Z
N
ss_N 8
Horváth Péter
Egyszerű mikroprocesszor – RTL modellek (VHDL)
17 / 17