Altifigence Academy

17 / 37 · प्रयोग

अभ्यास: काउंटर reset, चक्रीय वापसी और invariant की जाँच

हर उदयी किनारे की अवस्था को संदर्भ मॉडल से मिलाएँ और प्रारंभिक मान, reset तथा बिट चौड़ाई के प्रभाव अलग करें।

प्रयोग का लक्ष्य और अवलोकन की शर्तें

प्रारंभिक मान 3 रखें और पहले उदयी किनारेउदयी किनारा (rising edge) क्लॉक के 0 से 1 होने का क्षण। यह CLK=1 के पूरे स्तर-अंतराल से अलग है। और पढ़ें पर resetरीसेट अवस्था को विनिर्दिष्ट प्रारंभिक मान पर लौटाने वाला नियंत्रण। उसका तुल्यकालिक या अतुल्यकालिक होना और अन्य नियंत्रणों पर प्राथमिकता साथ तय करें। और पढ़ें करें। इसके बाद क्रम 0, 1, 2, 3, 0 है। Reset सिग्नल सक्रिय होने पर भी क्लॉक किनारे से पहले मान वही रहता है।

शुरू करने से पहले

Digital Design Studio का Desktop प्रोजेक्ट और वैध निष्पादन अधिकार तैयार रखें। हर उदाहरण को अलग फ़ोल्डर में rtl/top.sv के रूप में सहेजें।

SystemVerilog स्रोत

SystemVerilog
module top (
    input logic clk,
    input logic rst,
    output logic [1:0] count
);
    // Active-high synchronous reset: sampled only at the rising clock edge.
    always_ff @(posedge clk)
        if (rst) count <= 2'b00;
        else count <= count + 2'b01;
endmodule

चलाने का तरीका

New analysis में Two-state single-clock v1 चुनें। Clock port को clk और अवधि को 1000ps रखें। नीचे के मानों से Preflight चलाएँ, फिर Run RTL simulation चलाकर परिणाम मिलाएँ।

सेटिंगमान
प्रारंभिक रजिस्टर मान (LSB से)[true,true]
Reset portrst · Active high · 1 cycle
Maximum cycles / time5 / 5000ps

इनपुट stimulus

json
[
  {
    "inputs": {}
  },
  {
    "inputs": {}
  },
  {
    "inputs": {}
  },
  {
    "inputs": {}
  },
  {
    "inputs": {}
  }
]

हर स्तंभ एक उदयी किनारे का अवलोकन है। इनपुट किनारे से ठीक पहले के हैं; नाम में after वाली अवस्थाएँ अद्यतन के तुरंत बाद की हैं। स्तंभों का क्रम नमूनों का क्रम दिखाता है, भौतिक प्रसार विलंबप्रसार विलंब इनपुट बदलने के बाद आउटपुट सही मान पर स्थिर होने तक का समय। तार्किक समतुल्यता और समय-संबंधी गुण अलग हैं। और पढ़ें नहीं। E0–E4 क्रमशः 500, 1500, 2500, 3500, 4500ps के उदयी किनारे हैं। केवल अंतिम मान नहीं, बीच के सभी count स्तंभ भी मिलाएँ।

अभ्यास के पाँच उदयी किनारे
तरंगरूप डेटा देखें
तरंगरूप डेटा: हर अक्षर एक अंतराल है; बिंदु पिछली अवस्था बनाए रखता है; p एक क्लॉक चक्र है।
संकेततरंगरूपबस मान
edge23452E0 → E1 → E2 → E3 → E4
reset10...
count पहले2345211 → 00 → 01 → 10 → 11
count बाद में2345200 → 01 → 10 → 11 → 00

परिणाम तुलना

5 cycles · count=00. 500, 1500, 2500, 3500, 4500ps पर क्रम 00 → 01 → 10 → 11 → 00 जाँचें।

यह अभ्यास 0/1 और एक क्लॉक वाला RTL उपयोग करता है। इसमें #delay, initial या X/Z testbench शामिल नहीं है। पाठ पूरा होने का संकेत सीखने का रिकॉर्ड है, वास्तविक simulation परिणाम नहीं।

अपेक्षित अवस्था हर किनारे पर निकालें

रजिस्टररजिस्टर कई बिटों की अवस्था संग्रहित करता है। इस पाठ्यक्रम के तुल्यकालिक रजिस्टर निर्धारित इनपुट को क्लॉक एज पर संग्रहित करते हैं। और पढ़ें का प्रारंभिक मान 3 है, लेकिन पहले उदयी किनारे पर reset प्राथमिक है। Initialization और reset को एक ही चीज़ न मानें।

उदयी किनाराrstकिनारे से ठीक पहले countकिनारे के बाद count
500ps11100
1500ps00001
2500ps00110
3500ps01011
4500ps01100

Reset रहित हिस्से में हर किनारे पर यह संबंध सही होना चाहिए:

ck+1=(ck+1) mod 4c_{k+1}=(c_k+1)\bmod 4

केवल अंतिम 00 जाँचने से बीच में गलत मानों से गुजरने वाला परिपथ भी पास हो सकता है। पूरी अवस्था श्रृंखला और reset प्राथमिकता अलग-अलग जाँचें।

एक समय में प्रयोग का एक पहलू बदलें

  • प्रारंभिक मान 00 करने पर भी पहले reset के बाद अवस्था श्रृंखला समान रहती है। इससे जाँचें कि reset प्रारंभिक मान पर निर्भर तो नहीं।
  • Reset cycles को 2 करने पर पहले दो उदयी किनारों में count=00 होना चाहिए। उसके बाद वृद्धि एक किनारा देर से शुरू होगी।
  • चौड़ाई 3 बिट करने पर चक्रीय अवधि आठ वृद्धियों की होती है। केवल declaration न बदलें; constant चौड़ाई, प्रारंभिक रजिस्टर array और run की लंबाई भी देखें।

इसे modulo-10 डिज़ाइन तक सामान्यीकृत करें

चार बिटों का संग्रहण 0–15 दर्शाता है। इसलिए साधारण वृद्धि से 9 के बाद 0 नहीं आता। अलग अगली-अवस्था फलन तय करना होगा।

ck+1={0rk=10rk=0 ∧ ek=1 ∧ ck≥9ck+1rk=0 ∧ ek=1 ∧ ck<9ckrk=0 ∧ ek=0c_{k+1}=\begin{cases}0 & r_k=1\\0 & r_k=0\ \land\ e_k=1\ \land\ c_k\ge 9\\c_k+1 & r_k=0\ \land\ e_k=1\ \land\ c_k<9\\c_k & r_k=0\ \land\ e_k=0\end{cases}

इस परिभाषा में अप्रयुक्त अवस्थाओं 10–15 पर enable आने से मान 0 पर लौटता है। अन्य वापसी नीतियाँ संभव हैं, लेकिन विनिर्देश और सत्यापन मॉडल को समान नीति अपनानी चाहिए।

खुद आज़माएँ

मूल 2-बिट काउंटर में पहले उदयी किनारे के reset के बाद, enable नियंत्रण के बिना 11 बार वृद्धि करने पर count क्या होगा? बीच की अवस्थाएँ लिखे बिना निकालें।

व्याख्या पढ़ें

Reset के बाद अवस्था 0 है और 11 mod 4=311\bmod4=3, इसलिए परिणाम 11 है। “कुल 11 किनारे” और “reset के बाद 11 वृद्धियाँ” अलग हैं। पहले मामले में पहला किनारा reset हो तो वास्तविक वृद्धि 10 बार होती है।

Lesson files

counter-top.sv ↓counter-inputs.json ↓

आपका चयन इस ब्राउज़र पर लागू होता है। फ़ुटर से कभी भी बदलें।