Add links to decoder info
[crowdsupply.git] / updates / 023_2020mar26_decoder_emulator_started.mdwn
1 So many things happened since the last update they actually need to go
2 in the main update, even in summary form. One big thing:
3 [Raptor CS](https://www.raptorcs.com/)
4 sponsored us with remote access to a Monster spec'd TALOS II Workstation!
5
6 # Introduction
7
8 Here's the summary (if it can be called a summary):
9
10 * [An announcement](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/004995.html)
11 that we got the funding (which is open to anyone - hint, hint) resulted in
12 at least three people reaching out to join the team. "We don't need
13 permission to own our own hardware" got a *really* positive reaction.
14 * New team member, Jock (hello Jock!) starts on the coriolis2 layout,
15 after Jean-Paul from LIP6.fr helped to dramatically improve how coriolis2
16 can be used. This resulted in a
17 [tutorial](https://libre-riscv.org/HDL_workflow/coriolis2/) and a
18 [huge bug report discussion](http://bugs.libre-riscv.org/show_bug.cgi?id=178)
19 * Work has started on the
20 [POWER ISA decoder](http://bugs.libre-riscv.org/show_bug.cgi?id=186),
21 verified through
22 [calling GNU AS](https://git.libre-riscv.org/?p=soc.git;a=blob;f=src/soc/decoder/test/test_decoder_gas.py;h=9238d3878d964907c5569a3468d6895effb7dc02;hb=56d145e42ac75626423915af22d1493f1e7bb143) (yes, really!)
23 and on a mini-simulator
24 [calling QEMU](https://git.libre-riscv.org/?p=soc.git;a=blob;f=src/soc/simulator/qemu.py;h=9eb103bae227e00a2a1d2ec4f43d7e39e4f44960;hb=56d145e42ac75626423915af22d1493f1e7bb143)
25 for verification.
26 * Jacob's simple-soft-float library growing
27 [Power FP compatibility](http://bugs.libre-riscv.org/show_bug.cgi?id=258)
28 and python bindings.
29 * A Conference call with OpenPOWER Foundation Director, Hugh, and Timothy
30 Pearson from RaptorCS has been established every two weeks.
31 * The OpenPOWER Foundation is also running some open
32 ["Virtual Coffee"](https://openpowerfoundation.org/openpower-virtual-coffee-calls/)
33 weekly round-table calls for anyone interested, generally, in OpenPOWER
34 development.
35 * Tim sponsors our team with access to a Monster Talos II system with a
36 whopping 128 GB RAM. htop lists a staggering 72 cores (18 real
37 with 4-way hyperthreading).
38 * [Epic MegaGrants](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/005262.html)
39 reached out (hello!) to say they're still considering our
40 request.
41 * A marathon 3-hour session with [NLNet](http://nlnet.nl) resulted
42 in the completion of the
43 [Milestone tasks list(s)](http://bugs.libre-riscv.org/buglist.cgi?component=Milestones&list_id=567&resolution=---)
44 and a
45 [boat-load](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/thread.html)
46 of bug reports to the list.
47 * Immanuel Yehowshua is participating in the Georgia Tech
48 [Create-X](https://create-x.gatech.edu/) Programme, and is establishing
49 a Public Benefit Corporation in Atlanta, as an ethical vehicle for VC
50 Funding.
51 * A [Load/Store Buffer](http://bugs.libre-riscv.org/show_bug.cgi?id=216)
52 design and
53 [further discussion](http://bugs.libre-riscv.org/show_bug.cgi?id=257)
54 including on
55 [comp.arch](https://groups.google.com/forum/#!topic/comp.arch/cbGAlcCjiZE)
56 inspired additional writeup
57 on the
58 [6600 scoreboard](https://libre-riscv.org/3d_gpu/architecture/6600scoreboard/)
59 page.
60 * [Public-Inbox](http://bugs.libre-riscv.org/show_bug.cgi?id=181) was
61 installed successfully on the server, which is in the process of
62 moving to a [new domain name](http://bugs.libre-riscv.org/show_bug.cgi?id=182)
63 [Libre-SOC](http://libre-soc.org)
64 * Build Servers have been set up with
65 [automated testing](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/005364.html)
66 being established
67
68 Well dang, as you can see, suddenly it just went ballistic. There's
69 almost certainly things left off the list. For such a small team there's
70 a heck of a lot going on. We have an awful lot to do, in a short amount
71 of time: the 180nm tape-out is in October 2020 - only 7 months away.
72
73 With this update we're doing something slightly different: a request
74 has gone out [to the other team members](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/005428.html)
75 to say a little bit about what each of them is doing. This also helps me
76 because these updates do take quite a bit of time to write.
77
78 # NLNet Funding announcement
79
80 An announcement went out
81 [last year](https://lists.gnu.org/archive/html/libreplanet-discuss/2019-09/msg00170.html)
82 that we'd applied for funding, and we got some great responses and
83 feedback (such as "don't use patented AXI4"). The second time, we
84 sent out a "we got it!" message and got some really nice private and
85 public replies, as well as requests from people to join the team.
86 More on that when it happens.
87
88 # Coriolis2 experimentation started
89
90 Jock, a really enthusiastic and clearly skilled and experienced python
91 developer, has this to say about coriolis2:
92
93 As a humble Python developer, I understand the unique status and
94 significance of the Coriolis project, nevertheless I cannot help
95 but notice that it has a huge room for improvement. I genuinely hope
96 that my participation in libre-riscv will also help improve Coriolis.
97
98 This was the short version, with a much more
99 [detailed insight](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/005478.html)
100 listed here which would do well as a bugreport. However the time it would
101 take is quite significant. We do have funding available from NLNet,
102 so if there is anyone that would like to take this on, under the supervision
103 of Jean-Paul at LIP6.fr, we can look at facilitating that.
104
105 One of the key insights that Jock came up with was that the coding style,
106 whilst consistent, is something that specifically has to be learned, and,
107 as such, being contrary to PEP8 in so many ways, creates an artificially
108 high barrier and learning curve.
109
110 Even particularly experienced cross-language developers such as
111 myself tend to be able to *read* such code, but editing it, when
112 commas separating list items are on the beginning of lines, results in
113 syntax errors automatically introduced *without thinking* because we
114 automatically add them *at the end* because it looks like one is missing.
115
116 This is why we insisted on PEP8 in the
117 [HDL workflow](http://libre-riscv.org/HDL_workflow) document.
118
119 Other than that: coriolis2 is actually extremely exciting to work with.
120 Anyone who has done manual PCB layout will know quite how much of a relief
121 it is to have auto-routing: this is what coriolis2 has by the bucket-load,
122 *as well* as auto-placement. We are looking at half a *million* objects
123 (Cells) to place. Without an auto-router / auto-placer this is just a
124 flat-out impossible task.
125
126 The first step was to
127 [learn and adapt coriolis2](http://bugs.libre-riscv.org/show_bug.cgi?id=178)
128 which was needed to find out how much work would be involved, as much as
129 anything else, in order to be able to accurately assign the fixed budgets
130 to the NLNet milestones. Following on from that, when Jock joined,
131 we needed to work out a compact way to express the
132 [layout of blocks](http://bugs.libre-riscv.org/show_bug.cgi?id=217#c44)
133 and he's well on the way to achieving that.
134
135 Some of the pictures from coriolis2 are
136 [stunning](bugs.libre-riscv.org/attachment.cgi?id=29). This was an
137 experimental routing of the IEEE754 FP 64-bit multiplier. It took
138 5 minutes to run, and is around 50,000 gates: as big as most silicon
139 ASICs that have formerly been done with Coriolis2, and 50% of the
140 practical size that can be handed in one go to the auto-place/auto-router.
141
142 Other designs using coriolis2 have been of the form where the major "blocks"
143 (such as FPMUL, or Register File) are laid-out automatically in a single-level
144 hierarchy, followed by full and total manual layout from that point onwawrds,
145 in what is termed in the industry as a "Floorplan".
146 With around 500,000 gates to do and many blocks being repeated, this approach
147 is not viable for us. We therefore need a *two* level or potentially three
148 level hierarchy.
149
150 [Explaining this](http://bugs.libre-riscv.org/show_bug.cgi?id=178#c146)
151 to Jean-Paul was amusing and challenging. Much bashing of heads against
152 walls and keyboards was involved. The basic plan: rather than have
153 coriolis2 perform an *entire* layout, in a flat and all-or-nothing fashion,
154 we need a much more subtle fine-grained approach, where *sub-blocks* are
155 laid-out, then *included* at a given level of hierarchy as "pre-done blocks".
156
157 Save and repeat.
158
159 This apparently had never been done before, and explaining it in words was
160 extremely challenging. Through a massive hack (actively editing the underlying
161 HDL files temporarily in between tasks) was the only way to illustrate it.
162 However once the lightbulb went on, Jean-Paul was able to get coriolis2's
163 c++ code into shape extremely rapidly, and this alone has opened up an
164 *entire new avenue* of potential for coriolis2 to be used in industry
165 for doing much larger ASICs. Which is precisely the kind of thing that
166 our NLNet sponsors (and the EU, from the Horizon 2020 Grant) love. hooray.
167 Now if only we could actually go to a conference and talk about it.
168
169 # POWER ISA decoder and Simulator
170
171 *(kindly written by Michael)*
172
173 The decoder we have is based on that of IBM's
174 [microwatt reference design](https://github.com/antonblanchard/microwatt).
175 As microwatt's decoder is quite regular, consisting of a bunch of large
176 switch statements returning fields of a struct, we elected not to
177 pursue a direct conversion of the VHDL to nmigen. Instead, we
178 extracted the information in the switch statements into several
179 [CSV tables](https://libre-riscv.org/openpower/isatables/),
180 and leveraged nmigen to construct the decoder from these
181 tables. We applied the same technique to extract the subfields
182 (register numbers, branch offset, immediates, etc.) from the
183 instruction, where Luke converted the information in the POWER ISA
184 specification to text, and wrote a module in python to extract those
185 fields from an instruction.
186
187 To test the decoder, we initially verified it against the tables we
188 extracted, and manually against the [POWER ISA
189 specification](https://openpowerfoundation.org/?resource_lib=power-isa-version-3-0). Later
190 however, we came up with the idea of [verifying the
191 decoder](https://git.libre-riscv.org/?p=soc.git;a=blob;f=src/soc/decoder/test/test_decoder_gas.py;h=9238d3878d964907c5569a3468d6895effb7dc02;hb=433ab59cf9b7ab1ae10754798fc1c110e705db76)
192 against the output of the GNU assembler. This is done by selecting an
193 instruction type (integer reg/reg, integer immediate, load store,
194 etc), and randomly selecting the opcode, registers, immediates, and
195 other operands. We then feed this instruction to GNU AS to assemble,
196 and then the assembled instruction is sent to our decoder. From this,
197 we can then verify that the output of the decoder matches what was
198 generated earlier.
199
200 We also explored using a similar idea to test the functionality of the
201 entire SOC. By using the [QEMU](https://www.qemu.org/) PowerPC
202 emulator, we can compare the execution of our SOC against that of the
203 emulator to verify that our decoder and backend are working correctly.
204 We would write snippets of test code (or potentially randomly generate
205 instructions) and send the resulting binary to both the SOC and
206 QEMU. We would then simulate our SOC until it was finished executing
207 instructions, and use Qemu's gdb interface to do the same. We would
208 then use Qemu's gdb interface to compare the register file and memory
209 with that of our SOC to verify that it is working correctly. I did
210 some experimentation using this technique to verify a [rudimentary
211 simulator](https://git.libre-riscv.org/?p=soc.git;a=blob;f=src/soc/simulator/test_sim.py;h=aadaf667eff7317b1aa514993cd82b9abedf1047;hb=433ab59cf9b7ab1ae10754798fc1c110e705db76)
212 of the SOC backend, and it seemed to work quite well.
213
214 *(Note from Luke: this automated approach, taking either other people's
215 regularly-written code or actual PDF specifications, not only saves us a
216 vast amount of time, it also ensures that our implementation is
217 correct and does not contain transcription errors).*
218
219 # simple-soft-float Library and POWER FP emulation
220
221 The
222 [simple-soft-float](https://salsa.debian.org/Kazan-team/simple-soft-float)
223 library is a floating-point library Jacob wrote with the intention
224 of being a reference implementation of IEEE 754 for hardware testing
225 purposes. It's specifically designed to be written to be easier to
226 understand instead of having the code obscured in pursuit of speed:
227
228 * Being easier to understand helps prevent bugs where the code does not
229 match the IEEE spec.
230 * It uses the [algebraics](https://salsa.debian.org/Kazan-team/algebraics)
231 library that Jacob wrote since that allows using numbers that behave
232 like exact real numbers, making reasoning about the code simpler.
233 * It is written in Rust rather than highly-macro-ified C, since that helps with
234 readability since operations aren't obscured, as well as safety, since Rust
235 proves at compile time that the code won't seg-fault unless you specifically
236 opt-out of those guarantees by using `unsafe`.
237
238 It currently supports 16, 32, 64, 128-bit FP for RISC-V, along with
239 having a `DynamicFloat` type which allows dynamically specifying all
240 aspects of how a particular floating-point type behaves -- if one wanted,
241 they could configure it as a 2048-bit floating-point type.
242
243 It also has Python bindings, thanks to the awesome
244 [PyO3](https://pyo3.rs/) library for writing Python bindings in Rust.
245
246 We decided to write simple-soft-float instead
247 of extending the industry-standard [Berkeley
248 softfloat](http://www.jhauser.us/arithmetic/SoftFloat.html) library
249 because of a range of issues, including not supporting Power FP, requiring
250 recompilation to switch which ISA is being emulated, not supporting
251 all the required operations, architectural issues such as depending on
252 global variables, etc. We are still testing simple-soft-float against
253 Berkeley softfloat where we can, however, since Berkeley softfloat is
254 widely used and highly likely to be correct.
255
256 simple-soft-float is [gaining support for Power
257 FP](http://bugs.libre-riscv.org/show_bug.cgi?id=258), which requires
258 rewriting a lot of the status-flag handling code since Power supports a
259 much larger set of floating-point status flags and exceptions than most
260 other ISAs.
261
262 Thanks to RaptorCS for giving us remote access to a Power9 system,
263 since that makes it much easier verifying that the test cases are correct
264 (more on this below).
265
266 API Docs for stable releases of both
267 [simple-soft-float](https://docs.rs/simple-soft-float) and
268 [algebraics](https://docs.rs/algebraics) are available on docs.rs.
269
270 One of the really important things about these libraries: they're not
271 specifically coded exclusively for Libre-SOC: like softfloat-3 itself
272 (and also like the [IEEE754 FPU](https://git.libre-riscv.org/?p=ieee754fpu.git))
273 they're intended for *general-purpose* use by other projects. These are
274 exactly the kinds of side-benefits for the wider Libre community that
275 sponsorship, from individuals, Foundations (such as NLNet) and Companies
276 (such as Purism and Raptor CS) brings.
277
278 # OpenPOWER Conference calls
279
280 We've now established a routine two-week conference call with Hugh Blemings,
281 OpenPOWER Foundation Director, and Timothy Pearson, CEO of Raptor CS. This
282 allows us to keep up-to-date (each way) on both our new venture and also
283 the newly-announced OpenPOWER Foundation effort as it progresses.
284
285 One of the most important things that we, Libre-SOC, need, and are
286 discussing with Hugh and Tim is: a way to switch on/off functionality
287 in the (limited) 32-bit opcode space, so that we have one mode for
288 "POWER 3.0B compliance" and another for "things that are absolutely
289 essential to make a decent GPU". With these two being strongly
290 mutually exclusively incompatible, this is just absolutely critical.
291
292 Khronos Vulkan Floating-point Compliance is, for example, critical not
293 just from a Khronos Trademark Compliance perspective, it's essential
294 from a power-saving and thus commercial success perspective. If we
295 have absolute strict compliance with IEEE754 for POWER 3.0B, this will
296 result in far more silicon than any commercially-competitive GPU on
297 the market, and we will not be able to sell product. Thus it is
298 *commercially* essential to be able to swap between POWER Compliance
299 and Khronos Compliance *at the silicon level*.
300
301 POWER 3.0B does not have c++ style LR/SC atomic operations for example,
302 and if we have half a **million** 3D GPU data structures **per second**
303 that need SMP-level inter-core mutexes, and the current POWER 3.0B
304 multi-instruction atomic operations are used - conforming strictly to
305 the standard - we're highly likely to use 10 to 15 **percent** processing
306 power consumed on spin-locking. Finding out from Tim on one of these
307 calls that this is something that c++ atomics is something that end-users
308 have been asking about is therefore a good sign.
309
310 Adding new and essential features that could well end up in a future version
311 of the POWER ISA *need* to be firewalled in a clean way, and we've been
312 asked to [draft a letter](https://libre-riscv.org/openpower/isans_letter/)
313 to some of the (very busy) engineers with a huge amount of knowledge
314 and experience inside IBM, for them to consider. Some help in reviewing
315 it would be greatly appreciated.
316
317 These and many other things are why the calls with Tim and Hugh are a
318 good idea. The amazing thing is that they're taking us seriously, and
319 we can discuss things like those above with them.
320
321 Other nice things we learned (more on this below) is that Epic Games
322 and RaptorCS are collaborating to get POWER9 supported in Unreal Engine.
323 And that the idea has been very tentatively considered to use our design
324 for the "boot management" processor, running
325 [OpenBMC](https://github.com/openbmc/openbmc). These are early days,
326 it's just ideas, ok! Aside from anything, we actually have to get a chip
327 done, first.
328
329 # OpenPower Virtual Coffee Meetings
330
331 The "Virtual Coffee Meetings", announced
332 [here](https://openpowerfoundation.org/openpower-virtual-coffee-calls/)
333 are literally open to anyone interested in OpenPOWER (if you're strictly
334 Libre there's a dial-in method). These calls are not recorded, it's
335 just an informal conversation.
336
337 What's a really nice surprise is finding
338 out that Paul Mackerras, whom I used to work with 20 years ago, is *also*
339 working on OpenPOWER, specifically
340 [microwatt](https://github.com/antonblanchard/microwatt), being managed
341 by Anton Blanchard.
342
343 A brief discussion led to learning that Paul is looking at adding TLB
344 (Virtual Memory) support to microwatt, specifically the RADIX TLB.
345 I therefore pointed him at the same resource
346 [(power-gem5)](https://github.com/power-gem5/gem5/tree/gem5-experimental)
347 that Hugh had kindly pointed me at, the week before, and did a
348 [late night write-up](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/005445.html)
349
350 My feeling is that these weekly round-table meetings are going to be
351 really important for everyone involved in OpenPOWER. It's a community:
352 we help each other.
353
354 # Sponsorship by RaptorCS with a TALOS II Workstation
355
356 With many thanks to Timothy from
357 [RaptorCS](https://raptorcs.com), we've a new shiny
358 online server that needs
359 [setting up](http://bugs.libre-riscv.org/show_bug.cgi?id=265).
360 This machine is not just a "nice-to-have", it's actually essential for
361 us to be able to verify against. As you can see in the bugreport, the idea
362 is to bootstrap our way from running IEEE754 FP on a *POWER* system
363 (using typically gnu libm), verifying Jacob's algorithmic FP library
364 particularly and specifically for its rounding modes and exception modes.
365
366 Once that is done, then apart from having a general-purpose library that
367 is compliant with POWER IEEE754 which *anyone else can use*, we can use
368 that to run unit tests against our[
369 hardware IEEE754 FP library](https://git.libre-riscv.org/?p=ieee754fpu.git;a=summary) -
370 again, a resource that anyone may use in any arbitrary project - verifying
371 that it is also correct. This stepping-stone "bootstrap" method we are
372 deploying all over the place, however to do so we need access to resources
373 that have correctly-compliant implementations in the first place. Thus,
374 the critical importance of access to a TALOS II POWER9 workstation.
375
376 # Epic Megagrants
377
378 Several months back I got word of the existence of Epic Games' "Megagrants".
379 In December 2019 they announced that so far they've given
380 [USD $13 million](https://www.unrealengine.com/en-US/blog/epic-megagrants-reaches-13-million-milestone-in-2019)
381 to 200 recipients, so far: one of them, the Blender Foundation, was
382 [USD $1.2 million](https://www.blender.org/press/epic-games-supports-blender-foundation-with-1-2-million-epic-megagrant/)!
383 This is an amazing and humbling show of support for the 3D Community,
384 world-wide.
385
386 It's not just "games", or products specifically using the Unreal Engine:
387 they're happy to look at anything that "enhances Libre / Open source"
388 capabilities for the 3D Graphics Community.
389
390 A full hybrid 3D-capable CPU-GPU-VPU which is fully-documented not just in
391 its capabilities, that [documentation](http://libre-riscv.org) and
392 [full source code](http://git.libre-riscv.org) kinda extends
393 right the way through the *entire development process* down to the bedrock
394 of the actual silicon - not just the firmware, bootloader and BIOS,
395 *everything* - in my mind it kinda qualifies in way that can, in some
396 delightful way, be characterised delicately as "complete overkill".
397
398 Interestingly, guys, if you're reading this: Tim, the CEO of RaptorCS
399 informs us that you're working closely with his team to get the Unreal
400 Engine up and running on the POWER architecture? Wouldn't that be highly
401 amusing, for us to be able to run the Unreal Engine on the Libre-SOC,
402 given that it's going to be POWER compatible hardware, as a test,
403 first initially in FPGA and then in 18-24 months, on actual silicon, eh?
404
405 So, as I mentioned
406 [on the list](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/005262.html)
407 (reiterating what I put in the original application), we're happy with
408 USD $25,000, we're happy with USD $10 million. It's really up to you guys,
409 at Epic Games, as to what level you'd like to see us get to, and how fast.
410
411 USD $600,000 for example we can instead of paying USD $1million to a proprietary
412 company to license a DDR3 PHY for a limited one-time use and only a 32-bit
413 wide interface, we can contract SymbioticEDA to *design* a DDR3 PHY for us,
414 which both we *and the rest of the worldwide Silicon Community can use
415 without limitation* because we will ask SymbioticEDA to make the design
416 (and layout) libre-licensed, for anyone to use.
417
418 USD 250,000 pays for the mask charges that will allow us to do the 40nm
419 quad-core ASIC that we have on the roadmap for the second chip. USD
420 $1m pays for 28nm masks (and so on, in an exponential ramp-up). No, we
421 don't want to do that straight away: yes we do want to go through a first
422 proving test ASIC in 180nm, which, thanks to NLNet, is already funded.
423 This is just good sane sensible use of funds.
424
425 Even USD $25,000 helps us to cover things such as administration of the
426 website (which is taking up a *lot* of time) and little things that we
427 didn't quite foresee when putting in the NLNet Grant Applications.
428
429 Lastly, one of the conditions as I understood it from the Megagrants
430 process is that the funds are paid in "stages". This is exactly
431 what NLNet does for (and with) us, right now. If you wanted to save
432 administrative costs, there may be some benefit to having a conversation
433 with the [30-year-old](https://nlnet.nl/foundation/history/)
434 NLNet Charitable Foundation. Something to think about?
435
436 # NLNet Milestone tasks
437
438 Part of applying for NLNet's Grants is a requirement to create a list
439 of tasks, each of which is assigned a budget. On 100% completion of the task,
440 donations can be sent out. With *six* new proposals accepted, each of which
441 required between five (minimum) and *ninteen* separate and distinct tasks,
442 a call with Michiel and Joost turned into an unexpected three hour online
443 marathon, scrambling to write almost fifty bugreports as part of the Schedule
444 to be attached to each Memorandum of Understanding. The mailing list
445 got a [leeetle bit busy](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/005003.html)
446 right around here.
447
448 Which emphasised for us the important need to subdivide the mailing list into
449 separate lists (below).
450
451 # Georgia Tech CREATE-X
452
453 TODO
454
455 # LOAD/STORE Buffer and 6600 design documentation
456
457 A critical part of this project is not just to create a chip, it's to
458 *document* the chip design, the decisions along the way, for both
459 educational, research, and ongoing maintenance purposes. With an
460 augmented CDC 6600 design being chosen as the fundamental basis,
461 [documenting that](https://libre-riscv.org/3d_gpu/architecture/6600scoreboard/)
462 as well as the key differences is particularly important. At the very least,
463 the extremely simple and highly effective hardware but timing-critical
464 design aspects of the circular loops in the 6600 were recognised by James
465 Thornton (the co-designer of the 6600) as being paradoxically challenging
466 to understand why so few gates could be so effective (being as they were,
467 literally the world's first ever out-of-order superscalar architecture).
468 Consequently, documenting it just to be able to *develop* it is extremely
469 important.
470
471 We're getting to the point where we need to connect the LOAD/STORE Computation
472 Units up to an actual memory architecture. We've chosen
473 [minerva](https://github.com/lambdaconcept/minerva/blob/master/minerva/units/loadstore.py)
474 as the basis because it is written in nmigen, works, and, crucially, uses
475 wishbone (which we decided to use as the main Bus Backbone a few months ago).
476
477 However, unlike minerva, which is a single-issue 32-bit embedded chip,
478 where it's perfectly ok to have one single LD/ST operation per clock,
479 and not only that but to have that operation take a few clock cycles,
480 to get anything like the level of performance needed of a GPU, we need
481 at least four 64-bit LOADs or STOREs *every clock cycle*.
482
483 For a first ASIC from a team that's never done a chip before, this is,
484 officially, "Bonkers Territory". Where minerva is doing 32-bit-wide
485 Buses (and does not support 64-bit LD/ST at all), we need internal
486 data buses of a minimum whopping **2000** wires wide.
487
488 Let that sink in for a moment.
489
490 The reason why the internal buses need to be 2000 wires wide comes down
491 to the fact that we need, realistically, 6 to eight LOAD/STORE Computation
492 Units. 4 of them will be operational, 2 to 4 of them will be waiting
493 with pending instructions from the multi-issue Vectorisation Engine.
494
495 We chose to use a system which expands the first 4 bits of the address,
496 plus the operation width (1,2,4,8 bytes) into a "bitmap" - a byte-mask -
497 that corresponds directly with the 16 byte "cache line" byte enable
498 columns, in the L1 Cache. These bitmaps can then be "merged" such
499 that requests that go to the same cache line can be served *in the
500 same clock cycle* to multiple LOAD/STORE Computation Units. This
501 being absolutely critical for effective Vector Processing.
502
503 Additionally, in order to deal with misaligned memory requests, each of those
504 needs to put out *two* such 16-byte-wide requests (see where this is going?)
505 out to the L1 Cache.
506 So, we now have eight times two times 128 bits which is a staggering
507 2048 wires *just for the data*. There do exist ways to get that down
508 (potentially to half), and there do exist ways to get that cut in half
509 again, however doing so would miss opportunities for merging of requests
510 into cache lines.
511
512 At that point, thanks to Mitch Alsup's input (Mitch is the designer of
513 the Motorola 68000, Motorola 88120, key architecture on AMD's Opteron
514 Series, the AMD K9, AMDGPU and Samsung's latest GPU), we learned that
515 L1 cache design critically depends on what type of SRAM you have. We
516 initially, naively, wanted dual-ported L1 SRAM and that's when Staf
517 and Mitch taught us that this results in half-duty rate. Only
518 1-Read **or** 1-Write SRAM Cells give you fast enough (single-cycle)
519 data rates to be useable for L1 Caches.
520
521 Part of the conversation has wandered into
522 [why we chose dynamic pipelines](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/005459.html)
523 as well as receiving that
524 [important advice](http://lists.libre-riscv.org/pipermail/libre-riscv-dev/2020-March/005354.html)
525 from both Mitch Alsup and Staf Verhaegen.
526
527 (Staf is also [sponsored by NLNet](https://nlnet.nl/project/Chips4Makers/)
528 to create Libre-licensed Cell Libraries, busting through one of the -
529 many - layers of NDAs and reducing NREs and unnecessary and artificial
530 barriers for ASIC development: I helped him put in the submission, and
531 he was really happy to do the Cell Libraries that we will be using for
532 LibreSOC's 180nm test tape-out in October 2020.)
533
534 # Public-Inbox and Domain Migration
535
536 As mentioned before, one of the important aspects of this project is
537 the documentation and archiving. It also turns out that when working
538 over an extremely unreliable or ultra-expensive mobile broadband link,
539 having *local* (offline) access to every available development resource
540 is critically important.
541
542 Hence why we are going to the trouble of installing public-inbox, due
543 to its ability to not only have a mailing list entirely stored in a
544 git repository, the "web service" which provides access to that git-backed
545 archive can be not only mirrored elsewhere, it can be *run locally on
546 your own local machine* even when offline. This in combination
547 with the right mailer setup can store-and-forward any replies to the
548 (offline-copied) messages, such that they can be sent when internet
549 connectivity is restored, yet remain a productive collaborative developer.
550
551 Now you know why we absolutely do not accept "slack", or other proprietary
552 "online oh-so-convenient" service. Not only is it highly inappropriate for
553 Libre Projects, not only do we become critically dependent on the Corporation
554 running the service (yes, github has been entirely offline, several times),
555 if we have remote developers (such as myself, working from Scotland last
556 month with sporadic access to a single Cell Tower) or developers in emerging
557 markets where their only internet access is via a Library or Internet Cafe,
558 we absolutely do not want to exclude or penalise such people, just because
559 they have less resources.
560
561 Fascinatingly, Linus Torvals is *specifically*
562 [on record](https://www.linuxjournal.com/content/line-length-limits)
563 about making sure that "Linux development does not favour wealthy people".
564
565 We are also, as mentioned before, moving to a new domain name. We'll take
566 the opportunity to fix some of the issues with HTTPS (wrong certificate),
567 and also do some
568 [better mailing list names](http://bugs.libre-riscv.org/show_bug.cgi?id=184)
569 at the same time.
570
571 TODO (Veera?) bit about what was actually done, how it links into mailman2.
572
573 # OpenPOWER HDL Mailing List opens up
574
575 It is early days, however it is fantastic to see responses from IBM with
576 regards to requests for access to the POWER ISA Specification
577 documents in
578 [machine-readable form](http://lists.mailinglist.openpowerfoundation.org/pipermail/openpower-hdl-cores/2020-March/000007.html)
579 I took Jeff at his word and explained, in some detail,
580 [exactly why](http://lists.mailinglist.openpowerfoundation.org/pipermail/openpower-hdl-cores/2020-March/000008.html)
581 machine readable versions of specifications are critically important.
582
583 The takeaway is: *we haven't got time to do manual transliteration of the spec*
584 into "code". We're expending considerable effort making sure that we
585 "bounce" or "bootstrap" off of pre-existing resources, using computer
586 programs to do so.
587
588 This "trick" is something that I learned over 20 years ago, when developing
589 an SMB Client and Server in something like two weeks flat. I wrote a
590 parser which read the packet formats *from the IETF Draft Specification*,
591 and outputted c-code.
592
593 This leaves me wondering, as I mention on the HDL list, if we can do the same
594 thing with large sections of the POWER Spec.
595
596 # Build Servers
597
598 TODO
599
600 # Conclusion
601
602 I'm not going to mention anything about the current world climate: you've
603 seen enough news reports. I will say (more about this through the
604 [EOMA68](https://www.crowdsupply.com/eoma68/micro-desktop) updates) that
605 I anticipated something like what is happening right now, over ten years
606 ago. I wasn't precisely expecting what *has* happened, just the consequences:
607 world-wide travel shut-down, and for people - the world over - to return to
608 local community roots.
609
610 However what I definitely wasn't expecting was a United States President
611 to be voted in who was eager and, frankly, stupid enough, to start *and
612 escalate* a Trade war with China. The impact on the U.S economy alone, and the
613 reputation of the whole country, has been detrimental in the extreme.
614
615 This combination leaves us - world-wide - with the strong possibility that
616 seemed so "preposterous" that I could in no way discuss it widely, let alone
617 mention it on something like a Crowdsupply update, that thanks to the
618 business model on which their entire product lifecycle is predicated,
619 in combination with the extremely high NREs and development costs for
620 ASICs (custom silicon costs USD $100 million, these days), several
621 large Corporations producing proprietary binary-only drivers for
622 hardware on which we critically rely for our internet-connected way
623 of life **may soon go out of business**.
624
625 Right at a critical time where video conferencing is taking off massively,
626 your proprietary hardware - your smartphone, your tablet, your laptop,
627 everything you rely on for connectivity to the rest of the world, all of
628 a sudden **you may not be able to get software updates** or, worse,
629 your products could even be
630 [remotely shut down](https://www.theguardian.com/technology/2016/apr/05/revolv-devices-bricked-google-nest-smart-home)
631 **without warning**.
632
633 I do not want to hammer the point home too strongly but you should be
634 getting, in no uncertain terms, exactly how strategically critical, in
635 the current world climate, this project just became. We need to get it
636 accelerated, completed, and into production, in an expedited and responsible
637 fashion.
638