14 / 24 · अवधारणा
एक स्थान वाला लचीला रजिस्टर डिज़ाइन करें
खाली स्थान में इनपुट स्वीकार करें या उसी समय उपयोग हुए आइटम का स्थान लें।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
उपलब्ध भंडारण से ready निकालें
एक स्थान वाले बफ़र में full बिट और पेलोड रजिस्टर होता है। खाली होने पर वह प्राप्तकर्ता स्टॉल होने पर भी इनपुट स्वीकार कर सकता है। भरा होने पर उसी किनारे पर मौजूदा आउटपुट उपयोग होने से उसका प्रतिस्थापन स्वीकार कर सकता है। इसलिए input-ready, !full OR output-ready है और output-valid, full है। इस रजिस्टर वाले बफ़र में डेटा संयोजी रूप से सीधे पार नहीं होता।
input-ready उच्च हो तो अगला full, input-valid के बराबर है। इनपुट होने पर पेलोड कैप्चर करें; नहीं हो तो स्थान खाली करें। input-ready निम्न हो तो full और पेलोड बनाए रखें। केवल आउटपुट स्थानांतरित होने पर full साफ़ करने से साथ में आया प्रतिस्थापन खो जाता है। केवल input-valid पर कैप्चर करना भरे, स्टॉल किए स्थान को अधिलेखित करता है।
module elastic_byte (
input logic clk, rst,
input logic in_valid,
output logic in_ready,
input logic [7:0] in_data, in_tag,
output logic out_valid,
input logic out_ready,
output logic [7:0] out_data, out_tag
);
logic full;
assign in_ready = !full || out_ready;
assign out_valid = full;
always_ff @(posedge clk) begin
if (rst) full <= 1'b0;
else if (in_ready) begin
full <= in_valid;
if (in_valid) begin
out_data <= in_data;
out_tag <= in_tag;
end
end
end
endmodule| पुराना full | out-ready | in-valid | क्रिया |
|---|---|---|---|
| 0 | 0 | 1 | इनपुट संग्रहीत करें |
| 1 | 0 | 1 | इनपुट अस्वीकार करें और आउटपुट रखें |
| 1 | 1 | 1 | पुराना आइटम दें और प्रतिस्थापन रखें |
| 1 | 1 | 0 | पुराना आइटम दें और स्थान खाली करें |
किनारा 0 पर tag0,y9 रखें। किनारा 1 पर स्टॉल करें। किनारा 2 पर tag0 उपयोग करें और tag1,y12 रखें; स्थान भरा रहता है। किनारा 3 पर tag1 उपयोग करें और इनपुट नहीं हो तो खाली करें। प्रतिस्थापन से प्रति चक्र एक लेनदेन संभव होता है।
कई चरण जोड़ने से पीछे की ओर संयोजी ready पथ बनता है। ready को रजिस्टर में रखने के लिए अतिरिक्त भंडारण चाहिए जो स्टॉल सूचना प्रभावी होने से पहले पहुँचने वाली वस्तुएँ रख सके। बस के विशिष्ट संयोजी पथ प्रतिबंध अलग जाँचें। पेलोड चौड़ाई कुछ भी हो, डेटा और सभी साथ के फ़ील्ड एक ही शर्त पर रखें और अपडेट के चारों मामले सत्यापित करें।
खुद आज़माएँ
full=1, out-ready=1 और in-valid=1 वाले किनारे पर tag7 उपयोग होता है और tag8 प्रस्तुत है। अगला full और out-tag क्या है? हर उपयोग पर full साफ़ करने से क्या गलत होगा?
व्याख्या पढ़ें
Input-ready उच्च है, इसलिए tag8 रखें और full=1 बनाए रखें। Out-tag का मान 8 होता है। हर बार full साफ़ करने से स्वीकार किया tag8 खो जाता है।