2017-08-07 8 views
-1

Nous écrivons un mini processeur qui analyse les informations en fonction des instructions écrites dans sa mémoire.FSM de mini-processeur coincé dans la boucle égale de branche

La première instruction (adresse 0 en mémoire) dans notre banc d'essai est une tandis que la boucle est écrite comme une branche égale: if (delimeter == 0) jump 0. Afin de différencier le cas d'attente du délimiteur d'un cas général de branche égale (ou branche non égale), nous avons ajouté un signal wait_for_delimeter spécifique mais la récupération d'instruction prend un cycle d'horloge et parce que le pipeline insère un NOP (pas d'instruction d'opération) pour une branche prise, dans l'horloge suivante, waiting_for_delimeter ne peut pas être 1 car elle "voit" un NOP et non l'instruction équivalente de branche.

Quelqu'un peut-il nous aider s'il vous plaît à résoudre ce problème?

Merci!

Simulation Waves

+0

de quelle langue parlez-vous? Pouvez-vous fournir plus de code? – Serge

+0

J'écris dans Verilog – efalk

+0

[voir s'il vous plaît code correspondant ici] [1] [1]: https://i.stack.imgur.com/cRDUn.png – efalk

Répondre

0

Je ne l'ai pas compris votre question si le waiting_for_delimiter signal voit la branche, se prépare à 1, puis remis à zéro à cause du NOP, ou il est arrive ne se couche jamais, car il ne voit jamais le branche.

Pour le premier cas:

Si vous voulez "rappeler" le signal waiting_for_delimiter devrait être 1 au cycle suivant, l'échantillon juste en utilisant un FF:

reg waiting_for_delimiter_r1; 

always @(posedge clk or posedge rst) 
    if (rst) 
     waiting_for_delimiter_r1 <= 1'b0; 
    else 
     waiting_for_delimiter_r1 <= waiting_for_delimiter; 

De cette façon, Au prochain cycle, vous aurez l'indication appropriée dans waiting_for_delimiter_r1.

Pour le second cas:

Suivez la même approche, et l'échantillon de l'instruction ou l'indication que la branche a été prise. Utilisez cet échantillonnage dans la logique waiting_for_delimiter.