--------------------------------------------- PARTIE 1 : synthese avec l'outil Leonardo --------------------------------------------- On a realise les syntheses et : -> l'option binaire / one hot change la convention de codage du signal etat_courant (codage sur 4 et 6 bits). * technologie cible : FPGA/Xilinx/4000XL -> On essaye d'optimiser le circuit obtenu et voici les resultats : - avant optimisation : Total accumulated area : Black Box DFFRS : 4 Black Box FALSE : 3 Black Box INV : 4 Black Box OR2 : 6 Black Box TRUE : 3 Black Box eq_3u_3u : 16 Black Box eq_4u_4u : 3 Black Box mux_16u_16u : 4 Black Box mux_4u_4u : 2 Number of accumulated instances : 27 - apres optimisation : Total accumulated area : Number of BUFG : 1 Number of CLB Flip Flops : 4 Number of FG Function Generators : 23 Number of H Function Generators : 8 Number of IBUF : 3 Number of OBUF : 6 Number of Packed CLBs : 11 Number of gates : 23 Number of accumulated instances : 45 On remarque qu'il remplace des combinaisons de composants de base par des composants complexes equivalents. -> Le fichier VHDL genere pour le circuit optimise est difficile a dechiffrer, neanmoins on arrive a retrouver la structure generale du repondeur : - les ports : K : IN std_logic_vector (0 TO 2) - les etats et entrees / sorties: signal [ ... ] etat_courant_3, etat_courant_2, etat_courant_1, etat_courant_0, listen_dup0, call_dup0, play_dup0, save_dup0, erase_dup0, recording_dup0, [ ... ] : std_logic ; - on ne retrouve pas le switch, les operateurs conditionnels sont remplaces par des signaux intermediaires : signal [ ... ] nx57, nx58, nx59, nx60, nx61, nx62, nx63, nx64, nx65, nx66, nx67, nx68, nx69, nx70, nx71, nx72, nx73, nx74, nx75, nx76, nx77: std_logic ; -> Delai critique (et vitesse maximale): Clock Frequency Report Clk : 51.3 MHz Critical Path Report NAME GATE ARRIVAL LOAD ------------------------------------------------------------------------------- clock information not specified delay thru clock network 0.00 (ideal) reg_etat_courant(0)/Q FDCE 0.00 4.64 up 5.88 nx68/O F4_LUT 7.23 11.88 up 2.12 nx67/O H3_LUT 3.02 14.89 up 2.12 nx74/O F4_LUT 3.47 18.36 up 2.12 etat_suivant(0)/O H3_LUT 0.90 19.27 up 2.12 reg_etat_courant(0)/D FDCE 0.00 19.27 up 0.00 data arrival time 19.27 data required time not specified ------------------------------------------------------------------------------- data required time not specified data arrival time 19.27 ---------- unconstrained path ------------------------------------------------------------------------------- Le delai critique pour le circuit optimise est donc de 19.27 ns. * technologie cible : ASIC CUB 0.6u -> L'optimisation a le meme type de d'effet sur le design, a savoir le remplacement des composants de base par d'autres composants (pour ce cas, par un seul type de composant: sqmil) - avant optimisation (notez que c'est le meme resultat que pour FPGA) : Total accumulated area : Black Box DFFRS : 4 Black Box FALSE : 3 Black Box INV : 4 Black Box OR2 : 6 Black Box TRUE : 3 Black Box eq_3u_3u : 16 Black Box eq_4u_4u : 3 Black Box mux_16u_16u : 4 Black Box mux_4u_4u : 2 Number of accumulated instances : 27 - apres optimisation : Total accumulated area : Number of sqmil : 28 Number of accumulated instances : 41 -> Le fichier VHDL genere pour le circuit optimise est encore une fois difficile a dechiffrer, neanmoins on arrive a retrouver la structure generale du repondeur (similairement qu'avec le FPGA) -> Delai critique (et vitesse maximale) : Clock Frequency Report Clk : 219.3 MHz Critical Path Report NAME GATE ARRIVAL LOAD ------------------------------------------------------------------------------- clock information not specified delay thru clock network 0.00 (ideal) reg_etat_courant(0)/Q DF8 0.00 1.34 dn 0.28 ix379/Q OR2 0.66 2.00 dn 0.33 ix99/Q NO2 0.44 2.44 up 0.23 ix141/Q NO4 0.45 2.89 dn 0.06 ix430/Q ON21 0.28 3.16 up 0.07 ix159/Q ON311 0.35 3.52 dn 0.20 ix105/Q ON31 0.36 3.88 up 0.10 ix413/Q IN2 0.20 4.08 dn 0.07 ix87/Q ON322 0.23 4.31 up 0.04 reg_etat_courant(1)/D DF8 0.00 4.31 up 0.00 data arrival time 4.31 data required time not specified ------------------------------------------------------------------------------- data required time not specified data arrival time 4.31 ---------- unconstrained path ------------------------------------------------------------------------------- On remarque que le temps critique (4.31 ns) est plus petit que pour le FPGA (donc que le circuit ASIC est plus rapide que le circuit FPGA). ------------------------------------------------------- PARTIE 2 : placement - routage avec l'outil Alliance ------------------------------------------------------- * technologie cible : FPGA/Xilinx/4000XL ( noter que la version de Xilinx que l'on a ne permet que la synthese de circuits FPGA) -> On etudie les logs (fe.log) de la synthese pour la version optimisee du circuit (noter que l'outil n'a pas voulu synthetiser la version non-opotimisee !) : Running physical design DRC... Design Summary: Number of errors: 0 Number of warnings: 1 Number of CLBs: 13 out of 400 3% CLB Flip Flops: 4 CLB Latches: 0 4 input LUTs: 25 3 input LUTs: 6 Number of bonded IOBs: 10 out of 65 15% IOB Flops: 0 IOB Latches: 0 Number of clock IOB pads: 1 out of 12 8% Number of BUFGLSs: 1 out of 8 12% Total equivalent gate count for design: 201 Additional JTAG gate count for IOBs: 480 Writing design file "map.ncd"... Mapping completed. See MAP report file "map.mrp" for details. Si on compare avec le resultat (logs) de Leonardo: Number of BUFG : 1 Number of CLB Flip Flops : 4 Number of FG Function Generators : 23 Number of H Function Generators : 8 Number of IBUF : 3 Number of OBUF : 6 Number of Packed CLBs : 11 Number of gates : 23 On voit par exemple que le nombre de Flip-Flops (4), le nombre de BUF / BUFG (donc 1) ou encore les nombres de 3-input LUT et OBUF (donc 6) correspondent dans les logs des deux outils, donc il se peut qu'il y ait un lien (surtout pour les elements avec des noms similaires -comme les Flip-Flops). -> On voit aussi que l'outil nous donne des conseils : This design was run without timing constraints. It is likely that much better circuit performance can be obtained by trying either or both of the following: - Enabling the Delay Based Cleanup router pass, if not already enabled - Supplying timing constraints in the input design Effectivement, pendant la synthese, on n'avait pas specifie de contraintes temporelles dans Leonardo. -> Le fichier .dly contient les statistiques sur les delais: File: repondeur_fpga_opt.dly The 20 Worst Net Delays are: ------------------------------- | Max Delay (ns) | Netname | ------------------------------- 4.247 K_int(2) 3.391 K_int(0) 3.042 etat_courant(3) 2.956 K_int(1) 2.672 recording_dup0 2.422 save_dup0 2.203 etat_courant(1) 2.134 etat_courant(0) 2.001 play_dup0 1.861 nx60 1.795 Clk_int 1.683 nx72 1.636 nx59 1.593 erase_dup0 1.452 etat_courant(2) 1.353 nx67 1.311 call_dup0 1.291 nx75 1.280 nx57 1.271 listen_dup0 --------------------------------- -> Le fichier .ll porte l'entete "Bitgen", donc c'est probablement la version "texte" du fichier .bit (qui lui etait en binaire). On a l'impression que c'est la liste des connexions entre composants. -> Le .ncd contre contient beaucoup de symboles (des identifiants tels que listen_obuf, call_obuf, ... qui correspondent (en nom) a des sorties du repondeur) et des sortes d'equations en logique de Bool : F=F1*F4*F30 ou encore G=(~G1*G2*~G4*G3)+(G1*~G2*~G4*G3) -> Le ficher .ngd ressemble bigrement au ficher .ncd -> Le ficher .pad contient la liste de pattes de la puce FPGA et leur correspondance avec les entrees et sorties du repondeur. Il y a des pattes inutilises (UNUSED) probablement car l'architecture cible (Xilinx 4000XL) en propose plus que ce dont onb a besoin. Donc, la liste des pattes "qui nous interessent" : COMP "Clk" LOCATE = SITE "P13" ; COMP "K(0)" LOCATE = SITE "P58" ; COMP "K(1)" LOCATE = SITE "P60" ; COMP "K(2)" LOCATE = SITE "P59" ; COMP "call" LOCATE = SITE "P62" ; COMP "erase" LOCATE = SITE "P61" ; COMP "listen" LOCATE = SITE "P66" ; COMP "play" LOCATE = SITE "P65" ; COMP "recording" LOCATE = SITE "P48" ; COMP "save" LOCATE = SITE "P67" ; -> Le fichier .par contient un texte "Listing Pin Delays by value", donc ca contient les delais par patte (et non par composant comme dans le fichier .dl -> Dans le fichier .twr, on retrouve le warning sur l'absence de contraintes temporelles : WARNING:Timing - No timing constraints found, doing default enumeration. On retrouve aussi les memes delais qu'avant les pattes: ================================================================================ Timing constraint: Default period analysis 90 items analyzed, 0 timing errors detected. Minimum period is 10.069ns. Maximum delay is 11.799ns. -------------------------------------------------------------------------------- ================================================================================ Timing constraint: Default net enumeration 29 items analyzed, 0 timing errors detected. Maximum net delay is 4.247ns. -------------------------------------------------------------------------------- Donc on retrouve la vitesse maximale aux alentours de 100 MHz (si on fait 1 / delai ou 1 / period) ainsi que le "net delay" qui correspond au delai maximal des pattes. En effet, toutes ces statistiques sont aussi repris a la fin du fichier : Constraints cover 90 paths, 29 nets, and 109 connections (100.0% coverage) Design statistics: Minimum period: 10.069ns (Maximum frequency: 99.315MHz) Maximum combinational path delay: 11.799ns Maximum net delay: 4.247ns Le nombre de connexions, donnes dans le fichier .par, correspondent : Listing Pin Delays by value: (ns) d < 1.00 < d < 2.00 < d < 3.00 < d < 4.00 < d < 5.00 d >= 5.00 --------- --------- --------- --------- --------- --------- 7 67 18 14 3 0 En effet, 7 + 67 + 18 + 14 + 3 = 109 (donc le nombre total de connexions) Donc on voit qu'il y a 7 connexions avec un delai inferieur a 1 ns, 67 avec un delai entre 1 et 2 ns, etc. ------------------------------------------------------- PARTIE 3 : simulation apres placement - routage ------------------------------------------------------- Il est necessaire de remplacer le type "bit" par du std_logic car "bit" est de la logique a 2 valeurs (vrai - faux) alors que std_logic a 9 valeurs possibles (U, 1, 0, L, H, ... ). Vu que l'on va utiliser std_logic, l'initialisation des signaux est maintenant necessaire (sinon ils seront a 'U', cette valeur etant la valeur par defaut). De plus, vu que l'on est en train de tester un circuit reel, on peut maintenant remplacer le clock mis au hasard avec un clock qui correspond a la valeur indiquee par l'outil -pour voir qu'il a bien fait son travail. Notons que le frequence avait ete choisie par l'outil en fonction des delais de passage de chacun des composants. -> Verifications avec la simulation, notez que l'on vous donnera le fichier repondeur_bench.vhd (qui contient le VHDL genere par Leonardo pour la version optimisee et pour la technologie FPGA 4000 XL ainsi que le bench ecrit avec le type std_logic et la frequence d'horloge calculee) : Le serveur est tombe en panne... Nous sommes obliges d'arreter :(