machxo2: Add prefix parameter to simtest.sh. Remove show command from
simtest.sh. Update README.md.
This commit is contained in:
parent
730e543ca6
commit
3dbd5b0932
2
machxo2/examples/.gitignore
vendored
2
machxo2/examples/.gitignore
vendored
@ -1,4 +1,4 @@
|
|||||||
/blinky_simtest
|
*_simtest*
|
||||||
*.vcd
|
*.vcd
|
||||||
*.png
|
*.png
|
||||||
*.log
|
*.log
|
||||||
|
@ -3,11 +3,11 @@ This directory contains a simple example of running `nextpnr-machxo2`:
|
|||||||
|
|
||||||
* `simple.sh` produces nextpnr output in the files `{pack,place,pnr}*.json`,
|
* `simple.sh` produces nextpnr output in the files `{pack,place,pnr}*.json`,
|
||||||
as well as pre-pnr and post-pnr diagrams in `{pack,place,pnr}*.{dot, png}`.
|
as well as pre-pnr and post-pnr diagrams in `{pack,place,pnr}*.{dot, png}`.
|
||||||
* `simtest.sh` will use `yosys` to generate a Verilog file from
|
* `simtest.sh` extends `simple.sh` by generating `{pack,place,pnr}*.v` from
|
||||||
`{pack,place,pnr}blinky.json`, called `{pack,place,pnr}blinky.v`. It will
|
`{pack,place,pnr}*.json`. The script calls the [`iverilog`](http://iverilog.icarus.com)
|
||||||
then and compare `{pack,place,pnr}blinky.v`'s simulation behavior to the
|
compiler and `vvp` runtime to compare the behavior of `{pack,place,pnr}*.v`
|
||||||
original verilog file (`blinky.v`) using the [`iverilog`](http://iverilog.icarus.com)
|
and the original Verilog input (using a testbench `*_tb.v`). This is known as
|
||||||
compiler and `vvp` runtime. This is known as post-place-and-route simulation.
|
post-place-and-route simulation.
|
||||||
* `mitertest.sh` is similar to `simtest.sh`, but more comprehensive. This
|
* `mitertest.sh` is similar to `simtest.sh`, but more comprehensive. This
|
||||||
script creates a [miter circuit](https://www21.in.tum.de/~lammich/2015_SS_Seminar_SAT/resources/Equivalence_Checking_11_30_08.pdf)
|
script creates a [miter circuit](https://www21.in.tum.de/~lammich/2015_SS_Seminar_SAT/resources/Equivalence_Checking_11_30_08.pdf)
|
||||||
to compare the output port values of `{pack,place,pnr}*.v` against the
|
to compare the output port values of `{pack,place,pnr}*.v` against the
|
||||||
@ -25,18 +25,33 @@ As `nextpnr-machxo2` is developed the contents `simple.sh`, `simtest.sh`,
|
|||||||
`mitertest.sh`, and `demo.sh` are subject to change.
|
`mitertest.sh`, and `demo.sh` are subject to change.
|
||||||
|
|
||||||
## How To Run
|
## How To Run
|
||||||
The following applies to all `sh` scripts except `demo.sh`.
|
Each script requires a prefix that matches one of the self-contained Verilog
|
||||||
|
examples in this directory. For instance, to create a bitstream from
|
||||||
|
`tinyfpga.v`, use `demo.sh tinyfpga` (the `*` glob used throughout this file
|
||||||
|
is filled with the the prefix).
|
||||||
|
|
||||||
Each `sh` script runs yosys and nextpnr to validate a blinky design in various
|
Each of `simple.sh`, `simtest.sh`, and `mitertest.sh` runs yosys and nextpnr
|
||||||
ways. The `mode` argument to each script- `pack`, `place`, or `pnr`- stop
|
to validate a Verilog design in various ways. They require an additional `mode`
|
||||||
`nextpnr-machxo2` after the specified phase and writes out a JSON file of the
|
argument- `pack`, `place`, or `pnr`- which stops `nextpnr-machxo2` after the
|
||||||
results in `{pack,place,pnr}blinky.json`; `pnr` runs all of the Pack, Place,
|
specified phase and writes out a JSON file of the results in
|
||||||
and Route phases.
|
`{pack,place,pnr}*.json`; `pnr` runs all of the Pack, Place, and Route phases.
|
||||||
|
|
||||||
`mitertest.sh` requires an additional option- `sat` or `smt`- to choose between
|
`mitertest.sh` requires an third option- `sat` or `smt`- to choose between
|
||||||
verifying the miter with either yosys' built-in SAT solver, or an external
|
verifying the miter with either yosys' built-in SAT solver, or an external
|
||||||
SMT solver.
|
SMT solver.
|
||||||
|
|
||||||
|
Each script will exit if it finds an input Verilog example it knows it can't
|
||||||
|
handle. To keep file count lower, all yosys scripts are written inline inside
|
||||||
|
the `sh` scripts using the `-p` option.
|
||||||
|
|
||||||
|
### Clean
|
||||||
|
To clean output files from _all_ scripts, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
rm -rf *.dot *.json *.png *.vcd *.smt2 *.log *.txt *.bit {pack,place,pnr}*.v *_simtest*
|
||||||
|
```
|
||||||
|
|
||||||
|
## Known Issues
|
||||||
In principle, `mitertest.sh` should work in `sat` or `smt` mode with all
|
In principle, `mitertest.sh` should work in `sat` or `smt` mode with all
|
||||||
example Verilog files which don't use the internal oscillator (OSCH) or other
|
example Verilog files which don't use the internal oscillator (OSCH) or other
|
||||||
hard IP. However, as of this writing, only `blinky.v` passes correctly for a
|
hard IP. However, as of this writing, only `blinky.v` passes correctly for a
|
||||||
@ -60,21 +75,6 @@ few reasons:
|
|||||||
3. `synth_machxo2` runs `deminout` on `inouts` when generating the `gate`
|
3. `synth_machxo2` runs `deminout` on `inouts` when generating the `gate`
|
||||||
module. This is not handled yet when generating the `gold` module.
|
module. This is not handled yet when generating the `gold` module.
|
||||||
|
|
||||||
To keep file count lower, all yosys scripts are written inline inside the
|
|
||||||
`sh` scripts using the `-p` option.
|
|
||||||
|
|
||||||
`demo.sh` requires a prefix that matches one of the self-contained Verilog
|
|
||||||
examples in this directory. For instance, to create a bitstream from
|
|
||||||
`tinyfpga.v`, use `demo.sh tinyfpga`. The script will catch Verilog files which
|
|
||||||
are not meant to be programmed onto TinyFPA Ax.
|
|
||||||
|
|
||||||
### Clean
|
|
||||||
To clean output files from _all_ scripts, run:
|
|
||||||
|
|
||||||
```
|
|
||||||
rm -rf *.dot *.json *.png *.vcd *.smt2 *.log *.txt *.bit {pack,place,pnr}*.v blinky_simtest*
|
|
||||||
```
|
|
||||||
|
|
||||||
## Verilog Examples
|
## Verilog Examples
|
||||||
* `blinky.v`/`blinky_tb.v`- A blinky example meant for simulation.
|
* `blinky.v`/`blinky_tb.v`- A blinky example meant for simulation.
|
||||||
* `tinyfpga.v`- Blink the LED on TinyFPA Ax.
|
* `tinyfpga.v`- Blink the LED on TinyFPA Ax.
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
if [ $# -lt 1 ]; then
|
if [ $# -lt 2 ]; then
|
||||||
echo "Usage: $0 mode"
|
echo "Usage: $0 prefix mode"
|
||||||
exit -1
|
exit -1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case $1 in
|
case $2 in
|
||||||
"pack")
|
"pack")
|
||||||
NEXTPNR_MODE="--pack-only"
|
NEXTPNR_MODE="--pack-only"
|
||||||
;;
|
;;
|
||||||
@ -21,16 +21,19 @@ case $1 in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
if [ ! -f ${1}_tb.v ]; then
|
||||||
|
echo "No testbench file (${1}_tb.v) found for ${1}.v"
|
||||||
|
exit -3
|
||||||
|
fi
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
${YOSYS:-yosys} -p "read_verilog blinky.v
|
${YOSYS:-yosys} -p "read_verilog ${1}.v
|
||||||
synth_machxo2 -json blinky.json
|
synth_machxo2 -json ${1}.json"
|
||||||
show -format png -prefix blinky"
|
${NEXTPNR:-../../nextpnr-machxo2} $NEXTPNR_MODE --1200 --package QFN32 --no-iobs --json ${1}.json --write ${2}${1}.json
|
||||||
${NEXTPNR:-../../nextpnr-machxo2} $NEXTPNR_MODE --1200 --package QFN32 --no-iobs --json blinky.json --write ${1}blinky.json
|
|
||||||
${YOSYS:-yosys} -p "read_verilog -lib +/machxo2/cells_sim.v
|
${YOSYS:-yosys} -p "read_verilog -lib +/machxo2/cells_sim.v
|
||||||
read_json ${1}blinky.json
|
read_json ${2}${1}.json
|
||||||
clean -purge
|
clean -purge
|
||||||
show -format png -prefix ${1}blinky
|
write_verilog -noattr -norename ${2}${1}.v"
|
||||||
write_verilog -noattr -norename ${1}blinky.v"
|
iverilog -o ${1}_simtest ${CELLS_SIM:-`${YOSYS:yosys}-config --datdir/machxo2/cells_sim.v`} ${1}_tb.v ${2}${1}.v
|
||||||
iverilog -o blinky_simtest ${CELLS_SIM:-`${YOSYS:yosys}-config --datdir/machxo2/cells_sim.v`} blinky_tb.v ${1}blinky.v
|
vvp -N ./${1}_simtest
|
||||||
vvp -N ./blinky_simtest
|
|
||||||
|
Loading…
Reference in New Issue
Block a user