České vysoké učení technické Fakulta elektrotechnická Struktura a architektura počítačů Ver.1.30 Systémová struktura počítače Instrukční soubor II Příklady návrhu J. Zděnek / M. Chomát 2014
České vysoké učení technické Fakulta elektrotechnická
Struktura a architektura počítačů
Ver.1.30
Systémová struktura počítače
Instrukční soubor II
Příklady návrhu
J. Zděnek / M. Chomát 2014
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 2
Assembler (Jazyk symbolických instrukcí)
• Assembler • Jazyk symbolických instrukcí (též Jazyk symbolických adres) • Nejbližší vyšší stupeň nad strojovým kódem • Používá symbolická jména instrukcí, proměnných, konstant, adres
paměti programu i dat • Umožňuje využít všechny vlastnosti daného typu počítače a jeho
instrukčního souboru • Nekontroluje téměř žádné nedovolené (nevhodné) kroky programátora
(rozdíl od vyšších programovacích jazyků – JAVA, C) • Používá se v časové kritických částech programů, nebo tam kde danou
operaci nelze naprogramovat ve vyšším jazyku • V řídicích aplikací je typická kombinace částí programu v assembleru
a částmi v jazyku C • Program v assembleru je nepřenosný na jinou platformu, je vázaný na
instrukční soubor určitého typu procesoru
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 3
Direktivy assembleru
• Direktivy assembleru umožňují: • Řídit překlad • Označit začátek programu • Označit konec programu • Určit umístění programu v paměti programu • Určit umístění proměnných v paměti dat • Založit symbolická jména zvolených míst v programu (adres) • Založit symbolická jména proměnných • Zajistit inicializaci (nast. počáteční hodnoty) vybraných proměnných • Založit symbolická jména konstant a nastavit jejich hodnoty • Vkládat do programu konstanty v různých formátech (dec,hex,bin) • Nastavit konfigurační bity počítače • Vkládat (zatahovat) do programu další části programu ze souboru • Označit části programu (moduly) symbolickým jménem (Makro) a pod
timto jménem moduly v programu používat
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 4
Příklad (Tlačítko, LED, přerušení, časovač)
• Zadání: V asembleru mikropočítače pic18F87j11 napište program, který testuje zda bylo zmáčknuto tlačítko S1. Při každém zmáčknutí se rozsvítí vždy jedna další LED dioda počínaje diodou připojenou na nejnižší bit portu. Po osmi zmáčknutí S1 bude svítit všech 8 LED diod a při dalším mačkání tlačítka zůstávají všechny diody rozsvícené.
• Tlačítko je připojena na bit RB0 portu B. V klidové poloze (nezmáčknuto) je stav tlačítka snímán jako logická '1', po zmáčknutí se snímá logická '0'.
• Osm světelných diod je připojeno na port D. Pokud se na příslušný bit portu D vysílá logická '0', dioda nesvítí. Logická '1' vyslaná na bit portu D diodu rozsvítí.
• Pro řešení použijte vzorkování stavu tlačítka s periodou přibližně 200ms. Vzorkování tlačítka zorganizujte s využitím jednohladinového systému přerušení a časovače TIMER0. Časovač naprogramujte do 16bitového módu, s hodinami odvozenými od hodin procesoru. Použijte vhodnou hodnotu předděličky u časovače TIMER0.
• Činnost programu dle zadání zapište do ISR (Interrupt Service Routine), která budu volaná vždy po žádosti o přerušení od časovače TIMER0 (žádost se vyvolá po přetečení časovače z maximální hodnoty (samé '1') do nuly. Na pozadí programu (background) bude pouze prázdná nekonečná smyčka.
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 5
pic18F Family Interrupt System (Priority Mode)
EventDetector TimerClk
xIF
xIE
xIP
yIF
yIE
yIP
HIGH PRIORITY
LOW PRIORITY
GIEL
GIEH
IPEN
INPUT
INTERRUPT RESOURCES
. . . . . . . .
PriorityEncoder
INTRQ
Interrupt Enable
Interrupt Flag (Request)
Interrupt Priority
Low Priority Enable
Priority System On
High Priority Enable
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 6
pic18F Family Interrupt System (Non Priority Mode)
Interrupt Enable
Interrupt Flag (Request)
Non Priority Mode
All Interrupt Enable
EventDetector TimerClk
xIF
xIE
PEIE
yIF
yIE
GIE IPEN = 0
INPUT
INTERRUPT RESOURCES
. . . . . . . .
INTRQ
NON PRIORITY MODEIPEN = 0
Input Interrupt Enable
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 7
Nastavení systému přerušení - RCON
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 8
Nastavení systému přerušení - RCON
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 9
Nastavení systému přerušení - INTCON
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 10
Nastavení systému přerušení - INTCON
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 11
Nastavení systému přerušení – INTCON2
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 12
Nastavení systému přerušení – INTCON2
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 13
Nepodmíněný skok, absolutní adresa
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 14
Nepodmíněný skok, relativní adresa
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 15
Nastavení bitu registru
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 16
Nulování bitu registru
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 17
Návrat z obsluhy přerušení (ISR)
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 18
pic18F Family Program Memory
PROGRAM MEMORY
RESET VECTOR
INTERRUPTVECTORTABLE
HIGH PRIORITY HIGH PRIORITY INTERRUPT VECTOR
LOW PRIORITY INTERRUPT VECTOR
TABLE READ
LOW PRIORITY
RESET
CONFIG. WORDs
000000h
000008h
000018h
01FFFFh01FFF8h
1FFFFFh
Read as ‘0’
Top of Stack -
PROGRAM COUNTER
STACK POINTERPC
SP STACK1
31
21
21
TOS
IMPLEMENTED MEMORY (FLASH)
PROGRAM MEMORY ADDRESS SPACE
16
5
888
TOSU
018AF4h
F4h8Ah01hTOSH TOSL
TOS REGISTERS
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 19
pic18F Family Interrupt System (Non Priority Mode)
Interrupt Enable
Interrupt Flag (Request)
Non Priority Mode
All Interrupt Enable
EventDetector TimerClk
xIF
xIE
PEIE
yIF
yIE
GIE IPEN = 0
INPUT
INTERRUPT RESOURCES
. . . . . . . .
INTRQ
NON PRIORITY MODEIPEN = 0
Input Interrupt Enable
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 20
Nastavení systému přerušení - inicializace
ORG 0x00000 Reset_vector: ; Program start goto Start ORG 0x00008 Interrupt_vector: ; Interrupt vector table/ goto Timer0_int ; (one item here only) ORG 0x00100 Start: ; … bsf INTCON, TMR0IE ; Timer0 interrupt enable bsf INTCON, GIE ; Non priority mode (IPEN=0 by default) ; … Loop: ; Background loop nop ; do nothing bra Loop
DIREKTIVY
INSTRUKCE
PROMĚNNÉ
KONSTANTY
KOMENTÁŘ
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 21
Obsluha žádosti o přerušení (Timer0 overflow)
; TIMER0 ISR (Interrupt Service Routine) ; Timer0_int: ; Save context, only example, background empty here/ ; (no context) ; … bcf INTCON, TMR0IF ; Clear intrerrupt flag (NECESSARY) ; … ; … ; … ; Restore context ; … retfie ; Return from interrupt
DIREKTIVY
INSTRUKCE
PROMĚNNÉ
KONSTANTY
KOMENTÁŘ
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 22
Časovač Timer0 – konfigurace 16bitů
TIMER0 Overflow Interrupt Flag
TMR0IF
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 23
Nastavení časovače Timer0, 16bitů
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 24
Nastavení časovače Timer0, 16bitů
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 25
Konstanta do střadače
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 26
Střadač do registru
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 27
Nastavení časovače Timer0, 16bitů
#define TIMER0_FOSC_PRESC8_16bit b'00000010' movlw TIMER0_FOSC_PRESC8_16bit movwf T0CON ; Configure Timer0 bsf T0CON, TMR0ON ; Timer0 ON
DIREKTIVY
INSTRUKCE
PROMĚNNÉ
KONSTANTY
KOMENTÁŘ
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 28
Programovatelné vstupní nebo výstupní porty
TRIS Nastavení
směru 0 -> Output 1 -> Input
LAT nebo PORT
Výstupní registr
PORT Vstupní registr
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 29
Nastavení vstupních a výstupních portů
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 30
Nulování střadače nebo registru
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 31
Rotace vlevo bez přenosu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 32
Test bitu a podmíněný skok
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 33
Registr do registru
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 34
Zapojení portu D a B (LED diody a tlačítka S1, S2)
PORTD
S1 PORTB bit RB0
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 35
Programovatelné vstupní nebo výstupní porty
TRIS Nastavení
směru 0 -> Output 1 -> Input
LAT nebo PORT
Výstupní registr
PORT Vstupní registr
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 36
Inicializace a obsluha portu D a B
; Initialization clrf reg ; reg = 0 clrf WREG ; WREG = 0 movwf TRISD ; PORTD -> all bits outputs, LEDs movwf PORTD ; PORTD = 00h -> LEDs off bsf TRISB, BIT0 ; PORTB.bit0 = input, push button S1 Timer0_int: ; ISR action ; ……… rlncf reg, 1 ; Rotate one bit left, destination reg btfss PORTB, RB0 ; ? Pushbutton S1 pressed bsf reg, BIT0 ; Yes, insert '1' to LSB movff reg, LATD ; Output reg to port D (or PORTD), LEDs ; ……… retfie ; Return from interrupt
DIREKTIVY
INSTRUKCE
PROMĚNNÉ
KONSTANTY
KOMENTÁŘ
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 37
Souhrn – programování SFR pro tento program
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 38
Příklad (Tlačítko, LED, přerušení, časovač)
• Zadání: V asembleru mikropočítače pic18F87j11 napište program, který testuje zda bylo zmáčknuto tlačítko S1. Při každém zmáčknutí se rozsvítí vždy jedna další LED dioda počínaje diodou připojenou na nejnižší bit portu. Po osmi zmáčknutí S1 bude svítit všech 8 LED diod a při dalším mačkání tlačítka zůstávají všechny diody rozsvícené.
• Tlačítko je připojena na bit RB0 portu B. V klidové poloze (nezmáčknuto) je stav tlačítka snímán jako logická '1', po zmáčknutí se snímá logická '0'.
• Osm světelných diod je připojeno na port D. Pokud se na příslušný bit portu D vysílá logická '0', dioda nesvítí. Logická '1' vyslaná na bit portu D diodu rozsvítí.
• Pro řešení použijte vzorkování stavu tlačítka s periodou přibližně 200ms. Vzorkování tlačítka zorganizujte s využitím jednohladinového systému přerušení a časovače TIMER0. Časovač naprogramujte do 16bitového módu, s hodinami odvozenými od hodin procesoru. Použijte vhodnou hodnotu předděličky u časovače TIMER0.
• Činnost programu dle zadání zapište do ISR (Interrupt Service Routine), která budu volaná vždy po žádosti o přerušení od časovače TIMER0 (žádost se vyvolá po přetečení časovače z maximální hodnoty (samé '1') do nuly. Na pozadí programu (background) bude pouze prázdná nekonečná smyčka.
Souhrn informací k řešení příkladu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 39
Sdílené prostředky (sdílí je procedury) Souhrn informací k řešení příkladu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 40
Dynamické přemapování a přímá adresa
DATA MEMORY000h
8
SPECIAL FUNCTIONREGISTERSMEMORY MAPPEDINPUT/OUTPUT SPACE
0FFh100h
EFFhF00h
FFFh
F5FhF60h
05Fh060h
00h
FFh
60h
5Fh
5Fh
FFh
00hFFh
60h
00h
SFR
WREG
STATUS
BANK 0
BANK 1 …
BANK 14
BANK 15
8
WREG
STATUS
GPRACCESS BANK
00h
5Fh60h
FFh
DISABLED(HIDDEN)
REMAPPING & SHORT DIRECT ADDRESS
REMAPPING
Souhrn informací k řešení příkladu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 41
pic18F Family Program Memory
PROGRAM MEMORY
RESET VECTOR
INTERRUPTVECTORTABLE
HIGH PRIORITY HIGH PRIORITY INTERRUPT VECTOR
LOW PRIORITY INTERRUPT VECTOR
TABLE READ
LOW PRIORITY
RESET
CONFIG. WORDs
000000h
000008h
000018h
01FFFFh01FFF8h
1FFFFFh
Read as ‘0’
Top of Stack -
PROGRAM COUNTER
STACK POINTERPC
SP STACK1
31
21
21
TOS
IMPLEMENTED MEMORY (FLASH)
PROGRAM MEMORY ADDRESS SPACE
16
5
888
TOSU
018AF4h
F4h8Ah01hTOSH TOSL
TOS REGISTERS
Souhrn informací k řešení příkladu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 42
pic18F Family Interrupt System (Non Priority Mode)
Interrupt Enable
Interrupt Flag (Request)
Non Priority Mode
All Interrupt Enable
EventDetector TimerClk
xIF
xIE
PEIE
yIF
yIE
GIE IPEN = 0
INPUT
INTERRUPT RESOURCES
. . . . . . . .
INTRQ
NON PRIORITY MODEIPEN = 0
Input Interrupt Enable
Souhrn informací k řešení příkladu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 43
Časovač Timer0 – konfigurace 16bitů
TIMER0 Overflow Interrupt Flag
TMR0IF
Souhrn informací k řešení příkladu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 44
Zapojení portu D a B (LED diody a tlačítka S1, S2)
PORTD
S1 PORTB bit RB0
Souhrn informací k řešení příkladu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 45
Programovatelné vstupní nebo výstupní porty
TRIS Nastavení
směru 0 -> Output 1 -> Input
LAT nebo PORT
Výstupní registr
PORT Vstupní registr
Souhrn informací k řešení příkladu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 46
Celý program (Timer0 overflow interrupt) - 1
; Press Explorer pic18 S1 pushbutton -> switch on next led on port D #include P18F87J11.inc CONFIG FOSC = HS CONFIG WDTEN = OFF CONFIG XINST = OFF #define TIMER0_FOSC_PRESC8_16bit b'00000010' #define BIT0 0 #define F 1 UDATA_ACS wreg_tmp: res 1 ; Program variables status_tmp: res 1 bsr_tmp: res 1 reg: res 1
ORG 0x00000 Reset_vector: ; Program start goto Start ORG 0x00008 Interrupt_vector: ; Interrupt vectro table (one item here) goto Timer0_int
DIREKTIVY
INSTRUKCE
PROMĚNNÉ
KONSTANTY
KOMENTÁŘ
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 47
Celý program (Timer0 overflow interrupt) - 2
ORG 0x00100 Start: clrf reg ; reg = 0 clrf WREG ; WREG = 0 movwf TRISD ; PORTD -> all bits outputs, LEDs movwf PORTD ; PORTD = 00h, LEDs off bsf TRISB, BIT0 ; PORTB.bit0 = input, push button S1 movlw TIMER0_FOSC_PRESC8_16bit movwf T0CON ; Configure Timer0 bsf T0CON, TMR0ON ; Timer0 ON ; bsf INTCON, TMR0IE ; Timer0 interrupt enable bsf INTCON,GIE ; Non priority mode ; (IPEN = 0 by default) Loop: nop ; Do nothing, background loop bra Loop
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 48
Celý program (Timer0 overflow interrupt) - 3
; === Timer0 overflow ISR (Interrupt Service Routine) === Timer0_int: movff STATUS, status_tmp ; Save context, only example movff WREG, wreg_tmp ; background empty here movff BSR, bsr_tmp ; (no context save necessary) bcf INTCON, TMR0IF ; Clear intrerrupt flag (IMPORTANT) rlncf reg, F ; Rotate one bit left btfss PORTB, RB0 ; ? Pushbutton S1 pressed bsf reg, BIT0 ; Yes, insert '1' to lsb movff reg, LATD ; Output reg to port D (or PORTD), LEDs movff bsr_tmp, BSR ; Restore context movff wreg_tmp, WREG movff status_tmp, STATUS retfie ; Return from ISR, reenable interrupt
END
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 49
Detektor posloupnosti bitů ‘110’ (FSA typu Moore)
Navrhněte synchronní konečný automat (FSA – Finite State Automaton), který v proudu vstupních bitů detekuje posloupnost ‘110’. Detekci každé takové posloupnosti automat indikuje na výstupu blikáním LED diody. V ostatních stavech automatu LED dioda svítí nepřerušovaně. Náběžná hrana x1 indikuje na vstupu ‘1’, náběžná hrana x0 pak ‘0’. Automat realizujte programovými prostředky a využitím hardwareové podpory. Použijte jednohladinový systém přerušení a časovač. Vstupy x1 a x0 se zadávají tlačítky s mechanickým kontaktem a odskoky při změně hodnoty. Program automatu musí odskoky filtrovat, sestavte a použijte filtrační algoritmus („debounce circuit“).
(Moore)
FSASi
I (Inputs)O (Outputs)y
clk
x1x0
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 50
Detektor posloupnosti bitů ‘110’ (FSA typu Moore)
(Moore)
FSASi
I (Inputs)O (Outputs)y
clk
x1x0
x1
clk
y
1 1 1 1 00 0x0
LEDsvítí bliká
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 51
Detektor posloupnosti bitů ‘110’ (FSA typu Moore)
D Q
Stavový registr Logika výstupůBudicí funkce
LKO1 LKO2
C
clk
0
I
Co máme navrhnout?
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 52
Detektor posloupnosti bitů ‘110’ (FSA typu Moore)
Si I0 I1
S0 S0 S1
S1 S0 S2
S2 S3 S2
S3 S0 S1
S0
S1
S2
S3
I0
I1
01
I0
00
00
00
I1
I1
I1
I0
I0
Si Oi
S0 O0
S1 O0
S2 O0
S3 O1
Stavový diagram
Tabulka přechodů Tabulka výstupů
I – Vstupy (Inputs)
O – Výstupy (Outputs)
Si – i-tý stav
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 53
Dekompozice problému - 1
START
INITIALIZATION
BACKGROUNDDO NOTHING
ISR
RET
X1, X2 INPUTDEBOUNCE
FSA STATELOGIC
FSA OUTPUTLOGIC
TIMER
IF
TCLK
TIME6ms
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 54
Dekompozice problému - 2
DEBOUNCE ALGORITHM PRINCIPLE
101xxxxx RAW INPUT
BOUNCE IN ‘1’SHIFT LEFT
AND
SAMPLE MASK 11100000
11100000
XOR
‘1’s MASK
? = 0
CLEAR ‘1’
?
(i.e. LAST VALUE WAS ‘0’)
YES, INPUT IS ‘1’
AND
11100000
00000000
XOR
? = 0
CLEAR ‘0’
YES, INPUT IS ‘0’
‘0’s MASK
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 55
Dekompozice problému - 3
FSA STATE LOGIC
RET
STATE 0
SWITCH
STATE 1 STATE 2 STATE 3
S0
S1
S2
S3
I0
I1
01
I0
00
00
00
I1
I1
I1
I0
I0
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 56
Dekompozice problému - 4
FSA OUTPUT LOGIC
RET
TLED
SW TIMER
? ‘110’
LED TOGGLE(300ms)LED ON
- +
- +
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 57
Detektor ‘110’ – Hlavička programu
; File: BSD3_110.asm ; Date: 04.04.2010 ; Version: 1.00 ; HW: Explorer pic18F87J11 ; IDE: MPLAB 7.50 ; Author: J.Z.; Institute: CTU in Prague, EEF Dept.13114 ; Function: Bitstream '110' detector, Moore type FSA ; Pushbutton S1 = input '1', pushbutton S2 = input '0' ; Program detects leading edge of S1, S2 pushbuttons ; FSA outputs: ; LED1,0 = FSA state_register ; LED7 = ON - no '110' bitstream detected ; LED7 = TOGGLE (approx 300 ms) - '110' bitstream detected ; Note: Pushbuttons S1, S2 are debounced (3 conscutive equal bits required) ; to be correct value detected ; Debounce S1, S2 pushbuttons routines detect leading edge only
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 58
Detektor ‘110’ – Konfigurace a konstanty
#define DBG_MODE ; Conditional translation (simulator dbg)
#include P18F87J11.inc CONFIG FOSC=HS CONFIG WDTEN=OFF CONFIG XINST=OFF
#define F 1 #define BIT0 0 #define TIMER0_FOSC_PRESC8_16bit b'00000010' #define TIMER0_FOSC_PRESC64_8bit b'01000101‘ ; 6,6 ms, FOSC = 10 MHz
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 59
Detektor ‘110’ – Proměnné a konstanty
UDATA_ACS ; Program variables ; Save context registers wreg_tmp: res 1 status_tmp: res 1 bsr_tmp: res 1 reg: res 1 ; FSA Moore variables and constants #define STATE_0 0 #define STATE_1 1 #define STATE_2 2 #define STATE_3 3 #define FSA_INPUT_BIT_VALUE 0 #define FSA_OUTPUT_LED_ON_TIME 45 ; t = 6.6 ms * 45 = 300 ms #define FSA_OUTPUT_LED_OFF_TIME 25 ; 170 ms
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 60
Detektor ‘110’ – Proměnné
state_register res 1 next_state res 1 fsa_input res 1 fsa_output res 1 fsa_output_timer res 1
; Pushbutton S1, S2 debounce and leading edge detection variables portb_dbg: res 1 porta_dbg: res 1 pb_s1_debounce: res 1 pb_s1_status: res 1 pb_s2_debounce: res 1 pb_s2_status: res 1
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 61
Detektor ‘110’ – Konstanty (vstup FSA)
; Pushbutton S1, S2 debounce and leading edge detection constants #define PB_ON 0 ; Pb Sx on status bit position #define PB_OFF 1 ; Pb Sx off status bit position #define DEBOUNCE_MASK b'00000111' ; 3 equal bits required #define PB_xTIMES_ON b'00000111' #define PB_xTIMES_OFF b'00000000'
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 62
Detektor ‘110’ – Začátek programu a tab.vektorů přerušení
code ORG 0x00000 Reset_vector: ; Program start goto Start ORG 0x00008 Interrupt_vector: ; Interrupt vector table (one item here) goto Timer0_int
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 63
Detektor ‘110’ – Inicializace
ORG 0x00050 Start: ; Background Start clrf reg ; reg = 0 clrf WREG ; WREG = 0 movwf TRISD ; PORTD -> all bits outputs movwf PORTD ; PORTD = 00h bsf TRISB, BIT0 ; PORTB.bit0 = input, push button S1 bsf TRISA, RA5 bsf WDTCON, ADSHR bsf ANCON0, PCFG4 ; RA5 - digital input bcf WDTCON, ADSHR call Pushbutton_s1_init ; Initialize S1 debounce routine call Pushbutton_s2_init ; Initialize S2 debounce routine call Bitstream_detector_init call Bitstream_detector_output_init
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 64
Detektor ‘110’ – Inicializace a pozadí (prázdné)
movlw TIMER0_FOSC_PRESC64_8bit movwf T0CON ; Configure Timer0 bsf T0CON, TMR0ON ; Timer0 ON ; bsf INTCON, TMR0IE ; Timer0 interrupt enable bsf INTCON, GIE ; Non priority mode (IPEN = 0 by default) Loop: nop ; Do nothing, background bra Loop ; ; Background END
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 65
Detektor ‘110’ – Inicializace (vstupní filtr tlačítek S1, S2)
; Init debounce pushbutton S1 (RB0) Pushbutton_s1_init: clrf pb_s1_debounce clrf pb_s1_status return ; Pushbutton_s1_init END
; Init debounce pushbutton S2 (RA5) Pushbutton_s2_init: clrf pb_s2_debounce clrf pb_s2_status return ; Pushbutton_s1_init END
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 66
Detektor ‘110’ – Vstupní filtr tlačítka S1
Pushbutton_s1: ; Debounce pushbutton S1 (RB0) movlw DEBOUNCE_MASK andwf pb_s1_debounce, F rlncf pb_s1_debounce, F ; Rotate one bit left #ifdef DBG_MODE btfss portb_dbg, RB0 ; dbg: ? Push button S1 pressed (0 -> on) #else btfss PORTB,RB0 ; ? Push button S1 pressed (0 -> on) #endif Pushbutton_s1_read_as_on: bsf pb_s1_debounce,BIT0 ; Yes, insert '1' to LSB Pb_s1_test_off: movf pb_s1_debounce, W andlw DEBOUNCE_MASK xorlw PB_xTIMES_OFF bnz Pb_s1_test_on
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 67
Detektor ‘110’ – Vstupní filtr tlačítka S1
Pb_s1_set_off: ; Ok, S1 debounced, read off bcf pb_s1_status, PB_ON ; Clear pushbutton S1 on bsf pb_s1_status, PB_OFF ; Set pushbutton S1 off bra Pb_s1_exit Pb_s1_test_on: movf pb_s1_debounce, W andlw DEBOUNCE_MASK xorlw PB_xTIMES_ON bnz Pb_s1_exit ; S1 bounces yet Pb_s1_detect_leading_edge: btfss pb_s1_status, PB_OFF ; Detect leading edge bra Pb_s1_exit Pb_s1_set_pb_on: bcf pb_s1_status, PB_OFF bsf pb_s1_status, PB_ON ; Set pushbutton S1 on Pb_s1_exit: return ; Pushbutton_s1 END
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 68
Detektor ‘110’ – Vstupní filtr tlačítka S2
Pushbutton_s2: ; Debounce pushbutton S2 (RA5) movlw DEBOUNCE_MASK andwf pb_s2_debounce, F rlncf pb_s2_debounce, F ; Rotate one bit left #ifdef DBG_MODE btfss porta_dbg, RA0 ; dbg: ? Push button S2 pressed (0->on) #else btfss PORTA, RA5 ; ? Push button S1 pressed (0->on) #endif Pushbutton_s2_read_as_on: bsf pb_s2_debounce, BIT0 ; Yes, insert '1' to LSB Pb_s2_test_off: movf pb_s2_debounce, W andlw DEBOUNCE_MASK xorlw PB_xTIMES_OFF bnz Pb_s2_test_on
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 69
Detektor ‘110’ – Vstupní filtr tlačítka S2
Pb_s2_set_off: ; Ok, S2 debounced, read off bcf pb_s2_status, PB_ON ; Clear pushbutton S2 on bsf pb_s2_status, PB_OFF ; Set pushbutton S2 off bra Pb_s2_exit Pb_s2_test_on: movf pb_s2_debounce, W andlw DEBOUNCE_MASK xorlw PB_xTIMES_ON bnz Pb_s2_exit ; S2 bounces yet Pb_s2_detect_leading_edge: btfss pb_s2_status, PB_OFF ; Detect leading edge bra Pb_s2_exit Pb_s2_set_pb_on: bcf pb_s2_status, PB_OFF bsf pb_s2_status, PB_ON ; Set pushbutton S2 on Pb_s2_exit: return ; Pushbutton_s2 END
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 70
Detektor ‘110’ – Inicializace (FSA)
; Bitstream detector initialization Bitstream_detector_init: movlw STATE_0 movwf state_register movwf next_state bcf fsa_input, FSA_INPUT_BIT_VALUE return ; Bitstream_detector_init END
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 71
Detektor ‘110’ – Vlastní konečný automat FSA
; Bitstream detector '110', FSA Moore Bitstream_detector: ; Test FSA input value ('0' or '1' or none) btfsc pb_s1_status, PB_ON ; S1 -> input '1' bra Bd_input_1 btfss pb_s2_status, PB_ON ; S2 -> input '0' bra Bd_exit ; No input bit Bd_input_0: bcf pb_s2_status, PB_ON ; Consume input '0' bcf fsa_input, FSA_INPUT_BIT_VALUE ; Input = '0' bra Bd_state_switch Bd_input_1: bcf pb_s1_status, PB_ON ; Consume input '1' bsf fsa_input, FSA_INPUT_BIT_VALUE ; Input = '1'
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 72
Detektor ‘110’ – Vlastní konečný automat FSA
; In Java …. switch (state_register){ } Bd_state_switch: movff state_register, next_state movf state_register, W sublw STATE_0 bz Bd_state_0 movf state_register, W sublw STATE_1 bz Bd_state_1 movf state_register, W sublw STATE_2 bz Bd_state_2 bra Bd_state_3 ; There is no more states ;
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 73
Detektor ‘110’ – Vlastní konečný automat FSA
Bd_state_0: ; FSA state diagram logic (See state diagram) btfss fsa_input, FSA_INPUT_BIT_VALUE ; ? '1' bra Bd_set_next_state ; No, no change movlw STATE_1 movwf next_state ; Goto STATE_1 bra Bd_set_next_state Bd_state_1: btfss fsa_input, FSA_INPUT_BIT_VALUE ; ? '1' bra Bd_state_1_1 movlw STATE_2 ; Yes movwf next_state bra Bd_set_next_state Bd_state_1_1: movlw STATE_0 ; No movwf next_state bra Bd_set_next_state
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 74
Detektor ‘110’ – Vlastní konečný automat FSA
Bd_state_2: btfsc fsa_input,FSA_INPUT_BIT_VALUE ; ? '0' bra Bd_set_next_state ; No, no change movlw STATE_3 ; Yes movwf next_state bra Bd_set_next_state Bd_state_3: btfss fsa_input,FSA_INPUT_BIT_VALUE ; ? '1' bra Bd_state_3_1 movlw STATE_1 ; Yes movwf next_state bra Bd_set_next_state Bd_state_3_1: movlw STATE_0 ; No movwf next_state bra Bd_set_next_state
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 75
Detektor ‘110’ – Vlastní konečný automat FSA
Bd_set_next_state: movff next_state, state_register Bd_exit: return ; Bitstream_detector END
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 76
Detektor ‘110’ – Inicializace (FSA – logika výstupů)
; Bitstream detector output initializtion ; Bitstream_detector_output_init: movlw FSA_OUTPUT_LED_ON_TIME movwf fsa_output_timer clrf fsa_output return ; ; Bitstream_detector END
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 77
Detektor ‘110’ – FSA - logika výstupů
; STATEs 0,1,2 -> LED7 ON ; STATE 3 -> sequence detected -> LED7 toggle, T= approx 400 ms Bitstream_detector_output: movlw STATE_3 cpfseq state_register bra Bdo_nothing_detected Bdo_bitstream_detected: btfsc LATD, RD7 ; Send state_register, no delay bsf WREG, RD7 movff WREG, LATD Bdo_testif_bit_toggle: decfsz fsa_output_timer bra Bdo_exit Bdo_toggle_led: btfss LATD, RD7 bra Bdo_set_ledtime_on
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 78
Detektor ‘110’ – FSA - logika výstupů
Bdo_set_ledtime_off: movlw FSA_OUTPUT_LED_OFF_TIME movwf fsa_output_timer bra Bdo_send_output Bdo_set_ledtime_on: movlw FSA_OUTPUT_LED_ON_TIME movwf fsa_output_timer Bdo_send_output: movff state_register, WREG Bdo_preset_led_on: bsf WREG, RD7 btfsc LATD, RD7
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 79
Detektor ‘110’ – FSA - logika výstupů
Bdo_set_led_off: bcf WREG, RD7 Bdo_send_new_output: movff WREG, LATD bra Bdo_exit ; Bdo_nothing_detected: movff state_register, WREG bsf WREG, RD7 movff WREG, LATD Bdo_exit: return ; ; Bitstream_detector END
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 80
Detektor ‘110’ - Timer0 ISR (Interrupt Service Routine)
Timer0_int: ; Timer0 ISR (Interrupt Service Routine), T = 6.6 ms ; Save context (example, background empty-no context) movff STATUS, status_tmp movff WREG, wreg_tmp movff BSR, bsr_tmp ; bcf INTCON, TMR0IF ; Clear intrerrupt flag ; call Pushbutton_s1 ; Test S1 on (input '1') call Pushbutton_s2 ; Test S2 on (input '0') call Bitstream_detector ; FSA state logic call Bitstream_detector_output ; FSA output logic ; movff bsr_tmp, BSR ; Restore context movff wreg_tmp, WREG movff status_tmp, STATUS retfie ; Return from interrupt, reenable interrupt END
Příklad návrhu
A7B14SAP Struktura a architektura počítačů 8 - Instrukční soubor II 81
České vysoké učení technické Fakulta elektrotechnická
Struktura a architektura počítačů
Systémová struktura počítače Instrukční soubor II
Příklady návrhu
KONEC