Hardwarebeschrijvingstalen en verificatie
Bedoeld als een tweetraps schuifregister is het zoals hierboven geschreven met blokkerende toekenning (=). Welk probleem treedt op?
always @(posedge clk) begin
q1 = d;
q2 = q1;
end
- Aq2 krijgt de bij dezelfde flank bijgewerkte q1 (dus d) en de schakeling vertraagt slechts één trap
- Bq1 en q2 blijven voor altijd 0
- CHet wordt correct een tweetraps schuifregister en er is geen probleem
Antwoord en toelichting tonen
Antwoord: A. q2 krijgt de bij dezelfde flank bijgewerkte q1 (dus d) en de schakeling vertraagt slechts één trap
Bij blokkerende toekenning wordt q1 in de eerste regel direct de waarde van d, en krijgt q2 in de tweede regel de bijgewerkte q1, dus d. Daardoor krijgt q2 dezelfde waarde als q1 en vertraagt de schakeling, zowel in simulatie als in gesynthetiseerde vorm, maar één trap. Met 'q1 <= d; q2 <= q1;' krijgt q2 de q1 van vóór de flank en ontstaat zoals bedoeld een tweetraps schuifregister. Het kan soms werken met omgekeerde regelvolgorde, maar dat is een bron van fouten.
Verder: nog 9 vragen over Hardwarebeschrijvingstalen en verificatie