Altifigence Academy

32 / 37 · प्रयोग

एकीकृत अभ्यास: आवर्ती पल्स और enable संचायक

पुराने मान से मॉड्यूल हस्तांतरण तय करें और विराम, लगातार पल्स तथा साथ रीसेट जाँचें।

जोड़ने से पहले कनेक्शन तय करें

enable=1 वाले हर बढ़ते किनारे पर बिना चिह्न चार-बिट sample स्वीकार करें। हर N स्वीकार sample पर रजिस्टर वाला pulse बने। संचायक अगले बढ़ते किनारे पर pulse और उसका सुरक्षित sample लेता है, तब enable=0 होने पर भी। आठ-बिट total modulo 256 घूमता है। सिंक्रोनस रीसेट चरण साफ करता और लंबित sample हटाता है। एक किनारे का विलंब अनुबंध है: संचायक पुराने pulse/saved_sample पढ़ता है, उसी किनारे बने नए नॉनब्लॉकिंग मान नहीं। modulo_tick.sv और यह periodic_accumulator.sv रखें; N धनात्मक है।

SystemVerilog
module periodic_accumulator #(parameter integer N = 3) (
  input  logic       clk, rst, enable,
  input  logic [3:0] sample,
  output logic       pulse,
  output logic [7:0] total
);
  localparam integer CW = (N <= 1) ? 1 : $clog2(N);
  wire [CW-1:0] count;
  logic [3:0] saved_sample;
  modulo_tick #(.N(N)) tick_u (
    .clk(clk), .rst(rst), .enable(enable),
    .count(count), .pulse(pulse)
  );
  always_ff @(posedge clk) begin
    if (rst) saved_sample <= 4'b0;
    else if (enable) saved_sample <= sample;
  end
  always_ff @(posedge clk) begin
    if (rst) total <= 8'b0;
    else if (pulse) total <= total + {4'b0, saved_sample};
  end
endmodule

डेटा और घटना साथ देखें

N=3, इनपुट किनारे से पहले और आउटपुट बाद में हैं।

किनाराrstenablesampleबाद में pulseबाद में total
E011900
E101200
E201400
E301710
E400907
E501107
E601307
E701517
E8111500

E4 पर 7 जुड़ता है, बाहरी sample=9 नहीं। enable केवल नई स्वीकृति नियंत्रित करता है, लंबित घटना नहीं मिटाता। E8 पर 5 हटता और total साफ होता है। उपयोग में enable && pulse लगाने से E4 खो जाएगा।

सिस्टम सीमा पर संदर्भ

स्वीकार संख्या, वैकल्पिक लंबित मान और पूर्णांक total रखें। बिना रीसेट वाले किनारे पर पहले पुराना लंबित मान modulo 256 जोड़ें; फिर वर्तमान enable/sample से Nवीं स्वीकृति पर नया लंबित मान बनाएँ। रीसेट सब साफ करता है। tick_u.count या saved_sample न पढ़ें। गिरते किनारे पर उत्तेजना दें और बाद में pulse, total, घटना बिना रुकना तथा उपयोग हो चुका मान हटना जाँचें।

जोड़ने की त्रुटियाँ कवर करें

  • N=1 लगातार पल्स देता है: हर sample अगले किनारे पर ठीक एक बार उपयोग हो।
  • N=3 में अंतिम sample से पहले/बाद विराम: स्वीकृति गिनें, हर क्लॉक नहीं।
  • enable=0 पर लंबित डेटा लेते समय बाहरी sample बदलें: सुरक्षित मान ही लें।
  • लंबित घटना के साथ रीसेट घटना और total हटाए।
  • 255 से अधिक जोड़कर modulo 256 जाँचें।

saved_sample की जगह sample रखें: E4 विफल होना चाहिए। उपयोग को enable से रोकें और दूसरी त्रुटि पकड़ें। PASS से पहले स्रोत बहाल करें। जाँचा अनुबंध कार्यात्मक, एक क्लॉक और सीमित चौड़ाई का है; यह CDC, भौतिक timing closure या DDS के मुफ़्त उत्पाद अभ्यास का प्रमाण नहीं।

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