novartis 0 November 14, 2024 Posted November 14, 2024 · Report post Есть структура и битовый вектор localparam C_MAX_MSG_REG_LEN = 512; reg [C_MAX_MSG_REG_LEN -1:0] msg_reg = 0; typedef struct { reg [255:0] field_1; reg [159:0] field_2; reg [31:0] field_3; } struct_msg; struct_msg msg; Хочу извлечь из msg_reg поля и засунуть в структуру: msg.field1 = msg_reg[255:0]; msg.field2 = msg_reg[415:256]; msg.field3 = msg_reg[447:416]; Таких структур много, у всех структур разный набор полей, длина полей у всех разная. Сидеть и считать смещения каждого поля не охота. Как это можно сделать быстрым и удобным способом? Написал такую функцию: function automatic struct_msg f_unpack_struct_msg_from_vec(input logic [C_MAX_MSG_REG_LEN-1:0] data); struct_msg ret; integer L = C_MAX_MSG_REG_LEN; integer d = 0; integer s = 0; s = s+d; d = 256; ret.field1 = data[L-s-1:L-s-d]; s = s+d; d = 160; ret.field1 = data[L-s-1:L-s-d]; s = s+d; d = 32; ret.field1 = data[L-s-1:L-s-d]; return ret; endfunction Квеста ругается: Range width must be constant expression Quote Share this post Link to post Share on other sites More sharing options...
_4afc_ 36 November 14, 2024 Posted November 14, 2024 · Report post 1 hour ago, novartis said: Квеста ругается: Range width must be constant expression переписать на что-то подобное: s = s+d; d = 256; ret.field1 = data[L-s-1 -:256]; 1 Quote Share this post Link to post Share on other sites More sharing options...
novartis 0 November 14, 2024 Posted November 14, 2024 · Report post 12 minutes ago, _4afc_ said: переписать на что-то подобное: s = s+d; d = 256; ret.field1 = data[L-s-1 -:256]; спасибо, так получилось Quote Share this post Link to post Share on other sites More sharing options...
yes 8 November 14, 2024 Posted November 14, 2024 · Report post на всякий случай Если структура packed typedef struct packed { и поля в ней переставить, чтобы как-то lsb соблюдалось ... field_3; ... ... field_1; то можно msg=msg_reg; или msg_reg=msg; Если размеры l-value r-value не совпадают, то лишние биты не будут использоватся, недостающие не поменяются Quote Share this post Link to post Share on other sites More sharing options...
dxp 109 November 15, 2024 Posted November 15, 2024 · Report post +1 за пакованную структуру. Описываете всё свои структуры как packed, и спокойно присваиваете им значение вашего "вектора" (в SV "вектор" называется пакованным массивом). Дальше пользуетесь полями структуры. Всё. Quote Share this post Link to post Share on other sites More sharing options...