Перейти к содержанию
    

Индексная адресация в массиве - как правильно описать ?

Прошу подсказать:

хочу сделать так

 

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 выбирать нужный регистр ? или есть более простые конструкции ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую! 

27 minutes ago, Nagisa said:

...

те у меня есть массив регистров из которых составляется адрес pre_addr
номер регистра я хочу выбирать на основании hi_addr

..

Ну так почти  так же  как вы и написали, только индексы правильно местами поставить  и нет необходимости  указывать первый (пакованный) индекс  если  вы хотите  все 13 бит  использовать  из этого регистра. 

wire [23:0] pre_addr = {reg_mem[hi_addr],DA_IN[11:1]};

Успехов!  Rob. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дабы не плодить темы про индексы спрошу снова

вот у меня массив

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 значений

что я делаю не так ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 hours ago, Nagisa said:

вот у меня массив


reg    [12:0]    pre_reg_az_mem[2:0];    

те это 8 регистров по 13bit каждый - всё верно ?

не верно. стандарт почитайте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

отвечаю самому себе

это 3 регистра а не 8   - те в индексе идет перечисление а не диапазон бит

reg    [12:0]    pre_reg_az_mem[2:0];

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...