BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK
Digitális technika VIMIAA01 Fehér Béla BME MIT
BME-MIT FPGA labor
Processzor utasítás rendszerek • A processzorok utasításkészlete az alábbi utasítás csoportokra osztható: • Adatmozgató (MOV, máshol LOAD/STORE) • Aritmetikai (ADD, SUB, CMP,MUL, DIV) • Logikai (AND, OR, XOR, CPL, TST) • Léptető (SLx,/SRx, RR/RL, ASR és multibit) • Vezérlő (JMP, CJP, JAL/CALL, RTN) • Egyéb (NOP, EI, DI, HALT) • Jellemző RISC utasításkészlet: 50 – 150 utasítás • Érdekesség: OISC: One Instruction Set Computer • Összetett utasítás művelet, test és adatmozgatás BME-MIT FPGA labor
Processzor utasítás rendszerek • A RISC processzorok utasítás formátuma • Általában fix hosszúságú, 16/32 bit • Felépítése 2R vagy 3R típusú (utóbbi a 32 bitnél) • Kevés utasítás formátum típus (2-5 maximum) •
Egy formátumon belül minden utasítás azonosan használható
• A bitmezők kiosztása rögzített •
Egyszerű dekódolás, sok érték közvetlenül használható
• Pipe-line végrehajtás könnyen kialakítható • Az utasítások végrehajtási ideje azonos (1 órajel) BME-MIT FPGA labor
Processzor utasítás rendszerek • A RISC processzorok címzési módjai • A címzési mód az utasításban hivatkozott adatelem, adatérték elérési módját jelenti • A címzési módok jelentősen befolyásolják az utasítás ill. programvégrehajtás hatékonyságát • Különböző címzési módok léteznek a program memória és az adatmemória elérésére • Eltérő igények: •
Programmemória esetén a cél a következő utasítás címének megadása, ez ugrásoknál, feltételes ugrásoknál, szubrutinhívásoknál (függvény/eljárás) lényeges
•
Adatmemóriánál sokkal általánosabb igényeket találunk
BME-MIT FPGA labor
Processzor utasítás rendszerek • Programmemória címzési módjai • A programmemóriát a PC (programszámláló) címzi • Az alapművelet a következő utasítás PC = PC + 1 • Az ugrási vagy szubrutinhívás esetén a PC értékét módosítani kell •
•
BME-MIT
Abszolút címzés: A PC minden bitje módosul: A teljes programmemória bármely címe szerepelhet, mint új cím. Kedvező, egyszerűen használható, de sok bitet igényel Relatív címzés: A PC bitjeinek csak egy része módosul, az ugrás, szubrutinhívás elérési tartománya korlátozott. A programszervezés bonyolultabb (assembler/fordító feladata), de a programok „lokalitása” miatt ez ritkán okoz komoly problémát. A relatív címzési tartomány 28 - 216 FPGA labor
Processzor utasítás rendszerek • Programmemória címzési módjai • Közvetlen cím: Az új cím értéke az utasításban kódolt, ez gyakran relatív címzésre korlátoz • •
A célcím FORDÍTÁS időben meghatározott, futáskor konstans, nem lehet adatfüggő MiniRISC: 16 bit utasítás, 8 bit program cím: lehet abszolút is
• Regiszter indirekt: Az ugrási címet egy regiszter tartalmazza (ez általában abszolút címzésre is elegendő) •
A célcím lehet adatfüggő, több utas elágazások, táblázat értékek indexelt olvasásához a programmeóriából
•
MiniRISC: van regiszter indirekt címzés, teljes tartományra
• A szegmensregiszteres címzés egy kevert címzési mód BME-MIT FPGA labor
Processzor utasítás rendszerek • Adatmemória címzési módjai, illetve az utasítások operandusainak elérési, specifikációs módjai: • Közvetlen adat (adat az utasításban) • Közvetlen cím (memória cím az utasításban) • Regiszter adat • Regiszter (indirekt) címzésű adat • Regiszter + közvetlen ofszet című adat • Regiszter címzésű indexelt adat • Regiszter címzésű post-inkremens/pre-dekremens adat • Egy-egy utasításkészlet nem mindegyiket tartalmazza • Léteznek egyéb speciális (bitfordított, modulo, stb.) címzések is, ezeket nem tárgyaljuk
BME-MIT
FPGA labor
Processzor utasítás rendszerek • Adatmemória címzési módjai, illetve az utasítások operandusainak elérési, specifikációs módjai: • Közvetlen adat: Az adat az utasítás része • • •
•
MiniRISC 16 bit utasítás. 8 bit adat → megoldható Általában pl. 32 bites processzor esetén nem egyszerű: 32 bites utasításban 32 bites adat nem helyezhető el (ut.kód?) Gyakran használunk „kis értékű” konstansokat, ezért a közvetlen adatra egy 8-12-16-20 bitmező áll rendelkezésre + előjel kiterjesztés Vagy: teljes méretű adat: két utasításban: alsó-felső fele, és ekkor a két utasítás végrehajtása nem megszakítható!
BME-MIT FPGA labor
Processzor utasítás rendszerek • Adatmemória címzési módjai, illetve az utasítások operandusainak elérési, specifikációs módjai: • Közvetlen cím: A cím az utasítás része • •
MiniRISC 16 bit utasítás. 8 bit adat → megoldható, mert az adatinterfész csak 256 címet tartalmaz Általában ugyanazok a korlátozások érvényesek, mint a közvetlen adatnál, bár beágyazott rendszerekben a memóriaméret korlátos (nem kell 32 címbit)
BME-MIT FPGA labor
Processzor utasítás rendszerek • Adatmemória címzési módjai, illetve az utasítások operandusainak elérési, specifikációs módjai: • Regiszter adat: A regiszter címe az utasítás része • • •
MiniRISC 16 bit utasítás: 2 regiszter cím → 2 adat Ez a leggyakoribb címzési mód RISC processzorokban univerzális regiszterhasználat, nincsenek specialitások, kivételek
• Regiszter (indirekt) címzésű adat: A regiszter tartalma az adat címe a memóriában •
A MiniRISC utasításkészlet tartalmazza
•
Hatékony címzés adatvektorok/tömbök eléréséhez
BME-MIT FPGA labor
Processzor utasítás rendszerek • Adatmemória címzési módjai, illetve az utasítások operandusainak elérési, specifikációs módjai: • Regiszter + közvetlen ofszet adat: Az adat címe egy regisztertartalom (bázis) és az utasításból származó közvetlen érték (ofszet) összege • Regiszter címzésű indexelt adat: Az adat címe két regiszter tartalmából adódik: Az egyik a bázis cím a másik az index érték • Regiszter címzésű post-inkremens/pre-dekremens címzés: Az adat elérése után/előtt a címregiszter tartalma automatikusan módosul. Hasznos verem (stack) és adatvektor/tömb címzésénél BME-MIT FPGA labor
MiniRISC utasításkészlete
A MiniRISC processzor diasorozat 43 - 59 diája
BME-MIT FPGA labor
Processzor belső kommunikációja • A mikroprocesszoros rendszerek összetett digitális rendszerek, több modulból állnak • Eddig csak a központi egység felépítését, az un. CPU struktúráját és működését vizsgáltuk: • Ez két fő részegységből áll: vezérlő és ALU • Ezek mindegyike bonyolult részrendszer, de önmagában szinte működésképtelen • A vezérlő a működéséhez szükséges utasításokat a programmemória interfészen keresztül éri el • Az ALU értelmes működésének feltétele az adatmemória és a perifériák elérése. Ezt az adatmemória interfész biztosítja BME-MIT FPGA labor
MiniRISC mintarendszer - Bevezetés (Egyszerűsített Blokkvázlat) LED-ek
DIP kapcsoló
basic_owr (0x80)
basic_in (0x81)
„A” bővítőcsatlakozó „B” bővítőcsatlakozó
128 x 8 bites adatmemória (0x00 – 0x7F) basic_io (0x84 – 0x87)
basic_io (0x88 – 0x8B)
MiniRISC CPU Adatmemória interfész
Adatmem. Debug
Prg. mem. slave_usrt (0x8E – 0x8F)
Debug modul
256 x 16 bites programmemória
basic_display (0x90 – 0x9F)
14
basic_in (0x82)
USRT
JTAG
BME-MIT
basic_timer (0x8C – 0x8D)
nyomógombok fejlesztői és kommunikációs port
kijelzők
MiniRISC processzor, 2013.04.17. (v1.2)
FPGA labor
Processzor belső kommunikációja • A mikroprocesszoros rendszerek adatátviteli interfészeit buszoknak nevezzük • Sok mikroprocesszor rendelkezik egyedi külső busszal is (lokális busz), alkalmazási céltól függően • A külső buszok némelyike processzor független, ún. rendszer busz, általános célú alkalmazásokra. • Ilyen külső rendszerbusz pl. • IBM PC ISA (Industry Standard Architecture) • PCI busz (Peripheral Component Interface) • VMEbus (Versa Module Europa bus) • VXI (VMEbus eXtension for Instrumentation) BME-MIT FPGA labor
Processzor belső kommunikációja • A mikroprocesszoros rendszerek belső adatátviteli buszai hasonlóak a külső buszokhoz • Egy lényeges különbség: Szétválasztott DATA_IN és DATA_OUT adatvonalak vannak. • A belső buszok között is van processzor független, általános célú rendszer busz, tetszőleges alkalmazásokra. Ez nagyban megkönnyíti a modern SoC (System on Chip) rendszerek tervezését. • Ilyen belső rendszerbusz pl. • IBM Core Connect • ARM AMBA (Advanced Microcontr. Bus Arch.) • ARM AXI (Advanced eXtensible Interface) • Whisbone BME-MIT FPGA labor
Processzor belső kommunikációja • A felsoroltak mind PÁRHUZAMOS buszok • A mai nagysebességű adatátviteli interfészek gyakran áramköri okokból SOROS adatátviteli protokollt használnak. Ezek pont-pont kapcsolatot valósítanak meg, de megszokásból ezeket is buszoknak nevezik. • Ilyen pont-pont kapcsolatok pl.: • USB (Universal Serial Bus) • FireWire (IEEE 1394) • PCIe (PCI Express) • InfiniBand • HyperTransport • QuickPath Interconnect BME-MIT FPGA labor
Processzor belső kommunikációja • A továbbiakban a PÁRHUZAMOS buszokkal foglalkozunk • A busz jelvezetékek együttese, amelyekre áramköri, elektromos és időzítési előírások vonatkoznak • Gyakran mechanikai is pl. ISA/PCI/VME csatlakozó • Az áramköri előírások specifikálják a jelszintet, a meghajtó képességet, a megengedett terhelést, a maximális túllövést, stb…. • Az időzítési előírások definiálják a működési sebességet, a jelváltási időt, az adatátviteli buszciklusok időbeli lefolyását • A buszok komplex rendszerek, mi csak egy egyszerű verzióval foglalkozunk BME-MIT FPGA labor
A mikroprocesszoros busz • A busz részei: • Címbusz ADDR[n:0] • Adatbusz DATA[m:0], belső busznál külön D_IN[m:0], D_OUT[m:0] • Vezérlő busz (sok egyedi jel összessége): • • • • •
Rendszerjelek: CLK, RST, Arbitrációs jelek: BUSREQ, BUSACK, Irányvezérlő jelek: READ, WRITE, Átvitelvezérlő jelek: FRAME, TS, TACK, AS, DS, Megszakítás vezérlő jelek: IRQi, IACK,
BME-MIT FPGA labor
A mikroprocesszoros busz • A busz használatának szabályai: • A buszra kapcsolódó egységek között megkülönböztetünk MASTER és SLAVE egységeket • MASTER: Vezérelheti a buszt, meghatározza a cím/adat és egyéb paramétereket, kezdeményezi az átvitelt és vezérli a működést • SLAVE: Figyeli a buszt, felismeri/dekódolja a címet és a parancsokat, azonosítás esetén válaszol a kérésre az adat fogadásával vagy kiadásával
BME-MIT FPGA labor
A mikroprocesszoros busz • Buszhasználat külső buszon: • Közös vonalak, 3 állapotú, HiZ, nagy impedanciás meghajtókkal • Egy időben csak egyetlen adatforrás lehet aktív • A vezérlő/engedélyező jelek 1-az-N-ből kódolásúak
BME-MIT FPGA labor
A mikroprocesszoros busz • Buszhasználat belső buszon: • Az adatvonalak meghajtása AND-OR hálózaton (elosztott multiplexer) keresztül • A megoldás kizárja a több forrás kimeneteinek áramköri összekapcsolását
BME-MIT FPGA labor
A mikroprocesszoros busz • Buszhasználat belső buszhálózaton: • Szétválasztott DATA_IN (SLAVE → MASTER) és DATA_OUT (MASTER → SLAVE) • A MUX alapú meghajtás kizárja a több forrás kimenetének áramköri összekapcsolását
BME-MIT FPGA labor
A buszhasználat szabályai • Egy buszon lehet több MASTER és SLAVE is • •
Több SLAVE nem gond Több MASTER : Arbitráció a buszhasználat jogáért
• Az arbitrációban (döntési folyamatban) csak a MASTER funkciójú egységek vesznek részt • Az arbitráció a buszhasználat jogáért történik • Az arbitráció dönti el, hogy versenyhelyzetben ki jogosult a busz használatára. • Többfajta algoritmus létezik az arbitrációra: •
Fix prioritás, körbenforgó, utolsó egység nagyobb prioritású, stb.
BME-MIT FPGA labor
A buszhasználat szabályai • A buszhasználati feltételek eldöntése lehet: • Központi: • •
Az arbiter értékeli ki a kéréseket és jelöli ki a következő MASTER egységet, aki indíthat egy adatátvitelt A dekóder értelmezi a címet/vezérlést és jelöli ki a SLAVE egységet, aki válaszol a kérésre
BME-MIT FPGA labor
A buszhasználat szabályai • A buszhasználati feltételek eldöntése lehet: • Elosztott: •
•
•
BME-MIT
Minden MASTER tartalmaz logikát az arbitrációhoz és így dől el, ki lehet a következő MASTER egység, aki indíthat egy adatátvitelt Minden SLAVE egység tartalmaz dekóder áramkört, ami értelmezi a címet/vezérlést és engedélyezi az egységet, hogy a kérésre válaszoljon Helyes tervezés esetén csak egy MASTER és egy SLAVE egység lehet egy időben aktív FPGA labor
A busz adatátviteli ütemezése • Az adatátvitel ütemezése: aszinkron • Nincs ütemező órajel • Az adatátvitelt a „kézfogásos” (hand-shake) szinkronizáció vezérli (REQ → ACK jelek) • 4 állapot REQ_ACK → 00 – 10 – 11 – 01 – 00 • Ha az előző átvitelnek vége (ACK =0), akkor • Átviteli paraméterek beállítása • REQ → 1, start • Vár ACK-ra, minden jel stabilan tartva • Ha ACK megjön, REQ=0 • Vár ACK elengedésére
BME-MIT
FPGA labor
A busz adatátviteli ütemezése • •
Az adatátvitel ütemezése szinkron módon Az adatátvitelt a busz órajel ciklusai ütemezik – Sokfajta busz ütemezési protokoll létezik, gyakori a címzési és az adat fázis szétválasztása • Első ütem: a cím és a vezérlési paraméterek beállítása • Második ütem: adatátvitel
– Jellemzően egy átvitel több órajel ciklus ideig tart (START-ÁTVITEL-LEZÁRÁS) – A MiniRISC busz egyetlen órajel alatt hajtja végre az átvitelt
BME-MIT FPGA labor
MiniRISC mintarendszer - Bevezetés (Egyszerűsített Blokkvázlat) LED-ek
DIP kapcsoló
basic_owr (0x80)
basic_in (0x81)
„A” bővítőcsatlakozó „B” bővítőcsatlakozó
128 x 8 bites adatmemória (0x00 – 0x7F) basic_io (0x84 – 0x87)
basic_io (0x88 – 0x8B)
MiniRISC CPU Adatmemória interfész
Adatmem. Debug
Prg. mem. slave_usrt (0x8E – 0x8F)
Debug modul
256 x 16 bites programmemória
basic_display (0x90 – 0x9F)
29
basic_in (0x82)
USRT
JTAG
BME-MIT
basic_timer (0x8C – 0x8D)
nyomógombok fejlesztői és kommunikációs port
kijelzők
MiniRISC processzor, 2013.04.17. (v1.2)
FPGA labor
MiniRISC interfészei
A MiniRISC processzor diasorozat 69 - 78 diája
BME-MIT FPGA labor
Az egyszerűsített MiniRISC rendszer MiniRISC CPU
Adatmemória interfész
Adat memória IF. Debug
Prg. mem. slave_usrt (0x88 – 0x8B)
Debug modul
256 x 16 bit program mem.
basic_in (0x81)
USR T
JTAG
0x00 – 0x7F
128 x 8 bit adat memória
(0x00 – 0x7F)
LED
Fejlesztő és komm. interfész
Címtartomány
basic_owr (0x80)
Méret 128 byte
basic_in_irq
(0x84 – 0x87)
Nyomógombok
DIP kapcsoló
Periféria
Funkció
adatmemória
128 x 8 bit memória
0x80
1 byte
basic_owr
LED periféria
0x81
1 byte
basic_in
DIP kapcsoló periféria
0x84 – 0x87
4 byte
basic_in_irq
Nyomógomb periféria
0x88 – 0x8B
4 byte
slave_usrt
Soros USRT kommunikáció
0x90 – 0xFF
112 byte
További perifériák
BME-MIT 31
FPGA labor
MiniRISC processzor – Perifériaillesztés A perifériaillesztési feladat lépései A periféria típusa alapján az igények felmérése – Regiszterek száma és használati módja (írható, olvasható) • Parancs, státusz, üzemmód, stb. regiszterek
– Esetleg FIFO vagy kisebb memória blokk A báziscím kijelölése, a címtartomány használatának megtervezése A címdekódolás kialakítása – psel = ((cpu2dmem_addr >> N) == (BASEADDR >> N)) – A címtartomány mérete 2N byte Az alsó címbitek vizsgálata akkor kell, ha N > 0 Írás engedélyező jelek – xxx_wr = psel & cpu2dmem_wr & (cpu2dmem_addr[N-1:0] == ADDR) Olvasás engedélyező jelek – xxx_rd = psel & cpu2dmem_rd & (cpu2dmem_addr[N-1:0] == ADDR) – Szerepe a kimeneti MUX vezérlése: egy időben csak egy MUX kimenetén van érvényes adat, a többi periféria kimenetének értéke inaktív nulla – Használni kell még, ha az olvasás állapotváltozást is okoz (pl. FIFO)
BME-MIT 32
FPGA labor
MiniRISC processzor – Perifériaillesztés (1. példa – Specifikáció)
Feladat: 8 darab LED illesztése a processzoros rendszerhez, az állapot legyen visszaolvasható Egyszerű, egy 8 bites írható és olvasható regiszter szükséges Adatregiszter: BASEADDR + 0x00, 8 bites, írható/olvasható – Az OUTi bit hajtja meg az i-edik LED-et 7. bit
6. bit
5. bit
4. bit
3. bit
2. bit
1. bit
0. bit
OUT7
OUT6
OUT5
OUT4
OUT3
OUT2
OUT1
OUT0
R/W
R/W
R/W
R/W
R/W
R/W
R/W
R/W
cpu2dmem_data cpu2dmem_addr BASEADDR A[7:0]
cpu2dmem_wr
0
B[7:0]
8 bites komparátor A=Bout
psel cpu2dmem_rd
BME-MIT 33
dout
8 bites regiszter D[7:0] Q[7:0] LD
0
1
dmem2cpu_data
MiniRISC processzor, 2014.11.11. (v1.3)
FPGA labor
MiniRISC processzor – Perifériaillesztés (1. példa – Megvalósítás Verilog nyelven)
Feladat: 8 darab LED illesztése a processzoros rendszerhez module basic_owr #( //A periféria báziscíme. parameter BASEADDR = 8'hff ) ( //Órajel és reset. input wire clk, input wire rst, //Adatmemória interfész. input wire [7:0] cpu2dmem_addr, input wire cpu2dmem_wr, input wire cpu2dmem_rd, input wire [7:0] cpu2dmem_data, output reg [7:0] dmem2cpu_data, //Kimenő adat. output reg [7:0] dout ); //A periféria kiválasztó jele. wire psel = (cpu2dmem_addr == BASEADDR);
//Az adatreg. írás engedélyező jele. wire dreg_wr = psel & cpu2dmem_wr; //Az adatreg. olvasás engedélyező jele. wire dreg_rd = psel & cpu2dmem_rd; //Adatregiszter. always @(posedge clk) if (rst) dout <= 8’d0; else if (dreg_wr) dout <= cpu2dmem_data; //Az olvasási adatbusz meghajtása. always @(*) if (dreg_rd) dmem2cpu_data <= dout; else dmem2cpu_data <= 8’d0; endmodule
BME-MIT 34
MiniRISC processzor, 2014.11.11. (v1.3)
FPGA labor
MiniRISC processzor – Perifériaillesztés (2. példa – Specifikáció)
Feladat: 8 darab kapcsoló illesztése a processzoros rendszerhez Egyszerű, egy 8 bites csak olvasható regiszter szükséges, amely folyamatosan mintavételezi a 8 kapcsoló állapotát Adatregiszter: BASEADDR + 0x00, 8 bites, csak olvasható – Az INi bit az i-edik kapcsolón beállított értéket veszi fel 7. bit
6. bit
5. bit
4. bit
3. bit
2. bit
1. bit
0. bit
IN7
IN6
IN5
IN4
IN3
IN2
IN1
IN0
R
R
R
R
R
R
R
R
din
Regiszter D[7:0] Q[7:0]
1 0
cpu2dmem_rd
EN
8 bites komparátor A[7:0]
cpu2dmem_addr
BME-MIT 35
dmem2cpu_data
0
A=Bout
B[7:0]
BASEADDR
MiniRISC processzor, 2014.11.11. (v1.3)
FPGA labor
MiniRISC processzor – Perifériaillesztés (2. példa – Megvalósítás Verilog nyelven)
Feladat: 8 darab kapcsoló illesztése a processzoros rendszerhez module basic_in #( //A periféria báziscíme. parameter BASEADDR = 8'hff ) ( //Órajel és reset. input wire clk, input wire rst, //Adatmemória interfész. input wire [7:0] cpu2dmem_addr, input wire cpu2dmem_rd, output reg [7:0] dmem2cpu_data, //Bejövő adat. input wire [7:0] din ); //A periféria kiválasztó jele. wire psel = (cpu2dmem_addr == BASEADDR);
//Az adatreg. olvasás engedélyező jele. wire in_reg_rd = psel & cpu2dmem_rd; //Adatregiszter. reg [7:0] in_reg; always @(posedge clk) if (rst) in_reg <= 8’d0; else in_reg <= din; //Az olvasási adatbusz meghajtása. always @(*) if (in_reg_rd) dmem2cpu_data <= in_reg; else dmem2cpu_data <= 8’d0; endmodule
BME-MIT 36
MiniRISC processzor, 2014.11.11. (v1.3)
FPGA labor
Digitális technika 10. EA vége
BME-MIT FPGA labor