system-verilog - 实例和接口的索引数组
问题描述
我有一系列接口。我知道实例和接口数组不像可以用变量索引的普通数组,这里我们必须用常量(或使用生成块)索引,这正是问题所在。
我正在使用生成块来存储主机根据提供的地址向其发送数据包的目标从机 id。这里 m_ahb 是主机接口数组。我还存储了目标从站 ID,即,对于主站 0,目标 ID 在 dest_slave[0] 中,对于主站 1,它在 dest_slave[1] 中,依此类推..
到这里一切都很好。
然后,对于主设备 0,我使用 dest_slave[0] 值来索引从接口数组 (s_ahb),并选择相应的目标从接口来探测信号并在断言中使用它。但是现在我收到错误“实例数组中的非常量数组索引”。
任何有关此的帮助/建议将不胜感激。谢谢你。
int dest_slave[NUM_MASTERS];
generate
for (genvar i = 0; i < NUM_MASTERS; i++) begin
always_ff @(posedge clk, negedge resetn) begin
if (m_ahb[i].haddr >= 'h0000_0000 && m_ahb[i].haddr <= 'h0000_ffff) dest_slave[i] = 0;
if (m_ahb[i].haddr >= 'h1000_0000 && m_ahb[i].haddr <= 'h1000_ffff) dest_slave[i] = 1;
if (m_ahb[i].haddr >= 'h4000_0000 && m_ahb[i].haddr <= 'h4000_ffff) dest_slave[i] = 2;
end
end
endgenerate
generate
for (genvar i = 0; i < NUM_MASTERS; i++) begin
assert property my_proprty(m_ahb[i].hburst,s_ahb[dest_slave[i]]].hburst); //this line creates error it is not liking s_ahb[dest_slave[i]]
end
endgenerate
解决方案
我的猜测是s_ahb
模块实例或非虚拟接口实例。这些类型的阵列路径无法动态访问。您可以在逻辑中创建以分离探测和映射。
int dest_slave[NUM_MASTERS];
int slave_hburst_val[NUM_MASTERS]; // <- change data type as needed
generate
for (genvar i = 0; i < NUM_MASTERS; i++) begin
always_ff @(posedge clk, negedge resetn) begin
if (m_ahb[i].haddr >= 'h0000_0000 && m_ahb[i].haddr <= 'h0000_ffff) dest_slave[i] = 0;
if (m_ahb[i].haddr >= 'h1000_0000 && m_ahb[i].haddr <= 'h1000_ffff) dest_slave[i] = 1;
if (m_ahb[i].haddr >= 'h4000_0000 && m_ahb[i].haddr <= 'h4000_ffff) dest_slave[i] = 2;
end
assign slave_hburst_val[i] = s_ahb[i].hburst; // intermediate assignment
assert property my_proprty( m_ahb[i].hburst, slave_hburst_val[ dest_slave[i] ] );
end
endgenerate
仅供参考:您的原始代码有一个额外的]
.s_ahb[dest_slave[i]]].hburst
推荐阅读
- html - 引导轮播的问题
- powershell - 如何使用 New-MgGroupOwnerByRef / Microsoft Graph PowerShell 模块 1.1.0 添加组所有者?
- azure - Office 365:将 Azure 应用程序限制为一组用户
- sql - Oracle中至少有两个大写和两个小写字母的密码正则表达式
- c# - 类似辐射的终端系统 = 匹配字符串中的每个字符
- reactjs - ReactJS 钩子。TypeError: Object(...) 不是函数
- nestjs - 如何让 websockets 与 NestJS 一起工作
- swift - 这意味着什么:“线程 1:”-[First_App.ProximitySensorViewControllerproximityChanged:]:无法识别的选择器发送到实例 0x14d707940“”
- java - 无法创建 HttpSolrClient
- php - Laravel - 将 DB::raw 的结果转换为字符串数组?