Altifigence Academy

25 / 63 · प्रयोग

अभ्यास: MUX की पूर्ण जाँच और पंजीकृत आउटपुट विश्लेषण

एक ही इनपुट को संयोजन पथ और रजिस्टर पथ पर लगाएँ तथा सत्य सारणी और नमूना समय से परिणाम जाँचें।

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

sel=0 पर a और sel=1 पर b, y पर आता है। sampled_y, क्लॉक के उदयी किनारेउदयी किनारा (rising edge) क्लॉक के 0 से 1 होने का क्षण। यह CLK=1 के पूरे स्तर-अंतराल से अलग है। विस्तार से पढ़ें का y संग्रहित करता है। इनपुट बदलने पर भी अगली उदयी एज तक sampled_y स्थिर रहता है।

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

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

पहले a और b अलग रखें। sel=0 पर a और sel=1 पर b आउटपुट होने की जाँच करें, फिर इनपुट फ़ाइल की हर पंक्ति से मिलाएँ।

चयन पथ स्वयं बदलकर देखें

y = sel ? b : a

SystemVerilog स्रोत

SystemVerilog
module top (
    input logic clk,
    input logic a,
    input logic b,
    input logic sel,
    output logic y,
    output logic sampled_y
);
    assign y = sel ? b : a;
    // Explicit observation register: y remains purely combinational.
    // The register makes this design eligible for logic-netlist-1 simulation.
    always_ff @(posedge clk) sampled_y <= y;
endmodule

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

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

सेटिंगमान
प्रारंभिक रजिस्टर मान, LSB से[false]
Reset portखाली
Maximum cycles / time8 / 8000ps

हर स्तंभ नीचे की इनपुट फ़ाइल की एक प्रविष्टि है। अनुमानित संयोजन y, 0,0,0,1,1,0,1,1 है। यह इनपुट क्रम का कार्यात्मक अनुमान है; sampled_y के अद्यतन समय इसमें नहीं हैं।

इनपुट JSON के आठ संयोजन एक साथ
तरंगरूप डेटा देखें
तरंगरूप डेटा: हर अक्षर एक अंतराल है; बिंदु पिछली अवस्था बनाए रखता है; p एक क्लॉक चक्र है।
संकेततरंगरूपबस मान
a0...1...
b0.1.0.1.
sel01010101
y expected0..1.01.

इनपुट उद्दीपन

json
[
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        false
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        false
      ],
      "sel": [
        true
      ]
    }
  },
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        true
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        false
      ],
      "b": [
        true
      ],
      "sel": [
        true
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        false
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        false
      ],
      "sel": [
        true
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        true
      ],
      "sel": [
        false
      ]
    }
  },
  {
    "inputs": {
      "a": [
        true
      ],
      "b": [
        true
      ],
      "sel": [
        true
      ]
    }
  }
]

परिणामों की तुलना

8 cycles · y=1 · sampled_y=1। 3000ps पर जाँचें कि y=1 और sampled_y=0 हैं।

यह अभ्यास 0/1 एकल-क्लॉक RTL उपयोग करता है। इसमें #delay, initial या X/Z टेस्टबेंच नहीं हैं। सीखने के पूर्णता चिह्न से प्रगति दर्ज होती है; वह वास्तविक सिम्युलेशन परिणाम नहीं है।

पहले अपेक्षित परिणाम लिखें

सिम्युलेटर चलाने से पहले दिए इनपुट क्रम का संयोजन आउटपुट yy स्वयं निकालें। अपेक्षित बिट क्रम 0,0,0,1,1,0,1,10,0,0,1,1,0,1,1 है। यह आठों इनपुट संयोजन जाँचता है और केवल अंतिम मान सही होने से अधिक मजबूत प्रमाण है।

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

qk+1=sk‾ak+skbkq_{k+1}=\overline{s_k}a_k+s_kb_k

यहाँ kkवीं एज पर नमूना लिए इनपुट से उसके बाद की अवस्था qk+1q_{k+1} परिभाषित है। sampled_y इसी अवस्था का नाम है। एक ही समय निर्देशांक पर दिखने पर भी इनपुट लागू करने और रजिस्टर अद्यतन की घटनाओं का क्रम जाँचें।

त्रुटियाँ अलग करने के तीन परीक्षण

  1. चयन उलटना: sel ? a : b करने पर सबसे पहले कौन सा वेक्टर विफल होगा, पहले अनुमान लगाएँ। a=ba=b वाला वेक्टर यह गलती नहीं पकड़ता।
  2. अवलोकन बिंदु का भ्रम: y के बजाय sampled_y को तुरंत संयोजन उत्तर से मिलाने पर सही परिपथ भी गलत क्यों दिखेगा, समझाएँ।
  3. इनपुट स्थिरता परीक्षण: केवल अचयनित इनपुट बदलें और देखें कि yy स्थिर रहता है। चयनित इनपुट बदलने पर yy उसका अनुसरण करे।

त्रुटि रिपोर्ट में इनपुट, अवलोकन समय, अपेक्षित और वास्तविक मान प्रति पंक्ति लिखें। केवल “तरंगरूप अजीब है” लिखने से चयन लॉजिक की गलती और एक-चक्र विलंब अलग नहीं होंगे।

विस्तार कार्य

डेटा चार बिट करने पर संयोजन इनपुट क्षेत्र 24+4+1=5122^{4+4+1}=512 है। पूर्ण जाँच अभी संभव है, लेकिन पहले 0, अधिकतम, 0101, 1010 और walking-one पैटर्न से बिट-स्थिति की त्रुटि जल्दी पकड़ें। चौड़ाई बदलने पर परिपथ की सेटिंग और इनपुट फ़ाइल भी अद्यतन करें।

खुद आज़माएँ

a=0,b=1,s=0a=0,b=1,s=0 को उदयी एज पर संग्रहित करने के बाद अगली एज से पहले केवल ss को 1 करें। लॉजिक विलंब बीतने के बाद yy और अगली उदयी एज के पहले तथा बाद के sampled_y निकालें।

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

संयोजन आउटपुट y=1y=1 है। sampled_y अगली उदयी एज से पहले 0 रहता है और उस एज पर 1 संग्रहित करता है। इसमें इनपुट नमूना लेने के लिए आवश्यक समय तक स्थिर माना गया है।

Lesson files

mux-top.sv ↓mux-inputs.json ↓

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