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
  1. Aq2 krijgt de bij dezelfde flank bijgewerkte q1 (dus d) en de schakeling vertraagt slechts één trap
  2. Bq1 en q2 blijven voor altijd 0
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Hardwarebeschrijvingstalen en verificatie

  1. Welke algemene richtlijn voor het onderscheiden van soorten toekenning in Verilog is juist?
  2. Welke uitspraak over de betekenis van 'always @(*)' in Verilog is juist?
  3. Dit is zoals hierboven geschreven als een combinatorische schakeling bedoeld. Welk mogelijk probleem is juist?
  4. Als dit zoals hierboven wordt geschreven als combinatorische schakeling, wat ontstaat er dan bij logische synthese?
  5. Welke combinatie van de reden waarom in de bovenstaande beschrijving een latch ontstaat en de tegenmaatregel is juist?

Vergelijkingen bij dit onderwerp