Skip to the content
2 layers98 × 59.7 mmFmc esdi drive, the printed circuit board in 3D

ESDI Hard Drive Emulator

Size
98 × 59.7 mm
Copper layers
2
Thickness
1.6 mm
Parts
50
Nets
191
Pads
544
Tracks, vias
900, 81
Pours
5
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
15 Oct 2024
Updated
6 Nov 2026

Overview

Fmc esdi drive is an open-source printed circuit board by cwsimmons, from the cwsimmons/esdi_emulator repository on GitHub, published under the GPL-2.0 licence. It is a 2-layer board of 98 × 59.7 mm with 50 parts on 191 nets, routed with 900 tracks and 81 vias.

It is built around the ASP-134604-01. Its parts include 17 capacitors, 14 ICs, 8 resistors, 4 connectors and 1 inductor.

Main components

1

README

Readme.md

ESDI Disk Emulator

This is a work in progress emulator of Enhanced Small Disk Interface (ESDI) hard drives. The drive image is stored on an SD card. The current implementation is based on a Zynq Ultrascale FPGA, but ought to be easily adapted to Zynq 7000.

Technical Overview

I have attempted to keep most logic in the processor's firmware within reason. The FPGA fabric is responsible for the following:

  • Deserializing commands received over the ESDI serial command interface and serializing responses.
  • Keeping track of the rotation of the disk, generating index and sector pulses when appropriate.
  • Serializing read data and sending it to the controller.
  • Deserializing write data from the controller and muxing it with loopbacked read data in accordance with the write gate signal.
  • Using DMA to read and write sectors to DDR memory.

The processor is responsible for the following:

  • Reading the drive configuration from the emulation image file and setting up the hardware's registers accordingly.
  • Managing DMA descriptors.
    • For the read datapath this means determining the next sector to be read. This is done 15 microseconds before the next sector is set to begin so that the drive appears responsive to head changes.
    • For the write datapath this means waiting for a sector to be dirty and then providing a descriptor with the appropriate address.
  • Keeping track of whether the drive is selected.
  • Handling commands and responding to queries received on the serial command interface.
  • Committing dirty sectors back to the SD card.
  • Loading cylinders from the SD card into DDR memory when the controller seeks to a cylinder not already loaded.
  • Slowing down the speed of seeks if the controller is writing faster than we can save to the SD card.

Project Generation

  1. Open Vivado, in the TCL console, change to the fpga directory of this repo, and run source esdi_emulator.tcl
  2. Generate bitstream
  3. Export hardware as fpga/esdi_emulator/top.xsa. Include the bitstream if you want to boot the Zynq part from SD, i.e. generate a BOOT.BIN file
  4. Open the Software Command Line Tool (xsct% prompt)
  5. Change to firmware directory, and run source platform.tcl
  6. Open (Classic) Vitis IDE with workspace set to firmware
  7. Choose File > Import..., choose to import from a git repository, choose to import from existing local repo, choose the repo name from the list, choose Import existing Eclipse projects, select the firmware directory from the tree, ensure that esdi_emulator_app, esdi_emulator_app_system, and esdi_emulator, Finish.
  8. Build esdi_emulator_app.
  9. To debug over JTAG, select the esdi_emulator_app project and then create a new debug configuration. Under "Target Setup" select the bitstream file, vivado saves it as fpga/esdi_emulator/esdi_emulator.runs/impl_1/top.bit. Then press debug and Vitis will program the FPGA and download the FSBL and the application ELFs.
  10. To boot from the SD card, build the esdi_emulator_app_system project and the copy the file at firmware/esdi_emulator_app_system/Debug/sd_card/BOOT.BIN to a SD card formatted as FAT32.

License

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.

Parts

50
QtyValueFootprintReferences
13CCapacitor_SMD:C_0402_1005MetricC5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15, C16, C17
6~Package_SO:TSSOP-24_4.4x7.8mm_P0.65mmU2, U3, U4, U5, U11, U12
4105Resistor_SMD:R_0805_2012MetricR3, R4, R7, R8
4~Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU8, U9, U13, U14
374LS06Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU6, U7, U10
2150Resistor_SMD:R_0805_2012MetricR5, R6
21uCapacitor_SMD:C_1206_3216MetricC1, C3
2MountingHole_PadMountingHole:MountingHole_2.7mm_M2.5_DIN965_PadH1, H2
2R_Network08Resistor_THT:R_Array_SIP9RN1, RN2
110uCapacitor_SMD:C_1206_3216MetricC4
13300pCapacitor_SMD:C_1206_3216MetricC2
13p32MResistor_SMD:R_0805_2012MetricR1
147ucustom:Inductor_Eaton_SD53L1
15VConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP2
1866kResistor_SMD:R_0805_2012MetricR2
1ASP-134604-01custom:CONN_ASP-134604-01_SAIJ1
1Control Cablecustom:ECON34J2
1Data Port Acustom:econ20J3
1Data Port BConnector_PinHeader_2.54mm:PinHeader_2x10_P2.54mm_VerticalJ4
1EnableConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP1
1MAX17501BxTBPackage_DFN_QFN:TDFN-10-1EP_2x3mm_P0.5mm_EP0.9x2mmU1

Similar boards

  • 6 layers107 × 78 mmZipper, the printed circuit board in 3D

    Zipper

    myriadrf/reference-development-kit

    The Myriad-RF Reference Hardware design files and firmware

    945 parts49
  • 8 layers110 × 181.8 mmZest, the printed circuit board in 3D

    Zest

    BerkeleyLab/Zest

    Zest is a FMC mezzanine board with 8 ADC channels and 2 DACs

    441 parts12
  • 2 layers69 × 76.5 mmEsdi fmc, the printed circuit board in 3D

    Esdi fmc

    cwsimmons/esdi_interface

    ESDI Interface

    25 parts8GPL-2.0
  • 6 layers89.4 × 69 mmPi hat, the printed circuit board in 3D

    Pi hat

    ApotheoTech/APT-V01-FMC

    GPIO FMC card, Schematics and PCB

    132 parts4
  • 4 layers76.5 × 69 mmFMC LPC, the printed circuit board in 3D

    FMC LPC

    M0WUT/kicad_libraries

    Backup of my personal Kicad libraries

    42 parts1
  • 2 layers79.8 × 28.9 mmPcb FPGA FMC, the printed circuit board in 3D

    Pcb FPGA FMC

    catherineb27/pcb_FPGA_FMC

    6 parts
  • 4 layers89.5 × 70 mmFmc sfp, the printed circuit board in 3D

    Fmc sfp

    MicroRidge-Technology/SFP-FMC

    SFP lvds FMC card

    60 parts

Questions

How big is the Fmc esdi drive PCB?

It measures 98 × 59.7 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Fmc esdi drive use?

50 parts, built around the ASP-134604-01. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Fmc esdi drive KiCad files?

From the cwsimmons/esdi_emulator repository on GitHub, at the commit this page was made from: the board is boards/fmc_esdi_drive/fmc_esdi_drive.kicad_pcb and its schematic boards/fmc_esdi_drive/clock_and_data.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Fmc esdi drive design in my own project?

Its repository publishes it under the GPL-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).