wiki:FAQ

Frequently Asked Question

Pourquoi le NetFPGA ne fonctionne t'il pas avec ma carte réseau ?

Le NetFPGA ne supporte que le Gigabit Ethernet. Il n'est donc pas capable d'établir un lien avec une carte réseau ne supportant que du 10/100Base-TX Ethernet. Et rare sont les ordinateurs portables possédant des cartes Gigabit Ethernet. Voir le sujet sur le  forum NetFPGA.

Comment synthétiser un projet ?

La structure d'un projet est entièrement contenu dans le dossier du projet (NF2/projects/XXX).

Certains fichiers d'un projet sont copiés depuis le dossier NF2/lib.

Pour synthétiser un projet il faut :

  • d'abord importer les variables d'environnement de Xilinx:
source /usr/local/xilinx9.2i/settings.sh

(en considérant que Xilinx a été installé dans /usr/local/xilinx9.2i)

  • aller dans le dossier synth du projet et taper
make

La synthèse prend environ 40 min.

Pour synthétiser le 'reference router' le paquet NetFPGA Beta Plus est nécessaire. Ce paquet contient le code Verilog du projet. La demande du paquet auprès de Stanford se fait sur cette page:  Download the extended NetFPGA Package (BetaPlus, optional)

Page expliquant comment créer un projet à partir du 'reference router':  Modifying the Reference Router

D'où vient l'erreur "!FATAL_ERROR:Pack:pktbaguide.c:450:1.79.14.2 - Unable to find load frag ..." ?

C'est un bug de SmartGuide? dans la version 9.2i de Xilinx. Voir cette page pour plus d'info:  http://www.xilinx.com/support/answers/30031.htm

Solution:

  • désactiver SmartGuide? :ajouter la ligne ci-dessous au début du Makefile du projet
USE_SMARTGUIDE := 0
  • OU: Nettoyer le projet avec la commande ci dessous :
make clean

D'où vient l'erreur "Error: Virtex design compiled against a different CPCI version" quand j'utilise nf2_download

Il faut reprogrammer le CPCI après (ou pendant) chaque démarrage de l'ordinateur avec la commande :

cpci_reprogram.pl --all

Cf  http://netfpga.org/foswiki/bin/view/NetFPGA/OneGig/Guide#Reprogram_the_CPCI

D'où vient l'erreur "License not found: tri_mode_eth_mac_v3" pendant la synthèse ?

L'IP (Intellectual Property) tri_mode_eth_mac de Xilinx est nécessaire pour synthétiser un projet. Par défaut elle ne permet que la simulation mais pas la synthèse. Pour obtenir une licence d'évaluation de 120 jours qui inclut la synthèse, il faut créer un compte (gratuit) sur le site de Xilinx. Il faut alors générer une licence pour le tri_mode_eth_mac en indiquant l'adresse mac de la machine. Un fichier .lic sera envoyé par mail qu'il faudra mettre dans le dossier /usr/local/xilinx9.2i/coregen/core_licenses (renommer le fichier en tri_mode_eth_mac_v3_flexlm.lic est peut-être nécessaire).

Comment insérer des registres dans un module accessibles depuis l'ordinateur hôte ?

Dans le NetFPGA, chaque module peut implémenter des registres (comme dans tout module VHDL). Il est cependant possible de rendre ces registres accessibles (en lecture ou en écriture) depuis l'ordinateur hôte du NetFPGA.

Pour cela, le plus simple est d'inclure dans votre module le module generic_regs disponible dans les librairies du NetFPGA. Ce module gère plusieurs types de registres :

  • registres inscriptibles par l'ordinateur et lisibles par le module
  • registres inscriptibles par le module et lisibles par l'ordinateur
  • compteurs incrémentables par le module et lisibles par l'ordinateur.

Les entrées reg_req_in, reg_ack_in, reg_rd_wr_L_in, reg_addr_in, reg_data_in et reg_src_in de generic_regs peuvent être directement branchées aux entrées de votre module. Les sorties reg_req_out, reg_ack_out, reg_rd_wr_L_out, reg_addr_out, reg_data_out et reg_src_out peuvent être connectées directement aux sorties de votre module. Il est aussi possible de chaîner les generic_regs. Il reste ensuite les entrées/sorties counter_updates, counter_decrement, software_regs et hardware_regs qui permettent de lire/écrire dans les registres.

Le module generic_regs a plusieurs paramètres importants à définir :

  • UDP_REG_SRC_WIDTH à UDP_REG_SRC_WIDTH (normalement un paramètre de votre module)
  • TAG tag qui permet d'identifier votre module, à régler comme `VOTRE_PREFIXE_BLOCK_ADDR,
  • REG_ADDR_WIDTH taille des adresses du registre, à régler comme `VOTRE_PREFIXE_REG_ADDR_WIDTH,
  • NUM_COUNTERS nombre de compteurs
  • NUM_SOFTWARE_REGS nombre de registres écrits par l'ordinateur
  • NUM_HARDWARE_REGS nombre de registres écrits par le module
  • COUNTER_INPUT_WIDTH taille des valeurs d'incrément des compteurs.

Les valeurs VOTRE_PREFIXE_* sont générées automatiquement et placés dans include/registers.v, elles sont donc bien définies dans votre module.

Une chose très importante à faire est de définir votre module en xml dans le dossier include/ de votre projet. Vous devez modifier le fichier project.xml et créer un nouveau fichier pour votre module. C'est dans ce fichier que vous allez spécifier les registres dont vous avez besoin, et c'est ce qui va permettre de générer automatiquement les constantes précédentes. Pour créer ces fichiers XML, lisez  la documentation NetFPGA sur ce sujet.

Enfin, lors de la compilation, des fichiers de constantes sont générés pour C et Perl dans le dossier lib/. Vous pouvez utiliser ces constantes pour lire/écrire dans les registres (vous trouverez des exemples dans le fichier sw/counterdump.c dans le projet du routeur de référence).

Quelle RAM puis-je utiliser sur le NetFPGA ?

La RAM externe :

  • 4,5 Mo de SRAM sur la carte : cette mémoire est déjà utilisée dans le design de référence par les output_queues ;
  • 256 Mo de DDR2 SDRAM sur la carte : cette mémoire n'est pas utilisée par le design de référence, mais son contrôle, bien que prévu dans le module nf2_top, dans la gestion des registres (possibilité de lire la DDR2 SDRAM depuis l'ordi) et dans le fichier UCF (les lignes sont commentées) n'est pas réellement implémenté : à tester.

La RAM interne :

Le FPGA Virtex2Pro50 permet de configurer de la RAM interne en créant un tableau Verilog et en l'utilisant comme une RAM : il sera implémenté comme une RAM lors de la synthèse :

  • la SelectRAM+ distribuée : 755 712 bits maximum, peut être utilisée pour faire des registres à décalage si non utilisée ;
  • la SelectRAM+ en blocs : 4 276 224 bits maximum.

Pour plus de détails sur les possibilités de configurer la RAM sur le FPGA, consulter la fiche technique Download du XC2VP50.