Поиск
Показаны результаты для тегов 'interface'.
-
Приветствую Возник вот такой вопрос- Есть интерфейс с пучком сигналов которые для удобства определены как структура interface if_TEST #(ID_WH=3) ; typedef struct packed { u1_t [ID_WH-1:0] sig0; u1_t sig1; u7_t sig2; //... } st_TEST_t; st_TEST_t st; bit valid; bit ready; modport in (input st, valid, output ready); modport ou (output st, valid, input ready); endinterface и хочется мне в месте где такой интерфейс применяется получить актуальную ширину структуры в битах. Поскольку реальное значение будет зависит от параметра который меняется при инстанцировании интерфейса. Казалось бы что проще module test (if_TEST.in if_test, ...); localparam ST_WH = $bits(if_test.st); ... module top (...); if_TEST #(4) if_test (); test i_test(.if_test(if_test), ...); ... На что получаю в Modelsim (Intel start edition 2020.1/2020.3) маловразумительную ошибку - ** Error: (vsim-8894) In instance ".../i_test" parameter reference "if_test.st" through interface port "if_test" is not valid when the actual interface in the instance is an arrayed instance element or below a generate construct." Маловразумительную потому что этот интерфейс инстанцирован сам по себе - ни как array, ни из под generate. Самое прикольное что в Qu все синтезируется как надо, а в Modelsim такая вот засада. Вот и ломаю голову как сделать чтобы и в симе и в синтезе получать нужное заначене ширины. Удачи! Rob.
-
Импорт типа данных из интерфейса
Perdaculus опубликовал тема в Языки проектирования на ПЛИС (FPGA)
Всем привет. Пытаюсь передать параметризированную структуру между модулями и поскольку "parameter type" в Quartus 18.1 не работает, я хочу сделать это через интерфейс. Описываю его в отдельном файле, создаю инстанс в топ модуле, а во вложенном модуле пытаюсь вытащить из него тип данных. Выглядит это так: interface intf_WITHSTRUCT #(WIDTH=8); typedef struct packed{ logic val; logic [WIDTH-1:0] cnt; } st_INSIDE_INTF; st_INSIDE_INTF struct_inst; endinterface: intf_WITHSTRUCT module top (output logic [7:0] ocnt); intf_WITHSTRUCT #(.WIDTH(8)) interface_inst(); test i_test ( .clk(clk_125MHz), .rst(prb_rst), .blabla(interface_inst), .ocnt(ocnt) ); endmodule: top module test ( input clk, input rst, intf_WITHSTRUCT blabla, output logic [7:0] ocnt ); typedef blabla.st_INSIDE_INTF st_INSIDE_INTF_import; // Вытаскивю структуру st_INSIDE_INTF_import new_struct_inst; // Создаю инстанс always_ff@(posedge clk or posedge rst) if(rst) new_struct_inst <= '0; else new_struct_inst.cnt <= new_struct_inst.cnt + 1'b1; always_ff@(posedge clk or posedge rst) if(rst) ocnt <= '0; else ocnt <= new_struct_inst.cnt; endmodule: test В результате получаю ошибку: Error (10733): Verilog HDL error at test.sv(17): cnt is not declared under this prefix В чем может быть ошибка? Что странное, если во вложенном модуле я присваиваю структуре (которая в интерфейсе) значения, то ошибки не возникает. На мой взгляд не логичное поведение- 10 ответов
-
- systemverilog
- interface
-
(и ещё 1 )
C тегом:
-
Всем привет! Возможно, вопрос обсуждался, но мне найти не удалось. Суть в следующем. Есть проект, успешно собирается и даже работает. Но при синтезе возникают тонны предупреждений такого рода: WARNING: [Synth 8-3331] design <...> has unconnected port <...>. Выглядит угрожающе, но на деле по нетлисту (схематику) видно, что сигналы-то на месте, всё подключено. Анализ показывает, что почти все они относятся к сигналам интерфейсов. И похоже, что синтезатор ругается на сигналы модпортов интерфейса, которые не используется в том или ином модуле. Т.е. насколько понимаю, картина такая: есть интерфейс, у него есть модпорты m0, m1, s0, модпорт m0 подключается к модулю master0, модпорт m1 - к модулю master1, а модпорт s0 - к модулю slave0. Получается, что интерфейс прокинут во все модули, но часть сигналов, которые относятся к другим модпортам, естественно в данном конкретном модуле не подключена - например, в модуле master0 не подключены сигналы модпоротов m1 и s0. Получается, что ругань как бы не по делу. Собственно вопрос: как с этим бороться, т.к. подобные предупреждения выглядят неприятно?