AnatolySh 0 12 декабря, 2019 Опубликовано 12 декабря, 2019 · Жалоба Всем добра Есть собственноручно написанный проект и тестбенч к нему. В проекте есть такие строки // states for monitor `define STATE_DIM_M 5 `define STATE_RNG_M (`STATE_DIM_M-1):0 `define CH_NUM 4 `define CH_RNG (`CH_NUM - 1):0 module monitor... reg access_rx_reg [`CH_RNG]; reg [`STATE_RNG_M] state; parameter ST_IDLE = `STATE_DIM_M'h0, ST_ACCESS_TX_START_0 = `STATE_DIM_M'h1, ST_ACCESS_TX_START_1 = `STATE_DIM_M'h2, ST_ACCESS_TX_START_2 = `STATE_DIM_M'h3, ST_ACCESS_TX_START_3 = `STATE_DIM_M'h4, ST_ACCESS_RX_START_0 = `STATE_DIM_M'h5, ST_ACCESS_RX_START_1 = `STATE_DIM_M'h6, ST_ACCESS_RX_START_2 = `STATE_DIM_M'h7, ST_ACCESS_RX_START_3 = `STATE_DIM_M'h8, ST_ACCESS_TX_0 = `STATE_DIM_M'h9, ST_ACCESS_TX_1 = `STATE_DIM_M'ha, ST_ACCESS_TX_2 = `STATE_DIM_M'hb, ST_ACCESS_TX_3 = `STATE_DIM_M'hc, ST_ACCESS_RX_0 = `STATE_DIM_M'hd, ST_ACCESS_RX_1 = `STATE_DIM_M'he, ST_ACCESS_RX_2 = `STATE_DIM_M'hf, ST_ACCESS_RX_3 = `STATE_DIM_M'h10, ST_DONE = `STATE_DIM_M'h11; В тестбенче tmain_m.sv же я хочу обратиться к регистру // attach main monitor module monitor mon_inst(.*); task process_monitor_state; input logic [`STATE_RNG_M] monitor_state_4_reset; forever @(posedge mc64M) case (monitor_state_4_reset) mon_inst.ST_ACCESS_RX_3, mon_inst.ST_ACCESS_RX_2, mon_inst.ST_ACCESS_RX_1, mon_inst.ST_ACCESS_RX_0: begin if (mon_inst.state == mon_inst.ST_IDLE) begin force mon_inst.access_rx_reg[monitor_state_4_reset - mon_inst.ST_ACCESS_RX_0] = 1'b1; end ModelSim SE-64 vlog 10.5 Compiler 2016.02 Feb 13 2016 по компиляции выдаёт: # ** Error: tmain_m.sv(1009): Illegal left-hand side in continuous assignment. ModelSim SE-64 vlog 10.6d Compiler 2018.02 Feb 24 2018 же выдаёт: # ** Warning: (vsim-12113) tmain_m.sv(1009): Force of a variable select having non-constant indices may produce unexpected results. Почему такие различия и что делать? Заранее спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 12 декабря, 2019 Опубликовано 12 декабря, 2019 · Жалоба наверное неконстантный индекс массива, о чем и пишет. Такое не засентизируется вроде. По крайней мере у меня и об этом везде пишут. Для этого есть трюки с индексацией Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 12 декабря, 2019 Опубликовано 12 декабря, 2019 · Жалоба Приветствую! 7 minutes ago, AnatolySh said: Почему такие различия и что делать? IMHO различия скорее всего потому что 10.5 раньше вообще не поддерживал force для variable index переменных. А в 10.6 такой функционал добавили. Но при этом есть риск - так как может быть в runtime выход за пределы корректного индекса для force не проверяется (например ваше выражение для индекса access_rx_reg неоднозначно, формально могут быть и отрицательные величины) о чем modelsim и предупреждает. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AnatolySh 0 18 декабря, 2019 Опубликовано 18 декабря, 2019 · Жалоба On 12/12/2019 at 3:29 PM, RobFPGA said: выражение для индекса access_rx_reg неоднозначно, формально могут быть и отрицательные величины Да, но при компиляции ModelSim видит, какие именно выражения для индекса я присваиваю, и мог бы ругаться именно при выходе за границы, а не на умозрительную возможность оных. В любом случае, спасибо вам за пояснения. On 12/12/2019 at 3:24 PM, new123 said: у меня и об этом везде пишут У вас - это где? On 12/12/2019 at 3:24 PM, new123 said: трюки с индексацией Расскажете? ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 18 декабря, 2019 Опубликовано 18 декабря, 2019 · Жалоба Приветствую! 17 minutes ago, AnatolySh said: Да, но при компиляции ModelSim видит, какие именно выражения для индекса я присваиваю, и мог бы ругаться именно при выходе за границы, а не на умозрительную возможность оных. В любом случае, спасибо вам за пояснения. А с чего вы взяли что при компиляции эти индексы известны? Модуль monitor и модуль tmain_m компилируются независимо. Вы не знаете какие значения реально имеют переменные mon_inst.ST_ACCESS_RX_0, ... пока при старте симуляции не слинкуется все в одно целое. Фактически при компиляции в tmain_m у вас видна ссылка на именованную переменную. А в каком модуле эта переменная реально будет находится зависит еще и от того что вы слинкуете по ссылке mon_inst Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AnatolySh 0 18 декабря, 2019 Опубликовано 18 декабря, 2019 · Жалоба Да, теперь понял: спасибо за пояснения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 18 декабря, 2019 Опубликовано 18 декабря, 2019 · Жалоба 4 hours ago, AnatolySh said: Расскажете? ) у меня в избранном ссылка, часто ее открываю, когда делаю массивы. Стараюсь делать их редко. https://stackoverflow.com/questions/18067571/indexing-vectors-and-arrays-with RobFPGA частенько тут на вопросы отвечает, как выкрутиться в динамической индексации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться