Generics
VHDL में, generics का उपयोग उसी तरह किया जाता है जैसे Verilog में parameters का। ये हमें डिज़ाइन को flexible बनाने की सुविधा देते हैं बजाय इसके कि values को hardcode करें। Generics के साथ, हम data width, bus width, address size, integer limits, या किसी भी signal की characteristic को अपनी आवश्यकता के अनुसार adjust कर सकते हैं।
इससे flexibility मिलती है ताकि वही डिज़ाइन अलग-अलग values पर बिना code दोबारा लिखे काम कर सके।
पहले यह केवल एक 4-bit up/down counter था,
लेकिन अब generic का उपयोग करके इसे एक N-bit counter में बदल दिया गया है।
अब counter की width को generic N के द्वारा स्वतंत्र रूप से चुना जा सकता है।
VHDL
Generic का मुख्य विचार डिज़ाइन architecture को generalize करना है। Code में आप देख सकते हैं कि अब counter को N-bit counter में बदल दिया गया है, जिसका अर्थ है कि यह fixed रहने के बजाय अलग-अलग width पर काम कर सकता है। Generic हमेशा entity के अंदर लिखा जाता है, और इसका syntax इस प्रकार दिखता है:
generic (
N : integer := <parameterized value>
);
मान लीजिए हम इसे 8 bit counter में बदलना चाहते हैं तो क्या करना होगा:
VHDL
हमने पहले article में elaborated diagram, synthesis, और simulation कवर किया था। यहाँ, मैं testbench code जोड़ रहा हूँ, जिसे मैंने पहले शामिल नहीं किया था।
Test Bench code:
VHDL
Simulation:

For more Clarity:
You can see values of counter below of above diagram:

Generate:
Generate statement VHDL में तब उपयोग की जाती है जब हमें एक बड़े डिज़ाइन के अंदर एक ही logic को कई बार दोहराना हो। बार-बार code लिखने के बजाय, हम इसे एक बार generate block के अंदर लिखते हैं, और hardware उसी logic के आधार पर स्वतः कई बार generate हो जाता है।
Verilog में, generate for loop का उपयोग भी बिल्कुल इसी तरह होता है जैसे VHDL में। बार-बार वही module instantiation या logic block लिखने की बजाय, इसे एक बार generate–for loop में लिखते हैं, और compiler अपने आप hardware की कई copies बना देता है। इससे design छोटा, साफ और बड़े sizes के लिए आसानी से scalable हो जाता है।
किसी बड़े डिज़ाइन में, हम generate loop को दो तरीकों से उपयोग कर सकते हैं। हम या तो पूरा logic सीधे generate block के अंदर लिख दें, या उस logic को एक अलग entity/component में लिखकर उसे generate loop के अंदर port map करके instantiate करें। दोनों ही तरीकों में hardware उतनी ही बार बनेगा जितनी बार loop चलता है।
First way:
VHDL
Elaborated Diagram:

Second way:
Entity:
VHDL
Multiple Counters in top
VHDL
Elaborated Diagram:

Expanded :

एक single-counter expansion RTL के हिसाब से पहले approach के बराबर है, लेकिन पहला approach hardware की दृष्टि से ज़्यादा efficient है।
उसी functionality के लिए, दूसरे approach में चार extra multiplexers लगते हैं, जबकि पहले में केवल एक।
