写这篇文章在于自己犯了一个低级语法错误,而这个地方,自己竟然一直都是记错了
自己犯错的地方在于:
// 错误写法 (Illegal Syntax) cfg.fdi_cfg.configure_protocol( supported_protocol = svt_ucie_types::STREAMING, // 报错:这里不能用等号 supported_protocol_flit_fmt = svt_ucie_types::PCIE_256B_FLIT_MODE, stream_id = svt_ucie_types::STACK_0_STREAMING_PROTOCOL );SystemVerilog函数中按关键字进行参数赋值时,是偏硬件语言的,和c,python这些语言是不同的,不是用等号进行赋值。
正确的赋值写法如下:
// 想象你在拨号或者连线,而不是简单的赋值 cfg.fdi_cfg.configure_protocol( .supported_protocol (svt_ucie_types::STREAMING), .supported_protocol_flit_fmt (svt_ucie_types::PCIE_256B_FLIT_MODE), // 这里根据 Format 6 选 256B .stream_id (svt_ucie_types::STACK_0_STREAMING_PROTOCOL) );这和module例化时,信号的连接是类似的。
在绿皮书中,也有此情况的相关写法示例,可能之前自己更多用的是位置传参。所以这种写法和其他编程语言的写法混淆了。