Je voudrais être en mesure de forcer en permanence un signal vers le bas dans ma hiérarchie de test. Voici un exemple simple illustrant comment je l'ai fait dans mes bancs d'essai.VHDL-2008 force continuellement un nom externe
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity double_inverter is
port(
a : in std_logic;
z : out std_logic
);
end double_inverter;
architecture x of double_inverter is
signal b : std_logic;
begin
b <= not a;
z <= not b;
end architecture x;
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity inverter_tb is
end inverter_tb;
architecture y of inverter_tb is
signal z : std_logic;
signal clk : std_logic := '0';
begin
clk <= not clk after 5 ns;
dut : entity work.double_inverter
port map(
a => '0',
z => z
);
continuous_stim : process(clk)
begin
<< signal dut.b : std_logic >> <= force clk;
end process;
end architecture y;
Cela fonctionne dans Modelsim 10.4b dire signal b dans l'instance de double_inverter sera fixé par clk et le signal pas, mais est-il une meilleure façon de contrôler les signaux de noms externes?
Merci pour votre aide.
* ... y at-il un meilleur moyen ... * Mieux de quelle manière? Une force de pilote VHDL et des noms externes révèlent le mécanisme utilisé par les simulateurs, généralement fourni par les commandes de la console ou l'exécution de scripts en fonction de VHPI/VPI/PLI/DLI. Il améliore théoriquement la portabilité des constructions de vérification en fonction des bancs de test au lieu des scripts de plate-forme de simulation dans le visage croissant des 'autres solutions de langage' utilisant VHP, etc. Préférez-vous écrire des programmes VHDL ou utiliser d'autres solutions de vérification? Vous demandez une opinion alors qu'un simple exemple peut ne pas conduire le choix. – user1155120
Y a-t-il une meilleure façon de le faire dans VHDL-2008? Parfois, je vais avoir une situation où je voudrais pouvoir forcer un signal profond dans ma hiérarchie de testbench à un autre signal, comme "clk" dans cet exemple. VHDL-2008 vous donne la possibilité d'atteindre profondément dans votre hiérarchie avec des noms externes. Je voulais savoir comment conduire ces noms externes avec d'autres signaux dans le banc d'essai, mais les seuls exemples dans le LRM et sur le web montraient que les noms externes étaient pilotés par '1' ou '0', pas par des signaux explicites. J'ai juste essayé quelque chose et cela fonctionne, mais est-ce une bonne ou même une façon acceptable de le faire? Merci. –
Les primitives en tant qu'expressions (objets nommés ici) peuvent fournir des valeurs pour l'affectation. Les exemples ne sont pas exhaustifs. Pour un signal, voir IEEE Std 1076-2008 10.5.2.2 Exécution d'une instruction d'affectation simple, 9. Expressions, 9.1 Général (EBNF pour primaire et paragraphe 3). – user1155120