1

我正在将 Xilinx ISE 项目移植到 Quartus II。当我编译该项目时,Quartus 崩溃并出现错误:*** Fatal Error: Access Violation at 0X000007FE88160DE1. 所以我试图将错误缩小到一个最小的示例,这将引导我找到一个隐藏的 VHDL 错误或一个小示例,我可以将其发送给 Altera。

该项目使用 VHDL 数据结构(基本类型的向量记录的向量记录)来描述 SoC 设置。简化的结构如下所示:

SoFPGA System
o-DeviceInstances
| o-Device
|   o-Registers
|   | o-Bitfields
|   o-RegisterMappings
o-Busses

我想将完整的结构报告给综合日志,但如果消息文本已经打印到日志中,Quartus II 似乎会隐藏消息。

例子:

Info (10635): ... at pb.pkg.vhdl(1228): "DeviceInstance 1:" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1229): "  DeviceInstance: Mult32" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1230): "    Device: Mult32" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1234): "        0: OperandA0 Reg#=0 WR" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1241): "          0: FieldID=0 (OperandA)" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1234): "        1: OperandA1 Reg#=1 WR" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1234): "        2: OperandA2 Reg#=2 WR" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1234): "        3: OperandA3 Reg#=3 WR" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1234): "        4: OperandB0 Reg#=4 WR" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1241): "          0: FieldID=1 (OperandB)" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1234): "        5: OperandB1 Reg#=5 WR" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1234): "        6: OperandB2 Reg#=6 WR" (NOTE)
Info (10635): ... at pb.pkg.vhdl(1234): "        7: OperandB3 Reg#=7 WR" (NOTE)

每个 'Operand[A|B]' 只打印一次 'FieldID' 消息。在操作数 A1、A2、A3 和 B1、B2、B3 之后没有 FieldID 行。

因此,我尝试为salt每个报告行添加一个唯一编号 ( )。为此,我定义了一个共享变量并定义了一个salty在每个报告语句中增加盐的函数。

变量和函数:

shared variable salt : NATURAL := 0;

impure function salty return STRING is
begin
  salt := salt + 1;
  return INTEGER'image(salt);
end function;

用法:

report salty & "pb_CreateRegisterRO:" severity NOTE;

但不幸的是,咸味总是返回“0”。Quartus II 支持 VHDL'08 特性。我应该将共享变量实现为受保护类型并以 VHDL'08 模式编译它吗?

如何将所有报告语句行打印到综合报告中?


题外话:
有人有兴趣帮我找出 Quartus 崩溃的原因吗?我将项目剥离为 6 个 VHDL 文件。我认为这个问题是特定于 SO 问题的。接触

4

0 回答 0