show menu

Télécharger ce tutoriel en pdf

Simulation comportementale avec Vivado Simulator (XSIM)

Posté par Florent - 25 août 2016

Introduction

Dans le tutoriel précédent (4 - Projet RTL (VHDL) basique) nous avons créé un projet RTL (VHDL) simple. Dans ce tutoriel, nous allons utiliser Vivado Simulator (XSIM) pour valider le comportement de notre design.

Lancer la simulation

Pour lancer le Vivado Simulator en simulation comportementale, cliquez sur “Run Simulation” sous “Simulation” dans le “Flow Navigator” et cliquez ensuite sur “Run Behavioral Simulation”. Cela ouvrira une “waveform window” dans le simulateur.

Vivado - Run Behavioral Simulation

Figure 1 - Run Behavioral Simulation

Dans la “waveform window”, sur la gauche, on peut voir les 4 entrées et la sortie de notre design et les signaux intermédiaires que nous avons créé pour les sorties du OU logique et du premier ET logique. La valeur de ces signaux est pour l’instant ‘U’ (pour Uninitialized) ce qui signifie que nos signaux non pas été initialisés. C’est parce que nous n’avons pas donné de valeur à nos signaux d’entrées.

Waveform window dans Vivado

Figure 2 - Waveform window dans Vivado

Nous allons donner une valeur à nos signaux d’entrées en forçant leur valeur dans la simulation. Cliquez sur “Run > Restart the Simulation pour redemarrer la simulation.

Restart the simulation - Vivado Simulator

Figure 3 - Restart the simulation - Vivado Simulator

Ensuite nous allons forcer la valeur de nos signaux. Pour tester toutes les possibilités de notre system nous allons forcer ses signaux avec une horloge. Faites un clique droit sur le signal A et cliquez sur  “Force Clock”.

Vivado - Force Clock

Figure 4 - Force Clock

Changer les valeurs des paramètres  “Value radix” en “Binary”, “Leading edge value” en ‘0’, “Trailing edge value” en ‘1’ et régler la période à “10ns”.

XSIM - Force clock une entrée

Figure 5 - Force clock sur l’entrée  A

Faire de même pour les entrées B, C and D mais avec, respectivement, des périodes de“20ns”, “40ns” et “80ns”.

Ensuite, lancer la simulation en cliquant sur “Run > Run For… ”. Régler un temps de simulation de 160ns.

XSIM - Lancer la simulation pour 160ns

Figure 6 – Lancer la simulation pour 160ns

Dans la “waveform window”, on peutvoir que la sortie O est à ‘1’ dans 3 cas:

· Quand A, B et C sont à ‘1’ et D est à 0

· Quand A, B et D sont à ‘1’  et C est à 0

· Quand A, B, C et D sont à ‘1’

Vivado Simulator Waveform

Figure 7 - Vivado Simulator Waveform

C’est le comportement attendu de notre design. Fermer la fenêtre de simulation.

Créer un test bench (VHDL)

Dans Vivado, nous allons tout d’abord créer un test bench afin de simuler notre design.

Qu’est-ce qu’un test bench? Un test bench est un fichier HDL (VHDL, Verilog…) qui, généralement génère des stimuli (entrées, horloges) à une Unité Sous Test (Unit Under Test (UUT) en anglais).

Pour créer le fichier de test bench dans Vivado, cliquez sur “Add Sources” dans le “ Flow Navigator ” et sélectionnez “Add or create simulation sources”.

Vivado - Add or create simulation sources

Figure 8 - Add or create simulation sources

Ensuite, cliquez sur “Create File”, sélectionnez VHDL, entrez “tb_top_level” comme nom de fichier et cliquez sur “finish”. Généralement, les tests benches n’ont pas d’entrées ni des sorties, donc si la fenêtre “Define Module” apparait, supprimez la première ligne en la sélectionnant et en cliquant sur  le bouton “-“. Cliquez ensuite sur “OK”.

Nous pouvons voir notre fichier sous “Simulation Sources” dans la fenêtre “Sources”.

Vivado - Simulation Sources dans la fenêtre Sources

Figure 9 - Simulation Sources dans la fenêtre Sources

Modifier le test bench

Double cliquez sur le fichier dans la fenêtre “Sources” pour l’ouvrir dans l’éditeur de texte. On remarque que Vivado a déjà créé un modèle pour notre fichier.

1.Declarer le bloc top_level

Premièrement, déclarez le bloc top_level dans la partie déclarative (entre les mots clés “architecture” et  “begin”):

VHDL - Declaration du bloc

Figure 10 – Declaration du bloc top_level

2.Declarer les signaux

Ensuite, déclarez les signaux que nous allons utiliser. Nous allons utiliser toutes les entrées et les sorties du bloc top_level donc déclarez ces signaux dans la partie déclarative et initialiser les entrées à ‘0’:

VHDL - Signals declaration

Figure 11 - Signals declaration

3.Instantier l’Unit Under Test (UUT)

Ensuite, instanciez (connectez) le bloc top_level, que nous allons appeler UUT, après le mot clé the “begin” en connectant les signaux que nous avons créé précédemment:

VHDL Test Bench - Instancier l’UUT

Figure 12 - Instancier l’UUT

4.Générer les stimuli

Ensuite, nous allons attribuer une valeur à nos signaux. Nous allons faire basculer nos signaux (alterner leur valeur entre ‘1’ et ‘0’). A toutes les 10 ns, B toutes les 20 ns, C toutes les 40 ns et D toutes les 80 ns. Toutes les combinaisons seront testées après 160ns (simulation time).

VHDL Test Bench - génération des stimuli

Figure 13 – génération des stimuli

Lancer la simulation avec le test bench

Lancer la simulation en cliquant sur “Run Simulation > Run Behavioral Simulation” sous “Simulation” dans le “Flow Navigator”.

Nous pouvons observer la même “waveform window” que dans la première partie du tutoriel.

Vous pouvez télécharger le fichier de test bench utilisé pour ce tutoriel ici



Poster un commentaire

Seuls les utilisateurs connectés peuvent poster des commentaires