2012-04-02 30 views
5

मैं पढ़ रहा हूँ किसी तीसरे पक्ष Verilog, और यह पाया:"सादे" स्टार्ट-एंड ब्लॉक का बिंदु क्या है?

function [31:0] factorial; 
    input [3:0] operand; 
    reg [3:0] index; 

    begin 
     factorial = operand ? 1 : 0; 
     for(index = 2; index <= operand; index = index + 1) 
     factorial = index * factorial; 
    end 
endfunction 

ऐसा लगता है कि begin और end कीवर्ड यहां बेमानी हैं। क्या वो? उनका उपयोग क्या है?

उत्तर

8

मैं सामान्य स्थिति के बारे में पता नहीं है, लेकिन इस विशिष्ट मामले में:

If a function contains more than one statement, the statements must be 
enclosed in a begin-end or fork-join block. 

स्रोत: Verilog Golden Reference Guide

+0

'शुरू/end' अब एक' function' या SystemVerilog में कई बयानों के साथ 'task' लिए आवश्यक है। अन्य उत्तरों देखें। –

1

SystemVerilog विस्तार (आईईईई मानक 1800-2009) के अनुसार, शुरू/अंत function के अंदर वैकल्पिक हैं। हालांकि, आपके टूलसेट (सिम्युलेटर, इत्यादि) को इस वाक्यविन्यास को समझने में सक्षम होना चाहिए, जिसे 2005 में पेश किया गया था।

6

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

सादर - क्लिफ कमिंग्स - Verilog & SystemVerilog गुरु