Vadim 0 17 февраля, 2009 Опубликовано 17 февраля, 2009 · Жалоба Добрый день. Questa постоянно ложится без объяснения причин, невозможно работать. Провел следствие и подготовил типа баг-репорт. Имеем файл "my_class.sv": class my_class; bit bit1, bit2; task my_task ( ref bit bit1, bit2 ); forever @ (*) begin this.bit1 = bit1; this.bit2 = bit2; end endtask endclass и файл "my.sv": `include "my_class.sv" module my; endmodule компилируем: vlog -novopt -sv my.sv получаем: # ** Error: my.sv(7): Internal error: ../../../src/vlog/vtokfile.c(334) nr == 1 Файлы прилагаю. Квесте не нравится вот это: forever @ (*) Что я сделал неправильно? Помогите, уважаемые гуру, только на вас и уповаю :crying: bag.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 февраля, 2009 Опубликовано 17 февраля, 2009 · Жалоба task my_task ( ref bit bit1, bit2 ); forever @ (*) begin this.bit1 = bit1; this.bit2 = bit2; end endtask Что я сделал неправильно? Помогите, уважаемые гуру, только на вас и уповаю :crying: ничего себе, первый раз такое вижу, так тоже можно писать ?? %)))) подозревая что вы хотели сделать, я бы сделал так task my_task ( ref bit bit1, bit2 ); begin forever begin wait(bit1 || bit2); this.bit1 = bit1; this.bit2 = bit2; end end endtask но вообще ИМХО таскать такие битовые вещи в классы я бы не стал, классы для транзакций и работы через BFM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim 0 17 февраля, 2009 Опубликовано 17 февраля, 2009 · Жалоба Из Вашего ответа понял только, что неизвестно, что я сделал неправильно но так почему-то нельзя писать и никто никогда такого не видел. Запутался еще больше :crying: Спасибо за участие :) ЗЫ Зачем Вы в Вашем коде окружили тело таска словами-"паразитами" begin ... end??? ЗЫЫ Страшно мне... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 17 февраля, 2009 Опубликовано 17 февраля, 2009 · Жалоба Из Вашего ответа понял только, что неизвестно, что я сделал неправильно но так почему-то нельзя писать и никто никогда такого не видел. Запутался еще больше :crying: IEEE Standard Verilog® Hardware Description Language -> 9.6 Looping statements -> Syntax 9-7 Syntax for the looping statements -> function_loop_statement ::= (From Annex A - A.6.8) forever function_statement | repeat ( expression ) function_statement | while ( expression ) function_statement | for ( variable_assignment; expression; variable_assignment ) function_statement loop_statement ::= forever statement | repeat ( expression ) statement | while ( expression ) statement | for ( variable_assignment; expression; variable_assignment ) statement т.е. так делать как вы делаете нельзя по стандарту %) Это же процедурный код, а не процесс. вот и весь ответ. Компилятор квесты наверное валиться от такой наглости %))) я предположил, что вы пытаетесь в таске ждать событий по обновлению переменных по ссылке bit1 и bit2, и написал как бы это сделал я ЗЫ Зачем Вы в Вашем коде окружили тело таска словами-"паразитами" begin ... end??? привычка и шаблоны в редакторе %) Хотя вообще ваш код, в том виде в котором вы его представили, почти распадается на 2 операторных блока. 1. блок forever @(*) //вот тут не хватает точки с запятой. 2. begin...end но @(*) это неявный список чувствительности для процессов, в процедурном коде его использовать нельзя, т.к. откуда брать сигналы то ? если вам нужно ждать события то, в процедурном коде надо использовать либо wait(event) либо @(event). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim 0 17 февраля, 2009 Опубликовано 17 февраля, 2009 · Жалоба Спасибо!!! Теперь все уложилось в моей голове :) ЗЫ Компилятор не должен падать от наглости, однако. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться