idea for a universal disk interface
Guy Sotomayor
ggs at shiresoft.com
Tue Apr 19 17:58:18 CDT 2022
It's not really fast enough and you'll get into all sorts of
complications once you start to think about trying to keep up with
simulation rotations. For example, if someone starts a read at half way
through a rotation (e.g. after the index pulse) now you have to have
logic/code that can start/stop the transfer in random places. The way
that I have it designed, it's all sequential so no random start /
lengths and it's all done during a seek which the data isn't being
clocked out.
The Zynq-7020 (which is my low end design) has 4.9Mb of block RAM (in
140 36Kb blocks). In the cylinders I actually use 9-bits per byte as I
need an escape in order to encode some other data. ;-) With that it can
hold the 512KB needed with some to spare. My high end design will use
the Zynq-Ultrascale+ (ZU3CG) has 7.6Mb of block RAM (in 216 36Kb
blocks). If I go to the next higher version (ZU4CG)the block RAM goes
down to 4.5Kb (in 128 36Kb blocks) but gains 13.5Mb in "UltraRAM" which
should allow for any reasonable cylinder buffering.
Of course, I'm just describing my design and design requirements. First
and foremost I wanted a simple HW & SW design that could provide
accurate drive timings (e.g. I could faithfully reproduce the timings of
any particular drive) so as to maximize the compatibility with any
controller (and I have some weird ones).
I've been pouring over ANSI specs, controller specs and drive specs for
SMD/ESDI for a few years now and have thought about a number of
different ways to do this and what I've described is what I've come up with.
You may have different goals which may drive you to make different
choices/decisions.
TTFN - Guy
On 4/19/22 11:49, shadoooo via cctalk wrote:
> Guy,
> I understand that cylinder command has no particular timing requirements, while head command must be effective within microseconds. My doubt is, RAM access on high performance port could be fast enough to satisfy also the latter.
> In case it couldn't or was not assured, I think the best strategy could be to preload only a small block of data for each head, for prompt start on head command; enough to manage safely RAM access latency.
> Each block also would work as buffer for data of subsequent RAM accesses, until whole cylinder had been processed.
> This strategy would remove the strict requirement of blockram capacity for the Zynq, and given that bigger models cost a lot, it would be a significant spare for anybody.
> Furthermore, support for any hypotetical disk with bigger cylinder (not SMD) or for tape with very large blocks or "infinite" streams could not be feasible with the whole cylinder design. I would prefer to avoid any such limitation, in way to possibly reuse the same data transfer modules for any media.
>
> Andrea
--
TTFN - Guy
More information about the cctalk
mailing list