Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Подразумевается что идентификатор целочисленного типа и значения его лежат в диапазоне от 2 до N

Работа добавлена на сайт samzan.net:


Семинар 7

Последовательный оператор цикла loop

Оператор loop используется для задания итерации набора последовательных выражений:

<необязательная_метка>:

<тип_цикла> loop

 -- исполняемые операторы

end loop;

Существует три итерационных схемы (<тип_цикла>). Первая имеет форму:

for <переменная_цикла> in <диапазон>

Пример использования схемы:

factorial := 1;

for index in 2 to N loop

factorial := factorial * index;

end loop;

Тело loop исполняется N-1 раз, при этом идентификатор index в конце каждой итерации увеличивается на 1. Подразумевается, что идентификатор целочисленного типа и значения его лежат в диапазоне от 2 до N. Второй итерационной схемой является следующая:

while <условие>

Пример использования схемы:

j := 0;

sum := 10;

WH-LOOP: while j < 20 loop -- loop имеет метку WH_LOOP

sum := sum * 2;

j := j+3;

end loop;

Выражения в теле loop выполняются одно за другим, и эта последовательность повторяется, пока условие j < 20 истинно.

Третьей cхемой является конструкция, в которой итерационная схема не задается и выход из loop осуществляется с использованием выражений: exit (завершение выполнения и закрытие оператора цикла) или next (переход к следующей итерации цикла), например:

sum: = 1;

j := 0;

L2: loop --loop имеет метку

j: = j+21;

sum := SUM* 10;

exit when SUM > 100;

end loop L2;

В этом примере выражение exit заставляет выходить из петли L2 когда sum становится больше 100. При отсутствии выражения exit loop будет исполняться бесконечно.

Чаще всего операторы цикла используются при написании test bench. Рассмотрим использование данного оператора при моделировании работы постоянной памяти структуры 32х8.

Описание такой памяти приведено ниже:

-- Блоки памяти

-------------------------------------------------------------------------------

--Пример: Постоянная память формата 32х8

-----------------

--Подключение библиотек

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

--Описание портов ввода/вывода

entity ROM is

port( Clock   : in std_logic; -- тактовый сигнал

Reset : in std_logic; -- сигнал сброса

Enable : in std_logic; -- сигнал разрешения

Read : in std_logic; -- сигнал чтения

Address : in std_logic_vector(4 downto 0); -- адрес

Data_out: out std_logic_vector(7 downto 0)

); -- данные

end ROM;

--Описание архитектуры проекта

architecture Behav of ROM is

-- объявление нового типа, соответствующего структуре памяти

 type ROM_Array is array (0 to 31)

 of std_logic_vector(7 downto 0);

-- объявление константы этого типа

 constant Content: ROM_Array := (

   0 => "00000001",-- содержимое памяти

   1 => "00000010",

   2 => "00000011",

   3 => "00000100",

   4 => "00000101",

   5 => "00000110",

   6 => "00000111",

   7 => "00001000",

   8 => "00001001",

   9 => "00001010",

   10 => "00001011",

   11 => "00001100",

   12 => "00001101",  

   13 => "00001110",

   14 => "00001111",

   OTHERS => "11111111");

 begin


-- Описание процесса чтения

 process(Clock, Reset, Read, Address)

   begin

     

 if( Reset = '1' ) then

         Data_out <= "ZZZZZZZZ";

       elsif( Clock'event and Clock = '1' ) then

if Enable = '1' then

      if( Read = '1' ) then

 Data_out <= Content(conv_integer(Address));

               else

                            Data_out <= "ZZZZZZZZ";

               end if;

end if;

      end if;

   end process;

end Behav;

При описании постоянной памяти вводится специальный тип данных ROM_Array, который представляет собой массив элементов типа std_logic_vector. Для задания значений этой памяти описывается константа данного типа Content.

Моделирование работы этого блока памяти проводится с помощью test bench. При этом необходимо перебрать все значения адресов памяти. Для этого целесообразно использовать оператор цикла:

-- Последовательные операторы. Операторы цикла

--------------------------------------------------------------------------------------

--Пример: моделирование работы постоянной памяти

-- Test Bench для постоянной памяти

-----------------

--Подключение библиотек

library IEEE;

use IEEE.std_logic_1164.all;

use IEEE.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

--Описание портов ввода/вывода

entity ROM_TB is

end ROM_TB;

--Описание архитектуры проекта

architecture TB of ROM_TB is

-- Моделируемое устройство

component ROM is

port( Clock   : in std_logic;

Reset : in std_logic;

Enable : in std_logic;

Read : in std_logic;

Address : in std_logic_vector(4 downto 0);

Data_out: out std_logic_vector(7 downto 0)

);

end component;

-- Внутренние сигналы

signal T_Clock, T_Reset, T_Read, T_Enable: std_logic;

signal T_Address: std_logic_vector(4 downto 0);

signal T_Data_out: std_logic_vector(7 downto 0);

signal END_SIM: BOOLEAN:=FALSE;

-- флаг окончания моделирования

begin

-- Декларация компонента

U_ROM: ROM port map (T_Clock, T_Reset, T_Enable,

        T_Read, T_Address, T_Data_out);


-- Генерация тактового сигнала

Clk_sig: process

     begin

     if END_SIM = FALSE then

T_Clock<='1';   -- clock cycle 10 ns

wait for 5 ns;

T_Clock<='0';

wait for 5 ns;

          else wait;

          end if;

end process;

-- Генерация сигналов для чтения данных

Read_sig: process

   begin

-- Начальная установка

T_Enable <= '1';

T_Read <= '0';

T_Reset <= '1';

T_Address <=  (others => '0');

 

-- Разрешение чтения

wait for 20 ns;

T_Reset <= '0';

T_Read <= '1';

 

-- Перебор всех адресов

for i in 0 to 31 loop

      wait for 20 ns;

      T_Address <= T_Address + '1';

end loop;

 

wait for 20 ns;

-- Установка флага окончания моделирования

END_SIM <= TRUE;

wait;

end process;

end TB;

Далее приводится описание оперативной памяти структуры 4х4. При описании используется тот же подход, что и в случае оперативной памяти, только вместо константы используется сигнал. Описание этого типа памяти приведено ниже:

-- Блоки памяти

-------------------------------------------------------------------------------

--Пример: оперативная память формата 4х4

-----------------

--Подключение библиотек

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

--Описание портов ввода/вывода

entity SRAM is

generic( width: integer:=4;

-- разрядность шины данных

 addr: integer:=2); -- разрядность шины адреса

port( Clock:  in std_logic; -- тактовый сигнал

Enable: in std_logic; -- сигнал разрешения

Read:  in std_logic; -- сигнал чтения

Write:  in std_logic; -- сигнал записи

Read_Addr: in std_logic_vector(addr-1 downto 0); -- адрес для чтения

Write_Addr:  in std_logic_vector(addr-1 downto 0); -- адрес для записи

Data_in:  in std_logic_vector(width-1 downto 0); -- данные записи

Data_out:  out std_logic_vector(width-1 downto 0)

); -- данные чтения

end SRAM;

--Описание архитектуры проекта

architecture behav of SRAM is

-- объявление нового типа, соответствующего структуре памяти

type ram_type is array (0 to 2**addr-1) of

std_logic_vector(width-1 downto 0);

-- объявление сигнала этого типа

 signal tmp_ram: ram_type;

begin

-- Описание процесса чтения

process(Clock, Read)

   begin

    if (Clock'event and Clock='1') then

      if Enable='1' then

       if Read='1' then

         -- выдача данных на выход по адресу чтения

         -- используется функция преобразования типов

         Data_out <= tmp_ram(conv_integer(Read_Addr));

       else

         -- перевод выхода в третье состояние

         Data_out <= (Data_out'range => 'Z');

       end if;

      end if;

    end if;

 end process;

-- Описание процесса записи

process(Clock, Write)

   begin

if (Clock'event and Clock='1') then

      if Enable='1' then

       if Write='1' then

        -- запись данных в память

        tmp_ram(conv_integer(Write_Addr)) <= Data_in;

       end if;

      end if;

    end if;

 end process;

end behav;

Примеры описания сложных устройств

1) Схема формирования импульса заданной длительности приведена на рис.1.

Рис. 1 – Структурная схема устройства формирования импульса заданной длительности

Моделирование работы этого устройства можно провести при помощи test bench.

Задание для студентов. Привести описание устройства, формирующего пачку импульсов, структурная схема которого приведена на рис. 2.

Рис.2 – Структурная схема устройства формирования пачки импульсов

Синтезируемое подмножество языка VHDL

Язык VHDL широко распространился в качестве языка проектирования цифровых систем. Этому способствовали его использование в различных промышленных системах проектирования и стандартизация языковых версий. В настоящее время основным действующим стандартом является стандарт ANSI/IEEE Std 1076 1993, появившийся в 1993 г. и более известный как VHDL'93. Именно этот стандарт поддерживается в настоящее время в основных промышленных системах проектирования. В таких системах можно как проводить моделирование исходных спецификаций, так и синтезировать логические схемы по корректным VHDL программам. Однако синтез логических схем возможен не для всех конструкций языка VHDL. Конструкции языка, которые поддерживаются при синтезе, образуют синтезируемое подмножество языка. Иногда синтезируемое подмножество называют также синтезабельным подмножеством. И хотя имеется стандарт IEEE Std 1076.6 1999 на синтезируемость конструкций уровня RTL, при практическом использовании различных синтезаторов следует учитывать следующее важное обстоятельство – различные синтезаторы «понимают» синтезируемое подмножество языка VHDL по разному.

Можно привести следующие общие рекомендации при разработке синтезируемых описаний:

1. Операции над типом real не поддерживаются при синтезе, поэтому его не следует использовать при описании.

2. Рекомендуется в описании не использовать циклы. Циклы поддерживаются, если цикловые переменные ограничены константами.

3. Определение фронта и спада сигнала при описании последовательностных схем проводить при помощи оператора if в теле оператора process. В теле оператора process допускается использовать только одно определение фронта сигнала.

4. Не допускается определение сигнала в разных операторах без использования решающих функций.




1. Дибнер Берн Dibner Bern
2. удачное время для очищения организма и избавление его от паразитов
3. психологическая экспертиза- предмет компетенция основания и поводы её назначения
4. Эмоции и чувства
5. Подчинившись закону толпы мы возвращаемся в каменный векС
6. ки питанию обеспечивается непрерывность течении двух протимых и взаимосвязанных процессов ассимиляции и д
7. Поняття економої моделі її складові частини 2
8. В пределах этого государства Южной Африки расположена прибрежная пустыня сформировавша
9. Правовые основы политики украинизации 20-х годов ХХ столетия
10. Девиантное поведение и наследственность
11. О строительстве жилого комплекса для молодежи в г.
12. го тысячелетия до н
13. На тему-~~Реки Эстонииrdquo; Автор-
14. 0 E2 P0102 Низкий уровень сигнала датчика массового расхода воздуха Р0103 Высокий уровень сигнала датчика массово
15. Понятие маркетинга и этапы его развития Вопрос 2 Концепция маркетинга Вопрос 3 Принципы маркетинга Во
16. КОМИ РЕСПУБЛИКАНСКАЯ АКАДЕМИЯ ГОСУДАРСТВЕННОЙ СЛУЖБЫ И УПРАВЛЕНИЯ Юридический факультет Каф
17. 2012 г Энергетически управляемая эволюция Гаряев доказал что фантом ДНК способен поглощать фотоны с
18. темах радиосвязи с радиальной структурой
19. Эти обе позиции переплетаются друг с другом- основание правообладания земельным участком определяет пред
20.  Стеклокерамические материалы