L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST...
Transcript of L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST...
![Page 1: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/1.jpg)
18-545: ADVANCED DIGITAL DESIGN PROJECT
FALL 2011
BILL NACE
L1: PAST PROJECTS
![Page 2: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/2.jpg)
18-545: FALL 2011
Administrative Stuff
Teams are / should be formed
Project Ideas due Wednesday
Lab1 due WednesdayGetting started
Project Proposal Presentations on Monday, 10 SepYoutube presentations
2
![Page 3: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/3.jpg)
18-545: FALL 2011
Project Proposal
What do you plan to do?Game description and how it covers the requirements
Graphics, sound, user input, multi-player, scoring, funHardware / Software plan
Architecture, block diagramPeripherals?Software functions
Description of major tasks, who is doing them
3
![Page 4: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/4.jpg)
18-545: FALL 2011
Proposal (2)
ScheduleWho’s doing what, whenWhen each major task will be completeMilestones for each person
ResourcesWhat outside resources you needWhat you’ll use them forPointers to the resources
I understand this is all very preliminary and won’t hold you to the detailsMajor deviations will require discussions with me and my approval
4
![Page 5: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/5.jpg)
18-545: FALL 2011
Lab machines - your machines
You have accounts on machines in the lab
You should be able to sudo using your own passwordDON'T DO ANYTHING STUPIDIf you break/compromise the machine, it will be wiped and reinstalledDon't change root password or add any root ssh keysDon't add accounts without asking me/gripe
Install software at /usr/local, /opt or /homeDon't overwrite any base installed software
5
![Page 6: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/6.jpg)
18-545: FALL 2011
Today: Previous Projects
This is the 7th iteration of this course
First 2 years were taught by Prof Ken MaiI’m copying his descriptions and advice here
2008 - 2011 project descriptions are by me
All previous final reports are on webpage
6
![Page 7: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/7.jpg)
VR Pacman
3D PacmanOpenGL on workstationBoard handled game
VR helmet displayViewpoint trackingNot stereoscopic
Full-body swivel controlHacked mouse + deskchair
![Page 8: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/8.jpg)
Every Extend
Every Extend cloneSelf-contained
Playstation 2 controllerParallel port interface
Most complete game of 06High scoreGame modesBosses
![Page 9: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/9.jpg)
Bomberman
Bomberman clonePorted SDL lib to boardHad SDL Bomberman implementationMoved performance critical portions of SDL library to hardware
Sega Genesis controllersSimple interface
SDL = Simple DirectMedia Layer, a cross-platform open-source multimedia C library
![Page 10: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/10.jpg)
NES (06, 07)
NES cloneBit-for-bit full hardware implementationVery ambitious
Much of the system workingPicture processorController interfaceToy application
Bitten by …VerificationUnit interfacingTeam dynamics
![Page 11: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/11.jpg)
Graphics Processor
OpenGL GPUGPU on boardApplication sends OpenGL calls to board via ethernet
Rendered a colored triangle
Bitten by …Board capacityTimeAsking for help too lateInexperience
InstructionBRAM Fetch Unit
InstructionDecoder
CoordinateTransformation
Pipeline
TriangleRasterization
Pipeline
OpenGLsoftware
code
Frame bufferBRAM
Ethernet
VGA
![Page 12: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/12.jpg)
Physics Processor
Hardware physics processorSimilar to Ageia designBoard tracks objectsWorkstation handles game
PPU workingOnly toy applicationSome issues with fitting design on board
Bitten by …Team dynamicsTeam dynamicsTeam dynamics
![Page 13: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/13.jpg)
Networked Tetris
Multi-player Tetris2 players/boardNetworked boardsMost of game in hardware
Working gameScoreNetworking
Bitten by …Not too ambitious
![Page 14: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/14.jpg)
Quake
Port of 1996 PC game Quake3D first person shooterOpen-sourced in 1999
Running entirely on FPGAFull input, sound, video, and networking supportHardware FPU
Networked 3 boards + PC together in public demo
![Page 15: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/15.jpg)
Guitar Hero
Port of Guitar Hero console game
Used open-source Frets on Fire for starting code base
Guitar (PS2 controller) interfaced through parallel port
Most issues in synching sound, video, and controller
Limited song libraryDid not automate song input
![Page 16: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/16.jpg)
2008 Projects
Descent (i.e. Vertigo)
NanoSeige
“Xilroids” i.e. Asteroids with a Wii
NES
![Page 17: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/17.jpg)
Descent
3D first-person shooter6 degree-of-freedom playReleased on 1995Source released in 1997
Ported PhysicsFS and SDL librariesNetworking and music never completedOtherwise complete game
Success due to:Reading Pentium Chronicles
![Page 18: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/18.jpg)
NanoSeige
Designed own gameWanted massively parallel hardware accelerated gameSomething of an abstract real-time strategy game
Worked hard all semester, declared victory with whatever they had built
Done in byteamworkdidn’t follow any advice
![Page 19: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/19.jpg)
XilRoids
Initially tried to build “Maelstrom” a 1993 clone of Asteroids
Ran into difficulty, decided to reset
Designed their own asteroids variantUsed Wiimote for user input
Done in byDecision to reset
![Page 20: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/20.jpg)
NES (2008)
NES CloneFull hardware implementation
Controller peripherals“Virtual” cartridge interface
Used ROM images of Bomberman, Tetris
Sound limited to single channel
Successful becauseWorked to personal strengthsRelentless debugging
![Page 21: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/21.jpg)
2009 Projects
Duck Hunt with WiiMote
GameBoy
MultiWilliams
OpenGL
Quake II
SSD research project (times 2)
Groups had choice of FPGA platform for first timeVertex 2 Pro, Vertex 5-LX, Vertex 5-FX
![Page 22: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/22.jpg)
Duck Hunt w/WiiMote
Simple “point-n-shoot” gameUsing WiiMote, initially via straight connection“Settled” for connect via separate laptop running java program to convert
Programmed game “from scratch” as a clone
Moderately successfulFlexible processStayed with Vertex 2 Pro board
![Page 23: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/23.jpg)
GameBoy
8-bit handheld console from very late ‘80s
Original attempt was for GB Color with link cable for multi-player
Settled for original GB
Incomplete DMA implementation led to graphic corruption
No sound, link cable
![Page 24: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/24.jpg)
MultiWilliams
Williams was an arcade manufacturer in ‘80s
Defender, Joust, Stargate, Robotron, others
MultiWilliams emulates all 4But very different architecture among games
Built really nice input platform
Vertex 2 Pro
Done in by:Didn’t face complexity
![Page 25: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/25.jpg)
OpenGL
Another attempt to build OpenGL render pipeline
Fixed-point version due to FPGA fabric limitations1) Fixed-function pipeline2) custom-designed VLIW processor
custom micro-assembler
Done in by:Switched platforms mid-stream to Vertex-5
![Page 26: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/26.jpg)
Quake II
Quake II is a FPS from 97Code is open sourced
Commercial Linux distro on FPGA
No sound
Vector coprocessor
Done in by:Switching platform to Vertex-5
![Page 27: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/27.jpg)
SSD Research Projects
Build a SSD controller for DIMM flash chipsInclude AES encryption
Two teams attempted
Got flash DIMM built
Got some communication via PCIE to host computer
Never got the rest put together
Vertex 5-LX boards
Done in by:Team issuesWillingness to be behind schedule
![Page 28: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/28.jpg)
18-545: FALL 2011
2010 Projects
OpenGL GPU (take 3!)
Super NES
SSD (again)
Virtex Squared
XilDoom
Groups had choice of platform (V2Pro, V5LX, V5FX) and were given minimal "hand-holding" with the toolchain
28
![Page 29: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/29.jpg)
18-545: FALL 2011
OpenGL Accelerator
29
Hardware pipelined
Input was pre-compiled sequence of OpenGL commands in a file on the CF card
non-interactive
Moderate framerate at low triangle count
No z-buffer
Done in by:
Took too long to make decisions
![Page 30: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/30.jpg)
Super NES
16-bit console from early 90s
Hunted down CPU Verilog from the company that originally manufactured it
Cool! Very legal
Done in byIntegration! 4 individual chip descriptions. Didn't work together.
Testing strategy relied on integrated system, so no proof the chips worked individually
![Page 31: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/31.jpg)
SSD (Again)
Didn't work'nuff said
Done in byTeamworkTeamworkRelying on past work
![Page 32: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/32.jpg)
18-545: FALL 2011
Ver tex Squared
Designed their own ARM-like CPUIntegrated with 18-447Multi-bus, not particularly fast
Then got a small musical rhythm game running on it
Success due to:Lots of hard workSmart use of tools
32
![Page 33: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/33.jpg)
XilDoom
Quintessential FPS
1993! More popular than Windows '95
Open sourced in 97Used Chocolate Doom
Reasonably successfulNo networking or sound
![Page 34: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/34.jpg)
18-545: FALL 2011
2011 Projects
Duck Hunt
Haxorus
Sidekick
Commodore 64
34
![Page 35: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/35.jpg)
Duck Hunt
Yet another version of the classic gameShoot at ducks as they fly in somewhat random patterns
Custom MIPS CPU
Custom Unix-like kernel
Custom Duck Hunt source (C)
Done in by:IntegrationTeam dynamics -- one member went AWOL. Nobody noticedDidn’t hold each other accountable for missing deadlines
![Page 36: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/36.jpg)
Haxorus
Music visualizerInput from iPod, output to speakerRender shapes to video
Kinect to detect control gesturesChange colors, shapes, etc
Reasons for SuccessNot entirely certain, as I didn’t really see it comingSomehow overcame lots of team dynamics issues
HTTP://WWW.YOUTUBE.COM/WATCH?V=RR-UGS8EPH0&FEATURE=YOUTU.BE
![Page 37: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/37.jpg)
At start: Image cross-correlation algorithm for Lunar XMatch images to lunar maps
At end: PCIE peripheral for image processingMove data quickly to FPGA for acceleration
Done in byRelying on grad student code
Saved byTimely pivot to build something useful
Sidekick
![Page 38: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/38.jpg)
Commodore 64
Creative “4th path” to building a video game -- build the microcomputerCommodore 64 is the most popular microcomputer in history
Wrote each of the 3 main chips in Verilog/VHDL6510 CPU, Vic II video unit, sound chip (Yes! Sound!!)
Got games running: Galaxian, Mario’s Brewery, Centipede, Pac-Man (sort of), Frogger (sort of), BASIC interpreter
Reasons for successDid everything right
![Page 39: L1: PAST PROJECTS - Carnegie Mellon Universityece545/F12/slides/L01_PastProjects.pdf · L1: PAST PROJECTS. 18-545: FALL 2011 ... OpenGL GPU GPU on board ... Dig through project reports](https://reader034.fdocuments.in/reader034/viewer/2022042800/5a7032a27f8b9ac0538bc344/html5/thumbnails/39.jpg)
18-545: FALL 2011
Project Choice
Choose wiselyResearch available assets (code, manuals, schematics, etc)Dig through project reports from past projects
Some are well-written and will provide advice
39