The following is an email I sent to the poster of this question to address the problem -- posting it here for the benefit of others.
---
Hello,
Thanks for writing. The reason for the low data
transfer rates is not nios clock speed (unless you
were running very slowly), but because the controller
is very simple, and is designed to work with all
compact flash cards (even the slowest cards). In "True
IDE" mode, which our controller uses, compact flash
cards operate in several "PIO Modes". "PIO Mode 0" is
the slowest, and the read/write/wait state timing
parameters for our controller are adjusted to work
with mode 0 (you can see these in the class.ptf file
for the compact flash component).
The PIO mode that a particular CF card supports can be
read at runtime in certain registers on the card
itself. A more advanced controller might read the
status of the CF card when a card is inserted, and
then adjust its read/write timing accordingly. Our
controller is designed for simplicity, and does not
support this feature.
You can read more about the different PIO modes and
associated speeds in the compact flash specification
(available at
www.compactflash.org) -- this
specification was used when we created the timing
parameters for our compact flash interface.
One suggestion would be that if you are SURE that a
certain PIO mode (or faster) will be used (for
example, you know that all CF cards that are used in
your design will be at least PIO mode 2), you could
look at the timing supplied in the compact flash
specification document, and then modify the timing
values in our controller's class.ptf file. After this,
remove the compact flash interface from your design in
SOPC Builder, add it back again, and re-generate the
system. The Avalon bus fabric generated will now
operate more quickly.
Note, however, that this could be dangerous if anyone
accidentally uses a slower (older) compact flash
card... the timing would not be met, and proper
operation would not be guaranteed.
Regards,
Jesse