2009-10-28 25 views
-1

J'ai une implémentation d'une unité de contrôle (UC) en AHDL, et je suis supposé la simuler et voir si cela fonctionne comme défini dans le diagramme ASM correspondant. J'ai utilisé MAX + plus II pour le simuler, et cela ne fonctionne pas comme je m'y attendais, mais je ne peux pas vraiment dire ce qui ne va pas parce que je ne suis pas familier avec AHDL, sans parler de la partie .Comment une TABLE fonctionne-t-elle en AHDL?

Voici mon unité de commande:

 
SUBDESIGN EXP1_UC 
(
CLKUC: INPUT; 
RES: INPUT; 
N1,N2,M1,M2: INPUT;
CLR1, CLR2, CLR3, EN1, EN2, EN3, SEL: OUTPUT; ) VARIABLE UC: MACHINE OF BITS (CLR1, CLR2, CLR3, EN1, EN2, EN3, SEL) WITH STATES ( s0 = B"1110000", s1= B"0001000", s2= B"0000100", s3= B"0000000", s4= B"0000010", s5= B"0000001", s6= B"0000011" ); BEGIN UC.CLK = CLKUC; UC.RESET = RES; TABLE UC, N1,N2,M1,M2 => UC; s0, 0, 0, X, X => s0; s0, 1, X, X, X => s1; s0, X, 1, X, X => s2; s1, X, X, X, X => s3; s2, X, X, X, X => s3; s3, 0, 0, 0, 0 => s3; s3, 1, X, X, X => s1; s3, X, 1, X, X => s2; s3, X, X, 1, X => s4; s3, X, X, X, 1 => s5; s4, X, X, X, X => s3; s5, X, X, X, X => s6; s6, X, X, X, X => s3; END TABLE; END;

Il y a 2 situations dans la simulation que je ne comprends pas:

1) Lorsque l'état actuel est S3 et les entrées sont M1 = 1 et M2 = 1, l'état suivant est S6. Je ne comprends pas, parce que d'après ce que je vois, il n'y a pas moyen d'aller en S6 sans passer par S5 en premier.

2) Lorsque l'état courant est S0 et les entrées sont N1 et N2 = 1 = 1, l'état suivant est défini dans la simulation en tant que « 12 ». Eh bien, il n'y a pas cet état ...

Quelqu'un peut-il me aider? Merci.

MISE À JOUR:

1) Je dois utiliser ADHL et MAX + plus II, même si elle est à peine la meilleure combinaison d'outils, car cela est une paperasse pour le collège, et je n'écrire le code (comme J'ai dit, je suis juste supposé le simuler, je ne peux pas le changer).

Répondre

1

Premièrement: avez-vous vraiment utiliser AHDL? - Il n'a pas été une partie correctement supportée d'Altera-land pendant des années. Et MAX Plus II est un très vieux logiciel - prenez le contrôle de Quartus et apprenez VHDL (ou Verilog si vous devez;) serait ma suggestion. Désolé si cela semble dur!

Mais ce que votre problème ressemble vraiment est un problème traditionnel logique ... sont les entrées de votre machine d'état correctement synchronisés? Sinon, vous pouvez obtenir toutes sortes d'effets bizarres quand ils changent près d'un bord d'horloge et ensuite les signaux arrivent à une partie de la machine d'état d'un côté de l'horloge et aux autres parties de l'autre côté de l'horloge (c'est-à-dire pas vu avant le prochain cycle). Cela va embrouiller les choses terriblement! Assurez-vous également que votre signal de réinitialisation est également synchronisé avec le signal clk.

hack - coller deux tongs dans une chaîne sur chacune des entrées. Puis lisez sur la synchronisation des entrées asynchrones ...

+0

Tout d'abord, merci pour votre réponse. C'est ma première question ici, donc je n'étais pas sûr si j'étais censé répondre directement à vous ou comme une mise à jour dans ma question. Eh bien, je vais faire les deux. Mise à jour 1 réponses pourquoi je dois utiliser AHDL, même si je suis actuellement Learnin VHDL, et je suis passé Ise WebPack de Xilinx au lieu de MAX Plus II :) En ce qui concerne votre réponse, toutes mes entrées sont correctement synchronisées: Je ne m'inquiète pas de l'heure de l'exécution, donc j'ai mis mes entrées une demi-période d'horloge AVANT le bord de l'horloge montante, et ils restent comme cela pendant toute une période d'horloge. Une autre idée? Merci encore. – dsetton