我在VHDL中编写了一个JSON解析器。解析器核心使用两个嵌套循环:
1.循环所有线直到EOF
2.遍历每个char直到结束行
清除:它不是硬件解析器。解析器用于在合成时读取合成设置,以配置实例化的实体,如UART模块中的波特率。)
内循环如下所示:loopj : for j in CurrentLine.all'range loop
资料来源:JSON.pkg.vhdl
此代码适用于XST 14.7,iSim 14.7和GHDL,但不适用于Vivado。 Vivado不支持.all
。错误消息是这个:
错误:[Synth 8-27]访问类型取消引用不受支持[D:/git/GitHub/JSON-for-VHDL/vhdl/JSON.pkg.vhdl:293]
@Paebbles你有没有尝试过foo'range而不是foo.all'范围?我想我记得它应该含蓄地起作用。 - kraigher
我之前尝试过,但收到了错误。也许这个错误与另一个错误有关。现在它的工作。所以我当前的loopj行看起来像这样:
loopj : for j in CurrentLine'range loop
这条线在XST,iSim,GHDL和QuestaSim中运行良好,但Vivado仍有问题:
INFO:[Synth 8-638]合成模块'Boards2'[... / Boards2.vhdl:16]
错误:[Synth 8-278]表达式0超出范围[... / JSON.pkg.vhdl:293]
错误:[Synth 8-421]分配的rhs和lhs中的数组大小不匹配[... / Boards2.vhdl:20]
错误:[Synth 8-285]合成模块'Boards2'失败[... / Boards2.vhdl:16]
表达式如何超出范围?这条消息很奇怪。
是否有其他方法可以获得循环范围,具体取决于当前行的长度?