2015-01-20 17:41:33 -05:00
|
|
|
__ _ __ _______ _________
|
|
|
|
/ / (_) /____ / __/ _ /_ __/ _ |
|
|
|
|
/ /__/ / __/ -_)\ \/ __ |/ / / __ |
|
|
|
|
/____/_/\__/\__/___/_/ |_/_/ /_/ |_|
|
2015-01-16 14:25:11 -05:00
|
|
|
|
2015-01-23 04:12:02 -05:00
|
|
|
Copyright 2014-2015 The University of Hong Kong
|
2015-01-16 14:25:11 -05:00
|
|
|
|
2015-01-20 17:41:33 -05:00
|
|
|
A small footprint and configurable SATA core
|
|
|
|
developed for HKU by M-Labs Ltd & EnjoyDigital
|
2015-01-16 17:52:41 -05:00
|
|
|
|
2015-01-28 13:53:58 -05:00
|
|
|
[> Doc
|
|
|
|
---------
|
|
|
|
HTML : www.enjoy-digital.fr/litex/litesata/
|
|
|
|
PDF : www.enjoy-digital.fr/litex/litesata.pdf
|
|
|
|
|
2015-01-17 08:17:31 -05:00
|
|
|
[> Intro
|
2015-01-22 11:44:04 -05:00
|
|
|
---------
|
2015-01-22 11:15:12 -05:00
|
|
|
LiteSATA provides a small footprint and configurable SATA gen1/2/3 core.
|
2015-01-17 08:17:31 -05:00
|
|
|
|
2015-01-25 10:21:56 -05:00
|
|
|
LiteSATA is part of LiteX libraries whose aims are to lower entry level of complex
|
2015-01-17 08:17:31 -05:00
|
|
|
FPGA IP cores by providing simple, elegant and efficient implementations of
|
|
|
|
components used in today's SoC such as Ethernet, SATA, PCIe, SDRAM Controller...
|
|
|
|
|
|
|
|
The core uses simple and specific streaming buses and will provides in the future
|
|
|
|
adapters to use standardized AXI or Avalon-ST streaming buses.
|
|
|
|
|
|
|
|
Since Python is used to describe the HDL, the core is highly and easily
|
|
|
|
configurable.
|
|
|
|
|
|
|
|
The synthetizable BIST can be used as a starting point to integrate SATA in
|
|
|
|
your own SoC.
|
|
|
|
|
|
|
|
LiteSATA uses technologies developed in partnership with M-Labs Ltd:
|
|
|
|
- Migen enables generating HDL with Python in an efficient way.
|
|
|
|
- MiSoC provides the basic blocks to build a powerful and small footprint SoC.
|
|
|
|
|
|
|
|
LiteSATA can be used as a Migen/MiSoC library (by simply installing it
|
|
|
|
with the provided setup.py) or can be integrated with your standard design flow
|
|
|
|
by generating the verilog rtl that you will use as a standard core.
|
|
|
|
|
2015-01-16 17:52:41 -05:00
|
|
|
[> Features
|
2015-01-22 11:44:04 -05:00
|
|
|
-----------
|
2015-01-16 17:52:41 -05:00
|
|
|
PHY:
|
2015-01-17 08:17:31 -05:00
|
|
|
- OOB, COMWAKE, COMINIT
|
|
|
|
- ALIGN inserter/remover and bytes alignment on K28.5
|
|
|
|
- 8B/10B encoding/decoding in transceiver
|
|
|
|
- Errors detection and reporting
|
|
|
|
- 32 bits interface
|
|
|
|
- 1.5/3.0/6.0GBps supported speeds (respectively 37.5/75/150MHz system clk)
|
2015-01-16 17:52:41 -05:00
|
|
|
Core:
|
|
|
|
Link:
|
2015-01-17 08:17:31 -05:00
|
|
|
- CONT inserter/remover
|
|
|
|
- Scrambling/Descrambling of data
|
|
|
|
- CRC inserter/checker
|
|
|
|
- HOLD insertion/detection
|
|
|
|
- Errors detection and reporting
|
2015-01-16 17:52:41 -05:00
|
|
|
Transport/Command:
|
2015-01-17 08:17:31 -05:00
|
|
|
- Easy to use user interfaces (Can be used with or without CPU)
|
|
|
|
- 48 bits sector addressing
|
|
|
|
- 3 supported commands: READ_DMA(_EXT), WRITE_DMA(_EXT), IDENTIFY_DEVICE
|
|
|
|
- Errors detection and reporting
|
2015-01-16 17:52:41 -05:00
|
|
|
|
|
|
|
Frontend:
|
|
|
|
- Configurable crossbar (simply use core.crossbar.get_port() to add a new port!)
|
2015-01-17 08:17:31 -05:00
|
|
|
- Ports arbitration transparent to the user
|
|
|
|
- Synthetizable BIST
|
|
|
|
|
|
|
|
[> Possibles improvements
|
2015-01-22 11:44:04 -05:00
|
|
|
-------------------------
|
2015-01-19 17:28:14 -05:00
|
|
|
- add standardized interfaces (AXI, Avalon-ST)
|
2015-01-17 08:17:31 -05:00
|
|
|
- add NCQ support
|
|
|
|
- add AES hardware encryption
|
|
|
|
- add on-the-flow compression/decompression
|
|
|
|
- add support for Altera PHYs.
|
|
|
|
- add support for Lattice PHYs.
|
|
|
|
- add support for Xilinx 7-Series GTP/GTH (currently only 7-Series GTX are
|
|
|
|
supported)
|
|
|
|
- add Zynq Linux drivers.
|
2015-02-12 16:03:24 -05:00
|
|
|
- ... See below Support and consulting :)
|
2015-01-17 08:17:31 -05:00
|
|
|
|
|
|
|
If you want to support these features, please contact us at florent [AT]
|
|
|
|
enjoy-digital.fr. You can also contact our partner on the public mailing list
|
|
|
|
devel [AT] lists.m-labs.hk.
|
2014-09-22 06:33:23 -04:00
|
|
|
|
2015-02-12 16:03:24 -05:00
|
|
|
|
2014-09-22 06:33:23 -04:00
|
|
|
[> Getting started
|
|
|
|
------------------
|
2015-02-12 16:03:24 -05:00
|
|
|
1. Install Python3 and your vendor's software
|
2015-01-16 14:25:11 -05:00
|
|
|
|
|
|
|
2. Obtain Migen and install it:
|
2015-01-22 11:44:04 -05:00
|
|
|
git clone https://github.com/m-labs/migen
|
2015-01-16 14:25:11 -05:00
|
|
|
cd migen
|
|
|
|
python3 setup.py install
|
|
|
|
cd ..
|
2014-09-22 06:33:23 -04:00
|
|
|
|
2015-02-12 16:03:24 -05:00
|
|
|
3. Obtain MiSoC and install it:
|
|
|
|
git clone https://github.com/m-labs/misoc --recursive
|
|
|
|
cd misoc
|
|
|
|
python3 setup.py install
|
|
|
|
cd ..
|
|
|
|
|
|
|
|
Note: in case you have issues with Migen/MiSoC, please retry
|
|
|
|
with our forks at:
|
|
|
|
https://github.com/enjoy-digital/misoc
|
|
|
|
https://github.com/enjoy-digital/migen
|
|
|
|
until new features are merged.
|
|
|
|
|
|
|
|
4. Obtain LiteScope and install it:
|
2015-01-28 09:19:43 -05:00
|
|
|
git clone https://github.com/enjoy-digital/litescope
|
2015-01-22 19:34:59 -05:00
|
|
|
cd litescope
|
2015-01-16 14:25:11 -05:00
|
|
|
python3 setup.py install
|
|
|
|
cd ..
|
|
|
|
|
2015-01-22 11:44:04 -05:00
|
|
|
5. Obtain LiteSATA
|
|
|
|
git clone https://github.com/enjoy-digital/litesata
|
2015-01-16 14:25:11 -05:00
|
|
|
|
2015-01-22 11:44:04 -05:00
|
|
|
6. Build and load BIST design (only for KC705 for now):
|
2015-01-23 06:36:45 -05:00
|
|
|
python3 make.py all (-s BISTSoCDevel to add LiteScopeLA)
|
2014-09-22 06:33:23 -04:00
|
|
|
|
2015-01-22 11:44:04 -05:00
|
|
|
7. Test design (only for KC705 for now):
|
|
|
|
go to ./test directory and run:
|
2015-01-28 09:52:55 -05:00
|
|
|
change com port in config.py to your com port
|
2015-01-16 14:25:11 -05:00
|
|
|
python3 bist.py
|
|
|
|
|
2015-01-23 06:36:45 -05:00
|
|
|
8. Visualize Link Layer transactions (if BISTSoCDevel):
|
|
|
|
go to ./test directory and run:
|
|
|
|
python3 test_la.py [your_cond]
|
|
|
|
your_cond can be wr_cmd, id_cmd, rd_resp, ...
|
|
|
|
(open test_la.py to see all conditions or add yours)
|
|
|
|
|
|
|
|
9. If you only want to build the core and use it with your
|
2015-01-22 11:44:04 -05:00
|
|
|
regular design flow:
|
|
|
|
python3 make.py -t core build-core
|
|
|
|
|
2015-01-17 08:17:31 -05:00
|
|
|
[> Simulations:
|
2015-01-22 03:55:06 -05:00
|
|
|
Simulations are available in ./lib/sata/test:
|
2015-01-16 14:25:11 -05:00
|
|
|
- crc_tb
|
|
|
|
- scrambler_tb
|
|
|
|
- phy_datapath_tb
|
|
|
|
- link_tb
|
|
|
|
- command_tb
|
|
|
|
- bist_tb
|
2015-01-17 08:17:31 -05:00
|
|
|
hdd.py is a simplified HDD model implementing all SATA layers.
|
2015-01-16 17:52:41 -05:00
|
|
|
To run a simulation, move to ./lib/sata/test and run:
|
2015-01-16 14:25:11 -05:00
|
|
|
make simulation_name
|
2014-09-22 06:33:23 -04:00
|
|
|
|
2015-01-16 14:25:11 -05:00
|
|
|
[> Tests :
|
2015-01-22 03:55:06 -05:00
|
|
|
A synthetizable BIST is provided and can be controlled with ./test/bist.py
|
2015-01-28 13:53:58 -05:00
|
|
|
By using LiteScope and the provided ./test/test_link.py example you are able to
|
2015-01-16 17:52:41 -05:00
|
|
|
visualize the internal logic of the design and even inject the captured data in
|
|
|
|
the HDD model!
|
2014-09-22 06:33:23 -04:00
|
|
|
|
2015-01-17 08:17:31 -05:00
|
|
|
[> License
|
2015-01-22 11:44:04 -05:00
|
|
|
-----------
|
2015-01-17 08:17:31 -05:00
|
|
|
LiteSATA is released under the very permissive two-clause BSD license. Under the
|
2015-01-20 04:47:14 -05:00
|
|
|
terms of this license, you are authorized to use LiteSATA for closed-source
|
2015-01-17 08:17:31 -05:00
|
|
|
proprietary designs.
|
|
|
|
Even though we do not require you to do so, those things are awesome, so please
|
|
|
|
do them if possible:
|
|
|
|
- tell us that you are using LiteSATA
|
2015-01-20 04:47:14 -05:00
|
|
|
- cite LiteSATA in publications related to research it has helped
|
2015-01-17 08:17:31 -05:00
|
|
|
- send us feedback and suggestions for improvements
|
|
|
|
- send us bug reports when something goes wrong
|
|
|
|
- send us the modifications and improvements you have done to LiteSATA.
|
|
|
|
|
2015-02-12 16:03:24 -05:00
|
|
|
[> Support and consulting
|
2015-01-22 11:44:04 -05:00
|
|
|
--------------------------
|
|
|
|
We love open-source hardware and like sharing our designs with others.
|
|
|
|
|
|
|
|
LiteSATA is developed and maintained by EnjoyDigital.
|
2015-01-17 08:17:31 -05:00
|
|
|
|
2015-01-22 11:44:04 -05:00
|
|
|
If you would like to know more about LiteSATA or if you are already a happy user
|
|
|
|
and would like to extend it for your needs, EnjoyDigital can provide standard
|
|
|
|
commercial support as well as consulting services.
|
2015-01-17 08:17:31 -05:00
|
|
|
|
2015-01-22 11:44:04 -05:00
|
|
|
So feel free to contact us, we'd love to work with you! (and eventually shorten
|
|
|
|
the list of the possible improvements :)
|
2015-01-17 08:17:31 -05:00
|
|
|
|
2014-09-22 06:33:23 -04:00
|
|
|
[> Contact
|
2015-01-17 08:17:31 -05:00
|
|
|
E-mail: florent [AT] enjoy-digital.fr
|