Здравствуйте.
Попробовал сделать простейший проект с использованием
Matlab EDA Simulator Link + Questa и обнаружил что результаты моделирования радикально зависят от версии используемой
Questa.
Проект следующий: имеется модуль верхнего уровня на SystemVerilog, в котором генерируется сигнал тактовой частоты и реализован регистр (код показан ниже).
Код
always_ff @(posedge сlk) begin
out_data <= m_data;
end
Значение m_data формируется инстанцией модуля, интерфейс модуля приведен ниже.
Код
module slon_tb
(
//---------------------------------
input wire clk,
output reg [3:0] data_out
);
Этот модуль реализован в виде функции на Матлабе согласно методике
«Using a MATLAB Function as a Component», описанной в доках к Matlab EDA Simulator Link. В качестве условия запуска этой функции используется условие
–rising clk (задается с помощью функции matlabcp). Собственно функционал модуля представляет собой простой счетчик.
Теперь о самой проблеме: при работе с
Questa 6.4c все функционирует правильно – значение на выходе регистра запаздывает на единицу по сравнению со значением с выхода счетчика. Но при моделировании с
Questa 6.6c или c
Questa 10.0b значения на выходе счетчика и регистра совпадают – получается что модуль, реализованный на матлабе вычисляет новое значение своего выхода и это новое значение сразу же использует блок always_ff регистра.
Каких-либо ошибок или варнингов при этом не выдается (ни Матлабом, ни Квестой). Как я понимаю проблема в том, что симулятор (Квеста) некорректно обрабатывает очередь событий в момент очередного фронта клока или, точнее, неправильно размещает события в очереди.
Сталкивался ли кто-нибудь с чем-нибудь подобным? Я только начал разбираться с этим пакетом, и, возможно, что-то не понял, поэтому был бы очень признателен за помощь.