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 स्रोत
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 port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
इनपुट stimulus
[
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
}
]हर स्तंभ एक उदयी किनारे का अवलोकन है। इनपुट किनारे से ठीक पहले के हैं; नाम में after वाली अवस्थाएँ अद्यतन के तुरंत बाद की हैं। स्तंभों का क्रम नमूनों का क्रम दिखाता है, भौतिक प्रसार विलंबप्रसार विलंब इनपुट बदलने के बाद आउटपुट सही मान पर स्थिर होने तक का समय। तार्किक समतुल्यता और समय-संबंधी गुण अलग हैं। और पढ़ें नहीं। E0–E4 क्रमशः 500, 1500, 2500, 3500, 4500ps के उदयी किनारे हैं। केवल अंतिम मान नहीं, बीच के सभी count स्तंभ भी मिलाएँ।
तरंगरूप डेटा देखें
| संकेत | तरंगरूप | बस मान |
|---|---|---|
| edge | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count पहले | 23452 | 11 → 00 → 01 → 10 → 11 |
| count बाद में | 23452 | 00 → 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 |
|---|---|---|---|
| 500ps | 1 | 11 | 00 |
| 1500ps | 0 | 00 | 01 |
| 2500ps | 0 | 01 | 10 |
| 3500ps | 0 | 10 | 11 |
| 4500ps | 0 | 11 | 00 |
Reset रहित हिस्से में हर किनारे पर यह संबंध सही होना चाहिए:
केवल अंतिम 00 जाँचने से बीच में गलत मानों से गुजरने वाला परिपथ भी पास हो सकता है। पूरी अवस्था श्रृंखला और reset प्राथमिकता अलग-अलग जाँचें।
एक समय में प्रयोग का एक पहलू बदलें
- प्रारंभिक मान 00 करने पर भी पहले reset के बाद अवस्था श्रृंखला समान रहती है। इससे जाँचें कि reset प्रारंभिक मान पर निर्भर तो नहीं।
- Reset cycles को 2 करने पर पहले दो उदयी किनारों में count=00 होना चाहिए। उसके बाद वृद्धि एक किनारा देर से शुरू होगी।
- चौड़ाई 3 बिट करने पर चक्रीय अवधि आठ वृद्धियों की होती है। केवल declaration न बदलें; constant चौड़ाई, प्रारंभिक रजिस्टर array और run की लंबाई भी देखें।
इसे modulo-10 डिज़ाइन तक सामान्यीकृत करें
चार बिटों का संग्रहण 0–15 दर्शाता है। इसलिए साधारण वृद्धि से 9 के बाद 0 नहीं आता। अलग अगली-अवस्था फलन तय करना होगा।
इस परिभाषा में अप्रयुक्त अवस्थाओं 10–15 पर enable आने से मान 0 पर लौटता है। अन्य वापसी नीतियाँ संभव हैं, लेकिन विनिर्देश और सत्यापन मॉडल को समान नीति अपनानी चाहिए।
खुद आज़माएँ
मूल 2-बिट काउंटर में पहले उदयी किनारे के reset के बाद, enable नियंत्रण के बिना 11 बार वृद्धि करने पर count क्या होगा? बीच की अवस्थाएँ लिखे बिना निकालें।
व्याख्या पढ़ें
Reset के बाद अवस्था 0 है और , इसलिए परिणाम 11 है। “कुल 11 किनारे” और “reset के बाद 11 वृद्धियाँ” अलग हैं। पहले मामले में पहला किनारा reset हो तो वास्तविक वृद्धि 10 बार होती है।