Outils pour utilisateurs

Outils du site


docquartus

Description du problème

Gestion des problèmes de fichier HEX

L'utilisation des fichiers HEX avec quartus 9.0 pose de gros problèmes:

  1. quartus perd les réglages de “Read or Write hex file…” ce qui oblige à quitter quartus, effacer db et incremental db, ( bug connu: https://www.altera.com/support/support-resources/knowledge-base/solutions/rd11302011_28.html ) rouvrir quartus, refaire toute la synthèse…. et cela après avoir perdu du temps à diagnostiquer le problème.
  2. Altera déconseille l'usage des fichiers hex importés ( http://quartushelp.altera.com/14.1/mergedProjects/reference/glossary/def_hexfile.htm ): Important: Due to the complexity of the Hexadecimal (Intel-Format) File type, Altera recommends that you use the Quartus II Memory Editor to create .hex files.
  3. Les fichiers hex générés ne sont pas pleins (ils n'occupent pas tout l'espace mémoire), ce qui génère des warning.

Nous allons donc générer des fichiers MIF. Avantages:

  1. ils contiennent les infos de tailles de bus.
  2. on peut les remplir complètement et enlever les warnings.
  3. on peut les éditer à la main car c'est du texte, il n'y a pas besoin de l'outils graphique… on peut par la même occasion vérifier le contenu.

Gestion des problèmes de dossier db

Pour effacer les db, il est apparemment possible de le faire sans quitter quartus: p23 de https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/qts/archives/quartusii_handbook_archive_130.pdf

To clean the project database and remove all prior compilation results, follow these steps:
1.   Click  Project > Clean Project
2.   Select All revisions to remove the databases for all revisions of the current project, or specify a Revision name to remove only that revision’s database. 
3.   Click OK . A message indicates when the database is clean.

Pour désactiver la compilation incrementale: (p 73 de https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/manual/tclscriptrefmnl.pdf)

  1. -incremental_compilation=<off|full_incremental_compilation>

Outils de conversion de fichier de contenus mémoire: SRecord

Linux

Installation depuis les paquets:

sudo apt-get install srecord

ou depuis les sources

wget http://freefr.dl.sourceforge.net/project/srecord/srecord/1.64/srecord-1.64.tar.gz
tar xvf srecord-1.64.tar.gz 
cd srecord-1.64/
./configure 
make
./bin/srec_info  etc....

Windows

Documentation

Ouvrir le fichier reference.pdf : http://srecord.sourceforge.net/srecord-1.64.pdf

Applications aux fichiers mémoire de l'automate IUT GEII

Utilisation de l'outils

Mémoire programme

Le fichier programme est vu comme 256 cases de 8 bits (option -intel pour spécifier le format):

srec_info  ./contenu_mem_prog.hex -intel  
  Format: Intel Hexadecimal (MCS-86)
  Data:   0000 - 00FF

Conversion en MIF, pour spécifier taille des données sur 8 bits ( -fill permet de remplir les trous entre les adresses 0x00 et 0xFF avec la valeur 0):

srec_cat  contenu_mem_prog.hex -intel -fill 0x00 0x00 0xFF -Output  contenu_mem_prog.mif -Memory_Initialization_File 8

Fichier généré:

contenu_mem_prog.mif
-- http://srecord.sourceforge.net/
--
-- Generated automatically by srec_cat -o --mif
--
DEPTH = 256;
WIDTH = 8;
ADDRESS_RADIX = HEX;
DATA_RADIX = HEX;
CONTENT BEGIN
0000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17;
0018: 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F;
0030: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47;
0048: 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F;
0060: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77;
0078: 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F;
0090: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7;
00A8: A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF;
00C0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7;
00D8: D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF;
00F0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF;
END;

Mémoire microcode

Le fichier microcode est vu comme 512 cases de 8 bits: (option guess pour trouver le format intel tout seul si possible…)

srec_info contenu_mem_code.hex --guess
  Format: Intel Hexadecimal (MCS-86)
  Data:   0000 - 0009
     ...
          01A0 - 01FF

Conversion en MIF, pour spécifier taille des données sur 16 bits, en formatant sur 50 caractères par ligne, ce qui permet d'avoir 8 valeurs 16 bits par ligne (soit une instruction):

srec_cat  contenu_mem_code.hex -intel -fill 0x00 0x00 0x1FF -Output  contenu_mem_code.mif -Memory_Initialization_File 16 --line-length=50 

Ou en spécifiant le nombre d'octets codés par ligne (16 ici):

srec_cat  contenu_mem_code.hex -intel -fill 0x00 0x00 0x1FF -Output  contenu_mem_code.mif -Memory_Initialization_File 16 --obs=16

Fichier généré:

contenu_mem_code.mif
-- http://srecord.sourceforge.net/
--
-- Generated automatically by srec_cat -o --mif
--
DEPTH = 256;
WIDTH = 16;
ADDRESS_RADIX = HEX;
DATA_RADIX = HEX;
CONTENT BEGIN
0000: 0030 0031 0015 0B04 803F 0000 0000 0000;
0008: 0030 0031 0025 0B04 803F 0000 0000 0000;
0010: 0030 0031 0025 0B07 803F 0000 0000 0000;
0018: 0030 0031 0015 0E04 803F 0000 0000 0000;
0020: 0030 0031 0025 0E04 803F 0000 0000 0000;
0028: 0030 0031 0025 0E07 803F 0000 0000 0000;
0030: 0030 0031 0015 0604 803F 0000 0000 0000;
0038: 0030 0031 0025 0604 803F 0000 0000 0000;
0040: 0030 0031 0025 0607 803F 0000 0000 0000;
0048: 0030 0031 0004 803F 0000 0000 0000 0000;
0050: 0030 0031 0025 0507 803F 0000 0000 0000;
0058: 0030 0031 0C04 803F 0000 0000 0000 0000;
0060: 0030 0031 0C07 803F 0000 0000 0000 0000;
0068: 0030 0031 0C06 803F 0000 0000 0000 0000;
0070: 0030 0031 0304 803F 0000 0000 0000 0000;
0078: 0030 0031 0307 803F 0000 0000 0000 0000;
0080: 0030 0031 0306 803F 0000 0000 0000 0000;
0088: 0030 0031 0014 803F 0000 0000 0000 0000;
0090: 0030 0031 0014 0004 803F 0000 0000 0000;
0098: 0030 0031 0024 803F 0000 0000 0000 0000;
00A0: 0030 0031 0024 0004 803F 0000 0000 0000;
00A8: 0030 0031 0F07 803F 0000 0000 0000 0000;
00B0: 0030 0031 0F06 803F 0000 0000 0000 0000;
00B8: 0030 0031 0033 0031 0009 0002 803F 0000;
00C0: 0030 0031 0022 803F 0000 0000 0000 0000;
00C8: 0030 0031 0033 0002 803F 0000 0000 0000;
00D0: 0030 0031 6F8F 0033 0002 803F 0031 803F;
00D8: 0030 0031 5F8F 0031 803F 0033 0002 803F;
00E0: 0030 0031 609F 0033 0002 803F 0031 803F;
00E8: 0030 0031 509F 0031 803F 0033 0002 803F;
00F0: 0030 0031 60AF 0033 0002 803F 0031 803F;
00F8: 0030 0031 50AF 0031 803F 0033 0002 803F;
END;

Autres possibilités

pour régénerer le fichier db à partir du .hex

srec_cat  contenu_mem_code.hex -intel   -Output  contenu_mem_code.asm -ASM  

utiliser le filtre fill qui permet de remplir les trous et donc d'éviter des org dans le fichier généré…

srec_cat  contenu_mem_code.hex -intel -fill 0x00 0x00 0x1FF -Output  contenu_mem_code.asm -ASM 

Pour générer des fichier vhdl:

srec_cat  contenu_mem_code.hex -intel -fill 0x00 0x00 0x1FF  -o contenu_mem_code.vhd -VHdl 2
srec_cat  contenu_mem_prog.hex -intel    -o contenu_mem_code.vhd -VHdl 1

Pour découper en 2 fichiers codant chacun soit les octets pairs soit les impairs: (Splitting an Image: If you have a 16-bit data bus, but you are using two 8-bit EPROMs to hold your firmware, you can generate the even and odd images by using the −SPlit filter. Assuming your firmware is in the firmware.hex file, use the following: )

srec_cat contenu_mem_code.hex -intel -split 2 0 -o firmware.even.mif -MIF  
srec_cat contenu_mem_code.hex -intel -split 2 1 -o firmware.odd.mif -MIF  

−SPlit multiple [ offset [ width ] ] This filter may be used to split the input into a subset of the data, and compress the address range so as to leave no gaps. This useful for wide data buses and memory striping. The multiple is the bytes multiple to split over, the offset is the byte offset into this range (defaults to 0), the width is the number of bytes to extract (defaults to 1) within the multiple. In order to leave no gaps, the output addresses are (width / multiple) times the input addresses.

−Un_SPlit multiple [ offset [ width ] ] This filter may be used to reverse the effects of the split filter. The arguments are identical. Note that the address range is expanded (multiple / width) times, leaving holes between the stripes.

gère aussi le format -C‐Array [ identifier ][ -option… ] pour générer des tableaux de constantes

                −HEX_Dump

super exemples:

http://srecord.sourceforge.net/man/man1/srec_examples.html
https://www-alt.gsi.de/documents/DOC-2012-Mar-2-1.pdf

Ancien contenu de la page

fichier quartus.exe version ancienne pour support Flex10k et simulateur graphique

expliquer les comptes etudiants, NE PAS TRAVAILLER SUR LEUR HOME, sinon impossible de récuperer les fichiers pour le binome

récuperer projets (travail et platine) expliquer l'imbrication → copier sur leur dossier, zipper le dossier à chaque fin de seance pour créer des composants: dans le projet/dossier travail

 creer un fichier composant (nom du fichier=nom du composant)
 sauver dans le dossier travail (.tdf)
 regler top level entity
 compiler
(regler le dossier de librairie et ajouter les fichiers au projet)
 
 corriger erreur
 creer un fichier simulation (.vwf)
 generer les stimuli
 lancer la simu et valider/corriger/recompiler
 une fois validé, créer le composant: file ->create ahdl include file (.inc)

une fois le test en simu réalisé, on fait le test sur site (maquette ou platine)

  ouvrir le projet platine
  analyse du composant platine....tdf   expliquer les liens avec la maquette
  ajouter les fichiers/ librairie
  régler TOUJOURS en top level entity le composant platine (connexion aux broches du boitier) 
        on pourra faire des copies de sauvegarde des differents composants platines en changeant le nom, mais le nom du fichier platine en cours de developpent doit correspondre à celui du composant platine
  instancier le composant à tester dans le fichier platine et établir les connexions
  compiler /    corriger les erreurs
  telecharger sur la carte mémoire
  test sur la maquette
docquartus.txt · Dernière modification : 2021/02/19 20:20 de 127.0.0.1