typedef struct {
bit y;
bit x;
} t_my_unpkd_struct;
t_my_unpkd_struct a[1:0];
bit [1:0] bb[1:0];
assign { >> {a} } = { << t_my_unpkd_struct {bb} };
以上代码无法编译 - 我做错了什么?我不能将结构用作切片说明符吗?
顺便说一句,我的目的是得到:a[0].x = bb[1][0]
a[0].y = bb[1][1]
a[1].x = bb[0][0]
a[1].y = bb[0][1]
答案 0 :(得分:2)
制作struct
packed
并将{ >> {a} }
替换为a
:
typedef struct packed {
bit y;
bit x;
} t_my_unpkd_struct;
t_my_unpkd_struct a[1:0];
bit [1:0] bb[1:0];
assign a = { << t_my_unpkd_struct {bb} };
简单的试验台:
bit clk; always #5ns clk++;
default clocking cb @(posedge clk);
endclocking
initial begin
repeat(20) begin
@(negedge clk);
void'(randomize(bb));
end
#10ns;
$finish(2);
end
assert property (a[0].x == bb[1][0]);
assert property (a[0].y == bb[1][1]);
assert property (a[1].x == bb[0][0]);
assert property (a[1].y == bb[0][1]);
更新: 以下适用于解压缩的结构:
assign a = { << 2 {bb} };
或
always_comb { << 2 {a} } = { << t_my_unpkd_struct {bb} };