Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Оператор disable в Verilog-е
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
Jackov
В 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 не выполнилась, началась новая итерация цикла:
Нажмите для просмотра прикрепленного файла

Но мне, в тестбенче, нужно не начинать новую итерацию цикла, а нужно цикл завершить, нужен эквивалент оператора 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

Нажмите для просмотра прикрепленного файла
Неужели, в самом деле, нет отдельного оператора для такой цели?
Jackov
Цитата(Kuzmi4 @ Jun 9 2018, 13:44) *

Ну в SystemVerilog может быть. А в простом нету что ли?
des00
Цитата(Jackov @ Jun 9 2018, 18:07) *
Ну в 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.
Jackov
Цитата(des00 @ Jun 9 2018, 14:37) *
-> Example 4

Собственно так и сделал. Странно, конечно, что отдельного оператора нет.
iosifk
Цитата(Jackov @ Jun 9 2018, 18:26) *
Странно, конечно, что отдельного оператора нет.

Но есть while(j != 5) и при равенстве цикл закончится...
Jackov
Цитата(iosifk @ Jun 10 2018, 10:15) *
Но есть while(j != 5) и при равенстве цикл закончится...

Да это понятно, можно было и for(j = 0; j < 6; j = j +1) написать.
Это же простой демонстрационный пример, сам тестбенч несколько сложнее.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.