mirror of https://github.com/openXC7/prjxray.git
A minitest for Zynq7 EMIO PS->PL interface.
Signed-off-by: Maciej Kurc <mkurc@antmicro.com>
This commit is contained in:
parent
da33c29914
commit
75c6ff27de
|
|
@ -0,0 +1,18 @@
|
|||
# Zynq7 EMIO minitest
|
||||
|
||||
This is a simple test of PS -> PL interface for Zynq7. Works on the ZYBO Z7 board with xc7z020 but should also work for xc7z010.
|
||||
|
||||
The PS firmware is bare metal. Upon start it enables MIO7 as output as well as PS <-> PL level shifters. Next it implements a blinking led on MIO7 and counter on GPIO bank 2. The bank 2 is connected to EMIOGPIOO[31:0] signals of the PS7 instance in the PL logic design.
|
||||
|
||||
The PL design "instantiates" the PS7 and connects EMIOGPIOO[3:0] to LEDs LD0-LD3 but through XOR gates controlled by push buttons BTN0-BTN3.
|
||||
|
||||
# Building & loading
|
||||
|
||||
## PS
|
||||
|
||||
Run `make firmware` to compile the firmware. Then run `make run` to upload it to Zybo. You must have Xilinx XSCT installed and pointed to in the environment. You can also just run `make` to execute those two above steps. Upon loading the LED LD4 should start blinking.
|
||||
|
||||
## PL
|
||||
|
||||
Run `make top.bit` to generate the bitstream. Upload it to the Zybo AFTER uploading and running PS firmware. You can use eg. xc3sprog with the following command `xc3sprog -c jtaghs1 -p 1 top.bit`. Once done LEDs LD0-LD3 should begin dusplaying 4 LSBs of the counter.
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
PART?=xc7z020clg400-1
|
||||
VIVADO_PART?=$(PART)
|
||||
BIT2FASM_ARGS= --part "$(XRAY_DIR)/database/$(XRAY_DATABASE)/$(PART)" --verbose
|
||||
|
||||
.PHONY: clean
|
||||
.PRECIOUS: *.bit
|
||||
|
||||
clean:
|
||||
rm -rf *.fasm
|
||||
rm -rf *.bit
|
||||
rm -rf *.dcp
|
||||
rm -rf *.log
|
||||
rm -rf build-*
|
||||
|
||||
%.bit: %.v
|
||||
mkdir -p build-$(basename $@)
|
||||
cd build-$(basename $@) && env PROJECT_NAME=$(basename $@) VIVADO_PART=${VIVADO_PART} $(XRAY_VIVADO) -mode batch -source ../syn+par.tcl -nojournal -log ../$@.log
|
||||
rm -rf *.backup.log
|
||||
|
||||
%.fasm: %.bit
|
||||
$(XRAY_BIT2FASM) $(BIT2FASM_ARGS) $< > $@ || rm -rf $@
|
||||
@sort -u -o $@ $@
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
create_project -force -name $env(PROJECT_NAME) -part $env(VIVADO_PART)
|
||||
|
||||
read_verilog ../$env(PROJECT_NAME).v
|
||||
synth_design -top top
|
||||
|
||||
source ../zybo.xdc
|
||||
|
||||
place_design
|
||||
route_design
|
||||
|
||||
write_checkpoint -force ../$env(PROJECT_NAME).dcp
|
||||
write_bitstream -force ../$env(PROJECT_NAME).bit
|
||||
|
|
@ -0,0 +1,639 @@
|
|||
module top(
|
||||
input wire [3:0] btn,
|
||||
output wire [3:0] led
|
||||
);
|
||||
|
||||
wire [63:0] emio_gpio_o;
|
||||
wire [63:0] emio_gpio_t;
|
||||
wire [63:0] emio_gpio_i;
|
||||
|
||||
assign led = emio_gpio_o[3:0] ^ btn[3:0];
|
||||
assign emio_gpio_i = 'd0;
|
||||
|
||||
// The PS7
|
||||
(* KEEP, DONT_TOUCH *)
|
||||
PS7 the_PS (
|
||||
.DMA0DATYPE (),
|
||||
.DMA0DAVALID (),
|
||||
.DMA0DRREADY (),
|
||||
.DMA0RSTN (),
|
||||
.DMA1DATYPE (),
|
||||
.DMA1DAVALID (),
|
||||
.DMA1DRREADY (),
|
||||
.DMA1RSTN (),
|
||||
.DMA2DATYPE (),
|
||||
.DMA2DAVALID (),
|
||||
.DMA2DRREADY (),
|
||||
.DMA2RSTN (),
|
||||
.DMA3DATYPE (),
|
||||
.DMA3DAVALID (),
|
||||
.DMA3DRREADY (),
|
||||
.DMA3RSTN (),
|
||||
.EMIOCAN0PHYTX (),
|
||||
.EMIOCAN1PHYTX (),
|
||||
.EMIOENET0GMIITXD (),
|
||||
.EMIOENET0GMIITXEN (),
|
||||
.EMIOENET0GMIITXER (),
|
||||
.EMIOENET0MDIOMDC (),
|
||||
.EMIOENET0MDIOO (),
|
||||
.EMIOENET0MDIOTN (),
|
||||
.EMIOENET0PTPDELAYREQRX (),
|
||||
.EMIOENET0PTPDELAYREQTX (),
|
||||
.EMIOENET0PTPPDELAYREQRX (),
|
||||
.EMIOENET0PTPPDELAYREQTX (),
|
||||
.EMIOENET0PTPPDELAYRESPRX (),
|
||||
.EMIOENET0PTPPDELAYRESPTX (),
|
||||
.EMIOENET0PTPSYNCFRAMERX (),
|
||||
.EMIOENET0PTPSYNCFRAMETX (),
|
||||
.EMIOENET0SOFRX (),
|
||||
.EMIOENET0SOFTX (),
|
||||
.EMIOENET1GMIITXD (),
|
||||
.EMIOENET1GMIITXEN (),
|
||||
.EMIOENET1GMIITXER (),
|
||||
.EMIOENET1MDIOMDC (),
|
||||
.EMIOENET1MDIOO (),
|
||||
.EMIOENET1MDIOTN (),
|
||||
.EMIOENET1PTPDELAYREQRX (),
|
||||
.EMIOENET1PTPDELAYREQTX (),
|
||||
.EMIOENET1PTPPDELAYREQRX (),
|
||||
.EMIOENET1PTPPDELAYREQTX (),
|
||||
.EMIOENET1PTPPDELAYRESPRX (),
|
||||
.EMIOENET1PTPPDELAYRESPTX (),
|
||||
.EMIOENET1PTPSYNCFRAMERX (),
|
||||
.EMIOENET1PTPSYNCFRAMETX (),
|
||||
.EMIOENET1SOFRX (),
|
||||
.EMIOENET1SOFTX (),
|
||||
.EMIOGPIOO (emio_gpio_o),
|
||||
.EMIOGPIOTN (emio_gpio_t),
|
||||
.EMIOI2C0SCLO (),
|
||||
.EMIOI2C0SCLTN (),
|
||||
.EMIOI2C0SDAO (),
|
||||
.EMIOI2C0SDATN (),
|
||||
.EMIOI2C1SCLO (),
|
||||
.EMIOI2C1SCLTN (),
|
||||
.EMIOI2C1SDAO (),
|
||||
.EMIOI2C1SDATN (),
|
||||
.EMIOPJTAGTDO (),
|
||||
.EMIOPJTAGTDTN (),
|
||||
.EMIOSDIO0BUSPOW (),
|
||||
.EMIOSDIO0BUSVOLT (),
|
||||
.EMIOSDIO0CLK (),
|
||||
.EMIOSDIO0CMDO (),
|
||||
.EMIOSDIO0CMDTN (),
|
||||
.EMIOSDIO0DATAO (),
|
||||
.EMIOSDIO0DATATN (),
|
||||
.EMIOSDIO0LED (),
|
||||
.EMIOSDIO1BUSPOW (),
|
||||
.EMIOSDIO1BUSVOLT (),
|
||||
.EMIOSDIO1CLK (),
|
||||
.EMIOSDIO1CMDO (),
|
||||
.EMIOSDIO1CMDTN (),
|
||||
.EMIOSDIO1DATAO (),
|
||||
.EMIOSDIO1DATATN (),
|
||||
.EMIOSDIO1LED (),
|
||||
.EMIOSPI0MO (),
|
||||
.EMIOSPI0MOTN (),
|
||||
.EMIOSPI0SCLKO (),
|
||||
.EMIOSPI0SCLKTN (),
|
||||
.EMIOSPI0SO (),
|
||||
.EMIOSPI0SSNTN (),
|
||||
.EMIOSPI0SSON (),
|
||||
.EMIOSPI0STN (),
|
||||
.EMIOSPI1MO (),
|
||||
.EMIOSPI1MOTN (),
|
||||
.EMIOSPI1SCLKO (),
|
||||
.EMIOSPI1SCLKTN (),
|
||||
.EMIOSPI1SO (),
|
||||
.EMIOSPI1SSNTN (),
|
||||
.EMIOSPI1SSON (),
|
||||
.EMIOSPI1STN (),
|
||||
.EMIOTRACECTL (),
|
||||
.EMIOTRACEDATA (),
|
||||
.EMIOTTC0WAVEO (),
|
||||
.EMIOTTC1WAVEO (),
|
||||
.EMIOUART0DTRN (),
|
||||
.EMIOUART0RTSN (),
|
||||
.EMIOUART0TX (),
|
||||
.EMIOUART1DTRN (),
|
||||
.EMIOUART1RTSN (),
|
||||
.EMIOUART1TX (),
|
||||
.EMIOUSB0PORTINDCTL (),
|
||||
.EMIOUSB0VBUSPWRSELECT (),
|
||||
.EMIOUSB1PORTINDCTL (),
|
||||
.EMIOUSB1VBUSPWRSELECT (),
|
||||
.EMIOWDTRSTO (),
|
||||
.EVENTEVENTO (),
|
||||
.EVENTSTANDBYWFE (),
|
||||
.EVENTSTANDBYWFI (),
|
||||
.FCLKCLK (),
|
||||
.FCLKRESETN (),
|
||||
.FTMTF2PTRIGACK (),
|
||||
.FTMTP2FDEBUG (),
|
||||
.FTMTP2FTRIG (),
|
||||
.IRQP2F (),
|
||||
.MAXIGP0ARADDR (),
|
||||
.MAXIGP0ARBURST (),
|
||||
.MAXIGP0ARCACHE (),
|
||||
.MAXIGP0ARESETN (),
|
||||
.MAXIGP0ARID (),
|
||||
.MAXIGP0ARLEN (),
|
||||
.MAXIGP0ARLOCK (),
|
||||
.MAXIGP0ARPROT (),
|
||||
.MAXIGP0ARQOS (),
|
||||
.MAXIGP0ARSIZE (),
|
||||
.MAXIGP0ARVALID (),
|
||||
.MAXIGP0AWADDR (),
|
||||
.MAXIGP0AWBURST (),
|
||||
.MAXIGP0AWCACHE (),
|
||||
.MAXIGP0AWID (),
|
||||
.MAXIGP0AWLEN (),
|
||||
.MAXIGP0AWLOCK (),
|
||||
.MAXIGP0AWPROT (),
|
||||
.MAXIGP0AWQOS (),
|
||||
.MAXIGP0AWSIZE (),
|
||||
.MAXIGP0AWVALID (),
|
||||
.MAXIGP0BREADY (),
|
||||
.MAXIGP0RREADY (),
|
||||
.MAXIGP0WDATA (),
|
||||
.MAXIGP0WID (),
|
||||
.MAXIGP0WLAST (),
|
||||
.MAXIGP0WSTRB (),
|
||||
.MAXIGP0WVALID (),
|
||||
.MAXIGP1ARADDR (),
|
||||
.MAXIGP1ARBURST (),
|
||||
.MAXIGP1ARCACHE (),
|
||||
.MAXIGP1ARESETN (),
|
||||
.MAXIGP1ARID (),
|
||||
.MAXIGP1ARLEN (),
|
||||
.MAXIGP1ARLOCK (),
|
||||
.MAXIGP1ARPROT (),
|
||||
.MAXIGP1ARQOS (),
|
||||
.MAXIGP1ARSIZE (),
|
||||
.MAXIGP1ARVALID (),
|
||||
.MAXIGP1AWADDR (),
|
||||
.MAXIGP1AWBURST (),
|
||||
.MAXIGP1AWCACHE (),
|
||||
.MAXIGP1AWID (),
|
||||
.MAXIGP1AWLEN (),
|
||||
.MAXIGP1AWLOCK (),
|
||||
.MAXIGP1AWPROT (),
|
||||
.MAXIGP1AWQOS (),
|
||||
.MAXIGP1AWSIZE (),
|
||||
.MAXIGP1AWVALID (),
|
||||
.MAXIGP1BREADY (),
|
||||
.MAXIGP1RREADY (),
|
||||
.MAXIGP1WDATA (),
|
||||
.MAXIGP1WID (),
|
||||
.MAXIGP1WLAST (),
|
||||
.MAXIGP1WSTRB (),
|
||||
.MAXIGP1WVALID (),
|
||||
.SAXIACPARESETN (),
|
||||
.SAXIACPARREADY (),
|
||||
.SAXIACPAWREADY (),
|
||||
.SAXIACPBID (),
|
||||
.SAXIACPBRESP (),
|
||||
.SAXIACPBVALID (),
|
||||
.SAXIACPRDATA (),
|
||||
.SAXIACPRID (),
|
||||
.SAXIACPRLAST (),
|
||||
.SAXIACPRRESP (),
|
||||
.SAXIACPRVALID (),
|
||||
.SAXIACPWREADY (),
|
||||
.SAXIGP0ARESETN (),
|
||||
.SAXIGP0ARREADY (),
|
||||
.SAXIGP0AWREADY (),
|
||||
.SAXIGP0BID (),
|
||||
.SAXIGP0BRESP (),
|
||||
.SAXIGP0BVALID (),
|
||||
.SAXIGP0RDATA (),
|
||||
.SAXIGP0RID (),
|
||||
.SAXIGP0RLAST (),
|
||||
.SAXIGP0RRESP (),
|
||||
.SAXIGP0RVALID (),
|
||||
.SAXIGP0WREADY (),
|
||||
.SAXIGP1ARESETN (),
|
||||
.SAXIGP1ARREADY (),
|
||||
.SAXIGP1AWREADY (),
|
||||
.SAXIGP1BID (),
|
||||
.SAXIGP1BRESP (),
|
||||
.SAXIGP1BVALID (),
|
||||
.SAXIGP1RDATA (),
|
||||
.SAXIGP1RID (),
|
||||
.SAXIGP1RLAST (),
|
||||
.SAXIGP1RRESP (),
|
||||
.SAXIGP1RVALID (),
|
||||
.SAXIGP1WREADY (),
|
||||
.SAXIHP0ARESETN (),
|
||||
.SAXIHP0ARREADY (),
|
||||
.SAXIHP0AWREADY (),
|
||||
.SAXIHP0BID (),
|
||||
.SAXIHP0BRESP (),
|
||||
.SAXIHP0BVALID (),
|
||||
.SAXIHP0RACOUNT (),
|
||||
.SAXIHP0RCOUNT (),
|
||||
.SAXIHP0RDATA (),
|
||||
.SAXIHP0RID (),
|
||||
.SAXIHP0RLAST (),
|
||||
.SAXIHP0RRESP (),
|
||||
.SAXIHP0RVALID (),
|
||||
.SAXIHP0WACOUNT (),
|
||||
.SAXIHP0WCOUNT (),
|
||||
.SAXIHP0WREADY (),
|
||||
.SAXIHP1ARESETN (),
|
||||
.SAXIHP1ARREADY (),
|
||||
.SAXIHP1AWREADY (),
|
||||
.SAXIHP1BID (),
|
||||
.SAXIHP1BRESP (),
|
||||
.SAXIHP1BVALID (),
|
||||
.SAXIHP1RACOUNT (),
|
||||
.SAXIHP1RCOUNT (),
|
||||
.SAXIHP1RDATA (),
|
||||
.SAXIHP1RID (),
|
||||
.SAXIHP1RLAST (),
|
||||
.SAXIHP1RRESP (),
|
||||
.SAXIHP1RVALID (),
|
||||
.SAXIHP1WACOUNT (),
|
||||
.SAXIHP1WCOUNT (),
|
||||
.SAXIHP1WREADY (),
|
||||
.SAXIHP2ARESETN (),
|
||||
.SAXIHP2ARREADY (),
|
||||
.SAXIHP2AWREADY (),
|
||||
.SAXIHP2BID (),
|
||||
.SAXIHP2BRESP (),
|
||||
.SAXIHP2BVALID (),
|
||||
.SAXIHP2RACOUNT (),
|
||||
.SAXIHP2RCOUNT (),
|
||||
.SAXIHP2RDATA (),
|
||||
.SAXIHP2RID (),
|
||||
.SAXIHP2RLAST (),
|
||||
.SAXIHP2RRESP (),
|
||||
.SAXIHP2RVALID (),
|
||||
.SAXIHP2WACOUNT (),
|
||||
.SAXIHP2WCOUNT (),
|
||||
.SAXIHP2WREADY (),
|
||||
.SAXIHP3ARESETN (),
|
||||
.SAXIHP3ARREADY (),
|
||||
.SAXIHP3AWREADY (),
|
||||
.SAXIHP3BID (),
|
||||
.SAXIHP3BRESP (),
|
||||
.SAXIHP3BVALID (),
|
||||
.SAXIHP3RACOUNT (),
|
||||
.SAXIHP3RCOUNT (),
|
||||
.SAXIHP3RDATA (),
|
||||
.SAXIHP3RID (),
|
||||
.SAXIHP3RLAST (),
|
||||
.SAXIHP3RRESP (),
|
||||
.SAXIHP3RVALID (),
|
||||
.SAXIHP3WACOUNT (),
|
||||
.SAXIHP3WCOUNT (),
|
||||
.SAXIHP3WREADY (),
|
||||
.DDRA (),
|
||||
.DDRBA (),
|
||||
.DDRCASB (),
|
||||
.DDRCKE (),
|
||||
.DDRCKN (),
|
||||
.DDRCKP (),
|
||||
.DDRCSB (),
|
||||
.DDRDM (),
|
||||
.DDRDQ (),
|
||||
.DDRDQSN (),
|
||||
.DDRDQSP (),
|
||||
.DDRDRSTB (),
|
||||
.DDRODT (),
|
||||
.DDRRASB (),
|
||||
.DDRVRN (),
|
||||
.DDRVRP (),
|
||||
.DDRWEB (),
|
||||
.MIO (),
|
||||
.PSCLK (),
|
||||
.PSPORB (),
|
||||
.PSSRSTB (),
|
||||
.DDRARB (),
|
||||
.DMA0ACLK (),
|
||||
.DMA0DAREADY (),
|
||||
.DMA0DRLAST (),
|
||||
.DMA0DRTYPE (),
|
||||
.DMA0DRVALID (),
|
||||
.DMA1ACLK (),
|
||||
.DMA1DAREADY (),
|
||||
.DMA1DRLAST (),
|
||||
.DMA1DRTYPE (),
|
||||
.DMA1DRVALID (),
|
||||
.DMA2ACLK (),
|
||||
.DMA2DAREADY (),
|
||||
.DMA2DRLAST (),
|
||||
.DMA2DRTYPE (),
|
||||
.DMA2DRVALID (),
|
||||
.DMA3ACLK (),
|
||||
.DMA3DAREADY (),
|
||||
.DMA3DRLAST (),
|
||||
.DMA3DRTYPE (),
|
||||
.DMA3DRVALID (),
|
||||
.EMIOCAN0PHYRX (),
|
||||
.EMIOCAN1PHYRX (),
|
||||
.EMIOENET0EXTINTIN (),
|
||||
.EMIOENET0GMIICOL (),
|
||||
.EMIOENET0GMIICRS (),
|
||||
.EMIOENET0GMIIRXCLK (),
|
||||
.EMIOENET0GMIIRXD (),
|
||||
.EMIOENET0GMIIRXDV (),
|
||||
.EMIOENET0GMIIRXER (),
|
||||
.EMIOENET0GMIITXCLK (),
|
||||
.EMIOENET0MDIOI (),
|
||||
.EMIOENET1EXTINTIN (),
|
||||
.EMIOENET1GMIICOL (),
|
||||
.EMIOENET1GMIICRS (),
|
||||
.EMIOENET1GMIIRXCLK (),
|
||||
.EMIOENET1GMIIRXD (),
|
||||
.EMIOENET1GMIIRXDV (),
|
||||
.EMIOENET1GMIIRXER (),
|
||||
.EMIOENET1GMIITXCLK (),
|
||||
.EMIOENET1MDIOI (),
|
||||
.EMIOGPIOI (emio_gpio_i),
|
||||
.EMIOI2C0SCLI (),
|
||||
.EMIOI2C0SDAI (),
|
||||
.EMIOI2C1SCLI (),
|
||||
.EMIOI2C1SDAI (),
|
||||
.EMIOPJTAGTCK (),
|
||||
.EMIOPJTAGTDI (),
|
||||
.EMIOPJTAGTMS (),
|
||||
.EMIOSDIO0CDN (),
|
||||
.EMIOSDIO0CLKFB (),
|
||||
.EMIOSDIO0CMDI (),
|
||||
.EMIOSDIO0DATAI (),
|
||||
.EMIOSDIO0WP (),
|
||||
.EMIOSDIO1CDN (),
|
||||
.EMIOSDIO1CLKFB (),
|
||||
.EMIOSDIO1CMDI (),
|
||||
.EMIOSDIO1DATAI (),
|
||||
.EMIOSDIO1WP (),
|
||||
.EMIOSPI0MI (),
|
||||
.EMIOSPI0SCLKI (),
|
||||
.EMIOSPI0SI (),
|
||||
.EMIOSPI0SSIN (),
|
||||
.EMIOSPI1MI (),
|
||||
.EMIOSPI1SCLKI (),
|
||||
.EMIOSPI1SI (),
|
||||
.EMIOSPI1SSIN (),
|
||||
.EMIOSRAMINTIN (),
|
||||
.EMIOTRACECLK (),
|
||||
.EMIOTTC0CLKI (),
|
||||
.EMIOTTC1CLKI (),
|
||||
.EMIOUART0CTSN (),
|
||||
.EMIOUART0DCDN (),
|
||||
.EMIOUART0DSRN (),
|
||||
.EMIOUART0RIN (),
|
||||
.EMIOUART0RX (),
|
||||
.EMIOUART1CTSN (),
|
||||
.EMIOUART1DCDN (),
|
||||
.EMIOUART1DSRN (),
|
||||
.EMIOUART1RIN (),
|
||||
.EMIOUART1RX (),
|
||||
.EMIOUSB0VBUSPWRFAULT (),
|
||||
.EMIOUSB1VBUSPWRFAULT (),
|
||||
.EMIOWDTCLKI (),
|
||||
.EVENTEVENTI (),
|
||||
.FCLKCLKTRIGN (),
|
||||
.FPGAIDLEN (),
|
||||
.FTMDTRACEINATID (),
|
||||
.FTMDTRACEINCLOCK (),
|
||||
.FTMDTRACEINDATA (),
|
||||
.FTMDTRACEINVALID (),
|
||||
.FTMTF2PDEBUG (),
|
||||
.FTMTF2PTRIG (),
|
||||
.FTMTP2FTRIGACK (),
|
||||
.IRQF2P (),
|
||||
.MAXIGP0ACLK (),
|
||||
.MAXIGP0ARREADY (),
|
||||
.MAXIGP0AWREADY (),
|
||||
.MAXIGP0BID (),
|
||||
.MAXIGP0BRESP (),
|
||||
.MAXIGP0BVALID (),
|
||||
.MAXIGP0RDATA (),
|
||||
.MAXIGP0RID (),
|
||||
.MAXIGP0RLAST (),
|
||||
.MAXIGP0RRESP (),
|
||||
.MAXIGP0RVALID (),
|
||||
.MAXIGP0WREADY (),
|
||||
.MAXIGP1ACLK (),
|
||||
.MAXIGP1ARREADY (),
|
||||
.MAXIGP1AWREADY (),
|
||||
.MAXIGP1BID (),
|
||||
.MAXIGP1BRESP (),
|
||||
.MAXIGP1BVALID (),
|
||||
.MAXIGP1RDATA (),
|
||||
.MAXIGP1RID (),
|
||||
.MAXIGP1RLAST (),
|
||||
.MAXIGP1RRESP (),
|
||||
.MAXIGP1RVALID (),
|
||||
.MAXIGP1WREADY (),
|
||||
.SAXIACPACLK (),
|
||||
.SAXIACPARADDR (),
|
||||
.SAXIACPARBURST (),
|
||||
.SAXIACPARCACHE (),
|
||||
.SAXIACPARID (),
|
||||
.SAXIACPARLEN (),
|
||||
.SAXIACPARLOCK (),
|
||||
.SAXIACPARPROT (),
|
||||
.SAXIACPARQOS (),
|
||||
.SAXIACPARSIZE (),
|
||||
.SAXIACPARUSER (),
|
||||
.SAXIACPARVALID (),
|
||||
.SAXIACPAWADDR (),
|
||||
.SAXIACPAWBURST (),
|
||||
.SAXIACPAWCACHE (),
|
||||
.SAXIACPAWID (),
|
||||
.SAXIACPAWLEN (),
|
||||
.SAXIACPAWLOCK (),
|
||||
.SAXIACPAWPROT (),
|
||||
.SAXIACPAWQOS (),
|
||||
.SAXIACPAWSIZE (),
|
||||
.SAXIACPAWUSER (),
|
||||
.SAXIACPAWVALID (),
|
||||
.SAXIACPBREADY (),
|
||||
.SAXIACPRREADY (),
|
||||
.SAXIACPWDATA (),
|
||||
.SAXIACPWID (),
|
||||
.SAXIACPWLAST (),
|
||||
.SAXIACPWSTRB (),
|
||||
.SAXIACPWVALID (),
|
||||
.SAXIGP0ACLK (),
|
||||
.SAXIGP0ARADDR (),
|
||||
.SAXIGP0ARBURST (),
|
||||
.SAXIGP0ARCACHE (),
|
||||
.SAXIGP0ARID (),
|
||||
.SAXIGP0ARLEN (),
|
||||
.SAXIGP0ARLOCK (),
|
||||
.SAXIGP0ARPROT (),
|
||||
.SAXIGP0ARQOS (),
|
||||
.SAXIGP0ARSIZE (),
|
||||
.SAXIGP0ARVALID (),
|
||||
.SAXIGP0AWADDR (),
|
||||
.SAXIGP0AWBURST (),
|
||||
.SAXIGP0AWCACHE (),
|
||||
.SAXIGP0AWID (),
|
||||
.SAXIGP0AWLEN (),
|
||||
.SAXIGP0AWLOCK (),
|
||||
.SAXIGP0AWPROT (),
|
||||
.SAXIGP0AWQOS (),
|
||||
.SAXIGP0AWSIZE (),
|
||||
.SAXIGP0AWVALID (),
|
||||
.SAXIGP0BREADY (),
|
||||
.SAXIGP0RREADY (),
|
||||
.SAXIGP0WDATA (),
|
||||
.SAXIGP0WID (),
|
||||
.SAXIGP0WLAST (),
|
||||
.SAXIGP0WSTRB (),
|
||||
.SAXIGP0WVALID (),
|
||||
.SAXIGP1ACLK (),
|
||||
.SAXIGP1ARADDR (),
|
||||
.SAXIGP1ARBURST (),
|
||||
.SAXIGP1ARCACHE (),
|
||||
.SAXIGP1ARID (),
|
||||
.SAXIGP1ARLEN (),
|
||||
.SAXIGP1ARLOCK (),
|
||||
.SAXIGP1ARPROT (),
|
||||
.SAXIGP1ARQOS (),
|
||||
.SAXIGP1ARSIZE (),
|
||||
.SAXIGP1ARVALID (),
|
||||
.SAXIGP1AWADDR (),
|
||||
.SAXIGP1AWBURST (),
|
||||
.SAXIGP1AWCACHE (),
|
||||
.SAXIGP1AWID (),
|
||||
.SAXIGP1AWLEN (),
|
||||
.SAXIGP1AWLOCK (),
|
||||
.SAXIGP1AWPROT (),
|
||||
.SAXIGP1AWQOS (),
|
||||
.SAXIGP1AWSIZE (),
|
||||
.SAXIGP1AWVALID (),
|
||||
.SAXIGP1BREADY (),
|
||||
.SAXIGP1RREADY (),
|
||||
.SAXIGP1WDATA (),
|
||||
.SAXIGP1WID (),
|
||||
.SAXIGP1WLAST (),
|
||||
.SAXIGP1WSTRB (),
|
||||
.SAXIGP1WVALID (),
|
||||
.SAXIHP0ACLK (),
|
||||
.SAXIHP0ARADDR (),
|
||||
.SAXIHP0ARBURST (),
|
||||
.SAXIHP0ARCACHE (),
|
||||
.SAXIHP0ARID (),
|
||||
.SAXIHP0ARLEN (),
|
||||
.SAXIHP0ARLOCK (),
|
||||
.SAXIHP0ARPROT (),
|
||||
.SAXIHP0ARQOS (),
|
||||
.SAXIHP0ARSIZE (),
|
||||
.SAXIHP0ARVALID (),
|
||||
.SAXIHP0AWADDR (),
|
||||
.SAXIHP0AWBURST (),
|
||||
.SAXIHP0AWCACHE (),
|
||||
.SAXIHP0AWID (),
|
||||
.SAXIHP0AWLEN (),
|
||||
.SAXIHP0AWLOCK (),
|
||||
.SAXIHP0AWPROT (),
|
||||
.SAXIHP0AWQOS (),
|
||||
.SAXIHP0AWSIZE (),
|
||||
.SAXIHP0AWVALID (),
|
||||
.SAXIHP0BREADY (),
|
||||
.SAXIHP0RDISSUECAP1EN (),
|
||||
.SAXIHP0RREADY (),
|
||||
.SAXIHP0WDATA (),
|
||||
.SAXIHP0WID (),
|
||||
.SAXIHP0WLAST (),
|
||||
.SAXIHP0WRISSUECAP1EN (),
|
||||
.SAXIHP0WSTRB (),
|
||||
.SAXIHP0WVALID (),
|
||||
.SAXIHP1ACLK (),
|
||||
.SAXIHP1ARADDR (),
|
||||
.SAXIHP1ARBURST (),
|
||||
.SAXIHP1ARCACHE (),
|
||||
.SAXIHP1ARID (),
|
||||
.SAXIHP1ARLEN (),
|
||||
.SAXIHP1ARLOCK (),
|
||||
.SAXIHP1ARPROT (),
|
||||
.SAXIHP1ARQOS (),
|
||||
.SAXIHP1ARSIZE (),
|
||||
.SAXIHP1ARVALID (),
|
||||
.SAXIHP1AWADDR (),
|
||||
.SAXIHP1AWBURST (),
|
||||
.SAXIHP1AWCACHE (),
|
||||
.SAXIHP1AWID (),
|
||||
.SAXIHP1AWLEN (),
|
||||
.SAXIHP1AWLOCK (),
|
||||
.SAXIHP1AWPROT (),
|
||||
.SAXIHP1AWQOS (),
|
||||
.SAXIHP1AWSIZE (),
|
||||
.SAXIHP1AWVALID (),
|
||||
.SAXIHP1BREADY (),
|
||||
.SAXIHP1RDISSUECAP1EN (),
|
||||
.SAXIHP1RREADY (),
|
||||
.SAXIHP1WDATA (),
|
||||
.SAXIHP1WID (),
|
||||
.SAXIHP1WLAST (),
|
||||
.SAXIHP1WRISSUECAP1EN (),
|
||||
.SAXIHP1WSTRB (),
|
||||
.SAXIHP1WVALID (),
|
||||
.SAXIHP2ACLK (),
|
||||
.SAXIHP2ARADDR (),
|
||||
.SAXIHP2ARBURST (),
|
||||
.SAXIHP2ARCACHE (),
|
||||
.SAXIHP2ARID (),
|
||||
.SAXIHP2ARLEN (),
|
||||
.SAXIHP2ARLOCK (),
|
||||
.SAXIHP2ARPROT (),
|
||||
.SAXIHP2ARQOS (),
|
||||
.SAXIHP2ARSIZE (),
|
||||
.SAXIHP2ARVALID (),
|
||||
.SAXIHP2AWADDR (),
|
||||
.SAXIHP2AWBURST (),
|
||||
.SAXIHP2AWCACHE (),
|
||||
.SAXIHP2AWID (),
|
||||
.SAXIHP2AWLEN (),
|
||||
.SAXIHP2AWLOCK (),
|
||||
.SAXIHP2AWPROT (),
|
||||
.SAXIHP2AWQOS (),
|
||||
.SAXIHP2AWSIZE (),
|
||||
.SAXIHP2AWVALID (),
|
||||
.SAXIHP2BREADY (),
|
||||
.SAXIHP2RDISSUECAP1EN (),
|
||||
.SAXIHP2RREADY (),
|
||||
.SAXIHP2WDATA (),
|
||||
.SAXIHP2WID (),
|
||||
.SAXIHP2WLAST (),
|
||||
.SAXIHP2WRISSUECAP1EN (),
|
||||
.SAXIHP2WSTRB (),
|
||||
.SAXIHP2WVALID (),
|
||||
.SAXIHP3ACLK (),
|
||||
.SAXIHP3ARADDR (),
|
||||
.SAXIHP3ARBURST (),
|
||||
.SAXIHP3ARCACHE (),
|
||||
.SAXIHP3ARID (),
|
||||
.SAXIHP3ARLEN (),
|
||||
.SAXIHP3ARLOCK (),
|
||||
.SAXIHP3ARPROT (),
|
||||
.SAXIHP3ARQOS (),
|
||||
.SAXIHP3ARSIZE (),
|
||||
.SAXIHP3ARVALID (),
|
||||
.SAXIHP3AWADDR (),
|
||||
.SAXIHP3AWBURST (),
|
||||
.SAXIHP3AWCACHE (),
|
||||
.SAXIHP3AWID (),
|
||||
.SAXIHP3AWLEN (),
|
||||
.SAXIHP3AWLOCK (),
|
||||
.SAXIHP3AWPROT (),
|
||||
.SAXIHP3AWQOS (),
|
||||
.SAXIHP3AWSIZE (),
|
||||
.SAXIHP3AWVALID (),
|
||||
.SAXIHP3BREADY (),
|
||||
.SAXIHP3RDISSUECAP1EN (),
|
||||
.SAXIHP3RREADY (),
|
||||
.SAXIHP3WDATA (),
|
||||
.SAXIHP3WID (),
|
||||
.SAXIHP3WLAST (),
|
||||
.SAXIHP3WRISSUECAP1EN (),
|
||||
.SAXIHP3WSTRB (),
|
||||
.SAXIHP3WVALID ()
|
||||
);
|
||||
|
||||
|
||||
endmodule
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
# LEDs
|
||||
set_property PACKAGE_PIN M14 [get_ports led[0]]
|
||||
set_property PACKAGE_PIN M15 [get_ports led[1]]
|
||||
set_property PACKAGE_PIN G14 [get_ports led[2]]
|
||||
set_property PACKAGE_PIN D18 [get_ports led[3]]
|
||||
|
||||
# Pushbuttons
|
||||
set_property PACKAGE_PIN K18 [get_ports btn[0]]
|
||||
set_property PACKAGE_PIN P16 [get_ports btn[1]]
|
||||
set_property PACKAGE_PIN K19 [get_ports btn[2]]
|
||||
set_property PACKAGE_PIN Y16 [get_ports btn[3]]
|
||||
|
||||
foreach port [get_ports] {
|
||||
set_property IOSTANDARD LVCMOS33 $port
|
||||
set_property SLEW SLOW $port
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
.PHONY: all clean
|
||||
|
||||
all: firmware run
|
||||
|
||||
clean:
|
||||
rm -rf *.elf
|
||||
rm -rf *.o
|
||||
|
||||
firmware:
|
||||
arm-linux-gnueabihf-as -o blink.o blink.s
|
||||
arm-linux-gnueabihf-ld -o blink.elf -T blink.ld blink.o
|
||||
|
||||
run: blink.elf
|
||||
xsct blink.tcl
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
SECTIONS {
|
||||
. = 0x0;
|
||||
.text : { *(.text) }
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
@ https://craigjb.com/2019/03/04/zynq-baremetal-blinky/
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@ Constants
|
||||
|
||||
.equ C_GPIO_BASE, 0xE000A000
|
||||
.equ C_GPIO_DIRM_0, 0x00000204
|
||||
.equ C_GPIO_OEN_0, 0x00000208
|
||||
.equ C_GPIO_DATA_0, 0x00000040
|
||||
.equ C_GPIO_DIRM_2, 0x00000284
|
||||
.equ C_GPIO_OEN_2, 0x00000288
|
||||
.equ C_GPIO_DATA_2, 0x00000048
|
||||
|
||||
.equ C_SLCR_BASE, 0xF8000000
|
||||
.equ C_SLCR_UNLOCK, 0x00000008
|
||||
.equ C_SLCR_LOCK, 0x00000004
|
||||
.equ C_SLCR_MIO_PIN_07, 0x0000071C
|
||||
.equ C_SLCR_LVL_SHFTR_EN, 0x00000900
|
||||
.equ C_SLCR_LOCK_KEY, 0x767B
|
||||
.equ C_SLCR_UNLOCK_KEY, 0xDF0D
|
||||
|
||||
.equ C_DELAY, 0x00200000
|
||||
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@ Vector table
|
||||
|
||||
.section .text
|
||||
.code 32
|
||||
.globl vectors
|
||||
vectors:
|
||||
b entry @ reset
|
||||
b . @ undefined instruction
|
||||
b . @ software interrupt
|
||||
b . @ prefetch abort
|
||||
b . @ data abort
|
||||
b . @ hypervisor entry
|
||||
b . @ interrupt
|
||||
b . @ fast interrupt
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@ The code
|
||||
|
||||
entry:
|
||||
@ unlock SLCR
|
||||
ldr r0, SLCR_BASE
|
||||
ldr r1, SLCR_UNLOCK_KEY
|
||||
str r1, [r0, #C_SLCR_UNLOCK]
|
||||
|
||||
@ setup MIO pin, LVCMO33 and no tri-state
|
||||
mov r1, #0x600
|
||||
str r1, [r0, #C_SLCR_MIO_PIN_07]
|
||||
|
||||
@ enable level shifters on PS-PL interface
|
||||
mov r1, #0xF
|
||||
str r1, [r0, #C_SLCR_LVL_SHFTR_EN]
|
||||
|
||||
@ lock SLCR
|
||||
ldr r1, SLCR_LOCK_KEY
|
||||
str r1, [r0, #C_SLCR_LOCK]
|
||||
|
||||
@ setup GPIO0 dir, output en, and data
|
||||
ldr r0, GPIO_BASE
|
||||
mov r1, #0x80
|
||||
str r1, [r0, #C_GPIO_DIRM_0]
|
||||
str r1, [r0, #C_GPIO_OEN_0]
|
||||
str r1, [r0, #C_GPIO_DATA_0]
|
||||
mov r1, #0x0F
|
||||
str r1, [r0, #C_GPIO_DIRM_2]
|
||||
str r1, [r0, #C_GPIO_OEN_2]
|
||||
mov r1, #0x00
|
||||
str r1, [r0, #C_GPIO_DATA_2]
|
||||
|
||||
mov r4, #0x00
|
||||
|
||||
loop_outer:
|
||||
mov r3, #C_DELAY
|
||||
|
||||
loop0:
|
||||
subs r3, r3, #1
|
||||
bne loop0
|
||||
|
||||
mov r1, #0x80
|
||||
str r1, [r0, #C_GPIO_DATA_0]
|
||||
|
||||
mov r3, #C_DELAY
|
||||
loop1:
|
||||
subs r3, r3, #1
|
||||
bne loop1
|
||||
|
||||
mov r1, #0x00
|
||||
str r1, [r0, #C_GPIO_DATA_0]
|
||||
|
||||
add r4, r4, #1
|
||||
str r4, [r0, #C_GPIO_DATA_2]
|
||||
|
||||
b loop_outer
|
||||
|
||||
|
||||
b . @ just in case
|
||||
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@ Literal table
|
||||
|
||||
GPIO_BASE: .word C_GPIO_BASE
|
||||
SLCR_BASE: .word C_SLCR_BASE
|
||||
SLCR_LOCK_KEY: .word C_SLCR_LOCK_KEY
|
||||
SLCR_UNLOCK_KEY: .word C_SLCR_UNLOCK_KEY
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
connect
|
||||
targets -set -nocase -filter {name =~ "ARM* #0"}
|
||||
rst -system
|
||||
dow blink.elf
|
||||
con
|
||||
Loading…
Reference in New Issue