-
Notifications
You must be signed in to change notification settings - Fork 86
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update README; Rename PY2HWSW_PATH
to PY2HWSW_ROOT
.
#975
base: main
Are you sure you want to change the base?
Changes from all commits
516d223
769bc02
cbca1f3
9dc9762
eda18f3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -48,55 +48,6 @@ To configure your SoC, edit the `iob_soc.py` file, which can be found at the | |
repository root. This file has the system configuration variables; | ||
hopefully, each variable is explained by a comment. | ||
|
||
|
||
## Set environment variables for local or remote building and running (WIP) | ||
|
||
The various simulators, FPGA compilers, and FPGA boards may run locally or | ||
remotely. For running a tool remotely, you need to set two environmental | ||
variables: the server logical name and the server user name. Consider placing | ||
these settings in your `.bashrc` file so that they apply to every session. | ||
|
||
|
||
### Set up the remote simulator server | ||
|
||
Using the open-source simulator Icarus Verilog (`iverilog`) as an example, note that in | ||
`submodules/hardware/simulation/icarus.mk,` the variable for the server logical name, | ||
`SIM_SERVER,` is set to `IVSIM_SERVER,` and the variable for the user name, | ||
`SIM_USER` is set to `IVSIM_USER`. | ||
|
||
To run the simulator on the server *mysimserver.myorg.com* as user *ivsimuser*, set the following environmental | ||
variables beforehand, or place them in your `.bashrc` file: | ||
|
||
```Bash | ||
export IVSIM_SERVER=ivsimserver.myorg.com | ||
export IVSIM_USER=ivsimuser | ||
``` | ||
|
||
When you start the simulation, IOb-SoC's simulation Makefile will log you on to the server using `ssh,` then `rsync` the files to a remote build directory and run the simulation there. If you do not set these variables, the simulator will run locally if installed. | ||
|
||
### Set up the remote FPGA toolchain and board servers | ||
|
||
Using the cyclonev_gt_dk board as an example, note that in | ||
`hardware/fpga/quartus/cyclonev_gt_dk/Makefile,` the variable for the FPGA tool | ||
server logical name, `FPGA_SERVER,` is set to `QUARTUS_SERVER,` and the | ||
variable for the user name, `FPGA_USER`, is set to `QUARTUS_USER`; the | ||
variable for the board server, `BOARD_SERVER,` is set to `CYC5_SERVER`, and | ||
the variable for the board user, `BOARD_USER,` is set to `CYC5_USER`. As in the | ||
previous example, set these variables as follows: | ||
|
||
```Bash | ||
export QUARTUS_SERVER=quartusserver.myorg.com | ||
export QUARTUS_USER=quartususer | ||
export CYC5_SERVER=cyc5server.myorg.com | ||
export CYC5_USER=cyc5username | ||
``` | ||
|
||
In each remote server, the environment variable for the license server used must be defined as in the following example: | ||
|
||
```Bash | ||
export [email protected];lic_or_dat_file | ||
``` | ||
|
||
## Create the build directory | ||
|
||
IOb-SoC uses the [Py2HWSW](https://nlnet.nl/project/Py2HWSW/) framework to create a build directory with all the necessary files and makefiles to run the different tools. The build directory is placed in the folder above at ../iob_soc_Vx.y by running the following command from the root directory. | ||
|
@@ -119,7 +70,9 @@ You can *emulate* IOb-SoC's on a PC to develop and debug your embedded system. T | |
```Bash | ||
make pc-emul-run | ||
``` | ||
|
||
<!-- | ||
# TODO: iob-soc repo no longer has sw_build.mk (it comes from iob-system). Should we add it back? | ||
--> | ||
The Makefile compiles and runs the software in the `../iob_soc_Vx.y/software/` directory. The Makefile includes the `sw_build.mk` segment supplied initially in the `./software/` directory in the IOb-SoC root. Please feel free to change this file for your specific project. To run an emulation test comparing the result to the expected result, run | ||
```Bash | ||
make pc-emul-test | ||
|
@@ -132,17 +85,17 @@ To simulate IOb-SoC's RTL using a Verilog simulator, run | |
make sim-run [SIMULATOR=icarus!verilator|xcelium|vcs|questa] [INIT_MEM=0|1] [USE_EXTMEM=0|1] | ||
``` | ||
|
||
The INIT_MEM variable specifies whether the firmware is initially loaded in the memory, skipping the boot process, and the USE_EXTMEM variable indicates whether an external memory such as DRAM is used, in which case the cache system described above is instantiated. | ||
The INIT_MEM variable specifies whether the firmware is initially loaded in the memory, skipping the boot process, and the USE_EXTMEM variable indicates whether an external memory such as DRAM is used. | ||
|
||
The Makefile compiles and runs the software in the `../iob_soc_Vx.y/hardware/simulation` directory. The Makefile includes the `./hardware/simulation/sim_build.mk`, which you can change for your project. To run a simulation test comprising several simulations with different parameters, run | ||
The Makefile compiles and runs the software in the `../iob_soc_Vx.y/hardware/simulation` directory. The Makefile includes the `../iob_soc_Vx.y/hardware/simulation/sim_build.mk`, which you can change for your project. To run a simulation test comprising several simulations with different parameters, run | ||
```Bash | ||
make sim-test | ||
``` | ||
The simulation test contents can be edited in IOb-SoC's top Makefile. | ||
|
||
Each simulator must be described in the [`./hardware/simulation/<simulator>.mk`](https://github.com/IObundle/py2hwsw/tree/main/py2hwsw/hardware/simulation) file. For example, the file `vcs.mk` describes the VCS simulator. | ||
Each simulator must be described in the [`../iob_soc_Vx.y/hardware/simulation/<simulator>.mk`](https://github.com/IObundle/py2hwsw/tree/main/py2hwsw/hardware/simulation) file. For example, the file `vcs.mk` describes the VCS simulator. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The supported simulators can be listed with py2hwsw sim-ls <=> ls PY2HWSW_ROOT/hardware/simulation/*.mk bla bla To support a new simulator or change the makefile segment of supported simulator place simulator.mk into iob-soc/hardware/simulation/simulator.mk |
||
|
||
The host machine must run an access server, a Python program in [`./scripts/board_server.py`](https://github.com/IObundle/py2hwsw/blob/main/py2hwsw/scripts/board_server.py), set up to run as a service. The client connects to the host using the SSH protocol and runs the board client program [`./scripts/board_client.py`](https://github.com/IObundle/py2hwsw/blob/main/py2hwsw/scripts/board_client.py). Note that the term *board* is used instead of *simulator* because the same server/client programs control the access to the board and FPGA compilers. The client requests the simulator for GRAB_TIMEOUT seconds, which is 300 seconds by default. Its value can be specified in the `./hardware/fpga/fpga_build.mk` Makefile segment, for example, as | ||
The simulator will timeout after GRAB_TIMEOUT seconds, which is 300 seconds by default. Its value can be specified in the `../iob_soc_Vx.y/hardware/simulation/sim_build.mk` Makefile segment, for example, as | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. make sim GRAB_TIMEOUT = x Ok? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, that also works. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. maybe not , if simulation gets stuck they have to do ctr-c |
||
```Bash | ||
GRAB_TIMEOUT ?= 3600 | ||
``` | ||
|
@@ -151,11 +104,11 @@ GRAB_TIMEOUT ?= 3600 | |
## Run on FPGA board | ||
|
||
To build and run IOb-SoC on an FPGA board, the FPGA design tools must be | ||
installed locally or remotely. The FPGA board must also be attached to the local | ||
or remote host, not necessarily the same host where the design tools are installed. | ||
installed locally. The FPGA board must also be attached to the local host. | ||
|
||
Each board must be described under the [`../iob_soc_Vx.y/hardware/fpga/<tool>/<board_dir>`](https://github.com/IObundle/py2hwsw/tree/main/py2hwsw/hardware/fpga) directory. | ||
For example, the [`../iob_soc_Vx.y/hardware/fpga/vivado/basys3`](https://github.com/IObundle/py2hwsw/tree/main/py2hwsw/hardware/fpga/vivado/basys3) directory contents describe the board BASYS3, which has an FPGA device that can be programmed by the Xilinx/AMD Vivado design tool. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. same story for boards |
||
Each board must be described under the [`./hardware/fpga/<tool>/<board_dir>`](https://github.com/IObundle/py2hwsw/tree/main/py2hwsw/hardware/fpga) directory. For example, the [`./hardware/fpga/vivado/BASYS3`](https://github.com/IObundle/py2hwsw/tree/main/py2hwsw/hardware/fpga/vivado/basys3) | ||
directory contents describe the board BASYS3, which has an FPGA device that can be programmed by the Xilinx/AMD Vivado design tool. The access to the board is controlled by the same server/client programs described above for the simulators. | ||
To build an FPGA design of an IOb-SoC system and run it on the board located in the `board_dir` directory, type | ||
```Bash | ||
make fpga-run [BOARD=<board_dir>] [INIT_MEM=0|1] [USE_EXTMEM=0|1] | ||
|
@@ -167,30 +120,10 @@ make fpga-test | |
``` | ||
The FPGA test contents can be edited in IOb-SoC's top Makefile. | ||
|
||
|
||
The remote machines that have an FPGA board attached to it must run our board | ||
access control service script, which can be found in | ||
[`./scripts/board_server.py`](https://github.com/IObundle/py2hwsw/blob/main/py2hwsw/scripts/board_server.py). | ||
When IOb-SoC needs to access a remote | ||
FPGA server, it runs the board access script located in | ||
[`./scripts/board_client.py`](https://github.com/IObundle/py2hwsw/blob/main/py2hwsw/scripts/board_client.py). | ||
|
||
To install `board_server.py` as a service, run the following command on the remote FPGA server: | ||
``` | ||
sudo make board_server_install | ||
``` | ||
|
||
To uninstall the service, run | ||
|
||
``` | ||
sudo make board_server_uninstall | ||
``` | ||
|
||
Finally, to query the board status, run | ||
``` | ||
sudo make board_server_uninstall | ||
``` | ||
|
||
<!-- | ||
# TODO: Explain the `board_client`/`board_server` program. It is also used in local machines. | ||
# Maybe remove the script that uses them in local machines. | ||
--> | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. do not explain If server not present it just runs |
||
## Compile the documentation | ||
|
||
|
@@ -223,6 +156,18 @@ To clean the build directory, run | |
make clean | ||
``` | ||
|
||
## Use another Py2HWSW version | ||
|
||
By default, when running the `nix-shell` tool, it will build an environment that contains the Py2HWSW version specified in first lines of the [default.nix file](https://github.com/IObundle/iob-soc/blob/main/default.nix#L8). | ||
You can update the `py2hwsw_commit` and `py2hwsw_sha256` lines of that file to use another version of Py2HWSW from the IObundle's github repository. | ||
|
||
|
||
If you cloned the Py2HWSW repository to a local directory, you can use that directory as a source for the Py2HWSW nix package. | ||
To use a local directory as a source for Py2HWSW, set the following environment variable with the path to the Py2HWSW root directory: | ||
```Bash | ||
export PY2HWSW_ROOT=/path/to/py2hwsw_root_dir | ||
``` | ||
|
||
|
||
# Acknowledgements | ||
|
||
|
@@ -232,6 +177,9 @@ The work has been partially performed in the scope of the A-IQ Ready project, wh | |
|
||
The A-IQ Ready project is supported by the Chips Joint Undertaking (Chips JU) - the Public-Private Partnership for research, development, and innovation under Horizon Europe – and National Authorities under Grant Agreement No. 101096658. | ||
|
||
<!-- | ||
# TODO: Fix these broken image links | ||
--> | ||
![image](https://github.com/IObundle/iob-system/assets/5718971/78f2a3ee-d10b-4989-b221-71154fe6e409) ![image](https://github.com/IObundle/iob-system/assets/5718971/d57e0430-bb60-42e3-82a3-c5b6b0417322) | ||
|
||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, but we need a way to pull the examples out of lib for user inspection.
py2hwsw --lib-ls <=> ls PY2HWSW_ROOT/lib (root may be in nix-store or wherever
py2hwsw --lib-ls relative/path/to/lib <=> ls PY2HWSW_ROOT/lib/relative/path/to/lib
py2hwsw --lip-cp relative/path/to/lib destdir <=> cp -r PY2HWSW_ROOT/lib/relative/path/to/lib destdir
This allows the user to study the lib examples