readline(fh,line)调用后的一行多长时间?

时间:2015-09-02 00:32:40

标签: json parsing vhdl xilinx-ise vivado

我在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]

由于来自kraigher的提示,更新了代码:

  

@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]

表达式如何超出范围?这条消息很奇怪。

是否有其他方法可以获得循环范围,具体取决于当前行的长度?

0 个答案:

没有答案