RENESAS ForgeFPGA सॉफ्टवेयर सिमुलेशन
महत्वपूर्ण सूचना
सिमुलेशन एक ऐसी तकनीक है जिसमें डिज़ाइन पर अलग-अलग समय पर अलग-अलग इनपुट स्टिमुलस लागू किए जाते हैं ताकि यह जांचा जा सके कि RTL कोड इच्छित तरीके से व्यवहार करता है या नहीं। इसका उपयोग डिज़ाइन की मजबूती को सत्यापित करने के लिए किया जाता है। सिमुलेशन उपयोगकर्ता को यह करने की अनुमति देता है view डिज़ाइन में डिज़ाइन विवरण कैसे काम करता है, यह समझने के लिए संबंधित संकेतों का समय आरेख file व्यवहार करता है.
टेस्टबेंच कोड के टुकड़े होते हैं जिनका उपयोग सिमुलेशन के लिए किया जाता है। एक साधारण टेस्टबेंच यूनिट अंडर टेस्ट (UUT) को इंस्टेंटिएट करेगा और इनपुट को संचालित करेगा। गो कॉन्फ़िगर सॉफ़्टवेयर टेस्टबेंच में दिए गए स्टिमुलस के साथ सिमुलेशन तरंगों का निरीक्षण करने के लिए इकारस वेरिलॉग (iVerilog) और GTKWave का उपयोग करता है।
यह दस्तावेज़ आपके सिस्टम पर Icarus स्थापित करते समय उठाए जाने वाले कदमों और सफल सिमुलेशन चलाने के तरीके का वर्णन करता है।
इकारस वेरिलॉग स्थापित करना
a. Icarus Verilog (IVerilog) का नवीनतम संस्करण स्थापित करें https://bleyer.org/icarus/
b. PATH में IVerilog जोड़ना सुनिश्चित करें और इसे GTKWave स्थापित करने दें (चित्र 1 देखें)
c. गो कॉन्फ़िगर सॉफ्टवेयर खोलें और भाग का चयन करें: SLG47910(Rev BB) फोर्ज वर्कशॉप खोलने के लिए (चित्र 2 देखें)।
dशीर्ष पर टूलबार के मध्य में FPGA संपादक पर क्लिक करें या उपयोगकर्ता विंडो के मध्य में FPGA कोर संरचना पर डबल-क्लिक भी कर सकता है।
e. फोर्ज वर्कशॉप नामक एक नई विंडो खुलती है। शीर्ष पर मेनू टूलबार में, विकल्प → सेटिंग्स पर क्लिक करें। सेटिंग्स डायलॉग बॉक्स में, उपयोगकर्ता सेटिंग्स टैब के अंतर्गत टूल्स पर जाएँ। Icarus Verilog और GTKWave दोनों के लिए “सिस्टम पर्यावरण बॉक्स” का उपयोग करें का चयन रद्द करें। अपने सिस्टम में सहेजे गए Iverilog और GTKWave के पथ को दिए गए स्थान में जोड़ें (चित्र 4 देखें)।
आप टेस्टबेंच का अनुकरण करने के लिए पूरी तरह तैयार हैं और उपरोक्त चरण यह सुनिश्चित करते हैं कि गो कॉन्फिगर सॉफ्टवेयर पर टेस्टबेंच का अनुकरण करते समय GTKWave स्वचालित रूप से लॉन्च हो जाए।
परीक्षण बेंच
किसी भी सिस्टम को सफलतापूर्वक लागू करने में सबसे महत्वपूर्ण कदम डिज़ाइन और उसकी कार्यक्षमता को सत्यापित करना है। हार्डवेयर को लागू करने के बाद एक जटिल सिस्टम को सत्यापित करना एक बुद्धिमान विकल्प नहीं है। यह पैसे, समय और संसाधनों के मामले में अप्रभावी है। इसलिए, FPGA के मामले में, Verilog स्रोत कोड का परीक्षण करने के लिए एक टेस्टबेंच का उपयोग किया जाता है।
मान लीजिए कि हमारे पास 11 बिट्स का इनपुट है, और हम सभी संभावित इनपुट संयोजन मानों यानी (211) के लिए डिवाइस का परीक्षण करना चाहते हैं। चूंकि यह संयोजनों की एक बहुत बड़ी संख्या है, इसलिए इसे मैन्युअल रूप से परीक्षण करना असंभव है। ऐसे मामलों में, टेस्टबेंच बहुत उपयोगी होते हैं क्योंकि आप सभी संभावित मानों के लिए डिज़ाइन का स्वचालित रूप से परीक्षण कर सकते हैं और इस प्रकार, परीक्षण डिज़ाइन की विश्वसनीयता की पुष्टि कर सकते हैं। वेरिलॉग टेस्टबेंच का उपयोग किसी भी भौतिक हार्डवेयर डिवाइस की आवश्यकता के बिना डिज़ाइनों का अनुकरण और विश्लेषण करने के लिए किया जाता है।
परीक्षण के तहत एक डिज़ाइन, जिसे DUT के रूप में संक्षिप्त किया जाता है, उस कार्यक्षमता का एक संश्लेषित मॉड्यूल है जिसे हम परीक्षण करना चाहते हैं। दूसरे शब्दों में, यह वह सर्किट डिज़ाइन है जिसे हम परीक्षण करना चाहते हैं। हम Verilog में तीन मॉडलिंग शैलियों में से किसी एक का उपयोग करके अपने DUT का वर्णन कर सकते हैं - गेट-लेवल, डेटाफ़्लो, या व्यवहारिक।
टेस्टबेंच को संश्लेषित नहीं किया जा सकता, इसलिए इसका उपयोग केवल सिमुलेशन उद्देश्यों के लिए किया जाता है। यह उपयोगकर्ता को टेस्टबेंच लिखने के लिए वेरिलॉग निर्माणों की पूरी श्रृंखला का उपयोग करने की अनुमति देता है, जैसे कि “for”, “$display” और “$monitor” आदि जैसे कीवर्ड। एक साधारण टेस्टबेंच यूनिट अंडर टेस्ट (UUT) या डिवाइस अंडर टेस्ट (DUT) को इंस्टेंटिएट करेगा और इनपुट को ड्राइव करेगा।
टेस्टबेंच को समझना
टेस्टबेंच में टाइमस्केल की परिभाषा
सिमुलेट करते समय, सॉफ़्टवेयर को यह जानना आवश्यक है कि समय को किस प्रकार परिभाषित किया गया है। विलंब इकाई को `टाइमस्केल निर्देश का उपयोग करके निर्दिष्ट किया जाता है, जो समय इकाई और उसके बाद आने वाले मॉड्यूल के लिए परिशुद्धता निर्दिष्ट करता है। `टाइमस्केल यह निर्धारित करने में मदद करता है कि समय के संदर्भ में #1 का क्या अर्थ है। # का उपयोग टाइमस्केल में निर्दिष्ट समय इकाई के अनुसार सिस्टम में पेश की जाने वाली देरी को परिभाषित करने के लिए किया जाता है। इसलिए, यदि time_unit ns में है, तो #1 का अर्थ 1 ns की देरी है।
वाक्यविन्यास:
`समयमान / /
time_unit वह समय अवधि है जो #1 की देरी दर्शाती है। time_precision आधार यह दर्शाता है कि समय इकाइयों के सापेक्ष कितने दशमलव बिंदुओं की परिशुद्धता का उपयोग करना है। (चित्र 23 में पंक्ति 5 देखें)
हम एक ही डिज़ाइन में अलग-अलग समय इकाइयों का उपयोग करने के लिए टाइमस्केल निर्माण का उपयोग कर सकते हैं। उपयोगकर्ता को यह याद रखना चाहिए कि विलंब विनिर्देश संश्लेषित नहीं किए जा सकते हैं और उन्हें हार्डवेयर तर्क में परिवर्तित नहीं किया जा सकता है। विलंब फ़ंक्शन पूरी तरह से सिमुलेशन उद्देश्यों के लिए हैं। $समय और $रियल टाइम सिस्टम फ़ंक्शन वर्तमान समय लौटाते हैं और डिफ़ॉल्ट रिपोर्टिंग प्रारूप को किसी अन्य सिस्टम कार्य $timeformat के साथ बदला जा सकता है।
Exampपर:
`समयमान 10us/100ns
`समयमान 1ns/1ps
#10 रीसेट = 1; // सिग्नल को 10 ns तक विलंबित करता है
#0.49 $display( “T = %0t समय #0.49 पर”, $realtime) ;
निर्दिष्ट विलंब #0.49 है जो आधे यूनिट समय से कम है। हालाँकि, समय परिशुद्धता 1ps निर्दिष्ट की गई है और इसलिए सिम्युलेटर 1ns से छोटा नहीं हो सकता है जो इसे दिए गए विलंब कथन को गोल करने और 0ns प्राप्त करने के लिए मजबूर करता है। इसलिए, यह कथन कोई विलंब प्रदान करने में विफल रहता है।
सिमुलेशन लॉग:
समय #1 पर T = 0.49
मॉड्यूल घोषणा
किसी भी टेस्टबेंच में मॉड्यूल की घोषणा मुख्य वेरिलॉग कोड से अलग होती है। टेस्टबेंच में, मॉड्यूल को बिना किसी टर्मिनल पोर्ट के घोषित किया जाता है। (चित्र 25 में लाइन 5 देखें)
वाक्यविन्यास:
मॉड्यूल ;
मॉड्यूल घोषणा के बाद मुख्य डिजाइन में पहले से परिभाषित इनपुट और आउटपुट सिग्नल को परिभाषित किया जाता है file.
सिमुलेशन के दौरान सिग्नल को चलाने और मॉनिटर करने के लिए हम दो सिग्नल प्रकारों का उपयोग करते हैं। रेग डेटाटाइप तब तक मान को होल्ड करेगा जब तक कि उसे कोई नया मान असाइन न किया जाए। इस डेटाटाइप को केवल हमेशा या आरंभिक ब्लॉक में ही मान असाइन किया जा सकता है।
वायर डेटाटाइप एक भौतिक कनेक्शन की तरह है। यह पोर्ट, असाइन स्टेटमेंट या रेग द्वारा संचालित मान को होल्ड करेगा। इस डेटा टाइप का उपयोग प्रारंभिक या हमेशा ब्लॉक में नहीं किया जा सकता है। इस अनुभाग में कोई भी पैरामीटर और पूर्णांक घोषणा भी की जाती है।
Exampपर:
Reg a,b; // HDL कोड में इनपुट को टेस्टबेंच में reg के रूप में परिभाषित किया गया है
वायर y; // एचडीएल में आउटपुट सिग्नल को टेस्टबेंच में वायर के रूप में परिभाषित किया गया है
DUT इन्स्टेन्शियेशन
टेस्टबेंच का उद्देश्य यह सत्यापित करना है कि हमारा DUT मॉड्यूल काम कर रहा है या नहीं। इसलिए, हमें अपने डिज़ाइन मॉड्यूल को टेस्ट मॉड्यूल में बदलना होगा।
वाक्यविन्यास:
(. (सिग्नल1), . सिग्नल1>(सिग्नल2));
Exampपर:
ALU d0 (.a(a), // ALU में सिग्नल “a” को ALU_tb मॉड्यूल में “a” से जोड़ा जाना चाहिए
.b(b), // ALU में सिग्नल “b” को ALU_tb मॉड्यूल में “b” से जोड़ा जाना चाहिए
.c(c));// ALU में सिग्नल “c” को ALU_tb मॉड्यूल में “c” से जोड़ा जाना चाहिए
हमने DUT मॉड्यूल ALU को टेस्ट मॉड्यूल में इंस्टेंटिएट किया है। इंस्टेंस नाम (d0) उपयोगकर्ता की पसंद है। उनके सामने एक अवधि “.” वाले सिग्नल ALU मॉड्यूल के अंदर सिग्नल के नाम हैं, जबकि वे जिस तार या रेग से टेस्ट बेंच में जुड़ते हैं, वह कोष्ठक () में सिग्नल के बगल में है। प्रत्येक पोर्ट कनेक्शन को एक अलग लाइन में कोड करने की सिफारिश की जाती है ताकि कोई भी संकलन त्रुटि संदेश उस लाइन नंबर को सही ढंग से इंगित करे जहां त्रुटि हुई थी। क्योंकि ये कनेक्शन नाम से बनाए जाते हैं, जिस क्रम में वे दिखाई देते हैं वह अप्रासंगिक है।
DUT इंस्टेंशिएशन उन मॉड्यूल के लिए भी बनाया जा सकता है जहाँ टेस्टबेंच मॉड्यूल के अलग-अलग सिग्नल नाम हैं। इंस्टेंशिएशन करते समय सिग्नल की सही मैपिंग महत्वपूर्ण होती है।
Exampले:
ALU d0 (.a(A), // ALU में सिग्नल “a” को ALU_tb मॉड्यूल में “A” से जोड़ा जाना चाहिए
.clk(clock), // ALU में सिग्नल “clk” को “clock” ALU_tb मॉड्यूल से जोड़ा जाना चाहिए
.out(OUT)); // ALU में सिग्नल “आउट” को ALU_tb मॉड्यूल में “आउट” से जोड़ा जाना चाहिए
टेस्टबेंच में हमेशा और प्रारंभिक ब्लॉक
वेरिलॉग में दो क्रमिक ब्लॉक हैं, प्रारंभिक और हमेशा। इन्हीं ब्लॉकों में हम उत्तेजना लागू करते हैं।
प्रारंभिक ब्लॉक
प्रारंभिक ब्लॉक जो केवल एक बार निष्पादित होता है और ब्लॉक की अंतिम पंक्ति निष्पादित होने पर समाप्त हो जाता है। उत्तेजना को प्रारंभिक ब्लॉक में लिखा जाता है। (चित्र 54 में पंक्ति 72-5 देखें)
वाक्यविन्यास:
..
आरंभिक शुरुआत
$डंपfile();
$डंपवर्स();
..(उत्तेजना दर्ज करें)
अंत
प्रारंभिक ब्लॉक सिमुलेशन की शुरुआत में समय t = 0 पर अपना निष्पादन शुरू करता है। शुरुआत और अंत के बीच पहली पंक्ति से शुरू करते हुए, प्रत्येक पंक्ति ऊपर से नीचे तक तब तक निष्पादित होती है जब तक कि देरी नहीं हो जाती। जब देरी हो जाती है, तो इस ब्लॉक का निष्पादन तब तक प्रतीक्षा करता है जब तक कि देरी का समय (10-समय इकाइयाँ) बीत न जाए और फिर से निष्पादन शुरू हो जाए।
उपयोगकर्ता सभी संयोजनों को मैन्युअल रूप से दर्ज करने के बजाय इस प्रारंभिक ब्लॉक के अंदर लूप्स (for, while, if-else) का उपयोग करके उत्तेजनाओं को परिभाषित कर सकता है।
Exampले:
आरंभिक शुरुआत
A = 0; b = 0; // निष्पादन प्रारंभ करें
#10 a = 0; b = 1; // निष्पादन t = 10-इकाई समय पर है
#10 a = 1; b = 0; // निष्पादन t = 20-इकाई समय पर है
अंत
गंदी जगह Files
ध्यान रखने योग्य एक और बात है $ की घोषणागंदी जगहfiles और $डम्पवर्स प्रारंभिक ब्लॉक के अंदर (चित्र 55 में पंक्ति 56-5 देखें)।गंदी जगहfile नेट और रजिस्टरों के मूल्यों में परिवर्तन को डंप करने के लिए उपयोग किया जाता है file जिसे इसका तर्क कहा गया है।
उदाहरणार्थampपर:
$गंदी जगहfile(“alu_tb.vcd”);
परिवर्तनों को एक में डंप कर देगा file नाम alu_tb.vcd. परिवर्तन एक में दर्ज किए जाते हैं file वीसीडी कहा जाता है file इसका मतलब है वैल्यू चेंज डंप। एक VCD (वैल्यू चेंज डंप) वैल्यू चेंज के बारे में सारी जानकारी स्टोर करता है। हमारे पास एक से ज़्यादा $dump नहीं हो सकतेfile वेरिलॉग सिमुलेशन में कथन।
$डम्पवर्स यह निर्दिष्ट करने के लिए उपयोग किया जाता है कि कौन से चर को डंप किया जाना है ( file $dump द्वारा उल्लेखितfile)। इसका उपयोग करने का सबसे सरल तरीका बिना किसी तर्क के है। $dumpvars का सामान्य सिंटैक्स है
$डम्पवर्स ( <, >);
हम मूल रूप से यह निर्दिष्ट कर सकते हैं कि कौन से मॉड्यूल और मॉड्यूल में कौन से चर डंप किए जाएंगे। इसका उपयोग करने का सबसे सरल तरीका स्तर को 0 पर सेट करना और मॉड्यूल नाम को शीर्ष मॉड्यूल (आमतौर पर शीर्ष टेस्टबेंच मॉड्यूल) के रूप में सेट करना है।
$डम्पवर्स(0, alu_tb);
जब लेवल को 0 पर सेट किया जाता है, और केवल मॉड्यूल का नाम निर्दिष्ट किया जाता है, तो यह उस मॉड्यूल के सभी वैरिएबल और इस टॉप मॉड्यूल द्वारा इंस्टेंटिएट किए गए सभी निचले-स्तर के मॉड्यूल के सभी वैरिएबल को डंप कर देता है। यदि कोई मॉड्यूल इस टॉप मॉड्यूल द्वारा इंस्टेंटिएट नहीं किया गया है, तो उसका वैरिएबल कवर नहीं किया जाएगा। एक और बात, $ की घोषणागंदी जगहfile $dumpvars या किसी अन्य सिस्टम कार्य से पहले आना चाहिए जो dump निर्दिष्ट करता है। ये dump files को उत्तेजना इनपुट से पहले घोषित किया जाना चाहिए अन्यथा, इन डंप में कोई मूल्य सहेजा नहीं जाएगा files.
हमेशा ब्लॉक करें
प्रारंभिक कथनों के विपरीत, हमेशा ब्लॉक बार-बार निष्पादित होता है, हालांकि निष्पादन समय t = 0 पर शुरू होता है। उदाहरण के लिएampले, फ्लिप-फ्लॉप जैसे अनुक्रमिक सर्किट के संचालन के लिए क्लॉक सिग्नल आवश्यक है। इसे लगातार आपूर्ति की आवश्यकता होती है। इसलिए, हम टेस्टबेंच में क्लॉक के संचालन के लिए कोड इस प्रकार लिख सकते हैं (चित्र 52 में पंक्ति 5 देखें):
हमेशा
#10 क्लक = ~क्लक;
अंतमॉड्यूल
उपरोक्त कथन t = 10 से शुरू होने वाले 0 ns के बाद निष्पादित होता है। clk का मान पिछले मान से 10 ns के बाद उलटा हो जाएगा। इस प्रकार, 20 ns पल्स चौड़ाई का क्लॉक सिग्नल उत्पन्न होता है। इसलिए, यह कथन 50 मेगाहर्ट्ज आवृत्ति का सिग्नल उत्पन्न करता है। यह ध्यान रखना महत्वपूर्ण है कि, सिग्नल का आरंभीकरण हमेशा ब्लॉक से पहले किया जाता है। यदि हम आरंभीकरण भाग नहीं करते हैं, तो clk सिग्नल t - 0 से x होगा, और 10 ns के बाद, यह दूसरे x में उलटा हो जाएगा।
स्व-जांच टेस्टबेंच
स्व-जांच टेस्टबेंच में वर्तमान स्थिति की जांच करने के लिए एक कथन शामिल होता है।
- $प्रदर्शन सिस्टम कार्य मुख्य रूप से सिमुलेशन के प्रवाह को ट्रैक करने के लिए डिबग संदेशों को प्रदर्शित करने के लिए उपयोग किया जाता है
आरंभिक शुरुआत
A = 0 ; b = 0 ; c = 0; #10; // इनपुट लागू करें, प्रतीक्षा करें
यदि( y ! == 1) आरंभ
$display( “000 विफल”) ; //जाँचें
c = 1; #10; //इनपुट लागू करें, प्रतीक्षा करें
अंत
अन्यथा यदि (y ! == 0) प्रारंभ
$display(“001 विफल”) // जाँच करें
बी = 1; सी = 0; #10 ; अंत
अन्यथा यदि(y!==0)
$display (“ 010 विफल”); //जाँचें
अंत
अंतमॉड्यूल
$प्रदर्शन चर, स्ट्रिंग या अभिव्यक्तियों के मान प्रदर्शित करने के लिए उपयोग किया जाता है। उपरोक्त उदाहरण सेampले, जब भी if-else लूप में से कोई भी संतुष्ट होता है, तो सिम्युलेटर लॉग अपने संबंधित $ प्रदर्शित करेगाप्रदर्शन कथन। स्ट्रिंग के अंत में डिफ़ॉल्ट रूप से एक नई लाइन होती है।
$प्रदर्शन (“समय = %t, A = %b, B = %b, C = %b”, $समय, ए,बी,सी);
उद्धरण में उल्लिखित वर्ण वैसे ही मुद्रित किए जाएँगे जैसे वे हैं। % के साथ अक्षर स्ट्रिंग प्रारूप को दर्शाता है। हम बाइनरी डेटा को दर्शाने के लिए %b का उपयोग करते हैं। हम दशमलव, षोडश आधारी और अष्टाधारी को दर्शाने के लिए क्रमशः %d, %h, %o का उपयोग कर सकते हैं। %g का उपयोग वास्तविक संख्याओं को व्यक्त करने के लिए किया जाता है। इन्हें उल्लिखित क्रम में उद्धरण के बाहर के मानों से बदल दिया जाएगा। उदाहरण के लिएample, उपरोक्त कथन सिमुलेशन लॉग में इस प्रकार प्रदर्शित होगा: समय = 20, A = 0, B = 1, C = 0
मेज़ 1. वेरिलॉग तालिका प्रारूप
तर्क | विवरण |
%एच, %एच | हेक्साडेसिमल प्रारूप में प्रदर्शित करें |
%डी, %डी | दशमलव प्रारूप में प्रदर्शित करें |
%बी, %बी | बाइनरी प्रारूप में प्रदर्शित करें |
%एम, %एम | पदानुक्रमिक नाम प्रदर्शित करें |
%एस, %एस | स्ट्रिंग के रूप में प्रदर्शित करें |
%टी, %टी | समय प्रारूप में प्रदर्शित करें |
%एफ, %एफ | 'वास्तविक' को दशमलव प्रारूप में प्रदर्शित करें |
%ई, %ई | 'वास्तविक' को घातांकीय प्रारूप में प्रदर्शित करें |
$प्रदर्शन मुख्य रूप से डेटा या वेरिएबल को उस समय के उसी क्षण के रूप में प्रिंट करता है जैसे C में printf. हमें $ का उल्लेख करना चाहिएप्रदर्शन हमें जो भी पाठ लिखना है view सिमुलेशन लॉग में.
- $समय
$समय एक सिस्टम कार्य है जो सिमुलेशन का वर्तमान समय लौटाएगा।
- $निगरानी करना
$निगरानी करना उस डेटा या वेरिएबल की निगरानी करेगा जिसके लिए इसे लिखा गया है और जब भी वेरिएबल बदलता है, तो यह प्रिंट करेगा
बदला हुआ मान। यह हर बार अपने किसी भी तर्क के बदलने के बाद $display को कॉल करने के समान प्रभाव प्राप्त करता है
अद्यतन. $निगरानी करना यह एक कार्य की तरह है जो मुख्य थ्रेड की पृष्ठभूमि में चलने के लिए उत्पन्न होता है जो निगरानी करता है और
अपने तर्क चर के मूल्य परिवर्तन प्रदर्शित करता है। $निगरानी करना इसका सिंटैक्स $ के समान हैप्रदर्शन.
$निगरानी करना(“ समय = %t, A = %b, B = %b, C = %b”, $समय, ए,बी,सी);
चित्र 7 से आप देख सकते हैं कि टेस्टबेंच का स्व-मूल्यांकन करने के लिए कोड की नई लाइनें जोड़ी गई हैं।प्रदर्शन और $निगरानी करना टेस्टबेंच के विभिन्न अनुभागों में कथन अलग-अलग परिणाम देंगे (चित्र 8 देखें)।समय इन कथनों में उल्लिखित वह समय प्रिंट करता है जिस पर मूल्य मुद्रित किया जा रहा है। उसी समय इकाई मान लीजिए 170000, हम देख सकते हैं कि $ के कारण A और B के मूल्य में कितना अंतर हैप्रदर्शन और $निगरानी करना बयान.
जीटीकेवेव सॉफ्टवेयर
GTKWave एक पूर्ण विशेषताओं वाला GTK+ वेव है viewयूनिक्स, Win32, और मैक OSX के लिए जो LXT, LXT2, VZT, FST, और GHW पढ़ता है fileसाथ ही मानक VCD/EVCD fileऔर उनकी अनुमति देता है viewयह आधिकारिक है webसाइट पर है http://gtkwave.sourceforge.net/ .GTKWave अनुशंसित है viewइकारस वेरिलॉग सिमुलेशन टूल द्वारा।
एक बार जब उपयोगकर्ता ने डिज़ाइन की कार्यक्षमता का परीक्षण करने के लिए सफलतापूर्वक एक टेस्टबेंच बना लिया है, तो उपयोगकर्ता अब GTKWave सॉफ्टवेयर का उपयोग कर सकता है view तरंगरूप.
GTKWave सॉफ्टवेयर को लॉन्च करने के लिए view वेवफॉर्म को देखने के लिए, उपयोगकर्ता को टूलबार के शीर्ष पर सिमुलेट टेस्टबेंच बटन पर या मुख्य मेनू टूल्स→ सिमुलेशन→ सिमुलेट टेस्टबेंच पर क्लिक करना होगा। यदि कोई सिंटैक्स त्रुटियाँ नहीं हैं, तो डिज़ाइन के आधार पर, GTKWave को स्वचालित रूप से लॉन्च किया जाना चाहिए या टेस्टबेंच में उत्तेजनाओं के परिणाम विंडो के लॉगर अनुभाग में प्रदर्शित किए जाएँगे।
GTKWave सॉफ्टवेयर .vcd प्रारूप डंप खोलता हैfile स्वचालित रूप से। GTKWave विंडो खुलने पर तरंगरूप प्रदर्शित नहीं करती है। यह उपयोगकर्ता को यह चुनने का अवसर देता है कि वह कौन से सिग्नल चाहता है view और निरीक्षण करें। उपयोगकर्ता को प्रदर्शित करने के लिए आवश्यक सिग्नल चुनने के लिए, उपयोगकर्ता को SST टैब के अंतर्गत विंडो के बाईं ओर अपने मॉड्यूल/इंस्टेंस के नाम पर क्लिक करना होगा। प्रत्येक इंस्टेंस के + पर क्लिक करके, आप नीचे के भाग में उस इंस्टेंस से संबंधित सिग्नल देख सकते हैं। फिर आप इच्छित सिग्नल को खींचकर छोड़ सकते हैं या सिग्नल विंडो में प्रदर्शित करने के लिए उन पर डबल-क्लिक कर सकते हैं। आप सभी (CTRL + A) का चयन भी कर सकते हैं और उन्हें सिग्नल विंडो में डाल सकते हैं (चित्र 9 देखें)।
सिग्नल अब सिग्नल विंडो में जोड़ दिए गए हैं लेकिन अभी इसका सिम्युलेट होना बाकी है। सिग्नल विंडो में वांछित सिग्नल जोड़ने के बाद, पर क्लिक करें विंडो की वर्तमान चौड़ाई में सिग्नल को फिट करना और फिर रीलोड से सिग्नल को पुनः लोड करना
टूलबार पर मौजूद प्रतीक। अब आप सिग्नल को उनके संबंधित मानों के साथ देख सकते हैं।
सिग्नल मान
डिफ़ॉल्ट रूप से, संकेतों के मान हेक्साडेसिमल प्रारूप में होते हैं और सभी तरंगें हरे रंग की होती हैं (यदि सही ढंग से चल रही हों)।
उपयोगकर्ता सिग्नल पर राइट-क्लिक करके और डेटा फ़ॉर्मेट या कलर फ़ॉर्मेट चुनकर इन सिग्नल के गुणों को बदल सकता है। उपयोगकर्ता सिग्नल के समूह के बीच अनुभाग बनाने के लिए एक खाली सिग्नल भी डाल सकता है। जब आपको वांछित ऑप्टिकल परिणाम मिल जाए, तो आप जाकर अपने कॉन्फ़िगरेशन को सहेज सकते हैं File → लिखें सहेजें File.
GTKWave टूलबार
टूलबार (चित्र 10 देखें) उपयोगकर्ता को सिग्नल के लिए बुनियादी कार्य करने की अनुमति देता है। आइए टूलबार पर प्रत्येक विकल्प पर बाएँ से दाएँ चर्चा करें।
- व्यंजना सूची: इस विकल्प के अंतर्गत हम यह कर सकते हैं view सॉफ़्टवेयर की सभी विभिन्न विशेषताएँ जिनका उपयोग सॉफ़्टवेयर के साथ खेलने के लिए किया जा सकता है। इस मेनू विकल्प के अंतर्गत विवरण इस उपयोगकर्ता गाइड के अनुभाग 8 के अंतर्गत शामिल हैं।
- निशान काटें: इसका उपयोग सिग्नल विंडो से चयनित सिग्नल को हटाने/काटने के लिए किया जाता है
- ट्रेस कॉपी करें: इसका उपयोग सिग्नल विंडो से चयनित सिग्नल को कॉपी करने के लिए किया जाता है
- निशान चिपकाएँ: कॉपी/कट किए गए ट्रेस को सिग्नल विंडो में किसी भिन्न स्थान पर चिपकाया जा सकता है
- ज़ूम फ़िट: इसका उपयोग उपयोगकर्ता द्वारा प्रदर्शित करने के लिए चुनी गई विंडो के आकार के अनुसार संकेतों को फिट करने के लिए किया जाता है
- ज़ूम इन: इसका उपयोग सिग्नल विंडो को ज़ूम करने के लिए किया जाता है
- ज़ूम आउट: इसका उपयोग सिग्नल विंडो को ज़ूम आउट करने के लिए किया जाता है
- ज़ूम पूर्ववत करें: इसका उपयोग सिग्नल विंडो पर ज़ूम इन/आउट को पूर्ववत करने के लिए किया जाता है
- ज़ूम करके शुरू करें: यह सिग्नल विंडो को ज़ूम करेगा, तथा सिग्नलों का प्रारंभ समय प्रदर्शित करेगा।
- ज़ूम करके अंत तक ले जाएँ: यह सिग्नल विंडो को ज़ूम करेगा और सिग्नल का अंतिम समय प्रदर्शित करेगा
- पिछला किनारा खोजें: यह मार्कर को बाईं ओर स्थानांतरित करता है जो पिछले किनारे को इंगित करता है
- अगला किनारा खोजें: यह मार्कर को दाईं ओर स्थानांतरित करता है जो अगले किनारे को इंगित करता है
- निचले/ऊपरी बॉन्ड को स्क्रॉल करें: इसका उपयोग करके हम वह समय सीमा निर्धारित कर सकते हैं जिसमें उपयोगकर्ता प्रदर्शित करना चाहता है। उदाहरण के लिएampउदाहरण के लिए, हम समय सीमा को 0 सेकंड से 500 एनएस तक सेट कर सकते हैं, यह केवल उस अवधि के तहत संकेतों को प्रदर्शित करेगा।
- पुनः लोड करें: जब भी डिस्प्ले सिग्नल में कोई बदलाव होता है तो रीलोड बटन को दबाया जाता है। यह नए पैरामीटर के अनुसार सिग्नल को रीलोड और डिस्प्ले करेगा। उदाहरण के लिएampउदाहरण के लिए, सिग्नल की समय सीमा बदलने के बाद, हमें सिग्नल को नए सेट समय सीमा में प्रदर्शित करने के लिए सिग्नल को पुनः लोड करना होगा।
व्यंजना सूची
GTKWave सॉफ़्टवेयर के बाएँ शीर्ष कोने से, उपयोगकर्ता तीन ऊर्ध्वाधर रेखाओं पर क्लिक करके मेनू विकल्पों तक पहुँच सकता है (चित्र 11 देखें)। उपयोगकर्ता मेनू विकल्पों के अंतर्गत निम्नलिखित विकल्प पा सकता है:
File
द File सबमेनू में एक्सेस से संबंधित विभिन्न आइटम शामिल हैं fileएस, आयात-निर्यात वीसीडी fileमुद्रण, और पढ़ना/लिखना fileऔर बाहर निकल रहा है।
संपादन करना
संपादन उपमेनू का उपयोग विभिन्न उपयोगिता कार्यों को करने के लिए किया जाता है जैसे कि वेव सबविंडो में मानों के डेटा प्रतिनिधित्व को बदलना। संपादन उपमेनू के अंतर्गत विकल्पों का उपयोग करके, उपयोगकर्ता सिग्नल के डेटा प्रारूप को बदल सकता है, उन्हें पुनर्व्यवस्थित कर सकता है, उन्हें स्थानांतरित कर सकता है, उन्हें ट्रिम कर सकता है, उन्हें हाइलाइट कर सकता है, सिग्नल को समूहीकृत कर सकता है, सिग्नल पर टिप्पणी कर सकता है, सिग्नल का रंग बदल सकता है, आदि।
Search
सर्च सबमेनू का उपयोग नेट नामों और मूल्यों पर खोज करने के लिए किया जाता है। यह VCD में सिग्नल और इंस्टेंस के विभिन्न पदानुक्रम स्तरों पर कार्य करने में मदद करता है file.
समय
समय उपमेनू में नेविगेशन और स्टेटस पैनल बटन द्वारा निष्पादित कार्यों का एक सुपरसेट होता है।
यह सरल, समय से संबंधित कार्यों को सक्षम बनाता है, जैसे ज़ूम करना, किसी विशेष समय बिंदु पर जाना, सिग्नल को किसी निश्चित दिशा में स्थानांतरित करना आदि।
निशान
मार्कर सबमेनू का उपयोग मार्कर पर विभिन्न हेरफेर करने के साथ-साथ ऑफस्क्रीन स्क्रॉलिंग को नियंत्रित करने के लिए किया जाता है।
यह सिग्नल विंडो पर कई मार्कर जोड़ने की कार्यक्षमता को सक्षम बनाता है। अधिकतम 26 नाम मार्कर की अनुमति है और सभी के लिए समय अलग-अलग होना चाहिए।
a. सिग्नल विंडो में मार्कर जोड़ने के लिए
जिस बिंदु पर आप मार्कर रखना चाहते हैं, उस पर बायाँ-क्लिक करें और ALT + N दबाएँ। इससे वांछित बिंदु पर एक नामित मार्कर (A,B,C, आदि) रखा जाएगा। उपयोगकर्ता 26 अलग-अलग समय स्थानों के लिए ऐसा करना जारी रख सकता है।
सभी स्थान मार्करों पर समय मान की तुलना करने के लिए, मेनू → मार्कर → परिवर्तन मार्कर डेटा दिखाएँ।
इससे प्रत्येक मार्कर पर समय मान के साथ एक विंडो खुलेगी। उपयोगकर्ता प्रत्येक मार्कर पर समय मान को मैन्युअल रूप से नोट कर सकता है और 2 मार्करों के बीच समय अंतर की गणना करने के लिए उन्हें घटा सकता है।
bसिग्नल विंडो में मार्कर हटाने के लिए
उपयोगकर्ता मेनू → मार्कर → कलेक्ट नेम्ड मार्कर पर जा सकता है। यह सिग्नल विंडो में रखे गए अंतिम-नामित मार्कर को हटा देगा। उपयोगकर्ता मेनू → मार्कर → कलेक्ट ऑल नेम्ड मार्कर (चित्र 12) पर जाकर सभी नामित मार्करों को हटा सकता है।
चित्र 13 में, हम देख सकते हैं कि सिग्नल के रंग कैसे बदले गए हैं। आप सिग्नल विंडो में एक ब्लैंक सिग्नल भी देख सकते हैं, जिस पर एक टिप्पणी भी है - ब्लैंक सिग्नल।
इसके अलावा 6 नामित मार्करों (ए - ई) की उपस्थिति और पीएस में इन मार्करों के बीच समय मान की गणना पर भी ध्यान दें।
View
द View सबमेनू का उपयोग सिग्नल सब विंडो में स्टेटस आइटम के साथ-साथ मूल्यों के ग्राफ़िकल रेंडरिंग से निपटने वाले विभिन्न विशेषताओं को नियंत्रित करने के लिए किया जाता है। इस मेनू से, आप सिग्नल विंडो को ब्लैक एंड व्हाइट या रंगीन में भी बदल सकते हैं। View सबमेनू आपको सेकंड (सेक) से लेकर फिकोसेकंड (एफएस) तक के समय आयाम को बदलने में भी सक्षम बनाता है। उपयोगकर्ता इस विकल्प को पा सकता है View → समय आयाम के लिए स्केल → fs.
मदद
सहायता उपमेनू में ऑन-लाइन सहायता सक्षम करने के साथ-साथ प्रोग्राम संस्करण जानकारी प्रदर्शित करने के विकल्प भी मौजूद हैं।
निष्कर्ष
यह दस्तावेज़ उपयोगकर्ताओं को उनके डिज़ाइन का सफलतापूर्वक अनुकरण करने और आवश्यक टेस्टबेंच का प्रारूप तैयार करके कार्यक्षमता को सत्यापित करने तथा तरंगों को प्रदर्शित करने और परिणामों का अवलोकन करने के लिए GTKWave के साथ Icarus Verilog का उपयोग करने में सहायता करने के लिए बनाया गया था।
संशोधन इतिहास
दोहराव | तारीख | विवरण |
1.00 | 20 मई, 2024 | प्रारंभिक रिहाई। |
R19US0011EU0100 रेव.1.0
20 मई, 2024
© 2024 रेनेसा इलेक्ट्रॉनिक्स
दस्तावेज़ / संसाधन
![]() |
RENESAS ForgeFPGA सॉफ्टवेयर सिमुलेशन [पीडीएफ] उपयोगकर्ता गाइड REN_r19us0011eu0100, ForgeFPGA सॉफ्टवेयर सिमुलेशन, ForgeFPGA सॉफ्टवेयर, ForgeFPGA, ForgeFPGA सिमुलेशन, सॉफ्टवेयर सिमुलेशन, सिमुलेशन, सॉफ्टवेयर |