6系列FPGA中使用塊RAM的心得(4)
調(diào)試過程中的一點(diǎn)小問題
生成IP核的調(diào)用之后,然后對(duì)其進(jìn)行例化,格式是
rrra YourInstanceName (
.clka(clka),
.addra(addra), // Bus [9 : 0]
.douta(douta)); // Bus [43 : 0]
然后調(diào)用sinplify,對(duì)其進(jìn)行綜合,結(jié)果很不順利。首先是synplify報(bào)不支持器件,才發(fā)現(xiàn)synplify 9.6.2是2008年的產(chǎn)品,比Spartan6器件還要老。更新到Synplify Pro D-2010.03之后,器件是支持了,但是一綜合就報(bào)錯(cuò)停止了,卻不提示有什么錯(cuò)誤。查看工程文件夾下面的.log和.srr文件,里面也是啥信息都沒給。沒辦法,只好切換會(huì)使用XST進(jìn)行綜合。這回能給出信息了:因?yàn)槔?8次,所以有28個(gè)錯(cuò)誤,全部提示ERROR:HDLCompilers:26 - f7.v line 49 unexpected token: rrra。
HDLCompilers:26這個(gè)錯(cuò)誤,一般情況下是把wire類型的值賦給了reg型的變量才提示的,但是仔細(xì)檢查了程序沒有發(fā)現(xiàn)有不對(duì)的類型聲明,非常納悶。思考了好久才發(fā)現(xiàn),問題竟然就出在IP調(diào)用的身上。原來,我在使用rrra ROM0(start,addr0,temp0);調(diào)用之后,對(duì)應(yīng)的douta它是一個(gè)端口,自然是wire類型的,而程序聲明中temp0是一個(gè)reg型的,用來傳遞參數(shù)時(shí)因?yàn)轭愋筒黄ヅ渥匀惶崾惧e(cuò)誤了。
這里也發(fā)現(xiàn)了在ISE中調(diào)用synplify進(jìn)行綜合的一個(gè)不足之處,就是如果源程序中如果有錯(cuò)誤的話,在直接調(diào)用synplify時(shí),并不給出錯(cuò)誤的具體信息,而是直接終止綜合;沒辦法還得使用XST點(diǎn)擊“check syntax”進(jìn)行程序的語法檢查,而在synplify環(huán)境下點(diǎn)擊“syntax check”一樣也能給出錯(cuò)誤信息。看來二者的接口還不是非常完善吧。
評(píng)論