Nagisa 0 9 мая, 2021 Опубликовано 9 мая, 2021 · Жалоба Прошу подсказать: хочу сделать так reg [12:0] reg_az_mem[3:0]; // массив регистров мапирования wire [3:0] hi_az_addr = QBUS_ADDR[15:12]; wire [23:0] pre_addr = {reg_mem[12:0][hi_addr],DA_IN[11:1]}; те у меня есть массив регистров из которых составляется адрес pre_addr номер регистра я хочу выбирать на основании hi_addr как правильно описать данную конструкцию ? сделать always-case где по hi_addr выбирать нужный регистр ? или есть более простые конструкции ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 9 мая, 2021 Опубликовано 9 мая, 2021 · Жалоба Приветствую! 27 minutes ago, Nagisa said: ... те у меня есть массив регистров из которых составляется адрес pre_addr номер регистра я хочу выбирать на основании hi_addr .. Ну так почти так же как вы и написали, только индексы правильно местами поставить и нет необходимости указывать первый (пакованный) индекс если вы хотите все 13 бит использовать из этого регистра. wire [23:0] pre_addr = {reg_mem[hi_addr],DA_IN[11:1]}; Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nagisa 0 9 мая, 2021 Опубликовано 9 мая, 2021 · Жалоба Cпасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nagisa 0 29 июня, 2021 Опубликовано 29 июня, 2021 · Жалоба дабы не плодить темы про индексы спрошу снова вот у меня массив reg [12:0] pre_reg_az_mem[2:0]; те это 8 регистров по 13bit каждый - всё верно ? соответственно в кейсе хочу занести туда данные always @ * begin case (SMK_MODE) 4'b0111: // Start - используется для запуска, пересылки данных на БК10 и RAM-BIOS'ом (он - всегда в 0-й странице); begin pre_reg_az_mem[3'd7]<=13'o112; pre_reg_az_mem[3'd6]<=13'o112; pre_reg_az_mem[3'd5]<={6'b000001,SMK_PAGE,3'd1}; // 6+4+3=13bit pre_reg_az_mem[3'd4]<={6'b000001,SMK_PAGE,3'd0}; но получаю матюг: Quote Error (10251): Verilog HDL error at mpi_mapper.v(402): index 7 cannot fall outside the declared range [2:0] for dimension 0 of array "pre_reg_az_mem" методом тыка обнаружил что 0 1 2 - прокатывают, а 3 уже за пределами хотя 3бита = 8 значений что я делаю не так ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 30 июня, 2021 Опубликовано 30 июня, 2021 · Жалоба 8 hours ago, Nagisa said: вот у меня массив reg [12:0] pre_reg_az_mem[2:0]; те это 8 регистров по 13bit каждый - всё верно ? не верно. стандарт почитайте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nagisa 0 30 июня, 2021 Опубликовано 30 июня, 2021 · Жалоба отвечаю самому себе это 3 регистра а не 8 - те в индексе идет перечисление а не диапазон бит reg [12:0] pre_reg_az_mem[2:0]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 30 июня, 2021 Опубликовано 30 июня, 2021 · Жалоба Можно объявить как reg [12:0] pre_reg_az_mem [8]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться