Vieux motard que jamais

Posted on sam. 14 mai 2011 in VHDL

Cela fait maintenant quelques années que j'ai fait l'acquisition d'un Starter Kit Spartan 3a.

sp3ask

Je comptais l'utiliser pour faire joujou avec des cores de processeurs en provenance de OpenCores.

Le problème c'est que les cores CPU nécessitent une quantité de RAM trop grande pour être synthétisée avec de la ram interne ou des LUT. La carte possède une RAM DDR2 mais le design d'exemple de Xilinx n'est pas un chef d'oeuvre de clarté.

Après des années de flemme, je me suis enfin pris par la main et voici donc sp3addr2pkg, une interface µP pour la DDR2 du Starter Kit Spartan 3a. Le projet est basé sur le MIG reference design de Xilinx.

L'interface se compose uniquement des signaux suivants :

  • Address Bus (24 downto 0)
  • Wr
  • Rd
  • BusWait
  • DataIn (15 downto 0)
  • DataOut (15 downto 0)

Cette interface génère les commandes MIG en fonction des demandes de lecture de d'écriture. Elle possède un cache de lecture et un cache d'écriture (4*16 bits chacun).

Je suis parfaitement conscient qu'une telle interface est contre performante mais elle permet de tester des cores simplement.

ATTENTION : ce qui suit est codé comme un porc. Download :

Le fichier d'interface : sp3addr2pkg_top.vhd

Un exemple : Un design d'exemple

Les performances sont déplorables mais ce n'était pas le but recherché. 62ns pour un accès from cache, 424ns pour un cache miss. Les captures ci-dessous présentent Wr/Rd en Voie1 et BusWait en voie 2

Cache Hit 1 Cache Hit 2

Cache Miss 1 Cache Miss 2

Voici un zoom sur le délai entre le début de la commande et la montée du signal bus wait (dans le cas d'un cache miss): delay