lkg47 0 28 апреля, 2017 Опубликовано 28 апреля, 2017 · Жалоба Здравствуйте, Прошу помочь с такой проблемой: Имеется два toplvl модуля, с некоторыми одинаковыми подмодулями связываемыми интерфейсами. Интерфейсы в основном имеют одинаковые порты, но есть и отличающиеся. ////////////TB////////////// module tb(); logic reset = 'b0; m1 m1( .reset(reset) ); m2 m2( .reset(reset) ); endmodule ////////////TOP1//////////////////// interface bus_a(input logic reset); logic clk; logic clk_b; endinterface module m1(input logic reset); bus_a bus_a(.reset(reset)); m1_1 m1_1(.bus_a(bus_a)); endmodule module m1_1(bus_a bus_a); logic m1_1_clk = 'b0; assign bus_a.clk = m1_1_clk; assign bus_a.clk_b = ~ m1_1_clk; always #10 m1_1_clk <= ~m1_1_clk; endmodule /////////////TOP2///////////////// interface bus_a(input logic reset); logic clk; logic clk_a; endinterface module m2(input logic reset); bus_a bus_a(.reset(reset)); m2_1 m2_1(.bus_a(bus_a)); endmodule module m2_1(bus_a bus_a); logic m2_1_clk = 'b0; assign bus_a.clk = m2_1_clk; assign bus_a.clk_a = ~ m2_1_clk; always #20 m2_1_clk <= ~m2_1_clk; endmodule //////////////////////////////// ошибка в modelsim: [CNNODP] - Component name (clk_b) is not on a downward path. Unresolved reference to 'clk_b' in bus_a.clk_b. Можно создать одинаковые интерфейсы, где порты будут одинаковыми для TOP1 и для TOP2, но разве это правильное решение? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 28 апреля, 2017 Опубликовано 28 апреля, 2017 · Жалоба вообще не очень понятно что вы делаете. Не очень понятно где вы создали инстанс интерфейса, то есть вы его описали - здорово, а где сам интерфейс то создается, где его экземпляр? Не очень понятно зачем называть одинаково разные интерфейсы? Не очень понятно зачем 2 топ модуля в одном файле? скорее всего проблема в том что вы путаете экземпляр и описание интерфейса. И пытаетесь на уровне описания делать различные его экземпляры. Ну или я вообще не понял что вы делаете:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fitc 0 28 апреля, 2017 Опубликовано 28 апреля, 2017 · Жалоба ошибка в modelsim: Не надо определять в одной области видимости интерфейсы с одинаковыми именами. Modelsim сначала распознал первый интерфейс bus_a, встретив второй интерфейс с тем же именем, он переопределил интерфейс bus_a. Если в разделе "TOP 1" везде поменять bus_a на bus_b все успешно скомпилится и запустится Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lkg47 0 29 апреля, 2017 Опубликовано 29 апреля, 2017 · Жалоба Не очень понятно где вы создали инстанс интерфейса, то есть вы его описали - здорово, а где сам интерфейс то создается, где его экземпляр? экземпляр: bus_a bus_a(.reset(reset)); Не очень понятно зачем называть одинаково разные интерфейсы? есть два проекта которых необходимо объединить в тестбенче. В Топ модулях проектов используются одинаковые подмодули, в которых используются одинаковые интерфейсы, если я задам в одном из Топ модулей имя интерфейса другим то он не будет стыковаться с его внутренним подмодулем использующим стандартный интерфейс. например так: создаю экземпляр: bus_a bus_X(.reset(reset)); подключаю подмодуль: m2_1 m2_1(.bus_a(bus_X)); в подмодуле имею объявление порта: module m2_1(bus_a bus_a) получаю ошибку о не соответствии интерфейсов: Modelsim:The interface port 'bus_a' of type 'bus_a' must be passed the same-type interface. Сейчас попробовал использовать объявление интерфейса в подмодуле таким путем: module m2_1(interface bus_a) ошибок нет, все работает; Но теперь, судя по Вашей реакции создается впечатление, что я как то неверно использую интерфейсы. Подскажите, как Вы используете интерфейсы в этих случаях, т.е. когда надо объединять несколько топ модулей в тестбенче? или одинаковые интерфейсы Вы не применяете? Не надо определять в одной области видимости интерфейсы с одинаковыми именами. Modelsim сначала распознал первый интерфейс bus_a, встретив второй интерфейс с тем же именем, он переопределил интерфейс bus_a. Если в разделе "TOP 1" везде поменять bus_a на bus_b все успешно скомпилится и запустится Подскажите пожалуйста, как определять в интерфейсы в разных областях видимости? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fitc 0 29 апреля, 2017 Опубликовано 29 апреля, 2017 · Жалоба экземпляр: bus_a bus_a(.reset(reset)); есть два проекта которых необходимо объединить в тестбенче. В Топ модулях проектов используются одинаковые подмодули, в которых используются одинаковые интерфейсы, если я задам в одном из Топ модулей имя интерфейса другим то он не будет стыковаться с его внутренним подмодулем использующим стандартный интерфейс. например так: создаю экземпляр: bus_a bus_X(.reset(reset)); подключаю подмодуль: m2_1 m2_1(.bus_a(bus_X)); в подмодуле имею объявление порта: module m2_1(bus_a bus_a) получаю ошибку о не соответствии интерфейсов: Приведите полный код. По данному описанию ничего не понятно Подскажите пожалуйста, как определять в интерфейсы в разных областях видимости? ////////////TB////////////// module tb(); logic reset = 'b0; top1 m1( .reset(reset) ); top2 m2( .reset(reset) ); endmodule ////////////TOP1//////////////////// module top1(input logic reset); interface bus_a(input logic reset); logic clk; logic clk_b; endinterface module m1(input logic reset); bus_a bus_a(.reset(reset)); m1_1 m1_1(.bus_a(bus_a)); endmodule module m1_1(bus_a bus_a); logic m1_1_clk = 'b0; assign bus_a.clk = m1_1_clk; assign bus_a.clk_b = ~ m1_1_clk; always #10 m1_1_clk <= ~m1_1_clk; endmodule m1 m1_instance( .reset(reset) ); endmodule /////////////TOP2///////////////// module top2(input logic reset); interface bus_a(input logic reset); logic clk; logic clk_a; endinterface module m2(input logic reset); bus_a bus_a(.reset(reset)); m2_1 m2_1(.bus_a(bus_a)); endmodule module m2_1(bus_a bus_a); logic m2_1_clk = 'b0; assign bus_a.clk = m2_1_clk; assign bus_a.clk_a = ~ m2_1_clk; always #20 m2_1_clk <= ~m2_1_clk; endmodule m2 m2_instance( .reset(reset) ); endmodule //////////////////////////////// Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lkg47 0 30 апреля, 2017 Опубликовано 30 апреля, 2017 · Жалоба я ошибочно полагал, что интерфейс может быть только за модулями, видимо по причине привычки называть инстанс одноименно модулю(в этом случае компилятор ругается созданный экземпляр) в пример добавил общий для всех модуль в итоге: ////////////TB////////////// module tb(); logic reset = 'b0; top1 m1( .reset(reset) ); top2 m2( .reset(reset) ); endmodule ////////////TOP1//////////////////// module top1(input logic reset); interface bus_a(input logic reset); logic clk; logic clk_b; endinterface bus_a bus_a_instance(.reset(reset)); m1_1 m1_1(.bus_a(bus_a_instance)); gen gen_instance(.bus_a(bus_a_instance)); endmodule /////////////TOP2///////////////// module top2(input logic reset); interface bus_a(input logic reset); logic clk; logic clk_a; endinterface bus_a bus_a_instance(.reset(reset)); m2_1 m2_1(.bus_a(bus_a_instance)); gen gen_instance(.bus_a(bus_a_instance)); endmodule ////////////подмодуль TOP1//////////// module m1_1(bus_a bus_a); logic m1_1_clk = 'b0; assign bus_a.clk = m1_1_clk; assign bus_a.clk_b = ~ m1_1_clk; always #10 m1_1_clk <= ~m1_1_clk; endmodule ////////////подмодуль TOP2//////////// module m2_1 (bus_a bus_a); logic m2_1_clk = 'b0; assign bus_a.clk = m2_1_clk; assign bus_a.clk_a = ~ m2_1_clk; always #20 m2_1_clk <= ~m2_1_clk; endmodule //////////общий модуль///////////// module gen(bus_a bus_a); endmodule Спасибо за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lkg47 0 9 июня, 2017 Опубликовано 9 июня, 2017 · Жалоба при попытке синтезировать код описанный выше Quartus выдает следующее сообщение: Error (10170): Verilog HDL syntax error at interface.sv(27) near text "interface"; expecting "endmodule" в литературе по SV не нашел примеров с объявлением интерфейса внутри модуля. пока вижу только один выход: -описывать интерфейсы в каждом из топ модулей, при этом выполнять проверку директивы для исключения повторного чтения `ifndef def_interface_bus_a `define def_interface_bus_a interface bus_a (input logic reset); logic clk; endinterface `endif -отличающиеся порты подключать отдельно наткнулся здесь на форуме на перевод стандарта по интерфейсам, может кому-нибудь пригодится : IEEE Standard for SystemVerilog—Unified Hardware Design,Specification, and Verification Language(Неофициальный перевод)IEEE SV Interface (неофициальный перевод) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 9 июня, 2017 Опубликовано 9 июня, 2017 · Жалоба Спасибо мне. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fitc 0 10 июня, 2017 Опубликовано 10 июня, 2017 · Жалоба в литературе по SV не нашел примеров с объявлением интерфейса внутри модуля. внутри модуля интерфейс объявляется как обычно. В Quartus поддержка SystemVerilog всегда была не очень, сейчас не знаю как обстоят дела Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться