Add fpga
This commit is contained in:
parent
a15c797e93
commit
3ba8533996
|
@ -0,0 +1,5 @@
|
||||||
|
nextpnr
|
||||||
|
prjtrellis
|
||||||
|
yosys
|
||||||
|
riscv-openocd
|
||||||
|
hidapi
|
|
@ -0,0 +1,66 @@
|
||||||
|
# fpga demo from all open resource
|
||||||
|
|
||||||
|
## install depends
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get install build-essential clang bison flex libreadline-dev gawk tcl-dev libffi-dev git graphviz xdot pkg-config python3 libboost-system-dev libboost-python-dev libboost-filesystem-dev zlib1g-dev build-essential libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev libboost-iostreams-dev python3.9-dev libboost-iostreams-dev libeigen3-dev libudev-dev cmake python3-pip gcc gdb autoconf automake libtool libusb-dev libusb-1.0-0-dev python2.7-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
## install yosys
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://github.com/YosysHQ/yosys
|
||||||
|
make config-gcc
|
||||||
|
make -j
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
## install Trellis for ECP5 devices support
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone --recursive https://github.com/YosysHQ/prjtrellis \
|
||||||
|
&& cd prjtrellis && cd libtrellis \
|
||||||
|
&& cmake -DCMAKE_INSTALL_PREFIX=/usr/local . && make -j \
|
||||||
|
&& sudo make install \
|
||||||
|
&& cd ../../
|
||||||
|
```
|
||||||
|
|
||||||
|
## install nextpnr
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://github.com/YosysHQ/nextpnr.git \
|
||||||
|
&& cd nextpnr \
|
||||||
|
&& cmake . -DARCH=ecp5 -DTRELLIS_INSTALL_PREFIX=/usr/local \
|
||||||
|
&& make -j \
|
||||||
|
&& sudo make install \
|
||||||
|
&& cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
## build openocd with DAP
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/signal11/hidapi.git \
|
||||||
|
&& cd hidapi \
|
||||||
|
&& ./bootstrap \
|
||||||
|
&& ./configure \
|
||||||
|
&& make -j \
|
||||||
|
&& sudo make install \
|
||||||
|
&& cd ..
|
||||||
|
|
||||||
|
git clone https://github.com/riscv/riscv-openocd.git \
|
||||||
|
&& cd riscv-openocd \
|
||||||
|
&& ./bootstrap \
|
||||||
|
&& ./configure --prefix=$RISCV --enable-cmsis-dap --enable-remote-bitbang --enable-jtag_vpi --enable-ftdi --enable-jlink \
|
||||||
|
&& make \
|
||||||
|
&& sudo make install \
|
||||||
|
&& cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
## test with office demo
|
||||||
|
|
||||||
|
At /home/colin/develop/Colorlight-FPGA-Projects/demo/i5
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./../../tools/dapprog blink.svf
|
||||||
|
```
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
*.svf
|
||||||
|
*.bit
|
||||||
|
*.cfg
|
||||||
|
*.ys
|
||||||
|
*.json
|
|
@ -0,0 +1,25 @@
|
||||||
|
TARGET=blink
|
||||||
|
|
||||||
|
OBJS+=blink.v
|
||||||
|
|
||||||
|
all: ${TARGET}.bit
|
||||||
|
|
||||||
|
$(TARGET).json: $(OBJS)
|
||||||
|
yosys -p "read_verilog $(OBJS); synth_ecp5 -top ${TARGET} -json $@"
|
||||||
|
|
||||||
|
$(TARGET).cfg: $(TARGET).json
|
||||||
|
nextpnr-ecp5 --25k --package CABGA381 --speed 6 --json $< --textcfg $@ --lpf $(TARGET).lpf --freq 65
|
||||||
|
|
||||||
|
$(TARGET).bit: $(TARGET).cfg
|
||||||
|
ecppack --svf ${TARGET}.svf $< $@
|
||||||
|
|
||||||
|
${TARGET}.svf : ${TARGET}.bit
|
||||||
|
|
||||||
|
prog: ${TARGET}.svf
|
||||||
|
# openFPGALoader -c digilent_hs2 $(TARGET).bit
|
||||||
|
./dapprog ${TARGET}.svf
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.svf *.bit *.config *.ys *.json
|
||||||
|
|
||||||
|
.PHONY: prog clean
|
|
@ -0,0 +1,8 @@
|
||||||
|
LOCATE COMP "clk_i" SITE "P3";
|
||||||
|
IOBUF PORT "clk_i" IO_TYPE=LVCMOS33;
|
||||||
|
FREQUENCY PORT "clk_i" 25 MHZ;
|
||||||
|
|
||||||
|
LOCATE COMP "led_o" SITE "U16";
|
||||||
|
|
||||||
|
IOBUF PORT "led_o" IO_TYPE=LVCMOS25;
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
module rst_gen (
|
||||||
|
input clk_i,
|
||||||
|
input rst_i,
|
||||||
|
output rst_o
|
||||||
|
);
|
||||||
|
|
||||||
|
/* try to generate a reset */
|
||||||
|
reg [2:0] rst_cpt;
|
||||||
|
always @(posedge clk_i) begin
|
||||||
|
if (rst_i)
|
||||||
|
rst_cpt = 3'b0;
|
||||||
|
else begin
|
||||||
|
if (rst_cpt == 3'b100)
|
||||||
|
rst_cpt = rst_cpt;
|
||||||
|
else
|
||||||
|
rst_cpt = rst_cpt + 3'b1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assign rst_o = !rst_cpt[2];
|
||||||
|
|
||||||
|
endmodule
|
||||||
|
|
||||||
|
module blink (
|
||||||
|
input clk_i,
|
||||||
|
output reg led_o
|
||||||
|
);
|
||||||
|
localparam MAX = 2_500_000_0;
|
||||||
|
localparam WIDTH = $clog2(MAX);
|
||||||
|
|
||||||
|
wire rst_s;
|
||||||
|
wire clk_s;
|
||||||
|
|
||||||
|
assign clk_s = clk_i;
|
||||||
|
//pll_12_16 pll_inst (.clki(clk_i), .clko(clk_s), .rst(rst_s));
|
||||||
|
rst_gen rst_inst (.clk_i(clk_s), .rst_i(1'b0), .rst_o(rst_s));
|
||||||
|
|
||||||
|
reg [WIDTH-1:0] cpt_s;
|
||||||
|
wire [WIDTH-1:0] cpt_next_s = cpt_s + 1'b1;
|
||||||
|
|
||||||
|
wire end_s = cpt_s == MAX-1;
|
||||||
|
|
||||||
|
always @(posedge clk_s) begin
|
||||||
|
cpt_s <= (rst_s || end_s) ? {WIDTH{1'b0}} : cpt_next_s;
|
||||||
|
|
||||||
|
if (rst_s)
|
||||||
|
led_o <= 1'b0;
|
||||||
|
else if (end_s)
|
||||||
|
led_o <= ~led_o;
|
||||||
|
end
|
||||||
|
endmodule
|
|
@ -0,0 +1,54 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ ${#1} -eq 0 ]; then
|
||||||
|
echo "usage: dapprog xxx.bit or xxx.svf"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURRENT_DIR=$(cd $(dirname $0); pwd)
|
||||||
|
CONFIG=${CURRENT_DIR}/cmsisdap.cfg
|
||||||
|
|
||||||
|
if [ "$1" == "--probe" ] || [ "$1" == "-p" ]; then
|
||||||
|
#probe add -d4 for detail log
|
||||||
|
sudo openocd -f ${CONFIG} -c \
|
||||||
|
" init;
|
||||||
|
scan_chain;
|
||||||
|
exit;
|
||||||
|
"
|
||||||
|
exit $?
|
||||||
|
|
||||||
|
else
|
||||||
|
# program
|
||||||
|
IMAGE_FILE=$1
|
||||||
|
|
||||||
|
EXT="${IMAGE_FILE##*.}"
|
||||||
|
echo EXT: $EXT
|
||||||
|
|
||||||
|
#flash write_image erase xxx.hex;
|
||||||
|
#flash write_image erase xxx.bin 0x08000000;
|
||||||
|
|
||||||
|
if [ "${EXT}" == "svf" ]; then
|
||||||
|
TARGET="$IMAGE_FILE"
|
||||||
|
elif [ "${EXT}" == "bit" ]; then
|
||||||
|
NAME="${IMAGE_FILE%%.bit}"
|
||||||
|
#/home/pi/oss/ulx3s/tools/ujprog/ujprog -j SRAM ${IMAGE_FILE} > ${NAME}_sram.svf
|
||||||
|
${CURRENT_DIR}/ujprog.bit2svf -j FLASH ${IMAGE_FILE} > ${NAME}_flash.svf
|
||||||
|
TARGET="${NAME}_flash.svf"
|
||||||
|
else
|
||||||
|
echo "illegal suffix [$EXT]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "TARGET: ${TARGET}"
|
||||||
|
|
||||||
|
sudo openocd -f ${CONFIG} -c \
|
||||||
|
" init;
|
||||||
|
scan_chain;
|
||||||
|
svf -tap ecp5.tap -quiet -progress ${TARGET};
|
||||||
|
exit;
|
||||||
|
"
|
||||||
|
|
||||||
|
exit $?
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
Loading…
Reference in New Issue