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 (0x88 – 0x8B)
basic_io (0x84 – 0x87)
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)
basic_timer (0x8C – 0x8D)
USRT
JTAG
BME-MIT 29
basic_in (0x82)
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)
basic_owr (0x80)
USR T
JTAG
0x00 – 0x7F
(0x00 – 0x7F)
LED
Fejlesztő és komm. interfész
Címtartomány
128 x 8 bit adat memória
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 FPGA labor
31
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
8 bites regiszter D[7:0] Q[7:0] LD
dout
cpu2dmem_wr 0
A[7:0] B[7:0]
psel
8 bites komparátor A=Bout
0 1 cpu2dmem_rd
BME-MIT
dmem2cpu_data
MiniRISC processzor, 2014.11.11. (v1.3)
33
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
Regiszter D[7:0] Q[7:0]
din
1 0
cpu2dmem_rd
dmem2cpu_data
0
EN 8 bites komparátor A=Bout A[7:0] B[7:0]
cpu2dmem_addr
BME-MIT
BASEADDR
MiniRISC processzor, 2014.11.11. (v1.3)
35
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