14 / 24 · अवधारणा
Ready/valid और स्टॉल स्थिति
आउटपुट चरण out_ready=0 पर A रखता है और इनपुट B वैध है। अगले किनारे पर चरण और उत्पादक क्या करें?
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
केवल स्थानांतरण पर बढ़ें
उत्पादक वर्तमान आइटम उपलब्ध होने पर valid लगाता है। उपभोक्ता स्वीकार कर सकने पर ready लगाता है। दोनों सक्रिय वाले उर्ध्व किनारे पर एक स्थानांतरण होता है। तभी पिक्सेल निर्देशांक, लाइन बफ़र स्थिति और संबंधित संचय इनपुट बढ़ाएँ। केवल valid पर बढ़ना विराम में डेटा खोता है; केवल ready पर बढ़ना अनुपस्थित इनपुट गिनता है।
valid उच्च और ready निम्न हो तो समान डेटा और valid रखें। आउटपुट रुकने पर इनपुट स्वीकार जारी रखने के लिए भंडारण दें और बची क्षमता से readiness निकालें। उदाहरण RTL एक-आइटम चरण है: खाली या वर्तमान आइटम जा सकने पर नया स्वीकारता है।
स्थानांतरण क्रम उदाहरण
चक्र शून्य से चार में valid=[0,1,1,1,1] और ready=[0,1,0,1,1] से fire=[0,1,0,1,1]। पाँच क्लॉक तीन पिक्सेल स्वीकारते हैं। चक्र दो का स्टॉल आइटम तीन तक रहता है। चौड़ाई-चार पंक्ति काउंटर ने पहली पंक्ति पूरी नहीं की। स्थानांतरण के बदले क्लॉक गिनने से आगे हर विंडो निर्देशांक खिसकता है।
चरण A रखे, out_valid उच्च और out_ready निम्न हो तो in_ready निम्न और A बना है। out_ready उच्च होने पर उसी किनारे A भेजकर B स्वीकार सकता है। प्रतिस्थापन इनपुट बिना output valid साफ़ करता है। साथ प्रतिस्थापन अनुमत है या नहीं और उससे विलंबता क्या है, लिखें।
रीसेट डेटा के साथ वैधता साफ़ करता है। नए फ़्रेम को तय निर्देशांक और window-valid रीसेट चाहिए। अंतिम इनपुट लेना अंतिम आउटपुट उपयोग से अलग है; जल्दी done से नया फ़्रेम लंबित काम अधिलेखित कर सकता है।
कोड स्थानांतरण चरण है, पूरा कन्वोल्यूशन इंजन नहीं। स्थापित कार्यप्रवाह SystemVerilog संपादन और सिम्युलेशन समर्थित करे तो फ़ाइल स्वयं बनाकर विराम में स्थिरता और साथ प्रतिस्थापन जाँचें। यहाँ RTL सिम्युलेटर निष्पादन का दावा नहीं। आरेख fire समझाता है; पकड़ा हार्डवेयर ट्रेस नहीं।
module sample_stage (
input logic clk, reset,
input logic in_valid,
output logic in_ready,
input logic signed [7:0] in_data,
output logic out_valid,
input logic out_ready,
output logic signed [7:0] out_data
);
assign in_ready = !out_valid || out_ready;
always_ff @(posedge clk) begin
if (reset) begin
out_valid <= 1'b0;
out_data <= '0;
end else if (in_ready) begin
out_valid <= in_valid;
if (in_valid) out_data <= in_data;
end
end
endmoduleतरंगरूप डेटा देखें
| संकेत | तरंगरूप | बस मान |
|---|---|---|
| क्लॉक | p.... | |
| valid | 01111 | |
| ready | 01011 | |
| fire | 01011 |
खुद आज़माएँ
आउटपुट चरण out_ready=0 पर A रखता है और इनपुट B वैध है। अगले किनारे पर चरण और उत्पादक क्या करें?
व्याख्या पढ़ें
चरण in_ready निम्न रखता है और out_valid के साथ A रखता है। उत्पादक in_valid के साथ B रखता है। स्थिर आइटम बाद में ठीक एक बार जा सकते हैं।