What is a NAND flash controller?
Basically, when you have storage media like USB sticks or SSDs, they consist of interfaces like USB, NAND flash controllers and an actual flash, which stores the actual data. So, the NAND flash controller is responsible for the interface between your computer and actual flash storage chips. NAND flash controllers can have different interfaces, so they can
interface with 1/8/16 flash chips.
Even in SD cards, you have small controller inside it, and it’s interconnected with the flash inside SD cards
So, flash controllers are needed in all kinds of storage devices
Now what does the flash controller look like? What are they doing?
For example, typical flash controller consists of CPU, it has some RAM/ROM, it has a DMA engine which is responsible for transferring data, then there is a NAND flash controller which optionally has ECC for error correction of the flash, its connected to actual flash chip, usually outside of the controller
The flash controller uses the ONFI flash protocol which is an effort for standardizing the communication protocol between NAND flash controller and actual flash
Let’s take a deeper look into the flash controller – it reads and writes content from small RAM, it has control registers, it has ECC for error correction and NAND flash interface then talks to NAND flash memories which are usually separate
IP requirements:
· ONFI compliant minimum 3.1
· An ECC core is optional, we could do that in software
· Minimum 1 flash channel, optionally up to 16 channels, preferably configurable
· Language: Verilog 2005 or TL-Verilog
· Target Platforms
o FPGA ICE140 – IceStick/IcoBoard
o ASIC – Skywater 130nm PDKs