मैं Xilinx के उपकरणों से परिचित नहीं हूं, लेकिन मैं Altera के साथ हूं, इसलिए मैं आपको उनके बारे में बताऊंगा। Xilinx और दूसरों को बहुत अलग नहीं होना चाहिए।
Verilog
पहली बात जो आपको करने की ज़रूरत है वह है वेरिलोग सीखना । यह आपके सिर को चोट पहुंचाएगा क्योंकि वेरिलॉग (और कुछ इसी तरह का वीएचडीएल) पहली बार एक सिमुलेशन भाषा के रूप में डिज़ाइन किया गया था , और कई निर्माण (जैसे #5
कि "5 समय के चरणों का इंतजार करें", एक समय कदम आमतौर पर एक नैनोसेकंड होता है)। इसलिए आपके वेरिलॉग कोड को संश्लेषित करने के लिए ध्यान में रखने के लिए बहुत सारे प्रतिबंध हैं , अर्थात एक FPGA के लिए बिटस्ट्रीम में संकलित करना।
सबसे बड़ा झटका, हालांकि, यह है कि आप वेरिलोग (और वीएचडीएल) में जो लिखते हैं वह वह व्यवहार है जो आप सिस्टम से उम्मीद करते हैं , और कंपाइलर आपके विवरण से उचित तर्क को प्रभावित करता है। यदि आप सावधान नहीं हैं, तो आप इस से बहुत सारे गंदा कीड़े प्राप्त कर सकते हैं।
उदाहरण के लिए, D फ्लिप-फ्लॉप जैसा दिखता है:
always @(posedge RESET or posedge CLK)
begin
if(RESET)
Q <= 1'b0;
else if(CLK_ENA)
Q <= D;
end
यह वर्णन करता है कि DFF कैसे काम करता है, और संकलक को इसका विश्लेषण करना है और यह पता लगाना है कि आप DFF चाहते हैं। @(...)
एक कहा जाता है संवेदनशीलता सूची है, जो संकेत देता है कि कोड ब्लॉक के पुनर्मूल्यांकन को गति प्रदान की एक सूची है; इस प्रकार, इस ब्लॉक में, Q
केवल तभी परिवर्तन होता है जब वहाँ पर बढ़त होती है RESET
या CLK
(यह एक सक्रिय-उच्च रीसेट के लिए है)। यदि आप संवेदनशीलता सूची में कुछ भूल जाते हैं (जिसमें किसी कॉम्बिनेशन लॉजिक ब्लॉक के लिए सभी राइट-साइड-साइड वैरिएबल posedge
या किसी negedge
संशोधक के बिना होना चाहिए ) तो कंपाइलर एक त्रुटि को कॉल करने के बजाय आवश्यकतानुसार लैचिस को संश्लेषित करेगा। क्रेजी, लेकिन यह है कि यह कैसा है, क्योंकि वेरिलॉग मूल रूप से एक सिमुलेशन भाषा थी जो कि कार्यान्वयन के विवरण को छिपाती थी (और इस तरह की आवश्यकता नहीं थी)। VHDL एक ही है लेकिन बहुत अधिक क्रिया है।
अंत में, सिस्टमविलेरोग नामक वेरिलॉग का एक नया संस्करण कुछ साल पहले जारी किया गया था, जो लेखन कोड को बहुत आसान बना देता है । यदि संभव हो, तो इस भाषा को सीखें, क्योंकि Xilinx ISE और Altera Quartus II दोनों ही इसका समर्थन करते हैं। मुख्य समस्या अच्छी संदर्भ सामग्री की पूरी तरह से कमी है।
DFF का SystemVerilog संस्करण कुछ छोटी चीजों को साफ करता है:
always_ff @(posedge RESET, posedge CLK)
begin
if(RESET)
Q <= '0;
else if(CLK_ENA)
Q <= D;
end
ध्यान दें कि संवेदनशीलता सूची में सिग्नल अल्पविराम द्वारा अलग किए गए हैं। यह इसलिए है क्योंकि वहाँ काम नहीं कर सकता or
था भ्रामक था and
। इसके अलावा के प्रतिस्थापन ध्यान दें 1'b0
(एक 0
साथ बिट) '0
(एक प्रतीक है कि हालांकि कई लोगों के लिए फैलता है 0
; बिट्स क्या यह करने के लिए आवंटित किया जा रहा है के आधार पर की जरूरत है बहुत पैरामिट्रीकृत मॉड्यूल के साथ और अधिक लचीला)। अंत में, के प्रतिस्थापन पर ध्यान दें always
(जो किसी भी चीज़ के लिए इस्तेमाल किया जा सकता है; संयोजन तर्क, latches और फ्लिप फ्लॉप) always_ff
जिसके साथ सामग्री को फ्लिप-फ्लॉप के लिए संश्लेषित करने की आवश्यकता होती है। वहाँ भी है always_comb
जो संवेदनशीलता सूची को समाप्त कर देता है, क्योंकि यह इनपुट से ब्लॉक तक संवेदनशीलता का काम करता है।
एल्टर के डिजाइन सॉफ्टवेयर को क्वार्टस II कहा जाता है, और आप वेब संस्करण की तलाश करेंगे । (सदस्यता संस्करण बल्कि महंगे हैं और केवल सबसे तेज़ या सबसे हाल के FPGA मॉडल के लिए आवश्यक हैं।)
दुख की बात यह है कि मुझे इस विषय पर एक अच्छी किताब नहीं मिली है। मैंने जो सीखा है, मैंने कई स्रोतों से एक साथ चीज़ों को पीकर प्राप्त किया है, जैसे कि वेरिलोग किताबें जो आपको यह बताने का अच्छा काम नहीं करती हैं कि क्या संश्लेषित है और क्या नहीं है, और उदाहरण कोड। क्वार्ट्स II में एक "इन्सर्ट टेम्पलेट" कमांड है जो डी फ्लिप-फ्लॉप से लेकर राज्य मशीनों तक कई सामान्य संरचनाओं के लिए टेम्पलेट कोड सम्मिलित करता है।
डेमो हार्डवेयर
वेरिलोग में अपना प्रोसेसर लागू करने के बाद, आपको इसे बनाने की आवश्यकता है। कुछ समय के लिए, क्वार्टस चिप को चुनें (आपको परिवार चुनना होगा; मैं साइक्लोन IV की सिफारिश करूंगा) और पिनआउट। एक बार जब यह biulds, आपको पता चल जाएगा कि आपको कितनी चिप की आवश्यकता है यह आपको बताएगा कि आपने कितने तर्क तत्व, फ्लिप फ्लॉप, रैम बिट्स, आदि का उपयोग किया। सुनिश्चित करें कि आप उनमें से किसी पर भी 50% से अधिक नहीं हैं; यदि आप हैं, तो उस चिप को देखें जिसे संकलक ने चुना है और मैन्युअल रूप से अगले बड़े (तर्क तत्वों में) चिप का चयन करें जिसमें कम से कम कई पिन हैं, और 50% से कम उपयोग होने तक दोहराएं।
फिर एक डेमो बोर्ड के लिए खरीदारी करें जिसमें एक चिप है जो कम से कम उतना बड़ा है जितना कि आपने आखिरकार बनाया था। यह देखने के लिए जांचें कि इसमें परिधीय और / या I / O कनेक्टर हैं जिनकी आपको आवश्यकता होगी। किसी भी लापता हार्डवेयर को प्रदान करने के लिए एक विस्तार कनेक्टर में प्लग करने वाले एक बेटीकार्ड का निर्माण करना असामान्य नहीं है।
अब जब आपने अपना हार्डवेयर चुन लिया है, तो वास्तविक पिनआउट का पता लगाएं और पिन पिनर का उपयोग करके सही पिनों पर सही सिग्नल लगाएं। डेमो बोर्ड में एक उपयोगकर्ता गाइड होगा जो आपको बताता है कि कौन से पिन डेमो बोर्ड पर किस डिवाइस या कनेक्टर पिन के लिए वायर्ड हैं।
एक बार जब आप पिनआउट सेट कर लेते हैं, तो इसे फिर से बनाएं ताकि यह आपके इच्छित पिन का उपयोग कर सके। इस बात को ध्यान में रखें कि सिस्टम क्लॉक जैसे कुछ संकेतों को समर्पित इनपुट पिन की आवश्यकता होगी (इसलिए वे आंतरिक PLL में सीधे रूट करते हैं)।
अपने डिज़ाइनर को सीधे FPGA में डाउनलोड करने के लिए प्रोग्रामर का उपयोग करें (वह शिफ्ट रजिस्टर मैंने कुछ समय पहले बताया था)। अब आप परिचित एडिट-कम्पाइल-रन डिबगिंग चक्र में हैं। काम होने तक उस पर मारो।
एक बार जब यह काम करता है, तो आप कोड को ऑनबोर्ड कॉन्फ़िगरेशन डिवाइस में डाउनलोड करने के लिए प्रोग्रामर का उपयोग कर सकते हैं ताकि आपका प्रोग्राम पावर-ऑन पर लोड हो सके और चले।
यह बहुत लंबा था, और मुझे आशा है कि इसने कुछ मदद की। वहाँ एक है बहुत कुछ जानने के लिए; यह एक नई प्रोग्रामिंग भाषा सीखना पसंद नहीं है, क्योंकि यह एक नई प्रोग्रामिंग प्रतिमान सीखने की तरह है, जैसे प्रक्रियात्मक से कार्यात्मक भाषाओं में जाना। वेरिलॉग एक साथ भाषा है; अधिकांश कोड हमेशा निष्पादित होता है।
सौभाग्य!