एसडीसी के माध्यम से ASIC समय की कमी: एक बहुविकल्पीय घड़ी को सही ढंग से कैसे निर्दिष्ट करें?


10

परिचय

इंटरनेट पर और कुछ प्रशिक्षण वर्गों में कई बार परस्पर विरोधी या अधूरी जानकारी पाए जाने के बाद, एसडीसी प्रारूप में समय की कमी को सही तरीके से कैसे बनाया जाए , इसके लिए मैं ईई समुदाय से कुछ सामान्य घड़ी बनाने वाली संरचनाओं के साथ मदद के लिए पूछना चाहता हूं।

मुझे पता है कि इस बात पर मतभेद हैं कि कोई ASIC या FPGA पर एक निश्चित कार्यक्षमता को कैसे लागू करेगा (मैंने दोनों के साथ काम किया है), लेकिन मुझे लगता है कि किसी दिए गए ढांचे के समय को सामान्य करने का एक सही तरीका होना चाहिए , स्वतंत्र अंतर्निहित तकनीक - कृपया मुझे बताएं कि क्या मैं उस पर गलत हूं।

विभिन्न विक्रेताओं के कार्यान्वयन और समय विश्लेषण के लिए विभिन्न उपकरणों के बीच कुछ अंतर भी हैं (Synopsys एक एसडीसी पार्सर स्रोत कोड की पेशकश के बावजूद), लेकिन मुझे उम्मीद है कि वे मुख्य रूप से एक वाक्यविन्यास मुद्दा है जिसे प्रलेखन में देखा जा सकता है।

सवाल

यह निम्नलिखित घड़ी मल्टीप्लेक्स संरचना के बारे में है, जो कि क्लक्जेन मॉड्यूल का हिस्सा है जो फिर से एक बड़े डिजाइन का हिस्सा है: घड़ी मल्टीप्लेक्स स्कीमर

जबकि ext_clkइनपुट बाहर से डिजाइन (एक इनपुट पिन के माध्यम से प्रवेश) को उत्पन्न करने की अपेक्षा की जाती है, clk0और clk4संकेत भी उत्पन्न होती है और द्वारा उपयोग किया जाता clkgen मॉड्यूल (मेरी संबंधित देखना लहर घड़ी प्रश्न जानकारी के लिए) और संबद्ध कर दिया है घड़ी की कमी नामित baseclkऔर div4clk, क्रमशः।

सवाल यह है कि बाधाओं को कैसे निर्दिष्ट किया जाए ताकि टाइमिंग एनालाइजर हो

  1. व्यवहार करता है cpu_clkएक मल्टिप्लेक्स घड़ी के रूप में है जो या तो स्रोत घड़ियों में से एक (हो सकता है fast_clkया slow_clkया ext_clk), विभिन्न माध्यम से देरी लेने AND और OR फाटकों खाते में
  2. जबकि एक ही समय में स्रोत घड़ियों के बीच के रास्तों को नहीं काटना जो डिज़ाइन में कहीं और उपयोग किए जाते हैं।

जबकि ऑन-चिप घड़ी मल्टीप्लेक्स का सबसे सरल मामला सिर्फ set_clock_groupsएसडीसी के बयान की आवश्यकता है :

set_clock_groups -logically_exclusive -group {baseclk} -group {div4clk} -group {ext_clk}

... दी गई संरचना में, यह इस तथ्य से जटिल है कि clk0( fast_clkआउटपुट के माध्यम से ) और clk4(के माध्यम से slow_clk) अभी भी डिजाइन में उपयोग किया जाता है, भले ही cpu_clkकॉन्फ़िगर किया गया हो, ext_clkजब यह केवल use_extमुखर हो।

जैसा कि यहाँ बताया गया है , set_clock_groupsऊपर दिया गया आदेश निम्नलिखित का कारण होगा:

यह आदेश प्रत्येक समूह में प्रत्येक घड़ी से प्रत्येक समूह में प्रत्येक घड़ी को प्रत्येक समूह में और इसके विपरीत set_false_path को कॉल करने के बराबर है

... जो गलत होगा, क्योंकि अन्य घड़ियां अभी भी कहीं और इस्तेमाल की जाती हैं।

अतिरिक्त जानकारी

use_clk0, use_clk4और use_extजानकारी के इस तरह से उनमें से केवल एक किसी भी समय पर अधिक है कि में उत्पन्न कर रहे हैं। हालांकि इसका उपयोग सभी घड़ियों को रोकने के लिए किया जा सकता है यदि सभी use_*इनपुट कम हैं, तो इस प्रश्न का ध्यान इस संरचना की घड़ी बहुसंकेतन संपत्ति पर है।

X2 उदाहरण (एक सरल बफर) योजनाबद्ध में सिर्फ एक जगह धारक स्वत: जगह और मार्ग उपकरण आम तौर पर कहीं भी जगह बफ़र्स (जैसे के बीच के रूप में करने के लिए स्वतंत्र होने का मुद्दा उजागर करने के लिए है and_cpu_1/zऔर or_cpu1/in2पिन)। आदर्श रूप से, समय की कमी से अप्रभावित रहना चाहिए।


क्या आप इसे एक बहुत ही विशिष्ट, बहुत ही संकीर्ण प्रश्न तक सीमित करके इसे अधिक सफल बनाने की कोशिश कर सकते हैं? मेरे लिए यह समझना कठिन है कि महत्वपूर्ण जानकारी क्या है, और आप यहाँ वास्तव में क्या हैं।
ट्रैविसबार्टले

@ trav1s: मैंने प्रश्न का पुनर्गठन किया। कृपया मुझे बताएं कि क्या आपको किसी स्पष्टीकरण की आवश्यकता है।
फ्रेंडफएक्स

जवाबों:


3

And_ * नेट पर 1 घड़ियों को विभाजित करके परिभाषित करें और उन्हें शारीरिक रूप से अनन्य घोषित करें। ताल RTL कंपाइलर cpu_clk (एक घड़ी के लिए एक पथ) द्वारा देखे गए रजिस्टरों के लिए 3 समय पथ उत्पन्न करके स्थिति को सही ढंग से संभालता है। सीधे clk0, clk4 और clk_ext द्वारा संचालित रजिस्टर की अपनी टाइमिंग आर्क्स है।

create_generated_clock -source [get_ports clk0] \
-divide_by 1 -name and_clk0    [get_pins and_cpu_1/Y]

create_generated_clock -source [get_ports clk4] \
-divide_by 1 -name and_clk4    [get_pins and_cpu_2/Y]

create_generated_clock -source [get_ports clk_ext] \
-divide_by 1 -name and_clk_ext [get_pins and_cpu_ext1/Y]

set_clock_groups \
-physically_exclusive \
-group [get_clocks and_clk0] \
-group [get_clocks and_clk4] \
-group [get_clocks and_clk_ext]

तुम्हारे सुझाव के लिए धन्यवाद। दुर्भाग्य से मैं वर्तमान में इसे सत्यापित नहीं कर सकता, लेकिन आपकी अवधारणा मुझे काफी आशाजनक लगती है। क्या आप जाँच कर सकते हैं कि क्या बीच के रास्तों को cast_clk, cpu_clkऔर slow_clkअभी भी जाँच किया गया है (अर्थात अनन्य घड़ी समूहों के कारण अपवाद नहीं), जबकि उसी समय उनके संबंधित इनपुट घड़ियों द्वारा विवश किया जा रहा है? अंततः, मैं इस प्रश्न का आधिकारिक उत्तर ढूंढ रहा हूँ।
फ्रेंडएफएक्स

@FriendFX मैंने RTL संकलक में कोड का परीक्षण किया है और पथ सही ढंग से अनुमानित हैं।
रेवंत कामराज

बस आपको बताने के लिए, मैंने एकल-सेल घड़ी मल्टीप्लेक्सर्स और एक समाधान (कम से कम कुछ टूल के लिए) के बारे में कुछ जानकारी जोड़ी।
फ्रेंड एफएक्स

1

हालांकि यह एक पुराना धागा है, जो अनुत्तरित है ... यह सिंक बनाम async घड़ियों की कुछ बुनियादी समझ रखता है

  • मूल रूप से, सिंक्रोनस घड़ियों को कम से कम देरी के साथ चरण में सिंक होना चाहिए, ताकि Mux'ing एक गड़बड़ पैदा न करे।
    • यह अक्सर पूर्ण गति घड़ी में सभी gated घड़ी स्रोतों को फिर से खोलकर पूरा किया जाता है।
  • Asynch घड़ियों समय के लिए महत्वपूर्ण नहीं हैं, इसलिए देरी की अनुमति है। जैसे कि रिपल काउंटर्स।

यहाँ छवि विवरण दर्ज करें


इस पुराने प्रश्न को देखने के लिए धन्यवाद। मेरे मामले में, मैं पूरी गति की घड़ी के साथ घड़ियों को फिर से सिंक्रनाइज़ नहीं करना चाहता, जैसा कि सर्किट में दिखाया गया है। फिर भी गायब है, मेरे सवाल का मुख्य हिस्सा है, अर्थात् सही SDC बयान इस सर्किट को ध्यान में रखते हुए स्रोत घड़ियों की समकालिकता के साथ-साथ उन्हें समान तुल्यकालिक डिजाइन में उपयोग किया जा रहा है, क्योंकि उल्लेखित set_clock_groupsउदाहरण लिंक गलत तरीके से कटने का दावा करता है। इन घड़ियों के बीच के रास्ते।
फ्रेंडएफएक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.