PAB 0 8 апреля, 2008 Опубликовано 8 апреля, 2008 · Жалоба Пытаюсь использовать задержу на несколько тактов clocking блока: program test(Rx_iol.TB Rx, ...); initial begin ........... ##2 Rx.cb.valid <= 1; ........... end ...... endprogram Однако QuestaSim 6.3d выдаёт ошибку: # ** Error: A default clocking block must be specified to use the ##n timing statement. Не понимаю, зачем определять дефолтный clocking блок если в интерфейсе Rx_iol определён клок, по которому должна происходить задержка: interface Rx_iol(input logic clk); logic [31:0] data; logic ready, valid; clocking cb @(posedge clk); output data, valid; input ready; endclocking modport DUT (input data, valid, output ready); modport TB (clocking cb); endinterface : Rx_iol Может кто подскажет, в чём проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Evil_Archer 0 8 апреля, 2008 Опубликовано 8 апреля, 2008 · Жалоба Пытаюсь использовать задержу на несколько тактов clocking блока: Думаю, что все по стандарту (п. 15.10): оператор ##n определяет задержку в n тактов _default'ного_ clocking блока, который может быть только один на модуль, интерфейс или программу. Я лично пользуюсь конструкцией вида: repeat (n) @INTERF.cb; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PAB 0 9 апреля, 2008 Опубликовано 9 апреля, 2008 · Жалоба Думаю, что все по стандарту (п. 15.10) Я вроде делаю всё по стандарту. Пункт 15.14 (Synchronous drives), на стр.191 фраза: The event_count uses syntax similar to the cycle-delay operator (see Section 15.10), however the synchronous drive uses the clocking block of the signal being driven and not the default clocking. Попробовал с default'ным clocking блоком - результат тот же, ошибки остались. P.S. Ваша конструкция (repeat (n) @INTERF.cb) работает, но всё-таки хотелось бы использовать synchronous drives, т.к. просто влом писать repeat (n) @INTERF.cb; INTERF.cb.signal <= value; вместо: ##n INTERF.cb.signal <= value; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Evil_Archer 0 9 апреля, 2008 Опубликовано 9 апреля, 2008 · Жалоба Нет, с дефолтным блоком все работает, только он должен быть размещен непосредственно в программе. Но это как раз cycle delay (п. 15.10), а вот то, что значится под пунктом 15.14, действительно работает очень странно. Попробуйте конструкцию вида. INTERF.cb.signal<=##n 0; У меня не жалуется в этом случае. Если написать: ##n INTERF.cb.signal<= 0; , то пожалуется на отсутствие дефолтного клокинг-блока. Если его объявить в программе, то эта конструкция заработает нормально, но это отличается от описанного в п. 15.14, т.к. ## работает по дефолтному блоку в этом случае. Вобщем, вот так.... :laughing: На самом деле, я сам с этим столкнулся месяца 3 назад и для себя решил проблему при помощи repeat'a, но это конечно костыль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться