Introduction¶
falcon is a class of general-purpose microprocessor units, used in multiple instances on nvidia GPUs starting from G98. Originally developed as the controlling logic for VP3 video decoding engines as a replacement for xtensa used on VP2, it was later used in many other places, whenever a microprocessor of some sort was needed.
A single falcon unit is made of:
- the core microprocessor with its code and data SRAM [see Processor control]
- an IO space containing control registers of all subunits, accessible from the host as well as from the code running on the falcon microprocessor [see IO space]
- common support logic:
- interrupt controller [see Interrupt delivery]
- periodic and watchdog timers [see Timers]
- scratch registers for communication with host [see Scratch registers]
- PCOUNTER signal output [see Performance monitoring signals]
- some unknown other stuff
- optionally, FIFO interface logic, for falcon units used as PFIFO engines and some others [see FIFO interface]
- optionally, common memory interface logic [see Memory interface]. However, some engines have their own type of memory interface.
- optionally, a cryptographic AES coprocessor. A falcon unit with such coprocessor is called a “secretful” unit. [see Cryptographic coprocessor]
- any unit-specific logic the microprocessor is supposed to control
Todo
figure out remaining circuitry
The base falcon hardware comes in several different revisions:
- version 0: used on G98, MCP77, MCP79
- version 3: used on GT215+, adds a crude VM system for the code segment, edge/level interrupt modes, new instructions [division, software traps, bitfield manipulation, …], and other features
- version 4: used on GF119+ for some engines [others are still version 3]: adds support for 24-bit code addressing, debugging and ???
- version 4.1: used on GK110+ for some engines, changes unknown
- version 5: used on GK208+ for some engines, redesigned ISA encoding
Todo
figure out v4 new stuff
Todo
figure out v4.1 new stuff
Todo
figure out v5 new stuff
The falcon units present on nvidia cards are:
- The VP3/VP4/VP5 engines [G98 and MCP77:GM107]:
- the VP6 engine [GM107-]:
- PVDEC, the video decoder
- The VP3 security engine [G98, MCP77, MCP79, GM107-]:
- PSEC, the security engine
- The GT215:GK104 copy engines:
- The GT215+ daemon engines:
- The Fermi PGRAPH CTXCTL engines:
- PGRAPH.CTXCTL ../graph/gf100-ctxctl/intro.txt
- PGRAPH.GPC[*].CTXCTL ../graph/gf100-ctxctl/intro.txt
- PVCOMP, the video compositing engine [MCP89:GF100]
- PVENC, the H.264 encoding engine [GK104+]