Читайте также:
|
|
Пример 1. Запись данных типа символьный string в файл ОС.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use STD.TEXTIO.all;
entity wr1_lin is
port(
clk: in STD_LOGIC
);
end wr1_lin;
architecture wr1_lin_ar of wr1_lin is
signal massiv20: string(1 to 20):= "paredigman is gut!!!";
begin
process(clk)
variable write_vec: string(1 to 20); --объявлен. Программного буфера
variable LA2: LINE; --объявл. Указателя на строку
variable virav: SIDE; -- прижатие строки вправо
variable pole: WIDTH:=30; -- ширина поля выделяемого под строку (30 поз.)
file vect_wr: TEXT open WRITE_MODE is "C:\Program -- объявл. Контейнера
Files\Aldec\Wr_line1\src\TextFile2.txt";
begin
if clk'event and clk ='1' then –выявление переднего фронта clk
write_vec:= massiv20; --запись данных в программный буфер
FILE_OPEN(vect_wr, "C:\Program Files\Aldec\Wr_line1\src\TextFile2.txt"
, WRITE_MODE);
WRITELINE(vect_wr, LA2);-- возвращает (генерир.) значен. Указат. LA2
WRITE(LA2, write_vec, virav, pole); -- запись данных в файл
end if;
FILE_CLOSE(vect_wr);
end process;
end wr1_lin_ar;
Пример 2. Запись данных типа integer в файл ОС.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use STD.TEXTIO.all;
entity Wr_L_int is
port(
clk: in STD_LOGIC);
end Wr_L_int;
architecture Wr_L_int_ar of Wr_L_int is
Type mas_int is array (0 to 7) of integer;
signal mas_int_sig: mas_int:= (25, 38, 456, 987, 12, 3456, 48, 50);
begin
process(clk)
variable write_el: integer range 0 to 5000; --Объявление скалярного буфера
variable LA1: LINE; -- объявл. Указателя на строку
variable virav: SIDE; --прижатие строки вправо по умолчанию
variable pole: WIDTH:=7; -- ширина поля выделяемого под число (7 позиц.)
file mas_wr_int: TEXT open WRITE_MODE is "C:\Program
Files\Aldec\Wr_line_Int\src\TextFile2.txt";
begin
if clk'event and clk ='1' then
FILE_OPEN(mas_wr_int, "C:\Program
Files\Aldec\Wr_line_Int\src\TextFile2.txt", WRITE_MODE);
WRITELINE(mas_wr_int, LA1); -- В этом варианте числа в файле
--расположатся в строку
for i in 0 to 7 loop
write_el:= mas_int_sig (i);
WRITELINE(vect_wr_int, LA1); -- В этом варианте числа в
--файле расположатся в столбец
WRITE(LA1, write_el, virav, pole);
end loop;
end if;
FILE_CLOSE(mas_wr_int);
end process;
end Wr_L_int_ar;
Пример 3. Чтение данных типа integer из файла ОС.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use STD.TEXTIO.all;
entity Rd_ln_int is
port(clk: in STD_LOGIC);
end Rd_ln_int;
architecture Rd_ln_int_ar of Rd_ln_int is
Type mas_int is array (0 to 7) of integer;
signal mas_int_sig: mas_int;
begin
process(clk)
variable rd_el: integer range 0 to 5000;
variable LA1: LINE;
file mas_rd_int: TEXT open READ_MODE is "C:\Program Files\Aldec\Rd_line_Int\src\TextFile3.txt";
begin
if clk'event and clk ='1' then
FILE_OPEN(mas_rd_int, "C:\Program
Files\Aldec\Rd_line_Int\src\TextFile3.txt", READ_MODE);
--READLINE(mas_rd_int, LA1); -- В этом варианте числа в файле
--должны быть расположены в строку
for i in 0 to 7 loop
READLINE(mas_rd_int, LA1); --В этом варианте числа в файле
--должны быть расположены в столбец
READ(LA1, rd_el); --поэлементное чтение данных из файла
mas_int_sig (i) <= rd_el;--запись прочитанного элем. В массив
end loop;
end if;
FILE_CLOSE(mas_rd_int);
end process;
end Rd_ln_int_ar;
Пример 4. З апись данных типа Real в файл ОС.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use STD.TEXTIO.all;
entity wr_ln_real is
port(clk: in STD_LOGIC);
end wr_ln_real;
architecture wr_ln_real_ar of wr_ln_real is
Type mas_int is array (0 to 7) of real;
signal mas_real_sig: mas_int:= (2.55, 38.567, 456.98, 987.05, 12.3, 3456.99,
48.4, 50.0);
begin
process(clk)
variable write_el_real: real range 0.0 to 5000.0; --программный буфер
variable Ptr: LINE; --указатель на строку
variable ravnen: SIDE;
variable pole: WIDTH:=9;
variable gigit: NATURAL:=4; --числа в файл записыв в нормальной форме
--variable gigit: NATURAL:=0; --числа в файл записыв в експоненциал
--форме
file Kont_mas_wr_REAL: TEXT open WRITE_MODE is "C:\Program Files\Aldec\Wr_line_Real\src\TextFile2.txt"; --контейнер
begin
if clk'event and clk ='1' then
FILE_OPEN(Kont_mas_wr_REAL, "C:\Program Files\Aldec\Wr_line_Real\src\TextFile2.txt", WRITE_MODE);
WRITELINE(Kont_mas_wr_REAL, Ptr); -- В этом вар. числа в файле
--распложаться в строку
for i in 0 to 7 loop
write_el_real:= mas_real_sig (i);
WRITELINE(Kont_mas_wr_REAL, Ptr); -- В этом варианте числа
--в файле распложаться в столбец
WRITE(Ptr, write_el_real, ravnen, pole, gigit);
end loop;
end if;
FILE_CLOSE(Kont_mas_wr_REAL);
end process;
end wr_ln_real_ar;
При variable gigit: NATURAL:=4; и variable pole: WIDTH:=9 -- числа в файл записываются в нормальной форме:
2.5500 38.5670 456.9800 987.0500 12.30003456.9900 48.4000 50.0000
При variable gigit: NATURAL:=0; и variable pole: WIDTH:=9 - числа в файл записываются в экспоненциальной форме, каждое число занимает 13 позиций:
2.550000e+0003.856700e+0014.569800e+0029.870500e+0021.230000e+0013.456990e+0034.840000e+0015.000000e+001
При variable gigit: NATURAL:=0; и variable pole: WIDTH:=15 - числа в файл записываются в экспоненциальной форме, каждое занимает 13 позиций, под каждое число (в примере) отводится 15 позиций:
2.550000e+000 3.856700e+001 4.569800e+002 9.870500e+002 1.230000e+001 3.456990e+003 4.840000e+001 5.000000e+001
Примечание: Дополнительные сведения о методологии создания проектов криптографических процессоров оперирующих с файлами ОС можно получить из материалов приведенных в Л.Р.№5
Дата добавления: 2015-08-27; просмотров: 71 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Процедуры записи данных в файл для стандартных типов данных | | | ПОСТАНОВЛЕНИЕ |