Перейти к содержанию
    

Оператор disable в Verilog-е

В Verilog-е есть оператор disable, это в некотором роде аналог оператора continue из языка Си.

Убедиться в этом можно на простом примере:

`timescale 1ns/1ps
module Test();
    integer i, j;
    always
        for(i = 0; i < 8; i = i + 1)
        begin
            for(j = 0; j < 8; j = j + 1)
            begin: _j
                if(j == 5) disable _j;
                #10;
            end
        end
endmodule

Видим, что переменная j в состоянии 5 задержку в 10 единиц не имеет, т.е. #10 не выполнилась, началась новая итерация цикла:

post-78485-1528538092_thumb.png

 

Но мне, в тестбенче, нужно не начинать новую итерацию цикла, а нужно цикл завершить, нужен эквивалент оператора break. Искал - не нашёл. Стал думать, додумался до такого:

 

    always
        for(i = 0; i < 8; i = i + 1)
        begin: _i
            for(j = 0; j < 8; j = j + 1)
            begin
                if(j == 5) disable _i;
                #10;
            end
        end

post-78485-1528538163_thumb.png

Неужели, в самом деле, нет отдельного оператора для такой цели?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну в SystemVerilog может быть. А в простом нету что ли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну в SystemVerilog может быть. А в простом нету что ли?

IEEE Standard Verilog ® Hardware Description Language IEEE Std 1364-2001 -> 11. Disabling of named blocks and tasks

The disable statement provides the ability to terminate the activity associated with concurrently active procedures, while maintaining the structured nature of Verilog HDL procedural descriptions. The disable statement gives a mechanism for terminating a task before it executes all its statements, breaking from a looping statement, or skipping statements in order to continue with another iteration of a looping statement. It is useful for handling exception conditions such as hardware interrupts and global resets

-> Example 4

This example shows the disable statement being used in an equivalent way to the two statements continue and break in the C programming language.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

-> Example 4

Собственно так и сделал. Странно, конечно, что отдельного оператора нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно, конечно, что отдельного оператора нет.

Но есть while(j != 5) и при равенстве цикл закончится...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но есть while(j != 5) и при равенстве цикл закончится...

Да это понятно, можно было и for(j = 0; j < 6; j = j +1) написать.

Это же простой демонстрационный пример, сам тестбенч несколько сложнее.

Изменено пользователем Jackov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...