वेरिलॉग प्रक्रियात्मक इंटरफ़ेस: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{Short description|Software interface between C and Verilog}} | {{Short description|Software interface between C and Verilog}} | ||
[[Verilog]] प्रक्रियात्मक इंटरफ़ेस ( | [[Verilog|'''वेरिलॉग''']] '''प्रक्रियात्मक इंटरफ़ेस''' (वीपीआई ), जिसे मूल रूप से पीएलआई 2.0 के रूप में जाना जाता है,इस प्रकार मुख्य रूप से C([[प्रोग्रामिंग भाषा]]) प्रोग्रामिंग भाषा के लिए अभिप्रेत इंटरफ़ेस है। यह व्यावहारिक वेरिलॉग कोड को C फ़ंक्शंस, और C फ़ंक्शंस को मानक वेरिलॉग सिस्टम कार्यों को प्रारंभ करने की अनुमति देता है। वेरिलॉग प्रक्रियात्मक इंटरफ़ेस आईईईई [[सी (प्रोग्रामिंग भाषा)]] इंटरफ़ेस मानक का भाग होता है; मानक का नवीनतम संस्करण 2005 का है। इस प्रकार से वीपीआई को कभी-कभी पीएलआई 2 के रूप में भी जाना जाता है, क्योंकि यह [[पदावनत]] वेरिलोग या प्रोग्राम लैंग्वेज इंटरफेस (पीएलआई) | प्रोग्राम लैंग्वेज इंटरफेस (पीएलआई) को प्रतिस्थापित करता है। | ||
जबकि पीएलआई 1 को वीपीआई ( | जबकि पीएलआई 1 को वीपीआई (पीएलआई 2) के पक्ष में बहिष्कृत किया गया था, पीएलआई 1 अभी भी सामान्यतः वीपीआई पर उपयोग किया जाता है क्योंकि इसके अधिक व्यापक रूप से प्रलेखित tf_put, tf_get फ़ंक्शन इंटरफ़ेसवर्णन कई वेरिलॉग संदर्भ पुस्तकों में किया गया है। | ||
सी ++ का प्रयोग | === सी ++ का प्रयोग === | ||
सी ++ कंपाइलर्स में निर्मित बाहरी सी/सी ++ कीवर्ड का उपयोग करके सी ++ वीपीआई (पीएलआई 2.0) और पीएलआई 1.0 के साथ एकीकृत है। | |||
सी ++ कंपाइलर्स में निर्मित बाहरी सी/सी ++ कीवर्ड का उपयोग करके सी ++ वीपीआई (पीएलआई 2.0) और पीएलआई 1.0 के साथ | |||
== उदाहरण == | == उदाहरण == | ||
उदाहरण के रूप में, निम्नलिखित | इस प्रकार से उदाहरण के रूप में, निम्नलिखित वेरिलॉग कोड खंड पर विचार करें:<syntaxhighlight lang="text"> | ||
val = 41; | val = 41; | ||
$increment(val); | $increment(val); | ||
$display("After $increment, val=%d", val); | $display("After $increment, val=%d", val); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
मान लीजिए <code>increment</code> सिस्टम टास्क इसके पहले पैरामीटर को से बढ़ाता है। C और | मान लीजिए <code>increment</code> सिस्टम टास्क इसके पहले पैरामीटर को से बढ़ाता है। C और वीपीआई तंत्र का उपयोग करते हुए, <code>increment</code> कार्य को निम्नानुसार कार्यान्वित किया जा सकता है: | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
Line 43: | Line 42: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
साथ ही, इस सिस्टम कार्य को पंजीकृत करने वाला फ़ंक्शन आवश्यक है। यह फ़ंक्शन विस्तार या संदर्भों के संकल्प से पहले | साथ ही, इस सिस्टम कार्य को पंजीकृत करने वाला फ़ंक्शन आवश्यक है। यह फ़ंक्शन विस्तार या संदर्भों के संकल्प से पहले प्रयुक्त किया जाता है जब इसे बाह्य रूप से दृश्यमान में रखा जाता है <code>vlog_startup_routines[]</code> सरणी। | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
Line 58: | Line 57: | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
सी कोड को साझा वस्तु में संकलित किया गया है जिसका उपयोग वेरिलॉग सिम्युलेटर द्वारा किया | सी कोड को साझा वस्तु में संकलित किया गया है जिसका उपयोग वेरिलॉग सिम्युलेटर द्वारा किया जाता है। प्रथम उल्लेखित वेरिलॉग अंश का अनुकरण अब निम्नलिखित आउटपुट में परिणाम देगा:<syntaxhighlight> | ||
VPI routine received 41 | |||
After $increment, val=42 | |||
</syntaxhighlight><पूर्व> | |||
वीपीआई रूटीन को 41 मिले | |||
$ वृद्धि के बाद, वैल = 42 | $ वृद्धि के बाद, वैल = 42 | ||
Line 72: | Line 73: | ||
== स्रोत == | == स्रोत == | ||
{{reflist}} | {{reflist}} | ||
*[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=496013 | *[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=496013 आईईईई एक्सप्लोर] | ||
=== वेरिलोग वीपीआई इंटरफ़ेस के लिए स्रोत === | === वेरिलोग वीपीआई इंटरफ़ेस के लिए स्रोत === | ||
*[http://teal.sourceforge.net/ | *[http://teal.sourceforge.net/ टील], [[ सी ++ ]] के लिए | ||
*[http://jove.sourceforge.net/ | *[http://jove.sourceforge.net/ जेओवीइ], [[जावा (प्रोग्रामिंग भाषा)]] के लिए | ||
*[https://archive.today/20130415203151/http://ruby-vpi.rubyforge.org/ | *[https://archive.today/20130415203151/http://ruby-vpi.rubyforge.org/ रूबी- वीपीआई] , रूबी (प्रोग्रामिंग लैंग्वेज) के लिए | ||
*[https://web.archive.org/web/20070731093359/http://embedded.eecs.berkeley.edu/Alumni/pinhong/scriptEDA/ | *[https://web.archive.org/web/20070731093359/http://embedded.eecs.berkeley.edu/Alumni/pinhong/scriptEDA/ स्क्रिप्ट इडीए], [[पर्ल]], पायथन (प्रोग्रामिंग लैंग्वेज), [[Tcl|टीसीएल]] के लिए | ||
* [[Cocotb]] [https://github.com/cocotb/cocotb], | * [[Cocotb|कोकोटीबी]] [https://github.com/cocotb/cocotb], पाइथन (प्रोग्रामिंग भाषा) के लिए | ||
*[https://origen-sdk.org/origen/guides/simulation/introduction/ | *[https://origen-sdk.org/origen/guides/simulation/introduction/ ओरिजेनसिम], [[रूबी (प्रोग्रामिंग भाषा)]] के लिए | ||
==बाहरी संबंध== | ==बाहरी संबंध== | ||
*[https://web.archive.org/web/20070413074919/http://www.edn.com/article/CA46145.html | *[https://web.archive.org/web/20070413074919/http://www.edn.com/article/CA46145.html वेरिलॉग पीएलआई primer] | ||
*[http://www.asic-world.com/verilog/pli6.html#Verilog_Procedural_Interface_(VPI) | *[http://www.asic-world.com/verilog/pli6.html#Verilog_Procedural_Interface_(VPI) वेरिलॉग वीपीआई tutorial] | ||
{{IEEE standards}} | {{IEEE standards}} |
Revision as of 18:10, 27 June 2023
वेरिलॉग प्रक्रियात्मक इंटरफ़ेस (वीपीआई ), जिसे मूल रूप से पीएलआई 2.0 के रूप में जाना जाता है,इस प्रकार मुख्य रूप से C(प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा के लिए अभिप्रेत इंटरफ़ेस है। यह व्यावहारिक वेरिलॉग कोड को C फ़ंक्शंस, और C फ़ंक्शंस को मानक वेरिलॉग सिस्टम कार्यों को प्रारंभ करने की अनुमति देता है। वेरिलॉग प्रक्रियात्मक इंटरफ़ेस आईईईई सी (प्रोग्रामिंग भाषा) इंटरफ़ेस मानक का भाग होता है; मानक का नवीनतम संस्करण 2005 का है। इस प्रकार से वीपीआई को कभी-कभी पीएलआई 2 के रूप में भी जाना जाता है, क्योंकि यह पदावनत वेरिलोग या प्रोग्राम लैंग्वेज इंटरफेस (पीएलआई) | प्रोग्राम लैंग्वेज इंटरफेस (पीएलआई) को प्रतिस्थापित करता है।
जबकि पीएलआई 1 को वीपीआई (पीएलआई 2) के पक्ष में बहिष्कृत किया गया था, पीएलआई 1 अभी भी सामान्यतः वीपीआई पर उपयोग किया जाता है क्योंकि इसके अधिक व्यापक रूप से प्रलेखित tf_put, tf_get फ़ंक्शन इंटरफ़ेसवर्णन कई वेरिलॉग संदर्भ पुस्तकों में किया गया है।
सी ++ का प्रयोग
सी ++ कंपाइलर्स में निर्मित बाहरी सी/सी ++ कीवर्ड का उपयोग करके सी ++ वीपीआई (पीएलआई 2.0) और पीएलआई 1.0 के साथ एकीकृत है।
उदाहरण
इस प्रकार से उदाहरण के रूप में, निम्नलिखित वेरिलॉग कोड खंड पर विचार करें:
val = 41;
$increment(val);
$display("After $increment, val=%d", val);
मान लीजिए increment
सिस्टम टास्क इसके पहले पैरामीटर को से बढ़ाता है। C और वीपीआई तंत्र का उपयोग करते हुए, increment
कार्य को निम्नानुसार कार्यान्वित किया जा सकता है:
// Implements the increment system task
static int increment(char *userdata) {
vpiHandle systfref, args_iter, argh;
struct t_vpi_value argval;
int value;
// Obtain a handle to the argument list
systfref = vpi_handle(vpiSysTfCall, NULL);
args_iter = vpi_iterate(vpiArgument, systfref);
// Grab the value of the first argument
argh = vpi_scan(args_iter);
argval.format = vpiIntVal;
vpi_get_value(argh, &argval);
value = argval.value.integer;
vpi_printf("VPI routine received %d\n", value);
// Increment the value and put it back as first argument
argval.value.integer = value + 1;
vpi_put_value(argh, &argval, NULL, vpiNoDelay);
// Cleanup and return
vpi_free_object(args_iter);
return 0;
}
साथ ही, इस सिस्टम कार्य को पंजीकृत करने वाला फ़ंक्शन आवश्यक है। यह फ़ंक्शन विस्तार या संदर्भों के संकल्प से पहले प्रयुक्त किया जाता है जब इसे बाह्य रूप से दृश्यमान में रखा जाता है vlog_startup_routines[]
सरणी।
// Registers the increment system task
void register_increment() {
s_vpi_systf_data data = {vpiSysTask, 0, "$increment", increment, 0, 0, 0};
vpi_register_systf(&data);
}
// Contains a zero-terminated list of functions that have to be called at startup
void (*vlog_startup_routines[])() = {
register_increment,
0
};
सी कोड को साझा वस्तु में संकलित किया गया है जिसका उपयोग वेरिलॉग सिम्युलेटर द्वारा किया जाता है। प्रथम उल्लेखित वेरिलॉग अंश का अनुकरण अब निम्नलिखित आउटपुट में परिणाम देगा:
VPI routine received 41
After $increment, val=42
<पूर्व>
वीपीआई रूटीन को 41 मिले
$ वृद्धि के बाद, वैल = 42
</पूर्व>
यह भी देखें
स्रोत
वेरिलोग वीपीआई इंटरफ़ेस के लिए स्रोत
- टील, सी ++ के लिए
- जेओवीइ, जावा (प्रोग्रामिंग भाषा) के लिए
- रूबी- वीपीआई , रूबी (प्रोग्रामिंग लैंग्वेज) के लिए
- स्क्रिप्ट इडीए, पर्ल, पायथन (प्रोग्रामिंग लैंग्वेज), टीसीएल के लिए
- कोकोटीबी [1], पाइथन (प्रोग्रामिंग भाषा) के लिए
- ओरिजेनसिम, रूबी (प्रोग्रामिंग भाषा) के लिए