Add support for Nexys Video board (#1925)

This commit is contained in:
Saute0212 2024-04-04 18:13:32 +09:00 committed by GitHub
parent 5c7ddcbcc5
commit 5920e3d125
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
19 changed files with 504 additions and 5764 deletions

View file

@ -36,8 +36,9 @@ test-location ?= output/test
torture-logs :=
# custom elf bin to run with sim or sim-verilator
elf_file ?= tmp/riscv-tests/build/benchmarks/dhrystone.riscv
# board name for bitstream generation. Currently supported: kc705, genesys2
# board name for bitstream generation. Currently supported: kc705, genesys2, nexys_video
BOARD ?= genesys2
# root path
mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
root-dir := $(dir $(mkfile_path))
@ -76,6 +77,10 @@ else ifeq ($(BOARD), vc707)
XILINX_PART := xc7vx485tffg1761-2
XILINX_BOARD := xilinx.com:vc707:part0:1.3
CLK_PERIOD_NS := 20
else ifeq ($(BOARD), nexys_video)
XILINX_PART := xc7a200tsbg484-1
XILINX_BOARD := digilentinc.com:nexys_video:part0:1.1
CLK_PERIOD_NS := 40
else
$(error Unknown board - please specify a supported FPGA board)
endif
@ -92,6 +97,11 @@ endif
# cv64a6_imafdc_sv39, cv32a6_imac_sv0, cv32a6_imac_sv32, cv32a6_imafc_sv32, cv32a6_ima_sv32_fpga
# Changing the default target to cv32a60x for Step1 verification
target ?= cv64a6_imafdc_sv39
ifeq ($(target), cv64a6_imafdc_sv39)
XLEN ?= 64
else
XLEN ?= 32
endif
ifndef TARGET_CFG
export TARGET_CFG = $(target)
endif
@ -214,8 +224,8 @@ copro_src := $(addprefix $(root-dir), $(copro_src))
uart_src := $(wildcard corev_apu/fpga/src/apb_uart/src/*.vhd)
uart_src := $(addprefix $(root-dir), $(uart_src))
fpga_src := $(wildcard corev_apu/fpga/src/*.sv) $(wildcard corev_apu/fpga/src/bootrom/*.sv) $(wildcard corev_apu/fpga/src/ariane-ethernet/*.sv) common/local/util/tc_sram_fpga_wrapper.sv vendor/pulp-platform/fpga-support/rtl/SyncSpRamBeNx64.sv
fpga_src := $(addprefix $(root-dir), $(fpga_src))
fpga_src := $(wildcard corev_apu/fpga/src/*.sv) $(wildcard corev_apu/fpga/src/ariane-ethernet/*.sv) common/local/util/tc_sram_fpga_wrapper.sv vendor/pulp-platform/fpga-support/rtl/SyncSpRamBeNx64.sv
fpga_src := $(addprefix $(root-dir), $(fpga_src)) src/bootrom/bootrom_$(XLEN).sv
# look for testbenches
tbs := corev_apu/tb/ariane_tb.sv corev_apu/tb/ariane_testharness.sv core/cva6_rvfi.sv
@ -694,6 +704,9 @@ fpga_filter += $(addprefix $(root-dir), common/local/util/instr_tracer.sv)
fpga_filter += $(addprefix $(root-dir), vendor/pulp-platform/tech_cells_generic/src/rtl/tc_sram.sv)
fpga_filter += $(addprefix $(root-dir), common/local/util/tc_sram_wrapper.sv)
src/bootrom/bootrom_$(XLEN).sv:
$(MAKE) -C corev_apu/fpga/src/bootrom BOARD=$(BOARD) XLEN=$(XLEN) bootrom_$(XLEN).sv
fpga: $(ariane_pkg) $(src) $(fpga_src) $(uart_src) $(src_flist)
@echo "[FPGA] Generate sources"
@echo read_vhdl {$(uart_src)} > corev_apu/fpga/scripts/add_sources.tcl
@ -702,7 +715,7 @@ fpga: $(ariane_pkg) $(src) $(fpga_src) $(uart_src) $(src_flist)
@echo read_verilog -sv {$(filter-out $(fpga_filter), $(src))} >> corev_apu/fpga/scripts/add_sources.tcl
@echo read_verilog -sv {$(fpga_src)} >> corev_apu/fpga/scripts/add_sources.tcl
@echo "[FPGA] Generate Bitstream"
cd corev_apu/fpga && make BOARD=$(BOARD) XILINX_PART=$(XILINX_PART) XILINX_BOARD=$(XILINX_BOARD) CLK_PERIOD_NS=$(CLK_PERIOD_NS)
$(MAKE) -C corev_apu/fpga BOARD=$(BOARD) XILINX_PART=$(XILINX_PART) XILINX_BOARD=$(XILINX_BOARD) CLK_PERIOD_NS=$(CLK_PERIOD_NS)
.PHONY: fpga
@ -713,7 +726,8 @@ clean:
rm -rf $(riscv-torture-dir)/output/test*
rm -rf $(library)/ $(dpi-library)/ $(ver-library)/ $(vcs-library)/
rm -f tmp/*.ucdb tmp/*.log *.wlf *vstf wlft* *.ucdb
cd corev_apu/fpga && make clean && cd ../..
$(MAKE) -C corev_apu/fpga clean
$(MAKE) -C corev_apu/fpga/src/bootrom BOARD=$(BOARD) XLEN=$(XLEN) clean
.PHONY:
build sim sim-verilate clean \

View file

@ -0,0 +1,99 @@
## Buttons
set_property -dict { PACKAGE_PIN G4 IOSTANDARD LVCMOS15 } [get_ports { cpu_resetn }];
## On board single ended clock, 100MHz
set_property -dict { PACKAGE_PIN R4 IOSTANDARD LVCMOS33 } [get_ports { sys_clk_i }];
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports sys_clk_i]
## To use FT2232 JTAG
set_property -dict { PACKAGE_PIN R17 IOSTANDARD LVCMOS33 } [get_ports { trst_n }];
set_property -dict { PACKAGE_PIN U20 IOSTANDARD LVCMOS33 } [get_ports { tck }];
set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports { tdi }];
set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { tdo }];
set_property -dict { PACKAGE_PIN U17 IOSTANDARD LVCMOS33 } [get_ports { tms }];
## UART
set_property -dict { PACKAGE_PIN AA19 IOSTANDARD LVCMOS33 } [get_ports { tx }];
set_property -dict { PACKAGE_PIN V18 IOSTANDARD LVCMOS33 } [get_ports { rx }];
## LEDs
set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS25 } [get_ports { led[0] }];
set_property -dict { PACKAGE_PIN T15 IOSTANDARD LVCMOS25 } [get_ports { led[1] }];
set_property -dict { PACKAGE_PIN T16 IOSTANDARD LVCMOS25 } [get_ports { led[2] }];
set_property -dict { PACKAGE_PIN U16 IOSTANDARD LVCMOS25 } [get_ports { led[3] }];
set_property -dict { PACKAGE_PIN V15 IOSTANDARD LVCMOS25 } [get_ports { led[4] }];
set_property -dict { PACKAGE_PIN W16 IOSTANDARD LVCMOS25 } [get_ports { led[5] }];
set_property -dict { PACKAGE_PIN W15 IOSTANDARD LVCMOS25 } [get_ports { led[6] }];
set_property -dict { PACKAGE_PIN Y13 IOSTANDARD LVCMOS25 } [get_ports { led[7] }];
## Switches
set_property -dict { PACKAGE_PIN E22 IOSTANDARD LVCMOS12 } [get_ports { sw[0] }];
set_property -dict { PACKAGE_PIN F21 IOSTANDARD LVCMOS12 } [get_ports { sw[1] }];
set_property -dict { PACKAGE_PIN G21 IOSTANDARD LVCMOS12 } [get_ports { sw[2] }];
set_property -dict { PACKAGE_PIN G22 IOSTANDARD LVCMOS12 } [get_ports { sw[3] }];
set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS12 } [get_ports { sw[4] }];
set_property -dict { PACKAGE_PIN J16 IOSTANDARD LVCMOS12 } [get_ports { sw[5] }];
set_property -dict { PACKAGE_PIN K13 IOSTANDARD LVCMOS12 } [get_ports { sw[6] }];
set_property -dict { PACKAGE_PIN M17 IOSTANDARD LVCMOS12 } [get_ports { sw[7] }];
## Fan PWM
set_property -dict { PACKAGE_PIN U15 IOSTANDARD LVCMOS25 } [get_ports { fan_pwm }];
## Ethernet
set_property -dict { PACKAGE_PIN U7 IOSTANDARD LVCMOS33 } [get_ports { eth_rst_n }]; #IO_25_34 Sch=eth_rst_b
set_property -dict { PACKAGE_PIN AA14 IOSTANDARD LVCMOS25 } [get_ports { eth_txck }]; #IO_L5N_T0_13 Sch=eth_txck
set_property -dict { PACKAGE_PIN V10 IOSTANDARD LVCMOS25 } [get_ports { eth_txctl }]; #IO_L10P_T1_13 Sch=eth_txctl
set_property -dict { PACKAGE_PIN Y12 IOSTANDARD LVCMOS25 } [get_ports { eth_txd[0] }]; #IO_L11N_T1_SRCC_13 Sch=eth_txd[0]
set_property -dict { PACKAGE_PIN W12 IOSTANDARD LVCMOS25 } [get_ports { eth_txd[1] }]; #IO_L12N_T1_MRCC_13 Sch=eth_txd[1]
set_property -dict { PACKAGE_PIN W11 IOSTANDARD LVCMOS25 } [get_ports { eth_txd[2] }]; #IO_L12P_T1_MRCC_13 Sch=eth_txd[2]
set_property -dict { PACKAGE_PIN Y11 IOSTANDARD LVCMOS25 } [get_ports { eth_txd[3] }]; #IO_L11P_T1_SRCC_13 Sch=eth_txd[3]
set_property -dict { PACKAGE_PIN V13 IOSTANDARD LVCMOS25 } [get_ports { eth_rxck }]; #IO_L13P_T2_MRCC_13 Sch=eth_rxck
set_property -dict { PACKAGE_PIN W10 IOSTANDARD LVCMOS25 } [get_ports { eth_rxctl }]; #IO_L10N_T1_13 Sch=eth_rxctl
set_property -dict { PACKAGE_PIN AB16 IOSTANDARD LVCMOS25 } [get_ports { eth_rxd[0] }]; #IO_L2P_T0_13 Sch=eth_rxd[0]
set_property -dict { PACKAGE_PIN AA15 IOSTANDARD LVCMOS25 } [get_ports { eth_rxd[1] }]; #IO_L4P_T0_13 Sch=eth_rxd[1]
set_property -dict { PACKAGE_PIN AB15 IOSTANDARD LVCMOS25 } [get_ports { eth_rxd[2] }]; #IO_L4N_T0_13 Sch=eth_rxd[2]
set_property -dict { PACKAGE_PIN AB11 IOSTANDARD LVCMOS25 } [get_ports { eth_rxd[3] }]; #IO_L7P_T1_13 Sch=eth_rxd[3]
set_property -dict { PACKAGE_PIN AA16 IOSTANDARD LVCMOS25 } [get_ports { eth_mdc }]; #IO_L1N_T0_13 Sch=eth_mdc
set_property -dict { PACKAGE_PIN Y16 IOSTANDARD LVCMOS25 } [get_ports { eth_mdio }]; #IO_L1P_T0_13 Sch=eth_mdio
#set_property -dict { PACKAGE_PIN W14 IOSTANDARD LVCMOS25 } [get_ports { eth_pme_b }]; #IO_L6P_T0_13 Sch=eth_pme_b
#set_property -dict { PACKAGE_PIN Y14 IOSTANDARD LVCMOS25 } [get_ports { eth_int_b }]; #IO_L6N_T0_VREF_13 Sch=eth_int_b
#############################################
# Ethernet Constraints for 1Gb/s
#############################################
# Modified for 125MHz receive clock
# create_clock -period 8.000 -name eth_rxck [get_ports eth_rxck]
# set_clock_groups -asynchronous -group [get_clocks eth_rxck -include_generated_clocks]
# set_clock_groups -asynchronous -group [get_clocks clk_out2_xlnx_clk_gen]
## SD card
set_property -dict { PACKAGE_PIN W19 IOSTANDARD LVCMOS33 } [get_ports { spi_clk_o }]; #IO_L12P_T1_MRCC_14 Sch=sd_cclk
set_property -dict { PACKAGE_PIN U18 IOSTANDARD LVCMOS33 } [get_ports { spi_ss }]; #IO_L18N_T2_A11_D27_14 Sch=sd_d[3]
set_property -dict { PACKAGE_PIN V19 IOSTANDARD LVCMOS33 } [get_ports { spi_miso }]; #IO_L14N_T2_SRCC_14 Sch=sd_d[0]
set_property -dict { PACKAGE_PIN W20 IOSTANDARD LVCMOS33 } [get_ports { spi_mosi }]; #IO_L12N_T1_MRCC_14 Sch=sd_cmd
#set_property -dict { PACKAGE_PIN T18 IOSTANDARD LVCMOS33 } [get_ports { sd_cd }]; #IO_L20N_T3_A07_D23_14 Sch=sd_cd
#set_property -dict { PACKAGE_PIN T21 IOSTANDARD LVCMOS33 } [get_ports { sd_d[1] }]; #IO_L4P_T0_D04_14 Sch=sd_d[1]
#set_property -dict { PACKAGE_PIN T20 IOSTANDARD LVCMOS33 } [get_ports { sd_d[2] }]; #IO_L6N_T0_D08_VREF_14 Sch=sd_d[2]
#set_property -dict { PACKAGE_PIN V20 IOSTANDARD LVCMOS33 } [get_ports { sd_reset }]; #IO_L11N_T1_SRCC_14 Sch=sd_reset
# Nexys Video has a quad SPI flash
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
## JTAG
# minimize routing delay
set_max_delay -to [get_ports { tdo } ] 20
set_max_delay -from [get_ports { tms } ] 20
set_max_delay -from [get_ports { tdi } ] 20
set_max_delay -from [get_ports { trst_n } ] 20
# reset signal
set_false_path -from [get_ports { trst_n } ]
set_false_path -from [get_pins i_ddr/u_xlnx_mig_7_ddr3_mig/u_ddr3_infrastructure/rstdiv0_sync_r1_reg_rep/C]
## Configuration options, can be used for all designs
set_property CONFIG_VOLTAGE 3.3 [current_design]
set_property CFGBVS VCCO [current_design]

View file

@ -22,6 +22,8 @@ if {$::env(BOARD) eq "genesys2"} {
add_files -fileset constrs_1 -norecurse constraints/kc705.xdc
} elseif {$::env(BOARD) eq "vc707"} {
add_files -fileset constrs_1 -norecurse constraints/vc707.xdc
} elseif {$::env(BOARD) eq "nexys_video"} {
add_files -fileset constrs_1 -norecurse constraints/nexys_video.xdc
} else {
exit 1
}
@ -63,6 +65,10 @@ if {$::env(BOARD) eq "genesys2"} {
read_verilog -sv {src/vc707.svh ../../vendor/pulp-platform/common_cells/include/common_cells/registers.svh}
set file "src/vc707.svh"
set registers "../../vendor/pulp-platform/common_cells/include/common_cells/registers.svh"
} elseif {$::env(BOARD) eq "nexys_video"} {
read_verilog -sv {src/nexys_video.svh ../../vendor/pulp-platform/common_cells/include/common_cells/registers.svh}
set file "src/nexys_video.svh"
set registers "../../vendor/pulp-platform/common_cells/include/common_cells/registers.svh"
} else {
exit 1
}

View file

@ -32,6 +32,8 @@ if {$::env(BOARD) eq "genesys2"} {
write_cfgmem -format mcs -interface bpix16 -size 128 -loadbit "up 0x0 $bitfile" -file $mcsfile -force
} elseif {$::env(BOARD) eq "kc705"} {
write_cfgmem -format mcs -interface SPIx4 -size 128 -loadbit "up 0x0 $bitfile" -file $mcsfile -force
} elseif {$::env(BOARD) eq "nexys_video"} {
write_cfgmem -format mcs -interface SPIx4 -size 256 -loadbit "up 0x0 $bitfile" -file $mcsfile -force
} else {
exit 1
}

View file

@ -28,3 +28,11 @@ if [ "$BOARD" = "vc707" ]; then
export XILINX_BOARD="xilinx.com:vc707:part0:1.3"
export CLK_PERIOD_NS="20"
fi
if [ "$BOARD" = "nexys_video" ]; then
echo -n "Configuring for "
echo "Nexys Video Artix-7"
export XILINX_PART="xc7a200tsbg484-1"
export XILINX_BOARD="digilentinc.com:nexys_video:part0:1.1"
export CLK_PERIOD_NS="40"
fi

View file

@ -138,6 +138,38 @@ module ariane_xilinx (
input wire [7:0] pci_exp_rxp ,
input wire [7:0] pci_exp_rxn ,
input logic trst_n ,
`elsif NEXYS_VIDEO
input logic sys_clk_i ,
input logic cpu_resetn ,
inout wire [15:0] ddr3_dq ,
inout wire [ 1:0] ddr3_dqs_n ,
inout wire [ 1:0] ddr3_dqs_p ,
output wire [14:0] ddr3_addr ,
output wire [ 2:0] ddr3_ba ,
output wire ddr3_ras_n ,
output wire ddr3_cas_n ,
output wire ddr3_we_n ,
output wire ddr3_reset_n,
output wire [ 0:0] ddr3_ck_p ,
output wire [ 0:0] ddr3_ck_n ,
output wire [ 0:0] ddr3_cke ,
output wire [ 1:0] ddr3_dm ,
output wire [ 0:0] ddr3_odt ,
output wire eth_rst_n ,
input wire eth_rxck ,
input wire eth_rxctl ,
input wire [3:0] eth_rxd ,
output wire eth_txck ,
output wire eth_txctl ,
output wire [3:0] eth_txd ,
inout wire eth_mdio ,
output logic eth_mdc ,
output logic [ 7:0] led ,
input logic [ 7:0] sw ,
output logic fan_pwm ,
input logic trst_n ,
`endif
// SPI
output logic spi_mosi ,
@ -243,6 +275,9 @@ assign cpu_resetn = ~cpu_reset;
`elsif VC707
assign cpu_resetn = ~cpu_reset;
assign trst_n = ~trst;
`elsif NEXYS_VIDEO
logic cpu_reset;
assign cpu_reset = ~cpu_resetn;
`endif
logic pll_locked;
@ -819,6 +854,8 @@ end
logic [3:0] unused_switches = 4'b0000;
`endif
logic clk_200MHz_ref;
ariane_peripherals #(
.AxiAddrWidth ( AxiAddrWidth ),
.AxiDataWidth ( AxiDataWidth ),
@ -838,10 +875,13 @@ ariane_peripherals #(
`elsif VCU118
.InclSPI ( 1'b0 ),
.InclEthernet ( 1'b0 )
`elsif NEXYS_VIDEO
.InclSPI ( 1'b1 ),
.InclEthernet ( 1'b0 )
`endif
) i_ariane_peripherals (
.clk_i ( clk ),
.clk_200MHz_i ( ddr_clock_out ),
.clk_200MHz_i ( clk_200MHz_ref ),
.rst_ni ( ndmreset_n ),
.plic ( master[ariane_soc::PLIC] ),
.uart ( master[ariane_soc::UART] ),
@ -1089,6 +1129,20 @@ xlnx_axi_clock_converter i_xlnx_axi_clock_converter_ddr (
.m_axi_rready ( s_axi_rready )
);
`ifdef NEXYS_VIDEO
xlnx_clk_gen i_xlnx_clk_gen (
.clk_out1 ( clk ), // 25 MHz
.clk_out2 ( phy_tx_clk ), // 125 MHz (for RGMII PHY)
.clk_out3 ( eth_clk ), // 125 MHz quadrature (90 deg phase shift)
.clk_out4 ( sd_clk_sys ), // 50 MHz clock
.clk_out5 ( clk_200MHz_ref ), // 200 MHz clock
.reset ( cpu_reset ),
.locked ( pll_locked ),
.clk_in1 ( ddr_clock_out ) // 100MHz input clock
);
`else
xlnx_clk_gen i_xlnx_clk_gen (
.clk_out1 ( clk ), // 50 MHz
.clk_out2 ( phy_tx_clk ), // 125 MHz (for RGMII PHY)
@ -1098,6 +1152,9 @@ xlnx_clk_gen i_xlnx_clk_gen (
.locked ( pll_locked ),
.clk_in1 ( ddr_clock_out )
);
assign clk_200MHz_ref = ddr_clock_out;
`endif
`ifdef KINTEX7
fan_ctrl i_fan_ctrl (
@ -1253,6 +1310,83 @@ xlnx_mig_7_ddr3 i_ddr (
.device_temp ( ), // keep open
.sys_rst ( cpu_resetn )
);
`elsif NEXYS_VIDEO
fan_ctrl i_fan_ctrl (
.clk_i ( clk ),
.rst_ni ( ndmreset_n ),
.pwm_setting_i ( '1 ),
.fan_pwm_o ( fan_pwm )
);
xlnx_mig_7_ddr3 i_ddr (
.sys_clk_i ( sys_clk_i ),
.clk_ref_i ( clk_200MHz_ref ),
.ddr3_dq,
.ddr3_dqs_n,
.ddr3_dqs_p,
.ddr3_addr,
.ddr3_ba,
.ddr3_ras_n,
.ddr3_cas_n,
.ddr3_we_n,
.ddr3_reset_n,
.ddr3_ck_p,
.ddr3_ck_n,
.ddr3_cke,
.ddr3_dm,
.ddr3_odt,
.mmcm_locked ( ), // keep open
.app_sr_req ( '0 ),
.app_ref_req ( '0 ),
.app_zq_req ( '0 ),
.app_sr_active ( ), // keep open
.app_ref_ack ( ), // keep open
.app_zq_ack ( ), // keep open
.ui_clk ( ddr_clock_out ),
.ui_clk_sync_rst ( ddr_sync_reset ),
.aresetn ( ndmreset_n ),
.s_axi_awid,
.s_axi_awaddr ( s_axi_awaddr[28:0] ),
.s_axi_awlen,
.s_axi_awsize,
.s_axi_awburst,
.s_axi_awlock,
.s_axi_awcache,
.s_axi_awprot,
.s_axi_awqos,
.s_axi_awvalid,
.s_axi_awready,
.s_axi_wdata,
.s_axi_wstrb,
.s_axi_wlast,
.s_axi_wvalid,
.s_axi_wready,
.s_axi_bready,
.s_axi_bid,
.s_axi_bresp,
.s_axi_bvalid,
.s_axi_arid,
.s_axi_araddr ( s_axi_araddr[28:0] ),
.s_axi_arlen,
.s_axi_arsize,
.s_axi_arburst,
.s_axi_arlock,
.s_axi_arcache,
.s_axi_arprot,
.s_axi_arqos,
.s_axi_arvalid,
.s_axi_arready,
.s_axi_rready,
.s_axi_rid,
.s_axi_rdata,
.s_axi_rresp,
.s_axi_rlast,
.s_axi_rvalid,
.init_calib_complete ( ), // keep open
.device_temp ( ), // keep open
.sys_rst ( cpu_resetn )
);
`elsif VCU118
logic [63:0] dram_dwidth_axi_awaddr;

View file

@ -3,3 +3,7 @@ venv
*.o
*.img
*.bin
*.dts
*.dtb
bootrom*.h
bootrom*.sv

View file

@ -1,11 +1,31 @@
XLEN ?= 64
CROSSCOMPILE ?= riscv64-unknown-elf-
CC = ${CROSSCOMPILE}gcc
CROSSCOMPILE ?= riscv-none-elf-
ifeq ($(BOARD), nexys_video)
DRAM_SIZE_64 ?= 0x20000000 #512MB
DRAM_SIZE_32 ?= 0x08000000 #128MB
CLOCK_FREQUENCY ?= 25000000 #25MHz
HALF_CLOCK_FREQUENCY ?= 12500000 #12.5MHz
UART_BITRATE ?= 57600
HAS_ETHERNET ?= 0
else
DRAM_SIZE_64 ?= 0x40000000 #1GB
DRAM_SIZE_32 ?= 0x08000000 #128MB
CLOCK_FREQUENCY ?= 50000000 #50MHz
HALF_CLOCK_FREQUENCY ?= 25000000 #25MHz
UART_BITRATE ?= 115200
HAS_ETHERNET ?= 1
endif
CC = $(RISCV)/bin/${CROSSCOMPILE}gcc
OBJCOPY = $(RISCV)/bin/$(CROSSCOMPILE)objcopy
SED = sed
PLATFORM_DEFINES = -DCLOCK_FREQUENCY=$(CLOCK_FREQUENCY) -DUART_BITRATE=$(UART_BITRATE)
ifeq ($(XLEN), 64)
CFLAGS = -Os -ggdb -march=rv64imac -mabi=lp64 -Wall -mcmodel=medany -mexplicit-relocs
CFLAGS = $(PLATFORM_DEFINES) -Os -ggdb -march=rv64imac_zba_zbb_zbs_zbc_zicsr_zifencei -mabi=lp64 -Wall -mcmodel=medany -mexplicit-relocs -ffreestanding
else
CFLAGS = -O2 -ggdb -march=rv32im -mabi=ilp32 -W -Wall -mcmodel=medany -mexplicit-relocs -fno-builtin
CFLAGS = $(PLATFORM_DEFINES) -O2 -ggdb -march=rv32imac_zba_zbb_zbs_zbc_zicsr_zifencei -mabi=ilp32 -W -Wall -mcmodel=medany -mexplicit-relocs -fno-builtin -ffreestanding
endif
CCASFLAGS = -mcmodel=medany -mexplicit-relocs
@ -25,6 +45,12 @@ MAIN_SV = $(MAIN:.elf=.sv)
DTB = cv$(XLEN)a6.dtb
ifeq ($(HAS_ETHERNET), 1)
SED_DELETE_OPT = -e "/DELETE_ETH/d"
else
SED_DELETE_OPT =
endif
#.PHONY: clean
$(MAIN): $(DTB) $(OBJS_C) $(OBJS_S) linker.lds
@ -35,7 +61,7 @@ $(MAIN): $(DTB) $(OBJS_C) $(OBJS_S) linker.lds
dd if=$< of=$@ bs=128
%.bin: %.elf
$(CROSSCOMPILE)objcopy -O binary $< $@
$(OBJCOPY) -O binary $< $@
%.o: %.c
@$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
@ -45,6 +71,15 @@ $(MAIN): $(DTB) $(OBJS_C) $(OBJS_S) linker.lds
@$(CC) $(CFLAGS) $(CCASFLAGS) $(INCLUDES) -c $< -o $@
@echo "CC <= $<"
%.dts: %.dts.in
$(SED) -e "s/DRAM_SIZE_64/$(DRAM_SIZE_64)/g" \
-e "s/DRAM_SIZE_32/$(DRAM_SIZE_32)/g" \
-e "s/HALF_CLOCK_FREQUENCY/$(HALF_CLOCK_FREQUENCY)/g" \
-e "s/CLOCK_FREQUENCY/$(CLOCK_FREQUENCY)/g" \
-e "s/UART_BITRATE/$(UART_BITRATE)/g" \
$(SED_DELETE_OPT) $< > $@
cat $@
%.dtb: %.dts
dtc -I dts $< -O dtb -o $@
@ -53,7 +88,8 @@ $(MAIN): $(DTB) $(OBJS_C) $(OBJS_S) linker.lds
@echo "PYTHON >= $(MAIN_SV)"
clean:
$(RM) $(OBJS_C) $(OBJS_S) $(MAIN) $(MAIN_BIN) $(MAIN_IMG) *.dtb
$(RM) $(OBJS_C) $(OBJS_S) $(MAIN) $(MAIN_BIN) $(MAIN_IMG) *.dtb *.dts *.sv
rm -f ./bootrom_32.h ./bootrom_64.h
all: $(MAIN) $(MAIN_BIN) $(MAIN_IMG) $(MAIN_SV)
@echo "zero stage bootloader has been compiled!"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,934 +0,0 @@
/* Copyright 2018 ETH Zurich and University of Bologna.
* Copyright and related rights are licensed under the Solderpad Hardware
* License, Version 0.51 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://solderpad.org/licenses/SHL-0.51. Unless required by applicable law
* or agreed to in writing, software, hardware and materials distributed under
* this License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
* File: $filename.v
*
* Description: Auto-generated bootrom
*/
// Auto-generated code
module bootrom_64 (
input logic clk_i,
input logic req_i,
input logic [63:0] addr_i,
output logic [63:0] rdata_o
);
localparam int RomSize = 895;
const logic [RomSize-1:0][63:0] mem = {
64'h00000000_00000000,
64'h0a0d2165_6e6f6420,
64'h00000000_00206567,
64'h616d6920_746f6f62,
64'h20676e69_79706f63,
64'h00000000_00000009,
64'h3a656d61_6e090a0d,
64'h00093a73_65747562,
64'h69727474_61090a0d,
64'h00000009_3a61626c,
64'h20747361_6c090a0d,
64'h0000093a_61626c20,
64'h74737269_66090a0d,
64'h00000000_00000000,
64'h09202020_20203a64,
64'h69756720_6e6f6974,
64'h69747261_70090a0d,
64'h00000000_00000000,
64'h093a6469_75672065,
64'h70797420_6e6f6974,
64'h69747261_70090a0d,
64'h00000000_20797274,
64'h6e65206e_6f697469,
64'h74726170_20747067,
64'h00000009_20203a73,
64'h65697274_6e65206e,
64'h6f697469_74726170,
64'h20657a69_73090a0d,
64'h00000009_3a736569,
64'h72746e65_206e6f69,
64'h74697472_61702072,
64'h65626d75_6e090a0d,
64'h00000009_2020203a,
64'h61626c20_73656972,
64'h746e6520_6e6f6974,
64'h69747261_70090a0d,
64'h00093a61_646c2070,
64'h756b6361_62090a0d,
64'h00000000_00000000,
64'h093a6162_6c20746e,
64'h65727275_63090a0d,
64'h00000009_3a646576,
64'h72657365_72090a0d,
64'h00093a72_65646165,
64'h685f6372_63090a0d,
64'h00000000_00000909,
64'h3a657a69_73090a0d,
64'h00000009_3a6e6f69,
64'h73697665_72090a0d,
64'h0000093a_65727574,
64'h616e6769_73090a0d,
64'h00000000_003a7265,
64'h64616568_20656c62,
64'h6174206e_6f697469,
64'h74726170_20747067,
64'h0000203a_65756c61,
64'h76206e72_75746572,
64'h2079706f_63206473,
64'h00000000_0000000a,
64'h0d216465_6c696166,
64'h20647261_63204453,
64'h00000000_0000000a,
64'h0d216465_7a696c61,
64'h6974696e_69206473,
64'h00000000_0a0d676e,
64'h69746978_65202e2e,
64'h2e647320_657a696c,
64'h61697469_6e692074,
64'h6f6e2064_6c756f63,
64'h00000000_0000002e,
64'h00000000_0000000a,
64'h0d6b636f_6c622044,
64'h53206461_65722074,
64'h6f6e2064_6c756f63,
64'h0000000a_0d202e2e,
64'h2e445320_676e697a,
64'h696c6169_74696e69,
64'h00000031_34646d63,
64'h00000035_35646d63,
64'h00000000_30646d63,
64'h00000020_3a206573,
64'h6e6f7073_65720920,
64'h00000000_0020646e,
64'h616d6d6f_63204453,
64'h00000000_203f3f79,
64'h74706d65_20746f6e,
64'h206f6669_66207872,
64'h00000000_00000a0d,
64'h2164657a_696c6169,
64'h74696e69_20495053,
64'h00000000_00007830,
64'h203a7375_74617473,
64'h00000000_00000a0d,
64'h49505320_74696e69,
64'h00000a0d_21646c72,
64'h6f57206f_6c6c6548,
64'h00000000_00000032,
64'h2d746c75_61666564,
64'h2d697274_2c786e6c,
64'h7800746c_75616665,
64'h642d6972_742c786e,
64'h6c78006c_6175642d,
64'h73692c78_6e6c7800,
64'h746e6573_6572702d,
64'h74707572_7265746e,
64'h692c786e_6c780068,
64'h74646977_2d326f69,
64'h70672c78_6e6c7800,
64'h68746469_772d6f69,
64'h70672c78_6e6c7800,
64'h322d746c_75616665,
64'h642d7475_6f642c78,
64'h6e6c7800_746c7561,
64'h6665642d_74756f64,
64'h2c786e6c_7800322d,
64'h73747570_6e692d6c,
64'h6c612c78_6e6c7800,
64'h73747570_6e692d6c,
64'h6c612c78_6e6c7800,
64'h72656c6c_6f72746e,
64'h6f632d6f_69706700,
64'h736c6c65_632d6f69,
64'h70672300_73736572,
64'h6464612d_63616d2d,
64'h6c61636f_6c007077,
64'h2d656c62_61736964,
64'h00736567_6e61722d,
64'h65676174_6c6f7600,
64'h79636e65_75716572,
64'h662d7861_6d2d6970,
64'h73006f69_7461722d,
64'h6b63732c_786e6c78,
64'h00737469_622d7265,
64'h66736e61_72742d6d,
64'h756e2c78_6e6c7800,
64'h73746962_2d73732d,
64'h6d756e2c_786e6c78,
64'h00747369_78652d6f,
64'h6669662c_786e6c78,
64'h00796c69_6d61662c,
64'h786e6c78_00687464,
64'h69772d6f_692d6765,
64'h72007466_6968732d,
64'h67657200_73747075,
64'h72726574_6e690074,
64'h6e657261_702d7470,
64'h75727265_746e6900,
64'h64656570_732d746e,
64'h65727275_63007665,
64'h646e2c76_63736972,
64'h00797469_726f6972,
64'h702d7861_6d2c7663,
64'h73697200_73656d61,
64'h6e2d6765_72006465,
64'h646e6574_78652d73,
64'h74707572_7265746e,
64'h69007365_676e6172,
64'h00646564_6e657073,
64'h75732d65_74617473,
64'h2d6e6961_74657200,
64'h72656767_6972742d,
64'h746c7561_6665642c,
64'h78756e69_6c00736f,
64'h69706700_656c646e,
64'h61687000_72656c6c,
64'h6f72746e_6f632d74,
64'h70757272_65746e69,
64'h00736c6c_65632d74,
64'h70757272_65746e69,
64'h23007469_6c70732d,
64'h626c7400_65707974,
64'h2d756d6d_00617369,
64'h2c766373_69720073,
64'h75746174_73006765,
64'h72006570_79745f65,
64'h63697665_64007963,
64'h6e657571_6572662d,
64'h6b636f6c_63007963,
64'h6e657571_6572662d,
64'h65736162_656d6974,
64'h00687461_702d7475,
64'h6f647473_006c6564,
64'h6f6d0065_6c626974,
64'h61706d6f_6300736c,
64'h6c65632d_657a6973,
64'h2300736c_6c65632d,
64'h73736572_64646123,
64'h09000000_02000000,
64'h02000000_02000000,
64'h01000000_b5000000,
64'h04000000_03000000,
64'hffffffff_bf020000,
64'h04000000_03000000,
64'hffffffff_ae020000,
64'h04000000_03000000,
64'h01000000_a1020000,
64'h04000000_03000000,
64'h00000000_8a020000,
64'h04000000_03000000,
64'h08000000_79020000,
64'h04000000_03000000,
64'h08000000_69020000,
64'h04000000_03000000,
64'h00000000_55020000,
64'h04000000_03000000,
64'h00000000_43020000,
64'h04000000_03000000,
64'h00000000_31020000,
64'h04000000_03000000,
64'h00000000_21020000,
64'h04000000_03000000,
64'h00000100_00000000,
64'h00000040_00000000,
64'h67000000_10000000,
64'h03000000_11020000,
64'h00000000_03000000,
64'h00000000_612e3030,
64'h2e312d6f_6970672d,
64'h7370782c_786e6c78,
64'h1b000000_15000000,
64'h03000000_02000000,
64'h05020000_04000000,
64'h03000000_00000030,
64'h30303030_30303440,
64'h6f697067_01000000,
64'h02000000_00800000,
64'h00000000_00000030,
64'h00000000_67000000,
64'h10000000_03000000,
64'h00007fe3_023e1800,
64'hf3010000_06000000,
64'h03000000_00000000,
64'h03000000_52010000,
64'h08000000_03000000,
64'h03000000_41010000,
64'h04000000_03000000,
64'h006b726f_7774656e,
64'h5b000000_08000000,
64'h03000000_00687465,
64'h2d637369_72776f6c,
64'h1b000000_0c000000,
64'h03000000_00000000,
64'h30303030_30303033,
64'h40687465_2d637369,
64'h72776f6c_01000000,
64'h02000000_02000000,
64'he8010000_00000000,
64'h03000000_e40c0000,
64'he40c0000_d9010000,
64'h08000000_03000000,
64'h20bcbe00_c7010000,
64'h04000000_03000000,
64'h00000000_67000000,
64'h04000000_03000000,
64'h00000000_746f6c73,
64'h2d697073_2d636d6d,
64'h1b000000_0d000000,
64'h03000000_00000030,
64'h40636d6d_01000000,
64'h04000000_b8010000,
64'h04000000_03000000,
64'h08000000_a1010000,
64'h04000000_03000000,
64'h01000000_90010000,
64'h04000000_03000000,
64'h01000000_80010000,
64'h04000000_03000000,
64'h00377865_746e696b,
64'h74010000_08000000,
64'h03000000_00100000,
64'h00000000_00000020,
64'h00000000_67000000,
64'h10000000_03000000,
64'h02000000_02000000,
64'h52010000_08000000,
64'h03000000_03000000,
64'h41010000_04000000,
64'h03000000_00000000,
64'h0f000000_04000000,
64'h03000000_01000000,
64'h00000000_04000000,
64'h03000000_00612e30,
64'h302e322d_6970732d,
64'h7370782c_786e6c78,
64'h00622e30_302e322d,
64'h6970732d_7370782c,
64'h786e6c78_1b000000,
64'h28000000_03000000,
64'h00000000_30303030,
64'h30303032_40697073,
64'h2d737078_01000000,
64'h02000000_006c6f72,
64'h746e6f63_0b010000,
64'h08000000_03000000,
64'h03000000_41010000,
64'h04000000_03000000,
64'h00100000_00000000,
64'h00000018_00000000,
64'h67000000_10000000,
64'h03000000_07000000,
64'h06000000_05000000,
64'h04000000_52010000,
64'h10000000_03000000,
64'h00007265_6d69745f,
64'h6270612c_706c7570,
64'h1b000000_0f000000,
64'h03000000_00003030,
64'h30303030_38314072,
64'h656d6974_01000000,
64'h02000000_04000000,
64'h67010000_04000000,
64'h03000000_02000000,
64'h5d010000_04000000,
64'h03000000_01000000,
64'h52010000_04000000,
64'h03000000_03000000,
64'h41010000_04000000,
64'h03000000_00c20100,
64'h33010000_04000000,
64'h03000000_80f0fa02,
64'h4b000000_04000000,
64'h03000000_00100000,
64'h00000000_00000010,
64'h00000000_67000000,
64'h10000000_03000000,
64'h00000000_61303535,
64'h3631736e_1b000000,
64'h09000000_03000000,
64'h00000030_30303030,
64'h30303140_74726175,
64'h01000000_02000000,
64'h03000000_b5000000,
64'h04000000_03000000,
64'h1e000000_28010000,
64'h04000000_03000000,
64'h07000000_15010000,
64'h04000000_03000000,
64'h00000004_00000000,
64'h0000000c_00000000,
64'h67000000_10000000,
64'h03000000_09000000,
64'h02000000_0b000000,
64'h02000000_f7000000,
64'h10000000_03000000,
64'ha0000000_00000000,
64'h03000000_00306369,
64'h6c702c76_63736972,
64'h1b000000_0c000000,
64'h03000000_01000000,
64'h8f000000_04000000,
64'h03000000_00000000,
64'h00000000_04000000,
64'h03000000_00000000,
64'h30303030_30306340,
64'h72656c6c_6f72746e,
64'h6f632d74_70757272,
64'h65746e69_01000000,
64'h02000000_006c6f72,
64'h746e6f63_0b010000,
64'h08000000_03000000,
64'h00000c00_00000000,
64'h00000002_00000000,
64'h67000000_10000000,
64'h03000000_07000000,
64'h02000000_03000000,
64'h02000000_f7000000,
64'h10000000_03000000,
64'h00000000_30746e69,
64'h6c632c76_63736972,
64'h1b000000_0d000000,
64'h03000000_00000030,
64'h30303030_30324074,
64'h6e696c63_01000000,
64'hf0000000_00000000,
64'h03000000_00007375,
64'h622d656c_706d6973,
64'h00636f73_2d657261,
64'h622d656e_61697261,
64'h2c687465_1b000000,
64'h1f000000_03000000,
64'h02000000_0f000000,
64'h04000000_03000000,
64'h02000000_00000000,
64'h04000000_03000000,
64'h00636f73_01000000,
64'h02000000_02000000,
64'hd9000000_00000000,
64'h03000000_00000074,
64'h61656274_72616568,
64'hc3000000_0a000000,
64'h03000000_00000000,
64'h01000000_01000000,
64'hbd000000_0c000000,
64'h03000000_00000064,
64'h656c2d74_61656274,
64'h72616568_01000000,
64'h00000073_64656c2d,
64'h6f697067_1b000000,
64'h0a000000_03000000,
64'h00000000_7364656c,
64'h01000000_02000000,
64'h00000040_00000000,
64'h00000080_00000000,
64'h67000000_10000000,
64'h03000000_00007972,
64'h6f6d656d_5b000000,
64'h07000000_03000000,
64'h00303030_30303030,
64'h38407972_6f6d656d,
64'h01000000_02000000,
64'h02000000_02000000,
64'h02000000_b5000000,
64'h04000000_03000000,
64'h00006374_6e692d75,
64'h70632c76_63736972,
64'h1b000000_0f000000,
64'h03000000_a0000000,
64'h00000000_03000000,
64'h01000000_8f000000,
64'h04000000_03000000,
64'h00000000_72656c6c,
64'h6f72746e_6f632d74,
64'h70757272_65746e69,
64'h01000000_85000000,
64'h00000000_03000000,
64'h00003933_76732c76,
64'h63736972_7c000000,
64'h0b000000_03000000,
64'h00006364_66616d69,
64'h34367672_72000000,
64'h0b000000_03000000,
64'h00000076_63736972,
64'h00656e61_69726120,
64'h2c687465_1b000000,
64'h12000000_03000000,
64'h00000000_79616b6f,
64'h6b000000_05000000,
64'h03000000_00000000,
64'h67000000_04000000,
64'h03000000_00757063,
64'h5b000000_04000000,
64'h03000000_80f0fa02,
64'h4b000000_04000000,
64'h03000000_00000030,
64'h40757063_01000000,
64'h40787d01_38000000,
64'h04000000_03000000,
64'h00000000_0f000000,
64'h04000000_03000000,
64'h01000000_00000000,
64'h04000000_03000000,
64'h00000000_73757063,
64'h01000000_02000000,
64'h00000030_30323531,
64'h313a3030_30303030,
64'h30314074_7261752f,
64'h636f732f_2c000000,
64'h1a000000_03000000,
64'h00006e65_736f6863,
64'h01000000_00657261,
64'h622d656e_61697261,
64'h2c687465_26000000,
64'h10000000_03000000,
64'h00766564_2d657261,
64'h622d656e_61697261,
64'h2c687465_1b000000,
64'h14000000_03000000,
64'h02000000_0f000000,
64'h04000000_03000000,
64'h02000000_00000000,
64'h04000000_03000000,
64'h00000000_01000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'he8080000_d2020000,
64'h00000000_10000000,
64'h11000000_28000000,
64'h20090000_38000000,
64'hf20b0000_edfe0dd0,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h46454443_42413938,
64'h37363534_33323130,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h0000a001_84021ae5,
64'h85930000_0597047e,
64'h0010041b_e909c6bf,
64'hf0ef057e_65a14505,
64'he38ff0ef_dc450513,
64'h00001517_e00ff0ef,
64'he4060805_05132005,
64'h85931141_02faf537,
64'h65f1b79d_f8c371e3,
64'h963e8f1d_17c18096,
64'hfa2680e7_82869696,
64'h00000297_00279693,
64'hb7598dd5_02059693,
64'h8dd50105_96938dd5,
64'h00859693_0ff5f593,
64'h808200b7_002300b7,
64'h00a300b7_012300b7,
64'h01a300b7_022300b7,
64'h02a300b7_032300b7,
64'h03a300b7_042300b7,
64'h04a300b7_052300b7,
64'h05a300b7_062300b7,
64'h06a300b7_072300a6,
64'h80679696_00000297,
64'h068a40c3_06b38082,
64'he211fed7_6de30741,
64'he70ce30c_96ba8a3d,
64'hff067693_e1bde3c1,
64'h00f77793_02c37163,
64'h872a433d_b3b5f06f,
64'hf0ef1825_05130000,
64'h1517bbf1_edc50513,
64'h00001517_f9eff0ef,
64'h854af22f_f0effde5,
64'h05130000_1517f2ef,
64'hf0effd25_05130000,
64'h1517b511_f0450513,
64'h00001517_fc6ff0ef,
64'h8526f4af_f0ef0065,
64'h05130000_1517f56f,
64'hf0efffa5_05130000,
64'h1517c929_84aac5bf,
64'hf0ef9e0d_26058552,
64'h020aa583_028ab603,
64'hf78ff0ef_1dc50513,
64'h00001517_f56910e3,
64'h08048493_f8cff0ef,
64'h2905f5a5_05130000,
64'h1517ff89_9be3863f,
64'hf0ef0985_0009c503,
64'hfa8ff0ef_1fc50513,
64'h00001517_837ff0ef,
64'h6888fbaf_f0ef1fe5,
64'h05130000_1517849f,
64'hf0ef6488_fccff0ef,
64'h20050513_00001517,
64'h85bff0ef_06048c13,
64'h01848993_6088fe6f,
64'hf0ef20a5_05130000,
64'h1517ff34_9be38bbf,
64'hf0ef0985_0009c503,
64'hff048993_805ff0ef,
64'h20850513_00001517,
64'hff7999e3_8d9ff0ef,
64'h09850007_c503013c,
64'h07b34981_825ff0ef,
64'hfe048c13_20c50513,
64'h00001517_8f9ff0ef,
64'h0ff97513_83dff0ef,
64'h20850513_00001517,
64'h4b114bc1_10051b63,
64'h1004892a_8a8ad4bf,
64'hf0ef850a_46057101,
64'h04892583_865ff0ef,
64'h03050513_00001517,
64'h8b3ff0ef_4556877f,
64'hf0ef2225_05130000,
64'h15178c5f_f0ef4546,
64'h889ff0ef_21450513,
64'h00001517_917ff0ef,
64'h652689bf_f0ef2065,
64'h05130000_1517929f,
64'hf0ef7502_8adff0ef,
64'h20850513_00001517,
64'h93bff0ef_65628bff,
64'hf0ef2025_05130000,
64'h151790df_f0ef4552,
64'h8d1ff0ef_20450513,
64'h00001517_91fff0ef,
64'h45428e3f_f0ef2065,
64'h05130000_1517931f,
64'hf0ef4532_8f5ff0ef,
64'h20850513_00001517,
64'h943ff0ef_4522907f,
64'hf0ef20a5_05130000,
64'h1517995f_f0ef6502,
64'h919ff0ef_20c50513,
64'h00001517_925ff0ef,
64'h1f850513_00001517,
64'hbf6154f9_935ff0ef,
64'h10050513_00001517,
64'h9c3ff0ef_8526947f,
64'hf0ef2025_05130000,
64'h1517953f_f0ef1f65,
64'h05130000_1517c905,
64'h84aa890a_e59ff0ef,
64'h850a4585_46057101,
64'h971ff0ef_1fc50513,
64'h00001517_80826161,
64'h6c026ba2_6b426ae2,
64'h7a0279a2_794274e2,
64'h64068526_60a6fb04,
64'h011354fd_99dff0ef,
64'h20050513_00001517,
64'hc51de01f_f0ef8a2a,
64'h0880e062_e45ee85a,
64'hec56f44e_f84afc26,
64'he486f052_e0a2715d,
64'hb7655479_80826169,
64'h6baa6b4a_6aea7a0a,
64'h79aa794a_74ea640e,
64'h852260ae_547d9e7f,
64'hf0ef2225_05130000,
64'h1517c6bf_f0efc6ff,
64'hf0efc73f_f0efc77f,
64'hf0efc7bf_f0efc7ff,
64'hf0efc83f_f0efc87f,
64'hf0efa805_c8dff0ef,
64'hc97ff0ef_45314581,
64'h46054401_f92047e3,
64'h197da2bf_f0ef2865,
64'h05130000_1517e799,
64'h034967b3_06941a63,
64'h24819041_14428c49,
64'hcc1ff0ef_90411442,
64'h0085141b_8aa2ccff,
64'hf0effd64_1ae30404,
64'h0413ff7a_97e384aa,
64'hf25ff0ef_0a858526,
64'h0007c583_015407b3,
64'h04000b93_4a81c73f,
64'hf0ef850a_04000593,
64'h8622200a_8b134481,
64'h8456ff35_1ee3d0ff,
64'hf0ef3e80_0a130fe0,
64'h09930209_5913e959,
64'hd27ff0ef_454985a2,
64'h0ff67613_00166613,
64'h0015161b_f57ff0ef,
64'h0ff47593_f5fff0ef,
64'h0ff5f593_0084559b,
64'hf6bff0ef_0ff5f593,
64'h0104559b_f77ff0ef,
64'h45010184_559b3e60,
64'h00efe55e_e95af152,
64'hf54efd26_e5860800,
64'h0613850a_02061913,
64'h8aaa0ff0_0593ed56,
64'h842ef94a_e1a27155,
64'h80829141_15428d3d,
64'h8ff91781_0057171b,
64'h67890107_571b0105,
64'h171b8d3d_00c5179b,
64'h8d2d893d_0045d51b,
64'h8dbd93c1_17c28fc9,
64'h0085551b_0085179b,
64'h808207f5_75138d3d,
64'h0ff7f793_0045179b,
64'h8d2d0ff5_75138d3d,
64'h0045d51b_0075d79b,
64'h8de98082_0141853e,
64'h640260a2_57f5e111,
64'h4781f89f_f0efc511,
64'h57f9efdf_f0efc911,
64'h57fdeb9f_f0effc6d,
64'he09ff0ef_347d4429,
64'hb99ff0ef_3bc50513,
64'h00001517_c8dff0ef,
64'he022e406_11418082,
64'h61050015_351364a2,
64'h64420004_051b60e2,
64'hfc940ce3_e3dff0ef,
64'heb5ff0ef_3e450513,
64'h00001517_85aa842a,
64'he57ff0ef_02900513,
64'h400005b7_07700613,
64'hfbdff0ef_4485e822,
64'hec06e426_11018082,
64'h01410015_3513157d,
64'h64020004_051b60a2,
64'hef5ff0ef_41e50513,
64'h85a20000_1517e8ff,
64'hf0ef842a_e9bff0ef,
64'he022e406_03700513,
64'h45810650_06131141,
64'h80826105_690264a2,
64'h644260e2_00143513,
64'hf5640413_24010124,
64'h976388bd_00f91a63,
64'h45014785_ecdff0ef,
64'hed1ff0ef_842aed7f,
64'hf0ef84aa_eddff0ef,
64'hee1ff0ef_ee5ff0ef,
64'h892aef1f_f0efe04a,
64'he426e822_ec064521,
64'h1aa00593_08700613,
64'h1101bfcd_45018082,
64'h61056902_64a26442,
64'h60e24505_f89ff0ef,
64'h45854aa5_05130000,
64'h1517ff24_95e3c00d,
64'hf29ff0ef_84aa347d,
64'hf37ff0ef_45014581,
64'h09500613_49057104,
64'h0413e426_ec06e04a,
64'h6409e822_1101b9d1,
64'h61054a25_05130000,
64'h151764a2_60e26442,
64'hdadff0ef_8522ceff,
64'hf0ef4ea5_05130000,
64'h1517cfbf_f0ef8526,
64'hd01ff0ef_842ee822,
64'hec064f25_05130000,
64'h151784aa_e4261101,
64'h80826105_690264a2,
64'h644260e2_f47d147d,
64'h0007d463_4187d79b,
64'h0185179b_fadff0ef,
64'h06400413_ebbff0ef,
64'h8526ec1f_f0ef0ff4,
64'h7513ec9f_f0ef0ff5,
64'h75130084_551bed5f,
64'hf0ef0ff5_75130104,
64'h551bee1f_f0ef0184,
64'h551bee9f_f0ef0409,
64'h6513febf_f0ef892a,
64'he04a84b2_842ee426,
64'he822ec06_1101b709,
64'h0ff00513_8082557d,
64'hb7d900d7_00230785,
64'h00f60733_06c82683,
64'hff698b05_5178b77d,
64'hd6b80785_00074703,
64'h00f50733_80824501,
64'hd3b84719_dbb8577d,
64'h200007b7_02b6e163,
64'h0007869b_20000837,
64'h20000537_fff58b85,
64'h537c2000_0737d3b8,
64'h200007b7_10600713,
64'hfff537fd_00010320,
64'h079304b7_61630007,
64'h871b4781_200006b7,
64'hdbb85779_200007b7,
64'h06b7ee63_10000793,
64'h80826105_64a2d3b8,
64'h4719dbb8_64420ff4,
64'h7513577d_200007b7,
64'h60e2e2bf_f0ef5f65,
64'h05130000_1517eb9f,
64'hf0ef9101_15024088,
64'he41ff0ef_61450513,
64'h00001517_e3958b85,
64'h240153fc_57e0ff65,
64'h8b050647_849353f8,
64'hd3b81060_07132000,
64'h07b7fff5_37fd0001,
64'h06400793_d7a8dbb8,
64'h5779e426_e822ec06,
64'h200007b7_1101b551,
64'h61056425_05130000,
64'h151764a2_60e26442,
64'hd03c4799_e9dff0ef,
64'h66850513_00001517,
64'hf2bff0ef_91010204,
64'h95132481_eb5ff0ef,
64'h66050513_00001517,
64'h5064d03c_16600793,
64'hec9ff0ef_69450513,
64'h00001517_f57ff0ef,
64'h91010204_95132481,
64'hee1ff0ef_68c50513,
64'h00001517_5064d03c,
64'h10400793_20000437,
64'hfff537fd_000147a9,
64'hc3b84729_200007b7,
64'hf09ff0ef_e426e822,
64'hec066ac5_05131101,
64'h00001517_80824108,
64'h8082c10c_b5e96105,
64'h60e20091_4503ed7f,
64'hf0ef0081_4503f55f,
64'hf0efec06_002c1101,
64'h80826145_694264e2,
64'h740270a2_ff2410e3,
64'hef9ff0ef_00914503,
64'hf01ff0ef_34610081,
64'h4503f81f_f0ef0ff5,
64'h7513002c_0084d533,
64'h59610380_041384aa,
64'hf406e84a_ec26f022,
64'h71798082_61456942,
64'h64e27402_70a2ff24,
64'h10e3f3bf_f0ef0091,
64'h4503f43f_f0ef3461,
64'h00814503_fc3ff0ef,
64'h0ff57513_002c0084,
64'hd53b5961_446184aa,
64'hf406e84a_ec26f022,
64'h71798082_00f58023,
64'h0007c783_00e580a3,
64'h97aa8111_00074703,
64'h973e00f5_7713a6e7,
64'h87930000_1797b7f5,
64'h0405f93f_f0ef8082,
64'h01416402_60a2e509,
64'h00044503_842ae406,
64'he0221141_808200e7,
64'h88230200_071300e7,
64'h8423fc70_071300e7,
64'h8623470d_00a78223,
64'h0ff57513_00e78023,
64'h0085551b_0ff57713,
64'h00e78623_f8000713,
64'h00078223_100007b7,
64'h02b5553b_0045959b,
64'h808200a7_0023dfe5,
64'h0207f793_01474783,
64'h10000737_80820205,
64'h75130147_c5031000,
64'h07b78082_00054503,
64'h808200b5_00238082,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00000000_00000000,
64'h00048067_01f49493,
64'h0010049b_c8458593,
64'h00001597_f1402573,
64'hff24c6e3_4009091b,
64'h02000937_00448493,
64'hfe091ee3_0004a903,
64'h00092023_00990933,
64'h00291913_f1402973,
64'h020004b7_fe090ae3,
64'h00897913_34402973,
64'h10500073_ff24c6e3,
64'h4009091b_02000937,
64'h00448493_0124a023,
64'h00100913_020004b7,
64'h303000ef_01a11113,
64'h0210011b_03249663,
64'hf1402973_00000493,
64'h30491073_00800913
};
logic [$clog2(RomSize)-1:0] addr_q;
always_ff @(posedge clk_i) begin
if (req_i) begin
addr_q <= addr_i[$clog2(RomSize)-1+3:3];
end
end
// this prevents spurious Xes from propagating into
// the speculative fetch stage of the core
assign rdata_o = (addr_q < RomSize) ? mem[addr_q] : '0;
endmodule

View file

@ -6,14 +6,14 @@
compatible = "eth,ariane-bare-dev";
model = "eth,ariane-bare";
chosen {
stdout-path = "/soc/uart@10000000:115200";
stdout-path = "/soc/uart@10000000:UART_BITRATE";
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
timebase-frequency = <25000000>; // 25 MHz
timebase-frequency = <HALF_CLOCK_FREQUENCY>;
CPU0: cpu@0 {
clock-frequency = <50000000>; // 50 MHz
clock-frequency = <CLOCK_FREQUENCY>;
device_type = "cpu";
reg = <0>;
status = "okay";
@ -31,7 +31,7 @@
};
memory@80000000 {
device_type = "memory";
reg = <0x80000000 0x8000000>;
reg = <0x80000000 DRAM_SIZE_32>;
};
leds {
compatible = "gpio-leds";
@ -74,8 +74,8 @@
uart@10000000 {
compatible = "ns16550a";
reg = < 0x10000000 0x1000>;
clock-frequency = <50000000>;
current-speed = <115200>;
clock-frequency = <CLOCK_FREQUENCY>;
current-speed = <UART_BITRATE>;
interrupt-parent = <&PLIC0>;
interrupts = <1>;
reg-shift = <2>; // regs are spaced on 32 bit boundary
@ -144,3 +144,5 @@
};
};
};
// delete ethernet device if disabled
/delete-node/ &eth; // DELETE_ETH

View file

@ -6,14 +6,14 @@
compatible = "eth,ariane-bare-dev";
model = "eth,ariane-bare";
chosen {
stdout-path = "/soc/uart@10000000:115200";
stdout-path = "/soc/uart@10000000:UART_BITRATE";
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
timebase-frequency = <25000000>; // 25 MHz
timebase-frequency = <HALF_CLOCK_FREQUENCY>;
CPU0: cpu@0 {
clock-frequency = <50000000>; // 50 MHz
clock-frequency = <CLOCK_FREQUENCY>;
device_type = "cpu";
reg = <0>;
status = "okay";
@ -31,7 +31,7 @@
};
memory@80000000 {
device_type = "memory";
reg = <0x0 0x80000000 0x0 0x40000000>;
reg = <0x0 0x80000000 0x0 DRAM_SIZE_64>;
};
leds {
compatible = "gpio-leds";
@ -74,8 +74,8 @@
uart@10000000 {
compatible = "ns16550a";
reg = <0x0 0x10000000 0x0 0x1000>;
clock-frequency = <50000000>;
current-speed = <115200>;
clock-frequency = <CLOCK_FREQUENCY>;
current-speed = <UART_BITRATE>;
interrupt-parent = <&PLIC0>;
interrupts = <1>;
reg-shift = <2>; // regs are spaced on 32 bit boundary
@ -144,3 +144,5 @@
};
};
};
// delete ethernet device if disabled
/delete-node/ &eth; // DELETE_ETH

View file

@ -9,7 +9,7 @@
int main()
{
init_uart(50000000, 115200);
init_uart(CLOCK_FREQUENCY, UART_BITRATE);
print_uart("Hello World!\r\n");
int res = gpt_find_boot_partition((uint8_t *)0x80000000UL, 2 * 16384);

View file

@ -0,0 +1,14 @@
`define NEXYS_VIDEO
`define ARIANE_DATA_WIDTH 64
// Instantiate protocl checker
// `define PROTOCOL_CHECKER
// write-back cache
// `define WB_DCACHE
// write-through cache
`define WT_DCACHE
`define RAMB16

View file

@ -8,6 +8,22 @@ set_property board_part $boardName [current_project]
create_ip -name clk_wiz -vendor xilinx.com -library ip -module_name $ipName
if {$::env(BOARD) eq "nexys_video"} {
set_property -dict [list CONFIG.PRIM_IN_FREQ {100.000} \
CONFIG.NUM_OUT_CLKS {5} \
CONFIG.CLKOUT2_USED {true} \
CONFIG.CLKOUT3_USED {true} \
CONFIG.CLKOUT4_USED {true} \
CONFIG.CLKOUT5_USED {true} \
CONFIG.CLKOUT1_REQUESTED_OUT_FREQ {25} \
CONFIG.CLKOUT2_REQUESTED_OUT_FREQ {125} \
CONFIG.CLKOUT3_REQUESTED_OUT_FREQ {125} \
CONFIG.CLKOUT3_REQUESTED_PHASE {90.000} \
CONFIG.CLKOUT4_REQUESTED_OUT_FREQ {50} \
CONFIG.CLKOUT5_REQUESTED_OUT_FREQ {200} \
CONFIG.CLKIN1_JITTER_PS {50.0} \
] [get_ips $ipName]
} else {
set_property -dict [list CONFIG.PRIM_IN_FREQ {200.000} \
CONFIG.NUM_OUT_CLKS {4} \
CONFIG.CLKOUT2_USED {true} \
@ -20,6 +36,7 @@ set_property -dict [list CONFIG.PRIM_IN_FREQ {200.000} \
CONFIG.CLKOUT4_REQUESTED_OUT_FREQ {50} \
CONFIG.CLKIN1_JITTER_PS {50.0} \
] [get_ips $ipName]
}
generate_target {instantiation_template} [get_files ./$ipName.srcs/sources_1/ip/$ipName/$ipName.xci]
generate_target all [get_files ./$ipName.srcs/sources_1/ip/$ipName/$ipName.xci]

View file

@ -0,0 +1,137 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- IMPORTANT: This is an internal file that has been generated by the MIG software. Any direct editing or changes made to this file may result in unpredictable behavior or data corruption. It is strongly advised that users do not edit the contents of this file. Re-run the MIG GUI with the required settings if any of the options provided below need to be altered. -->
<Project NoOfControllers="1" >
<ModuleName>xlnx_mig_7_ddr3</ModuleName>
<dci_inouts_inputs>1</dci_inouts_inputs>
<dci_inputs>1</dci_inputs>
<Debug_En>OFF</Debug_En>
<DataDepth_En>1024</DataDepth_En>
<LowPower_En>ON</LowPower_En>
<XADC_En>Enabled</XADC_En>
<TargetFPGA>xc7a200t-sbg484/-1</TargetFPGA>
<Version>4.1</Version>
<SystemClock>Single-Ended</SystemClock>
<ReferenceClock>No Buffer</ReferenceClock>
<SysResetPolarity>ACTIVE LOW</SysResetPolarity>
<BankSelectionFlag>FALSE</BankSelectionFlag>
<InternalVref>1</InternalVref>
<dci_hr_inouts_inputs>50 Ohms</dci_hr_inouts_inputs>
<dci_cascade>0</dci_cascade>
<Controller number="0" >
<MemoryDevice>DDR3_SDRAM/Components/MT41K256M16XX-125</MemoryDevice>
<TimePeriod>2500</TimePeriod>
<VccAuxIO>1.8V</VccAuxIO>
<PHYRatio>4:1</PHYRatio>
<InputClkFreq>100</InputClkFreq>
<UIExtraClocks>0</UIExtraClocks>
<MMCM_VCO>800</MMCM_VCO>
<MMCMClkOut0> 1.000</MMCMClkOut0>
<MMCMClkOut1>1</MMCMClkOut1>
<MMCMClkOut2>1</MMCMClkOut2>
<MMCMClkOut3>1</MMCMClkOut3>
<MMCMClkOut4>1</MMCMClkOut4>
<DataWidth>16</DataWidth>
<DeepMemory>1</DeepMemory>
<DataMask>1</DataMask>
<ECC>Disabled</ECC>
<Ordering>Normal</Ordering>
<BankMachineCnt>4</BankMachineCnt>
<CustomPart>FALSE</CustomPart>
<NewPartName></NewPartName>
<RowAddress>15</RowAddress>
<ColAddress>10</ColAddress>
<BankAddress>3</BankAddress>
<MemoryVoltage>1.5V</MemoryVoltage>
<UserMemoryAddressMap>BANK_ROW_COLUMN</UserMemoryAddressMap>
<PinSelection>
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="M2" SLEW="" name="ddr3_addr[0]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="L5" SLEW="" name="ddr3_addr[10]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="N5" SLEW="" name="ddr3_addr[11]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="N4" SLEW="" name="ddr3_addr[12]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="P2" SLEW="" name="ddr3_addr[13]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="P6" SLEW="" name="ddr3_addr[14]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="M5" SLEW="" name="ddr3_addr[1]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="M3" SLEW="" name="ddr3_addr[2]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="M1" SLEW="" name="ddr3_addr[3]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="L6" SLEW="" name="ddr3_addr[4]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="P1" SLEW="" name="ddr3_addr[5]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="N3" SLEW="" name="ddr3_addr[6]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="N2" SLEW="" name="ddr3_addr[7]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="M6" SLEW="" name="ddr3_addr[8]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="R1" SLEW="" name="ddr3_addr[9]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="L3" SLEW="" name="ddr3_ba[0]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="K6" SLEW="" name="ddr3_ba[1]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="L4" SLEW="" name="ddr3_ba[2]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="K3" SLEW="" name="ddr3_cas_n" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="DIFF_SSTL15" PADName="P4" SLEW="" name="ddr3_ck_n[0]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="DIFF_SSTL15" PADName="P5" SLEW="" name="ddr3_ck_p[0]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="J6" SLEW="" name="ddr3_cke[0]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="G3" SLEW="" name="ddr3_dm[0]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="F1" SLEW="" name="ddr3_dm[1]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="G2" SLEW="" name="ddr3_dq[0]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="F3" SLEW="" name="ddr3_dq[10]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="D2" SLEW="" name="ddr3_dq[11]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="C2" SLEW="" name="ddr3_dq[12]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="A1" SLEW="" name="ddr3_dq[13]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="E2" SLEW="" name="ddr3_dq[14]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="B1" SLEW="" name="ddr3_dq[15]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="H4" SLEW="" name="ddr3_dq[1]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="H5" SLEW="" name="ddr3_dq[2]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="J1" SLEW="" name="ddr3_dq[3]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="K1" SLEW="" name="ddr3_dq[4]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="H3" SLEW="" name="ddr3_dq[5]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="H2" SLEW="" name="ddr3_dq[6]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="J5" SLEW="" name="ddr3_dq[7]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="E3" SLEW="" name="ddr3_dq[8]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="B2" SLEW="" name="ddr3_dq[9]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="DIFF_SSTL15" PADName="J2" SLEW="" name="ddr3_dqs_n[0]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="DIFF_SSTL15" PADName="D1" SLEW="" name="ddr3_dqs_n[1]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="DIFF_SSTL15" PADName="K2" SLEW="" name="ddr3_dqs_p[0]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="DIFF_SSTL15" PADName="E1" SLEW="" name="ddr3_dqs_p[1]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="K4" SLEW="" name="ddr3_odt[0]" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="J4" SLEW="" name="ddr3_ras_n" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="LVCMOS15" PADName="G1" SLEW="" name="ddr3_reset_n" IN_TERM="" />
<Pin VCCAUX_IO="" IOSTANDARD="SSTL15" PADName="L1" SLEW="" name="ddr3_we_n" IN_TERM="" />
</PinSelection>
<System_Clock>
<Pin PADName="R4(MRCC_P)" Bank="34" name="sys_clk_i" />
</System_Clock>
<System_Control>
<Pin PADName="No connect" Bank="Select Bank" name="sys_rst" />
<Pin PADName="No connect" Bank="Select Bank" name="init_calib_complete" />
<Pin PADName="No connect" Bank="Select Bank" name="tg_compare_error" />
</System_Control>
<TimingParameters>
<Parameters twtr="7.5" trrd="7.5" trefi="7.8" tfaw="40" trtp="7.5" tcke="5" trfc="260" trp="13.75" tras="35" trcd="13.75" />
</TimingParameters>
<mrBurstLength name="Burst Length" >8 - Fixed</mrBurstLength>
<mrBurstType name="Read Burst Type and Length" >Sequential</mrBurstType>
<mrCasLatency name="CAS Latency" >6</mrCasLatency>
<mrMode name="Mode" >Normal</mrMode>
<mrDllReset name="DLL Reset" >No</mrDllReset>
<mrPdMode name="DLL control for precharge PD" >Slow Exit</mrPdMode>
<emrDllEnable name="DLL Enable" >Enable</emrDllEnable>
<emrOutputDriveStrength name="Output Driver Impedance Control" >RZQ/6</emrOutputDriveStrength>
<emrMirrorSelection name="Address Mirroring" >Disable</emrMirrorSelection>
<emrCSSelection name="Controller Chip Select Pin" >Disable</emrCSSelection>
<emrRTT name="RTT (nominal) - On Die Termination (ODT)" >RZQ/6</emrRTT>
<emrPosted name="Additive Latency (AL)" >0</emrPosted>
<emrOCD name="Write Leveling Enable" >Disabled</emrOCD>
<emrDQS name="TDQS enable" >Enabled</emrDQS>
<emrRDQS name="Qoff" >Output Buffer Enabled</emrRDQS>
<mr2PartialArraySelfRefresh name="Partial-Array Self Refresh" >Full Array</mr2PartialArraySelfRefresh>
<mr2CasWriteLatency name="CAS write latency" >5</mr2CasWriteLatency>
<mr2AutoSelfRefresh name="Auto Self Refresh" >Enabled</mr2AutoSelfRefresh>
<mr2SelfRefreshTempRange name="High Temparature Self Refresh Rate" >Normal</mr2SelfRefreshTempRange>
<mr2RTTWR name="RTT_WR - Dynamic On Die Termination (ODT)" >Dynamic ODT off</mr2RTTWR>
<PortInterface>AXI</PortInterface>
<AXIParameters>
<C0_C_RD_WR_ARB_ALGORITHM>RD_PRI_REG</C0_C_RD_WR_ARB_ALGORITHM>
<C0_S_AXI_ADDR_WIDTH>29</C0_S_AXI_ADDR_WIDTH>
<C0_S_AXI_DATA_WIDTH>64</C0_S_AXI_DATA_WIDTH>
<C0_S_AXI_ID_WIDTH>5</C0_S_AXI_ID_WIDTH>
<C0_S_AXI_SUPPORTS_NARROW_BURST>0</C0_S_AXI_SUPPORTS_NARROW_BURST>
</AXIParameters>
</Controller>
</Project>

View file

@ -44,7 +44,11 @@ package ariane_soc;
localparam logic[63:0] SPILength = 64'h800000;
localparam logic[63:0] EthernetLength = 64'h10000;
localparam logic[63:0] GPIOLength = 64'h1000;
`ifdef NEXYS_VIDEO
localparam logic[63:0] DRAMLength = 64'h20000000; // 512MByte of DDR on Nexys video board
`else
localparam logic[63:0] DRAMLength = 64'h40000000; // 1GByte of DDR (split between two chips on Genesys2)
`endif
localparam logic[63:0] SRAMLength = 64'h1800000; // 24 MByte of SRAM
// Instantiate AXI protocol checkers
localparam bit GenProtocolChecker = 1'b0;