реклама на сайте
подробности

 
 
> Оператор disable в Verilog-е
Jackov
сообщение Jun 9 2018, 09:57
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



В 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

Прикрепленное изображение

Неужели, в самом деле, нет отдельного оператора для такой цели?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kuzmi4
сообщение Jun 9 2018, 10:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



SystemVerilog break and continue statements
Go to the top of the page
 
+Quote Post
Jackov
сообщение Jun 9 2018, 11:07
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(Kuzmi4 @ Jun 9 2018, 13:44) *

Ну в SystemVerilog может быть. А в простом нету что ли?
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 9 2018, 11:37
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(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.


--------------------
Go to the top of the page
 
+Quote Post
Jackov
сообщение Jun 9 2018, 15:26
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 294
Регистрация: 25-09-13
Из: Н.Новгород
Пользователь №: 78 485



Цитата(des00 @ Jun 9 2018, 14:37) *
-> Example 4

Собственно так и сделал. Странно, конечно, что отдельного оператора нет.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 17:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016