<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RISC-V Architecture Training on When Moore's Law Ends</title><link>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/</link><description>Recent content in RISC-V Architecture Training on When Moore's Law Ends</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 28 Nov 2019 00:00:00 +0000</lastBuildDate><atom:link href="https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/index.xml" rel="self" type="application/rss+xml"/><item><title>Dec. 2019 verion Full List</title><link>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/dec-2019-verion-full-list/</link><pubDate>Thu, 28 Nov 2019 00:00:00 +0000</pubDate><guid>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/dec-2019-verion-full-list/</guid><description>&lt;h2 id="list-of-training-content">List of training content&lt;a class="anchor" href="#list-of-training-content">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/schedule/">[RISC-V Architecture Training] Schedule&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/introduction-of-risc-v-open-isa/">[RISC-V Architecture Training] Introduction of RISC-V Open ISA&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/basics-unprivileged-specification/">[RISC-V Architecture Training] Basics &amp;amp; Unprivileged Specification&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/privileged-architecture/">[RISC-V Architecture Training] Privileged Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/computer-architecture-with-risc-v-examples/">[RISC-V Architecture Training] Computer Architecture with RISC-V Examples&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/uncore/">[RISC-V Architecture Training] Uncore&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Basics &amp; Unprivileged Specification</title><link>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/basics-unprivileged-specification/</link><pubDate>Wed, 27 Nov 2019 00:00:00 +0000</pubDate><guid>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/basics-unprivileged-specification/</guid><description>&lt;h2 id="risc-v-spec">RISC-V SPEC&lt;a class="anchor" href="#risc-v-spec">#&lt;/a>&lt;/h2>
&lt;p>&lt;a href="https://riscv.org/specifications">https://riscv.org/specifications&lt;/a> (official version v1.10)&lt;/p>
&lt;p>&lt;a href="https://github.com/riscv/riscv-isa-manual">https://github.com/riscv/riscv-isa-manual&lt;/a> (source code)&lt;/p>
&lt;h3 id="user-level-isa-unpriviledged">User-level ISA (unpriviledged)&lt;a class="anchor" href="#user-level-isa-unpriviledged">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>All the basic instructions, and extensions&lt;/li>
&lt;li>Memory model&lt;/li>
&lt;/ul>
&lt;h3 id="priviledged-isa">Priviledged ISA&lt;a class="anchor" href="#priviledged-isa">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Priviledge level: M (machine), H (hypervisor), S (supervisor), U (user)&lt;/li>
&lt;li>CSR (control status register)&lt;/li>
&lt;li>Virtual-memory system&lt;/li>
&lt;/ul>
&lt;h3 id="debug--trace">Debug &amp;amp; Trace&lt;a class="anchor" href="#debug--trace">#&lt;/a>&lt;/h3>
&lt;h2 id="first-impression-isa-subsets">First impression: ISA subsets&lt;a class="anchor" href="#first-impression-isa-subsets">#&lt;/a>&lt;/h2>
&lt;h3 id="risc-v-is-a-family-of-isas">RISC-V is a family of ISAs&lt;a class="anchor" href="#risc-v-is-a-family-of-isas">#&lt;/a>&lt;/h3>
&lt;p>Divided into several subsets: I, M, A, F, D, C, …&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;em>Domain-specific architecture&lt;/em> (by David Patterson)&lt;/p>
&lt;ul>
&lt;li>The ending of Moore’s Law =&amp;gt; domain-specific architecture is the future of computing&lt;/li>
&lt;li>Too costy to be “general purpose” anymore
&lt;ul>
&lt;li>Too many new domains&lt;/li>
&lt;li>Not enough transistors or power to be general purpose&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>E.g. TPU-like xPU for AI computing&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>RISC-V ISA’s approach&lt;/p></description></item><item><title>Computer Architecture with RISC-V Examples</title><link>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/computer-architecture-with-risc-v-examples/</link><pubDate>Wed, 27 Nov 2019 00:00:00 +0000</pubDate><guid>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/computer-architecture-with-risc-v-examples/</guid><description>&lt;h2 id="computer-architecture-basics">Computer architecture basics&lt;a class="anchor" href="#computer-architecture-basics">#&lt;/a>&lt;/h2>
&lt;h3 id="pipeline--parallelism--cache">Pipeline / Parallelism / Cache&lt;a class="anchor" href="#pipeline--parallelism--cache">#&lt;/a>&lt;/h3>
&lt;p>Three ultimate mechanisms to imporve performance/power&lt;/p>
&lt;h2 id="computer-architecture-basics--pipeline">Computer architecture basics / pipeline&lt;a class="anchor" href="#computer-architecture-basics--pipeline">#&lt;/a>&lt;/h2>
&lt;p>&lt;img src="https://jimwang99.github.io/legacy-media/arch-pipeline.png" alt="pic" />&lt;/p>
&lt;p>IF = Instruction Fetch, ID = Instruction Decode, EX = Execute, MEM = Memory access, WB = Register write back).&lt;/p>
&lt;h2 id="computer-architecture-basics--pipeline-1">Computer architecture basics / pipeline&lt;a class="anchor" href="#computer-architecture-basics--pipeline-1">#&lt;/a>&lt;/h2>
&lt;h3 id="demo">@DEMO&lt;a class="anchor" href="#demo">#&lt;/a>&lt;/h3>
&lt;p>Pipeline simulator: &lt;a href="https://github.com/mortbopet/Ripes">https://github.com/mortbopet/Ripes&lt;/a>&lt;/p>
&lt;h2 id="computer-architecture-basics--pipeline-2">Computer architecture basics / pipeline&lt;a class="anchor" href="#computer-architecture-basics--pipeline-2">#&lt;/a>&lt;/h2>
&lt;h3 id="motivation">Motivation&lt;a class="anchor" href="#motivation">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Most of the work &lt;strong>cannot&lt;/strong> be done at the same time.&lt;/li>
&lt;li>To use the logic more efficiently&lt;/li>
&lt;li>Less work per stage, higher clock frequency&lt;/li>
&lt;/ul>
&lt;h3 id="brings-in-problems-hazards">Brings in problems: hazards&lt;a class="anchor" href="#brings-in-problems-hazards">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Data hazard
&lt;ul>
&lt;li>Dependency&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;pre tabindex="0">&lt;code>mv	x1, x2
add	x4, x1, x3
sd	x4, 0(x5)&lt;/code>&lt;/pre>&lt;ul>
&lt;li>Control hazard
&lt;ul>
&lt;li>Jump and branch&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;pre tabindex="0">&lt;code>addi	x1, x1, 1
subi	x2, x1, 100
bnez	x2, 0(x3)&lt;/code>&lt;/pre>&lt;p>.co-4[&lt;/p></description></item><item><title>Introduction of RISC-V Open ISA</title><link>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/introduction-of-risc-v-open-isa/</link><pubDate>Wed, 27 Nov 2019 00:00:00 +0000</pubDate><guid>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/introduction-of-risc-v-open-isa/</guid><description>&lt;h2 id="what-is-isa">What is ISA?&lt;a class="anchor" href="#what-is-isa">#&lt;/a>&lt;/h2>
&lt;h3 id="contract-between-software-and-hardware">Contract between software and hardware.&lt;a class="anchor" href="#contract-between-software-and-hardware">#&lt;/a>&lt;/h3>
&lt;p>&lt;img src="https://jimwang99.github.io/legacy-media/isa-demo.png" alt="pic" />&lt;/p>
&lt;h2 id="what-is-risc">What is RISC?&lt;a class="anchor" href="#what-is-risc">#&lt;/a>&lt;/h2>
&lt;h3 id="reduced-instruction-set-computer">Reduced instruction set computer&lt;a class="anchor" href="#reduced-instruction-set-computer">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Small set of simple/general instructions + load/store architecture
&lt;ul>
&lt;li>Optimize hardware to be simple and faster&lt;/li>
&lt;li>Software-centric design: rely on compiler + software&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>&lt;strong>CISC&lt;/strong>&lt;/th>
 &lt;th>&lt;strong>RISC&lt;/strong>&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Emphasis on hardware&lt;/td>
 &lt;td>Emphasis on software&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Includes multi-clock complex instructions&lt;/td>
 &lt;td>Single-clock, reduced instruction only&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Memory-to-memory: “LOAD” and “STORE” incorporated in instructions&lt;/td>
 &lt;td>Register to register: “LOAD” and “STORE” are independent instructions&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Small code sizes, high cycles per second&lt;/td>
 &lt;td>Low cycles per second, large code sizes&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Transistors used for storing complex instructions&lt;/td>
 &lt;td>Spends more transistors on memory registers&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>E.g. Alpha (DEC), SPARC (SUN), MIPS (now Wave), Power (IBM), ARM&lt;/li>
&lt;/ul>
&lt;h2 id="what-is-risc-1">What is RISC?&lt;a class="anchor" href="#what-is-risc-1">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>John Hennessy &amp;amp; David Patterson
&lt;ul>
&lt;li>Authers of computer architecture bible “Computer Architecture: A Quantitative Approach” (for graduates)&lt;/li>
&lt;li>Also “Computer Organization and Design” (for undergraduates)&lt;/li>
&lt;li>Turing Award 2017&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://jimwang99.github.io/legacy-media/computer-architecture-book.png" alt="pic" />&lt;/p></description></item><item><title>Privileged Architecture</title><link>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/privileged-architecture/</link><pubDate>Wed, 27 Nov 2019 00:00:00 +0000</pubDate><guid>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/privileged-architecture/</guid><description>&lt;h2 id="privileged-architecture">Privileged architecture&lt;a class="anchor" href="#privileged-architecture">#&lt;/a>&lt;/h2>
&lt;h3 id="purpose-of-privileged-architecture">Purpose of privileged architecture&lt;a class="anchor" href="#purpose-of-privileged-architecture">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>
&lt;p>To manage and protect shared resources&lt;/p>
&lt;ul>
&lt;li>Memory, IO devices, even cores&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Also needs to decouple implementation details&lt;/p>
&lt;ul>
&lt;li>Handle unimplemented operations: software emulation&lt;/li>
&lt;li>Handle async events (interrupts): IO, timer, software&lt;/li>
&lt;li>Hypervisor support: 2-level address translation&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="therefore-we-have">Therefore, we have&lt;a class="anchor" href="#therefore-we-have">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>4 privilege modes: U, S, H, M&lt;/li>
&lt;li>PMP/PMA (physical memory protection/attributes)&lt;/li>
&lt;li>Virtual memory&lt;/li>
&lt;li>Interrupts and exceptions&lt;/li>
&lt;li>And a bunch of CSRs to serve these functionality&lt;/li>
&lt;/ul>
&lt;h2 id="privileged-architecture--software-stack-layers">Privileged architecture / software stack layers&lt;a class="anchor" href="#privileged-architecture--software-stack-layers">#&lt;/a>&lt;/h2>
&lt;h3 id="4-different-kinds-of-platforms">4 different kinds of platforms&lt;a class="anchor" href="#4-different-kinds-of-platforms">#&lt;/a>&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Platforms&lt;/th>
 &lt;th>Modes&lt;/th>
 &lt;th>Trust&lt;/th>
 &lt;th>Memory protection&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Embedded w/o protection (most MCUs)&lt;/td>
 &lt;td>M&lt;/td>
 &lt;td>All&lt;/td>
 &lt;td>Non&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Embedded w/ protection (RTOS scenario)&lt;/td>
 &lt;td>M+U&lt;/td>
 &lt;td>Application&lt;/td>
 &lt;td>Physical memory protection&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>OS capable (Linux, and etc.)&lt;/td>
 &lt;td>M+S+U&lt;/td>
 &lt;td>OS&lt;/td>
 &lt;td>Virtual memory&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cloud OS capable (multiple OS running on the same hardware)&lt;/td>
 &lt;td>M+H+S+U&lt;/td>
 &lt;td>Hypervisor&lt;/td>
 &lt;td>2 level of virtual memory&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="privileged-architecture--software-stack-layers-1">Privileged architecture / software stack layers&lt;a class="anchor" href="#privileged-architecture--software-stack-layers-1">#&lt;/a>&lt;/h2>
&lt;p>&lt;img src="https://jimwang99.github.io/legacy-media/privileged-arch-layers.png" alt="pic" />&lt;/p></description></item><item><title>Schedule</title><link>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/schedule/</link><pubDate>Wed, 27 Nov 2019 00:00:00 +0000</pubDate><guid>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/schedule/</guid><description>&lt;h2 id="momentum-2018-risc-v-summit">Momentum: 2018 RISC-V Summit&lt;a class="anchor" href="#momentum-2018-risc-v-summit">#&lt;/a>&lt;/h2>
&lt;h2 id="fun-moment-anti-riscv-website-by-arm">Fun moment: anti-RISCV website by ARM&lt;a class="anchor" href="#fun-moment-anti-riscv-website-by-arm">#&lt;/a>&lt;/h2>
&lt;p>&lt;img src="https://jimwang99.github.io/legacy-media/riscv-basics.com-screenshot.jpg" alt="pic" />&lt;/p>
&lt;h2 id="schedule">Schedule&lt;a class="anchor" href="#schedule">#&lt;/a>&lt;/h2>
&lt;h3 id="2-day-x-8-hour">2-day x 8-hour&lt;a class="anchor" href="#2-day-x-8-hour">#&lt;/a>&lt;/h3>
&lt;h3 id="step-by-step">Step-by-step&lt;a class="anchor" href="#step-by-step">#&lt;/a>&lt;/h3>
&lt;h3 id="lecture--demo--diy">Lecture + demo + DIY&lt;a class="anchor" href="#lecture--demo--diy">#&lt;/a>&lt;/h3>
&lt;h2 id="schedule--day-1-morning">Schedule / Day 1 morning&lt;a class="anchor" href="#schedule--day-1-morning">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Schedule and self-introduction&lt;/strong>&lt;/li>
&lt;li>&lt;strong>Introduction of RISC-V open ISA&lt;/strong>
&lt;ul>
&lt;li>History and current status of ecosystem&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>RISC-V ISA: unprivileged spec&lt;/strong>
&lt;ul>
&lt;li>Basic RISC-V ISA: key concepts&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>DIY 0: setup course DIY env&lt;/strong>
&lt;ul>
&lt;li>Quick introduction of DIY env used in this course&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;em>Lunch break&lt;/em>&lt;/li>
&lt;/ul>
&lt;h2 id="schedule--day-1-afternnon">Schedule / Day 1 afternnon&lt;a class="anchor" href="#schedule--day-1-afternnon">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Demo 1: compile assembly code and simulate on SPIKE&lt;/strong>&lt;/p></description></item><item><title>Uncore</title><link>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/uncore/</link><pubDate>Wed, 27 Nov 2019 00:00:00 +0000</pubDate><guid>https://jimwang99.github.io/posts/architecture/risc-v-architecture-training/uncore/</guid><description>&lt;p>–&lt;/p>
&lt;h2 id="uncore">Uncore&lt;a class="anchor" href="#uncore">#&lt;/a>&lt;/h2>
&lt;h3 id="cpu-core-is-fun-but-uncore-is-the-real-work">CPU core is fun, but uncore is the real work.&lt;a class="anchor" href="#cpu-core-is-fun-but-uncore-is-the-real-work">#&lt;/a>&lt;/h3>
&lt;h2 id="uncore--components">Uncore / components&lt;a class="anchor" href="#uncore--components">#&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Cache (already discussed)&lt;/li>
&lt;li>Interrupt controller&lt;/li>
&lt;li>Network Fabric&lt;/li>
&lt;li>Debug&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="https://jimwang99.github.io/legacy-media/uncore-diagram.png" alt="pic" />&lt;/p>
&lt;h2 id="interrupt-recap">Interrupt recap&lt;a class="anchor" href="#interrupt-recap">#&lt;/a>&lt;/h2>
&lt;p>3 types of interrupts&lt;/p>
&lt;ul>
&lt;li>External: peripheral devices&lt;/li>
&lt;li>Software: inter-processor interrupt&lt;/li>
&lt;li>Timer: timely schedule tasks&lt;/li>
&lt;/ul>
&lt;h3 id="plic-platform-level-interrupt-controller">PLIC (platform level interrupt controller)&lt;a class="anchor" href="#plic-platform-level-interrupt-controller">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>For external interrupts&lt;/li>
&lt;li>Aggregation of multiple external interrupts
&lt;ul>
&lt;li>Provide enable/priority&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="clint-core-level-interruptor">CLINT (core level interruptor)&lt;a class="anchor" href="#clint-core-level-interruptor">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>For software &amp;amp; timer interrupts&lt;/li>
&lt;li>Provide memory-mapped software/timer interrupt CSRs&lt;/li>
&lt;/ul>
&lt;h2 id="plic-platform-level-interrupt-controller-1">PLIC (platform-level interrupt controller)&lt;a class="anchor" href="#plic-platform-level-interrupt-controller-1">#&lt;/a>&lt;/h2>
&lt;h3 id="msi-vs-irq">MSI vs. IRQ&lt;a class="anchor" href="#msi-vs-irq">#&lt;/a>&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>MSI (message signaled interrupt)&lt;/th>
 &lt;th>IRQ (physical wired interrupt)&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Relatively newer&lt;/td>
 &lt;td>Traditional and easy to understand&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>More complex device and interrupt controller&lt;/td>
 &lt;td>Simple to implement. Widely supported&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Scalable, especially for morden large SoCs&lt;/td>
 &lt;td>Don’t scale well&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>In-band access, easy for timing/clock/etc.&lt;/td>
 &lt;td>Out-of-band, nightmare for physical design if many&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="interrupt-controller-for-risc-v-plic">Interrupt controller for RISC-V: PLIC&lt;a class="anchor" href="#interrupt-controller-for-risc-v-plic">#&lt;/a>&lt;/h3>
&lt;ul>
&lt;li>Simple &amp;amp; easy to use&lt;/li>
&lt;li>IRQ-style interrupt aggregator&lt;/li>
&lt;li>Support programmable priority and enable&lt;/li>
&lt;li>Support multiple source and multiple target&lt;/li>
&lt;/ul>
&lt;h2 id="plic--function-diagram">PLIC / function diagram&lt;a class="anchor" href="#plic--function-diagram">#&lt;/a>&lt;/h2>
&lt;p>IRQ-style interrupt aggregator that support &lt;strong>enable/priority&lt;/strong> and &lt;strong>claim/complete&lt;/strong> flow&lt;/p></description></item></channel></rss>