Приведение битового потока в SystemVerilog для массивов и структур не кажется очень безопасным.
Например, следующая проблема с кастингом будет обнаружена только во время выполнения (а это может занять несколько часов в симуляции):
bit [31:0] bit_queue[$];
logic [31:0] logic_array[5];
for (int i = 0; i < 10; i++) begin
bit_queue[i] = $urandom;
end
if (catch_issue) begin
typedef logic [31:0] logic_array_t [5];
logic_array = logic_array_t'(bit_queue); // <-- ISSUE
end
Существует ли надлежащая «безопасная» процедура для приведения битового потока? Где какие-либо проблемы могут быть обнаружены во время компиляции или безопасно обработаны во время выполнения? Или язык сломан в этом случае?
Пример кода выше на EDA Playground: http://www.edaplayground.com/x/2tp