Specman - ошибка при подключении монитора к табло

Я использую e (specman) в своем проекте. Я создаю среду проверки для uart. У меня есть структура, похожая на any_sequence_item с именем uart_frame_s.

Я хочу добавить табло для tx в uart. У меня есть следующий экземпляр в uart_tx_agent:

uart_monitor: uart_tx_monitor_u is instance;

Определение табло:

unit uart_tx_scoreboard_u like uvm_scoreboard{
scbd_port frame_add : add uart_frame_s;
scbd_port frame_match : match uart_frame_s;
};

Я пытаюсь подключиться через:

connect_ports() is also {
      uart_monitor.uart_frame_s_started.connect(tx_scb.uart_frame_s_add);
      uart_monitor.uart_frame_s_ended.connect(tx_scb.uart_frame_s_match);
};

где: uart_scb (табло) является экземпляром в uart_tx_agent

Определение портов TLM в мониторе:

uart_frame_s_started : out iterface_port of tlm_analysis of uart_frame_s is instance;
uart_frame_s_ended : out iterface_port of tlm_analysis of uart_frame_s is instance;

Я получаю следующие ошибки: Ошибка: «uart_monitor» (из «uart_tx_monitor_u») не имеет поля «uart_frame_S_started».... Ошибка: «uart_monitor» (из «uart_tx_monitor_u») не имеет поля «uart_frame_S_ended».


person Sara p    schedule 27.12.2017    source источник


Ответы (1)


Из информации, которую вы предоставили выше, я могу сделать следующий вывод:

1. Электронное табло поставляется с предварительно определенными портами реализации TLM, к которым необходимо подключить выходные порты TLM монитора. Похоже, вы не определили порты TLM в своем мониторе. Пожалуйста, определите эти порты TLM так, как они требуются при подключении к табло (примеры для этого есть в документации по табло). Что я предлагаю, так это то, что как только вы закончите сбор кадра из шины, сгенерируйте событие, уведомляющее о том, что кадр был завершен (я думаю, вы можете назвать его «uart_frame_s_endded»), а затем по этому событию. табло через выходные порты TLM монитора для добавления/сопоставления. (Я предполагаю, что «добавить» будет подходящим для UART tx).

  1. если порты определены, обязательно используйте функцию connect_portS() в том месте кода, которое синтаксический анализатор будет читать позже, чем определение порта.

просто к сведению:

  1. похоже, вы определили табло из агента. (похоже, что tx_scbd и uart_monitor находятся в одной иерархии. Считается «плохой практикой» размещать компонент системного уровня (табло) внутри uVC (который в данном случае является компонентом интерфейса UART).

хоп это помогает

person yuvalg    schedule 28.12.2017
comment
1. Подключил порты (см. connect_ports() is also) 2. Почему табло не должно быть и в агенте? - person Sara p; 28.12.2017
comment
1. Specman считает, что портов с такими именами нет. Следовательно, он выдал ошибку выше. можете ли вы вставить определение порта TLM в свой вопрос выше (исходный вопрос). 2. Весь смысл eRM заключается в написании повторно используемого кода. табло — это специальный компонент приложения, который обслуживает не только интерфейс UART. (например, если у вас есть два интерфейса, каждый с другим протоколом, и вы хотите сопоставить пакеты, входящие в один и исходящие из другого). их). - person yuvalg; 28.12.2017
comment
Я добавил то, что вы просили. - person Sara p; 28.12.2017
comment
Привет, Сара, как насчет объявления выходных портов TLM, которые должны быть определены в «uart_monitor»? можете ли вы вставить определение этих портов в исходный вопрос? - person yuvalg; 29.12.2017
comment
Я добавил то, что вы просили - person Sara p; 31.12.2017
comment
1. Вы уверены, что загружаете файл, в котором определяете порты TLM? - person yuvalg; 01.01.2018
comment
2. может быть, вы расширяете не тот тип? и определение портов TLM под неправильным подтипом. 3. возможно, вы можете вставить весь код определения TLM с помощью оператора «extend». - person yuvalg; 01.01.2018
comment
Короче говоря, не похоже, что вы делаете что-то не так семантически. возможно, есть проблема со связью или с заказом, которую вы не заметили. Я предлагаю вам либо удалить расширение «connect_ports()» и выполнить «тест» в specman, а затем изучить свои мониторы, чтобы убедиться, что они имеют порты TLM, которые вы ожидаете, или выполнить WebEx с одним из представителей службы поддержки Cadence. так что они могут решить это для вас. - person yuvalg; 01.01.2018
comment
uart_frame_s_started и uart_frame_s_ended не являются портами. Это события. Пожалуйста, ознакомьтесь с разделом «Универсальная методология проверки (UVM)» и «Руководство пользователя» Cadence — Monitor. - person Sara p; 03.01.2018
comment
вы подключаете событие к порту TLM. вам нужно определить порты TLM для подключения к порту добавления/сопоставления. поищите примеры в документации. в примере, на который вы ссылаетесь, «packet_ended» — это порт TLM. - person yuvalg; 04.01.2018