Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с Matlab EDA Simulator Link
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
mikeT
Здравствуйте.
Попробовал сделать простейший проект с использованием 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 регистра.

Каких-либо ошибок или варнингов при этом не выдается (ни Матлабом, ни Квестой). Как я понимаю проблема в том, что симулятор (Квеста) некорректно обрабатывает очередь событий в момент очередного фронта клока или, точнее, неправильно размещает события в очереди.

Сталкивался ли кто-нибудь с чем-нибудь подобным? Я только начал разбираться с этим пакетом, и, возможно, что-то не понял, поэтому был бы очень признателен за помощь.

imperman
Цитата(mikeT @ Aug 13 2011, 15:13) *
Здравствуйте.
Попробовал сделать простейший проект с использованием 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 регистра.

Каких-либо ошибок или варнингов при этом не выдается (ни Матлабом, ни Квестой). Как я понимаю проблема в том, что симулятор (Квеста) некорректно обрабатывает очередь событий в момент очередного фронта клока или, точнее, неправильно размещает события в очереди.

Сталкивался ли кто-нибудь с чем-нибудь подобным? Я только начал разбираться с этим пакетом, и, возможно, что-то не понял, поэтому был бы очень признателен за помощь.


Хм..
Ни разу не было подобного. Попробую повторить на досуге.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.