Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

'Конкурс'
Соревнования проводятся с целью популяризации лыжных гонок, повышения спортивного мастерства занимающихся, определения сильнейших лыжников-гонщиков дл...полностью>>
'Тематическое планирование'
обязательный учет реальных норм произношения на территории огромной страны касается разных сторон преподавания языка – и практической и теоретической;...полностью>>
'Расписание'
жизнедеятельности (прак) Учаева ИМ 1/503а Военная подготовка (лек) Преп ВП /303 Управление процессами (лаб) Петров ДЮ 3 пара 11:30-13:00 /308 Управлен...полностью>>
'Документ'
Рисунки и графики должны иметь четкое изображение и быть выдержаны в черно-белой гамме (возможно применение черной штриховки). Шапки таблиц — не тонир...полностью>>

Главная > Документ

Сохрани ссылку в одной из сетей:
Информация о документе
Дата добавления:
Размер:
Доступные форматы для скачивания:

Поведенческие конструкции.

В поведенческих блоках initial или always могут применяться конструкции управления сходные с операторами процедурных языков. Данные поведенческие конструкции подразделяются на несколько групп:

  1. группа принятия решений

if – else – if , case, casez, casex

  1. группа повторений

repeat, while, for, forever

  1. параллельного исполнения

fork-join

  1. оператор wait

Конструкция if записывается следующим образом

if ()

else

Для выбора из нескольких вариантов могут применяться вложенные if.

if ()

else if ()

else if ()

else

Здесь expression – любое выражение языка, а statement – оператор или группа операторов между begin и end. Ветвь else может отсутствовать, но если имеются вложенные if (как в примере), то else относится к ближайшему if. Для изменения порядка следует пользоваться begin и end. Если получаемое в выражении expression значение не равно 0 и не является неопределенной (x или z), то выполняется ветвь statement1, иначе statement2. Следует помнить, что так же как и в языке С операция сравнения записывается == (два знака =), в отличие от операции присваивания = (один знак). Операции сравнения при неопределенных операндах возвращают неопределенное значение (x). Поэтому в поведенческом моделировании (не принимается средствами синтеза) могут использоваться операции === (три знака =) и !==. Эти операции позволяют произвести литеральное сравнение определенных битов в выражении. Еще раз обращаю внимание, что выражение expression не является выражением какого-либо специального типа (boolean), а является любым выражением, которое может может быть приведено к типу integer. Здесь прослеживается аналогия с языком С, единственное отличие состоит в том что Verilog integer в отличие от C int может принимать неопределенные значения (x или z). В этом случае выполняется ветвь else.

Исполнение такого кода:

module if_test;

initial

begin

if (2*5) $display("2*5 != 0 ==> true");

if (2*0) $display("never print this");

else $display("2*0 != 0 ==> false");

if (1'bz) $display("never print this");

else $display("undefined ==> false");

if (1'bx) $display("never print this");

else $display("undefined ==> false");

end

endmodule

Даст следующее:

Highest level modules:

if_test

2*5 != 0 ==> true

2*0 != 0 ==> false

undefined ==> false

undefined ==> false

Следующий пример иллюстрирует применение операторов сравнения (сколько = в каком случае ставить ).

module if_test;

reg a,b,c,d;

initial

begin

a=(2'b10>3'b001);b=(2'b10==3'b001);c=(2'b10>2'b0x);d=(2'b10==2'bz0);

$display("a=%b b=%b c=%b d=%b",a,b,c,d);

a=(2'b10!==3'b01);b=(2'b10===2'b10);c=(2'b10!==2'b0x);d=(2'bx1===2'bz1);

$display("a=%b b=%b c=%b d=%b",a,b,c,d);

a=(2'b0x==2'b0x);b=(2'bx1!=2'bx1);c=(2'b0x===2'b0x);d=(2'bx1!==2'bx1);

$display("a=%b b=%b c=%b d=%b",a,b,c,d);

end

endmodule

Результат:

a=1 b=0 c=x d=x

a=1 b=1 c=1 d=0

a=x b=x c=1 d=0

Для выбора из нескольких вариантов также применяется оператор case:

Например, данная конструкция реализует дешифратор подобный К155ИД3.

case (rega)

4'd0: result = 10'b0111111111;

4'd1: result = 10'b1011111111;

4'd2: result = 10'b1101111111;

4'd3: result = 10'b1110111111;

4'd4: result = 10'b1111011111;

4'd5: result = 10'b1111101111;

4'd6: result = 10'b1111110111;

4'd7: result = 10'b1111111011;

4'd8: result = 10'b1111111101;

4'd9: result = 10'b1111111110;

default result = 'bx;

endcase

Оператор case является «непроваливающимся» в отличие от оператора switch языка С и гарантирует исполнение одной ветви. В случае если ни одно из условий не совпадает, то выполняется ветвь default. Допустимо другое применение – наоборот, в case константа, а в ветвях вычисляемые выражения или переменные и там и там (такого использования оператора выбора в процедурных языках, как правило, нет). Оператор case часто используется в синтезируемом коде для синтеза FSM и мультиплексоров. При этом в несинтезируемых моделях (а в некоторых средствах синтеза и в синтезируемых) в выражениях case могут использоваться литералы с неопределенными значениями. Для поведенческого моделирования используются операторы casez и casex, которые особым образом обрабатывают неопределенные состояния. Синтаксис casez и casex подобен синтаксису case. При этом добавляется символ ? используемый в двоичной записи литерала для того, чтобы замаскировать биты, которые не должны влиять на принятие решения.

Для демонстрации обработки неопределенных состояний операторами case, casez и casex рассмотрим следующий пример.

module case_test;

integer a,b,c,d;

reg clk;

always #5 clk=~clk;

always

begin : demo

integer i;

for(i=0; i<16; i=i+1)

begin

$write("i = %d ",i);

casex (i) // x, z, ? - the same function - ignore bit

4'b0xxx : $display ("less than 8");

4'b10zz : $display ("not less than 8 and less than 12");

4'b11?1 : $display ("not less than 12 and odd");

4'bx?z? : $display ("other case");

default $display ("never print this");

endcase

wait (clk==1'b1); // the same as @(posedge clk)

end

end // demo

initial clk=0;

endmodule

Данный пример не содержит $finish, а события будут происходить непрерывно из-за always блоков. Поэтому он будет исполняться «вечно». Чтобы остановить – нужно воспользоваться средствами среды.

Фрагмент результата работы:

i = 0 less than 8

i = 1 less than 8

i = 2 less than 8

i = 3 less than 8

i = 4 less than 8

i = 5 less than 8

i = 6 less than 8

i = 7 less than 8

i = 8 not less than 8 and less than 12

i = 9 not less than 8 and less than 12

i = 10 not less than 8 and less than 12

i = 11 not less than 8 and less than 12

i = 12 other case

i = 13 not less than 12 and odd

i = 14 other case

i = 15 not less than 12 and odd

i = 0 less than 8

Таким образом, case – проверяет литеральные совпадения, его можно сравнить с использованием if и === (= три раза). В операторах casex и casez биты со значениями x и z или только z игнорируются. В литералах сравнения x и z (casex) или z (casez) могут быть заменены «?».

Операторы повторения могут встречаться в синтезируемом коде. При этом упрощается и становится более понятной запись. В испытательных стендах и несинтезируемых моделях использование операторов повторения имеет такой же смысл, как и в процедурных языках программирования. Операторы for и repeat были продемонстрированы ранее. Так как Verilog не позволяет воспользоваться вечным циклом языка С (for(;;)), то введен оператор forever. Для выхода из циклов (блоки должны быть именованы) служит оператор disable. Продолжая сравнение с языком С: disable работает как С операторы break и continue.

initial

begin :break

for(i = 0;i

begin :continue

@clk

if(a == 0) // "continue" loop

disable continue;

... ...

@clk

if(a == b) // "break" from loop

disable break;

......

end

end

Еще один цикл while имеет следующую форму:

while (condition)

begin

statement

step_assignment;

end

Операторы циклов взаимозаменяемы, и выбор определяется личными предпочтениями программиста.

Цикл repeat может использоваться в intra-assignment delay для описания задержки в несколько циклов. Например так: a = repeat(3)@(posedge clk) b;

Операторы fork – join служат для параллельного исполнения ветвей кода в одном процедурном блоке. Это является несинтесируемой конструкцией и, по моему мнению, используется редко.

Оператор wait (см. пример casex) используется для приостановки конкурентно исполняемого блока до тех пор, пока не будет выполнено его условие (как правило, элементы выражения условия wait должны изменяться в другом блоке).



Похожие документы:

  1. Контрольные вопросы 23

    Контрольные вопросы
    ... деятельности, как объект разработки и как технологии разработки информационных систем. Это ... Предполагают, что между первыми инструментами обработки материальных объектов и средствами ... услугой. Переход к технологиям цифровой связи приводит к сближению служб ...
  2. ПЕРЕЧЕНЬ НАУЧНЫХ СТАТЕЙ И ДОКЛАДОВ опубликованных в 2014 году

    Документ
    ... для линейного логического синтеза цифровых структур / Н.Н. ... уравнения базовых схем включения мультидифференциальных ... 21 Разработка оптико-электронного устройства для ... Каращенко, В.В. Учёт финансовых инструментов и инвестиций в соответствии ... .auris-verlag.de/ ...
  3. Оправилах записи программы 9 Очем можно не беспокоиться 9 Описание архитектуры объекта 9

    Реферат
    ... описывать поведение, т.е. алгоритмы функционирования цифровых систем, а также проводить ... определение можно заменить структурной схемой. Можно моделировать: параллелизм, ... следующие стили проектирования и описания схем: структурный, потоковый, поведенческий, ...
  4. Болотова алла Константиновна

    Документ
    ... Л.С.Выготского через разработку общепсихологической теории ... (см. схему) Схема хронотопической детерминации ... деятельности является необходимым инструментом приспособления к меняющимся ... наименьшей ошибкой (показания электронного секундомера, вмонтированного ...
  5. Базы знаний интелектуальных систем гаврилова хорошевский

    Документ
    ... , традиционная схема разработки СПЗ I ... электронные учебники. Размещение в узлах сети не только текстовой и цифровой ... 1994. «Сценарий» — инструмент визуальной разработки компьютерных программ // Компьютерные техноло­ ... and Languages, Springer-Verlag. 287. Fridman ...

Другие похожие документы..