top of page

पैकेजेस (Packages):

अब हम समझेंगे कि एक पैकेज कैसे बनाया जाता है। चलिए देखते हैं।

paf1.png

पैकेज डिक्लेरेशन:

 VHDL में, पैकेज बनाने का मतलब है कई संबंधित चीज़ों को एक जगह इकट्ठा करना, जैसे:

  • कॉन्स्टेंट्स (Constants)
     

  • टाइप्स / सबटाइप्स (Types / Subtypes)
     

  • फ़ंक्शन्स / प्रोसिज़र्स (Functions / Procedures)
     

  • रीयूज़ेबल कॉम्पोनेंट्स (Modules/Entities)

और जो भी तुम्हारे डिज़ाइन के लिए ज़रूरी है, उसे तुम इसमें रख सकते हो और अलग-अलग फाइलों में बार-बार लिखने की ज़रूरत नहीं होती।

सीधे शब्दों में, एक पैकेज एक डिब्बा है जहाँ तुम अपनी रीयूज़ेबल और ज़रूरी चीजें रखते हो, ताकि बार-बार लिखना न पड़े।

VHDL में पैकेज का इस्तेमाल क्यों करते हैं?

 

VHDL में पैकेज का इस्तेमाल इसलिए किया जाता है ताकि कॉमन कोड को बार-बार अलग-अलग फाइलों में न लिखना पड़े।

  • एक बार पैकेज में रख दो, और हर जगह से उसका इस्तेमाल कर लो।
     

  • पैकेज के अंदर आमतौर पर ये रखे जाते हैं:
     

    • constants
       

    • types
       

    • functions/procedures
       

    • component declarations (entity का ब्लूप्रिंट जैसा)
       

और फिर किसी भी RTL फाइल में बस लिखते हैं:

use work.my_package.all;

 

और तुम उन definitions और components को दुबारा इस्तेमाल कर सकते हो।

तो अगर हमें एक ही design को दूसरी RTL फाइल में इस्तेमाल करना है, तो उसका component एक पैकेज में declare करते हैं और फिर जहाँ चाहिए वहाँ instantiate कर लेते हैं।

VHDL Counter को कई फाइलों में कैसे री-यूज़ करें

VHDL में, तुम entity + architecture दोनों को पैकेज में नहीं रख सकते।

एक पैकेज सिर्फ इन चीज़ों के लिए होता है:

  • Constants
     

  • Types
     

  • Functions/Procedures
     

Component Declarations (entity का "blueprint")

सही तरीका:

Step 1: अपना counter अलग से लिखो

 पूरी entity + architecture को एक अलग फाइल में रखो,

जैसे counter.vhd

VHDL

Step 2: Component Declaration के साथ एक पैकेज बनाओ

अब एक पैकेज फाइल बनाओ,

जैसे up_down_pkg.vhd

VHDL

यह एक header file जैसा काम करता है (C/C++ में जैसा होता है)।

Step 3: किसी और design में पैकेज का इस्तेमाल करो

अपनी top फाइल में पैकेज import करो और counter को instantiate करो:

VHDL

यहाँ top file के अंदर up/down counter को instantiate किया गया है, जो port mapping से किया जाता है।

जब design बहुत बड़ा होता है और एक component को दूसरे design में इस्तेमाल करना होता है, तो उसे port map करते हैं।

Test Bench:

VHDL

Elaborated Diagram:

PAL2.png

Synthesis:

PAL3.png

Simulation:

PAL4.png

पैकेज में क्या-क्या हो सकता है?

एक VHDL package में जितने चाहो उतने components रख सकते हो, जैसे:

  • constants
     

  • types
     

  • subtypes
     

  • functions
     

  • procedures
     

  • reusable component declarations
     

VHDL में कोई strict limit नहीं है, लेकिन practical limit तुम्हारे tool/compiler और design complexity पर depend करती है।

Better readability और reuse के लिए related components को group करके रखना चाहिए, और बहुत बड़े packages को छोटे-छोटे logical packages में बाँटना चाहिए।

Libraries:

VHDL में, एक library एक storage जगह होती है जहाँ तुम्हारे compiled design units रखे जाते हैं। जब भी तुम VHDL code लिखते हो – entity, architecture, या package – और उसे compile करते हो, तो compiler उसे किसी library में store करता है।

इसे bookshelf समझ लो: library = shelf, और design units = books।

कुछ libraries हमेशा available होती हैं:

  • ieee library: इसमें standard packages होते हैं जैसे std_logic_1164, numeric_std
     

  • std library: इसमें basic VHDL definitions होते हैं
     

  • work library: ये तुम्हारी default library होती है, इसमें तुम्हारा compiled code जाता है अगर तुम कुछ और specify न करो।
     

 

तुम अपनी custom libraries भी बना सकते हो।

Example:

  • RTL code के लिए एक library
     

  • Testbenches के लिए दूसरी library
     

  • Utility packages के लिए तीसरी library
     

Simulators/tools में pehle library create करनी होती है, फिर compiler से design files उसमें compile करनी होती हैं। बाद में किसी aur file में use करने के लिए लिखना होता है:

library mylib;

use mylib.my_package.all;

 

 

Library और Package का relation:

  • Package: Header file जैसा, इसमें constants, functions, component declarations होते हैं।
     

  • Library: Container/folder, जिसमें package (aur design units) compile होकर रहते हैं।
     

तो पहले package लिखते हो, फिर उसे compile करके किसी library में डालते हो, और बाद में दूसरी file में use करते हो।

 

Benefit kya hai?

अगर सब कुछ work library में ही डाल दोगे तो छोटी designs में कोई issue नहीं।
लेकिन बड़े projects (CPU, FPGA design, etc.) में sab kuch एक ही जगह डालने से गड़बड़ हो जाती है।

Custom libraries alag-alag folder जैसा काम करती हैं:

  • एक library RTL code के लिए
     

  • दूसरी testbench के लिए
     

  • तीसरी utility packages के लिए
     

Aur ek bada faayda ye hai ki agar tumne ek package banaya utils_lib में aur usme math functions likhe, to agle project me seedha:

library utils_lib;

use utils_lib.my_pkg.all;

 

Aur tumhe dobara compile karne की ज़रूरत नहीं।

 

Professional flow

ASIC/FPGA teams almost hamesha aise hi alag-alag libraries use karti hain:

  • Vendor IP cores alag library me
     

  • RTL alag me
     

  • Verification alag me
     

Isse build aur simulation environment saaf aur organized रहता है।

 

छोटे student projects में sab kuch work में डालना ठीक है।


Lekin बड़े projects में alag-alag libraries banana helpful होता है:

  • Organization के लिए
     

  • Name conflicts से बचने के लिए
     

  • Reuse आसान बनाने के लिए
     

  • Design aur Test को अलग रखने के लिए
     

 

अब चलो library ieee को समझते हैं:

library ieee;

 

ये VHDL को बताता है कि हमें एक predefined library चाहिए, जिसका नाम ieee है।

use ieee.std_logic_1164.all;

 

इससे हम ieee library के अंदर मौजूद std_logic_1164 package की सारी चीजें use कर सकते हैं।

ये package हमें देता है std_logic aur std_logic_vector, जिनसे हम signals represent करते हैं जैसे:

  • 0
     

  • 1
     

  • unknown (X)
     

  • high-impedance (Z)
     

use work.up_down_pkg.all;

 

यहाँ work current project की library है जहाँ हमारा code compile होता है।

up_down_pkg हमारा बनाया हुआ package है जिसमें reusable code है (constants, types, functions आदि)।

all का मतलब है उस package की सारी चीजें import कर लो।

ये तब काम आता है जब हम ek hi counter types, constants, ya helper functions ko कई अलग-अलग VHDL files me reuse करना चाहते हैं बिना बार-बार likhe।

Functions and Procedure

Generics and Generates
 

© Copyright 2025 VLSI Mentor. All Rights Reserved.©

Connect with us

  • Instagram
  • Facebook
  • Twitter
  • LinkedIn
  • YouTube
bottom of page