今天升上碩班一年級,開始練習寫verilog,然後老師給cic的比賽題目練習,雖然知道成大也有人寫,但是找不到資料阿~~~~
看了幾本verilog的書感覺都很不是好學,應該說上手跟c還是有所差別.....總之趁現在寫完這一題來打個心得......
裡面一定有很多錯誤,還有一些目前了解的心得.....看看就好
初試題目就寫了很久,這下該怎麼辦啊................
更慘的是看參考解答還看不懂最佳解答是怎麼寫得如此精簡,真是太強悍了.......
先介紹一下這一題的題目內容
給8*8的xy座標軸和3點座標,要求計算出3點座標連線成三角形內的整數座標值
正緣clk觸發、po==1 && busy==1時輸出、輸出順序由最低y值,x依序輸出。
題目交代:x1=x3,y1<y2<y3。 利用斜率公式做判斷。
(X3,X2)那一條是不是RIGHT還是LEFT有點忘了....不敢確定
用指令ncverilog testfixture.v triangle.v +access+r +FSDB 跑出來的結果終於通過了.........
我的作法是先把架構弄出來,輸出先用計數器把答案的值全部先自己給,因為每次只要一錯誤就會造成程式迴圈跑不完
答案自己給當然會對,接下來是判斷式和計算,當利用斜率做判斷式通過時xo和yo給值,之後確定給的值都對了之後再利用暫存輸出
但是後來發現暫存輸出不知道怎麼寫,所以改多寫一個always判斷只要變動就輸出。沒想到就過了.........
寫程式所花時間大概有超過30小時吧.....第二次寫真是麻煩呢............
其中是用nWave進行除錯,當初一直跑不完導致程式一直跑不動,所以才想到用先把答案全給之後再繼續寫
畢竟也要有波型才能debug阿..........
不過參考答案裡面的波型好像不太一樣?
參考答案真的非常厲害,除了行數少之外,所花時間也超少,看結果報告他的程式跑5個測試只花10000ns左右
我跑兩個就花了127000ns,差了超過10倍以上的時間,說實在我的程式只能符合這兩個測試
看了之後3個測試給的座標,我沒有信心可以跑過,畢竟在判斷式上面我總覺得有點bug
最後波型也過了就改用nLint做合成前的compile的測試
一堆錯誤........雖然是確定可以合成拉,但是老師要求要把錯誤都改掉,夭壽= =
我還要再想想怎麼消掉,主要是在判斷式那邊造成非常多的錯誤,912個...........
最後附上我的.v檔,雖然一點屁用都沒有,真正有參考價值的應該是參考解答吧= = triangle.v
以下是我做到現在碰到的問題,順便做個筆記
FAQ:
問0:nWave 開不了出現License的問題
A:經過學長的交叉測試,似乎是source的license有問題,複製好的.cshrc貼上或改license路徑,似乎是程式的license有互相衝突
問1:.fsdb因程式而結束不了而無法產生檔案
A:其實還是有寫到FSDB檔裡面,但nWave會顯示說波型太長無法開啟。可以在testfixture.v檔裡面加.VCD的語法產生.VCD的波型檔
雖然檔案會比較大....用nWave右下加入檔案有個filter改成*.vcd就可以開.vcd的波型檔了
其實後來測試fsdb還是開得起來= =
問2:快速刷新Reload nWave 波型
A:shift+L
問3:一些語法規則
A:always內不能有wire和assign的port,而兩個always不能改同一個reg資料,會造成衝突
所以通常另一個是放判斷吧?
問4:if(條件式),條件式可運算
A: 我用if(xx<=(cond2*(yy-y1)+x1) 可以過,應該可以。還可以多個判斷呢
問5:verilog、ncverilog不同?
A:我用verilog testfixture.v triangle.v語法和ncverilog testfixture.v triangle.v +access+r +FSDB
似乎好像會不一樣,雖然最後我是用NCVERILOG了,用verilog compile很快 ncverilog比較慢
但是ncverilog會過= =
問6:DEBUG心得
A: 這次碰到蠢事,當所有邏輯都對,但波型卻錯,最後發現原來是暫存器的bit數社的不夠,難怪一直數值錯誤...
問7:VERILOG 語法
A: 不能有小數和負數,要用別的方式去算,畢竟硬體合不出來。若有負值變成正值或錯誤數值。
還有這一題其實是考除法器,但我不知道怎麼用= = 硬體做不出除法器.......
除法基本上用位移,這題的參考解答是用查表斜率達到超快速解的目的
問8:合成的東東
A:.ddc合成後的電路圖文字資料 .sdf delay的資料給dft用 .sdc constraint file 合成指令
收工。
留言列表