Le déclenchement du signal sur les deux bords de l'horloge
Conception nécessite un signal à être activé à des circonstances précises sur front montant de l'horloge, et désactivée à une autre circonstance sur front descendant de l'horloge. Voici ce que je pense:
always@(posedge CLK) begin
signal1 <= 1'b0; //reset flag
if(circumstance1) signal1 <=1'b1; //raise flag if circumstance occurs
end
always@(negedge CLK) begin
signal2 <= 1'b1; //reset flag (actually set alternate to signal1)
if(circumstance2) signal2 <=1'b0; //raise flag if circumstance occurs
end
always@(posedge signal1 or negedge signal2) begin
if(signal1) outsignal <= 1'b0; //activate outsignal
else outsignal <= 1'n1; //deactivate outsignal
end
Ça marche? Sont t-il de meilleures solutions de rechange (doublement de l'horloge et attraper un seul bord n'est pas une option ici).
Modifier après Russell répondre. Russell, je pense à vous proposer les suivantes:
wire nCLK = ~CLK;
always@(posedge CLK or posedge nCLK or negedge nRESET) begin
if(!nRESET) outsignal <= 1'b0;
else if(nCLK) outsignal <= 1'b1;
else outsignal <= 1'b0;
end
ai-je comprends bien vous?
Quelle famille d'instruments utilisez-vous?
OriginalL'auteur Anonymous | 2013-10-26
Vous devez vous connecter pour publier un commentaire.
Est-ce un processeur de signal? Si oui, Xilinx et d'autres de la puce de fournisseurs proposent des primitives qui peuvent vous aider avec cela. Si vous câblez un ODDR2 primitive vous pourriez avoir plus de chance. Inverser l'horloge. En voiture de l'horloge normale dans C0 et ils ont inversé l'horloge en C1. Ensuite, utilisez votre logique pour définir la D0 et D1 entrées.
La façon dont vous avez écrit ci-dessus n'est pas une solution très robuste.
Essayer en utilisant du tissu de primitives pour accomplir cette tâche.
Ce que vous décrivez est double débit de données, ou de DDR, de signalisation, même si elle n'est pas utilisée pour communiquer avec la mémoire DDR.
Ce vendeur et le cadre utilisez-vous? Vous devez définir explicitement un DDR primitive.
Le Circuit n'est pas permis à tout le hoquet dans le signal de transitions. Je ne pense pas multiplexé DDR circuit sera adapté. Je songe à une autre source plus élevée de la fréquence d'horloge pour détecter posedge et negedge de CLK dans un seul bloque toujours (et il va résoudre le problème avec plusieurs pilotes)
OriginalL'auteur Russell
Vous avez besoin de soi-disant "Double Edge" Flip-Flop" (DEFF). Bien que certains fournisseurs proposent des DEFFs comme primitives sur leur CPLD/FPGA, la plupart des produits n'ont pas. Dans ce cas, vous devez mettre en œuvre DEFF vous-même. Malheureusement, le code dans votre post
always@(posedge CLK or posedge nCLK or negedge nRESET)
ne fonctionne pas parce que la norme de flip-flops n'ont pas plus de deux entrées avec un seul bord événements. Donc, la solution doit utiliser les flip-flops avec d'autres circuits combinatoires. Le circuit dans l'image résout ce problème. Il garantit glitchless opération depuis la sortie du XOR élément n'a pas plus simple d'entrée de la transition à chaque changement d'état.Ici est vérifiée et utilisés dans nos projets Verilog code qui implémente cette DEFF:
OriginalL'auteur Serge Goncharov