10 / 63 · प्रयोग
डिज़ाइन अभ्यास: विनिर्देश से तीन-इनपुट बहुमत परिपथ तक
भाषा में लिखे विनिर्देश को पूर्ण सत्य सारणी में बदलें और न्यूनतमीकरण, कार्यान्वयन तथा पूर्ण जाँच जोड़ें।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
कार्यान्वयन से पहले शर्तें तय करें
ऐसा परिपथ बनाएँ जिसमें तीन इनपुट a,b,c में कम से कम दो 1 हों तो y=1 हो। यहाँ इनपुट स्थिर 0/1 हैं, सभी का भार समान है और पिछला इनपुट याद नहीं रखा जाता। “ठीक दो” और “कम से कम दो” के फलन 111 पर अलग हैं।
| abc | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
|---|---|---|---|---|---|---|---|---|
| y | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
तीनों पद दो-दो इनपुट के एक साथ 1 होने को दर्शाते हैं। वही कार्य के रूप में गुणनखंडित कर सकते हैं। कौन तेज़ होगा, यह सेल और इनपुट पहुँचने के समय पर निर्भर है।
बहुमत पूर्ण योजक के carry के समान है
नीचे cin को तीसरा इनपुट c मानें। cout हमारा y है और sum विषम समतासमता बताती है कि 1 वाले बिटों की संख्या सम है या विषम। समता जाँच विषम संख्या की बिट त्रुटियाँ पकड़ती है, लेकिन सम संख्या की त्रुटियाँ छूट सकती हैं। विस्तार से पढ़ें है। 001 और 111 की तुलना से समता को गलती से बहुमत मानने की त्रुटि सामने आती है।
a + b + cin = sum + 2 × cout
विनिर्देश के आधार पर जाँच के लिए स्वतंत्र संदर्भ बनाएँ
संदर्भ मॉडल में भी वही (a & b) | (a & c) | (b & c) सूत्र नकल करेंगे तो एक ही गलती दोनों में आ सकती है। विनिर्देश की “कम से कम दो 1” शर्त को पूर्णांक गणना से जाँचें।
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 जोड़ने पर मिलता है। अब चार इनपुट हैं, इसलिए पूर्ण जाँच में 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 होती है।