- •Тема: vhdl проектирование криптографических процессоров с использованием файлового ввода/вывода
- •Вводные замечания
- •2. Практическая организация чтение текстовых данных из файла ос.
- •2.1 Проект Варианта 0
- •1.2 Проект Варианта 2
- •3. Практическая организация записи текстовых данных в файл ос.
- •4. Практическая организация добавления текстовых данных в файл ос.
- •6. Приложение №1: Процедуры пакета textio обеспечивающих запись/чтение стандартных типов данных
- •Временная диаграмма работы Проекта write2_file , реализующего процедуру добавления данных в файл показана на Рис.4.2
- •5. ПримерVhdl проекта оперирующего с файлами ос
- •7. Приложение №2: Общая структурная схема процесса записи/чтения файловых данных Процедура чтения/записи файлов (текстовые файлы)
2. Практическая организация чтение текстовых данных из файла ос.
2.1 Проект Варианта 0
File: D:\my_designs_ahdl\file_rd1\src\file_rd1.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use STD.TEXTIO.all;
entity file_rd1 is
port(
clk : in STD_LOGIC;
addr : in natural;
sim_out : out CHARACTER );
end file_rd1;
architecture file_rd1_ar of file_rd1 is
begin
process(clk, addr)
variable read_vec: string(1 to 15); --объявление программного буфера
variable sim: CHARACTER;
variable wid: natural;
file vect_r: TEXT open READ_MODE is –- Организация контейнера и "D:\my_designs_ahdl\file_rd1\src\fi.dat"; --связывание его с
-- файлом ОС
begin
if clk'event and clk='1' then
FILE_OPEN(vect_r,"D:\my_designs_ahdl\file_rd1\src\f1.dat", READ_MODE); --открытие контейнера
READ(vect_r, read_vec, wid);-- оператор вызова подпрогр. READ( )
sim:= read_vec(addr);
sim_out <= sim;
end if;
FILE_CLOSE(vect_r); --Закрытие контейнера
end process;
end file_rd1_ar;
Пояснения к отдельным строкам и переменным в описанной программе приведены ниже:
variable read_vec: string(1 to 15) – программный буфер-приемник данных из контейнера. Эта переменная определяет объем читаемых данных из контейнера;
variable wid: natural; - переменная, контролирующая количество прочитанных данных;
file vect_r: TEXT open READ_MODE is D:\my_designs_ahdl \file_rd1\src\fi.dat"; --объявление переменной Ф.Т. (контейнера) vect_r с
--правами READ_MODE и связывание ее файлом ОС
FILE_OPEN(vect_r,"D:\my_designs_ahdl\file_rd1\src\f1.dat", READ_MODE); --
--оператор вызова подпрограммы открытия файла;
READ(vect_r, read_vec, wid);-- оператор вызова подпрограммы чтения данных;
sim_out <= sim; -- пересылка читаемых данных (символов) на выходной порт;
FILE_CLOSE(vect_r); -- оператор вызова подпрограммы закрытия файла;
variable wid: natural; – указатель (курсор) файла.
Для моделирования работы проекта в файле D:\my_designs_ahdl\file_rd1\src\f1.dat расположен такой текст:
читаем текст из файла!
Рис. 2.В1.1 Содержимое файла, из которого читаем данные.
Примечание: Текстовые данные в файле (на строке) должны располагаться, начиная с пятой позиции.
Временная диаграмма работы проекта сохранена в файле D:\my_designs_ahdl\file_rd1\src\Waveform Editor1.awf и показана на рис.2.В1.2
Рис. 2.В1.2. Временная диаграмма работы проекта file_rd
1.2 Проект Варианта 2
File: D:\my_designs_ahdl\file_rd1\src\file_rd2.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use STD.TEXTIO.all;
entity file_rd2 is
port(
clk : in STD_LOGIC;
wid_out : out natural;
sim_out : out CHARACTER );
end file_rd2;
architecture file_rd2_ar of file_rd2 is
begin
process(clk)
variable read_vec: string(1 to 6);
variable addr: natural := 1;
variable sim: CHARACTER;
variable wid: natural;
file vect_r: TEXT open READ_MODE is "fi.dat"; -- Сокращенный путь к файлу
begin
if clk'event and clk='1' then
FILE_OPEN(vect_r,"f1.dat");
READ(vect_r, read_vec, wid);
sim:= read_vec(addr);
sim_out <= sim;
addr:=addr+1;
end if;
FILE_CLOSE(vect_r);
end process;
end file_rd2_ar;
Некоторые комментарии к данной программе приведены после текста программы Варианта 1.
--Текст в .dat файле начат с 5-й позиции.
--Контейнер read_vec содержит 6 позиций.
File: D:\my_designs_ahdl\file_rd1\src\Waveform Editor2.awf
Рис. 2.В2.1. Временная диаграмма работы проекта file_rd
