解讀verilog代碼的一點(diǎn)經(jīng)驗
學(xué)習(xí)FPGA其實也不算久,開始的時候參考別人的代碼并不多,大多是自己寫的,那時候做時序邏輯多一些。參加了中嵌的培訓(xùn)班,一個多月的時間在熟悉ISE軟件的使用以及verilog語法方面下了苦功,也參考了不少書,算是為自己打下了比較好的基礎(chǔ)。因為那時候培訓(xùn)的方向是軟件無線電方面的,所以做了很多有關(guān)的模塊程序,之前的日志里也發(fā)表了很多,關(guān)鍵是一個興趣,感覺仿真后看到自己的一個個算法思想得到實現(xiàn)真有成就感。后來停了一段時間,因為實在沒有比較有意思的活干了。
本文引用地址:http://2s4d.com/article/268449.htm直到前段時間開始使用SP306的開發(fā)板,然后會參考它們的代碼,受益匪淺吧?,F(xiàn)在組長已經(jīng)給正活干了,跟的大項目我是基本都有所熟悉了,然后那個里面做總控的FPGA的代碼開始進(jìn)行總攻了,要把前輩們的代碼都消化了,然后更好的為下一代升級版的產(chǎn)品服務(wù)。這個看verilog程序估計是大家都比較頭疼的事,小的模塊都沒問題,大模塊大項目,有時候就比較難以入手了,因為HDL的設(shè)計是不同于軟件編程的,軟件其實無非一個大while或者再有一些中斷,大多是順序執(zhí)行的,慢慢一步一步往下走總會弄明白。HDL的并行性很強(qiáng),要是你按照軟件的思路來那肯定行不通,那么該怎么辦呢?我就班門弄斧說點(diǎn)自己的一點(diǎn)快速進(jìn)階的小竅門吧。
既然HDL設(shè)計是并行的,那么就只能各個擊破了。我的習(xí)慣是先抓幾個重要端口,比如時鐘(CLK)、復(fù)位(RESET)等出現(xiàn)頻率比較高的端口,把它先弄清楚,比如時鐘是什么頻率的?復(fù)位是高有效還是低有效?
然后呢,最好是對照原理圖來理解程序。這就需要你有一定功底的硬件常識了,一些常用器件的操作時序什么的一定要做到心中有數(shù),至少要知其一二吧,這樣在讀程序時才會達(dá)到事半功倍的效果。比例說你要先讀懂FPGA與AD芯片的程序,那么你先把AD的各個端口(如片選,讀寫,轉(zhuǎn)換,轉(zhuǎn)換完成中斷等端口)在verilog程序中出現(xiàn)的地方多做一下分析,比如我找CS信號,看看什么時候它拉低有效,那么你可以在Find in file窗口中輸入CS,然后ENTER,這樣ISE就會在底層的信息窗口中羅列出所有使用了CS信號的語句方便你的查找分析,你把每個出現(xiàn)CS的地方分析到了,那么你就明白verilog在硬件上是如何操作CS信號的。所有信號多分析完以后,我想你就明白了這個AD與FPGA的接口了。
讀懂verilog有時比較累,因為程序是別人寫的,你要讓別人牽著鼻子走也是難免的。關(guān)鍵是要有耐心,多分析,有條件可以問問高手(最好是代碼的作者)。
評論