首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SystemVerilog中正确地转换数组?

如何在SystemVerilog中正确地转换数组?
EN

Stack Overflow用户
提问于 2014-04-24 17:16:15
回答 2查看 7.8K关注 0票数 1

SystemVerilog中用于数组和结构的位流转换似乎不太安全。

例如,只有在运行时(这可能是模拟的几个小时)才能捕捉到以下抛出问题:

代码语言:javascript
复制
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游乐场上的示例代码:http://www.edaplayground.com/x/2tp

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-25 19:41:28

与$cast类似,在运行时由用户检查其兼容性

代码语言:javascript
复制
if ( $bits(bit_queue) == $bits(logic_array) )
  logic_array = logic_array_t'(bit_queue);
else
  $error("sizes do not match");

对于涉及动态大小变量的强制转换,如果没有可能的数组大小将产生有效的赋值,则可以获得编译时错误,但如果存在可能的大小,则在发生强制转换之前不能执行该检查,因为大小会一直更改到转换发生时为止。

票数 2
EN

Stack Overflow用户

发布于 2014-04-24 20:10:19

因为您在RHS上使用了一个队列(意味着可变大小),所以我认为编译器不能静态地检查这个队列(因为它没有计算for循环)。请注意,如果您将typedef更改为固定大小的解压缩数组>5项,则会得到编译时错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23275575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档