Skip to content
Fetching contributors…
Cannot retrieve contributors at this time
177 lines (154 sloc) 8.57 KB
ssiegel 2010-06-10 Created
ssiegel 2010-07-26 ISE 12.2 Updates
ssiegel 2010-09-17 Included LICENSE.TXT
ssiegel 2010-11-22 Added to FAQ
ssiegel 2010-11-29 Touched README
ssiegel 2010-12-28 AXI *removed* from WIP. "WIP" (WCI,WSI,WMI,etc.) now implies OCP
ssiegel 2011-01-14 Board Targets become platforms
ssiegel 2011-03-03 ISE 13.1
ssiegel 2011-03-13 Took Dan Zhang's patch changes (see FAQ)
ssiegel 2011-08-16 ISE 13.2, Quartus 11.0(sp1)
ssiegel 2011-10-04 USE 13.3 prep
ssiegel 2011-12-12 64b Host address capability
ssiegel 2012-01-19 ISE 13.4 Library Build
ssiegel 2012-01-30 Bluespec Release 2012.01.A (BRAM Prims Updated)
Principal Author: Shepard Siegel, Atomic Rules LLC
<shepard period siegel at atomicrules period com>
OpenCPI website:
1. Getting Started
Browse the documentation at $(OCPI_DIR)/doc
When you see a sub-dir named "pen", that is a "holding-pen" for files that may be depricated
To build a bitstream, first make sure the appropriate tools are installed
e.g. Install Xilinx ISE 13.x to build Xilinx bitstreams
e.g. Install Altera Quartus 11 to build Altera bitstreams
As of 2012-01-19 ISE 13.4 or greater is required for Xilinx builds.
As of 2011-08-16 Quartus 11.1 or greater is required for Altera builds.
If you are not using the same tools version as the distribution, you may need to rebuild XST libraries
Source code is under git verson control - if you care, install git and say
$ git status
2. Building a Bitstream for a Target
Set the environment variable OCPI_DIR to point to this distribution
e.g. setenv OCPI_DIR $(HOME)/projects/ocpi
You may need to set certain environment variables, for example...
source /opt/Xilinx/13.4/ISE_DS/settings64.csh
If needed, first specialize the HDL sources for a particular target. (We plan to remove the need for this step in a future release).
From $(OCPI_DIR) say
$ make <target>
where <target> is one of these board platform names...
Make will copy files into $(OCPI_DIR)/build/tmp-<target> and run the vendor tools. When the build sucessfully completes, the build/tmp-<target> directory will be remaned build/<target>-<timestamp>
3. Loading the a Bitstream for the First Time
OpenCPI allows you to load a bitstream while the Linux host is running. However to achieve this capability, there is the one-time requirement of loading an OpenCPI bitsream into Flash so that the BIOS sees an OpenCPI PCIe endpoint when Linux boots.
4. Normal (not the first time) Loading of the bitstream
Use $(OCPI_DIR)/scripts/loadBitStreamXXXX <bitstream.bit> <pcie slot> <usb port>
e.g $ ./loadBitStreamSX95 ../build/sx95t-20100608_1209/fpgaTop.bit 0000:03:00.0 usb21
5. Setting Host to Reserve Memory to Allows User-Mode DMA w/o Kernel-Mode Driver
5.1 Edit grub.conf to reserve 256MB of memory...
e.g. kernel /vmlinuz-2.6.18-194.3.1.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet memmap=256M$0x5f700000
5.2 Set env vars to use that memory (still using old version in some programs)
setenv CPI_DMA_MEMORY 256M\$0x5f700000 # depricated use on 2010-05-25
setenv OCPI_DMA_MEMORY 256M\$0x5f700000
5.3 Either 32b of 64b host addreses may be used. The FPGA hardware will use the appropriare 3DW or 4DW
signalling depending on if the host address is below or above 4 GB. Be sure to follow the getting started
guide for determining the correct address to reserve on the host. For 32b vs 64 testing; a common set seen
with 16GB systems has been:
32b host address on 16GB machine:
export CPI_DMA_MEMORY=512M\$0x7f790000 # depricated use on 2010-05-25
export OCPI_DMA_MEMORY=512M\$0x7f790000
64b host address on 16GB machine:
export CPI_DMA_MEMORY=512M\$0x340000000 # depricated use on 2010-05-25
export OCPI_DMA_MEMORY=512M\$0x340000000
6. Running a DMA Sanity Test from $(OCPI_DIR)/bin (you probably need set addresses in script)
[shep@core960 bin]$ ./dmaTestBasic
admin probe
OCCP Admin Space
Open: 0x4f70656e "nepO"
CPI: 0x43504900 ""
revision: 0x00000001
birthday: 0x4c111672 Thu Jun 10 16:44:34 2010
workerMask: 0x00007c1c workers 2 3 4 10 11 12 13 14 exist
pci_dev_id: 0x00000300
timeStatus: 0x10000000 timeSetSticky
timeControl: 0x00000000
gpsTimeMS: 0x4c113d1b (1276198171) Thu Jun 10 19:29:31 2010
gpsTimeLS: 0xc33394e1 (3274933081)
deltaTimeMS: 0x00000000
deltaTimeLS: 0x00000000
refPerPPS: 0x00000000 (0)
Log is: /home/shep/projects/ocpi/bin/testDMA14752.log
For -r1im -r3om -N0o 3 -N1i 3 -N3o 3 -N0i 3 -I 16 -i 1000 ... SUCCEEDED
For -r1im -r3om -N0o 3 -N1i 3 -N3o 3 -N0i 3 -I 32 -i 1000 ... SUCCEEDED
testDMA done
7. Running a functional simulation of DMA with ISim
$ make isim
8. Compiling infrastructure IP written in BSV using the Bluespec compilier (requires bsc)
$ make platform_{xupv5|ml555|schist|ml605}
(see Makefile for valid targets)
9. FAQs
"My bitstream build failed, where can I look to see what went wrong?"
Look in the $OCPIDIR/scripts/buildhdl directory at the script "build_fpgaTop" and then at the appropriate
.xst and .prj files. Also look in the $OCPIDIR/build/tmp-<target> directory, where an incomplete build's
artifacts will remain.
"I want to learn more about Bluespec SystemVerilog (BSV), where do I start?"
The e-Book "Bluespec by Example is a good place... (bsv_by_example.pdf)
"How to I switch between 4B and 16B application data paths?; the later is needed for maximum througput"
Dan Zhang has supplied this text and changes to the files listed. This patch is for extending the OpenCPI datapath from 4B to 16B.
This is especially useful for the ML605 to take advantage of the 2.0GB/s theoretical PCI-E 2.0 4x connection between the FPGA and DRAM.
Streaming tests show that we can achieve ~1.6GB/s bidirectional.
To switch between the two, `define USE_NDW4 instead of USE_NDW1.
The patch can similarly be extended for 8B and 32B datapaths, although this has not yet been done.
There is currently an issue where the fpgaTop-ml605.prj file needs to be changed each time you want to change the datapath width. Any suggestions?
Files : (noted chnages from 4B)
Makefile : (set line 380 -D USE_NDW4)
fpgaTop-ml605.prj : (use 16B v ariants, plus use DelayWorker instead of scaerio0)
Config.bsv : (DEFINE_NDW 4)
FTop_ml605.bsv.bsv : ( use 16B CTop)
OCInf.bsv : ( use 16B DPs)
OCDP.bsv : ( set NDW4)
CTop.bsv : ( set NDW4)
OCApp.bsv : ( set NDW4, NumAlias)
Thank you Dan! -Shep
"ISE 13.2 or ISE 13.3 map crashes at the end of operation"
Try executing this line in a bash shell after X is running but before map:
export LD_PRELOAD=/opt/Xilinx/13.2/ISE_DS/ISE/lib/lin64/
See the link on the next line:
"What's up with the multiple GIT repos?"
This work started out in this (once private) disti as an upstream sandbox:
With the intent that select files would be merged to the OpenCPI public repo:
At this writing 2011-04-03, the transition is underway. Stay tuned.
"The FPGA timebase is not advancing, with or without a GPS input signal, what do I do?"
Look at the timeStatus and timeControl registers. You can observe the various signals on
the PPS output signal. Make sure the FPGA has an in tolerance X0 (usually 200 MHz) connected.
and that the code is compiled to expect the correct frequency. A future feature may be to allow
the frequency of the XO to be set as a configuration property. Now it is compiled into the code.
If the incident XO is too far out of tolerance; there may be no timebase at all.
10. Notes
2010-12-18 ISE 12.4 Libraries
2010-12-16 XUPV5 testOK on core920
2010-12-16 ML605 testOK, but some issue (same) with SX95T and ML555 (multiple changed in flight?)
2011-01-31 tweaks
2011-03-03 ISE 13.1 Libraries
2011-03-13 Switch back to 16B (4DW) baseline
2011-04-20 Multiple GIT repos
2011-09-30 ISE 13.3 Libraries
2012-01-19 ISE 13.4 Libraries
2012-01-30 Bluespec Release 2012.01.A (BRAM Prims Updated)
Jump to Line
Something went wrong with that request. Please try again.