19 / 37 · अवधारणा
parameter, localparam,$clog2 और सीमा कॉन्फ़िगरेशन
चलते समय इनपुट और स्थिर सेटिंग अलग करें; N=1 और दो की घात न होने पर चौड़ाई व समाप्ति बनाएँ।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
पैरामीटर elaboration में स्थिर होते हैं
पोर्ट संचालन में बदलता है; parameter संरचना बनने से पहले सेटिंग करता है; localparam व्युत्पन्न स्थिरांक का नाम है जिसे इंस्टेंस नहीं बदलता। वे हर चक्र के चर नहीं। Modulo-N काउंटर 0..N−1 लेता है। N≥2 पर चौड़ाई $clog2(N) है; N=1 पर शून्य, इसलिए कम-से-कम एक बिट रखें। N=0 अनुबंध के बाहर है।
सक्षम किनारे पर पूरा होना
पुराना count, N−1 से शून्य होने पर pulse रजिस्टर होता है। अक्षम किनारा count रखता है और pulse साफ करता है। सिंक्रोनस रीसेट दोनों साफ करता है और enable पर प्राथमिकता रखता है। N समर्थित सीमा का धनात्मक पूर्णांक है।
module modulo_tick #(
parameter integer N = 5,
parameter integer CW = (N <= 1) ? 1 : $clog2(N)
) (
input logic clk, rst, enable,
output logic [CW-1:0] count,
output logic pulse
);
localparam logic [CW-1:0] LAST = CW'(N-1);
always_ff @(posedge clk) begin
if (rst) begin
count <= '0;
pulse <= 1'b0;
end else begin
pulse <= 1'b0;
if (enable) begin
if (count >= LAST) begin
count <= '0;
pulse <= 1'b1;
end else count <= count + 1'b1;
end
end
end
endmoduleCW पोर्ट में आता है इसलिए बाहर से सेट हो सकता है। डिफ़ॉल्ट या ≥max(1,$clog2(N)) रखें। छोटा CW, LAST काटता है; बड़ा CW अनुपयोगी कोड देता है जिन्हें >= सक्षम किनारे पर शून्य लाता है। CW'(N-1) आकार बताता है, गलत पैरामीटर ठीक नहीं करता। Elaboration से पहले सत्यापित करें: चलती assertion गलत घोषणा नहीं ठीक करती।
कॉन्फ़िगरेशन सारणी
| N | डिफ़ॉल्ट CW | रीसेट के बाद सक्षम किनारों पर count | बाद में pulse |
|---|---|---|---|
| 1 | 1 | 0,0,0 | 1,1,1 |
| 2 | 1 | 1,0,1 | 0,1,0 |
| 5 | 3 | 1,2,3,4,0 | 0,0,0,0,1 |
| 8 | 3 | 1,2,3,4,5,6,7,0 | 0,0,0,0,0,0,0,1 |
एक भंडारण बिट होने पर N=1 की दो वैध अवस्थाएँ नहीं बनतीं। N=5 सामान्यतः 5,6,7 नहीं जाता। केवल दो की घात जाँचना वापसी का स्पष्ट तुलना नियम छूटना छिपा देगा।
अभ्यास: व्यवहार और अस्वीकृति
N=1,2,5,8 बनाएँ, कम-से-कम दो अवधि चलाएँ, अंतिम मान पर रोकें और reset साथ enable लगाएँ। हर count/pulse तुलना करें। पूर्णांक संदर्भ रीसेट पर साफ होता है, pulse पहले शून्य करता है और enable पर modulo N बढ़ाकर वापसी पहचानता है; CW या अंदर की अवस्था नहीं लेता। N=0 और अपर्याप्त CW का अस्वीकार जाँचें। पुनः उपयोग का प्रमाण घोषित और जाँची सीमा के लिए है, सिर्फ एक सफल डिफ़ॉल्ट के लिए नहीं।