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

SV: array assignment

Есть 2 сигнала счетчика на X,Y координату

wire [3-1:0] bar_x;
wire [4-1:0] bar_y;
wire            valid;

 

И есть матрица единичных стробов

 wire bar_mat [15:0][31:0];

 

Задача

- Передать валид в нужный элемент матрицы, остальные соответственно в нуле. Фактически нужен двумерный дешифратор.

 

Решение в лоб

integer x,y;
always_comb begin
    for (x=0;x<16;x++)
        for (y=0;y<32;y++)
            bar_mat[x][y] = 1'b0;
    bar_mat [bar_x][bar_y] = valid;
end

 

Но может быть в системе можно сделать как то покороче?

Покороче забить массив нулями без вызова цикла? Присвоить валид через нечто подобное VHDL'ной конструкции (5 =>valid,others=>'0'); ?

 

Спасибо за помощь

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


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

module main;
logic [3-1:0] bar_x;
logic [4-1:0] bar_y;
logic            valid;
logic bar_mat [15:0][31:0];
initial
  begin
    bar_x = 3; bar_y=5; valid=1;
    bar_mat = '{default:0};
    bar_mat [bar_x][bar_y] = valid;

    for (int x=0;x<16;x++)
      for (int y=0;y<32;y++)
          $display("bar_mat [%0d][%0d] = %b", x, y, bar_mat[x][y]);
    $finish;
  end
endmodule

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


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

Спасибо!

 

С default конструкцией лучше, но все равно хочется еще короче

 

Нашел еще красивое решение для одномерного дешифратора

http://www.asic-world.com/examples/systemv...og/decoder.html

 assign decoder_out = (enable) ? (1 << binary_in) : 16'b0;

 

Провернуть бы такое для двумерного :)

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


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

Провернуть бы такое для двумерного :)

В терминах верилога - это не массив, а вектор.

В терминах систем верилога это не неупакованный массив (как в вашем примере), а упакованный.

 

Сделайте себе упакованный массив и работайте как с вектором. будет

bar_mat = valid << {bar_x, bar_y};

 

PS. синтезироваться будет нормально только для размерности массивов 2^N, потом окна появятся

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


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

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

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

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

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

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

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

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

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

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