13-Year-Old, Nicholas Sharkey, Creates a RISC-V Core
riscv.org
riscv.org
This really feels like some here should work on themselves to see why they feel so personally threatened by the achievements of a 13 years old. Even with the help of his parents (which we have no indication of) this is a good inspiration for other younger of our community that feels some knowledge is out of their reach.
A different message than "obviously, this is a Smart Kid" would be "this achievement is within reach of kids who put the effort into it, and we should be supporting all kids to reach like this".
The piece had some bits in it were hitting the first message, rather than the second.
I will say I’m really happy I kept all my old projects. Looking back I actually wrote really good software, expect for my long since shed distaste for testing.
So many people drumming up - this young person did something that FOR HIS AGE is impressive
Who the @#$#$ cares
why is it on Hacker News?
It should benefit the people visting in HAcker News in some way
ain't none of us 10 and get inspired by a 13 year old doing something that FOR HIS AGE is impressive
*
Share something that helps people here or is TRULY IMPRESSIVE in the Field
I’m equally happy for all of them that they live in a day and age where it is possible for them to explore their hobbies to these great lengths.
Very much so. First computer has MS-DOS 5. Which boots and gives a blinking cursor to 'do something' with. This often entailed editing mem.sys and various .bat files to get a game working. Or the abstraction that was Word Perfect that was not WYSIWYG that content and layout are separate concepts, and yes, magazines usually had 10-50 pages of BASIC stuff to do 'cool stuff' with.
From my observation, the change happened with Windows. Not was was a GUI, things apart from batsock mainly 'just worked' (except when they didn't) and it was no longer necessary to be required to peer into the (albeit high level) bones of a computer.
And this was true before DOS, C64, Spectrum also offered somewhat hands-on experiences.
But... perhaps not so obviously in Windows-land, if I were giving a kid a computer I'd make sure it was Linux as the command line's not far away, and encourage use of it to get an implicit understanding of what's happening - again a somewhat higher level understanding than creating a RISC-V chip, but more-so than 'right click on the desktop to change wallpaper' - use mkdir to create a directory, understand repositories and how everything's a human-readable text file. Basic stuff with GNU tools, then a little scripting, perhaps some Python.
I didn't have anyone else to ask, didn't know about any computer clubs (and didn't think to ask). So I got very familiar with the built-in help. Spent hours looking through the help until I found the one I needed.
Didn't help that I started learning English only a year before, so had no idea what most of the help said anyway. I vividly recall spending a week figuring out how to loop indefinitely. Finally I got to "while". Was so pleased when it worked.
A bit later my buddy got a modem, and with that BBS access, so he downloaded snippets for me and programming articles, and things accelerated.
On the bright side, finding and reading documentation is now one of my strong points. Hanging on IRC I could usually help others within minutes with libraries I'd never even heard of, simply by diving into the documentation for a bit.
Before that I got most from magazines & books; my grandparents took me to fire sales (lot of magazines there) and 'rubbish sellers' (not sure of the english word), for instance, Phillips had a quarterly 'dump' sale under the football stadium; all kinds of electronics, books etc could be had there for next to nothing (money earned with strawberry picking in the summer went to those places). I bought scopes, ham radios etc and documentation there. And my father got me books that were damaged from work (mostly C, Pascal, later Clipper and other things).
I first discovered it after realizing I was serious confused by two programs with similar names in the middle of an IRC conversation in a FOSS-related channel. The mistake was so embarrassing according to my own standard, I knew both programs and I couldn't even believe I could confuse them, yet in the conversation I was totally blind to the mistake until someone started to question it. It was when I realized and accepted the inevitable. Interestingly, I don't remember feeling sad - I knew the same IRC channel had members who were younger than myself, yet they were able to discuss technical questions with me at the same level, if I was replaced by them, nothing of value in the FOSS community will be lost.
https://www.vlsisystemdesign.com/riscv-based-myth/
Github is here https://github.com/kuby1412/RISC-V-MYTH-Workshop
Lecture videos for the current semester are no longer public thanks to some lawsuit, but you can find videos from previous semesters on YouTube.
That's encouragement of one kid, to keep working and learning. But I think that publicly singling out one kid like that can be discouragement of kids around that one kid, if it's implied to them that they have less aptitude.
If there's one thing poor kids have, it's free time. I think it's actually relatively easy for a smart poor kid in the US to learn ~whatever they want; that was certainly my experience, and I think the structures that were available to me are available to basically any American kid today.
One thing to keep in mind is that poverty is strongly anticorrelated with intelligence - this is not PC, but the evidence is overwhelmingly clear - so it's easy to see that there aren't many poor kids doing stuff like this and (mistakenly) conclude that it's because they don't have the extrinsic opportunity, rather than that they lack the intrinsic means.
- A quiet space that the child can use to learn - The foundation of self-efficacy and value of learning one receives from educated role-models - Access to the internet and the materials to engage with the coursework
You'd be lucky to find a "poor kid" who has 30 minutes of safe time, fed and quiet.
Unless you are meaning "lower middle class" as poor kid - i.e simple household with no extreme resources. In that case I do agree with you that you can do a lot with a little if you are that lucky.
Parents supporting a child hobby because they understand its potential value cant be overstated. Being poor just doesnt give any latent interest a chance to develop. That's the key. NGOs try to bridge this gap but without the kids parents/siblings/community understanding the value of these things, its an upward slippery slope with far more risk.
When I was 13 years old, I learned some basic system administration and programming on the web. My knowledge allowed me to compile the Linux kernel with Con Kolivas's BFS patch applied, and I also found and fixed a bug in GNU coreutils. On the other hand, I was trying and failing to understand many basic concepts. At this time, I already wasted years of my life on bad programming books unsuitable for beginners before picking up some good ones, otherwise I should have learned basic programming at an earlier age. I was also trying to derive the Y combinator using the rules of α-conversion and β-reduction, but I never got the correct result. I was blowing up diodes with microcontrollers by failing to understand what a nonlinear IV curve is, and totally confused by the concept of frequency domain. I was only able to grasp these basic concepts in the next three to five years. By "understanding", I only mean to know "what they are", "what do they do", not "how to do calculation and math", so it was mostly just a matter of knowing some definitions, and there was nothing really to prevent me from understanding them when I was 13, but I still couldn't grasp them until years later.
What was the problem? No one in my entire family had an engineering background and no teacher in my school was able me anything about technology, computing or otherwise. My only guidance was the web, chiefly Google, Wikipedia, and bookstores. While they were successful at teaching me system administration or using free and open source software, but not very efficient at many other things - an easy concept which may take only 30 minutes of explanation can be intractable when you don't know where to look and what to read.
In hindsight, if there was anyone who was able to teach me things relevant to my interests, my life would take the same path, but at a much faster path and today I would probably working on something more interesting in computing. Alternatively, without broadband Internet access, I won't be here to post this comment today.
I would go one further: building a functional, prototype core vs. a marketable core are entirely different beasts given the litany of testing and customer considerations. It's difficult to say what exactly this kid did since the article is light on detail; it could be an achievement.
It's quite trivial to build a simple processor in HDL (.v or .vhdl) because the compiler synthesizes the actual digital logic for you. It's not much different than C or a functional language like Haskell or OCaml, but with considerations of timing and don't cares/high impedance.
PS: s/no more hard/no more difficult/ because "more hard" is always improper when "harder" exists.
Sounds like they used some kind of specialised tool that simplifies writing a CPU:
https://www.linkedin.com/pulse/zero-cpu-3-days-steve-hoover/
Designing a basic CPU with modern tools is not difficult if you understand how to do it, know the tools, and have a useful simulator. It's the hardware equivalent of a writing a bytecode interpreter in software.
(Tools are usually VHDL or Verilog, and Chisel is gaining traction in RISC-V academic circles. There are many other hardware languages too, but not as well known)
An experienced digital designer might rustle up a simple custom CPU in an afternoon or two. Not necessarily a great one, but good enough for some problems. They might do it as a side task during an existing logic design just because it takes a less area than the equivalent logic gates for some function that doesn't need to run at full speed. This is quite a common trick on FPGAs :-)
I've done this for a network packet processor. The assembler took longer to write than the CPU, and even that was a dirty Perl script. The whole thing took maybe 2 workdays. In that instance the motivation was to avoid having to do FPGA circuit synthesis when changing the network processing program: Assembling and loading a different program into the custom CPU took seconds, much faster than the several hours for FPGA circuit synthesis.
Choosing MICMAC or MMIX would be good macrolanguage target to start with. Remember, the microprogramming ops can be much simpler and VLIW-style.
The microprogram will be a ROM block that runs the decoding and execution of the actual processor's ISA. It's helpful to write a microprogram assembly language and compiler to make maintenance easier.
I own/recommend iCESugar, as that's a good iCE40 devboard which is dirt cheap on the official shop in aliexpress[0].
Look at ECP5-based ULX3S[1] if you want to get fancy.
More options at [2].
[0]: https://muselab-tech.aliexpress.com/store/5940159
While true the microprogramming ops are much simpler, the inherent parallelism means writing that stuff and getting it correct is usually challenging.
Non-pipelined is easier to write and debug, especially if you are used to regular sequential programming; once you have that working then it isn't too hard to turn it into a pipelined implementation.
A basic RISC style design is probably easier than a Z-80 because of the simpler addressing modes and the simpler decode.
disclosure: I love computer architecture courses, and I highly recommend them.
edit: I also think you can skip the microprogramming, but I think I understand what you are getting at, which is that you do a multi-cycle implementation first and then a pipelined implementation.
Also, his parents weren't in the zoom call?
For reference, I started programming when I was 6, did a little hardware design (easy stuff, interfacing DACs and RAM chips to 8 bit CPUs), wrote an assembler at 9, got a patent when I was 12, etc. My dad did a lot to inspire me and provide me with resources, and had some knowledge of electrical stuff (he had been an electrician in the Navy in WW2), but all the programming I did was very much mine. So it's not hard at all for me to believe that this young man completed a training course intended to get people up to speed on this technology.
It's not essential to make equipment available to people before college. The most important thing is to make sure that everyone can get into the field who can prove themselves.