2012-11-18 30 views
5

क्या एसटीडी_LOGIC_1164 या STD_NUMERIC से प्री-डिफ़ाइंड प्रकारों का उपयोग करने का कोई तरीका है 0 से 2^32-1 तक के पूर्णांक का प्रतिनिधित्व करने के लिए? (डिफ़ॉल्ट पूर्णांक प्रकार पर विचार करने से -2^31-1 से 2^31-1)पूर्णांक से अधिक पूर्णांक का प्रतिनिधित्व कैसे करें

मुझे 32-बिट काउंटर को लागू करने की आवश्यकता है और std_logic_vector के बजाय पूर्णांक प्रकार का उपयोग करके कोड को सहेजने के लिए कुछ तरीका ढूंढ रहा था .. इसके लिए कोई डिजाइन पैटर्न?

या, बेहतर पूछा गया: संचालन का समर्थन करने वाले 32-बिट (हस्ताक्षरित) पूर्णांक घोषित करने का सबसे अच्छा तरीका क्या है>/<, =, + - /?

tahnks पहले से

Edit1: एक विकल्प मैंने पाया std_logic_vector (31 0 downto) के रूप में एक संकेत घोषित करने के लिए, और जब तुलना या + कर रूपांतरण प्रदर्शन करने के लिए था - संचालन .. पूर्व: काउंटर < = काउंटर + std_logic_vector (हस्ताक्षरित (मान) + 1) .. फिर भी विभाजन करने का कोई तरीका नहीं मिला है (उदाहरण के लिए, उदाहरण के लिए, काउंटर के मूल्य के 1/4 की आवश्यकता है)

+0

std_logic_vector पर numeric_std को प्राथमिकता दें जहां आप कर सकते हैं। 4 (या 2 की शक्तियों) द्वारा विभाजन के लिए या तो numeric_std में शिफ्ट ऑपरेटरों को देखें, या वेक्टर स्वयं को स्लाइस करें। आउटपुट <= "00" और इनपुट (31 से 2 तक); –

उत्तर

7

इंटीजर प्रकारों का उपयोग करके, आप (कम से कम, पोर्टेबल नहीं हो सकता है; कुछ वीएचडीएल उपकरण हो सकते हैं जो न्यूनतम से अधिक हो जाते हैं और 64-बिट पूर्णांक प्रदान करते हैं)

IEEE.numeric_std का उपयोग करके, आप एक पूर्ण 32-बिट रेंज (या 53-बिट यदि आप चाहें) के साथ बिना हस्ताक्षर किए घोषित कर सकते हैं और इसे जो कुछ भी आप चाहते हैं उसे करना चाहिए। कोई भी, जब तक कि मैं आपसे क्या पूछ रहा हूं उसे गलत समझ न दें।

+0

इसने वास्तव में इस मुद्दे को हल किया। मैंने अपना सिग्नल बिना हस्ताक्षर किए (31 से 0 तक) घोषित किया और अब यह आवश्यक संचालन का समर्थन करता है (कभी-कभी आउटपुट पर मैप करने के लिए std_logic_vector (काउंटर) का उपयोग करते हुए)। जवाब के लिए धन्यवाद। – mbrandalero

+1

लिखने() और लेखन रेखा() का उपयोग कर टेक्स्ट फ़ाइल में बड़े पूर्णांक कैसे लिखेंगे? आम तौर पर, मैं इस to_integer (unsigned (sig1)) की तरह पूर्णांक में परिवर्तित करता हूं। मुझे विश्वास नहीं है कि हम एक एचडीएल का उपयोग कर रहे हैं जो फ़ाइलों को बड़ी संख्या में मूल रूप से लिख नहीं सकता है। –

2
use ieee.numeric_std.all; 

और फिर unsigned डेटा प्रकार का उपयोग करें - इस गणितीय क्रियाओं इसके लिए परिभाषित के साथ एक सा वेक्टर के रूप में चल रही है। आप चुन सकते हैं कि आप कितनी बिट्स चाहते हैं। उदाहरण के लिए:

signal mynum : unsigned(234 downto 0)