Git Product home page Git Product logo

vesp-alpha's Introduction

Hello!

My name is Andrew and welcome to my page.

line

question mark About me

🎓 I've got a bachelor's degree from the Czech Technical University in Prague. Check out my thesis and an associated project.

📚 Currently I'm studying master's (Computer Science) at the same university.

💼 I had an internship at Microsoft and IBM, worked as a React web developer, full-stack developer, Office lecturer, a teacher of electronics-related tutorials at the Czech Technical University, and more. Check out my LinkedIn.

⚙️ I love computer hardware development, embedded systems, firmware development, and IoT-related stuff. I'm a big fan of RISC-V computer architecture.

🛠️ Currently I work at Tropic Square as a Digital Design Engineer. In my spare time, I work on a research project focused on the practical usage of Linux-based operating systems on the RISC-V platform. I developed a custom RV32I microarchitecture in Verilog. I also work on some other projects, check out my repositories 😄.

phone How to reach me

Connect with me on LinkedIn or send me an e-mail. Contacts are listed on my profile's left sidebar.

How to thank me

Do you like any software I created? You can buy me a coffee, so I can continue to develop more free cool stuff 😄.

Buy Me A Coffee

vesp-alpha's People

Contributors

andreondra avatar medexs avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

vesp-alpha's Issues

Add Vivado as testbench runner

  • Mention in readme that $dumpfile and $dumpvars must not be used (otherwise no VCD will be written by Vivado).
  • Speed up runtime by creating the project template only once and then saving as temp.
  • Kill Vivado instead peaceful exit (causes unnecessary slowdown).
  • Add params to Vivado to move journals and logs to build dir.
  • Edit also rvtest to use Vivado.

Pass ebreak test

Filename: rv32mi/sbreak.S
Required registers: mcause, mtvec, mepc
Controller should correctly set exception cause.

All test statistics when running `test` option

Our tests have 3 options for run - rvtest, hwtest and test (rvtest + hwtest). When test is run, the statistics at the end show info only about rvtest and not hwtest, which are shown right after it's end.

make.py philosophy overhaul

For now, all build/test recipes are hardcoded in make.py, which is dumb and messy. Maybe an universal recipe (in YAML?) will be nicer. This recipe will also probably allow to specify even build instructions. Needs further research.

Possibilities (from lowest to highest level of abstraction):

  1. Load all files from specified folder (folder as a test suite specification). No external sources are required, all is built-in (current state).
  2. Allow to specify file list manually (config file as a test suite specification). There will be only one external source of information:
    • file list: which files to pass to hard-coded recipe (function)
  3. Allow to specify test steps manually (config file as a whole test specification). There will be then two external sources of information:
    • recipe: describes how the test will run
    • file list: which files to pass to recipe
    • recipe can optionally also include file list which can be overriden by sth like --srcfiles argument. This will maintain out-of-the-box-working behavior as is now and also will be much much nicer.

Note: file list probably can be specified in 2 different ways:

  • as an argument: --src test.v or --src testFolder
  • as a file list: --src filelist.list

Tasks:

  • Add mpysource evaluation to every source and dest (for now only in run step)
  • Finish copy step
  • Fix a case where a file is copied to a path that is not possible to create (e.g. one of the requested folders in paths is actually a file).
  • Add custom recipe run
  • Add possibility to pass custom source file/folder (only) to custom recipe

Add exception support

Exception should be called:

  • when CSR, mret, ebreak, ecall are executed in the wrong mode
    Exceptions should disable all writes (to CSR, memory, registers...)

Create automatic Vivado synth+impl builds

This CI/CD pipeline should build the project (in project-less Tcl mode preferably) and output a bitstream for Basys 3 to Releases. We can postpone this issue until the project is in stable state (pre-article?). This will be nice for demo purposes at school, people will only download ready-to-use bitstream.

make.py ignores errors from iverilog

Please look at the error handling and always make sure that the run stops when an error occures and print the error message from iverilog to the console.

When trying to write RAM memory from a invalid file in top.v, the ERROR that iverilog raises is ignored by make.py:
image

Add possibility to launch individual tests using make.py

Maybe new command customtest with switches:

--file (test file)
--type [executable | testbench | auto]

Or adding possibility to enable/disable test by renaming/moving the files? (Bad)

Or changing the functionality of the test subcommand?

[Memory] Create memory map

Inspiration here.

The main goal is to create an address space to which peripherals will be mapped, for now GPIO access and UART. These peripherals must be accessible from C (probably using some structures holding pointers to physical addresses).

The memory map will be probably dependent on specific board (platform), thus being part of a BSP.

Create a portable dev environment

It'll probably be handy to have a ready to use development environment. This will bring a "shared terminal server" feel without a need of an actual server — same OS, same libs, tools, etc. Also it'll make using precompiled tools (such as gcc) hassle free. For this we can probably use Docker or similar stuff.

For now it's not needed, but it'll make setting up the environment very easy for newcomers or for moving to a new device. If anything, it's a good DevOps exercise.

Fix multiple include error

There are 20 error messages in Vivado like this:

[Synth 8-9873] overwriting previous definition of module 'alu' ["/risc-v-embedded/src/components/alu.v":30]

make.py even more abstraction

As of now, if specified in a recipe, make.py iterates over all steps for every source file specified. This is usually not wanted behaviour. Example: we need to do some tasks only at the start of the testing, such as creating a folder, precompiling something etc.

Possible solutions:

  1. Create a new section "presteps", which will only execute once (regardless of if and how many source are there).
  2. There will be some kind of loops, or substeps, where every substep can have its own set of sources. This will be more universal but requires a lot more work.

This is not required by any of the current test mechanisms and so is only a proposal for enhancement.

Add UART bootloader

This bootloader will be below the OS bootloader - it will only serve for loading data from UART to data/instr memories.

CPU and repository name

Come up with a name for our CPU/microarchitecture and a name for the repository.

  • Change repo name
  • Change README title
  • Add logo

Fix FIFO

Fix assignments, create a more sophisticated TB.

Rewrite casex to casez

Rewrite all occurrences of casex statement to casez - the first one is not ideal for synthesisable code.

Add PWM generator

This should be usable for both LED dimming (= configurable duty) and playing tones on buzzer (= configurable frequency).

Koncepce

Krátkodobá:

  • vytvořit takovou minimální mikroarchitekturu, která bude schopná spustit Linux a komunikovat s kamerou, jejíž video vystaví přes RTSP / jiný jednodušší protokol
    • je třeba stanovit seznam potřebných rozšíření, během výletu se může implementovat nějaké z nich, jako základ poslouží APSková mikroarchitektura

Dlouhodobá:

  • obohatit mikroarchitekturu o různá rozšíření, možná už ve formě SoC mimo procesor:
    • HW akcelerované de/enkódování H.264, 265, nebo toho, co zrovna bude v módě, až se k tomu dostaneme :D. Ale H.264 je kompatibilní snad se vším
    • rozpoznávání objektů pomocí neuronek přímo na hardwaru - AIoT a napojení na rozšířené systémy - tak, aby například kromě API šlo tyto data nechat posílat i do MQTT brokeru
    • můžeme experimentovat nejen s WiFi, ale i Zigbee, nebo třeba Matter

Find a place for a documentation

There are several ways a documentation can be written:

  • plain Markdown files in the repository,
  • GitHub Wiki,
  • Word document,
  • Overleaf-hosted document (impractical cooperation support, poor git support),

These two are most prefered:

  • autogenerated website published on GitHub pages (Spinx and similar tools: https://naturaldocs.org/),
  • separate repository with LaTeX-based docs with automatic GitHub Actions powered releases.
    We can probably use some generator to generate both LaTeX and website.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.