Compare commits
2 commits
441fb82411
...
e9aaaec5f1
Author | SHA1 | Date | |
---|---|---|---|
Jacob Lifshay | e9aaaec5f1 | ||
Jacob Lifshay | 0442390142 |
|
@ -13,17 +13,15 @@ jobs:
|
|||
- uses: https://code.forgejo.org/actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Install latest mdbook
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
apt-get update -qq
|
||||
apt-get install -qq jq
|
||||
tag="$(curl 'https://api.github.com/repos/rust-lang/mdbook/releases/latest' | jq -r '.tag_name')"
|
||||
url="https://github.com/rust-lang/mdbook/releases/download/${tag}/mdbook-${tag}-x86_64-unknown-linux-gnu.tar.gz"
|
||||
mkdir mdbook
|
||||
curl -sSL "$url" | tar -xz --directory=./mdbook
|
||||
echo "`pwd`"/mdbook >> $GITHUB_PATH
|
||||
apt-get install -qq dia python3
|
||||
scripts/install_deps.sh
|
||||
echo "`pwd`"/bin >> $GITHUB_PATH
|
||||
- name: Build Book
|
||||
run: |
|
||||
mdbook-mermaid install .
|
||||
mdbook build
|
||||
- name: Push to rendered branch
|
||||
run: |
|
||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1 +1,4 @@
|
|||
book
|
||||
/*.tar.gz
|
||||
/mermaid.min.js
|
||||
*.dia.svg
|
11
book.toml
11
book.toml
|
@ -11,6 +11,12 @@ edition = "2021"
|
|||
|
||||
[preprocessor.links]
|
||||
|
||||
[preprocessor.mermaid]
|
||||
command = "mdbook-mermaid"
|
||||
|
||||
[preprocessor.dia]
|
||||
command = "scripts/mdbook-dia.py"
|
||||
|
||||
[output.html]
|
||||
mathjax-support = true
|
||||
no-section-label = true
|
||||
|
@ -19,6 +25,11 @@ git-repository-icon = "fa-git"
|
|||
# edit-url-template = "https://git.libre-chip.org/libre-chip/website/FIXME/{path}"
|
||||
input-404 = "404.md"
|
||||
additional-css = ["src/custom.css"]
|
||||
additional-js = ["mermaid.min.js", "mermaid-init.js"]
|
||||
|
||||
[output.html.print]
|
||||
enable = false
|
||||
|
||||
[output.html.fold]
|
||||
enable = true
|
||||
level = 1
|
35
mermaid-init.js
Normal file
35
mermaid-init.js
Normal file
|
@ -0,0 +1,35 @@
|
|||
(() => {
|
||||
const darkThemes = ['ayu', 'navy', 'coal'];
|
||||
const lightThemes = ['light', 'rust'];
|
||||
|
||||
const classList = document.getElementsByTagName('html')[0].classList;
|
||||
|
||||
let lastThemeWasLight = true;
|
||||
for (const cssClass of classList) {
|
||||
if (darkThemes.includes(cssClass)) {
|
||||
lastThemeWasLight = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const theme = lastThemeWasLight ? 'default' : 'dark';
|
||||
mermaid.initialize({ startOnLoad: true, theme });
|
||||
|
||||
// Simplest way to make mermaid re-render the diagrams in the new theme is via refreshing the page
|
||||
|
||||
for (const darkTheme of darkThemes) {
|
||||
document.getElementById(darkTheme).addEventListener('click', () => {
|
||||
if (lastThemeWasLight) {
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
for (const lightTheme of lightThemes) {
|
||||
document.getElementById(lightTheme).addEventListener('click', () => {
|
||||
if (!lastThemeWasLight) {
|
||||
window.location.reload();
|
||||
}
|
||||
});
|
||||
}
|
||||
})();
|
12
scripts/install_deps.sh
Executable file
12
scripts/install_deps.sh
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
curl -sSL -o mdbook.tar.gz https://github.com/rust-lang/mdBook/releases/download/v0.4.40/mdbook-v0.4.40-x86_64-unknown-linux-gnu.tar.gz
|
||||
curl -sSL -o mdbook-mermaid.tar.gz https://github.com/badboy/mdbook-mermaid/releases/download/v0.14.0/mdbook-mermaid-v0.14.0-x86_64-unknown-linux-gnu.tar.gz
|
||||
sha256sum -c <<EOF
|
||||
37364965fb190cf9929d93c930c6b6c69b2fed05f7658ea2d312882ed59c645e mdbook-mermaid.tar.gz
|
||||
9ef07fd288ba58ff3b99d1c94e6d414d431c9a61fdb20348e5beb74b823d546b mdbook.tar.gz
|
||||
EOF
|
||||
mkdir -p bin
|
||||
echo "*" > bin/.gitignore
|
||||
tar -xz --directory=./bin -f mdbook.tar.gz
|
||||
tar -xz --directory=./bin -f mdbook-mermaid.tar.gz
|
26
scripts/mdbook-dia.py
Executable file
26
scripts/mdbook-dia.py
Executable file
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/env python3
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
def main():
|
||||
if len(sys.argv) > 1:
|
||||
if sys.argv[1] == "supports":
|
||||
sys.exit(0)
|
||||
sys.exit(1)
|
||||
out = sys.stdout
|
||||
sys.stdout = sys.stderr
|
||||
context, book = json.load(sys.stdin)
|
||||
src: Path = Path(context["root"]) / context["config"]["book"]["src"]
|
||||
for root, dirs, files in os.walk(src):
|
||||
for file in files:
|
||||
file = Path(root) / file
|
||||
if file.suffix == ".dia":
|
||||
out_file = file.with_suffix(".dia.svg")
|
||||
subprocess.run(["dia", "-n", "-e", out_file, file], check=True)
|
||||
print(json.dumps(book), file=out)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
|
@ -1,4 +1,5 @@
|
|||
* [Libre-Chip](README.md)
|
||||
* [Proposal for Libre-Chip's First CPU Architecture (Draft)](first_arch/index.md)
|
||||
* [Conduct](Conduct.md)
|
||||
* [License](LICENSE.md)
|
||||
* [GPL 3.0](gpl-3.0.md)
|
||||
|
|
145
src/first_arch/architecture.dia
Normal file
145
src/first_arch/architecture.dia
Normal file
|
@ -0,0 +1,145 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
|
||||
<dia:diagramdata>
|
||||
<dia:attribute name="background">
|
||||
<dia:color val="#ffffffff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="pagebreak">
|
||||
<dia:color val="#000099ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="paper">
|
||||
<dia:composite type="paper">
|
||||
<dia:attribute name="name">
|
||||
<dia:string>#Letter#</dia:string>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="tmargin">
|
||||
<dia:real val="2.5399999618530273"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="bmargin">
|
||||
<dia:real val="2.5399999618530273"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="lmargin">
|
||||
<dia:real val="2.5399999618530273"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="rmargin">
|
||||
<dia:real val="2.5399999618530273"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="is_portrait">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="scaling">
|
||||
<dia:real val="1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="fitto">
|
||||
<dia:boolean val="false"/>
|
||||
</dia:attribute>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="grid">
|
||||
<dia:composite type="grid">
|
||||
<dia:attribute name="dynamic">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="width_x">
|
||||
<dia:real val="0.125"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="width_y">
|
||||
<dia:real val="0.125"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="visible_x">
|
||||
<dia:int val="1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="visible_y">
|
||||
<dia:int val="1"/>
|
||||
</dia:attribute>
|
||||
<dia:composite type="color"/>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="color">
|
||||
<dia:color val="#d8e5e5ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="guides">
|
||||
<dia:composite type="guides">
|
||||
<dia:attribute name="hguides"/>
|
||||
<dia:attribute name="vguides"/>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="display">
|
||||
<dia:composite type="display">
|
||||
<dia:attribute name="antialiased">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="snap-to-grid">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="snap-to-object">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="show-grid">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="show-connection-points">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
</dia:diagramdata>
|
||||
<dia:layer name="Background" visible="true" connectable="true" active="true">
|
||||
<dia:object type="Standard - Box" version="0" id="O0">
|
||||
<dia:attribute name="obj_pos">
|
||||
<dia:point val="1,1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="obj_bb">
|
||||
<dia:rectangle val="0.95,0.95;10.05,9.05"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_corner">
|
||||
<dia:point val="1,1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_width">
|
||||
<dia:real val="9"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_height">
|
||||
<dia:real val="8"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="show_background">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
</dia:object>
|
||||
<dia:object type="Standard - Text" version="1" id="O1">
|
||||
<dia:attribute name="obj_pos">
|
||||
<dia:point val="5.5,5"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="obj_bb">
|
||||
<dia:rectangle val="5.5,4.38732;7.40612,5.18818"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="text">
|
||||
<dia:composite type="text">
|
||||
<dia:attribute name="string">
|
||||
<dia:string>#TODO#</dia:string>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="font">
|
||||
<dia:font family="sans" style="0" name="Helvetica"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="height">
|
||||
<dia:real val="0.80000000000000004"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="pos">
|
||||
<dia:point val="5.5,5"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="color">
|
||||
<dia:color val="#000000ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="alignment">
|
||||
<dia:enum val="0"/>
|
||||
</dia:attribute>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="valign">
|
||||
<dia:enum val="3"/>
|
||||
</dia:attribute>
|
||||
<dia:connections>
|
||||
<dia:connection handle="0" to="O0" connection="8"/>
|
||||
</dia:connections>
|
||||
</dia:object>
|
||||
</dia:layer>
|
||||
</dia:diagram>
|
17
src/first_arch/index.md
Normal file
17
src/first_arch/index.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Proposal for Libre-Chip's First CPU Architecture (Draft)
|
||||
|
||||
## Stages
|
||||
|
||||
The CPU architecture will be developed in several stages:
|
||||
|
||||
1. Getting an initial working CPU -- First NLNet/etc. Grant
|
||||
|
||||
Possible follow-on work, order TBD:
|
||||
|
||||
* Expand CPU to support more operations (e.g. floating-point, vector ops., paging)
|
||||
* Add FPGA-style programmable decoder and μOp Cache, with trap-to-software fallback for uncommon/complex ops, which allows running more ISAs such as RISC-V, older x86-32/64, more PowerISA support, and then if we can figure out the legal situation, ARM and modern x86-64. The idea is QEMU (or similar) will be compiled with a special compiler that generates both the fallback software and the bitstream for the decoder, the compiled output will be covered by QEMU's license which has some patent clauses, which hopefully helps with the legal situation. Jacob Lifshay came up with this idea [back in 2022](https://web.archive.org/web/20220612082603/https://bugs.libre-soc.org/show_bug.cgi?id=841)
|
||||
* Formal proof that the CPU doesn't have any spectre-style bugs even though it still is OoO superscalar with speculative execution. Jacob Lifshay came up with this idea [back in 2020](https://web.archive.org/web/20201021124234/https://bugs.libre-soc.org/show_bug.cgi?id=209)
|
||||
|
||||
## Architecture
|
||||
|
||||
![](architecture.dia.svg)
|
Loading…
Reference in a new issue