Этот код принимает дополнение как 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) };