29 / 37 · अवधारणा
समेकित डिज़ाइन: अतिव्यापी 101 पैटर्न संसूचक
एक डिज़ाइन में न्यूनतम आवश्यक अवस्था, इनपुट valid, रजिस्टर वाला आउटपुट और स्वतंत्र संदर्भ सत्यापन लागू करें।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
पहले आवश्यकताएँ निश्चित करें
Valid=1 वाले उदयी किनारेउदयी किनारा (rising edge) क्लॉक के 0 से 1 होने का क्षण। यह CLK=1 के पूरे स्तर-अंतराल से अलग है। और पढ़ें पर bit_in का एक बिट स्वीकारें। यदि नवीनतम स्वीकृत बिटों का अंत 101 है, तो उस किनारे के बाद एक चक्र तक hit=1 दिखाएँ। Overlap स्वीकार है, इसलिए 10101 में तीसरे और पाँचवें बिट पर hit होना चाहिए। Valid=0 पर अवस्था बनी रहे और hit=0 हो; reset पर अवस्था और hit आरंभ हों।
केवल आवश्यक पिछली जानकारी रखें
S0 का अर्थ कोई matching prefix नहीं, S1 का अर्थ अंत में 1, और S10 का अर्थ अंत में 10 है। 101 पूरा होने के बाद अंतिम 1 अगले pattern की शुरुआत बन सकता है, इसलिए S1 पर लौटें।
| वर्तमान अवस्था | स्वीकृत बिट 0 | स्वीकृत बिट 1 |
|---|---|---|
| S0 | S0, hit=0 | S1, hit=0 |
| S1 | S10, hit=0 | S1, hit=0 |
| S10 | S0, hit=0 | S1, hit=1 |
हर स्तंभ एक उदयी किनारे का अवलोकन है। इनपुट किनारे से ठीक पहले के हैं; नाम में after वाली अवस्थाएँ अद्यतन के तुरंत बाद की हैं। स्तंभों का क्रम नमूनों का क्रम दिखाता है, भौतिक प्रसार विलंबप्रसार विलंब इनपुट बदलने के बाद आउटपुट सही मान पर स्थिर होने तक का समय। तार्किक समतुल्यता और समय-संबंधी गुण अलग हैं। और पढ़ें नहीं। Reset के बाद S0 से शुरुआत और हर स्तंभ में valid=1 है। तीसरे बिट की detection के बाद S1 बचता है, इसलिए पाँचवें बिट पर भी detection संभव है।
तरंगरूप डेटा देखें
| संकेत | तरंगरूप | बस मान |
|---|---|---|
| स्वीकृत बिट | 10101 | |
| अवस्था बाद में | 23452 | S1 → S10 → S1 → S10 → S1 |
| hit बाद में | 0.101 |
Detection आउटपुट को रजिस्टर में रखें
module pattern_101 (
input logic clk, rst, valid, bit_in,
output logic hit
);
typedef enum logic [1:0] {S0, S1, S10} state_t;
state_t state;
always_ff @(posedge clk) begin
if (rst) begin
state <= S0;
hit <= 1'b0;
end else begin
hit <= 1'b0;
if (valid) begin
case (state)
S0: state <= bit_in ? S1 : S0;
S1: state <= bit_in ? S1 : S10;
S10: begin
state <= bit_in ? S1 : S0;
hit <= bit_in;
end
default: state <= S0;
endcase
end
end
end
endmodulehit के लिए अवस्था और उस किनारे पर स्वीकृत इनपुट से निकला मान रजिस्टररजिस्टर कई बिटों की अवस्था संग्रहित करता है। इस पाठ्यक्रम के तुल्यकालिक रजिस्टर निर्धारित इनपुट को क्लॉक एज पर संग्रहित करते हैं। और पढ़ें में रखा जाता है। यह साधारण संयोजन Mealy आउटपुट की तरह किनारों के बीच bit_in बदलते ही प्रतिक्रिया नहीं देता। इस डिज़ाइन उदाहरण को सामान्य SystemVerilog के रूप में देखें; दिए गए single-clock अभ्यास इंजन का समर्थित syntax और निष्पादन प्रमाण अलग जाँचना होगा।
पास होने के मानदंड स्वतंत्र रूप से निकालें
केवल स्वीकृत बिटों की string बनाएँ। लंबाई कम-से-कम तीन होने पर अंतिम तीन अक्षर 101 हैं या नहीं जाँचकर संदर्भ मॉडल बनाया जा सकता है। FSMअवस्था मशीन संग्रहित अवस्था और इनपुट से अगली अवस्था तथा आउटपुट तय करने वाला मॉडल। अवस्था संक्रमण, आउटपुट और reset के नियम साथ परिभाषित किए जाते हैं। और पढ़ें की अवस्था encoding संदर्भ मॉडल में कॉपी करने की जरूरत नहीं।
- 101 → hit स्थान 3
- 10101 → hit स्थान 3, 5
- 11101 → hit स्थान 5
- 1001 → कोई detection नहीं
- 1,0 के बाद reset, फिर 1 → कोई detection नहीं
- 1,0 के बीच या बाद valid=0 डालें → स्वीकृत क्रमांक के अनुसार वही परिणाम
नीचे का बिट-क्रम अभ्यास लगातार valid इनपुट का व्यवहार जाँचता है। इसे reset, valid रुकावट या भौतिक timing के सत्यापन का परिणाम न मानें।
इनपुट बदलें
खुद आज़माएँ
101 मिलने के बाद कोड को S0 पर लौटने वाला बना दें, तो सबसे छोटी कौन-सी इनपुट श्रृंखला मूल विनिर्देश से अलग परिणाम देगी?
व्याख्या पढ़ें
10101 पर अंतर दिखता है। सही परिपथ तीसरे और पाँचवें इनपुट को detect करता है। S0 पर लौटने से पहली detection का अंतिम 1 अगले pattern की शुरुआत के रूप में फिर उपयोग नहीं होता, इसलिए पाँचवीं detection छूट जाती है।