Altifigence Academy

10 / 63 · प्रयोग

डिज़ाइन अभ्यास: विनिर्देश से तीन-इनपुट बहुमत परिपथ तक

भाषा में लिखे विनिर्देश को पूर्ण सत्य सारणी में बदलें और न्यूनतमीकरण, कार्यान्वयन तथा पूर्ण जाँच जोड़ें।

कार्यान्वयन से पहले शर्तें तय करें

ऐसा परिपथ बनाएँ जिसमें तीन इनपुट a,b,c में कम से कम दो 1 हों तो y=1 हो। यहाँ इनपुट स्थिर 0/1 हैं, सभी का भार समान है और पिछला इनपुट याद नहीं रखा जाता। “ठीक दो” और “कम से कम दो” के फलन 111 पर अलग हैं।

abc000001010011100101110111
y00010111
y=Σm(3,5,6,7)=ab+ac+bcy=\Sigma m(3,5,6,7)=ab+ac+bc

तीनों पद दो-दो इनपुट के एक साथ 1 होने को दर्शाते हैं। वही कार्य y=ab+c(a+b)y=ab+c(a+b) के रूप में गुणनखंडित कर सकते हैं। कौन तेज़ होगा, यह सेल और इनपुट पहुँचने के समय पर निर्भर है।

बहुमत पूर्ण योजक के carry के समान है

नीचे cin को तीसरा इनपुट c मानें। cout हमारा y है और sum विषम समतासमता बताती है कि 1 वाले बिटों की संख्या सम है या विषम। समता जाँच विषम संख्या की बिट त्रुटियाँ पकड़ती है, लेकिन सम संख्या की त्रुटियाँ छूट सकती हैं। विस्तार से पढ़ें है। 001 और 111 की तुलना से समता को गलती से बहुमत मानने की त्रुटि सामने आती है।

cout से बहुमत के आठों इनपुट जाँचें

a + b + cin = sum + 2 × cout

विनिर्देश के आधार पर जाँच के लिए स्वतंत्र संदर्भ बनाएँ

संदर्भ मॉडल में भी वही (a & b) | (a & c) | (b & c) सूत्र नकल करेंगे तो एक ही गलती दोनों में आ सकती है। विनिर्देश की “कम से कम दो 1” शर्त को पूर्णांक गणना से जाँचें।

SystemVerilog
module voter3(input logic a, b, c, output logic y);
  assign y = (a & b) | (a & c) | (b & c);
endmodule

module tb;
  timeunit 1ns;
  timeprecision 1ps;
  logic a, b, c, y;
  int ones;
  voter3 dut(.*);
  initial begin
    for (int v = 0; v < 8; v++) begin
      {a, b, c} = v[2:0];
      #1;
      ones = int'(a) + int'(b) + int'(c);
      assert (y === (ones >= 2))
        else $fatal(1, "voter mismatch at %03b", {a,b,c});
    end
    $finish;
  end
endmodule

हर बिट को int में विस्तृत करने का कारण एक-बिट अंकगणित की चौड़ाई का भ्रम टालना है। यहाँ #1 परीक्षण के संयोजन लॉजिक को अद्यतन होने का समय देता है; यह वास्तविक चिप के 1 ns में काम करने का प्रमाण नहीं है।

विनिर्देश बदलें और प्रतिउदाहरण खोजें

आउटपुट की अनुमति देने वाला enable e जोड़ने पर y=e(ab+ac+bc)y=e(ab+ac+bc) मिलता है। अब चार इनपुट हैं, इसलिए पूर्ण जाँच में 16 संयोजन चाहिए। e=0 पर a,b,c सभी अनदेखे होने चाहिए—इस अपरिवर्तनीय शर्तअपरिवर्तनीय शर्त हर अनुमत निष्पादन में हमेशा सत्य रहने वाली शर्त। मसलन चार स्थान वाली FIFO में संग्रहित वस्तुओं की संख्या हमेशा 0 से 4 के बीच रहती है। विस्तार से पढ़ें को भी अलग जाँचें।

खुद आज़माएँ

गलत कार्यान्वयन y=(a XOR b XOR c) पकड़ने वाले सभी इनपुट लिखें। फलन को “ठीक दो 1” करें तो मूल बहुमत से कौन सी पंक्ति अलग होगी?

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

XOR से भिन्न इनपुट 001, 010, 100, 011, 101, 110 हैं। पहले तीन पर गलत 1 और अंतिम तीन पर गलत 0 मिलता है। “ठीक दो” के फलन में बहुमत की केवल 111 पंक्ति 0 होती है।

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