Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
litex-boards
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kestrel Collaboration
Kestrel LiteX
litex-boards
Commits
5cf7731f
Commit
5cf7731f
authored
Nov 12, 2020
by
Florent Kermarrec
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
targets/netv2: add PCIe.
parent
7a9f1754
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
71 additions
and
8 deletions
+71
-8
litex_boards/targets/netv2.py
litex_boards/targets/netv2.py
+71
-8
No files found.
litex_boards/targets/netv2.py
View file @
5cf7731f
...
...
@@ -8,15 +8,18 @@
import
os
import
argparse
import
sys
from
migen
import
*
from
litex_boards.platforms
import
netv2
from
litex.soc.
cores.clock
import
*
from
litex.soc.
interconnect.csr
import
*
from
litex.soc.integration.soc_core
import
*
from
litex.soc.integration.soc_sdram
import
*
from
litex.soc.integration.builder
import
*
from
litex.soc.cores.clock
import
*
from
litex.soc.cores.led
import
LedChaser
from
litedram.modules
import
K4B2G1646F
...
...
@@ -24,6 +27,12 @@ from litedram.phy import s7ddrphy
from
liteeth.phy.rmii
import
LiteEthPHYRMII
from
litepcie.phy.s7pciephy
import
S7PCIEPHY
from
litepcie.core
import
LitePCIeEndpoint
,
LitePCIeMSI
from
litepcie.frontend.dma
import
LitePCIeDMA
from
litepcie.frontend.wishbone
import
LitePCIeWishboneBridge
from
litepcie.software
import
generate_litepcie_software
# CRG ----------------------------------------------------------------------------------------------
class
_CRG
(
Module
):
...
...
@@ -36,11 +45,13 @@ class _CRG(Module):
self
.
clock_domains
.
cd_clk100
=
ClockDomain
()
self
.
clock_domains
.
cd_eth
=
ClockDomain
()
# # #
# Clk/Rst
clk50
=
platform
.
request
(
"clk50"
)
# PLL
self
.
submodules
.
pll
=
pll
=
S7PLL
(
speedgrade
=-
1
)
self
.
comb
+=
pll
.
reset
.
eq
(
self
.
rst
)
pll
.
register_clkin
(
platform
.
request
(
"clk50"
)
,
50e6
)
pll
.
register_clkin
(
clk50
,
50e6
)
pll
.
create_clkout
(
self
.
cd_sys
,
sys_clk_freq
)
pll
.
create_clkout
(
self
.
cd_sys4x
,
4
*
sys_clk_freq
)
pll
.
create_clkout
(
self
.
cd_sys4x_dqs
,
4
*
sys_clk_freq
,
phase
=
90
)
...
...
@@ -53,7 +64,7 @@ class _CRG(Module):
# BaseSoC ------------------------------------------------------------------------------------------
class
BaseSoC
(
SoCCore
):
def
__init__
(
self
,
sys_clk_freq
=
int
(
100e6
),
with_ethernet
=
False
,
**
kwargs
):
def
__init__
(
self
,
sys_clk_freq
=
int
(
100e6
),
with_
pcie
=
False
,
with_
ethernet
=
False
,
**
kwargs
):
platform
=
netv2
.
Platform
()
# SoCCore ----------------------------------------------------------------------------------
...
...
@@ -90,6 +101,44 @@ class BaseSoC(SoCCore):
self
.
add_csr
(
"ethphy"
)
self
.
add_ethernet
(
phy
=
self
.
ethphy
)
# PCIe -------------------------------------------------------------------------------------
if
with_pcie
:
assert
self
.
csr_data_width
==
32
# PHY
self
.
submodules
.
pcie_phy
=
S7PCIEPHY
(
platform
,
platform
.
request
(
"pcie_x4"
),
data_width
=
128
,
bar0_size
=
0x20000
)
platform
.
add_false_path_constraints
(
self
.
crg
.
cd_sys
.
clk
,
self
.
pcie_phy
.
cd_pcie
.
clk
)
self
.
add_csr
(
"pcie_phy"
)
# Endpoint
self
.
submodules
.
pcie_endpoint
=
LitePCIeEndpoint
(
self
.
pcie_phy
,
max_pending_requests
=
8
)
# Wishbone bridge
self
.
submodules
.
pcie_bridge
=
LitePCIeWishboneBridge
(
self
.
pcie_endpoint
,
base_address
=
self
.
mem_map
[
"csr"
])
self
.
add_wb_master
(
self
.
pcie_bridge
.
wishbone
)
# DMA0
self
.
submodules
.
pcie_dma0
=
LitePCIeDMA
(
self
.
pcie_phy
,
self
.
pcie_endpoint
,
with_buffering
=
True
,
buffering_depth
=
1024
,
with_loopback
=
True
)
self
.
add_csr
(
"pcie_dma0"
)
self
.
add_constant
(
"DMA_CHANNELS"
,
1
)
# MSI
self
.
submodules
.
pcie_msi
=
LitePCIeMSI
()
self
.
add_csr
(
"pcie_msi"
)
self
.
comb
+=
self
.
pcie_msi
.
source
.
connect
(
self
.
pcie_phy
.
msi
)
self
.
interrupts
=
{
"PCIE_DMA0_WRITER"
:
self
.
pcie_dma0
.
writer
.
irq
,
"PCIE_DMA0_READER"
:
self
.
pcie_dma0
.
reader
.
irq
,
}
for
i
,
(
k
,
v
)
in
enumerate
(
sorted
(
self
.
interrupts
.
items
())):
self
.
comb
+=
self
.
pcie_msi
.
irqs
[
i
].
eq
(
v
)
self
.
add_constant
(
k
+
"_INTERRUPT"
,
i
)
# Leds -------------------------------------------------------------------------------------
self
.
submodules
.
leds
=
LedChaser
(
pads
=
platform
.
request_all
(
"user_led"
),
...
...
@@ -100,17 +149,31 @@ class BaseSoC(SoCCore):
def
main
():
parser
=
argparse
.
ArgumentParser
(
description
=
"LiteX SoC on NeTV2"
)
parser
.
add_argument
(
"--build"
,
action
=
"store_true"
,
help
=
"Build bitstream"
)
parser
.
add_argument
(
"--load"
,
action
=
"store_true"
,
help
=
"Load bitstream"
)
parser
.
add_argument
(
"--with-ethernet"
,
action
=
"store_true"
,
help
=
"Enable Ethernet support"
)
parser
.
add_argument
(
"--build"
,
action
=
"store_true"
,
help
=
"Build bitstream"
)
parser
.
add_argument
(
"--load"
,
action
=
"store_true"
,
help
=
"Load bitstream"
)
parser
.
add_argument
(
"--with-ethernet"
,
action
=
"store_true"
,
help
=
"Enable Ethernet support"
)
parser
.
add_argument
(
"--with-pcie"
,
action
=
"store_true"
,
help
=
"Enable PCIe support"
)
parser
.
add_argument
(
"--driver"
,
action
=
"store_true"
,
help
=
"Generate PCIe driver"
)
parser
.
add_argument
(
"--with-spi-sdcard"
,
action
=
"store_true"
,
help
=
"Enable SPI-mode SDCard support"
)
parser
.
add_argument
(
"--with-sdcard"
,
action
=
"store_true"
,
help
=
"Enable SDCard support"
)
builder_args
(
parser
)
soc_sdram_args
(
parser
)
args
=
parser
.
parse_args
()
soc
=
BaseSoC
(
with_ethernet
=
args
.
with_ethernet
,
**
soc_sdram_argdict
(
args
))
soc
=
BaseSoC
(
with_ethernet
=
args
.
with_ethernet
,
with_pcie
=
args
.
with_pcie
,
**
soc_sdram_argdict
(
args
))
assert
not
(
args
.
with_spi_sdcard
and
args
.
with_sdcard
)
if
args
.
with_spi_sdcard
:
soc
.
add_spi_sdcard
()
if
args
.
with_sdcard
:
soc
.
add_sdcard
()
builder
=
Builder
(
soc
,
**
builder_argdict
(
args
))
builder
.
build
(
run
=
args
.
build
)
if
args
.
driver
:
generate_litepcie_software
(
soc
,
os
.
path
.
join
(
builder
.
output_dir
,
"driver"
))
if
args
.
load
:
prog
=
soc
.
platform
.
create_programmer
()
prog
.
load_bitstream
(
os
.
path
.
join
(
builder
.
gateware_dir
,
soc
.
build_name
+
".bit"
))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment