2013-10-04 3 views
2

VHDL로 프로그램을 읽고 데이터를 읽고 쓰고 있습니다. 내 프로그램은 라인에서 데이터를 읽고 처리 한 다음 새 값을 이전 위치에 저장해야합니다. 내 코드는 다소 비슷합니다 :VHDL의 텍스트 파일에서 특정 줄을 읽는 방법

WRITE_FILE: process (CLK) 
variable VEC_LINE : line; 
file VEC_FILE : text is out "results"; 
begin 

if CLK='0' then 
write (VEC_LINE, OUT_DATA); 
writeline (VEC_FILE, VEC_LINE); 
end if; 
end process WRITE_FILE; 

어떻게하면 좋을까요? 그런 다음 15 행을 지우고 새 데이터를 작성해야합니다. LINE은 액세스 유형이며 정수 값을 허용합니까?

답변

1

입력 파일과 출력 파일의 두 파일을 사용하십시오.

file_open(vectors, "stimulus/input_vectors.txt", read_mode); 
file_open(results, "stimulus/output_results.txt", write_mode); 

while not endfile(vectors) loop 
    readline(vectors, iline); 
    read(iline, a_in); 
    etc for all your input data... 

    write(oline, <output data> 
end loop; 

file_close(vectors); 
file_close(results); 
+0

하지만 15 번째 또는 지정된 라인을 읽는 방법 ?? 프로그램에 필요한 줄 번호를 전달하는 방법? VHDL을 사용하여 파일을 편집 할 수 없습니까? ?? – MSD

+0

실행중인 VHDL '프로그램'에 정보를 가져오고, STD_INPUT을 읽고, 명령 파일을 읽는 몇 가지 방법이 있습니다. 일부 VHDL 도구를 사용하면 명령 줄에 제네릭을 설정할 수 있으며 항상 FOREIGN 기능이 있습니다. VHDL은 범용 프로그래밍에 적합하지 않습니다. – user1155120

2

러셀의 답변 - 두 개의 파일 사용 - 대답입니다.

15 번째 라인을 찾는 좋은 방법은 없지만 VHDL의 목적을 위해 처음 14 개의 라인을 읽고 폐기하는 것이 적합합니다. 그냥 "찾기"라는 절차에 포장하고 계속!

17 번째 줄에 이미 있다면 뒤로 탐색하거나 처음으로 되감을 수 없습니다. 당신이 할 수있는 것은 출력 파일을 플러시하는 것입니다. (열린 선을 저장하고 나머지 입력 파일을 복사 한 다음 두 파일을 닫은 다음 다시여십시오.) VHDL-93은 VHDL-93이 아닌 파일 작업을 위해 필요합니다. 그걸 "되감기"라는 절차로 감싸고 계속하십시오!

현재 줄 번호를 기억하면 이제 어디서든 15 번 줄을 찾을 수 있습니다.

꽤 빠르지는 않지만 빠르지는 않지만 잘 작동합니다. 그리고 그것은 VHDL의 목적에 충분합니다. 당신이 , (대화 형 입력의 문제를 무시 stdin을 읽는 것은 작동해야하지만)해야하는 경우 즉

당신은 VHDL에서 텍스트 편집기를 쓸 수 있지만, 작업에 대한 더 나은 언어가있다. 그들 중 하나는 심지어 객체 지향 VHDL과 비슷해 보입니다 ...

관련 문제