Jump to content

    
Sign in to follow this  
Nagisa

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

Recommended Posts

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

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

 

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

 

Share this post


Link to post
Share on other sites

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

27 minutes ago, Nagisa said:

...

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

..

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

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

Успехов!  Rob. 

Share this post


Link to post
Share on other sites

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

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

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

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

 

Share this post


Link to post
Share on other sites
8 hours ago, Nagisa said:

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


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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this