Hi All,

I think the time has come that someone constructs a list FAQ that we can put on the footer of posts. I’m not the best person to write it as like anyone I have unconscious biases that need to be moderated. It should be moderated and edited by several people. Nevertheless, I’ve had a go at a starting point. We need to put a stop to some of the recent behaviour on the list. Misinformation, speculation, gossip and negativity towards the current RISC-V standards track e.g. attacks on RISC-V suitability for use in X are not appropriate. We need to move the discussion back to purely technical issues, such as evolutionary and positive steps forward vs revolutionary rhetoric that attacks towards RISC-V. This requires some policy.

This starting point for the list FAQ has a number of list misdemeanours including ones committed by me in the past, with lack of knowledge as a newcomer. Recent list traffic has crowded out the largest contributors to the specs and has made reading the list cringe material. The rhetoric on the list is occupying the mental bandwidth of many readers to the point where the list is becoming unreadable. This needs to stop. The traffic doesn’t represent the track of the many people who have contributed to the current base, which is the apex in which RISC-V will evolve from. RISC-V is not intended to be revolutionary rather it represents the next step in evolution from CISC, proprietary ISAs and the expiration of patents that allow for the construction of a royalty free open standard at the hardware level in a similar vain to what has happened with Linux at the software level. This is an industry standard group for an open standard.

I’m not apologising for my long email. I’ve added bullets so one can skim through. I’m not apologising for my bias. I support the existing RISC-V standards track and open tools which represents the huge amount of work done by many contributors to date and I support the existing standards and its careful quantitative evolution.

Work on a reference implementations for proposals and test them in RTL, Gem5, QEMU, spike or other. Ideas are not the time-consuming work. Testing them is…

My response mirrors the discourse. It is not technical, or when it is, it is not consensus oriented. I find this difficult to digest. Particular because my recent focus has been on a faithful and accurate representation of the current specifications with a focus on backward and forward binary compatibility.

- https://www.sifive.com/blog/2018/04/25/risc-v-qemu-part-2-the-risc-v-qemu-port-is-upstream/

A lot of the recent discourse is at odds with the current standards track and stated goals of the foundation, such as agnosticism towards proprietary or open implementations. I believe the choice for openness is out of pragmatism vs ideology. DRM is going to be one of those things that gets implemented on RISC-V whether we personally agree with it or not. We should refrain from attaching emotive language to implementation choices that are legal for which we disagree with.

I tend towards consensus seeking behaviour. This list has become somewhat exhausting to read and I can’t contribute to the current style of discussions. It has occupied too much of my mental bandwidth which compelled me to write this email, instead of working on what I’m supposed to be working on. I do think we have a problem on this list which we need to resolve.\

The founders of the ISA should be able to respond constructively and positively to proposals on the list. The fact that they are not is an indication that something is wrong.

This email is not intended to start a discussion. It’s more one of despair. i.e. being nearly ready to hit “unsubscribe”.

Sincerely, X-Michael.

X-RISC-V ISA Development Mailing List FAQ

  • Advocate for RISC-V on this mailing list

Constructive criticism is essential for evolution of the RISC-V specifications, however opinions without quantitative assessment or that contain a general disillusionment towards RISC-V are not in the spirit of this list. Things can and will be improved as the specifications evolve. Quirks exist. They can be ironed out. To improve the ISA we need to maintain a generally positive attitude towards the evolution of the specifications, keeping in mind binary compatibility with the existing specifications. Editing the specifications is hard work. Gossip, speculation and inaccurate accounts of computer history are not on topic.

  • Read Computer Architecture, Sixth Edition: A Quantitative Approach

As we all know, this book contains the foundation of the RISC-V quantitative design. Quoting Amazon: “Computer Architecture: A Quantitative Approach, Sixth Edition has been considered essential reading by instructors, students and practitioners of computer design for over 20 years. The sixth edition of this classic textbook from Hennessy and Patterson, winners of the 2017 ACM A.M. Turing Award recognizing contributions of lasting and major technical importance to the computing field, is fully revised with the latest developments in processor and system architecture. The text now features examples from the RISC-V (RISC Five) instruction set architecture, a modern RISC instruction set developed and designed to be a free and openly adoptable standard. It also includes a new chapter on domain-specific architectures and an updated chapter on warehouse-scale computing that features the first public information on Google’s newest WSC.”

  • RISC origins at Berkeley

Rhetoric that compares RISC-V to a student project is defamatory and belies the fact that there is widespread support and adoption for RISC-V in the MCU space with companies committing to ship billions of RISC-V processors in deeply embedded applications. The RISC-V Foundation represents the apex of the academic-industrial complex and this is shown by the Foundation membership. Please respect that this list is for supporters of RISC-V and includes some of the most brilliant minds in the industry. argumentum ad hominem and conspiracy theories should be avoided.

  • The RISC-V Foundation has a large number of committed member companies.

There are newcomers on the list who are not aware that they are broadcasting to a large Foundation of committed RISC-V member companies who support the RISC-V standards. General rules for constructive criticism and neutral discourse apply as indeed they would for any industry working group.

  • The privileged ISA is not a POSIX/Linux ISA

The only thing in the privileged specification that supports a UNIX/POSIX-like OS is S-mode page based address translation and the Supervisor mode / User mode privilege separation. These are optional. These functions are not limited to POSIX. Windows NT with its roots in VMS could use these facilities with PE/COFF and UEFI to run ntoskrnl.exe on RISC-V. The System V ELF ABI and calling convention is documented in a separate processor supplement ABI document. The Linux ABI is not part of the ISA.

  • Binary compatibility is important for MCUs

The machine mode registers should be consistent across implementations. Binary compatibility for micro controllers is just as important as OS level binary compatibility (which is distinct) as it allows RISC-V system level code to be shared across heterogenous implementations.

  • Modularity makes small implementations easier

The modularity of the RISC-V specifications is very well thought through and is one of its strengths; credit to the ISA designers. RVI plus minimal M-mode is as easy to implement as one would expect for a simple MCU with in the order of a few hundred bits for processor state on top of the register file.

  • A minimal M-mode implementation is not onerous

An M-mode only implementation requires approximately 11 CSRs (mcycle, minstret, mstatus, misa, mie, mtvec, mscratch, mepc, mcause, mtval, mip) out of a set of 18 CSRs. This is not onerous. Several only require 1 bit of state in a minimal configuration.

Below are the 18 CSRs with the minimal 11 identified which are necessary to implement a processor confirming to the M-mode subset of the Privileged ISA as distinct from the User-level ISA which only specifies the runtime aspects of the ISA, versus privilege modes (M-mode is mandatory, S and U are optional). An implementation with < 11 XLEN machine words is possible.

    /* machine counters */ mcycle - (useful to implement) minstret -
    (useful to implement)

    /* machine information */ mvendorid - (can wire to 0) marchid -
    (can wire to 0) mimplid - (can wire to 0) mhartid - (single core
    can wire to 0)

    /* machine trap setup */ mstatus - (requires MIE) 1-bit misa -
    (1 bit: ‘E’ or ‘I’) 1-bit mideleg - (can wire to 0)
    medeleg - (can wire to 0) mie - (require to enable external and
    timer interrupts MEIE, MTIE) 2-bits mtvec - (required for ISR
    entry, address, can be hardwired e.g to 0x10000) mcounteren -
    (can wire to 0)

    /* machine trap handling */ mscratch - (required register for
    ISR stack pointer) mepc - (required register for ISR return
    address) mcause - (required register for ISR cause: exception or
    interrupt) mtval - (required register for ISR exception info) mip
    - (required register for ISR to see which interrupts are pending)
  • RISC-V Control and status registers are accessed with an immediate

Control and status registers are accessed via an instruction immediate. This means there is no register read required to decode the CSR. This makes pipelined and Out Of Order implementations easier to implement. Thus it doesn’t favour one implementation style over the other. CSRs could be present in an MMIO address space however the CSR instructions are the interface, not loads or stores. The spec doesn’t preclude the CSR instructions from fronting MMIO backed register space and I believe it was a design considerations and a plausible implementation choice. However, the specified instructions for accessing processor state use an immediate. This simplifies implementation. Indirection of access to CSRs via a register would remove the ability to rename and force serialisation as CSRs can change the state of instructions before and after them. This would be similar to loads and stores to IO space which need to be ordered. The current design supports tiny MCUs up to large multi-core OoO application processors.

  • Micro controllers have different memory maps

The only thing limiting binary compatibility between bare metal apps are typically a linker script because the “memory map” differs between implementations and they require different device drivers. Bare metal apps need to have custom chip bringup code for the MCU which is part of a BSP (Board Support Package). Fortunately the privileged ISA is a constant across implementations. Moving privileged ISA function into a memory map won't improve this situation. It will worsen binary compatibility. Higher level OSes like Linux have user level ABIs and virtual memory to hide the physical memory map visible to the OS which makes binary portability easier at higher layers in the application stack. Bare metal code typically depends on a specific memory map but good design can factor out the differences between different processors from different vendors.

Many RISC-V vendors are actively working on solutions to these problems. For medium size systems there is even the possibility of implementing arm’s EBBR standard which includes a cut down version of UEFI designed to work with device-tree instead of ACPI. The interface surface area is tractable for moderately sized embedded systems.

For smaller MCUs, the memory map and devices are likely to be unique. Systems that have scratchpads that may be too small to hold device-tree parser (like SiFive’s HiFive1) will of course need custom linker scripts and custom BSPs. This is par for the course for the type of system that when scaled may cost several cents and can be used on a smart conference badge and in systems that are in the 1mm2 range excluding packaging.

  • Standard privilege status and control registers allow for portable bare-metal code

The standard machine mode registers minimise friction when adapting code to processors with different memory maps because developers can rely on a standard control mechanism for traps (interrupts and exceptions).

  • An ISA can’t disallow software, on the contrary it is designed to support it

arm’s EBBR subset of UEFI is actually not that onerous and provides a relatively clean interface for binary compatible booting on medium size embedded devices. It is not appropriate for the smallest of implementations that just depend on the presence of the 11 CRSs mentioned above. But given RISC-V is an ISA, it can’t prevent someone from porting UEFI, PE/COFF, coreboot, u-boot, or any OS for that matter. The ISA can however enforce binary compatibility at the M-mode level.

  • Secure implementations that support digital right management are supported

Mask ROM code that verifies EEPROM payload with signature checks using a public key in OTP are supported e.g. a Trusted Computing Base. RISC-V member companies are actively working on boot integrity across heterogenous RISC-V systems. Customers of chip vendors that have intellectual property to protect are not excluded. RISC-V is agnostic towards end-use and doesn’t have any restrictions on endeavours besides compliance with the technical requirements of the ISA, for reasons of binary compatibility.

  • RISC-V has several ISA variants

At the moment MCUs and application processors with the same ISA share the same calling convention, but there are several ISA variants with different calling conventions in the RISC-V suite depending on the presence of F, D, E. The C extension also creates an ISA variant (GC code is not compatible with G), hence its presence in ‘misa’.

  • MCUs don’t need to save/restore all registers

In the future, users of the open source tools will be able to do things for the MCU profile like hide the ISR setup and entry assembly behind C/C++ attributes, so programmers don’t need to worry about these low-level details. It is possible, today, with existing tools, to model an MCU ABI that has less register save restore overhead by compiling ISRs (bottom half) with a different set of registers to top half code. It is not necessary to make wholesale changes to the Privileged ISA to achieve this. Optimising trap/entry exit clearly requires some thought and using the standard C ABI may not be optimal. Luckily we can write bare functions and use inline asm, etc.

Save/restore overhead can be reduced now with thoughtful use of compiler flags (-ffixed-reg) or hand coded assembly. Special compiler support will make this even easier in the future. Also, if code is purely interrupt driven, then ISRs can also avoid save/restore alttogether. They are many techniques to minimise interrupt overhead that don’t require ISA changes. Recursive interrupts are of course a distinct issue that requires thoughtful design… and I suspect will be addressed in a future version of the spec, in an evolutionary vs revolutionary manner.

When a competitive RISC-V system can run at an order of magnitude faster clock speed in the same process and area, then claims of these overheads are “bunkem”

  • Is forking the RISC-V ISA a good idea

Folk are free to fork the architecture , as it is CC licensed, and folk can even call it RISC-V if they comply with the specifications and if implementing a processor, an implementation need to implement the 11 or so M-mode registers (and several more wired to 0). The User-Level ISA can only be used alone as part of an AEE. This is outlined in the current specs. Custom additions have to follow the conventions set out in the specification.

  • Should RISC-V trademark rules should be enforced

Members could potentially be violating the RISC-V trademark usage guidelines and I believe they should be enforced:

  • https://riscv.org/risc-v-trademark-usage/

Example 1: https://emb-riscv.github.io/

Implementation proposal that does not comply with the minimal M mode requirements and may not be RISC-V compliant. The “Embedded RISC-V” initiative may very well comply with the Base ISA however as far as I am aware, a complete processor must implement M mode unless it only aims for AEE compliance. Use of the RISC-V logo in a way that suggests endorsement from the foundation without explicit permission should be questioned e.g. is “Embedded RISC-V” the official embedded working group and who is the chair? Using something like X-Embedded might be less risky assuming this may or may not be the Foundation’s official Embedded Working Group? It is hard to tell. It is suggestive.

Example 2: https://github.com/cliffordwolf/xbitmanip/blob/master/xbitmanip-draft.pdf

Uses X- prefix, extends the specifications, doesn’t modify the RISC-V logo. Clearly fair use.

  • Do we need an embedded working group.

I’d like to know more about the embedded working group. I think it would be a disservice to the other foundation members if it was run by one member acting without consideration of the existing specifications and the needs of other members. I imagine minimising binary incompatibility would be a mandate for the group with an objective to create “minimal” differences or additions to the Privileged ISA versus a radical departure that throws out the most minimal portion of the Privileged ISA.

  • Folk should be free to experiment, within reasonable bounds

Certainly there needs to be a balance of freedom to experiment with the RISC-V architecture i.e. academic or research use, versus commercial implementations that would be subject to compliance assessment. Look at how other commercial and individual members of the RISC-V Foundation use the RISC-V logo and represent their custom “extensions”. Very carefully. e.g. preceding specifications with X or noting said specifications are “unofficial proposals”. My advice would be to avoid wholesale replacement of portions of the specification and representing it as “Industrial RISC-V” and the “RISC-V Industrial Profile” versus “RISC-V X-Industrial Profile”. Someone could easily perceive these as a projects that are endorsed by the foundation.

The mandatory portions for a minimal processor implementing M-mode and RVI are indeed by all accounts small, so if an additive X-custom micro controller profile is available, it may very well be accepted, assuming it is compatible.

  • RISC-V ISA is open but agnostic to free and open source versus proprietary implementations alike

Regarding a Trusted Computing Base, RISC-V is available for use by proprietary and open source implementations alike. This is clearly stated on the foundation website. If implementations were restricted to the hardware equivalent of GPL, then adoption in industry would be very limited. The choice for on an open standard ISA is out of pragmatism (cost reduction, shared common interest, industry competitive ISA that is also a base for computer architecture research). It is not idealogical (anti-DRM, tit-for-tat licensing schemes, prevents proprietary usage or proprietary additions, or alternatively prevents open usage or open additions). Many RISC-V Foundation members have intellectual property they want to continue to protect and RISC-V is completely open to supporting these implementations.

  • RISC-V Base ISA requires 2-read ports 1-write port

Newcomers to the list might propose things that are inappropriate based on design decisions that are already set in stone or frozen. We should maintain a list FAQ for things that have already been discussed on the list, such as instructions that require 3 read ports. FMA in F and D is an exception and why. The Vector ISA allows for predicated operations and the intent, as i’ve witnessed it, is to keep the implementation requirements for the Base ISA to 2-read ports 1-write port. This means two input operands. The Base ISA has no exceptions to this rule. F and D which are optional extensions have some instructions with 3 input operands and/or use implicit state. e.g. floating point instructions read ‘frm’ and write to ‘fflags’. We can then simply reply with a pointer to the FAQ.

  • Inflammatory language vs neutral tone

Avoid inflammatory language and slang on the list. Words such as “bunkem” and “treacherous” are examples of words that are not appropriate for use on the list. “misinformation” is a more neutral and correct. Avoid sensationalising issues and/or grandstanding.

  • Long emails

If you want to send long emails, keep their frequency very low. I’ve added bullets to this email so folk could skip ahead. i.e. “brevity is the sole of wit”. A long email every few weeks is better than occupying > 50% of the list bandwidth with distant goals when there are more immediate and practical issues to solve. This involves discussing and submitting edits to the “existing” specs versus occupying the list with a deluge of radical departures from the current ISA specifications. Post at a low frequency and gather feedback off list if you write very long proposals, link to them

  • Fragmentation, gossip, opinion and speculation

Fragmentation, gossip, opinion and speculation on this list is harmful. We need to keep the discussions on this list technical and refrain from industry gossip, fear mongering and opinion. Let’s keep things technical and let’s focus this list on small incremental additions to the parts of the ISA that are not frozen. I thought discussing something like a SELECT instruction was quite controversial (3 operand form of conditional move that requires a third bit-line read port and a zero comparator on each physical register). Very uncontroversial in comparison to the recent rampant expletive filled sagas on this list.

  • Inclusivity and digesting

The list should remain open, inclusive and friendly towards newcomers. If the discussion veers off topic, or becomes time consuming, point someone to a book, FAQ or other material. Newcomers however should not post material at a rate that a large number of members on the list can’t possibly digest. Care for other peoples consciousness and their ability to digest information. Its possible to overload people and occupy peoples consciousness to their detriment if they are regular readers of this list.

  • My own view. I’m not speaking on behalf of the foundation or my employer

This should be implicit. This is a public list. I’m speaking in my personal capacity. I would not dare to represent anything as RISC-V without appropriate approval. Discussing the RISC-V ISA is on-topic on this list. Proposing additions to the official specs via established channels such as the working groups and this mailing list is on topic.