All Projects → andrewsil1 → Nexyspsram

andrewsil1 / Nexyspsram

Licence: other
AXI PSRAM Controller IP for use with Digilent Nexys 4

Labels

Projects that are alternatives of or similar to Nexyspsram

Awesome Hdl
Hardware Description Languages
Stars: ✭ 385 (+5400%)
Mutual labels:  vhdl
Ustc Tmips
Stars: ✭ 6 (-14.29%)
Mutual labels:  vhdl
Hashvoodoo Fpga Bitcoin Miner
HashVoodoo FPGA Bitcoin Miner
Stars: ✭ 16 (+128.57%)
Mutual labels:  vhdl
Parallella Hw
Parallella board design files
Stars: ✭ 389 (+5457.14%)
Mutual labels:  vhdl
Cocotb
cocotb, a coroutine based cosimulation library for writing VHDL and Verilog testbenches in Python
Stars: ✭ 740 (+10471.43%)
Mutual labels:  vhdl
Ece368 Lab
ECE368 | Lab
Stars: ✭ 6 (-14.29%)
Mutual labels:  vhdl
Microwatt
A tiny Open POWER ISA softcore written in VHDL 2008
Stars: ✭ 383 (+5371.43%)
Mutual labels:  vhdl
Openrio
Contains VHDL IP-blocks to create stand-alone RapidIO-endpoints, RapidIO-switches and RapidIO-switches with local endpoints.
Stars: ✭ 23 (+228.57%)
Mutual labels:  vhdl
Fpga webserver
A work-in-progress for what is to be a software-free web server for static content.
Stars: ✭ 762 (+10785.71%)
Mutual labels:  vhdl
Zedboard audio
A Audio Interface for the Zedboard
Stars: ✭ 16 (+128.57%)
Mutual labels:  vhdl
Vunit
VUnit is a unit testing framework for VHDL/SystemVerilog
Stars: ✭ 438 (+6157.14%)
Mutual labels:  vhdl
Spinalhdl
Scala based HDL
Stars: ✭ 696 (+9842.86%)
Mutual labels:  vhdl
I2s Interface Vhdl
A simplified i2s interface taken from OpenCores' I2S Interface. Aimed for Altera Avalon Streaming interface.
Stars: ✭ 6 (-14.29%)
Mutual labels:  vhdl
Gcvideo
GameCube Digital AV converter
Stars: ✭ 385 (+5400%)
Mutual labels:  vhdl
Audioxtreamer
ASIO driver, Usb Driver, FX2LP Firmware, VHDL Fpga, Schematics & PCB Layout for the AudioXtreamer, a USB 2.0 32ch Audio/Midi interface for retrofitting into digital mixers/interfaces.
Stars: ✭ 22 (+214.29%)
Mutual labels:  vhdl
Parallella Examples
Community created parallella projects
Stars: ✭ 384 (+5385.71%)
Mutual labels:  vhdl
Sha 256 Hdl
An implementation of original SHA-256 hash function in (RTL) VHDL
Stars: ✭ 6 (-14.29%)
Mutual labels:  vhdl
Aes
AES-128 hardware implementation
Stars: ✭ 25 (+257.14%)
Mutual labels:  vhdl
Floating point library Jhu
VHDL for basic floating-point operations.
Stars: ✭ 22 (+214.29%)
Mutual labels:  vhdl
Nexys4ddr
Stars: ✭ 16 (+128.57%)
Mutual labels:  vhdl

This project contains the source code for an AXI4-compatible PSRAM controller, as implemented on the Digilent Nexys4 development board.

I decided to create this project after doing some experimentation with Vivado's built-in "AXI EMC" IP. The EMC supports the PSRAM in asynchronous mode, but it's somewhat difficult to use it to program the PSRAM into page mode, and once it is, it's not particularly well optimized for that configuration, and some redundant reads are seen which waste cycles. So I decided to create my own from scratch, which is represented here, and was an excellent learning experience to become familiar with the semantics of the AXI4 bus.

The core could probably be optimized to squeeze out a few more cycles of overhead here and there between consecutive operations, but it's been validated to run in a relatively reliable and stable fashion as it stands here. I hope you find good use for it and makes your Nexys4 projects simpler. -- Andy Silverman, 7/31/2014

Revision List: 7/17/2019: Was having trouble with System Cache again in Vivado 2019.1 (probably earlier as well), so recreated the AXI interface module using the latest AXI memory master sample IP in Vivado and the cache errors appear to have stopped. I didn't change any core logic, but the latest VHDL uses the numeric std library instead of a different flavor, so perhaps there was some subtle difference. 9/2/2014: Fixed a bug that could cause memory data corruption if a read and a write transaction were initiated in exactly the same bus cycle. This was discovered when using the core in conjunction with the Xilinx System Cache IP rather than connecting it directly to the Microblaze DC and/or IC AXI buses. 8/3/2014: Further validated with Xilinx AXI Protocol Checker and fixed an issue with RLAST generation.

Features:

  • Created from the Xilinx Vivado 2014.2 AXI IP creation sample, and derived from their original block RAM implementation.
  • The block RAM instantiation is replaced with original logic to call a new module of my own design to control the 16MB Micron PSRAM.
  • The PSRAM runs in asynchronous page-read mode. Use of page-read allows consecutive reads to take place in significantly less time on nearby addresses (i.e. 20ns per 16 bits for addresses in the same 16-word "page", rather than 70ns.) Unfortunately, writes do not allow the same reduction in access time.
  • The IP is optimized to recognize when memory accesses cross a page boundary and require a new 70ns access and CEN line toggle to continue valid operation. Similarly, the IP also recognizes when the CEN line has been low for a period of time approaching the Tcem limit of 4us documented in the datasheet and will automatically force CEN to cycle to permit memory refresh to operate normally without data corruption. Thus, operation with all the benefits of page-read mode is completely automatic without any intervention from the system designer.
  • Compatible with AXI4 implementations where the AXI clock is 100Mhz and 32-bits wide. Changing to a different AXI clock speed would require revision of the PSRAM logic to comply with the asynchronous timing requirements.
  • Unaligned and/or narrow reads (e.g. 16 bit or 8 bit memory access) are somewhat optimized to avoid unnecessary memory operations accessing the not-requested half of the 32 bit DWORD when possible.
  • Supports typical FIXED, INCR, and WRAP bus transactions. Can be connected to Microblaze DC or IC cache interfaces for further performance enhancement.
  • Validated to successfully pass all automatically generated Xilinx SDK memory tests with Microblaze caching of this memory region enabled and disabled. Some revisions to the sample's internal control logic were necessary because transactions to PSRAM do not complete in a single cycle as they do with block RAM.

Restrictions:

  • Compatible with AXI4 implementations where the AXI clock is 100Mhz and 32-bits wide. Changing to a different AXI clock speed would require revision of the PSRAM logic to comply with the asynchronous timing requirements. It also probably wouldn't be a huge amount of work to support a 64-bit wide AXI data bus, but it's not currently set up for that in all the places where it would need to be.
  • Licensed under the terms of the included MIT License. I hope you find it useful.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].