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