views:

358

answers:

8

If computer science is about algorithm development and therefore not limited to the imaginations of Processor vendors, but to the realm of all that is practically computable. Then shouldn't a FPGA, which is almost ideally suited for studying cellular automata, be considered a valid platform upon which to study computer science. One particular area of interest, where I feel current curriculums are weak is parallelism and it's integration into programming languages. I think compiler design could benefit from a curriculum that let students deal with the explicit parallelism of FPGAs.

+2  A: 

I honestly think that it would be useful, but I realize that this is a hard question to answer. The question really isn't whether or not a FPGA course would be valuable (it clearly would), but would it be valuable enough to drop some other course from the curriculum and replace it with this? My suspicion is that most curriculums would not be able to free up enough time to cover it as anything other than an afterthought.

jsight
Or it perhaps to add it as a Post-Grad level course for those who which to investigate it in its entirity.
AllenG
Definitely sounds like post-grad material to me. Although it clearly should be explored, at least superficially, in the pre-grad curriculim.
CptAJ
I think one of the benefits to adding it to a CS program would be that it shouldn't be limited to a single class, but touch on through out the various classes. Automata, Algorthms, architecture, and etc. This would require a more diverse approach to teaching these classes, which would not limit them to a Von-Neuman based concepts.
NoMoreZealots
It sure would be interesting to see a whole CS sequence done an parallel languages and using parallel machines (including FPGAs and GPUs).
BCS
+4  A: 

As a CS student, I would LOVE an FPGA course. However, everyone is set in their ways and do not want to modify the curriculum. Its pretty heavy in theory and they think that microcontrollers and FPGAs require too much knowledge of electricity, etc to be of use to a CS student.

Because of this, I'm taking an electrical engineering minor.

samoz
Computer science is weighed down with Dogma and large egos. I am a CS graduate, I had a professor tell me something wasn't a computer unless it had a keyboard and a monitor. I got a 90 on a test because I refused to give him an answer I knew was wrong. I'm sure that a modern CS program wouldn't make that same mistake, but they will make mistakes based on dogma from the past. Microcontroller's and FPGAs are computing machines and valid platforms to considered for Computer Science both in theory and practice.
NoMoreZealots
as you alluded to the real issue is that you can't just add FPGA's 101, you really need a low level background in sequential/combinatorial logic systems and computer architecture/organization. In a computer engineering program this background would often amount to 3 or 4 courses on its own.
Mark
A: 

Good lord no. I did an FPGA course in my final year, and it meant that I had to sit around for hours and hours while my code compiled. The work involved for a student to get simple code onto a board is horrendous. To this day, the words "place and route" send a shiver up my spine.

Paul Biggar
It's not as bad today, I've been able to do various VGA type designs using a relatively a slow laptop. I was doing Bresham's Lines and character generator based Text for displaying info. Things like parallel sorting algorthms don't take that long to compile. Compilation is definitely slower than say, C, but with the speeds of modern systems and tools, it's now practical for the types of problems that most classes cover. Plus doing a function sim is fast and would be good enough for most assignments. I woundn't expect a undergrad to be compiling a PCI controller for instance.
NoMoreZealots
@Pete Eddy: I was doing FIR and IIR filters in HandelC. The real problem was that there was so much baggage that we didn't learn anything.
Paul Biggar
I do think the tools could use work. A lot of work. But then again I feel the same way when ever I use several free software packages as well, such as the python tools I've used haven't felt quite "right." (And I fully admit, that the "feeling right" is complete subjective,so please don't take offense.) But honestly they weren't any harder to get used to than any other dev tool. It's kinda like using a integer based micro as opposed to a floating point server rack. Impulse C is a tool that allows CPU to FPGA co-design with partitioning control and is actually used in industry.
NoMoreZealots
And again, compile times get better as Processors speed up. It's not that bad on a modern machine. We have a PCI based design, and it takes a while, but the formal verification techniques are better than most software based ones. Once you get it to simulate correctely it usually works, so you're not compiling as much as you do in software if you follow good design practices. That alone is a good take away for a student computer scientist.
NoMoreZealots
+2  A: 

Offer it. Recomend it. Don't require it.

BCS
Well, maybe a hardcore FPGA class with labs shouldn't be required. But the concepts NEED to be discussed in lectures, and a the notion of both linear "pipeline" parallelism, and wide concurent parallelism are really necessary to prepare students for the architectures that are becoming predominant as we bump our heads against MHz limits and Moores law. This is required to advance the Computer Science disappline as a whole.
NoMoreZealots
@Pete: Yes those concepts need to be presented, but I'm not sure FPGSs are the tool to do it. --- That is unless you are putting together a "experimental" CS curriculum or are one of the schools that will never, financially or otherwise, be someone's only option (like MIT and friends).
BCS
The major problem with FPGA currently is the lack of CS influence, and a major problem with CS in the linear approach to programming is based on 50 year old concepts that typically are just rehashed and have different Jargon applied to them. Both of these situations impede advancement.
NoMoreZealots
+2  A: 

FPGAs are way cool. I have two questions:

  • What are the ideas of enduring value, that students will still work with 20 years after graduation?

  • What are you going to eliminate to make room for an FPGA course?

"Education is what is left when knowledge is gone."

Norman Ramsey
There is nothing that needs to be eliminated, the assumption you can do anything on a processor than you can't do on an FPGA is naive. However the opposite is not true. An FPGA can provide you the exact hardware needed to perform any task, you're not limited to bitsizes, or data formats. We've become so used to working within the constraints of our processors that we fail to see the BOX they impose upon us. An insertion sort becomes a order N operation in logic design. Merge sorts can be done faster than the data can be provided. What it needs is maturity, and language advancement ie CS.
NoMoreZealots
@Pete: Who said anything about FPGAs being limited. I'll say it again: they're great. But curricular revision is a zero-sum game. Any given department has only finitely many faculty. If you add a course on FPGAs, you have to drop a course somewhere else.
Norman Ramsey
The technologies aren't mutually exclusive. We merely teach programming as vehicle to perform computer science, but as Dijkstra said "Computer Science is no more about computers than Astronomy is about telescopes." We've envisioned data structures in a computer, and often tied implementations to the computer rather than the requirements of the data structues themself. As far as will FPGA knowledge be useful 20 years now, AMD has already built systems with a FPGA in a processor slot. IBM is planning integrating FPGA tech directly into the PowerPC. It's the future of computing.
NoMoreZealots
NoMoreZealots
We typically do computer science and shoehorn it into CPUs. As opposed to designing the machines to perform the computer science.Examples of where we did the opposite have shown significant benefits, Floating Point algorithms, Blitter Chips, Hardware graphics engines, DMA controllers, and etc.
NoMoreZealots
+1  A: 

As a recent graduate of Computer Engineering and having taken multiple embedded systems courses I feel that it would be extremely useful. It would be helpful in broadening the horizons of standard programming as well as help CS student with the most important aspect of embedded systems development which is efficiency. Managing memory is crucial and those aspects gained from an FPGA based course can carry over to desktop application development. I did not have to wait years for code to compile but "Place and Route" still isn't my favorite phrase haha. Dropping a course is hard for me to say because I am not a CS but CpE and do not know the exact curriculum. However, I am working on desktop applications at the moment and some skills I have gained in my FPGA courses have effected my work. There's my two cents. Enjoy

Place and route is SLOW, but it takes less time then it takes to compile an ADA design that one of my coworkers got stuck on! The dinasaurs of the 50 and 60 were replaced with Mainframes of the 70s, and then the Minis, and then the PC, and the PC is losing it some of it's market to the handhelds and the Video Console market. Email and the Web (or whatever replaces it) on an HD TV is inevidiable. The PC too will fade and give way to smaller computers, just like it's predecessors. Computer Engineering is a good field for the future. I think your skill set in more future proof than CS.
NoMoreZealots
+1  A: 

As a recent Computer Science graduate, I'd say FGPA's are more in the realm of Computer or Electrical Engineering. True, CS is about algorithms, but it is also about the theory of computing, data structures, artificial intelligence, etc., etc., etc. I think FGPA's are just too specific to be a required component. The concurrent programming class I took was at a much higher level, but I believe it gave a decent introduction to parallelism.

As it was, there was a bunch of upper year classes that I wished I could have taken but didn't have room for: quantum computing, compiler construction, real-time systems, etc. All of those would also be good candidates for inclusion into the core curriculum.

ScottR
FPGAs provide physically embodiement of an algorithm, this is an elegance unheard of in computer programming. i.e. An FPU is nothing more than a Data structure implemented in hardware. Neural Network Design lend themself better to FPGA than processors. Data structures get physical registers and algorithm is directly tied to the Data it operates on. Dijkstra would be overjoyed with elegance and the significance given to the formal verification takes on a FPGA design. Anything that a processor can do, can be implement using FPGA design techniques. That's how you design a processor.
NoMoreZealots
I agree. It's just more computer / electrical engineering, and requires knowledge of hardware that most computer science programs don't have, and don't want to have. I didn't go near any HDL in my program, as they tended to turn their noses at any 'implementation' details (for better or worse). It certainly wouldn't have any place in discussions about Turing Machines and automata theory.
ScottR
I was a CS major, and unfortunately when I took it digital design was taught using TTL logic on a circuit board. I got a higher grade in that class than 95% of the EEs who took it. You can actually make some of the "machines" talked about in automata theory in FPGA. The point is it is just as valid a platform as a processor. It's interesting to read Dijkstra when talks about how hardware design directly effected how they were implementing software, and in some cases it appeared he had input to the hardware design decisions.
NoMoreZealots
Actually one of the things that got me interested in this notion was the thought of a pipelined lexer/parser implemented as a Hardware/software codesign. State machines drive both and are related to automata, FSM are IDEAL for FPGA designs. Mealy/Moore machines are the basis of modern digital design.
NoMoreZealots
But you don't need modern digital design to understand state machines, or most things in CS. It might make things clearer for some who need a physical representation of what's being discussed, but I came from a faculty of math that laughed at the silly engineers that had to be physical with everything:)In general, I'm just going to have to disagree with you over the cost to switch, and the ease introducing hardware into programs where hardware is not emphasized.I can see you love your FPGAs, and your enthusiasm do make me wish I had more exposure to them in my one required hardware class.
ScottR
+1  A: 

Yes, FPGA design should be integrated into a CS curriculum in some form. At least as a lab in digital design or parallel computing class. Modern FPGAs are no longer a bunch of configurable logic gates. They are system on chip (SoC) with multi-core processors and rich set of peripherals. I see more and more engineers with CS degree and little hardware experience do embedded design on FPGA. To exemplify my point, look at the discussions in Embedded Solution section on Xilinx forum.

OutputLogic
Yeah, maybe that's what most people don't get. We completely replaced a processor based system with a FPGA design at my office. All filtering and processing being done in logic on a design that's more accurate, more advanced and faster than the system it replaced. We have another design that's incoprating a soft ARM core, and wrapping the perifrials around it using FPGA to get an exact match to the requirements.
NoMoreZealots