Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Проиллюстрируем примерами методологию применения процедур чтения/записи стандартных типов данных, определенных в пакете TEXTIO библиотеки STD.

Тема: VHDL проектирование криптографических процессоров с использованием файлового ввода/вывода | FILE_CLOSE (Имя файлового объекта (контейнера)). | Практическая организация ЧТЕНИЕ текстовых ДАННЫХ из ФАЙЛА ОС. | Читаем текст из файла! | Практическая организация ЗАПИСИ текстовых ДАННЫХ в ФАЙЛ ОС. | Waveform Editor1 | ПримерVHDL проекта оперирующего с файлами ОС | Форматированные операции ввода-вывода (чтения-записи) с символами ASCII. |


Читайте также:
  1. II. Административные процедуры
  2. IV. Процедура замены прошивки
  3. А) в отсутствии официального статуса бухгалтерской отчетности, составляемой по МСФО, а также необходимой инфраструктуры применения МСФО;
  4. Автоархивация при помощи автопроцедур
  5. Автоматическое повторное включение. Назначение и область применения АПВ
  6. Активный метод - выполнение и обсуждение практической работы, оформление протокола исследования; работа с мультимедийными базами данных, компьютерными моделями и программами.
  7. Активный метод - работа с мультимедийными базами данных, компьютерными моделями и программами, демонстрационным материалом.

 

Пример 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 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Процедуры записи данных в файл для стандартных типов данных| ПОСТАНОВЛЕНИЕ

mybiblioteka.su - 2015-2024 год. (0.012 сек.)