Merge pull request #236 from ozbenh/targets
Add support for Genesys2 and Acord CLE-215pull/241/head
commit
741b2e42ac
@ -0,0 +1,338 @@
|
|||||||
|
################################################################################
|
||||||
|
# clkin, reset, uart pins...
|
||||||
|
################################################################################
|
||||||
|
# clk200:0.p
|
||||||
|
set_property LOC J19 [get_ports {clk200_p}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {clk200_p}]
|
||||||
|
|
||||||
|
# clk200:0.n
|
||||||
|
set_property LOC H19 [get_ports {clk200_n}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {clk200_n}]
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# P2 header used as UART
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
#set_property -dict { PACKAGE_PIN H5 IOSTANDARD LVCMOS33 } [get_ports { p2_io1_n }];
|
||||||
|
#set_property -dict { PACKAGE_PIN J5 IOSTANDARD LVCMOS33 } [get_ports { p2_io1_p }];
|
||||||
|
# AIO2_N
|
||||||
|
set_property -dict { PACKAGE_PIN J2 IOSTANDARD LVCMOS33 } [get_ports { uart_tx }];
|
||||||
|
# AIO2_P
|
||||||
|
set_property -dict { PACKAGE_PIN K2 IOSTANDARD LVCMOS33 } [get_ports { uart_rx }];
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# DRAM
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC M15 [get_ports {ddram_a[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[0]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[0]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC L21 [get_ports {ddram_a[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[1]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[1]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC M16 [get_ports {ddram_a[2]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[2]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[2]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC L18 [get_ports {ddram_a[3]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[3]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[3]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC K21 [get_ports {ddram_a[4]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[4]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[4]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC M18 [get_ports {ddram_a[5]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[5]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[5]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC M21 [get_ports {ddram_a[6]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[6]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[6]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC N20 [get_ports {ddram_a[7]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[7]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[7]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC M20 [get_ports {ddram_a[8]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[8]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[8]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC N19 [get_ports {ddram_a[9]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[9]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[9]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC J21 [get_ports {ddram_a[10]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[10]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[10]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC M22 [get_ports {ddram_a[11]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[11]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[11]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC K22 [get_ports {ddram_a[12]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[12]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[12]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC N18 [get_ports {ddram_a[13]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[13]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[13]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC N22 [get_ports {ddram_a[14]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[14]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[14]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC J22 [get_ports {ddram_a[15]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[15]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[15]}]
|
||||||
|
|
||||||
|
# ddram:0.ba
|
||||||
|
set_property LOC L19 [get_ports {ddram_ba[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_ba[0]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_ba[0]}]
|
||||||
|
|
||||||
|
# ddram:0.ba
|
||||||
|
set_property LOC J20 [get_ports {ddram_ba[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_ba[1]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_ba[1]}]
|
||||||
|
|
||||||
|
# ddram:0.ba
|
||||||
|
set_property LOC L20 [get_ports {ddram_ba[2]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_ba[2]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_ba[2]}]
|
||||||
|
|
||||||
|
# ddram:0.ras_n
|
||||||
|
set_property LOC H20 [get_ports {ddram_ras_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_ras_n}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_ras_n}]
|
||||||
|
|
||||||
|
# ddram:0.cas_n
|
||||||
|
set_property LOC K18 [get_ports {ddram_cas_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_cas_n}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_cas_n}]
|
||||||
|
|
||||||
|
# ddram:0.we_n
|
||||||
|
set_property LOC L16 [get_ports {ddram_we_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_we_n}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_we_n}]
|
||||||
|
|
||||||
|
# ddram:0.dm
|
||||||
|
set_property LOC A19 [get_ports {ddram_dm[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dm[0]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dm[0]}]
|
||||||
|
|
||||||
|
# ddram:0.dm
|
||||||
|
set_property LOC G22 [get_ports {ddram_dm[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dm[1]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dm[1]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC D19 [get_ports {ddram_dq[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[0]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[0]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[0]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC B20 [get_ports {ddram_dq[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[1]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[1]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[1]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC E19 [get_ports {ddram_dq[2]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[2]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[2]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[2]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC A20 [get_ports {ddram_dq[3]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[3]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[3]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[3]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC F19 [get_ports {ddram_dq[4]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[4]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[4]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[4]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC C19 [get_ports {ddram_dq[5]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[5]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[5]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[5]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC F20 [get_ports {ddram_dq[6]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[6]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[6]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[6]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC C18 [get_ports {ddram_dq[7]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[7]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[7]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[7]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC E22 [get_ports {ddram_dq[8]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[8]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[8]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[8]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC G21 [get_ports {ddram_dq[9]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[9]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[9]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[9]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC D20 [get_ports {ddram_dq[10]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[10]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[10]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[10]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC E21 [get_ports {ddram_dq[11]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[11]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[11]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[11]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC C22 [get_ports {ddram_dq[12]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[12]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[12]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[12]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC D21 [get_ports {ddram_dq[13]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[13]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[13]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[13]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC B22 [get_ports {ddram_dq[14]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[14]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[14]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[14]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC D22 [get_ports {ddram_dq[15]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[15]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dq[15]}]
|
||||||
|
set_property IN_TERM UNTUNED_SPLIT_50 [get_ports {ddram_dq[15]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_p
|
||||||
|
set_property LOC F18 [get_ports {ddram_dqs_p[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_p[0]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_p[0]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_p
|
||||||
|
set_property LOC B21 [get_ports {ddram_dqs_p[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_p[1]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_p[1]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_n
|
||||||
|
set_property LOC E18 [get_ports {ddram_dqs_n[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_n[0]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_n[0]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_n
|
||||||
|
set_property LOC A21 [get_ports {ddram_dqs_n[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_n[1]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_n[1]}]
|
||||||
|
|
||||||
|
# ddram:0.clk_p
|
||||||
|
set_property LOC K17 [get_ports {ddram_clk_p}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_clk_p}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_clk_p}]
|
||||||
|
|
||||||
|
# ddram:0.clk_n
|
||||||
|
set_property LOC J17 [get_ports {ddram_clk_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_clk_n}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_clk_n}]
|
||||||
|
|
||||||
|
# ddram:0.cke
|
||||||
|
set_property LOC H22 [get_ports {ddram_cke}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_cke}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_cke}]
|
||||||
|
|
||||||
|
# ddram:0.odt
|
||||||
|
set_property LOC K19 [get_ports {ddram_odt}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_odt}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_odt}]
|
||||||
|
|
||||||
|
# ddram:0.reset_n
|
||||||
|
set_property LOC K16 [get_ports {ddram_reset_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_reset_n}]
|
||||||
|
set_property IOSTANDARD LVCMOS15 [get_ports {ddram_reset_n}]
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# LEDs
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
set_property -dict { PACKAGE_PIN G3 IOSTANDARD LVCMOS33 } [get_ports { led0 }];
|
||||||
|
set_property -dict { PACKAGE_PIN H3 IOSTANDARD LVCMOS33 } [get_ports { led1 }];
|
||||||
|
set_property -dict { PACKAGE_PIN G4 IOSTANDARD LVCMOS33 } [get_ports { led2 }];
|
||||||
|
set_property -dict { PACKAGE_PIN H4 IOSTANDARD LVCMOS33 } [get_ports { led3 }];
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# SPI Flash
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
set_property -dict { PACKAGE_PIN T19 IOSTANDARD LVCMOS33 } [get_ports { spi_flash_cs_n }];
|
||||||
|
set_property -dict { PACKAGE_PIN P22 IOSTANDARD LVCMOS33 } [get_ports { spi_flash_mosi }];
|
||||||
|
set_property -dict { PACKAGE_PIN R22 IOSTANDARD LVCMOS33 } [get_ports { spi_flash_miso }];
|
||||||
|
set_property -dict { PACKAGE_PIN P21 IOSTANDARD LVCMOS33 } [get_ports { spi_flash_wp_n }];
|
||||||
|
set_property -dict { PACKAGE_PIN R21 IOSTANDARD LVCMOS33 } [get_ports { spi_flash_hold_n }];
|
||||||
|
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Design constraints
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
set_property INTERNAL_VREF 0.750 [get_iobanks 34]
|
||||||
|
set_property CONFIG_MODE SPIx4 [current_design]
|
||||||
|
set_property BITSTREAM.CONFIG.SPI_BUSWIDTH 4 [current_design]
|
||||||
|
set_property BITSTREAM.CONFIG.OVERTEMPPOWERDOWN ENABLE [current_design]
|
||||||
|
set_property CONFIG_VOLTAGE 3.3 [current_design]
|
||||||
|
set_property CFGBVS VCCO [current_design]
|
||||||
|
set_property BITSTREAM.CONFIG.SPI_FALL_EDGE YES [current_design]
|
||||||
|
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
|
||||||
|
set_property BITSTREAM.CONFIG.EXTMASTERCCLK_EN Div-1 [current_design]
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Clock constraints
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
create_clock -name clk200_p -period 5.0 [get_nets clk200_p]
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# False path constraints
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
set_false_path -quiet -through [get_nets -hierarchical -filter {mr_ff == TRUE}]
|
||||||
|
|
||||||
|
set_false_path -quiet -to [get_pins -filter {REF_PIN_NAME == PRE} -of_objects [get_cells -hierarchical -filter {ars_ff1 == TRUE || ars_ff2 == TRUE}]]
|
||||||
|
|
||||||
|
set_max_delay 2 -quiet -from [get_pins -filter {REF_PIN_NAME == C} -of_objects [get_cells -hierarchical -filter {ars_ff1 == TRUE}]] -to [get_pins -filter {REF_PIN_NAME == D} -of_objects [get_cells -hierarchical -filter {ars_ff2 == TRUE}]]
|
@ -0,0 +1,463 @@
|
|||||||
|
#### Genesys-2 Rev.H
|
||||||
|
|
||||||
|
## Clock & Reset
|
||||||
|
set_property -dict { PACKAGE_PIN AD11 IOSTANDARD LVDS } [get_ports { clk200_n }]
|
||||||
|
set_property -dict { PACKAGE_PIN AD12 IOSTANDARD LVDS } [get_ports { clk200_p }]
|
||||||
|
create_clock -period 5.000 -name tc_clk100_p -waveform {0.000 2.500} [get_ports clk200_p]
|
||||||
|
create_clock -period 5.000 -name tc_clk100_n -waveform {2.500 5.000} [get_ports clk200_n]
|
||||||
|
|
||||||
|
set_property -dict { PACKAGE_PIN R19 IOSTANDARD LVCMOS33 } [get_ports { ext_rst }]
|
||||||
|
|
||||||
|
## UART
|
||||||
|
set_property -dict { PACKAGE_PIN Y20 IOSTANDARD LVCMOS33 } [get_ports { uart_main_rx }]
|
||||||
|
set_property -dict { PACKAGE_PIN Y23 IOSTANDARD LVCMOS33 } [get_ports { uart_main_tx }]
|
||||||
|
|
||||||
|
## LEDs
|
||||||
|
set_property -dict { PACKAGE_PIN T28 IOSTANDARD LVCMOS33 } [get_ports { led0 }]
|
||||||
|
set_property -dict { PACKAGE_PIN V19 IOSTANDARD LVCMOS33 } [get_ports { led1 }]
|
||||||
|
set_property -dict { PACKAGE_PIN U30 IOSTANDARD LVCMOS33 } [get_ports { led2 }]
|
||||||
|
set_property -dict { PACKAGE_PIN U29 IOSTANDARD LVCMOS33 } [get_ports { led3 }]
|
||||||
|
|
||||||
|
## QSPI
|
||||||
|
set_property -dict { PACKAGE_PIN U19 IOSTANDARD LVCMOS33 } [get_ports { spi_flash_cs_n }]
|
||||||
|
set_property -dict { PACKAGE_PIN P24 IOSTANDARD LVCMOS33 } [get_ports { spi_flash_mosi }]
|
||||||
|
set_property -dict { PACKAGE_PIN R25 IOSTANDARD LVCMOS33 } [get_ports { spi_flash_miso }]
|
||||||
|
set_property -dict { PACKAGE_PIN R20 IOSTANDARD LVCMOS33 } [get_ports { spi_flash_wp_n }]
|
||||||
|
set_property -dict { PACKAGE_PIN R21 IOSTANDARD LVCMOS33 } [get_ports { spi_flash_hold_n }]
|
||||||
|
|
||||||
|
|
||||||
|
## DRAM
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AC12 [get_ports {ddram_a[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[0]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[0]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[0]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AE8 [get_ports {ddram_a[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[1]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[1]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[1]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AD8 [get_ports {ddram_a[2]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[2]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[2]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[2]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AC10 [get_ports {ddram_a[3]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[3]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[3]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[3]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AD9 [get_ports {ddram_a[4]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[4]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[4]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[4]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AA13 [get_ports {ddram_a[5]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[5]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[5]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[5]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AA10 [get_ports {ddram_a[6]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[6]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[6]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[6]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AA11 [get_ports {ddram_a[7]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[7]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[7]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[7]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC Y10 [get_ports {ddram_a[8]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[8]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[8]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[8]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC Y11 [get_ports {ddram_a[9]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[9]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[9]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[9]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AB8 [get_ports {ddram_a[10]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[10]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[10]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[10]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AA8 [get_ports {ddram_a[11]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[11]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[11]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[11]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AB12 [get_ports {ddram_a[12]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[12]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[12]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[12]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AA12 [get_ports {ddram_a[13]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[13]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[13]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[13]}]
|
||||||
|
|
||||||
|
# ddram:0.a
|
||||||
|
set_property LOC AH9 [get_ports {ddram_a[14]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_a[14]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_a[14]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_a[14]}]
|
||||||
|
|
||||||
|
# ddram:0.ba
|
||||||
|
set_property LOC AE9 [get_ports {ddram_ba[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_ba[0]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_ba[0]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_ba[0]}]
|
||||||
|
|
||||||
|
# ddram:0.ba
|
||||||
|
set_property LOC AB10 [get_ports {ddram_ba[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_ba[1]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_ba[1]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_ba[1]}]
|
||||||
|
|
||||||
|
# ddram:0.ba
|
||||||
|
set_property LOC AC11 [get_ports {ddram_ba[2]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_ba[2]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_ba[2]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_ba[2]}]
|
||||||
|
|
||||||
|
# ddram:0.ras_n
|
||||||
|
set_property LOC AE11 [get_ports {ddram_ras_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_ras_n}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_ras_n}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_ras_n}]
|
||||||
|
|
||||||
|
# ddram:0.cas_n
|
||||||
|
set_property LOC AF11 [get_ports {ddram_cas_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_cas_n}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_cas_n}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_cas_n}]
|
||||||
|
|
||||||
|
# ddram:0.we_n
|
||||||
|
set_property LOC AG13 [get_ports {ddram_we_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_we_n}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_we_n}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_we_n}]
|
||||||
|
|
||||||
|
# ddram:0.cs_n
|
||||||
|
set_property LOC AH12 [get_ports {ddram_cs_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_cs_n}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_cs_n}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_cs_n}]
|
||||||
|
|
||||||
|
# ddram:0.dm
|
||||||
|
set_property LOC AD4 [get_ports {ddram_dm[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dm[0]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dm[0]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dm[0]}]
|
||||||
|
|
||||||
|
# ddram:0.dm
|
||||||
|
set_property LOC AF3 [get_ports {ddram_dm[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dm[1]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dm[1]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dm[1]}]
|
||||||
|
|
||||||
|
# ddram:0.dm
|
||||||
|
set_property LOC AH4 [get_ports {ddram_dm[2]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dm[2]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dm[2]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dm[2]}]
|
||||||
|
|
||||||
|
# ddram:0.dm
|
||||||
|
set_property LOC AF8 [get_ports {ddram_dm[3]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dm[3]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dm[3]}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_dm[3]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AD3 [get_ports {ddram_dq[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[0]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[0]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[0]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AC2 [get_ports {ddram_dq[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[1]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[1]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[1]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AC1 [get_ports {ddram_dq[2]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[2]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[2]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[2]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AC5 [get_ports {ddram_dq[3]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[3]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[3]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[3]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AC4 [get_ports {ddram_dq[4]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[4]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[4]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[4]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AD6 [get_ports {ddram_dq[5]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[5]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[5]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[5]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AE6 [get_ports {ddram_dq[6]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[6]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[6]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[6]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AC7 [get_ports {ddram_dq[7]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[7]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[7]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[7]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AF2 [get_ports {ddram_dq[8]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[8]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[8]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[8]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AE1 [get_ports {ddram_dq[9]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[9]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[9]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[9]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AF1 [get_ports {ddram_dq[10]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[10]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[10]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[10]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AE4 [get_ports {ddram_dq[11]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[11]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[11]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[11]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AE3 [get_ports {ddram_dq[12]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[12]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[12]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[12]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AE5 [get_ports {ddram_dq[13]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[13]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[13]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[13]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AF5 [get_ports {ddram_dq[14]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[14]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[14]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[14]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AF6 [get_ports {ddram_dq[15]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[15]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[15]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[15]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AJ4 [get_ports {ddram_dq[16]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[16]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[16]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[16]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AH6 [get_ports {ddram_dq[17]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[17]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[17]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[17]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AH5 [get_ports {ddram_dq[18]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[18]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[18]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[18]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AH2 [get_ports {ddram_dq[19]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[19]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[19]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[19]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AJ2 [get_ports {ddram_dq[20]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[20]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[20]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[20]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AJ1 [get_ports {ddram_dq[21]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[21]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[21]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[21]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AK1 [get_ports {ddram_dq[22]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[22]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[22]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[22]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AJ3 [get_ports {ddram_dq[23]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[23]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[23]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[23]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AF7 [get_ports {ddram_dq[24]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[24]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[24]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[24]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AG7 [get_ports {ddram_dq[25]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[25]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[25]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[25]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AJ6 [get_ports {ddram_dq[26]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[26]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[26]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[26]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AK6 [get_ports {ddram_dq[27]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[27]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[27]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[27]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AJ8 [get_ports {ddram_dq[28]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[28]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[28]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[28]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AK8 [get_ports {ddram_dq[29]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[29]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[29]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[29]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AK5 [get_ports {ddram_dq[30]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[30]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[30]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[30]}]
|
||||||
|
|
||||||
|
# ddram:0.dq
|
||||||
|
set_property LOC AK4 [get_ports {ddram_dq[31]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dq[31]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dq[31]}]
|
||||||
|
set_property IOSTANDARD SSTL15_T_DCI [get_ports {ddram_dq[31]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_p
|
||||||
|
set_property LOC AD2 [get_ports {ddram_dqs_p[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_p[0]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dqs_p[0]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_p[0]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_p
|
||||||
|
set_property LOC AG4 [get_ports {ddram_dqs_p[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_p[1]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dqs_p[1]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_p[1]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_p
|
||||||
|
set_property LOC AG2 [get_ports {ddram_dqs_p[2]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_p[2]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dqs_p[2]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_p[2]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_p
|
||||||
|
set_property LOC AH7 [get_ports {ddram_dqs_p[3]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_p[3]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dqs_p[3]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_p[3]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_n
|
||||||
|
set_property LOC AD1 [get_ports {ddram_dqs_n[0]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_n[0]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dqs_n[0]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_n[0]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_n
|
||||||
|
set_property LOC AG3 [get_ports {ddram_dqs_n[1]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_n[1]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dqs_n[1]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_n[1]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_n
|
||||||
|
set_property LOC AH1 [get_ports {ddram_dqs_n[2]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_n[2]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dqs_n[2]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_n[2]}]
|
||||||
|
|
||||||
|
# ddram:0.dqs_n
|
||||||
|
set_property LOC AJ7 [get_ports {ddram_dqs_n[3]}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_dqs_n[3]}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_dqs_n[3]}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_dqs_n[3]}]
|
||||||
|
|
||||||
|
# ddram:0.clk_p
|
||||||
|
set_property LOC AB9 [get_ports {ddram_clk_p}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_clk_p}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_clk_p}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_clk_p}]
|
||||||
|
|
||||||
|
# ddram:0.clk_n
|
||||||
|
set_property LOC AC9 [get_ports {ddram_clk_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_clk_n}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_clk_n}]
|
||||||
|
set_property IOSTANDARD DIFF_SSTL15 [get_ports {ddram_clk_n}]
|
||||||
|
|
||||||
|
# ddram:0.cke
|
||||||
|
set_property LOC AJ9 [get_ports {ddram_cke}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_cke}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_cke}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_cke}]
|
||||||
|
|
||||||
|
# ddram:0.odt
|
||||||
|
set_property LOC AK9 [get_ports {ddram_odt}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_odt}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_odt}]
|
||||||
|
set_property IOSTANDARD SSTL15 [get_ports {ddram_odt}]
|
||||||
|
|
||||||
|
# ddram:0.reset_n
|
||||||
|
set_property LOC AG5 [get_ports {ddram_reset_n}]
|
||||||
|
set_property SLEW FAST [get_ports {ddram_reset_n}]
|
||||||
|
set_property VCCAUX_IO HIGH [get_ports {ddram_reset_n}]
|
||||||
|
set_property IOSTANDARD LVCMOS15 [get_ports {ddram_reset_n}]
|
||||||
|
|
||||||
|
|
||||||
|
set_property INTERNAL_VREF 0.750 [get_iobanks 34]
|
||||||
|
|
||||||
|
# False path constraints
|
||||||
|
set_false_path -quiet -through [get_nets -hierarchical -filter {mr_ff == TRUE}]
|
||||||
|
set_false_path -quiet -to [get_pins -filter {REF_PIN_NAME == PRE} -of_objects [get_cells -hierarchical -filter {ars_ff1 == TRUE || ars_ff2 == TRUE}]]
|
||||||
|
set_max_delay 2 -quiet -from [get_pins -filter {REF_PIN_NAME == C} -of_objects [get_cells -hierarchical -filter {ars_ff1 == TRUE}]] -to [get_pins -filter {REF_PIN_NAME == D} -of_objects [get_cells -hierarchical -filter {ars_ff2 == TRUE}]]
|
@ -0,0 +1,319 @@
|
|||||||
|
library ieee;
|
||||||
|
use ieee.std_logic_1164.all;
|
||||||
|
use ieee.numeric_std.all;
|
||||||
|
|
||||||
|
library unisim;
|
||||||
|
use unisim.vcomponents.all;
|
||||||
|
|
||||||
|
library work;
|
||||||
|
use work.wishbone_types.all;
|
||||||
|
|
||||||
|
entity toplevel is
|
||||||
|
generic (
|
||||||
|
MEMORY_SIZE : integer := 16384;
|
||||||
|
RAM_INIT_FILE : string := "firmware.hex";
|
||||||
|
CLK_FREQUENCY : positive := 100000000;
|
||||||
|
USE_LITEDRAM : boolean := false;
|
||||||
|
NO_BRAM : boolean := false;
|
||||||
|
DISABLE_FLATTEN_CORE : boolean := false;
|
||||||
|
SPI_FLASH_OFFSET : integer := 10485760;
|
||||||
|
SPI_FLASH_DEF_CKDV : natural := 1;
|
||||||
|
SPI_FLASH_DEF_QUAD : boolean := true;
|
||||||
|
LOG_LENGTH : natural := 2048;
|
||||||
|
UART_IS_16550 : boolean := true
|
||||||
|
);
|
||||||
|
port(
|
||||||
|
clk200_p : in std_ulogic;
|
||||||
|
clk200_n : in std_ulogic;
|
||||||
|
|
||||||
|
-- P2 signals used as UART
|
||||||
|
uart_rx : in std_ulogic;
|
||||||
|
uart_tx : out std_ulogic;
|
||||||
|
|
||||||
|
-- LEDs
|
||||||
|
led0 : out std_logic;
|
||||||
|
led1 : out std_logic;
|
||||||
|
led2 : out std_logic;
|
||||||
|
led3 : out std_logic;
|
||||||
|
|
||||||
|
-- SPI
|
||||||
|
spi_flash_cs_n : out std_ulogic;
|
||||||
|
spi_flash_mosi : inout std_ulogic;
|
||||||
|
spi_flash_miso : inout std_ulogic;
|
||||||
|
spi_flash_wp_n : inout std_ulogic;
|
||||||
|
spi_flash_hold_n : inout std_ulogic;
|
||||||
|
|
||||||
|
-- DRAM wires
|
||||||
|
ddram_a : out std_logic_vector(15 downto 0);
|
||||||
|
ddram_ba : out std_logic_vector(2 downto 0);
|
||||||
|
ddram_ras_n : out std_logic;
|
||||||
|
ddram_cas_n : out std_logic;
|
||||||
|
ddram_we_n : out std_logic;
|
||||||
|
ddram_dm : out std_logic_vector(1 downto 0);
|
||||||
|
ddram_dq : inout std_logic_vector(15 downto 0);
|
||||||
|
ddram_dqs_p : inout std_logic_vector(1 downto 0);
|
||||||
|
ddram_dqs_n : inout std_logic_vector(1 downto 0);
|
||||||
|
ddram_clk_p : out std_logic;
|
||||||
|
ddram_clk_n : out std_logic;
|
||||||
|
ddram_cke : out std_logic;
|
||||||
|
ddram_odt : out std_logic;
|
||||||
|
ddram_reset_n : out std_logic
|
||||||
|
);
|
||||||
|
end entity toplevel;
|
||||||
|
|
||||||
|
architecture behaviour of toplevel is
|
||||||
|
|
||||||
|
-- Internal clock
|
||||||
|
signal ext_clk : std_ulogic;
|
||||||
|
|
||||||
|
-- Reset signals:
|
||||||
|
signal soc_rst : std_ulogic;
|
||||||
|
signal pll_rst : std_ulogic;
|
||||||
|
|
||||||
|
-- Internal clock signals:
|
||||||
|
signal system_clk : std_ulogic;
|
||||||
|
signal system_clk_locked : std_ulogic;
|
||||||
|
|
||||||
|
-- DRAM main data wishbone connection
|
||||||
|
signal wb_dram_in : wishbone_master_out;
|
||||||
|
signal wb_dram_out : wishbone_slave_out;
|
||||||
|
|
||||||
|
-- DRAM control wishbone connection
|
||||||
|
signal wb_ext_io_in : wb_io_master_out;
|
||||||
|
signal wb_ext_io_out : wb_io_slave_out;
|
||||||
|
signal wb_ext_is_dram_csr : std_ulogic;
|
||||||
|
signal wb_ext_is_dram_init : std_ulogic;
|
||||||
|
|
||||||
|
-- Control/status
|
||||||
|
signal core_alt_reset : std_ulogic;
|
||||||
|
|
||||||
|
-- SPI flash
|
||||||
|
signal spi_sck : std_ulogic;
|
||||||
|
signal spi_cs_n : std_ulogic;
|
||||||
|
signal spi_sdat_o : std_ulogic_vector(3 downto 0);
|
||||||
|
signal spi_sdat_oe : std_ulogic_vector(3 downto 0);
|
||||||
|
signal spi_sdat_i : std_ulogic_vector(3 downto 0);
|
||||||
|
|
||||||
|
-- Fixup various memory sizes based on generics
|
||||||
|
function get_bram_size return natural is
|
||||||
|
begin
|
||||||
|
if USE_LITEDRAM and NO_BRAM then
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return MEMORY_SIZE;
|
||||||
|
end if;
|
||||||
|
end function;
|
||||||
|
|
||||||
|
function get_payload_size return natural is
|
||||||
|
begin
|
||||||
|
if USE_LITEDRAM and NO_BRAM then
|
||||||
|
return MEMORY_SIZE;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
end if;
|
||||||
|
end function;
|
||||||
|
|
||||||
|
constant BRAM_SIZE : natural := get_bram_size;
|
||||||
|
constant PAYLOAD_SIZE : natural := get_payload_size;
|
||||||
|
begin
|
||||||
|
|
||||||
|
-- Main SoC
|
||||||
|
soc0: entity work.soc
|
||||||
|
generic map(
|
||||||
|
MEMORY_SIZE => BRAM_SIZE,
|
||||||
|
RAM_INIT_FILE => RAM_INIT_FILE,
|
||||||
|
SIM => false,
|
||||||
|
CLK_FREQ => CLK_FREQUENCY,
|
||||||
|
HAS_DRAM => USE_LITEDRAM,
|
||||||
|
DRAM_SIZE => 1024 * 1024 * 1024,
|
||||||
|
DRAM_INIT_SIZE => PAYLOAD_SIZE,
|
||||||
|
DISABLE_FLATTEN_CORE => DISABLE_FLATTEN_CORE,
|
||||||
|
HAS_SPI_FLASH => true,
|
||||||
|
SPI_FLASH_DLINES => 4,
|
||||||
|
SPI_FLASH_OFFSET => SPI_FLASH_OFFSET,
|
||||||
|
SPI_FLASH_DEF_CKDV => SPI_FLASH_DEF_CKDV,
|
||||||
|
SPI_FLASH_DEF_QUAD => SPI_FLASH_DEF_QUAD,
|
||||||
|
LOG_LENGTH => LOG_LENGTH,
|
||||||
|
UART0_IS_16550 => UART_IS_16550
|
||||||
|
)
|
||||||
|
port map (
|
||||||
|
-- System signals
|
||||||
|
system_clk => system_clk,
|
||||||
|
rst => soc_rst,
|
||||||
|
|
||||||
|
-- UART signals
|
||||||
|
uart0_txd => uart_tx,
|
||||||
|
uart0_rxd => uart_rx,
|
||||||
|
|
||||||
|
-- SPI signals
|
||||||
|
spi_flash_sck => spi_sck,
|
||||||
|
spi_flash_cs_n => spi_cs_n,
|
||||||
|
spi_flash_sdat_o => spi_sdat_o,
|
||||||
|
spi_flash_sdat_oe => spi_sdat_oe,
|
||||||
|
spi_flash_sdat_i => spi_sdat_i,
|
||||||
|
|
||||||
|
-- DRAM wishbone
|
||||||
|
wb_dram_in => wb_dram_in,
|
||||||
|
wb_dram_out => wb_dram_out,
|
||||||
|
wb_ext_io_in => wb_ext_io_in,
|
||||||
|
wb_ext_io_out => wb_ext_io_out,
|
||||||
|
wb_ext_is_dram_csr => wb_ext_is_dram_csr,
|
||||||
|
wb_ext_is_dram_init => wb_ext_is_dram_init,
|
||||||
|
alt_reset => core_alt_reset
|
||||||
|
);
|
||||||
|
|
||||||
|
-- SPI Flash. The SPI clk needs to be fed through the STARTUPE2
|
||||||
|
-- primitive of the FPGA as it's not a normal pin
|
||||||
|
--
|
||||||
|
spi_flash_cs_n <= spi_cs_n;
|
||||||
|
spi_flash_mosi <= spi_sdat_o(0) when spi_sdat_oe(0) = '1' else 'Z';
|
||||||
|
spi_flash_miso <= spi_sdat_o(1) when spi_sdat_oe(1) = '1' else 'Z';
|
||||||
|
spi_flash_wp_n <= spi_sdat_o(2) when spi_sdat_oe(2) = '1' else 'Z';
|
||||||
|
spi_flash_hold_n <= spi_sdat_o(3) when spi_sdat_oe(3) = '1' else 'Z';
|
||||||
|
spi_sdat_i(0) <= spi_flash_mosi;
|
||||||
|
spi_sdat_i(1) <= spi_flash_miso;
|
||||||
|
spi_sdat_i(2) <= spi_flash_wp_n;
|
||||||
|
spi_sdat_i(3) <= spi_flash_hold_n;
|
||||||
|
|
||||||
|
STARTUPE2_INST: STARTUPE2
|
||||||
|
port map (
|
||||||
|
CLK => '0',
|
||||||
|
GSR => '0',
|
||||||
|
GTS => '0',
|
||||||
|
KEYCLEARB => '0',
|
||||||
|
PACK => '0',
|
||||||
|
USRCCLKO => spi_sck,
|
||||||
|
USRCCLKTS => '0',
|
||||||
|
USRDONEO => '1',
|
||||||
|
USRDONETS => '0'
|
||||||
|
);
|
||||||
|
|
||||||
|
clk200: IBUFDS
|
||||||
|
port map (
|
||||||
|
i => clk200_p,
|
||||||
|
ib => clk200_n,
|
||||||
|
o => ext_clk
|
||||||
|
);
|
||||||
|
|
||||||
|
nodram: if not USE_LITEDRAM generate
|
||||||
|
signal ddram_clk_dummy : std_ulogic;
|
||||||
|
begin
|
||||||
|
reset_controller: entity work.soc_reset
|
||||||
|
generic map(
|
||||||
|
RESET_LOW => false
|
||||||
|
)
|
||||||
|
port map(
|
||||||
|
ext_clk => ext_clk,
|
||||||
|
pll_clk => system_clk,
|
||||||
|
pll_locked_in => system_clk_locked,
|
||||||
|
ext_rst_in => '0',
|
||||||
|
pll_rst_out => pll_rst,
|
||||||
|
rst_out => soc_rst
|
||||||
|
);
|
||||||
|
|
||||||
|
clkgen: entity work.clock_generator
|
||||||
|
generic map(
|
||||||
|
CLK_INPUT_HZ => 200000000,
|
||||||
|
CLK_OUTPUT_HZ => CLK_FREQUENCY
|
||||||
|
)
|
||||||
|
port map(
|
||||||
|
ext_clk => ext_clk,
|
||||||
|
pll_rst_in => pll_rst,
|
||||||
|
pll_clk_out => system_clk,
|
||||||
|
pll_locked_out => system_clk_locked
|
||||||
|
);
|
||||||
|
|
||||||
|
led0 <= soc_rst;
|
||||||
|
led1 <= pll_rst;
|
||||||
|
led2 <= not system_clk_locked;
|
||||||
|
led3 <= '0';
|
||||||
|
core_alt_reset <= '0';
|
||||||
|
|
||||||
|
-- Vivado barfs on those differential signals if left
|
||||||
|
-- unconnected. So instanciate a diff. buffer and feed
|
||||||
|
-- it a constant '0'.
|
||||||
|
dummy_dram_clk: OBUFDS
|
||||||
|
port map (
|
||||||
|
O => ddram_clk_p,
|
||||||
|
OB => ddram_clk_n,
|
||||||
|
I => ddram_clk_dummy
|
||||||
|
);
|
||||||
|
ddram_clk_dummy <= '0';
|
||||||
|
|
||||||
|
end generate;
|
||||||
|
|
||||||
|
has_dram: if USE_LITEDRAM generate
|
||||||
|
signal dram_init_done : std_ulogic;
|
||||||
|
signal dram_init_error : std_ulogic;
|
||||||
|
signal dram_sys_rst : std_ulogic;
|
||||||
|
begin
|
||||||
|
|
||||||
|
-- Eventually dig out the frequency from the generator
|
||||||
|
-- but for now, assert it's 100Mhz
|
||||||
|
assert CLK_FREQUENCY = 100000000;
|
||||||
|
|
||||||
|
reset_controller: entity work.soc_reset
|
||||||
|
generic map(
|
||||||
|
RESET_LOW => false,
|
||||||
|
PLL_RESET_BITS => 18,
|
||||||
|
SOC_RESET_BITS => 1
|
||||||
|
)
|
||||||
|
port map(
|
||||||
|
ext_clk => ext_clk,
|
||||||
|
pll_clk => system_clk,
|
||||||
|
pll_locked_in => '1',
|
||||||
|
ext_rst_in => '0',
|
||||||
|
pll_rst_out => pll_rst,
|
||||||
|
rst_out => open
|
||||||
|
);
|
||||||
|
|
||||||
|
dram: entity work.litedram_wrapper
|
||||||
|
generic map(
|
||||||
|
DRAM_ABITS => 26,
|
||||||
|
DRAM_ALINES => 16,
|
||||||
|
DRAM_DLINES => 16,
|
||||||
|
DRAM_PORT_WIDTH => 128,
|
||||||
|
PAYLOAD_FILE => RAM_INIT_FILE,
|
||||||
|
PAYLOAD_SIZE => PAYLOAD_SIZE
|
||||||
|
)
|
||||||
|
port map(
|
||||||
|
clk_in => ext_clk,
|
||||||
|
rst => pll_rst,
|
||||||
|
system_clk => system_clk,
|
||||||
|
system_reset => soc_rst,
|
||||||
|
core_alt_reset => core_alt_reset,
|
||||||
|
pll_locked => system_clk_locked,
|
||||||
|
|
||||||
|
wb_in => wb_dram_in,
|
||||||
|
wb_out => wb_dram_out,
|
||||||
|
wb_ctrl_in => wb_ext_io_in,
|
||||||
|
wb_ctrl_out => wb_ext_io_out,
|
||||||
|
wb_ctrl_is_csr => wb_ext_is_dram_csr,
|
||||||
|
wb_ctrl_is_init => wb_ext_is_dram_init,
|
||||||
|
|
||||||
|
init_done => dram_init_done,
|
||||||
|
init_error => dram_init_error,
|
||||||
|
|
||||||
|
ddram_a => ddram_a,
|
||||||
|
ddram_ba => ddram_ba,
|
||||||
|
ddram_ras_n => ddram_ras_n,
|
||||||
|
ddram_cas_n => ddram_cas_n,
|
||||||
|
ddram_we_n => ddram_we_n,
|
||||||
|
ddram_cs_n => open,
|
||||||
|
ddram_dm => ddram_dm,
|
||||||
|
ddram_dq => ddram_dq,
|
||||||
|
ddram_dqs_p => ddram_dqs_p,
|
||||||
|
ddram_dqs_n => ddram_dqs_n,
|
||||||
|
ddram_clk_p => ddram_clk_p,
|
||||||
|
ddram_clk_n => ddram_clk_n,
|
||||||
|
ddram_cke => ddram_cke,
|
||||||
|
ddram_odt => ddram_odt,
|
||||||
|
ddram_reset_n => ddram_reset_n
|
||||||
|
);
|
||||||
|
|
||||||
|
led0 <= soc_rst;
|
||||||
|
led1 <= pll_rst;
|
||||||
|
led2 <= not dram_init_done or dram_init_error;
|
||||||
|
led3 <= not dram_init_error; -- Make it blink ?
|
||||||
|
end generate;
|
||||||
|
end architecture behaviour;
|
@ -0,0 +1,322 @@
|
|||||||
|
library ieee;
|
||||||
|
use ieee.std_logic_1164.all;
|
||||||
|
use ieee.numeric_std.all;
|
||||||
|
|
||||||
|
library unisim;
|
||||||
|
use unisim.vcomponents.all;
|
||||||
|
|
||||||
|
library work;
|
||||||
|
use work.wishbone_types.all;
|
||||||
|
|
||||||
|
entity toplevel is
|
||||||
|
generic (
|
||||||
|
MEMORY_SIZE : integer := 16384;
|
||||||
|
RAM_INIT_FILE : string := "firmware.hex";
|
||||||
|
RESET_LOW : boolean := true;
|
||||||
|
CLK_FREQUENCY : positive := 100000000;
|
||||||
|
USE_LITEDRAM : boolean := false;
|
||||||
|
NO_BRAM : boolean := false;
|
||||||
|
DISABLE_FLATTEN_CORE : boolean := false;
|
||||||
|
SPI_FLASH_OFFSET : integer := 10485760;
|
||||||
|
SPI_FLASH_DEF_CKDV : natural := 1;
|
||||||
|
SPI_FLASH_DEF_QUAD : boolean := true;
|
||||||
|
LOG_LENGTH : natural := 2048;
|
||||||
|
UART_IS_16550 : boolean := true
|
||||||
|
);
|
||||||
|
port(
|
||||||
|
clk200_p : in std_ulogic;
|
||||||
|
clk200_n : in std_ulogic;
|
||||||
|
ext_rst : in std_ulogic;
|
||||||
|
|
||||||
|
-- UART0 signals:
|
||||||
|
uart_main_tx : out std_ulogic;
|
||||||
|
uart_main_rx : in std_ulogic;
|
||||||
|
|
||||||
|
-- LEDs
|
||||||
|
led0 : out std_logic;
|
||||||
|
led1 : out std_logic;
|
||||||
|
led2 : out std_logic;
|
||||||
|
led3 : out std_logic;
|
||||||
|
|
||||||
|
-- SPI
|
||||||
|
spi_flash_cs_n : out std_ulogic;
|
||||||
|
spi_flash_mosi : inout std_ulogic;
|
||||||
|
spi_flash_miso : inout std_ulogic;
|
||||||
|
spi_flash_wp_n : inout std_ulogic;
|
||||||
|
spi_flash_hold_n : inout std_ulogic;
|
||||||
|
|
||||||
|
-- DRAM wires
|
||||||
|
ddram_a : out std_logic_vector(14 downto 0);
|
||||||
|
ddram_ba : out std_logic_vector(2 downto 0);
|
||||||
|
ddram_ras_n : out std_logic;
|
||||||
|
ddram_cas_n : out std_logic;
|
||||||
|
ddram_we_n : out std_logic;
|
||||||
|
ddram_cs_n : out std_ulogic;
|
||||||
|
ddram_dm : out std_logic_vector(3 downto 0);
|
||||||
|
ddram_dq : inout std_logic_vector(31 downto 0);
|
||||||
|
ddram_dqs_p : inout std_logic_vector(3 downto 0);
|
||||||
|
ddram_dqs_n : inout std_logic_vector(3 downto 0);
|
||||||
|
ddram_clk_p : out std_logic;
|
||||||
|
ddram_clk_n : out std_logic;
|
||||||
|
ddram_cke : out std_logic;
|
||||||
|
ddram_odt : out std_logic;
|
||||||
|
ddram_reset_n : out std_logic
|
||||||
|
);
|
||||||
|
end entity toplevel;
|
||||||
|
|
||||||
|
architecture behaviour of toplevel is
|
||||||
|
|
||||||
|
-- Internal clock
|
||||||
|
signal ext_clk : std_ulogic;
|
||||||
|
|
||||||
|
-- Reset signals:
|
||||||
|
signal soc_rst : std_ulogic;
|
||||||
|
signal pll_rst : std_ulogic;
|
||||||
|
|
||||||
|
-- Internal clock signals:
|
||||||
|
signal system_clk : std_ulogic;
|
||||||
|
signal system_clk_locked : std_ulogic;
|
||||||
|
|
||||||
|
-- DRAM main data wishbone connection
|
||||||
|
signal wb_dram_in : wishbone_master_out;
|
||||||
|
signal wb_dram_out : wishbone_slave_out;
|
||||||
|
|
||||||
|
-- DRAM control wishbone connection
|
||||||
|
signal wb_ext_io_in : wb_io_master_out;
|
||||||
|
signal wb_ext_io_out : wb_io_slave_out;
|
||||||
|
signal wb_ext_is_dram_csr : std_ulogic;
|
||||||
|
signal wb_ext_is_dram_init : std_ulogic;
|
||||||
|
|
||||||
|
-- Control/status
|
||||||
|
signal core_alt_reset : std_ulogic;
|
||||||
|
|
||||||
|
-- SPI flash
|
||||||
|
signal spi_sck : std_ulogic;
|
||||||
|
signal spi_cs_n : std_ulogic;
|
||||||
|
signal spi_sdat_o : std_ulogic_vector(3 downto 0);
|
||||||
|
signal spi_sdat_oe : std_ulogic_vector(3 downto 0);
|
||||||
|
signal spi_sdat_i : std_ulogic_vector(3 downto 0);
|
||||||
|
|
||||||
|
-- Fixup various memory sizes based on generics
|
||||||
|
function get_bram_size return natural is
|
||||||
|
begin
|
||||||
|
if USE_LITEDRAM and NO_BRAM then
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return MEMORY_SIZE;
|
||||||
|
end if;
|
||||||
|
end function;
|
||||||
|
|
||||||
|
function get_payload_size return natural is
|
||||||
|
begin
|
||||||
|
if USE_LITEDRAM and NO_BRAM then
|
||||||
|
return MEMORY_SIZE;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
end if;
|
||||||
|
end function;
|
||||||
|
|
||||||
|
constant BRAM_SIZE : natural := get_bram_size;
|
||||||
|
constant PAYLOAD_SIZE : natural := get_payload_size;
|
||||||
|
begin
|
||||||
|
|
||||||
|
-- Main SoC
|
||||||
|
soc0: entity work.soc
|
||||||
|
generic map(
|
||||||
|
MEMORY_SIZE => BRAM_SIZE,
|
||||||
|
RAM_INIT_FILE => RAM_INIT_FILE,
|
||||||
|
SIM => false,
|
||||||
|
CLK_FREQ => CLK_FREQUENCY,
|
||||||
|
HAS_DRAM => USE_LITEDRAM,
|
||||||
|
DRAM_SIZE => 1024 * 1024 * 1024,
|
||||||
|
DRAM_INIT_SIZE => PAYLOAD_SIZE,
|
||||||
|
DISABLE_FLATTEN_CORE => DISABLE_FLATTEN_CORE,
|
||||||
|
HAS_SPI_FLASH => true,
|
||||||
|
SPI_FLASH_DLINES => 4,
|
||||||
|
SPI_FLASH_OFFSET => SPI_FLASH_OFFSET,
|
||||||
|
SPI_FLASH_DEF_CKDV => SPI_FLASH_DEF_CKDV,
|
||||||
|
SPI_FLASH_DEF_QUAD => SPI_FLASH_DEF_QUAD,
|
||||||
|
LOG_LENGTH => LOG_LENGTH,
|
||||||
|
UART0_IS_16550 => UART_IS_16550
|
||||||
|
)
|
||||||
|
port map (
|
||||||
|
-- System signals
|
||||||
|
system_clk => system_clk,
|
||||||
|
rst => soc_rst,
|
||||||
|
|
||||||
|
-- UART signals
|
||||||
|
uart0_txd => uart_main_tx,
|
||||||
|
uart0_rxd => uart_main_rx,
|
||||||
|
|
||||||
|
-- SPI signals
|
||||||
|
spi_flash_sck => spi_sck,
|
||||||
|
spi_flash_cs_n => spi_cs_n,
|
||||||
|
spi_flash_sdat_o => spi_sdat_o,
|
||||||
|
spi_flash_sdat_oe => spi_sdat_oe,
|
||||||
|
spi_flash_sdat_i => spi_sdat_i,
|
||||||
|
|
||||||
|
-- DRAM wishbone
|
||||||
|
wb_dram_in => wb_dram_in,
|
||||||
|
wb_dram_out => wb_dram_out,
|
||||||
|
wb_ext_io_in => wb_ext_io_in,
|
||||||
|
wb_ext_io_out => wb_ext_io_out,
|
||||||
|
wb_ext_is_dram_csr => wb_ext_is_dram_csr,
|
||||||
|
wb_ext_is_dram_init => wb_ext_is_dram_init,
|
||||||
|
alt_reset => core_alt_reset
|
||||||
|
);
|
||||||
|
|
||||||
|
-- SPI Flash. The SPI clk needs to be fed through the STARTUPE2
|
||||||
|
-- primitive of the FPGA as it's not a normal pin
|
||||||
|
--
|
||||||
|
spi_flash_cs_n <= spi_cs_n;
|
||||||
|
spi_flash_mosi <= spi_sdat_o(0) when spi_sdat_oe(0) = '1' else 'Z';
|
||||||
|
spi_flash_miso <= spi_sdat_o(1) when spi_sdat_oe(1) = '1' else 'Z';
|
||||||
|
spi_flash_wp_n <= spi_sdat_o(2) when spi_sdat_oe(2) = '1' else 'Z';
|
||||||
|
spi_flash_hold_n <= spi_sdat_o(3) when spi_sdat_oe(3) = '1' else 'Z';
|
||||||
|
spi_sdat_i(0) <= spi_flash_mosi;
|
||||||
|
spi_sdat_i(1) <= spi_flash_miso;
|
||||||
|
spi_sdat_i(2) <= spi_flash_wp_n;
|
||||||
|
spi_sdat_i(3) <= spi_flash_hold_n;
|
||||||
|
|
||||||
|
STARTUPE2_INST: STARTUPE2
|
||||||
|
port map (
|
||||||
|
CLK => '0',
|
||||||
|
GSR => '0',
|
||||||
|
GTS => '0',
|
||||||
|
KEYCLEARB => '0',
|
||||||
|
PACK => '0',
|
||||||
|
USRCCLKO => spi_sck,
|
||||||
|
USRCCLKTS => '0',
|
||||||
|
USRDONEO => '1',
|
||||||
|
USRDONETS => '0'
|
||||||
|
);
|
||||||
|
|
||||||
|
clk200: IBUFDS
|
||||||
|
port map (
|
||||||
|
i => clk200_p,
|
||||||
|
ib => clk200_n,
|
||||||
|
o => ext_clk
|
||||||
|
);
|
||||||
|
|
||||||
|
nodram: if not USE_LITEDRAM generate
|
||||||
|
signal ddram_clk_dummy : std_ulogic;
|
||||||
|
begin
|
||||||
|
reset_controller: entity work.soc_reset
|
||||||
|
generic map(
|
||||||
|
RESET_LOW => RESET_LOW
|
||||||
|
)
|
||||||
|
port map(
|
||||||
|
ext_clk => ext_clk,
|
||||||
|
pll_clk => system_clk,
|
||||||
|
pll_locked_in => system_clk_locked,
|
||||||
|
ext_rst_in => ext_rst,
|
||||||
|
pll_rst_out => pll_rst,
|
||||||
|
rst_out => soc_rst
|
||||||
|
);
|
||||||
|
|
||||||
|
clkgen: entity work.clock_generator
|
||||||
|
generic map(
|
||||||
|
CLK_INPUT_HZ => 200000000,
|
||||||
|
CLK_OUTPUT_HZ => CLK_FREQUENCY
|
||||||
|
)
|
||||||
|
port map(
|
||||||
|
ext_clk => ext_clk,
|
||||||
|
pll_rst_in => pll_rst,
|
||||||
|
pll_clk_out => system_clk,
|
||||||
|
pll_locked_out => system_clk_locked
|
||||||
|
);
|
||||||
|
|
||||||
|
led0 <= soc_rst;
|
||||||
|
led1 <= pll_rst;
|
||||||
|
led2 <= not system_clk_locked;
|
||||||
|
led3 <= '0';
|
||||||
|
core_alt_reset <= '0';
|
||||||
|
|
||||||
|
-- Vivado barfs on those differential signals if left
|
||||||
|
-- unconnected. So instanciate a diff. buffer and feed
|
||||||
|
-- it a constant '0'.
|
||||||
|
dummy_dram_clk: OBUFDS
|
||||||
|
port map (
|
||||||
|
O => ddram_clk_p,
|
||||||
|
OB => ddram_clk_n,
|
||||||
|
I => ddram_clk_dummy
|
||||||
|
);
|
||||||
|
ddram_clk_dummy <= '0';
|
||||||
|
|
||||||
|
end generate;
|
||||||
|
|
||||||
|
has_dram: if USE_LITEDRAM generate
|
||||||
|
signal dram_init_done : std_ulogic;
|
||||||
|
signal dram_init_error : std_ulogic;
|
||||||
|
signal dram_sys_rst : std_ulogic;
|
||||||
|
begin
|
||||||
|
|
||||||
|
-- Eventually dig out the frequency from the generator
|
||||||
|
-- but for now, assert it's 100Mhz
|
||||||
|
assert CLK_FREQUENCY = 100000000;
|
||||||
|
|
||||||
|
reset_controller: entity work.soc_reset
|
||||||
|
generic map(
|
||||||
|
RESET_LOW => RESET_LOW,
|
||||||
|
PLL_RESET_BITS => 18,
|
||||||
|
SOC_RESET_BITS => 1
|
||||||
|
)
|
||||||
|
port map(
|
||||||
|
ext_clk => ext_clk,
|
||||||
|
pll_clk => system_clk,
|
||||||
|
pll_locked_in => '1',
|
||||||
|
ext_rst_in => ext_rst,
|
||||||
|
pll_rst_out => pll_rst,
|
||||||
|
rst_out => open
|
||||||
|
);
|
||||||
|
|
||||||
|
dram: entity work.litedram_wrapper
|
||||||
|
generic map(
|
||||||
|
DRAM_ABITS => 25,
|
||||||
|
DRAM_ALINES => 15,
|
||||||
|
DRAM_DLINES => 32,
|
||||||
|
DRAM_PORT_WIDTH => 256,
|
||||||
|
PAYLOAD_FILE => RAM_INIT_FILE,
|
||||||
|
PAYLOAD_SIZE => PAYLOAD_SIZE
|
||||||
|
)
|
||||||
|
port map(
|
||||||
|
clk_in => ext_clk,
|
||||||
|
rst => pll_rst,
|
||||||
|
system_clk => system_clk,
|
||||||
|
system_reset => soc_rst,
|
||||||
|
core_alt_reset => core_alt_reset,
|
||||||
|
pll_locked => system_clk_locked,
|
||||||
|
|
||||||
|
wb_in => wb_dram_in,
|
||||||
|
wb_out => wb_dram_out,
|
||||||
|
wb_ctrl_in => wb_ext_io_in,
|
||||||
|
wb_ctrl_out => wb_ext_io_out,
|
||||||
|
wb_ctrl_is_csr => wb_ext_is_dram_csr,
|
||||||
|
wb_ctrl_is_init => wb_ext_is_dram_init,
|
||||||
|
|
||||||
|
init_done => dram_init_done,
|
||||||
|
init_error => dram_init_error,
|
||||||
|
|
||||||
|
ddram_a => ddram_a,
|
||||||
|
ddram_ba => ddram_ba,
|
||||||
|
ddram_ras_n => ddram_ras_n,
|
||||||
|
ddram_cas_n => ddram_cas_n,
|
||||||
|
ddram_we_n => ddram_we_n,
|
||||||
|
ddram_cs_n => ddram_cs_n,
|
||||||
|
ddram_dm => ddram_dm,
|
||||||
|
ddram_dq => ddram_dq,
|
||||||
|
ddram_dqs_p => ddram_dqs_p,
|
||||||
|
ddram_dqs_n => ddram_dqs_n,
|
||||||
|
ddram_clk_p => ddram_clk_p,
|
||||||
|
ddram_clk_n => ddram_clk_n,
|
||||||
|
ddram_cke => ddram_cke,
|
||||||
|
ddram_odt => ddram_odt,
|
||||||
|
ddram_reset_n => ddram_reset_n
|
||||||
|
);
|
||||||
|
|
||||||
|
led0 <= soc_rst;
|
||||||
|
led1 <= pll_rst;
|
||||||
|
led2 <= not dram_init_done or dram_init_error;
|
||||||
|
led3 <= not dram_init_error; -- Make it blink ?
|
||||||
|
end generate;
|
||||||
|
end architecture behaviour;
|
@ -0,0 +1,42 @@
|
|||||||
|
# This file is Copyright (c) 2018-2019 Florent Kermarrec <florent@enjoy-digital.fr>
|
||||||
|
# License: BSD
|
||||||
|
|
||||||
|
{
|
||||||
|
# General ------------------------------------------------------------------
|
||||||
|
"cpu": "None", # Type of CPU used for init/calib (vexriscv, lm32)
|
||||||
|
"cpu_variant":"standard",
|
||||||
|
"speedgrade": -2, # FPGA speedgrade
|
||||||
|
"memtype": "DDR3", # DRAM type
|
||||||
|
|
||||||
|
# PHY ----------------------------------------------------------------------
|
||||||
|
"cmd_delay": 0, # Command additional delay (in taps)
|
||||||
|
"cmd_latency": 0, # Command additional latency
|
||||||
|
"sdram_module": "MT41K512M16", # SDRAM modules of the board or SO-DIMM
|
||||||
|
"sdram_module_nb": 2, # Number of byte groups
|
||||||
|
"sdram_rank_nb": 1, # Number of ranks
|
||||||
|
"sdram_phy": "A7DDRPHY", # Type of FPGA PHY
|
||||||
|
|
||||||
|
# Electrical ---------------------------------------------------------------
|
||||||
|
"rtt_nom": "60ohm", # Nominal termination
|
||||||
|
"rtt_wr": "60ohm", # Write termination
|
||||||
|
"ron": "34ohm", # Output driver impedance
|
||||||
|
|
||||||
|
# Frequency ----------------------------------------------------------------
|
||||||
|
"input_clk_freq": 200e6, # Input clock frequency
|
||||||
|
"sys_clk_freq": 100e6, # System clock frequency (DDR_clk = 4 x sys_clk)
|
||||||
|
"iodelay_clk_freq": 200e6, # IODELAYs reference clock frequency
|
||||||
|
|
||||||
|
# Core ---------------------------------------------------------------------
|
||||||
|
"cmd_buffer_depth": 16, # Depth of the command buffer
|
||||||
|
|
||||||
|
# User Ports ---------------------------------------------------------------
|
||||||
|
"user_ports": {
|
||||||
|
"native_0": {
|
||||||
|
"type": "native",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
# CSR Port -----------------------------------------------------------------
|
||||||
|
"csr_alignment" : 32,
|
||||||
|
"csr_data_width" : 32,
|
||||||
|
}
|
@ -0,0 +1,123 @@
|
|||||||
|
library ieee;
|
||||||
|
use ieee.std_logic_1164.all;
|
||||||
|
use ieee.numeric_std.all;
|
||||||
|
use std.textio.all;
|
||||||
|
|
||||||
|
library work;
|
||||||
|
use work.wishbone_types.all;
|
||||||
|
use work.utils.all;
|
||||||
|
|
||||||
|
entity dram_init_mem is
|
||||||
|
generic (
|
||||||
|
EXTRA_PAYLOAD_FILE : string := "";
|
||||||
|
EXTRA_PAYLOAD_SIZE : integer := 0
|
||||||
|
);
|
||||||
|
port (
|
||||||
|
clk : in std_ulogic;
|
||||||
|
wb_in : in wb_io_master_out;
|
||||||
|
wb_out : out wb_io_slave_out
|
||||||
|
);
|
||||||
|
end entity dram_init_mem;
|
||||||
|
|
||||||
|
architecture rtl of dram_init_mem is
|
||||||
|
|
||||||
|
constant INIT_RAM_SIZE : integer := 24576;
|
||||||
|
constant RND_PAYLOAD_SIZE : integer := round_up(EXTRA_PAYLOAD_SIZE, 8);
|
||||||
|
constant TOTAL_RAM_SIZE : integer := INIT_RAM_SIZE + RND_PAYLOAD_SIZE;
|
||||||
|
constant INIT_RAM_ABITS : integer := log2ceil(TOTAL_RAM_SIZE-1);
|
||||||
|
constant INIT_RAM_FILE : string := "litedram_core.init";
|
||||||
|
|
||||||
|
type ram_t is array(0 to (TOTAL_RAM_SIZE / 4) - 1) of std_logic_vector(31 downto 0);
|
||||||
|
|
||||||
|
-- XXX FIXME: Have a single init function called twice with
|
||||||
|
-- an offset as argument
|
||||||
|
procedure init_load_payload(ram: inout ram_t; filename: string) is
|
||||||
|
file payload_file : text open read_mode is filename;
|
||||||
|
variable ram_line : line;
|
||||||
|
variable temp_word : std_logic_vector(63 downto 0);
|
||||||
|
begin
|
||||||
|
for i in 0 to RND_PAYLOAD_SIZE-1 loop
|
||||||
|
exit when endfile(payload_file);
|
||||||
|
readline(payload_file, ram_line);
|
||||||
|
hread(ram_line, temp_word);
|
||||||
|
ram((INIT_RAM_SIZE/4) + i*2) := temp_word(31 downto 0);
|
||||||
|
ram((INIT_RAM_SIZE/4) + i*2+1) := temp_word(63 downto 32);
|
||||||
|
end loop;
|
||||||
|
assert endfile(payload_file) report "Payload too big !" severity failure;
|
||||||
|
end procedure;
|
||||||
|
|
||||||
|
impure function init_load_ram(name : string) return ram_t is
|
||||||
|
file ram_file : text open read_mode is name;
|
||||||
|
variable temp_word : std_logic_vector(63 downto 0);
|
||||||
|
variable temp_ram : ram_t := (others => (others => '0'));
|
||||||
|
variable ram_line : line;
|
||||||
|
begin
|
||||||
|
report "Payload size:" & integer'image(EXTRA_PAYLOAD_SIZE) &
|
||||||
|
" rounded to:" & integer'image(RND_PAYLOAD_SIZE);
|
||||||
|
report "Total RAM size:" & integer'image(TOTAL_RAM_SIZE) &
|
||||||
|
" bytes using " & integer'image(INIT_RAM_ABITS) &
|
||||||
|
" address bits";
|
||||||
|
for i in 0 to (INIT_RAM_SIZE/8)-1 loop
|
||||||
|
exit when endfile(ram_file);
|
||||||
|
readline(ram_file, ram_line);
|
||||||
|
hread(ram_line, temp_word);
|
||||||
|
temp_ram(i*2) := temp_word(31 downto 0);
|
||||||
|
temp_ram(i*2+1) := temp_word(63 downto 32);
|
||||||
|
end loop;
|
||||||
|
if RND_PAYLOAD_SIZE /= 0 then
|
||||||
|
init_load_payload(temp_ram, EXTRA_PAYLOAD_FILE);
|
||||||
|
end if;
|
||||||
|
return temp_ram;
|
||||||
|
end function;
|
||||||
|
|
||||||
|
impure function init_zero return ram_t is
|
||||||
|
variable temp_ram : ram_t := (others => (others => '0'));
|
||||||
|
begin
|
||||||
|
return temp_ram;
|
||||||
|
end function;
|
||||||
|
|
||||||
|
impure function initialize_ram(filename: string) return ram_t is
|
||||||
|
begin
|
||||||
|
report "Opening file " & filename;
|
||||||
|
if filename'length = 0 then
|
||||||
|
return init_zero;
|
||||||
|
else
|
||||||
|
return init_load_ram(filename);
|
||||||
|
end if;
|
||||||
|
end function;
|
||||||
|
signal init_ram : ram_t := initialize_ram(INIT_RAM_FILE);
|
||||||
|
|
||||||
|
attribute ram_style : string;
|
||||||
|
attribute ram_style of init_ram: signal is "block";
|
||||||
|
|
||||||
|
signal obuf : std_ulogic_vector(31 downto 0);
|
||||||
|
signal oack : std_ulogic;
|
||||||
|
begin
|
||||||
|
|
||||||
|
init_ram_0: process(clk)
|
||||||
|
variable adr : integer;
|
||||||
|
begin
|
||||||
|
if rising_edge(clk) then
|
||||||
|
oack <= '0';
|
||||||
|
if (wb_in.cyc and wb_in.stb) = '1' then
|
||||||
|
adr := to_integer((unsigned(wb_in.adr(INIT_RAM_ABITS-1 downto 2))));
|
||||||
|
if wb_in.we = '0' then
|
||||||
|
obuf <= init_ram(adr);
|
||||||
|
else
|
||||||
|
for i in 0 to 3 loop
|
||||||
|
if wb_in.sel(i) = '1' then
|
||||||
|
init_ram(adr)(((i + 1) * 8) - 1 downto i * 8) <=
|
||||||
|
wb_in.dat(((i + 1) * 8) - 1 downto i * 8);
|
||||||
|
end if;
|
||||||
|
end loop;
|
||||||
|
end if;
|
||||||
|
oack <= '1';
|
||||||
|
end if;
|
||||||
|
wb_out.ack <= oack;
|
||||||
|
wb_out.dat <= obuf;
|
||||||
|
end if;
|
||||||
|
end process;
|
||||||
|
|
||||||
|
wb_out.stall <= '0';
|
||||||
|
|
||||||
|
end architecture rtl;
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue