MAXvaLL 0 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба Работаю в Qartus 9.1 SP2 Надо создать N экземпляров одного модуля, причем N является параметром. Конечно можно написать максимально возможное количество if-generate, но меня это как-то не вдохновляет. Возможно ли такое при помощи for-generate? так квартус ругается Error (10253): Verilog HDL Module Instantiation error at data_path_64.v(104): cannot elaborate array of instances because the declaration for the instantiated module has not been analyzed generate genvar i; for(i = 0; i < DAT_BYTES; i = i + 1) begin : dq_gen dq_8 dq_8_inst[i](//<<<<<<<<<<<<<<<< .oe(oe_bd), .inclock(dqin_clk_wire[i]), .outclock(clk2_inv), .datain_h(dqo[8*(i+1)-1:8*i]), .datain_l(dqo[8*(DAT_BYTES+i+1)-1:8*(DAT_BYTES+i)]), .padio(dq[8*(i+1)-1:8*i]), .dataout(dqi_wire[8*(DAT_BYTES+i+1)-1:8*(DAT_BYTES+i)]), .dataout_ddio(dqi_wire[8*(i+1)-1:8*i]) ); end endgenerate так не ругается, но по моему это не вполне корректно generate genvar i; for(i = 0; i < DAT_BYTES; i = i + 1) begin : dq_gen dq_8 dq_8_inst(//<<<<<<<<<<<<<<<< .oe(oe_bd), .inclock(dqin_clk_wire[i]), .outclock(clk2_inv), .datain_h(dqo[8*(i+1)-1:8*i]), .datain_l(dqo[8*(DAT_BYTES+i+1)-1:8*(DAT_BYTES+i)]), .padio(dq[8*(i+1)-1:8*i]), .dataout(dqi_wire[8*(DAT_BYTES+i+1)-1:8*(DAT_BYTES+i)]), .dataout_ddio(dqi_wire[8*(i+1)-1:8*i]) ); end endgenerate Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба называется "найдите хоть одно отличие" :) То i, что взято в скобках , добавляется к dq_8_inst само при генерации. Таким, образом, каждый экземпляр будет иметь свое имя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MAXvaLL 0 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба называется "найдите хоть одно отличие" :) То i, что взято в скобках , добавляется к dq_8_inst само при генерации. Таким, образом, каждый экземпляр будет иметь свое имя. Ну, отличие есть, потому как один способ работает, а другой нет :laughing: То что второй способ работает В КВАРТУСЕ я и сам вижу, квартус создает инстансы вида dq_gen.dq_8_inst Просто меня интересовало насколько это корректно с точки зрения стандарта verilog 2001? И будет ли это работать в других средах? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба Просто меня интересовало насколько это корректно с точки зрения стандарта verilog 2001? Насколько я понимаю, это единственно верное решение (для всех сред). Для этого блок begin - end и должен иметь имя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 17 ноября, 2010 Опубликовано 17 ноября, 2010 · Жалоба Просто меня интересовало насколько это корректно с точки зрения стандарта verilog 2001? И будет ли это работать в других средах? это некорректно с точки зрения любого стандарта по 2009 вклчительно, т.к. вот это "dq_8 dq_8_inst(...)" (выделено жирным) есть идентификатором модуля, который определяется вот этим синтаксисом: simple_identifier ::= [ a-zA-Z_ ] { [ a-zA-Z0-9_$ ] } как видите символа '[' или ']' там нет ЗЫ как я уже неоднократно повторял Апендикс А Formal Syntax очень полезная вещь в стандарте - решает любые вопросы и очень быстро и просто Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MAXvaLL 0 18 ноября, 2010 Опубликовано 18 ноября, 2010 · Жалоба это некорректно с точки зрения любого стандарта по 2009 вклчительно, т.к. вот это "dq_8 dq_8_inst(...)" (выделено жирным) есть идентификатором модуля, который определяется вот этим синтаксисом: simple_identifier ::= [ a-zA-Z_ ] { [ a-zA-Z0-9_$ ] } как видите символа '[' или ']' там нет Ну я вообще то имел ввиду как раз способ второй - без , он корректен везде? Ну а как же массивы модулей?! // Array of instances <module_name> #(<parameters) <inst_name> [<msb>:<lsb>](<port_connects>); Спасибо ViKo ! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 18 ноября, 2010 Опубликовано 18 ноября, 2010 · Жалоба Ну я вообще то имел ввиду как раз способ второй - без , он корректен везде? второй - да. Ну а как же массивы модулей?! // Array of instances <module_name> #(<parameters) <inst_name> [<msb>:<lsb>](<port_connects>); а это вы откуда взяли? массивы модулей только планируются в следующем стандарте (или я что-то пропустил?). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 18 ноября, 2010 Опубликовано 18 ноября, 2010 · Жалоба а это вы откуда взяли? массивы модулей только планируются в следующем стандарте (или я что-то пропустил?). они же еще в 2001году были Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 18 ноября, 2010 Опубликовано 18 ноября, 2010 · Жалоба они же еще в 2001году были ого. пойду перечитаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 18 ноября, 2010 Опубликовано 18 ноября, 2010 · Жалоба Был не прав. Вспылил. Но теперь считаю свое предложение безобразной ошибкой, раскаиваюсь, прошу дать возможность загладить, искупить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MAXvaLL 0 19 ноября, 2010 Опубликовано 19 ноября, 2010 · Жалоба а это вы откуда взяли? В квартусе в Verilog Templates И собственно озлобляет то, что нахрена это там писать, если это не поддерживается (квартусом)? Хотя заявленно что Q поддерживает Verilog 2001! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 ноября, 2010 Опубликовано 19 ноября, 2010 · Жалоба В квартусе в Verilog Templates И собственно озлобляет то, что нахрена это там писать, если это не поддерживается (квартусом)? Хотя заявленно что Q поддерживает Verilog 2001! что именно не поддерживается? скобки при generate for использовать нельзя, имя генерируется автоматически. никакого нарушения стандарта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 19 ноября, 2010 Опубликовано 19 ноября, 2010 · Жалоба что именно не поддерживается? скобки при generate for использовать нельзя, имя генерируется автоматически. никакого нарушения стандарта. скобки-то, получается, можно. нельзя в них индекс genvar запускать в цикле. получается, что вот так: generate genvar i; for(i = 0; i < DAT_BYTES; i = i + 1) begin : dq_gen dq_8 dq_8_inst[ some_other_index ](...); end endgenerate должно быть разрешено тогда generate должен сгенерировать dq_8 dq_gen[0].dq_8_inst[ some_other_index ](...); ... dq_8 dq_gen[DAT_BYTES-1].dq_8_inst[ some_other_index ](...); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 ноября, 2010 Опубликовано 19 ноября, 2010 · Жалоба скобки-то, получается, можно. нельзя в них индекс genvar запускать в цикле. получается, что вот так: some_other_index должен быть диапазоном (а не индексом), определенным на этапе сборки, а не genvar или другой вычисляемой переменной. В вопросе автора это не так. 2 MAXvaLL перед тем как шашкой махать (кричать что ква плохой), надо разобраться в вопросе (стандарте) %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MAXvaLL 0 19 ноября, 2010 Опубликовано 19 ноября, 2010 · Жалоба что именно не поддерживается? скобки при generate for использовать нельзя, имя генерируется автоматически. никакого нарушения стандарта. Можно! но не так как предлагал я, а как предложил CaPpuCcino, с учетом замечания des00 generate-for тут непричем просто попробуйте создать группу модулей без for и без generate. ... DFF dff_group [7:0] ( .d(1), .clk(clk1_wire), .q() ); ... Результат: Error (10253): Verilog HDL Module Instantiation error at data_path_64.v(43): cannot elaborate array of instances because the declaration for the instantiated module has not been analyzed some_other_index должен быть диапазоном (а не индексом), определенным на этапе сборки, а не genvar или другой вычисляемой переменной. В вопросе автора это не так. 2 MAXvaLL перед тем как шашкой махать (кричать что ква плохой), надо разобраться в вопросе (стандарте) %) Тут вы правы, это некорректный способ (первый из тех что я предлагал), и я это уже понял :) А тут вы не правы! В вопросе я разобрался - ква-ква плохой! :maniac: См. выше... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться