Download PicoBlaze Interrupt Interface and Assembly Code

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Lecture 19
PicoBlaze Interrupt Interface
&
Assembly Code Development
ECE 448 – FPGA and ASIC Design with VHDL
Required reading
• P. Chu, FPGA Prototyping by VHDL Examples
Chapter 17, PicoBlaze Interrupt Interface
Chapter 15, Assembly Code Development
ECE 448 – FPGA and ASIC Design with VHDL
2
Program Flow Control Instructions (1)
JUMP AAA
PC <= AAA
JUMP C, AAA
if C=1 then PC <= AAA else PC <= PC + 1
JUMP NC, AAA
if C=0 then PC <= AAA else PC <= PC + 1
JUMP Z, AAA
if Z=1 then PC <= AAA else PC <= PC + 1
JUMP NC, AAA
if Z=0 then PC <= AAA else PC <= PC + 1
Program Flow Control Instructions (2)
CALL AAA
TOS <= TOS+1; STACK[TOS] <= PC; PC <= AAA
CALL C | Z , AAA
if C | Z =1 then
TOS <= TOS+1; STACK[TOS] <= PC; PC <= AAA
else
PC <= PC + 1
CALL NC | NZ , AAA
if C | Z =0 then
TOS <= TOS+1; STACK[TOS] <= PC; PC <= AAA
else
PC <= PC + 1
Program Flow Control Instructions (3)
RETURN
(RET)
PC <= STACK[TOS] + 1; TOS <= TOS - 1
RETURN C | Z (RET C | Z )
if C | Z =1 then
PC <= STACK[TOS] + 1; TOS <= TOS - 1
else
PC <= PC + 1
RETURN NC | NZ (RET NC | NZ )
if C | Z =0 then
PC <= STACK[TOS] + 1; TOS <= TOS - 1
else
PC <= PC + 1
Interrupt Related Instructions
RETURNI ENABLE (RETI ENABLE)
PC <= STACK[TOS] ; TOS <= TOS – 1;
I <= 1; C<= PRESERVED C; Z<= PRESERVED Z
RETURNI DISABLE (RETI DISABLE)
PC <= STACK[TOS] ; TOS <= TOS – 1;
I <= 0; C<= PRESERVED C; Z<= PRESERVED Z
ENABLE INTERRUPT (EINT)
I <=1;
DISABLE INTERRUPT (DINT)
I <=0;
Interrupt
Flow
ECE 448 – FPGA and ASIC Design with VHDL
7
Timing Diagram of an Interrupt Event
ECE 448 – FPGA and ASIC Design with VHDL
8
ECE 448 – FPGA and ASIC Design with VHDL
9
Interrupt Interface with a Single Event
ECE 448 – FPGA and ASIC Design with VHDL
10
Interrupt Interface with Two Requests
ECE 448 – FPGA and ASIC Design with VHDL
11
Interrupt Interface with a Timer
ECE 448 – FPGA and ASIC Design with VHDL
12
Interrupt Interface with a Timer
ECE 448 – FPGA and ASIC Design with VHDL
13
PicoBlaze Development Environments
ECE 448 – FPGA and ASIC Design with VHDL
14
KCPSM3 Assembler Files
ECE 448 – FPGA and ASIC Design with VHDL
15
Directives of Assembly Language
ECE 448 – FPGA and ASIC Design with VHDL
16
Differences between Mnemonics of Instructions
ECE 448 – FPGA and ASIC Design with VHDL
17
Differences between Mnemonics of Instructions
ECE 448 – FPGA and ASIC Design with VHDL
18
Differences between Programs
ECE 448 – FPGA and ASIC Design with VHDL
19
Example of
a function in the PicoBlaze
assembly language
ECE 448 – FPGA and ASIC Design with VHDL
Unsigned Multiplication – Basic Equations
k-1
p=ax
x =  x i  2i
i=0
k-1
p = a  x =  a  x i  2i =
i=0
= x0a20 + x1a21 + x2a22 + … + xk-1a2k-1
Iterative Algorithm for Unsigned Multiplication
Shift/Add Algorithm
p = a  x = x0a20 + x1a21 + x2a22 + … + xk-1a2k-1 =
= (...((0 + x0a2k)/2 + x1a2k)/2 + ... + xk-1a2k)/2 =
k times
p(0) = 0
p(j+1) = (p(j) + xj a 2k) / 2
j=0..k-1
p = p(k)
Unsigned Multiplication Computations
8 bits
8 bits
pL
pH
xj a
+
p(j)
+ xj a 28
pL
pH
>> 1
0
p
pL
pH
pH = s5
pL = s6
a = s3
x = s4
2 p(j+1)
p(j+1)
PicoBlaze Registers
Unsigned Multiplication Subroutine (1)
;=========================================================
; routine: mult_soft
; function: 8-bit unsigned multiplier using
;
shift-and-add algorithm
; input register:
; s3: multiplicand
; s4: multiplier
; output register:
; s5: upper byte of product
; s6: lower byte of product
; temp register: i
;=========================================================
Unsigned Multiplication Subroutine (2)
mult_soft:
load s5, 00
;clear s5
load i, 08
;initialize loop index
mult_loop:
sr0 s4
;shift lsb to carry
jump nc, shift_prod
;lsb is 0
add s5, s3
;lsb is 1
shift_prod:
sra s5
;shift upper byte right,
;carry to MSB, LSB to carry
sra s6
;shift lower byte right,
;lsb of s5 to MSB of s6
sub i, 01
;dec loop index
jump nz, mult_loop
;repeat until i=0
return
Related documents