SystemVerilog

From alpha
Jump to navigation Jump to search

SystemVerilog
240px
SystemVerilog logo
ParadigmStructured (design)
Object-oriented (verification)
द्वारा डिज़ाइन किया गयाSynopsys, later IEEE
पहली प्रस्तुति2002; 22 years ago (2002)
Stable release
IEEE 1800-2017 / February 22, 2018; 6 years ago (2018-02-22)
टाइपिंग अनुशासनStatic, weak
फ़ाइल नाम एक्सटेंशनएस.sv, .svh
Influenced by
Design: Verilog, VHDL, C++, Verification: OpenVera, Java

SystemVerilog, जिसे IEEE 1800 के रूप में मानकीकृत किया गया है, एक हार्डवेयर विवरण भाषा और हार्डवेयर सत्यापन भाषा है जिसका उपयोग मॉडल, हार्डवेयर डिज़ाइन, परीक्षण बेंच , कार्यात्मक सत्यापन और लॉजिक संश्लेषण इलेक्ट्रॉनिक सिस्टम के लिए किया जाता है। SystemVerilog Verilog और कुछ एक्सटेंशन पर आधारित है, और 2008 से, Verilog अब उसी IEEE मानक का हिस्सा है। यह आमतौर पर वेरिलॉग के विकास के रूप में अर्धचालक और इलेक्ट्रानिक्स डिजाइन उद्योग में उपयोग किया जाता है।

इतिहास

SystemVerilog की शुरुआत 2002 में स्टार्टअप कंपनी को-डिज़ाइन ऑटोमेशन द्वारा एक्सेलेरा को सुपरलॉग भाषा के दान के साथ हुई।[1] अधिकांश सत्यापन कार्यक्षमता Synopsys द्वारा दान की गई OpenVera भाषा पर आधारित है। 2005 में, SystemVerilog को IEEE मानक 1800-2005 के रूप में अपनाया गया था।[2] 2009 में, मानक को बेस वेरिलॉग (IEEE 1364-2005) मानक के साथ मिला दिया गया, जिससे IEEE मानक 1800-2009 बन गया। वर्तमान संस्करण IEEE मानक 1800-2017 है।[3] SystemVerilog के फीचर-सेट को दो अलग-अलग भूमिकाओं में विभाजित किया जा सकता है:

रजिस्टर-स्थानांतरण स्तर (आरटीएल) डिजाइन के लिए # SystemVerilog वेरिलॉग|वेरिलॉग-2005 का विस्तार है; SystemVerilog में उस भाषा की सभी सुविधाएँ उपलब्ध हैं। इसलिए, वेरिलॉग SystemVerilog का एक उपसमुच्चय है।

  1. सत्यापन के लिए SystemVerilog व्यापक ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग तकनीकों का उपयोग करता है और Verilog की तुलना में Java (प्रोग्रामिंग भाषा) से अधिक निकटता से संबंधित है। ये निर्माण आम तौर पर संश्लेषित नहीं होते हैं।

इस आलेख का शेष भाग SystemVerilog की उन विशेषताओं पर चर्चा करता है जो Verilog|Verilog-2005 में मौजूद नहीं हैं।

डिज़ाइन सुविधाएँ

डेटा जीवनकाल

SystemVerilog में दो प्रकार के डेटा जीवनकाल निर्दिष्ट हैं: स्थैतिक चर और स्थानीय चर । जब प्रोग्राम निष्पादन वेरिएबल के दायरे में आता है तो स्वचालित वेरिएबल बनाए जाते हैं। स्टेटिक वैरिएबल प्रोग्राम के निष्पादन की शुरुआत में बनाए जाते हैं और पूरे प्रोग्राम के जीवनकाल के दौरान समान मूल्य रखते हैं, जब तक कि निष्पादन के दौरान एक नया मान निर्दिष्ट नहीं किया जाता है।

कोई भी वेरिएबल जो किसी कार्य या फ़ंक्शन के अंदर प्रकार निर्दिष्ट किए बिना घोषित किया गया है उसे स्वचालित माना जाएगा। यह निर्दिष्ट करने के लिए कि कोई चर स्थिर है, उसे रखेंstaticप्रकार से पहले घोषणा में कीवर्ड (प्रोग्रामिंग), उदाहरण के लिए,static int x;.automaticकीवर्ड का प्रयोग इसी प्रकार किया जाता है।

नये डेटा प्रकार

उन्नत वैरिएबल प्रकार Verilog reg प्रकार में नई क्षमता जोड़ता है:

logic [31:0] my_var;

वेरिलॉग-1995 और -2001 रेग वेरिएबल्स को रजिस्टर-ट्रांसफर स्तर जैसे व्यवहार संबंधी बयानों तक सीमित करते हैं। SystemVerilog reg प्रकार का विस्तार करता है ताकि इसे गेट या मॉड्यूल जैसे एकल ड्राइवर द्वारा संचालित किया जा सके। SystemVerilog उपयोगकर्ताओं को यह याद दिलाने के लिए इस प्रकार के तर्क को नाम देता है कि इसमें यह अतिरिक्त क्षमता है और यह हार्डवेयर रजिस्टर नहीं है। लॉजिक और रेग नाम विनिमेय हैं। एक से अधिक ड्राइवर वाले सिग्नल (जैसे कि सामान्य प्रयोजन इनपुट/आउटपुट के लिए त्रि-राज्य बफर) को वायर जैसे नेट प्रकार घोषित करने की आवश्यकता होती है ताकि SystemVerilog अंतिम मान को हल कर सके।

बहुआयामी सरणी पैक सरणियाँ रजिस्टरों और यादों के बारे में वेरिलॉग की धारणा को एकीकृत और विस्तारित करती हैं:

logic [1:0][2:0] my_pack[32];

शास्त्रीय वेरिलॉग ने चर नाम के बाईं ओर केवल एक आयाम घोषित करने की अनुमति दी। SystemVerilog ऐसे पैक किए गए आयामों की किसी भी संख्या की अनुमति देता है। पैक्ड सरणी प्रकार का एक चर एक पूर्णांक अंकगणितीय मात्रा पर 1:1 मैप करता है। उपरोक्त उदाहरण में, प्रत्येक तत्व my_pack अभिव्यक्ति में छह-बिट पूर्णांक के रूप में उपयोग किया जा सकता है। नाम के दाईं ओर के आयाम (इस मामले में 32) को अनपैक्ड आयाम कहा जाता है। जैसा कि वेरिलॉग 2001|वेरिलॉग-2001 में, किसी भी संख्या में अनपैक्ड आयामों की अनुमति है।

प्रगणित प्रकार (enums) संख्यात्मक मात्राओं को सार्थक नाम देने की अनुमति दें। प्रगणित प्रकार के घोषित किए गए वेरिएबल को प्रकार रूपांतरण के बिना किसी भिन्न प्रगणित प्रकार के वेरिएबल को नहीं सौंपा जा सकता है। यह उन मापदंडों के बारे में सच नहीं है, जो वेरिलॉग-2005 में गणना की गई मात्राओं के लिए पसंदीदा कार्यान्वयन तकनीक थे:

typedef enum logic [2:0] {
   RED, GREEN, BLUE, CYAN, MAGENTA, YELLOW
} color_t;

color_t   my_color = GREEN;
initial $display("The color is %s", my_color.name());

जैसा कि ऊपर दिखाया गया है, डिज़ाइनर एक अंतर्निहित अंकगणितीय प्रकार निर्दिष्ट कर सकता है (logic [2:0] इस मामले में) जिसका उपयोग गणना मूल्य का प्रतिनिधित्व करने के लिए किया जाता है। मेटा-वैल्यू एक्स और जेड का उपयोग यहां संभवतः अवैध राज्यों का प्रतिनिधित्व करने के लिए किया जा सकता है। अंतर्निर्मित फ़ंक्शन name() वर्तमान प्रगणित मान के लिए एक ASCII स्ट्रिंग लौटाता है, जो सत्यापन और परीक्षण में उपयोगी है।

नए पूर्णांक प्रकार: SystemVerilog परिभाषित करता है byte, shortint, int और longint क्रमशः 8, 16, 32 और 64 बिट्स वाले दो-राज्य हस्ताक्षरित अभिन्न प्रकार के रूप में। ए bit टाइप एक वैरिएबल-चौड़ाई वाला दो-स्टेट प्रकार है जो काफी हद तक काम करता है logic. दो-राज्य प्रकारों में डोंट-केयर शब्द और शास्त्रीय वेरिलॉग के उच्च प्रतिबाधा मेटावैल्यू का अभाव है; इन प्रकारों के साथ काम करने से तेजी से सिमुलेशन हो सकता है।

संरचनाएं और यूनियन प्रकार काफी हद तक उसी तरह काम करते हैं जैसे वे सी (प्रोग्रामिंग भाषा) में करते हैं। SystemVerilog एन्हांसमेंट में पैक्ड विशेषता और टैग की गई विशेषता शामिल हैं। tagged ई> विशेषता रनटाइम ट्रैकिंग की अनुमति देती है कि यूनियन के कौन से सदस्य वर्तमान में उपयोग में हैं। packed e> विशेषता के कारण संरचना या संघ को बिट्स की पैक्ड सरणी पर 1:1 मैप किया जाता है। की सामग्री struct C और C++ में बिट फ़ील्ड के समान, डेटा प्रकार बिना किसी अंतराल के मेमोरी के एक निरंतर ब्लॉक पर कब्जा कर लेते हैं:

typedef struct packed {
    bit [10:0]  expo;
    bit         sign;
    bit [51:0]  mant;
} FP;

FP     zero = 64'b0;

जैसा कि इस उदाहरण में दिखाया गया है, SystemVerilog C और C++ की तरह, टाइपडिफ़्स का भी समर्थन करता है।

प्रक्रियात्मक ब्लॉक

SystemVerilog ने इलेक्ट्रॉनिक हार्डवेयर को मॉडल करने के उद्देश्य से तीन नए प्रक्रियात्मक ब्लॉक पेश किए हैं: always_comb (संयोजन तर्क को मॉडल करने के लिए), always_ff (फ्लिप-फ्लॉप (इलेक्ट्रॉनिक्स)|फ्लिप-फ्लॉप के लिए), और always_latch (लच (इलेक्ट्रॉनिक) के लिए)। जबकि वेरिलॉग ने एकल, सामान्य-उद्देश्य का उपयोग किया always विभिन्न प्रकार की हार्डवेयर संरचनाओं को मॉडल करने के लिए ब्लॉक करें, SystemVerilog के प्रत्येक नए ब्लॉक का उद्देश्य एक विशिष्ट प्रकार के हार्डवेयर को मॉडल करना है, यह सुनिश्चित करने के लिए सिमेंटिक प्रतिबंध लगाकर कि ब्लॉक द्वारा वर्णित हार्डवेयर मॉडल के इच्छित उपयोग से मेल खाता है। एक एचडीएल कंपाइलर या सत्यापन प्रोग्राम यह सुनिश्चित करने के लिए अतिरिक्त कदम उठा सकता है कि केवल इच्छित प्रकार का व्यवहार होता है।

एक always_comb ब्लॉक मॉडल संयोजन तर्क। सिम्युलेटर निहित कथनों से सभी चर के रूप में संवेदनशीलता सूची का अनुमान लगाता है:

always_comb begin
    tmp = b * b - 4 * a * c;
    no_root = (tmp < 0);
end

एक always_latch ब्लॉक मॉडल फ्लिप-फ्लॉप (इलेक्ट्रॉनिक्स) # गेटेड डी लैच | लेवल-सेंसिटिव लैच। फिर से, संवेदनशीलता सूची का अनुमान कोड से लगाया गया है:

always_latch
    if (en) q <= d;

एक always_ff ब्लॉक मॉडल तुल्यकालिक तर्क (विशेषकर एज-ट्रिगर फ्लिप-फ्लॉप|एज-सेंसिटिव अनुक्रमिक लॉजिक):

always_ff @(posedge clk)
    count <= count + 1;

इलेक्ट्रॉनिक डिज़ाइन स्वचालन (ईडीए) उपकरण यह जांच कर डिज़ाइन के इरादे को सत्यापित कर सकते हैं कि हार्डवेयर मॉडल किसी भी ब्लॉक उपयोग शब्दार्थ का उल्लंघन नहीं करता है। उदाहरण के लिए, नए ब्लॉक केवल एक स्रोत की अनुमति देकर एक वैरिएबल तक असाइनमेंट को प्रतिबंधित करते हैं, जबकि वेरिलॉग always एकाधिक प्रक्रियात्मक स्रोतों से अनुमत असाइनमेंट को ब्लॉक करें।

इंटरफ़ेस

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

उदाहरण:

interface intf;
  logic a;
  logic b;
  modport in (input a, output b);
  modport out (input b, output a); 
endinterface

module top;
  intf i ();
  u_a m1 (.i1(i.in));
  u_b m2 (.i2(i.out));
endmodule

module u_a (intf.in i1);
endmodule

module u_b (intf.out i2);
endmodule


सत्यापन सुविधाएँ

निम्नलिखित सत्यापन सुविधाएँ आमतौर पर संश्लेषित नहीं की जाती हैं, जिसका अर्थ है कि उन्हें एचडीएल कोड के आधार पर हार्डवेयर में लागू नहीं किया जा सकता है। इसके बजाय, वे एक्स्टेंसिबल, लचीली परीक्षण बेंचों के निर्माण में सहायता करते हैं।

===नये डेटा प्रकार=== string ई> डेटा प्रकार एक चर-लंबाई टेक्स्ट स्ट्रिंग (कंप्यूटर विज्ञान) का प्रतिनिधित्व करता है। उदाहरण के लिए:

string s1 = "Hello";
string s2 = "world";
string p = ".?!";
string s3 = {s1, ", ", s2, p[2]}; // string concatenation
$display("[%d] %s", s3.len(), s3); // simulation will print: "[13] Hello, world!"

डिज़ाइन में प्रयुक्त स्थिर सरणी के अलावा, SystemVerilog गतिशील सरणी, सहयोगी सरणी और कतार (सार डेटा प्रकार) प्रदान करता है:

int cmdline_elements; // # elements for dynamic array
int da[];             // dynamic array
int ai[int];          // associative array, indexed by int
int as[string];       // associative array, indexed by string
int qa[$];            // queue, indexed as an array, or by built-in methods

initial begin
    cmdline_elements = 16;
    da = new[ cmdline_elements ]; // Allocate array with 16 elements
end

एक डायनामिक ऐरे एक अनपैक्ड ऐरे की तरह काम करता है, लेकिन रन टाइम (प्रोग्राम जीवनचक्र चरण) में गतिशील रूप से आवंटित स्मृति होने का लाभ प्रदान करता है (जैसा कि ऊपर दिखाया गया है।) जबकि एक पैक्ड ऐरे का आकार संकलन समय पर ज्ञात होना चाहिए (एक स्थिरांक से या स्थिरांक की अभिव्यक्ति), गतिशील सरणी आकार को किसी अन्य रनटाइम वैरिएबल से प्रारंभ किया जा सकता है, जिससे सरणी को आवश्यकतानुसार आकार देने और मनमाने ढंग से आकार बदलने की अनुमति मिलती है।

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

वर्ग

SystemVerilog एक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग मॉडल प्रदान करता है।

SystemVerilog में, कक्षाएं एकल वंशानुक्रम | एकल-विरासत मॉडल का समर्थन करती हैं, लेकिन तथाकथित इंटरफ़ेस कक्षाओं (संकल्पना में समान) के उपयोग के माध्यम से एकाधिक-विरासत के समान कार्यक्षमता लागू कर सकती हैं interface जावा की विशेषता)। क्लास जेनेरिक प्रोग्रामिंग, टेम्पलेट (सी++)C++)|C++ टेम्प्लेट का मूल कार्य प्रदान करता है। हालाँकि, टेम्प्लेट विशेषज्ञता और फ़ंक्शन टेम्पलेट समर्थित नहीं हैं।

SystemVerilog की बहुरूपता (कंप्यूटर विज्ञान) विशेषताएं C++ के समान हैं: प्रोग्रामर विशेष रूप से लिख सकता है virtual फ़ंक्शन का व्युत्पन्न वर्ग नियंत्रण प्राप्त करने के लिए फ़ंक्शन। अधिक जानकारी के लिए आभासी कार्य देखें।

एनकैप्सुलेशन (कंप्यूटर प्रोग्रामिंग) और सूचना छिपाना का उपयोग करके पूरा किया जाता है local और protected कीवर्ड, जिन्हें छिपाई जाने वाली किसी भी वस्तु पर लागू किया जाना चाहिए। डिफ़ॉल्ट रूप से, सभी वर्ग गुण सार्वजनिक सदस्य हैं।

क्लास इंस्टेंसेस को गतिशील रूप से बनाया जाता है new कीवर्ड. एक कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) द्वारा दर्शाया गया है function new परिभाषित किया जा सकता। SystemVerilog में स्वचालित कचरा संग्रह (कंप्यूटर विज्ञान) है, इसलिए नए ऑपरेटर द्वारा बनाए गए उदाहरणों को स्पष्ट रूप से नष्ट करने के लिए कोई भाषा सुविधा नहीं है।

उदाहरण:

virtual class Memory;
    virtual function bit [31:0] read(bit [31:0] addr); endfunction
    virtual function void write(bit [31:0] addr, bit [31:0] data); endfunction
endclass

class SRAM #(parameter AWIDTH=10) extends Memory;
    bit [31:0] mem [1<<AWIDTH];

    virtual function bit [31:0] read(bit [31:0] addr);
        return mem[addr];
    endfunction

    virtual function void write(bit [31:0] addr, bit [31:0] data);
        mem[addr] = data;
    endfunction
endclass


विवश यादृच्छिक पीढ़ी

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

वर्ग परिभाषाओं के अंतर्गत, rand और randc संशोधक उन चरों को संकेत देते हैं जिन्हें यादृच्छिकीकरण से गुजरना होता है। randc क्रमपरिवर्तन-आधारित यादृच्छिकीकरण निर्दिष्ट करता है, जहां एक चर किसी भी मूल्य को दोहराए जाने से पहले एक बार सभी संभावित मूल्यों पर ले जाएगा। संशोधक के बिना चर यादृच्छिक नहीं होते हैं।

class eth_frame;
    rand bit [47:0] dest;
    rand bit [47:0] src;
    rand bit [15:0] f_type;
    rand byte       payload[];
    bit [31:0]      fcs;
    rand bit [31:0] fcs_corrupt;

    constraint basic {
        payload.size inside {[46:1500]};
    }

    constraint good_fr {
        fcs_corrupt == 0;
    }
endclass

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

यादृच्छिकीकरण विधियाँ

प्रत्येक SystemVerilog क्लास में रैंडमाइजेशन के लिए 3 पूर्वनिर्धारित तरीके हैं: प्री_रैंडमाइज, रैंडमाइज और पोस्ट_रैंडमाइज। क्लास वेरिएबल्स के रैंडमाइजेशन के लिए उपयोगकर्ता द्वारा रैंडमाइज विधि को कॉल किया जाता है। प्री_रैंडमाइज विधि को रैंडमाइजेशन से पहले रैंडमाइज विधि द्वारा बुलाया जाता है और पोस्ट_रैंडमाइज विधि को रैंडमाइजेशन के बाद रैंडमाइज विधि द्वारा बुलाया जाता है।

class eth_frame;
    rand bit [47:0] dest;
    rand bit [47:0] src;
    rand bit [15:0] f_type;
    rand byte       payload[];
    bit [31:0]      fcs;
    rand bit        corrupted_frame;

    constraint basic {
        payload.size inside {[46:1500]};
    }
    
    function void post_randomize()
      this.calculate_fcs(); // update the fcs field according to the randomized frame
      if (corrupted_frame)  // if this frame should be corrupted 
        this.corrupt_fcs(); // corrupt the fcs
    endfunction
endclass


बाधाओं को नियंत्रित करना

रैंडमाइजेशन को नियंत्रित करने के लिए बाधा_मोड() और रैंडम_मोड() विधियों का उपयोग किया जाता है। constraint_mode() का उपयोग किसी विशिष्ट बाधा को चालू और बंद करने के लिए किया जाता है और रैंडम_मोड का उपयोग किसी विशिष्ट चर के यादृच्छिककरण को चालू या बंद करने के लिए किया जाता है। नीचे दिया गया कोड ईथरनेट फ्रेम का वर्णन और प्रक्रियात्मक परीक्षण करता है:

class eth_frame;
    rand bit [47:0] dest;
    rand bit [47:0] src;
    rand bit [15:0] f_type;
    rand byte       payload[];
    bit [31:0]      fcs;
    rand bit        corrupted_frame;

    constraint basic {
        payload.size inside {[46:1500]};
    }
   
    constraint one_src_cst {
        src == 48'h1f00
    }

    constraint dist_to_fcs {
        fcs dist {0:/30,[1:2500]:/50};  // 30, and 50 are the weights (30/80 or  50/80, in this example) 
    }

endclass
.
.
.
eth_frame my_frame;

my_frame.one_src_cst.constraint_mode(0); // the constraint one_src_cst will not be taken into account
my_frame.f_type.random_mode(0);        // the f_type variable will not be randomized for this frame instance.
my_frame.randomize();


दावा

अभिकथन (सॉफ़्टवेयर विकास) किसी डिज़ाइन के गुणों को सत्यापित करने के लिए उपयोगी होते हैं जो किसी विशिष्ट स्थिति या स्थिति पर पहुंचने के बाद स्वयं प्रकट होते हैं। SystemVerilog की अपनी अभिकथन विशिष्टता भाषा है, जो संपत्ति विशिष्टता भाषा के समान है। SystemVerilog भाषा निर्माणों का सबसेट जो अभिकथन प्रदान करता है उसे आमतौर पर SystemVerilog Assertion या SVA कहा जाता है।[4] SystemVerilog अभिकथन अनुक्रमों और गुणों से निर्मित होते हैं। गुण अनुक्रमों का एक सुपरसेट हैं; किसी भी अनुक्रम का उपयोग ऐसे किया जा सकता है जैसे कि वह कोई संपत्ति हो, हालाँकि यह आमतौर पर उपयोगी नहीं है।

अनुक्रमों में सिंक्रोनस तर्क के साथ संवर्धित बूलियन अभिव्यक्तियाँ शामिल हैं। सबसे सरल टेम्पोरल ऑपरेटर है ## ऑपरेटर जो एक संयोजन करता है:[clarification needed]

sequence S1;
    @(posedge clk) req ##1 gnt;
endsequence

यह क्रम मेल खाता है यदि gnt एक घड़ी चक्र के बाद सिग्नल हाई हो जाता है req ऊँचा जाता है. ध्यान दें कि सभी अनुक्रम संचालन एक घड़ी के साथ समकालिक होते हैं।

अन्य अनुक्रमिक ऑपरेटरों में पुनरावृत्ति ऑपरेटरों के साथ-साथ विभिन्न संयोजन भी शामिल हैं। ये ऑपरेटर डिज़ाइनर को डिज़ाइन घटकों के बीच जटिल संबंधों को व्यक्त करने की अनुमति देते हैं।

एक अभिकथन किसी अनुक्रम या संपत्ति का लगातार मूल्यांकन करने का प्रयास करके काम करता है। यदि संपत्ति विफल हो जाती है तो एक दावा विफल हो जाता है। उपरोक्त अनुक्रम कभी भी विफल हो जाएगा req नीचे है। उस आवश्यकता को सटीक रूप से व्यक्त करने के लिए gnt अनुसरण करना req एक संपत्ति आवश्यक है:

property req_gnt;
    @(posedge clk) req |=> gnt;
endproperty

assert_req_gnt: assert property (req_gnt) else $error("req not followed by gnt.");

यह उदाहरण एक सामग्री निहितार्थ (तार्किक संयोजक) ऑपरेटर दिखाता है |=>. निहितार्थ के बाईं ओर के उपवाक्य को पूर्ववर्ती (तर्क) कहा जाता है और दाईं ओर के उपवाक्य को परिणामी कहा जाता है। किसी निहितार्थ की व्याख्या (तर्क) पूर्ववृत्त का मूल्यांकन करने के बार-बार किए गए प्रयासों से शुरू होती है। भौतिक निहितार्थ (अनुमान का नियम), परिणाम का प्रयास किया जाता है, और दावे की सफलता परिणाम की सफलता पर निर्भर करती है। इस उदाहरण में, परिणामी प्रयास तब तक नहीं किया जाएगा req ऊँचा चला जाता है, जिसके बाद संपत्ति विफल हो जाएगी यदि gnt निम्नलिखित घड़ी पर उच्च नहीं है।

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

कवरेज

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

SystemVerilog कवरेज समूह डिब्बे का एक डेटाबेस बनाता है जो संबंधित चर के मानों का हिस्टोग्राम संग्रहीत करता है। क्रॉस-कवरेज को भी परिभाषित किया जा सकता है, जो कई चर के कार्टेशियन उत्पाद का प्रतिनिधित्व करने वाला एक हिस्टोग्राम बनाता है।

जब कोई नमूना लिया जाता है तो एक नमूनाकरण (सांख्यिकी) घटना नियंत्रित करती है। नमूनाकरण (सिग्नल प्रोसेसिंग) इवेंट एक वेरिलॉग इवेंट, कोड के ब्लॉक का प्रवेश या निकास, या कॉल हो सकता है sample कवरेज समूह की विधि. यह सुनिश्चित करने के लिए देखभाल की आवश्यकता है कि डेटा का नमूना तभी लिया जाए जब वह सार्थक हो।

उदाहरण के लिए:

class eth_frame;
   // Definitions as above
   covergroup cov;
      coverpoint dest {
          bins bcast[1] = {48'hFFFFFFFFFFFF};
          bins ucast[1] = default;
      }
      coverpoint f_type {
          bins length[16] = { [0:1535] };
          bins typed[16] = { [1536:32767] };
          bins other[1] = default;
      }
      psize: coverpoint payload.size {
          bins size[] = { 46, [47:63], 64, [65:511], [512:1023], [1024:1499], 1500 };
      }

      sz_x_t: cross f_type, psize;
   endgroup
endclass

इस उदाहरण में, सत्यापन इंजीनियर प्रसारण और यूनिकास्ट फ़्रेम, आकार/f_प्रकार फ़ील्ड और पेलोड आकार के वितरण में रुचि रखता है। पेलोड आकार कवरपॉइंट की श्रेणियां दिलचस्प कोने के मामलों को दर्शाती हैं, जिसमें न्यूनतम और अधिकतम आकार के फ्रेम शामिल हैं।

सिंक्रनाइज़ेशन

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

शास्त्रीय वेरिलॉग में सामान्य सुधार

उपरोक्त नई सुविधाओं के अलावा, SystemVerilog Verilog की मौजूदा भाषा सुविधाओं की उपयोगिता को बढ़ाता है। इनमें से कुछ संवर्द्धन निम्नलिखित हैं:

  • प्रक्रियात्मक असाइनमेंट ऑपरेटर (<=, =) अब ऐरे प्रोग्रामिंग संचालित कर सकते हैं।
  • पोर्ट (इनआउट, इनपुट, आउटपुट) परिभाषाओं को अब विभिन्न प्रकार के डेटा प्रकारों का समर्थन करने के लिए विस्तारित किया गया है: संरचना, गणना प्रकार, वास्तविक गणना और बहु-आयामी प्रकार समर्थित हैं।
  • पाश के लिए निर्माण अब फॉर स्टेटमेंट के अंदर स्थानीय वैरिएबल की अनुमति देता है। नियंत्रण प्रवाह द्वारा लूप नियंत्रण प्रवाह में सुधार होता है।
  • SystemVerilog While लूप|while लूप निर्माण में Do while लूप|do/while लूप जोड़ता है।
  • कॉन्स्टेंट (कंप्यूटर प्रोग्रामिंग), यानी जिन्हें रनटाइम के दौरान गैर-परिवर्तनीय के रूप में नामित किया गया है, उन्हें कॉन्स्ट (कंप्यूटर प्रोग्रामिंग) के उपयोग द्वारा निर्दिष्ट किया जा सकता है।
  • इनिशियलाइज़ेशन (प्रोग्रामिंग) अब सरणियों पर काम कर सकता है।
  • वृद्धि और वेतन वृद्धि ऑपरेटर (x++, ++x, x--, --x) SystemVerilog में समर्थित हैं, जैसे अन्य संवर्धित असाइनमेंट ऑपरेटर हैं (x += a, x -= a, x *= a, x /= a, x %= a, x <<= a, x >>= a, x &= a, x ^= a, x |= a) जैसा कि सी-परिवार प्रोग्रामिंग भाषाओं की सूची में है।
  • प्रीप्रोसेसर ने डिफाइन डायरेक्टिव|`डिफाइन प्रक्रमण करने से पहले के निर्देश -प्रतिस्थापन क्षमताओं में सुधार किया है, विशेष रूप से शाब्दिक-स्ट्रिंग्स ( ) के भीतर प्रतिस्थापन, साथ ही बंधन |एक ही शब्द में एकाधिक मैक्रो-टोकन का संयोजन।
  • फोर्क-जॉइन मॉडल|फोर्क/जॉइन निर्माण को जॉइन_नॉन और जॉइन_एनी के साथ विस्तारित किया गया है।
  • `टाइमस्केल निर्देश के अतिरिक्त सिमुलेशन टाइमस्केल को एक बड़े सिमुलेशन वातावरण में अधिक पूर्वानुमानित रूप से नियंत्रित करने की अनुमति देता है, प्रत्येक स्रोत फ़ाइल एक स्थानीय टाइमस्केल का उपयोग करती है।
  • टास्क पोर्ट को अब रेफरी घोषित किया जा सकता है। एक संदर्भ कार्य निकाय को कॉलर के दायरे में स्रोत तर्कों तक सीधी पहुंच प्रदान करता है, जिसे कंप्यूटर प्रोग्रामिंग में संदर्भ से गुजरें के रूप में जाना जाता है। चूंकि यह तर्क के मूल्य की प्रतिलिपि के बजाय मूल चर पर ही काम कर रहा है, कार्य/फ़ंक्शन वास्तविक समय कंप्यूटिंग में कॉलर के दायरे में चर (लेकिन नेट नहीं) को संशोधित कर सकता है। इनआउट/आउटपुट पोर्ट घोषणाएं वेरिएबल पास दर मूल्य पास करती हैं, और कार्य समाप्त होने तक कॉलर-स्कोप वेरिएबल को अपडेट करना स्थगित कर देती हैं।
  • फ़ंक्शंस को अब शून्य प्रकार घोषित किया जा सकता है, जिसका अर्थ है कि यह प्रतिलाभ की मात्रा का कोई मूल्य नहीं है।
  • पैरामीटर (कंप्यूटर प्रोग्रामिंग) को उपयोगकर्ता-परिभाषित टाइपडेफ़ सहित किसी भी प्रकार से घोषित किया जा सकता है।

इसके अलावा, SystemVerilog SystemVerilog DPI (डायरेक्ट प्रोग्रामिंग इंटरफ़ेस) द्वारा सुविधाजनक भाषा इंटरऑपरेबिलिटी (जैसे C/C++) की अनुमति देता है।

सत्यापन और संश्लेषण सॉफ्टवेयर

डिज़ाइन सत्यापन भूमिका में, SystemVerilog का चिप-डिज़ाइन उद्योग में व्यापक रूप से उपयोग किया जाता है। तीन सबसे बड़े ईडीए विक्रेताओं (ताल डिजाइन सिस्टम, मेंटर ग्राफ़िक्स , सिनोप्सिस) ने सिस्टमवेरिलॉग को अपने मिश्रित-भाषा एचडीएल सिम्युलेटर में शामिल किया है। हालाँकि कोई भी सिम्युलेटर अभी तक संपूर्ण SystemVerilog भाषा संदर्भ मैनुअल के लिए समर्थन का दावा नहीं कर सकता है, जिससे टेस्टबेंच अंतर एक चुनौती बन गई है, क्रॉस-वेंडर संगतता को बढ़ावा देने के प्रयास चल रहे हैं।[when?] 2008 में, कैडेंस और मेंटर ने पुन: प्रयोज्य टेस्टबेंच और डिब्बाबंद सत्यापन-आईपी के विकास की सुविधा के लिए ओपन वेरिफिकेशन मेथडोलॉजी, एक ओपन-सोर्स क्लास-लाइब्रेरी और उपयोग-ढांचा जारी किया। सिनोप्सिस, जो सिस्टम वेरिलॉग क्लास-लाइब्रेरी (वीएमएम) प्रकाशित करने वाला पहला था, ने बाद में अपने मालिकाना वीएमएम को आम जनता के लिए खोलकर प्रतिक्रिया व्यक्त की। कई तृतीय-पक्ष प्रदाताओं ने SystemVerilog सत्यापन आईपी की घोषणा की है या पहले ही जारी कर दी है।

लॉजिक सिंथेसिस भूमिका (हार्डवेयर-डिज़ाइन विवरण को गेट-नेटलिस्ट में बदलना) में, SystemVerilog को अपनाना धीमा रहा है। कई डिज़ाइन टीमें डिज़ाइन प्रवाह का उपयोग करती हैं जिसमें विभिन्न विक्रेताओं के कई उपकरण शामिल होते हैं। अधिकांश डिज़ाइन टीमें SystemVerilog RTL-डिज़ाइन पर तब तक माइग्रेट नहीं कर सकतीं जब तक कि उनका संपूर्ण फ्रंट-एंड टूल सूट (लिंट (सॉफ़्टवेयर), औपचारिक सत्यापन और स्वचालित परीक्षण पैटर्न पीढ़ी) एक सामान्य भाषा उपसमूह का समर्थन नहीं करता।[needs update?]

यह भी देखें

संदर्भ

  • 1800-2005 — IEEE Standard for System Verilog—Unified Hardware Design, Specification, and Verification Language. 2005. doi:10.1109/IEEESTD.2005.97972. ISBN 978-0-7381-4810-6.
  • 1800-2009 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language. 2009. doi:10.1109/IEEESTD.2009.5354441. ISBN 978-0-7381-6130-3.
  • 1800-2012 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language. 2013. doi:10.1109/IEEESTD.2013.6469140. ISBN 978-0-7381-8110-3.
  • 1800-2017 — IEEE Standard for SystemVerilog—Unified Hardware Design, Specification, and Verification Language. 2017. doi:10.1109/IEEESTD.2018.8299595. ISBN 978-1-5044-4509-2.
  • McGrath, Dylan (2005-11-09). "IEEE approves SystemVerilog, revision of Verilog". EE Times. Retrieved 2007-01-31.
  • Puneet Kumar (2005-11-09). "System Verilog Tutorial".
  • Gopi Krishna (2005-11-09). "SystemVerilog ,SVA,SV DPI Tutorials".
  • HDVL. "More SystemVerilog Weblinks".
  • Spear, Chris, "SystemVerilog for Verification" Springer, New York City, NY. ISBN 0-387-76529-8
  • Stuart Sutherland, Simon Davidmann, Peter Flake, "SystemVerilog for Design Second Edition: A Guide to Using SystemVerilog for Hardware Design and Modeling" Springer, New York City, NY. ISBN 0-387-33399-1
  • Ben Cohen, Srinivasan Venkataramanan, Ajeetha Kumari and Lisa Piper [1] SystemVerilog Assertions Handbook, 4th Edition, 2016- http://SystemVerilog.us
  • Ben Cohen Srinivasan Venkataramanan and Ajeetha Kumari [2] A Pragmatic Approach to VMM Adoption, - http://SystemVerilog.us
  • Erik Seligman and Tom Schubert [3] Formal Verification: An Essential Toolkit for Modern VLSI Design, Jul 24, 2015,


बाहरी संबंध

IEEE Standard Reference

The most recent SystemVerilog standard documents are available at no cost from IEEExplore.

Tutorials
Standards Development
Language Extensions
  • Verilog AUTOs – An open source meta-comment system to simplify maintaining Verilog code
Online Tools
  • EDA Playground – Run SystemVerilog from a web browser (free online IDE)
  • sverule – A SystemVerilog BNF Navigator (current to IEEE 1800-2012)
Other Tools
  • SVUnit – unit test framework for developers writing code in SystemVerilog. Verify SystemVerilog modules, classes and interfaces in isolation.
  • sv2v - open-source converter from SystemVerilog to Verilog