Altifigence Academy

30 / 37 · अवधारणा

Ready/valid और एक स्थान वाला लचीला बफर

रुक सकने वाले डेटापाथ में बिना हानि या दोहराव के स्थानांतरण तथा एक साथ इनपुट-आउटपुट के नियम बनाएँ।

एक एज पर valid और ready दोनों 1 हों तो स्थानांतरण होता है

भेजने वाला मान्य डेटा प्रस्तुत करते समय valid=1 रखता है। पाने वाला डेटा ले सकने पर ready=1 रखता है। क्लॉक एज पर दोनों संकेत साथ पढ़कर स्थानांतरण तय होता है।

transferk=validk∧readyk\mathrm{transfer}_k=\mathrm{valid}_k\land\mathrm{ready}_k

valid=1,ready=0 रहने तक भेजने वाले को valid और डेटा बनाए रखने चाहिए। Ready आने तक valid न देना, दूसरी ओर के नियमों के अनुसार deadlock पैदा कर सकता है। यहाँ सभी संकेत एक ही क्लॉक क्षेत्र में माने गए हैं। Ready/validहैंडशेक उसी किनारे पर प्रेषक का valid और ग्रहणकर्ता का ready दोनों 1 होने पर हस्तांतरण निश्चित करने वाला अनुबंध। प्रतीक्षा के दौरान डेटा बनाए रखने के नियम भी इसका हिस्सा हैं। अपने आप CDC हल नहीं करता।

प्रतीक्षा करता डेटा ठीक एक बार भेजें

नीचे के स्तंभ क्रम से नमूना चक्र 0–5 हैं। संकेत को संबंधित उर्ध्वगामी एजउदयी किनारा (rising edge) क्लॉक के 0 से 1 होने का क्षण। यह CLK=1 के पूरे स्तर-अंतराल से अलग है। और जानें के ठीक पहले का मान समझें। चक्र 1 और 2 में A प्रतीक्षा कर रहा है: valid=1,ready=0, इसलिए डेटा और valid बने रहते हैं। एज 3 पर A और एज 4 पर B स्वीकार होता है। क्लॉक और संकेत रेखाओं का संरेखण अनुबंध समझाता है; यह setupsetup कैप्चर एज से पहले इनपुट डेटा के स्थिर रहने का न्यूनतम समय। उल्लंघन होने पर संग्रहित परिणाम की गारंटी नहीं रहती। और जानें/hold विलंब का मॉडल नहीं है।

Ready/valid · प्रतीक्षा और लगातार स्थानांतरण
तरंगरूप डेटा देखें
तरंगरूप डेटा: हर अक्षर एक अंतराल है; बिंदु पिछली अवस्था बनाए रखता है; p एक क्लॉक चक्र है।
संकेततरंगरूपबस मान
clkp.....
valid01...0
ready10.1..
transfer0..1.0
datax3..4xA → B

Valid कई चक्र तक 1 रहे तो इसका अर्थ केवल एक स्थानांतरण नहीं है। जिस भी एज पर ready भी 1 हो, वहाँ अलग स्थानांतरण होता है।

एक मद रखने वाला बफर बनाएँ

बफर खाली हो, या वर्तमान डेटा इसी एज पर भेज सकता हो, तो नए डेटा के लिए स्थान है।

in_ready=¬out_valid∨out_ready\mathrm{in\_ready}=\neg\mathrm{out\_valid}\lor\mathrm{out\_ready}
SystemVerilog
module elastic_buffer (
    input  logic       clk,
    input  logic       rst,
    input  logic       in_valid,
    output logic       in_ready,
    input  logic [7:0] in_data,
    output logic       out_valid,
    input  logic       out_ready,
    output logic [7:0] out_data
);
    assign in_ready = !out_valid || out_ready;

    always_ff @(posedge clk) begin
        if (rst) begin
            out_valid <= 1'b0;
        end else if (in_ready) begin
            out_valid <= in_valid;
            if (in_valid) out_data <= in_data;
        end
    end
endmodule

खाली बफर इनपुट स्वीकार करे तो एज के बाद out_valid और out_data अपडेट होते हैं। संयोजी बाइपास नहीं है, इसलिए नए मान को उसी एज पर आउटपुट स्थानांतरण नहीं गिनते। Reset के दौरान स्थानांतरण नहीं गिनते और out_valid=0 पर out_data का मान अर्थहीन है। इसलिए डेटा रजिस्टररजिस्टर कई बिटों की अवस्था संग्रहित करता है। इस पाठ्यक्रम के तुल्यकालिक रजिस्टर निर्धारित इनपुट को क्लॉक एज पर संग्रहित करते हैं। और जानें को स्वयं resetरीसेट अवस्था को विनिर्दिष्ट प्रारंभिक मान पर लौटाने वाला नियंत्रण। उसका तुल्यकालिक या अतुल्यकालिक होना और अन्य नियंत्रणों पर प्राथमिकता साथ तय करें। और जानें करना हमेशा आवश्यक नहीं है।

भरा बफर भी डेटा बदल सकता है

एज से पहले की अवस्थाout_readyin_validएज पर काम
खाली0 या 11इनपुट रखें, valid=1 करें
भरा00 या 1वर्तमान डेटा और valid बनाए रखें
भरा10आउटपुट भेजकर खाली हों
भरा11पुराना आउटपुट भेजें और नया इनपुट साथ रखें

अंतिम पंक्ति के कारण पहली बार भरने के बाद हर चक्र एक मद संसाधित हो सकती है। विलंब होने का अर्थ थ्रूपुटथ्रूपुट प्रति इकाई समय स्वीकार या पूर्ण किए जाने वाले कार्यों की संख्या। पाइपलाइन किसी एक कार्य का विलंब घटाए बिना भी थ्रूपुट बढ़ा सकती है। और जानें आधा होना नहीं है।

डेटा क्रम का सत्यापन मॉडल

संदर्भ मॉडल में अधिकतम लंबाई 1 वाली कतार रखें। हर एज के पिछले मानों से आउटपुट स्थानांतरण और इनपुट स्वीकृति तय करें। आउटपुट हो तो कतार की पहली मद से मिलाएँ, फिर नया इनपुट पीछे रखें। उसी एज पर dequeue और enqueue दोनों संभव हैं, इसलिए क्रम स्पष्ट रखें।

0≤Naccepted−Ndelivered≤10\le N_{\mathrm{accepted}}-N_{\mathrm{delivered}}\le1

यह अपरिवर्तनीय शर्त, reset से गिनती फिर शुरू किए गए अंतराल में सही है। साथ ही जाँचें कि stall में डेटा स्थिर है, भेजने का क्रम सुरक्षित है और वही मद दो बार नहीं भेजी जाती। केवल संख्या की शर्त से डेटा मान की शुद्धता सत्यापित नहीं होती।

कई बफरों के ready को संयोजी रूप से लंबा जोड़ने पर पीछे की दिशा में टाइमिंग मार्ग लंबा हो सकता है। संरचना जोड़ते समय संयोजी लूप न होने की जाँच भी करें।

आगे पढ़ें: AMD UG934 — READY/VALID Handshake

खुद आज़माएँ

बफर A से भरा है और नए इनपुट B का in_valid=1 है। पहले एज पर out_ready=0 और अगले पर out_ready=1 है। हर एज पर A और B का क्या होगा? भेजने वाले को B कब तक बनाए रखना होगा?

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

पहले एज पर in_ready=0 है, इसलिए A बना रहता है और B स्वीकार नहीं होता। भेजने वाला B और in_valid=1 बनाए रखता है। अगले एज पर in_ready=1 होने से A भेजा जाता है और B साथ ही सहेजा जाता है। उस एज के बाद बफर आउटपुट B है, लेकिन B अभी भेजा नहीं गया। B का आउटपुट स्थानांतरण बाद के ऐसे एज पर होगा जहाँ out_valid और out_ready दोनों 1 हों।

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