Какова цель padding_width в verilog? - PullRequest
0 голосов
/ 15 июня 2019

Какова цель этой следующей строки verilog:

{(PADDING_WIDTH+1){int_dat_b_reg[ADC_DATA_WIDTH-1]}}, ~int_dat_b_reg[ADC_DATA_WIDTH-2:0]

Зная, что:

padding_width = 2, ADC_DATA_WIDTH=14

Вы можете найти полную программу по этой ссылке: https://github.com/pavel-demin/red-pitaya-notes/blob/master/cores/axis_red_pitaya_adc_v2_0/axis_red_pitaya_adc.v

1 Ответ

0 голосов
/ 15 июня 2019

Этот код принимает дополнение как int_dat_a_reg, так и int_dat_b_reg, которые являются 14-битными значениями, и расширяет их до 16-битных значений.Затем объединяем их в 32-битный результат.Предполагается, что переменные подписаны.Этот код можно было бы упростить, если бы вы сначала объявили переменные как подписанные и присвоили 16-битные переменные со знаком.

В SystemVerilog это было бы еще проще с использованием приведения.

typedef bit signed [AXIS_TDATA_WIDTH/2:0] HALF_WIDTH;
assign m_axis_tdata = {
   ~ HALF_WIDTH'(int_dat_a_reg), 
   ~ HALF_WIDTH'(int_dat_b_reg) };
...