Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы проектирования систем на кристалле. Часть II

.pdf
Скачиваний:
5
Добавлен:
05.02.2023
Размер:
1.56 Mб
Скачать

Рис. 7. Диаграмма модели

6.Поменяйте параметры блоков Shift Arithmetic1 (установите величину сдвига равной -16) и Shift Arithmetic2 (установите величину сдвига равной -8).

7.Поменяйте индексы извлекаемых битов в параметрах блоков Extract Bits1 (установите индексы [4 10]), Extract Bits2 (установите индексы [11 12]), Extract Bits3 (установите индексы [13 20]), Extract Bits4 (установите индексы [21 31]).

8.Скомпилируйте модель. Для этого нажмите на кнопку Incremental build в

панели инструментов окна модели Теперь выполним проверку работы модели. Это наиболее удобно сделать, запустив

модель в пошаговом режиме, используя Simulink Debugger.

9.Запустите Simulink Debugger, нажав на кнопку Debug в панели инструментов окна модели.

10.На панели Break Points в поле Break at time установите значение 1 (рис. 15).

Рис. 15. Проверку работы модели наиболее удобно проводить в пошаговом режиме

спомощью Simulink Debugger

11.Нажмите на кнопку Start/Continue панели инструментов окна Simulink Debugger.

12.Нажимая на кнопку Go to first method at start of next time step, выполняйте

Simulation loop модели в пошаговом режиме.

Можно повысить информативность пошагового выполнения модели, если нажать на кнопку Show port values when hovering. Если эта кнопка нажата, то при наведении курсора «мыши» на какой-либо блок модели на экране отображаются значения сигналов на выходных портах данного блока. Для генерации HDL-кода по созданной модели необходимо объединить все блоки модели за исключением источника данных (блок Counter Free-Running) и блоков Display, обеспечивающих вывод значений на экран, в подсистему. После указания имени созданной подсистемы в поле Generate HDL for в окне диалога Configuration Parameters модели, можно выполнить генерацию VHDL-кода для созданного устройства и для тестирующей программы Testbench.

Перейдем к выполнению второй задачи.

1.Создайте на диске директорию Gate, запустите MatLab и укажите Gate в качестве рабочей директории (Current Directory).

2.Запустите Simulink Library Browser и создайте новую модель. Сохраните ее под именем Gate.

3.Настройте параметры модели, запустив в Command Window среды MatLab скрипт

hdlsetup

В таблице ниже приведены блоки с кратким описанием их функциональности, которые необходимо поместить в диаграмму модели из Simulink Library Browser.

Символ и название

Категория в

Функциональность

 

 

Simulink

 

 

 

Library

 

 

 

Browser

 

 

 

 

 

 

 

 

Источник байтового потока. В окне диалога Source

 

 

Sources

Block Parameters в поле Number of bits установите

Counter

Free-

 

8. В поле Sample time установите 1.

Running

 

 

 

 

 

 

 

 

 

 

Источник управляющего сигнала. В окне диалога

 

 

 

Source Block Parameters в списке Pulse type

 

 

Sources

выберите Sample based, в списке Time – Use

 

 

simulation time. В поле Amplitude установите

 

 

 

Pulse Generator

 

значение 1, в поле Period – значение 10, в поле

 

 

 

Pulse width – 5.

 

 

 

 

 

 

Signal

Осуществляет преобразование типа сигнала. В

 

 

поле Output Data Type окна диалога Function Block

 

 

Attributes

Data Type

 

Parameters установите boolean.

 

 

Conversion

 

 

 

 

 

 

 

 

 

 

Выполняет побитовую операцию (какую-либо) над

 

 

Logic and Bit

входными сигналами. В выпадающем списке

 

 

Operations

Operator окна диалога Function Block Parameters

Bitwise Operator

 

выберите NOT.

 

 

 

 

 

 

 

Управляемый переключатель. Под управлением

 

 

 

второго порта коммутирует на выход сигналы

 

 

Signal Routing

первого или третьего портов. В выпадающем

Switch

 

 

списке Format окна диалога Criteria for passing first

 

 

input выберите u2~=0

 

 

 

 

 

 

 

 

 

 

Запоминает значение входного сигнала на один

 

 

Discret

такт. На выходе значения входного сигнала

Unit Delay

 

 

появляются с задержкой в один такт.

 

 

 

 

 

 

 

 

 

Sinks

Выводит на экран значения входного сигнала

Display

 

 

 

 

 

 

 

4.Разместите блоки в окне диаграммы модели и соедините их сигналами так, чтобы диаграмма выглядела как на рис. 16

Рис. 16. Диаграмма модели управляемого вентиля

5.Выполните проверку работы модели, используя Simulink Debugger

6.Выполните генерацию VHDL-кода, предварительно объединив в подсистему все блоки модели, кроме Counter Free-Running, Pulse Generator, Data Type

Conversion и Display.

Приведем примеры решения еще двух задач. Первая из них – преобразование параллельного кода в последовательный. Вторая – обратно. Объединим обе задачи в одной модели так, что на выходе модели при ее правильной работе мы должны иметь повторение входного сигнала.

1.Создайте на диске директорию Parallel2Serial, запустите MatLab и укажите

Parallel2Serial в качестве рабочей директории (Current Directory).

2.Запустите Simulink Library Browser и создайте новую модель. Сохраните ее под именем Prl2Srl.

3.Настройте параметры модели, запустив в Command Window среды MatLab скрипт

hdlsetup

В таблице ниже приведены блоки с кратким описанием их функциональности, которые необходимо поместить в диаграмму модели из Simulink Library Browser.

Символ и название

Категория в

Функциональность

 

 

Simulink

 

 

 

Library

 

 

 

Browser

 

 

 

 

 

 

 

 

Источник байтового потока. В окне диалога Source

 

 

Sources

Block Parameters в поле Number of bits установите

Counter

Free-

 

8. В поле Sample time установите 8.

Running

 

 

 

 

 

 

 

Символ и название

Категория в

Функциональность

 

 

Simulink

 

 

 

 

Library

 

 

 

 

Browser

 

 

 

 

 

 

 

 

Выделяет из входного сигнала заданные разряды. В

 

Logic and Bit

выпадающем списке Bits to extract окна диалога

 

Function Block Parameters выберите Range of bits. В

 

Operations

 

поле Bit indices установите [7 7]. В списке Output

Extract Bits

 

 

scaling mode выберите Treat bit field as an integer.

 

 

 

 

 

 

 

Объединяет входные сигналы в единый векторный

 

Signal Routing

сигнал. В поле Number of inputs окна диалога

Mux

 

Function Block Parameters установите 8.

 

 

 

 

 

 

 

 

 

 

Согласовывает скорости работы входного и

 

 

выходного портов. В поле Initial Condition окна

 

Signal

диалога Function Block Parameters установите 0. В

 

Attributes

списке Output port sample time options выберите

Rate Transition

 

позицию Specify. В поле Output port sample time

 

 

установите 1.

 

 

 

 

 

 

 

Выбирает из векторного сигнала элементы, ин-

 

 

дексы которых соответствую значению на

 

Signal Routing

управляющем порту, и отправляет их на выходной

Index Vector

 

порт. Отметьте поле Use zero-based indexing окна

 

диалога Function Block Parameters.

 

 

 

 

 

 

 

 

 

Накапливает значения входного сигнала заданное

 

 

количество тактов. Выходной сигнал представляет

 

 

собой вектор из накопленных значений. В поле

 

Discrete

Sample Time окна диалога Function Block

Taped Delay

 

Parameters установите -1. В поле Number of Delays

 

установите 8. В выпадающем списке Order output

 

 

 

 

vector starting with выберите позицию Oldest

 

 

 

 

 

 

Signal

Осуществляет преобразование

типа

сигнала. В

 

поле Output Data Type окна диалога Function Block

 

Attributes

Data Type

Parameters установите uint8.

 

 

 

 

 

Conversion

 

 

 

 

 

 

 

 

 

Разделяет векторный сигнал на отдельные

 

Signal Routing

скалярные значения. В поле

Number

of Outputs

 

окна диалога Function Block Parameters установите

 

 

Demux

 

8.

 

 

 

 

 

 

 

Осуществляет битовый сдвиг (умножение на

 

Logic and Bit

степень 2) входного сигнала. В поле Number of bits

 

Operations

to shift right окна диалога Function Block Parameters

Shift Arithmetic

 

установите -7.

 

 

 

 

 

 

 

Символ и название

Категория в

 

 

Функциональность

 

 

 

 

Simulink

 

 

 

 

 

 

 

 

 

Library

 

 

 

 

 

 

 

 

 

Browser

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполняет побитовую операцию (какую-либо) над

 

Logic and Bit

входными

сигналами.

В

выпадающем

списке

 

Operator окна диалога Function Block

Parameters

 

Operations

 

выберите

OR.

В поле

Number

of

input ports

Bitwise Operator

 

 

установите 8.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sinks

Выводит на экран значения входного сигнала.

Display

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Запоминает значение входного сигнала на нес-

 

 

колько тактов. На выходе значения входного

 

Discret

сигнала появляются с задержкой в это количество

Integer Delay

 

тактов. В

поле

Number

of

delays

окна

диалога

 

Function Block Parameters установите 2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13.Размножьте необходимые блоки и соедините их сигналами так, чтобы диаграмма модели выглядела как на рис. 17.

Рис. 17. Левая часть диаграммы (последний блок слева направо – Index Vector) реализует преобразование параллельного кода в последовательный. Правая часть – обратное преобразование. Блок Display1 отображает задержанную версию входного сигнала, генерируемого блоком Counter Free-Running

14.В окне диалога Source Block Parameters блока Counter Free-Running1 установите в поле Number of bits значение 3.

15.Установите параметры блоков Extract Bits … Extract Bits7 для извлечения битов входного сигнала с 7-го по 0-вой.

16.Установите значения параметров Number of bits to shift right блоков Shift Arithmetic … Shift Aritmetic 6 в -7 … -1.

17.Установите значение параметра Output port sample time блока Rate Transition2

равным 8.

18.Проверьте работу модели, используя Simulink Debugger.

Перед генерацией кода объедините блоки, относящиеся к преобразованию параллельного кода в последовательный, в одну подсистему, блоки, относящиеся к преобразованию последовательного кода в параллельный, – в другую. Блоки созданных подсистем объедините в подсистему верхнего уровня, которая и будет представлять собой моделируемое устройство. После объединения в окружение моделируемого цифрового устройства должны войти только блоки Counter Free-Running, Integer Delay, Display, Display1 (рис. 18, 19).

Рис. 18. Диаграмма модели после объединения блоков в подсистемы

Рис. 19. Окончательный вид модели перед генерацией VHDL-кода

11.Выполните генерацию VHDL-кода модели и программы Testbench. Изучите сгенерированный код.

Блоки Embedded MatLab

Несмотря на то, что с Simulink поставляется богатый набор готовых блоков, которые можно использовать для моделирования цифровых устройств и совместимых с Simulink HDL Coder, в Simulink также предусмотрена возможность создания различных видов пользовательских (Custom) блоков. Функциональность таких блоков пользователь определяет сам. Из всех типов Custom блоков совместимы с HDL Coder только, так называемые, Embedded MatLab Function блоки. Функциональность таких блоков пользователь описывает, создавая программу на языке программирования Embedded MatLab.

Рассмотрим на примере создание модели с использованием Embedded MatLab Function блока. В модели реализуем счетчик, имеющий два двоичных управляющих сигнала: первый – rst, сбразывает счетчик в нулевое значение; второй – enable, разрешает или запрещает работу счетчика.

1.Создайте новую директорию, например Counter, и укажите ее в качестве Current Directory в программе MatLab.

2.Запустите Simulink и создайте новую модель. Сохраните ее под именем uint8_counter.

3.Выберите Embedded MatLab Function блок из раздела User-Defined Functions в Simulink Library Browser и поместите его в окно модели.

4.Откройте окно Embedded MatLab Editor двойным щелчком «мыши» по изображению блока на диаграмме модели.

5.Замените текст программы на следующий:

function y = counter(rst,enable) persistent counter;

if isempty(counter) counter=uint8(0);

end

if rst counter=uint8(0);

elseif enable counter=counter+1;

end y=counter;

6.Выберите блок Display из раздела Sinks в Simulink Library Browser и поместите его в окно модели.

7.Выберите блок Signal Builder из раздела Sources в Simulink Library Browser и

поместите его в окно модели. Двойным щелчком «мыши» откройте окно Signal Builder. Используя меню открывшегося окна создайте два сигнала так, чтобы редактор сигналов выглядел как на рис. 20.

Рис. 20. Создайте два сигнала и откорректируйте положение импульсов на временной оси

8.Вызовите окно диалога Simulation Options, выбрав в меню File позицию

Simulation Options. Из выпадающего списка Signal values after final time

выберите Hold filnal value. В поле Sample time установите значение 1. Закройте окно диалога Signal Builder.

9.В окне Configuration Parameters модели в «дереве» Select выберите Solver. В

поле Fixed step size установите значение 1.

10.Добавьте к диаграмме модели два блока Data Type Conversion из категории

Signal Attributes в Simulink Library Browser. В настройках этих блоков установите в поле Output Data Type в значение Boolean.

11.Соедините блоки сигналами так, чтобы диаграмма модели выглядела как на рис. 21.

Рис. 21. Вид диаграммы модели, использующей Embedded MatLab function блок 12. Проверьте правильность работы модели, используя Simulink Debugger.