एक घड़ी के दोनों किनारों का उपयोग करना


10

मैं वेरिलॉग और क्वार्टस II का उपयोग करके एक एल्टर साइक्लोन IV की प्रोग्रामिंग कर रहा हूं। मेरे डिजाइन में, मैं एक घड़ी के दोनों किनारों का उपयोग करना चाहूंगा ताकि मैं 50% कर्तव्य चक्र के साथ एक विषम कारक द्वारा घड़ी विभाजन कर सकूं। यहाँ मेरे कोड का एक टुकड़ा है:

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

अब जब मैं इसे संकलित करता हूं, तो क्वार्टस II निम्नलिखित त्रुटि फेंकता है:

वेरिलॉग एचडीएल हमेशा adc_clocking.v (83) में त्रुटि का निर्माण करता है: घटना नियंत्रण दोनों "चर_ low_jitter_clock_i" के सकारात्मक और नकारात्मक किनारों के लिए परीक्षण नहीं कर सकता है

मैं अपने डिज़ाइन में दिए गए घड़ी के सकारात्मक और नकारात्मक दोनों किनारों का उपयोग कैसे कर सकता हूं?

जवाबों:


7

जब आप किनारे-संवेदनशील हमेशा ब्लॉक में एक रजिस्टर में असाइन करते हैं, तो आप एक फ्लिप-फ्लॉप को परिभाषित कर रहे हैं। FPGAs में फ्लिप-फ्लॉप नहीं होते हैं जो एक घड़ी के दोनों किनारों पर ट्रिगर हो सकते हैं।

आप जो चाहते हैं, उसे करने के लिए, आपको हमेशा दो अलग-अलग ब्लॉकों की आवश्यकता होती है, जो घड़ी के प्रत्येक किनारे के लिए होता है, और फिर ग्लिच बनाए बिना दो ब्लॉकों के आउटपुट को संयोजित करने का एक तरीका पता चलता है।

उदाहरण के लिए, कोई भी हमेशा आपके प्रोग्राम योग्य डिवाइडर को ब्लॉक कर सकता है। इसे डिज़ाइन करें ताकि विषम संख्या दिए जाने पर आउटपुट ड्यूटी चक्र 50% से कम हो। 1/2 घड़ी द्वारा पहले ब्लॉक के आउटपुट में देरी करने के लिए, दूसरे ब्लॉक (दूसरे घड़ी के किनारे पर) का उपयोग करें, या फिर दो आउटपुट को एक साथ। विभक्त मानों के लिए दूसरे ब्लॉक का आउटपुट अक्षम करें।


कारण है कि मैं घड़ी के सकारात्मक और नकारात्मक दोनों किनारों का उपयोग करना चाहता हूं, 50% का कर्तव्य चक्र है।
रैंडमब्लू

हां, मुझे वह मिल गया। मेरा जवाब सीधे उस पते पर है। मैंने मान लिया कि आप पहले से ही जानते हैं कि 50% कर्तव्य चक्र कैसे प्राप्त करें जब विभक्त मूल्य भी हो। क्या स्पष्ट नहीं है?
डेव ट्वीड

कोई दोहरे किनारे फ्लिप-फ्लॉप? इसका कोई अंतर्निहित कारण नहीं है। यह सिर्फ पता चला है कि कोई भी उन्हें नहीं बना रहा है (या कम से कम कोई भी जिसे हम जानते हैं)। जैसा कि मार्टिन बताते हैं, एक सीपीएलडी है जो दोहरी-किनारे फ्लिप-फ्लॉप का समर्थन करता है: xilinx.com/products/silicon-devices/cpld/coolrunner-ii/…
फिलिप

3

यदि यह आंतरिक तर्क के लिए है, तो आपको संभवतः फ्लिपफ्लॉप के बहुत करीब लिखना होगा जो उपलब्ध हैं। Coolrunner-II को छोड़कर मैं स्वाभाविक रूप से डबल-एज रजिस्टरों के साथ किसी भी प्रोग्रामेबल लॉजिक के बारे में नहीं जानता।

इसलिए, आपको दो alwaysब्लॉक बनाने होंगे , एक नेगडेज के लिए और एक पोज़ेज के लिए और कुछ कॉम्बिनेटर लॉजिक के साथ अपने आउटपुट को संयोजित करना होगा।

या घड़ी को दोगुना करने के लिए PLL का उपयोग करें और फिर आप पारंपरिक एकल-धारित तर्क का उपयोग कर सकते हैं।



1

जैसा कि डेव ट्वीड नोट करता है, जब तक कि FPGA में फ्लिप फ्लॉप हार्डवेयर शामिल नहीं होता है जो कि घड़ी के दोनों किनारों पर काम कर सकता है, पारंपरिक सिंगल-एज फ्लिप फ्लॉप का उपयोग करके वांछित व्यवहार को लागू करने के लिए अपना तर्क लिखना आवश्यक होगा। जबकि कई अलग-अलग तरीके हैं जो एक सर्किट को लागू कर सकते हैं जो एक डबल-एज फ्लिप फ्लॉप की तरह व्यवहार करता है, ऐसे सर्किट आमतौर पर कुछ समय की कमी को जोड़ते हैं जो फ्लिप फ्लॉप से ​​जुड़े लोगों से अलग होते हैं।

उदाहरण के लिए, एक साधारण दृष्टिकोण में दो 2-इनपुट एक्सर्स और "टी" की एक जोड़ी का एक मॉड्यूल होता है, फ्लिप फ्लॉप (जहां एक घड़ी पल्स आने पर इनपुट की स्थिति इंगित करती है कि क्या घड़ी की धार आउटपुट को टॉगल करना चाहिए), एक एक उभरते हुए किनारे से शुरू हुआ और एक गिरने वाले किनारे से शुरू हुआ। मॉड्यूल का आउटपुट फ्लिप फ्लॉप के आउटपुट का xor होगा, और दोनों फ्लिप फ्लॉप का इनपुट मॉड्यूल के आउटपुट और उसके इनपुट का xor होगा।

इस तरह से तैयार किया गया सर्किट अनिवार्य रूप से डबल-एज फ्लिप फ्लॉप की तरह काम करेगा, हालांकि लंबे समय तक सेटअप और प्रचार समय के साथ, लेकिन अतिरिक्त समय की कमी के साथ। एक सामान्य फ्लिप फ़्लॉप जो फीडबैक पथ पर नहीं है अगर घड़ी की धार के शुरू होने पर रनों की दालों का एक गुच्छा होता है बशर्ते कि घड़ी एक वैध स्तर पर स्थिर हो, और बशर्ते कि सेटअप समय की कमी, पहले से मापा जाता है पहली बार पल्स और होल्ड टाइम और क्लॉक-एक्टिव टाइम की कमी, उस समय से मापा जाता है जब घड़ी पल्स स्टिकली एक्टिव होती है, पूरी होती है। घड़ी के अस्थिर होने के दौरान फ्लिप फ्लॉप आउटपुट का व्यवहार अपरिभाषित होगा, लेकिन घड़ी के स्थिर होने के बाद इसे परिभाषित किया जाएगा। डबल-एक्सआर-डबल-फ्लॉप मॉड्यूल अतिरिक्त समय की बाधा को जोड़ देगा कि किसी भी घड़ी के किनारे जो आउटपुट को बदल देगा, किसी भी अन्य घड़ी के किनारे से एक सुरक्षित दूरी होनी चाहिए जो ऐसा कर सकती है। उस बाधा को पूरा करने में असफल, उदाहरण के लिए, तीन क्लॉक किनारों के साथ बहुत करीबी उत्तराधिकार में जबकि इनपुट आउटपुट से मेल नहीं खाता है, आउटपुट को अनिश्चित या मेटास्टेबल स्थिति में छोड़ सकता है (ध्यान दें कि किनारों की एक समान संख्या को शामिल करने वाले परिदृश्य चिंता का विषय नहीं हैं। , क्योंकि इस तरह के परिदृश्यों में रनिंग दालों के अलावा कुछ भी शामिल नहीं होगा; थ्री-एज केस (या एक से अधिक अन्य विषम संख्या वाले मामले) एक चिंता का विषय है क्योंकि रन-दाल के बाद एक वैध पल्स होगा।

एक वैकल्पिक सर्किट डिज़ाइन में ऊपर की तरह दो फ्लिप फ्लॉप होंगे, लेकिन अपने आउटपुट को मल्टीप्लेक्स में फीड करें। इस सर्किट को खराब दालों द्वारा खराब स्थिति में नहीं फेंका जाएगा, और इसकी क्लॉकिंग बाधाएं अंतर्निहित कुंडी के समान होंगी, लेकिन इसका नुकसान यह होगा कि एक आउटपुट जो उच्च था और रहना चाहिए (या कम था और कम रहना चाहिए) ) तो एक घड़ी किनारे पर संक्षेप में गड़बड़ कर सकता है। कुछ सर्किट में जो मायने नहीं रखता, लेकिन दूसरों में, यह होगा।

यह संभव है कि तर्क संश्लेषण उपकरण के लिए डबल-एज फ्लिप फ्लॉप को स्वचालित रूप से लागू करना संभव होगा, विश्लेषण करके कि समय की कमी को महत्वपूर्ण के रूप में निर्दिष्ट किया गया है, लेकिन ऐसा करना कुछ हद तक मुश्किल होगा। यह जोखिम भी बढ़ाएगा कि एक डिजाइन में एक छोटा सा बदलाव कार्यान्वयन में एक बड़ा बदलाव हो सकता है और इस तरह व्यवहार में एक महत्वपूर्ण और अप्रत्याशित परिवर्तन होता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.