L'utilisation des fichiers HEX avec quartus 9.0 pose de gros problèmes:
Nous allons donc générer des fichiers MIF. Avantages:
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)
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....
Télécharger depuis http://srecord.sourceforge.net/download.html le fichier: http://sourceforge.net/projects/srecord/files/srecord-win32/1.64/srecord-1.63-win32.zip
Ouvrir le fichier reference.pdf : http://srecord.sourceforge.net/srecord-1.64.pdf
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é:
-- 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;
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é:
-- 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;
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
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