All Projects → hdl-util → sdram-controller

hdl-util / sdram-controller

Licence: Unknown, MIT licenses found Licenses found Unknown LICENSE-APACHE MIT LICENSE-MIT
Generic FPGA SDRAM controller, originally made for AS4C4M16SA

Programming Languages

Verilog
626 projects
SystemVerilog
227 projects
tcl
693 projects
python
139335 projects - #7 most used programming language
Stata
111 projects

Projects that are alternatives of or similar to sdram-controller

virtio
Virtio implementation in SystemVerilog
Stars: ✭ 38 (-15.56%)
Mutual labels:  fpga, quartus
fpga-docker
Tools for running FPGA vendor toolchains with Docker
Stars: ✭ 54 (+20%)
Mutual labels:  fpga, quartus
Spi Fpga
SPI master and slave for FPGA written in VHDL
Stars: ✭ 50 (+11.11%)
Mutual labels:  fpga, controller
quartus-install
Install Intel FPGA 'Quartus Prime' software on remote servers
Stars: ✭ 33 (-26.67%)
Mutual labels:  fpga, quartus
dsp-theory
Theory of digital signal processing (DSP): signals, filtration (IIR, FIR, CIC, MAF), transforms (FFT, DFT, Hilbert, Z-transform) etc.
Stars: ✭ 643 (+1328.89%)
Mutual labels:  fpga
fmh gpib core
GPIB IEEE 488.1 core
Stars: ✭ 15 (-66.67%)
Mutual labels:  fpga
gateware
A collection of little open source FPGA hobby projects
Stars: ✭ 38 (-15.56%)
Mutual labels:  fpga
GlosSI
Tool for using Steam-Input controller rebinding at a system level alongside a global overlay
Stars: ✭ 1,004 (+2131.11%)
Mutual labels:  controller
stereo-vision-fpga
Real-time binocular stereo vision FPGA system with OV5640 cameras
Stars: ✭ 20 (-55.56%)
Mutual labels:  fpga
openarty
An Open Source configuration of the Arty platform
Stars: ✭ 93 (+106.67%)
Mutual labels:  fpga
QuickCore
Delphi Core Framework to fast build desktop/mobile/web apps.
Stars: ✭ 84 (+86.67%)
Mutual labels:  controller
TextFieldsTraversalController
A controller to manage the traversal of a collection of textfields.
Stars: ✭ 15 (-66.67%)
Mutual labels:  controller
lux
POSIX Shell script to easily control brightness on backlight-controllers.
Stars: ✭ 49 (+8.89%)
Mutual labels:  controller
rodinia
AGM bitstream utilities and decoded files from Supra
Stars: ✭ 21 (-53.33%)
Mutual labels:  fpga
FPGA NTP SERVER
A FPGA implementation of the NTP and NTS protocols
Stars: ✭ 27 (-40%)
Mutual labels:  fpga
Curator
A lightweight key-value file manager written in Swift.
Stars: ✭ 14 (-68.89%)
Mutual labels:  controller
FpOC
FPGA-based Field Oriented Control (FOC) for driving BLDC/PMSM motor.
Stars: ✭ 138 (+206.67%)
Mutual labels:  fpga
eddr3
mirror of https://git.elphel.com/Elphel/eddr3
Stars: ✭ 33 (-26.67%)
Mutual labels:  fpga
karuta
Karuta HLS Compiler: High level synthesis from prototype based object oriented script language to RTL (Verilog) aiming to be useful for FPGA development.
Stars: ✭ 89 (+97.78%)
Mutual labels:  fpga
modular routes
Dedicated controllers for each of your Rails route actions.
Stars: ✭ 45 (+0%)
Mutual labels:  controller

Generic Synchronous DRAM Controller

Build Status

Why?

The code in this repository lets you control an SDRAM chip without licensing IP from anyone.

Demo: test pattern on an LG 24UD58-B Monitor

Test pattern shown correctly

Usage

  1. Take files from src/ and add them to your own project. If you use hdlmake, you can add this repository itself as a remote module.
  2. Other helpful modules are also available in this GitHub organization.
  3. See top/mkrvidor4000_quartus/mkrvidor4000_top.sv for a usage example with clock domain crossing. A dual-clock FIFO is used to move data from the SDRAM to HDMI to display a test pattern. The test pattern is composed only of red and green. If you see blue, the pattern is incorrect.
  4. Read through the parameters in sdram_controller.sv and tailor any instantiations to your situation.
  5. Please create an issue if you run into a problem or have any questions. Make sure you have consulted the troubleshooting section first.

Terminology

  • CAS latency: the time (in clocks) after the column-address is set for the command to return data
  • Precharge: a required step in DRAM operation that sets the line voltage to Vcc / 2 (3.3V / 2) in anticipation of the next operation
  • Refresh: restores the charge in the cells by rewriting them, preventing the loss of data
  • Self Refresh: a low power mode where the SDRAM chip is able to refresh itself
  • DQM: turning on DQ-masking disables the output during a read and masks the input during a write. Used to avoid I/O contention.

Troubleshooting

  • Make sure you've set the IO standard for the pins connected to the DRAM chip as LVTTL 3.3V
  • SystemVerilog users: make sure you are using wire instead of logic for DQ and the clock. This caused synthesis issues for me where the pins were stuck at GND or VCC when they were clearly being driven.
  • If you see noise or data corruption, check your FPGA driver strength, check if the SDRAM chip has configurable driver strength, and try lowering the clock

To-do List

  • Self Refresh Mode
  • Optimizations
    • Conditionally avoid manual precharging
      • Manual precharging can assume spatial locality by only precharging if the next command is for a different column-address
    • Bank activation: if the row address and bank are the same, can you do a repeated read/write? (yes until tmax bank active)
    • Command pipelining: you could activate another bank while a write/read is being done (some overhaul of the state machine is needed here)

Reference Documents

These documents are not hosted here! They are available directly from Alliance Memory.

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].