Initial work.
[riscv-talks.git] / 2016-redhat / 2050-chisel.html
diff --git a/2016-redhat/2050-chisel.html b/2016-redhat/2050-chisel.html
new file mode 100644 (file)
index 0000000..938e9a9
--- /dev/null
@@ -0,0 +1,27 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>What is RISC-V?</h1>
+
+<pre style="font-size: smaller;">
+val id_illegal_insn = !id_ctrl.legal ||
+    id_ctrl.div &amp;&amp; !csr.io.status.isa('m'-'a') ||
+    id_ctrl.amo &amp;&amp; !csr.io.status.isa('a'-'a') ||
+    id_ctrl.fp &amp;&amp; !(csr.io.status.fs.orR &amp;&amp; csr.io.status.isa('f'-'a')) ||
+    id_ctrl.dp &amp;&amp; !csr.io.status.isa('d'-'a') ||
+    ibuf.io.inst(0).bits.rvc &amp;&amp; !csr.io.status.isa('c'-'a') ||
+    id_ctrl.rocc &amp;&amp; !(csr.io.status.xs.orR &amp;&amp; csr.io.status.isa('x'-'a'))
+// stall decode for fences (now, for AMO.aq; later, for AMO.rl and FENCE)
+val id_amo_aq = id_inst(0)(26)
+val id_amo_rl = id_inst(0)(25)
+val id_fence_next = id_ctrl.fence || id_ctrl.amo &amp;&amp; id_amo_rl
+val id_mem_busy = !io.dmem.ordered || io.dmem.req.valid
+val id_rocc_busy = Bool(usingRoCC) &amp;&amp;
+    (io.rocc.busy || ex_reg_valid &amp;&amp; ex_ctrl.rocc ||
+     mem_reg_valid &amp;&amp; mem_ctrl.rocc || wb_reg_valid &amp;&amp; wb_ctrl.rocc)
+id_reg_fence := id_fence_next || id_reg_fence &amp;&amp; id_mem_busy
+val id_do_fence = id_rocc_busy &amp;&amp; id_ctrl.fence ||
+    id_mem_busy &amp;&amp; (id_ctrl.amo &amp;&amp; id_amo_aq || id_ctrl.fence_i || id_reg_fence
+                            &amp;&amp; (id_ctrl.mem || id_ctrl.rocc) || id_csr_en)
+</pre>