基于verilog的FPGA編程經(jīng)驗總結
用了半個(gè)多月的ISE,幾乎全是自學(xué)起來(lái)的,碰到了很多很多讓人DT好久的小問(wèn)題,百度也百不到,后來(lái)還是都解決了,為了盡量方便以后的剛學(xué)ISE的童鞋不再因為一些小問(wèn)題而糾結,把這幾天的經(jīng)驗總結了一下。好了,廢話(huà)不多說(shuō),上料!
本文引用地址:http://dyxdggzs.com/article/201710/365670.htm1.用ISE仿真的時(shí)候.所用變量一定要初始化. ISE默認初始量為XXXXX, 而Quarters是默認為00000的, 其實(shí)實(shí)際上, 下到FPGA里后也是默認為0的,只是可以說(shuō)ISE嚴謹得令人DT吧.
比如說(shuō)用一個(gè)累加器, result = A+B+result ,必須保證在某一刻A, B, result都為定值時(shí), 之后的數據才不會(huì )一直為XXXXX;
2.所有的中間線(xiàn)(就是module間用來(lái)傳遞參數的信號)都要用wire定義一下. 這個(gè)ise一般會(huì )提醒的;
3.任何一個(gè)warning都是有用的;
4.debug時(shí)要多把中間變量設成輸出,然后查看仿真波形;
5.其實(shí),新版本還是比較好用的.雖然取消了test bench wave 功能. 但是最好學(xué)會(huì )編測試文件,后期比test bench wave好用, 而且貌似一旦測試信號太多,test bench wave就不顯示某些輸出了;
6. warning: Nod ....> is unconnected. 表明...>所在的模塊沒(méi)用被執行,一般是參數沒(méi)進(jìn)來(lái), 或者進(jìn)來(lái)的參數不對(XXXX之類(lèi))的原因引起的.
7.建立rom時(shí)候,Error: sinrom cant be resolved. 因為在把程序挪地方的時(shí)候,sinrom.ngc文件沒(méi)有一同拷過(guò)來(lái).
8.把XXXXX信號處理掉的一個(gè)方法可以是: 從信號中隨意選出一位 if (data[0] == 0) ....; else if (data[0] == 1).... else data = 0; 就可以把XXXX信號給清成0000了. 可以很好的解決1中仿真的問(wèn)題.
9.如果某一個(gè)不是時(shí)鐘的信號被當作周期信號來(lái)用的話(huà),就會(huì )出現 WARNING:Route:455 - CLK Net:trn_clk_OBUF may have excessive skew. because 0 CLK pins and 1 NON_CLK pins failed to route using a CLK template 不管也行.
10. 一開(kāi)始用FPGA時(shí)不要害怕,用ucf文件配好引腳,直接LOAD,先不用管什么區域約束,以后進(jìn)階了再學(xué). .
11.暫時(shí)就記得這些,以后再補充吧.
評論