2011-09-01 15 views
5

मैं एक वीएचडीएल टेस्ट बेंच में टेक्स्ट डेटा लोड कर रहा हूं और मैं इनपुट स्ट्रिंग को पूर्णांक मानों में कनवर्ट करना चाहता हूं।वीएचडीएल में स्ट्रिंग को पूर्णांक में कैसे परिवर्तित करें?

उदाहरण के लिए: "123" => 123

कोई VHDL में पूर्णांक के लिए तार को बदलने की एक "सर्वश्रेष्ठ" जिस तरह की सिफारिश कर सकते हैं?

उत्तर

6

ReadLine और कार्यों को पढ़ने को प्राप्त करना चाहिए कि आप क्या देख रहे हैं।

मूल रूप से

:

  1. अपनी फ़ाइल ReadLine
  2. उपयोग एक लाइन बफर
  3. उपयोग उपयोगी डेटा के लिए लाइन बफर पार्स करने के लिए पढ़ने के लिए में फ़ाइल से अगली पंक्ति पाने के लिए खोलें
  4. (वैकल्पिक) आवश्यक के रूप में पार्स मूल्य परिवर्तित

कोड स्निपेट:

library STD; 
use std.textio.all; 
... 
variable File_Name   : string; 
file my_file    : text; 
variable lineptr   : line; 
variable temp    : integer; 
... 
file_open(my_file, File_Name, read_mode); -- open the file 
readline(my_file, lineptr); -- put the next line of the file into a buffer 
read(lineptr, temp); -- "parse" the line buffer to an integer 
-- temp now contains the integer from the line in the file 
... 
+0

वह सर एक स्वादिष्ट जवाब है। धन्यवाद! –

4

संदर्भ के लिए। यह भी संभव है 'value विशेषता का उपयोग पूर्णांक एक स्ट्रिंग परिवर्तित करने के लिए:

variable str : string := "1234"; 
variable int : integer; 
... 

int := integer'value(str); 

एक की जरूरत पर निर्भर करता है, क्योंकि यह विध्वंस स्रोत स्ट्रिंग में परिवर्तन नहीं करता इस read() प्रक्रिया की तुलना में अधिक वांछनीय हो सकता है। हालांकि, यह केवल तभी काम करता है जब स्ट्रिंग एक वैध पूर्णांक अक्षर है, जिसमें व्हाइटस्पेस के अलावा अन्य आसपास के वर्ण नहीं हैं।

variable ln : line; 
variable int : integer; 
... 

ln := new string'(" 456 "); -- Whitespace will be ignored 
int := integer'value(ln.all); -- Doesn't consume contents of ln 

ln := new string'("789_000 more text"); 
int := integer'value(ln.all); -- This will fail unlike read()