Awesome
An AutoFPGA peripheral demonstration project
This is a demonstration project. It is designed to show users how simple peripherals can be incorporated into a design via AutoFPGA. My plan is to blog about this design at zipcpu.com, and describe how various components can be added (or removed) from a design using this design as an example.
To use, first install AutoFPGA, and place the autofpga executable in your path. Then, from the main directory, run:
% make autodata
% make test
You should see a "SUCCESS" result.
Interactive testing
Now that you have a working design, you can try examples yourself. To
start the simulation, run main_tb
from the sim
directory and let it
run.
Now change into the sw
directory and try running some (or all) of the below
commands:
% wbregs VERSION # Read the build-date from the design
% wbregs PWRCOUNT # Read sim clocks since startup
% wbregs FIXEDATA # Read a fixed data register from within the design
% wbregs RAWREG # Read a register
% wbregs RAWREG 0x22334567 # Write to the same register
% wbregs RAWREG # Read our register back again, to check our change
% wbregs PWRCOUNT # Read (updated) sim clocks since startup
% wbregs SIMHALT 1 # End the simulation
When you give the final command, wbregs SIMHALT 1
, you tell Verilator
to end the simulation.
There's also a RAM
area you can write to, as well as a BUSERR
register which
should capture the address of the last bus error.
FPGA testing
You can now turn around and deploy this design onto an FPGA. To do this,
build the design found in the rtl
directory. You will need the sources
from the dbgbus/hexbus/rtl
directory as well.
The design is set to work on a baud rate of 1MBaud, as defined by in
auto-data/hexbus.txt. If you run into problems,
then feel free to adjust this baud rate to something that will work with the
terminal program on your system. I've found that 9600 Baud seems to be a
universally supported number. After making this change, re-run make autodata
from the main directory, rebuild your design, and then deploy it to your
FPGA board.
Now start up netuart
. NetUART will connect to the serial port of your
design and attempt to forward that serial port over the TCP/IP port identified
in port.h. netuart
connects to the serial port named
/dev/ttyUSB2
by default. You may give it a single argument identifying
a different serial port if you like. Do beware, however, that because
main_tb
and netuart
connect to the same TCP/IP port number, they cannot
both run at the same time.
Once netuart
is up and running, you may then repeat the wbregs
tests from
the interactive test above. They should all work as before, save that writing
to the SIMHALT
register will no longer halt the simulation--since you won't
be running a simulation anymore.