Vhdl 关于用行距阅读课文的问题

Vhdl 关于用行距阅读课文的问题,vhdl,Vhdl,我正在尝试编写一个程序,以十六进制格式逐字节读取数据长行。我能够按预期逐字节读取十六进制格式的数据,但有两个问题 1) 例如,我面临的一个小问题是:如果正在读取的文本代码是AA BB CC-(将-作为一个额外的字符空间),它将导致代码停止读取字符空间后的行的其余部分 2) 下一个问题是,如果行之间有额外的行空间。例如: AA BB --(paragraph or line spacing in between here) CC DD 程序将在AA BB之后停止读取。你对如何补救有什么想

我正在尝试编写一个程序,以十六进制格式逐字节读取数据长行。我能够按预期逐字节读取十六进制格式的数据,但有两个问题

1) 例如,我面临的一个小问题是:如果正在读取的文本代码是
AA BB CC-
(将-作为一个额外的字符空间),它将导致代码停止读取字符空间后的行的其余部分

2) 下一个问题是,如果行之间有额外的行空间。例如:

AA BB  
--(paragraph or line spacing in between here)  
CC DD
程序将在AA BB之后停止读取。你对如何补救有什么想法吗

对于问题(1),我添加了另一个
read(内联,v_SPACE1)行。这似乎在很大程度上起了作用。除了成绩单一直显示TEXTIO procedure READ(字符):参数L指定一个空字符串。我希望这不会影响以后的阅读

对于问题(2),我尝试添加readline(infle,inline);还有另一个while循环,但我想那是行不通的

--Library used
----
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE IEEE.std_logic_textio.all;
LIBRARY STD;
USE STD.textio.all;
USE IEEE.std_logic_unsigned.all;
USE IEEE.numeric_std.all;
---
--signal used
signal readdatainput : std_logic_vector(7 downto 0);


--variable used
variable v_SPACE1     : character;
variable inline    : line; --line number declaration
file   listfile    : text is in  "list.txt"; --this file is used for a different purpose 
variable inputdata : std_logic_vector(7 downto 0);
file      infile : text;
variable inputdata : std_logic_vector(7 downto 0);
------------------------------------
begin
-
-
-
file_open(infile,inline.ALL,READ_MODE); --inline.ALL refers an earlier part of the program which reads from a text files and gathers the names of files to open
while not endfile(infile) loop   --checking the "END OF FILE" is not reached.
    readline(infile, inline);       --reading a line from the file.
    next when inline(1) = '#'; 
    next when inline(1) = '[';
    while (inline'length /= 0)  loop 
        hread(inline, inputdata);
        readdatainput <= inputdata;
        wait until rising_edge(clock);

        read(inline, v_SPACE1); -- this is my attempt for character space   
    end loop;
end loop;
file_close(infile);  
——使用的库
----
图书馆ieee;
使用ieee.std_logic_1164.all;
使用IEEE.std_logic_textio.all;
图书馆标准;
使用STD.textio.all;
使用IEEE.std_logic_unsigned.all;
使用IEEE.numeric_std.all;
---
--使用的信号
信号读取数据输入:标准逻辑向量(7到0);
--使用的变量
变量v_SPACE1:字符;
变量内联:行--行号声明
文件列表文件:文本在“list.txt”中--此文件用于其他目的
变量输入数据:标准逻辑向量(7到0);
文件填充:文本;
变量输入数据:标准逻辑向量(7到0);
------------------------------------
开始
-
-
-
文件打开(内嵌、内联、全部、读取模式)--inline.ALL是指程序的早期部分,它从文本文件中读取并收集要打开的文件名
而不是endfile(内嵌)循环——检查未达到“文件结尾”。
读线(内嵌、内联)--从文件中读取一行。
下一步当内联(1)=“#”时;
下一步当内联(1)='[';
while(inline'length/=0)循环
线程(内联,输入数据);
readdatainput是,问题可以解决

从您的问题来看,您的代码似乎缺少跳过尾随空格或空行的功能。hread/read等已具有跳过前导空格的功能

代码段扩展为能够模拟的VHDL设计单元,并进行更改以忽略空行和尾随空白:

ieee库;
使用std.textio.all;
使用ieee.std_logic_1164.all;
使用ieee.std_logic_textio.all;
实体可转发是
通用(文件名:string:=“data.txt”);
终端实体;
可重用的架构示例是
信号时钟:标准逻辑:='0';
信号读取数据输入:标准逻辑向量(7到0);
开始
一些程序:
过程
变量内联:行;
文件填充:文本;
变量输入数据:标准逻辑向量(7到0);
变量c:字符;
开始
文件打开(填充、文件名、读取模式);
而不是结束文件(内嵌)循环
读线(内嵌、内联);
下一步当inline'length=0时;--跳过空行
下一步当内联(1)=“#”时;
下一步当内联(1)='[';
内联时.all'length/=0循环
内联时.all'length/=0循环——吃空格
c:=inline(inline'left);--read可以修改或取消分配
如果c=''或c=CR或c=HT,则
读取(内联,c);
其他的
出口
如果结束;
端环;
如果inline.all'length=0,那么——除了空格之外什么都没有
出口
如果结束;
线程(内联,输入数据);

readdatainput您的代码中存在一些问题,无法完全理解。您似乎正在对文件名和文件中的行重新使用
inline
。在循环之前,如果不调用
inline
上的DEALLOCATE,则会造成内存泄漏。您也不会显示正在使用的库或
v\S的声明PACE1
。请将问题更新为完全可重复的示例。inline.all for filename指的是程序的早期部分,其中读取文本文件的名称,然后在此处打开。我添加了使用的库和变量,但仍然缺少声明。什么是infle?readdatainput?线程应该删除whitesp读取之间的ace,因此不需要尝试在空间中读取。如果非标准std_logic_textio库不是这种情况,那么我建议使用VHDL 2008,因为线程是std_logic_1164的一部分。此外,我建议对文件声明使用'93语法,而不是'87语法。我对线程使用ieee.std_logic_1164.all;。这是库不正确?另外,如果读取之间有2个空格,会发生什么情况?如果使用VHDL 2008,可以删除std_logic_textio包。read/oread/hread将删除读取之间的所有空格。