CUDoom: Raycas-ng Video Game Alden Goldstein, Edward - - PowerPoint PPT Presentation

cudoom raycas ng video game
SMART_READER_LITE
LIVE PREVIEW

CUDoom: Raycas-ng Video Game Alden Goldstein, Edward - - PowerPoint PPT Presentation

CUDoom: Raycas-ng Video Game Alden Goldstein, Edward Garcia Minyun Gu, Wei-Hao Yuan, Yiming Xu Original Proposal Milestone 1 Implement raycas-ng


slide-1
SLIDE 1

CUDoom: ¡Raycas-ng ¡Video ¡ Game ¡

Alden ¡Goldstein, ¡Edward ¡Garcia ¡ Minyun ¡Gu, ¡Wei-­‑Hao ¡Yuan, ¡Yiming ¡Xu ¡

slide-2
SLIDE 2

Original ¡Proposal ¡

Milestone ¡1 ¡ ¡• ¡Implement ¡raycas-ng ¡algorithm ¡in ¡ soIware ¡ ¡• ¡Design ¡several ¡mazes ¡ ¡ Milestone ¡2 ¡

  • ¡Integrate ¡the ¡algorithm ¡with ¡FPGA ¡
  • ¡Realize ¡hardware ¡accelera-on ¡for ¡the ¡

algorithm ¡

  • ¡Display ¡the ¡world ¡properly ¡on ¡screen ¡

¡ Milestone ¡3 ¡

  • ¡Add ¡audio ¡output ¡to ¡the ¡game ¡
  • ¡Complete ¡game ¡features, ¡i.e. ¡player ¡

movement, ¡interface ¡ 30 ¡FPS ¡Goal, ¡Raycas-ng ¡in ¡soIware, ¡ SRAM ¡Framebuffer ¡

slide-3
SLIDE 3

Actual ¡Implementa-on ¡

  • All ¡milestones ¡complete ¡
  • 60 ¡Frames ¡per ¡second ¡
  • Hardware ¡raycas-ng ¡accelera-on ¡
  • Wall ¡textures, ¡floor ¡textures, ¡sky ¡genera-on ¡
  • Mul-ple ¡wall ¡heights ¡
  • Background ¡music ¡from ¡flash ¡memory ¡
slide-4
SLIDE 4

NIOS ¡II ¡

AVALON ¡BUS ¡

TRISTATE ¡ MASTER ¡ KEYBOARD ¡ CONTROLLER ¡ SOUND ¡ CONTROLLER ¡ SDRAM ¡ CONTROLLER ¡ NIOS ¡ INTERFACE ¡ RAY ¡FSM ¡ SDRAM ¡ KEYBOARD ¡ CFI ¡FLASH ¡ DE2WM8731 ¡

INTERRUPT ¡

System ¡ Overview ¡

MEMORY ¡

SKY ¡ GENERATION ¡ TEXTURE ¡ GENERATION ¡ TEXTURE ¡ ROM ¡ FIFO ¡

VGA ¡RASTER ¡ MONITOR ¡

PLL ¡

CLOCK ¡50 ¡MHz ¡ CLOCK ¡25 ¡MHz ¡ SDRAM ¡CLOCK ¡ CLOCK ¡50 ¡MHz ¡ CLOCK ¡25 ¡MHz ¡ SDRAM ¡CLOCK ¡(50 ¡MHz) ¡ ASYNCHRONOUS ¡CLOCK ¡ LEGEND ¡

SRAM ¡

slide-5
SLIDE 5

SoIware ¡Overview ¡

  • Keeps ¡track ¡of ¡player ¡posi-on ¡

– Local ¡copy ¡of ¡world ¡map ¡ – Polls ¡keyboard ¡and ¡updates ¡player ¡direc-on ¡/posi-on ¡

  • Keeps ¡track ¡of ¡cas-ng ¡rays ¡from ¡player’s ¡FOV ¡

– Calculates ¡and ¡stores ¡angle ¡measurements ¡ – Passes ¡individual ¡rays ¡and ¡player ¡posi-on ¡to ¡hardware ¡

  • Generates ¡Music ¡

– Keeps ¡track ¡of ¡sound ¡genera-on ¡through ¡interrupts ¡ – Fetches ¡new ¡samples ¡from ¡flash ¡memory ¡

slide-6
SLIDE 6

Hardware ¡Overview ¡

  • Two ¡main ¡clock ¡domains: ¡Nios ¡components ¡(50 ¡

MHz), ¡VGA ¡Components ¡(25 ¡MHz) ¡ ¡

  • Raycas-ng ¡accelera-on ¡calculates ¡ray ¡extension ¡

loop ¡and ¡generates ¡intermediate ¡variables ¡such ¡ as ¡wall ¡heights ¡

  • Memory ¡buffer ¡for ¡intermediate ¡variables ¡

protected ¡by ¡dual ¡clock ¡FIFO ¡

  • Separate ¡wall ¡texture, ¡floor ¡texture, ¡and ¡sky ¡

components ¡generate ¡pixel ¡calcula-ons ¡on ¡VGA ¡

  • mings ¡
slide-7
SLIDE 7

Ray ¡Cas-ng ¡in ¡a ¡Nutshell ¡

  • We ¡cast ¡rays ¡….obviously! ¡
  • Based ¡on ¡perspec-ve, ¡farther ¡walls ¡appear ¡

smaller…more ¡precisely, ¡ ¡column ¡height ¡= ¡inverse ¡ distance ¡

  • 2-­‑D ¡map ¡layout, ¡based ¡on ¡a ¡matrix, ¡thus ¡all ¡walls ¡

must ¡be ¡square ¡(can ¡be ¡diagonal ¡in ¡more ¡ advanced ¡ray ¡casters) ¡

  • So, ¡we ¡cast ¡rays ¡to ¡find ¡wall ¡on ¡2-­‑D ¡map, ¡and ¡

used ¡the ¡distance ¡to ¡calculate ¡the ¡perceived ¡ column ¡height ¡

slide-8
SLIDE 8

How ¡to ¡find ¡walls ¡

¡ ¡

Lode ¡Vandevenne, ¡Lode’s ¡Computer ¡Graphics ¡Tutorial, ¡ hkp://lodev.org/cgtutor/raycas-ng.html, ¡2007 ¡ ¡

slide-9
SLIDE 9

DDA ¡

¡ ¡

Lode ¡Vandevenne, ¡Lode’s ¡Computer ¡Graphics ¡Tutorial, ¡ hkp://lodev.org/cgtutor/raycas-ng.html, ¡2007 ¡ ¡

  • Modified ¡Breshenham’s ¡
  • Covers ¡ALL ¡Walls ¡
  • Used ¡in ¡LodeV’s ¡

soIware ¡template ¡

  • FAST ¡and ¡never ¡misses ¡a ¡

wall ¡

  • Seems ¡ideal…right?? ¡
slide-10
SLIDE 10

LoopBack ¡

  • Because ¡hops ¡in ¡DDA ¡are ¡quan-zed, ¡it ¡can ¡be ¡

prone ¡to ¡ugly, ¡erra-c, ¡errors ¡if ¡not ¡enough ¡ precision ¡is ¡used ¡(such ¡as ¡fixed ¡point ¡soIware) ¡

  • A ¡happy ¡medium ¡is ¡to ¡employ ¡a ¡loopback, ¡in ¡

which ¡edges ¡are ¡refined ¡aIer ¡itera-on. ¡ ¡ ¡

  • The ¡ar-fact ¡from ¡missing ¡a ¡wall ¡is ¡much ¡more ¡

predictable ¡and ¡less ¡ugly ¡than ¡those ¡of ¡DDA, ¡and ¡ rest ¡of ¡the ¡wall ¡is ¡smooth ¡as ¡with ¡DDA. ¡ ¡Slower, ¡ but ¡more ¡robust ¡= ¡less ¡risky ¡op-on ¡for ¡our ¡ project ¡ ¡

slide-11
SLIDE 11

Ray ¡FSM ¡

Mo-va-on: ¡Cas-ng ¡Rays ¡is ¡an ¡itera-ve ¡procedure… can ¡be ¡very ¡slow ¡as ¡men-oned ¡ ¡ To ¡get ¡across ¡a ¡32 ¡X ¡32 ¡map ¡using ¡1/32 ¡of ¡a ¡square ¡ increments, ¡can ¡be ¡as ¡large ¡as…. ¡ 32 ¡X ¡32 ¡X ¡sqrt(2) ¡= ¡1500 ¡itera-ons ¡per ¡column ¡ ¡  1500 ¡X ¡640 ¡= ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡almost ¡1 ¡million ¡itera-ons ¡per ¡frame! ¡

slide-12
SLIDE 12

Ray ¡FSM ¡(con-nued) ¡

  • Loops ¡in ¡soIware ¡carry ¡large ¡overhead ¡+ ¡serial ¡

instruc-ons ¡within ¡loop ¡

  • Why ¡not ¡increment ¡at ¡50 ¡MHz ¡ ¡-­‑-­‑> ¡need ¡

hardware ¡

  • Share ¡burden ¡between ¡hardware ¡and ¡

soIware ¡= ¡efficient ¡pipelining ¡

slide-13
SLIDE 13

RAY ¡FSM ¡

Output ¡Ray ¡Cas-ng ¡Parameters ¡ Output ¡Column ¡Address ¡ ¡ (Same ¡as ¡input, ¡latched) ¡ Ver-cal ¡Blank ¡Out ¡ ¡ WRREQ ¡ 256-­‑bit ¡ FIFO ¡data ¡ WRFULL ¡ Ver-cal ¡Blank ¡In ¡

FIFO ¡Interface ¡ VGA ¡Controller ¡Interface ¡

Input ¡Ray ¡Cas-ng ¡Parameters ¡ Input ¡Column ¡Address ¡ Output ¡Column ¡Address ¡

NIOS ¡II ¡ Avalon ¡Interface ¡

Control ¡Signal ¡ Ready ¡ CLK ¡(50 ¡MHz) ¡

Clk ¡

slide-14
SLIDE 14

READY ¡STATE ¡

  • ­‑-­‑ASSERTS ¡READY ¡

SIGNAL ¡HIGH ¡FOR ¡ SOFTWARE ¡

  • ­‑-­‑READY ¡= ¡‘1’ ¡
  • ­‑-­‑LOOP ¡

BACKWARD ¡

  • ­‑-­‑EDGE ¡

REFINE ¡ ADDITIONAL ¡ CALCULATIONS ¡ PERFORM ¡ INTEGER ¡ LONG ¡ DIVISION ¡ INITIALIZE ¡ DIVISION ¡ VALUES ¡ INCREMENT ¡ RAYS ¡BY ¡1 ¡ INCREMENT ¡ WAIT ¡STATE ¡ CHECK ¡IF ¡FIFO ¡ IS ¡FULL ¡ CHECK ¡IF ¡ LAST ¡ COLUMN ¡ON ¡ SCREEN ¡ WAIT ¡FOR ¡ VERTICAL ¡ BLANK ¡ SIGNAL ¡

Transi6on: ¡Rising ¡Edge ¡of ¡ Control ¡Signal ¡from ¡ SoIware ¡ Ac6on: ¡Latch ¡Inputs ¡from ¡ soIware ¡ ¡ Transi6on: ¡when ¡wall ¡is ¡ ¡ hit ¡(ROM ¡output ¡is ¡not ¡zero) ¡ Ac6on: ¡Nothing ¡ ¡ Transi6on: ¡ Always ¡ Ac6on: ¡ Nothing ¡ Transi6on: ¡when ¡ no ¡longer ¡on ¡wall ¡ Ac6on: ¡Nothing ¡ Transi6on: ¡Always ¡ Ac6on: ¡Nothing ¡ Transi6on: ¡Always ¡ Ac6on: ¡Nothing ¡ Transi6on: ¡AIer ¡32 ¡cycles ¡ ¡(32 ¡bit ¡integer ¡division) ¡ Ac6on: ¡Nothing ¡ Transi6on: ¡FIFO ¡is ¡not ¡full ¡ Ac6on: ¡Nothing ¡ Transi6on: ¡Last ¡ Column? ¡= ¡true ¡ Ac6on: ¡Nothing ¡ Transi6on: ¡Always ¡ Ac6on: ¡Nothing ¡

RETURN ¡ TO ¡READY ¡ STATE ¡

  • ­‑-­‑COMBINATIONAL ¡

PROCESS, ¡

  • ­‑-­‑FINALLY ¡RECEIVES ¡ALL ¡

STABLE ¡INPUTS ¡

  • ­‑-­‑EXECUTES ¡DURING ¡

DIVISION ¡STATES ¡

Transi6on: ¡Last ¡Column? ¡= ¡false ¡ Ac6on: ¡WRREQ ¡= ¡‘1’ ¡(to ¡FIFO) ¡ ¡ ¡ Transi6on: ¡V_BLANK ¡=‘1’ ¡ ¡ (from ¡VGA) ¡ Ac6on: ¡ ¡WRREQ ¡= ¡‘1’ ¡ ¡ (to ¡FIFO) ¡ ¡

slide-15
SLIDE 15

Frame ¡Sync ¡

  • Edwards ¡wanted ¡Frame ¡Sync, ¡so ¡naturally ¡we ¡

put ¡it ¡in… ¡

  • David ¡wanted ¡An--­‑Aliasing, ¡so ¡naturally ¡we ¡

leI ¡it ¡out… ¡ ¡

slide-16
SLIDE 16

Why ¡Frame ¡Sync ¡was ¡annoying ¡

  • Not ¡to ¡big ¡of ¡a ¡deal…just ¡double ¡memories, ¡

have ¡soIware ¡wait ¡on ¡V-­‑blank ¡(via ¡FSM), ¡and ¡ toggle ¡memories ¡on ¡V-­‑blank… ¡so ¡why ¡is ¡it ¡ hard? ¡

  • 224 ¡bits ¡of ¡parameters ¡per ¡column ¡X ¡640 ¡

columns, ¡naturally ¡lends ¡itself ¡to ¡256 ¡bits ¡of ¡ parameters ¡and ¡1024 ¡addresses… ¡

  • But ¡this ¡is ¡too ¡big ¡when ¡we ¡double ¡it!! ¡

¡ ¡

slide-17
SLIDE 17

Memory ¡

  • Two ¡Solu-ons: ¡Cut ¡bits ¡or ¡cut ¡addresses ¡
  • Cut ¡down ¡bits ¡to ¡192, ¡and ¡splice ¡a ¡128 ¡bit ¡by ¡1024 ¡

memory, ¡with ¡a ¡64 ¡bit ¡by ¡1024 ¡memory. ¡ ¡Requires ¡96 ¡ M4K ¡blocks ¡according ¡to ¡Megafunc-on ¡Wizard. ¡

  • Use ¡a ¡full ¡256 ¡bits, ¡but ¡have ¡a ¡memory ¡with ¡512 ¡

addresses ¡and ¡a ¡memory ¡with ¡128 ¡addresses. ¡ ¡Requires ¡ 74 ¡M4K ¡blocks ¡according ¡to ¡Megafunc-on ¡Wizard. ¡ ¡

  • We ¡used ¡second ¡scheme, ¡to ¡preserve ¡memory ¡and ¡bits ¡

(help ¡image ¡more), ¡however, ¡switching ¡addresses ¡lead ¡ to ¡a ¡strange ¡ugly ¡line ¡where ¡switch ¡was. ¡ ¡We ¡fix ¡this ¡by ¡ using ¡memory ¡addressing ¡scheme ¡on ¡the ¡next ¡page ¡

slide-18
SLIDE 18

¡ ¡

slide-19
SLIDE 19

MEMORY ¡INTERFACE ¡

TexGen ¡Interface ¡ FIFO ¡Interface ¡

RDREQ ¡ CLK ¡(25 ¡MHz) ¡ Output ¡Ray ¡Cas-ng ¡Parameters ¡ Output ¡Column ¡Address ¡ ¡ (Same ¡as ¡input, ¡latched) ¡ Ver-cal ¡Blank ¡Out ¡ ¡ RDEMPTY ¡ D ¡Flip-­‑ Flop ¡ To ¡ FIFO ¡ 256 ¡bit ¡ ¡ Data ¡from ¡ ¡ FIFO ¡ ¡ WREN ¡ Output ¡Ray ¡Cas-ng ¡Parameters ¡

Clk ¡ VGA ¡Interface ¡

drawStart ¡ drawMid ¡ drawEnd ¡ Column ¡ WRAddress ¡ RDAddress ¡ WREN ¡

slide-20
SLIDE 20

FIFO ¡

Mo-va-on: ¡ ¡System ¡crashes, ¡seemed ¡to ¡be ¡result ¡of ¡ corrupted ¡M4K ¡ ¡memory. ¡ ¡M4K ¡was ¡interac-ng ¡with ¡ two ¡clocked ¡domains, ¡read ¡addresses ¡and ¡outputs ¡ went ¡to ¡25 ¡MHz ¡domain, ¡writes ¡came ¡from ¡50 ¡MHz ¡ domain ¡(writes ¡come ¡from ¡FSM) ¡ ¡ Solu-on: ¡Make ¡M4K ¡run ¡on ¡25 ¡MHz, ¡add ¡FIFO ¡to ¡ allow ¡Ray ¡FSM ¡to ¡write ¡to ¡M4K ¡Ram. ¡ ¡Column ¡ addresses ¡(and ¡blank ¡signal), ¡appended ¡to ¡data, ¡ M4K ¡constantly ¡reads ¡from ¡FIFO ¡and ¡writes ¡to ¡ address ¡encapsulated ¡within ¡data ¡

slide-21
SLIDE 21

VGA ¡RASTER ¡

RGB ¡Generator ¡ VGA ¡Display ¡

VGA_B ¡ CLK ¡(25 ¡MHz) ¡

Clk ¡

VGA_G ¡ VGA_R ¡ VGA_VS ¡ VGA_HS ¡ VGA_CLK ¡ VGA_SYNC ¡ VGA_BLANK_SIG ¡ VGA_BLANK ¡

Ctrl ¡

Reset ¡ Sky ¡Color ¡ Texture ¡Color ¡ Draw ¡End ¡ Draw ¡Middle ¡ Draw ¡Start ¡ Wall ¡Posi-on ¡ Side ¡ Texture ¡Number ¡

Row ¡& ¡Column ¡ Iterator ¡

Current ¡Row ¡ Current ¡Column ¡

VGA ¡Rastering ¡

slide-22
SLIDE 22

Counter ¡ Row ¡Iterator ¡ Column ¡Iterator ¡ VGA ¡Color ¡ RGB ¡Generator ¡ VGA ¡Signals ¡ Generator ¡ Mul-plexer ¡

Texture ¡Color ¡ Sky ¡Color ¡ Horizontal ¡ Ver-cal ¡ Current ¡Row ¡ Current ¡Column ¡ Current ¡Row ¡ Wall ¡Posi-on ¡ vga_blank ¡ Reset ¡ VGA ¡Output ¡

VGA ¡Rastering ¡

slide-23
SLIDE 23

Texture ¡Genera-on ¡

Wall ¡ Floor ¡ Mux ¡ Output ¡

VGA ¡RASTER ¡

Current ¡Row ¡

MEMORY ¡

Current ¡Column ¡

TEXTURE ¡ ROM ¡

Texture ¡Color ¡ Pixel ¡Address ¡ Texture ¡ Genera6on ¡ Combina6onal ¡ Logic ¡

slide-24
SLIDE 24

Cri-cal ¡Timing ¡

slide-25
SLIDE 25

Sky ¡generator ¡block ¡diagram

NIOS ¡II ¡

AVALON ¡BUS ¡

SDRAM ¡ CONTROLLER ¡

SDRAM ¡ SRAM ¡

MEMORY ¡

SKY ¡ GENERATION ¡

VGA ¡RASTER ¡

slide-26
SLIDE 26

Sky ¡Genera-on

cs ¡ addr ¡ write ¡data ¡ byte_en ¡ SRAM ¡ read ¡data ¡ angle ¡data ¡

SRAM ¡Interface ¡ Block ¡RAM ¡Interface ¡

row ¡informa-on ¡ Avalon ¡bus ¡

VGA ¡Interface ¡

Sky ¡data ¡ r/w ¡

Row ¡<< ¡9 ¡+ ¡ angle>>1

slide-27
SLIDE 27

Sky ¡Genera-on ¡Timing

  • There ¡is ¡no ¡clock ¡in ¡SRAM, ¡it ¡is ¡controlled ¡by ¡address ¡ ¡
  • Maximum ¡Data ¡Delay ¡is ¡15 ¡ns, ¡whether ¡the ¡clock ¡is ¡40ns ¡or ¡

20ns ¡

slide-28
SLIDE 28

Asynchronous ¡SRAM ¡interface

slide-29
SLIDE 29

SDRAM ¡architecture

slide-30
SLIDE 30

SDRAM ¡controller ¡diagram

  • The ¡SOPC ¡generated ¡controller ¡would ¡transmit ¡data ¡to ¡DRAM ¡

according ¡FSM

slide-31
SLIDE 31

SDRAM ¡interface ¡

  • AIer ¡SOPC ¡genera-ng ¡SDRAM ¡controller, ¡we ¡integrated ¡the ¡

controller ¡according ¡this ¡diagram ¡

  • We ¡also ¡need ¡to ¡generate ¡PLL ¡for ¡proper ¡opera-on ¡
  • To ¡generate ¡a ¡DRAM ¡clock ¡ahead ¡by ¡3 ¡ns ¡ ¡
slide-32
SLIDE 32

Keyboard

NIOS ¡II ¡

AVALON ¡BUS ¡

KEYBOARD ¡ CONTROLLER ¡ KEYBOARD ¡

PS2 ¡interface

slide-33
SLIDE 33

PS2 ¡interface

  • Keyboard ¡controller ¡from ¡Lab3 ¡
  • Serial ¡interface ¡with ¡CK, ¡DAT ¡
  • Data ¡would ¡be ¡put ¡to ¡register ¡for ¡Nios ¡polling ¡ ¡
slide-34
SLIDE 34

Data_request

slide-35
SLIDE 35

Avalon_bus

MUSIC ¡ ¡ CONTROLLER ¡

AUD ¡control ¡signals ¡ Data_to_music ¡(16 ¡bit) ¡ Data_request ¡

AUD ¡Interface ¡

Address ¡ Readdata ¡ Writedata ¡(8 ¡bit) ¡

NIOS ¡II ¡ Avalon ¡Interface ¡

Control ¡Signals ¡ ¡ (chipselect, ¡read/write) ¡ irq ¡ CLK ¡(50 ¡MHz) ¡

Clk ¡

Reset_n ¡

NIOS ¡II ¡ CPU ¡

Audio_clock ¡

Tri-­‑state ¡ Bridge ¡

Address ¡(22bit) ¡ Read/Writedata ¡(8 ¡bit) ¡ Control ¡Signals ¡ ¡

4M ¡ CFI ¡Flash ¡ (Avalon ¡ MM ¡slave) ¡

Memory ¡Mapping

**Sampled (8-­‑bit ¡width 22kHz ¡sam rate) ¡ Loaded ¡by ¡ Flash ¡progr in ¡advance

slide-36
SLIDE 36

IDLE ¡ WAITING ¡

As ¡the ¡sound ¡controller ¡can ¡ see:

Wri-ng ¡to ¡sound_controller ¡ happens ¡(write&chipselect); ¡ Clear ¡the ¡irq Data_request ¡comes ¡from ¡ wm8731, ¡set ¡the ¡irq ¡and ¡ starts ¡wai-ng ¡for ¡the ¡data Keeps ¡idle; ¡wai-ng ¡ ¡ for ¡data_request Have ¡set ¡irq ¡but ¡wait ¡ to ¡ensure ¡the ¡write ¡ really ¡happens

Other ¡issues: ¡Why ¡Flash? ¡How ¡about ¡Buffering? ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Choose ¡the ¡Sampling ¡frequency ¡

slide-37
SLIDE 37

Key ¡Difficul-es ¡

  • Raycas-ng ¡Speed ¡
  • SRAM ¡Clock ¡Domain ¡
  • SDRAM ¡Clock ¡Domain ¡
  • M4K ¡Clock ¡Domain ¡
  • Audio ¡Interrupts ¡
  • Memory ¡Division ¡Screen ¡Glitches ¡
  • Debugging ¡with ¡Unreliable ¡Peripheral ¡
slide-38
SLIDE 38

Lessons ¡Learned ¡

  • Pay ¡aken-on ¡to ¡Clock ¡Domains ¡(Eddy) ¡
  • Hardware ¡Debugging ¡is ¡as ¡valuable ¡as ¡

soIware ¡debugging ¡(Minyun ¡and ¡Wei) ¡

  • ModelSim ¡is ¡invaluable ¡(Yiming) ¡
  • No ¡Prin{’s ¡ ¡in ¡interrupts ¡(Minyun) ¡
  • Persistance ¡is ¡key; ¡You ¡can ¡accomplish ¡

anything ¡if ¡you ¡have ¡the ¡pa-ence ¡to ¡learn ¡it. ¡ (Alden) ¡ ¡