2013-10-04 107 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行,我該如何指定它?然後我想清除第15行,並且必須在那裏寫入新數據。 LINE是訪問類型,它會接受整數值嗎?

回答

1

使用2個文件,一個輸入文件和一個輸出文件。

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行(seek)沒有好的方法,但對於VHDL的目的,讀取和丟棄前14行是完全合適的。只需將它包裝在一個名爲「seek」的過程中,然後繼續!

如果您已經在第17行,則無法倒退或倒退到開頭。你可以做的是刷新輸出文件(保存開放的行,將其餘的輸入文件複製到它,關閉這兩個文件並重新打開它們。當然,這需要VHDL-93而不是文件操作的VHDL-87語法)。只需在一個名爲「倒帶」的程序中包裝它,然後繼續!

跟蹤當前的行號,現在你可以尋找第15行,無論你身在何處。

這不是很漂亮,它不是很快,但它會工作得很好。這對於VHDL的目的來說已經足夠了。

換句話說,你可以在VHDL文本編輯器,如果你必須,(忽略交互輸入的問題,雖然讀stdin應該工作),但也有這份工作更好的語言。其中一個甚至看起來很像一個面向對象的VHDL ...

相關問題