quartus 11.0 综合一段代码时莫名其妙的出现下面这种问题,弹出一个对话框,说出现了内部错误,然后综合无法进行下去,同样的代码在Quartus 9.0下没有问题。百度谷歌竟然都找不到对应的解决方案,网上说删除db,increasement_db文件夹啥的都没用。
最后发现应该是代码的问题,代码中定义了一个存储器类型的ram,除了正常的按字读写,还有按位读写的操作,问题就在这个按位读写上,存储器类型不能按位操作,
错误的代码类似下面的样子
reg[7:0] buffer[127:0];
reg db;
reg[7:0] data;
buffer[byteAddress][bitAddress]<=db;//有问题,不能按位操作,一定要按位操作,可以先将原来的数读出来存入一个reg中,将对应bit修改后再写回去,读也是类似思路
buffer[byteAddress]<=data;//正确
修改按位操作的代码之后就不会报错了
</pre><p></p><p></p><pre name="code" class="plain">Internal Error: Sub-system: VRFX, File: /quartus/synth/vrfx/verific/verilog/veriname_elab.cpp, Line: 846
indices->Size() == 1
Stack Trace:
0x1689ee: VRFX_ELABORATOR::operator= + 0x9ede (synth_vrfx)
0x1678cb: VRFX_ELABORATOR::operator= + 0x8dbb (synth_vrfx)
0x18deae: VRFX_ELABORATOR::operator= + 0x2f39e (synth_vrfx)
0x1900c5: VRFX_ELABORATOR::operator= + 0x315b5 (synth_vrfx)
0x182aee: VRFX_ELABORATOR::operator= + 0x23fde (synth_vrfx)
0x190ee2: VRFX_ELABORATOR::operator= + 0x323d2 (synth_vrfx)
0x191d3a: VRFX_ELABORATOR::operator= + 0x3322a (synth_vrfx)
0x1900c5: VRFX_ELABORATOR::operator= + 0x315b5 (synth_vrfx)
0x190ad6: VRFX_ELABORATOR::operator= + 0x31fc6 (synth_vrfx)
0x190b85: VRFX_ELABORATOR::operator= + 0x32075 (synth_vrfx)
0x18e936: VRFX_ELABORATOR::operator= + 0x2fe26 (synth_vrfx)
0x18c3fc: VRFX_ELABORATOR::operator= + 0x2d8ec (synth_vrfx)
0xe2f55: VRFX_ELABORATOR::elaborate + 0x90f15 (synth_vrfx)
0xe80e0: VRFX_ELABORATOR::elaborate + 0x960a0 (synth_vrfx)
0x57640: VRFX_ELABORATOR::elaborate + 0x5600 (synth_vrfx)
0x52105: VRFX_ELABORATOR::elaborate + 0xc5 (synth_vrfx)
0xc7e54: sgn_qic_helper + 0xbb6b4 (synth_sgn)
0xcb62f: sgn_qic_helper + 0xbee8f (synth_sgn)
0xcd3c0: sgn_qic_helper + 0xc0c20 (synth_sgn)
0x9edef: sgn_qic_helper + 0x9264f (synth_sgn)
0xa5c9f: sgn_qic_helper + 0x994ff (synth_sgn)
0xa2aa5: sgn_qic_helper + 0x96305 (synth_sgn)
0xa5cf3: sgn_qic_helper + 0x99553 (synth_sgn)
0xaa52c: sgn_qic_helper + 0x9dd8c (synth_sgn)
0xc4e9: sgn_qic_full + 0x159 (synth_sgn)
0x117eb: qexe_get_tcl_sub_option + 0x1dbb (comp_qexe)
0x14997: qexe_process_cmdline_arguments + 0x537 (comp_qexe)
0x14aa1: qexe_standard_main + 0xa1 (comp_qexe)
0x1928: msg_exe_fini + 0xf8 (CCL_MSG)
0x18cc: msg_exe_fini + 0x9c (CCL_MSG)
0x57b4: MEM_UTILS_CHUNK_ALLOC::chunk_malloc + 0x194 (ccl_mem)
0x2f084: msg_exe_main + 0x74 (CCL_MSG)
0x159ec: BaseThreadInitThunk + 0xc (kernel32)
0x2c540: RtlUserThreadStart + 0x20 (ntdll)
End-trace
Quartus II 64-Bit Version 11.0 Build 208 07/03/2011 SJ Full Version
Service Pack Installed: 1