Beruflich Dokumente
Kultur Dokumente
Blackfin
CS 433
Prof. Luddy Harrison
Processor Presentation Series
Package Size 260 160 160 160 256 182 182 182
PBGA Mini- Mini- Mini- Mini- Mini- Mini- Mini-
BGA, BGA, BGA, BGA, BGA, BGA, BGA,
176 176 169 297 208 208 208
LQFP, LQFP, Sparse PBGA Sparse Sparse Sparse
169 169 PBGA Mini- Mini- Mini-
Sparse Sparse BGA BGA BGA
PBGA PBGA
z MiniBGA Package
z 10x10 mm MiniBGA, approximately 50% smaller
than most other DSPs
z 144-ball chip array package (CAP) footprint, just
one square centimeter
z Height is just 1.25 millimeters
Blackfin Core
80KB 64KB
INST DATA
SRAM/CACHE
L1 Memory
System Interface Unit
PPI/GPIO
DMA
Scratchpad SRAM
L1 L1 L1 L1 L2
Instruction MMU Data Instruction MMU Data SRAM SPORT0
Memory Memory Memory Memory 128 KB
SPORT1
IMDMA
Core System /Bus Interface Controller
GPIO
DMA
Controller
TIMERS
Boot DMA
ROM Controller
External Port
Flash/SDRAM
Control PPI0 PPI1
DECODE
R7 16 16
R6 8 8 8 8
LOOP BUFFER
R5
R4
R3 CONTROL UNIT
R2 Barrel
R1 40 40
Shifter
R0
ACC0 ACC1
GPS Bluetooth
RF RF
GSM INTERFACE
MIC VOICEBAND
AMP STEREO Power
ADC ADC/DAC Amplifier
AMP ADC
BOOT
SDRAM
FLASH
GPS GSM/CDMA
RF Wireless
Phone
Processor Module
BOOT
FLASH
Stereo &
Headphone
Multi-channel
Amplifier
DACs
Processor
Boot
Flash
MIC VOICEBAND
DIGITAL OUTPUT
AMP ADC
PROCESSOR
ANALOG OUTPUT
BOOT
FLASH
Memory
Camera Int/Ext
CCD CCD/AFE
Processor/
Sensor Processor
Controller
USB to PC/PCMCIA
Video
Audio Compression Memory
Audio
Microphone AMP Codec
Audio
Speaker AMP
Thermal
System V-Ref Power Signal
Digital Pot Interface Supervisory Management
Timing Management Control
Application Application
Camera AMP Video
Processor Processor
Switch
AMP Display
Camera AMP
Thermal
System V-Ref Power Signal
Digital Pot Interface Supervisory Management
Timing Management Control
Display
Sensor Digitizer
Motor
Motor
Control USB to
PCMCIA
Thermal
System V-Ref Power Signal
Digital Pot Interface Supervisory Management
Timing Management Control
z Load / Store
z Load Immediate
z register = constant
z A1 = A0 = 0
z Load Pointer Register
z P-register = [ indirect_address ]
z Load Data Register
z D-register = [ indirect_address ]
z Load Half-Word – Zero-Extended
z D-register = W [ indirect_address ] (Z)
z Load / Store
z Load Half-Word – Sign-Extended
z D-register = W [ indirect_address ] (X)
z Load High Data Register Half
z Dreg_hi = W [ indirect_address ]
z Load Low Data Register Half
z Dreg_lo = W [ indirect_address ]
z Load Low Data Register Half
z Dreg_lo = W [ indirect_address ]
z Load / Store
z Load Byte – Sign-Extended
z D-register = B [ indirect_address ] (X)
z Store Pointer Register
z [ indirect_address ] = P-register
z Store Data Register
z [ indirect_address ] = D-register
z Store High Data Register Half
z W [ indirect_address ] = Dreg_hi
z Load / Store
z Store Low Data Register Half
z W [ indirect_address ] = Dreg_lo
z W [ indirect_address ] = D-register
z Store Byte
z B [ indirect_address ] = D-register
z Move
z Move Register
z dest_reg = src_reg
z Move
z Move Conditional
z IF CC dest_reg = src_reg
z IF ! CC dest_reg = src_reg
z Move Half to Full Word – Zero-Extended
z dest_reg = src_reg (Z)
z Move Half to Full Word – Sign-Extended
z dest_reg = src_reg (X)
z Move
z Move Register Half
z dest_reg_half = src_reg_half
z dest_reg_half = accumulator (opt_mode)
z Move Byte – Zero-Extended
z dest_reg = src_reg_byte (Z)
z Move Byte – Sign-Extended
z dest_reg = src_reg_byte (X)
z Stack Control
z --SP (Push)
z [ -- SP ] = src_reg
z --SP (Push Multiple)
z [ -- SP ] = (src_reg_range)
z SP++ (Pop)
z dest_reg = [ SP ++ ]
z SP++ (Pop Multiple)
z (dest_reg_range) = [ SP ++ ]
z Stack Control
z LINK, UNLINK
z LINK uimm18m4 ; /* allocate a stack frame of specified size (b) */
z UNLINK ; /* de-allocate the stack frame (b)*/
z Control Code Bit Management
z Compare Data Register
z CC = operand_1 == operand_2
z Logical Operations
z | (OR)
z dest_reg = src_reg_0 | src_reg_1
z ^ (Exclusive-OR)
z dest_reg = src_reg_0 ^ src_reg_1
z BXORSHIFT, BXOR
z dest_reg = CC = BXORSHIFT ( A0, src_reg )
z dest_reg = CC = BXOR ( A0, src_reg )
z dest_reg = CC = BXOR ( A0, A1, CC )
z A0 = BXORSHIFT ( A0, A1, CC )
z Bit Operations
z BITCLR
z BITCLR ( register, bit_position )
z BITSET
z BITSET ( register, bit_position )
z BITTGL
z BITTGL ( register, bit_position )
z BITTST
z CC = BITTST ( register, bit_position )
z CC = ! BITTST ( register, bit_position )
z Bit Operations
z DEPOSIT
z dest_reg = DEPOSIT ( backgnd_reg, foregnd_reg )
z dest_reg = DEPOSIT ( backgnd_reg, foregnd_reg ) (X)
z EXTRACT
z dest_reg = EXTRACT ( scene_reg, pattern_reg ) (Z)
z dest_reg = EXTRACT ( scene_reg, pattern_reg ) (X)
z BITMUX
z BITMUX ( source_1, source_0, A0 ) (ASR)
z BITMUX ( source_1, source_0, A0 ) (ASL)
z Bit Operatoins
z ONES (One’s Population Count)
z dest_reg = ONES src_reg
z Shift / Rotate Operations
z Add with Shift
z dest_pntr = (dest_pntr + src_reg) << 1
z dest_pntr = (dest_pntr + src_reg) << 2
z dest_reg = (dest_reg + src_reg) << 1
z dest_reg = (dest_reg + src_reg) << 2
z Arithmetic Operations
z Add/Subtract – Prescale Down
z dest_reg = src_reg_0 + src_reg_1 (RND20)
z dest_reg = src_reg_0 - src_reg_1 (RND20)
z Add/Subtract – Prescale Up
z dest_reg = src_reg_0 + src_reg_1 (RND12)
z dest_reg = src_reg_0 - src_reg_1 (RND12)
z Add Immediate
z register += constant
z Arithmetic Operations
z DIVS, DIVQ (Divide Primitive)
z DIVS ( dividend_register, divisor_register )
z DIVQ ( dividend_register, divisor_register )
z EXPADJ
z dest_reg = EXPADJ ( sample_register, exponent_register )
z MAX
z dest_reg = MAX ( src_reg_0, src_reg_1 )
z MIN
z dest_reg = MIN ( src_reg_0, src_reg_1 )
z Arithmetic Operations
z Modify – Decrement
z dest_reg -= src_reg
z Modify – Increment
z dest_reg += src_reg
z dest_reg = ( src_reg_0 += src_reg_1 )
z Multiply 16-Bit Operands
z dest_reg = src_reg_0 * src_reg_1 (opt_mode)
z Multiply 32-Bit Operands
z dest_reg *= multiplier_register
z Arithmetic Operations
z Multiply and Multiply-Accumulate to Accumulator
z accumulator = src_reg_0 * src_reg_1 (opt_mode)
z accumulator += src_reg_0 * src_reg_1 (opt_mode)
z accumulator –= src_reg_0 * src_reg_1 (opt_mode)
z Multiply and Multiply-Accumulate to Half-Register
z dest_reg_half = (accumulator = src_reg_0 * src_reg_1)
(opt_mode)
z dest_reg_half = (accumulator += src_reg_0 * src_reg_1)
(opt_mode)
z dest_reg_half = (accumulator –= src_reg_0 * src_reg_1)
(opt_mode)
CS433 Prof. Luddy Harrison Copyright 2005 University of Illinois 77
Instruction Set
Arithmetic Operations
z Arithmetic Operations
z Multiply and Multiply-Accumulate to Data Register
z dest_reg = (accumulator = src_reg_0 * src_reg_1) (opt_mode)
z dest_reg = (accumulator += src_reg_0 * src_reg_1) (opt_mode)
z dest_reg = (accumulator –= src_reg_0 * src_reg_1) (opt_mode)
z Negate (Two’s Complement)
z dest_reg = – src_reg
z dest_accumulator = – src_accumulator
z RND (Round to Half-Word)
z dest_reg = src_reg (RND)
z Arithmetic Operations
z Saturate
z dest_reg = src_reg (S)
z SIGNBITS
z dest_reg = SIGNBITS sample_register
z Subtract
z dest_reg = src_reg_1 - src_reg_2
z Subtract Immediate
z register -= constant
z Cache Control
z FLUSH
z FLUSH [ Preg ] ; /* indexed (a) */
z FLUSH [ Preg ++ ] ; /* indexed, post increment (a) */
z FLUSHINV
z FLUSHINV [ Preg ] ; /* indexed (a) */
z FLUSHINV [ Preg ++ ] ; /* indexed, post increment (a) */
z IFLUSH
z IFLUSH [ Preg ] ; /* indexed (a) */
z IFLUSH [ Preg ++ ] ; /* indexed, post increment (a) */
z Vector Operations
z VIT_MAX (Compare-Select)
z dest_reg = VIT_MAX ( src_reg_0, src_reg_1 ) (ASL)
z dest_reg = VIT_MAX ( src_reg_0, src_reg_1 ) (ASR)
z dest_reg_lo = VIT_MAX ( src_reg ) (ASL)
z dest_reg_lo = VIT_MAX ( src_reg ) (ASR)
z Vector ABS
z dest_reg = ABS source_reg (V)
z Vector Add / Subtract
z dest = src_reg_0 +|+ src_reg_1
z Vector Operations
z Vector Arithmetic Shift
z dest_reg = src_reg >>> shift_magnitude (V)
z dest_reg = ASHIFT src_reg BY shift_magnitude (V)
z Vector Logical Shift
z dest_reg = src_reg >> shift_magnitude (V)
z dest_reg = src_reg << shift_magnitude (V)
z dest_reg = LSHIFT src_reg BY shift_magnitude (V)
z Vector MAX
z dest_reg = MAX ( src_reg_0, src_reg_1 ) (V)
z Vector Operations
z Vector MIN
z dest_reg = MIN ( src_reg_0, src_reg_1 ) (V)
z Vector Negate (Two’s Complement)
z dest_reg = – source_reg (V)
z Vector PACK
z Dest_reg = PACK ( src_half_0, src_half_1 )
z Vector SEARCH
z (dest_pointer_hi, dest_pointer_lo ) = SEARCH src_reg
(searchmode)