其實之前就有寫過verilog了 但是之前都沒有認真去看verilog的語法
就是只要可以work就可以了 所以現在還有一大堆語法都不熟
雖然說基本的語法都會 但是只限於寫正常module 但是像testbench這種就完全不行
現在我就來好好看看這些testbench的東西吧
首先我必須知道要去哪裡找doucment來看
我上網找了很久總算知道要找了(其實網路上的文件一大堆 但是我習慣看最官方的)
其實很簡單 去modelsim的網站找user manual來看最好
我用的是modelsim SE 所以就用modelsim SE User's Manual
網址在這裡http://portal.model.com/modelsim/resources/references/modelsim_se_user.pdf
好就從`timescale開始看吧
其實我發現在User's Manual寫得很好
重點就是每一個檔案都要有`timescale 否則就會出現compile error等等的問題
2009年10月5日 星期一
2009年10月4日 星期日
ffmpeg中的禁用function
在ffmpeg中不能使用一些特定的function如printf malloc free等function
當用這些function的時候 compile的時候後跳出錯誤的訊息
我一直覺得超神奇的 ffmpeg居然可以限制某些可以compile 某些不行
會想找這個是因為今天我想用strcat跟sprintf的時候 居然有出現了compile error
我就覺得我一定要知道是為什麼
還蠻好找的 就在(ffmpeg top)/libavutil/internal.h中
他先將某給不想給別用的function #undef
接者不想給別人用的function定義成一個很長的symbol(只能一個)
compile的時候就會因為找不到這個symbol 而印出這個symbol
但這時我們就會就將這個symbol當成error message
這樣就可以控制某些function不能用了
但是這個的前提必須要檔案有include到上面這個internal.h
如果沒有include 一樣是沒有用的
當用這些function的時候 compile的時候後跳出錯誤的訊息
我一直覺得超神奇的 ffmpeg居然可以限制某些可以compile 某些不行
會想找這個是因為今天我想用strcat跟sprintf的時候 居然有出現了compile error
我就覺得我一定要知道是為什麼
還蠻好找的 就在(ffmpeg top)/libavutil/internal.h中
他先將某給不想給別用的function #undef
接者不想給別人用的function定義成一個很長的symbol(只能一個)
compile的時候就會因為找不到這個symbol 而印出這個symbol
但這時我們就會就將這個symbol當成error message
這樣就可以控制某些function不能用了
但是這個的前提必須要檔案有include到上面這個internal.h
如果沒有include 一樣是沒有用的
2009年9月22日 星期二
在netbeans中使用opencv的 library
最近想來用opencv來寫一些cv的東西
一開始就是先灌opencv到ubuntu中
就直接用ubuntu的套件管理灌啦
選的是libcv-dev就可以了
他會自動灌libcv1, libhighgui1, libcvaux1,libcvauz-dev, libhighgui-dev...等的
這樣其實就可以用了 真方便
我為了看document來安裝了opencv-doc (不過證明其實可以不用 有更好用的)
那好用的document在哪裡勒
http://opencv.willowgarage.com/documentation/index.html
這個是在opencv的wiki上面的document 好用的地方是在可以搜尋
接下來是內容是要設定如何在netbeans中如何設定才能夠方便的使用
其實我有看了網路上的一篇教學
http://rorasa.wordpress.com/2009/08/19/opencv-with-netbeans-ide/
但是這篇有很多步驟我都沒做就可以用了
我從第三步開始做的 是要用code assistance的
但是第三步其實不用做 我沒又設定就可以用了 我猜有可能是因為ubuntu設定在default的位置
第四步要設定compile的include path用的
project properties中的Build的C++ Compiler中的Include Directories
我設定成/usr/include/opencv
接下來是第5步 要設定link用的library的路徑
我的設定方法很爛 直接加在additional options上面(應該有更好寫法)
project preperties中的Build中的Linker中的additional options
加上以下這四個就可以了
-lm -lcv -lhighgui -lcvaux
這樣就完成了 就可以在ubuntu底下的netbeans中用opencv了
一開始就是先灌opencv到ubuntu中
就直接用ubuntu的套件管理灌啦
選的是libcv-dev就可以了
他會自動灌libcv1, libhighgui1, libcvaux1,libcvauz-dev, libhighgui-dev...等的
這樣其實就可以用了 真方便
我為了看document來安裝了opencv-doc (不過證明其實可以不用 有更好用的)
那好用的document在哪裡勒
http://opencv.willowgarage.com/documentation/index.html
這個是在opencv的wiki上面的document 好用的地方是在可以搜尋
接下來是內容是要設定如何在netbeans中如何設定才能夠方便的使用
其實我有看了網路上的一篇教學
http://rorasa.wordpress.com/2009/08/19/opencv-with-netbeans-ide/
但是這篇有很多步驟我都沒做就可以用了
我從第三步開始做的 是要用code assistance的
但是第三步其實不用做 我沒又設定就可以用了 我猜有可能是因為ubuntu設定在default的位置
第四步要設定compile的include path用的
project properties中的Build的C++ Compiler中的Include Directories
我設定成/usr/include/opencv
接下來是第5步 要設定link用的library的路徑
我的設定方法很爛 直接加在additional options上面(應該有更好寫法)
project preperties中的Build中的Linker中的additional options
加上以下這四個就可以了
-lm -lcv -lhighgui -lcvaux
這樣就完成了 就可以在ubuntu底下的netbeans中用opencv了
2009年9月20日 星期日
用python分析ffmpeg的log
今天想將之前跑h.264產生的log來作一些處理來得到我想要的資訊
想當然的 我一開始會需要去看document 因為我從來就不會去記得function的名稱
結果今天我發現python的網站怪怪的 連不太上
我就想ubuntu裡面應該有python的document
就發現是要安裝一個套件python2.6-doc才可以
安裝好之後 就會發現/usr/share/doc裡面多一個python2.6-doc這個資料夾
裡面的html資料夾 就是平常會在網站上看到的文件
也可以從/usr/share/doc/python2.6/html/是一樣的地方(這裡才是真正的地方 剛剛那裡是symbolic link)
這樣我就可以開始parse我之前跑出來的log擋了
我主要用的東西是regular expression相關的module
這裡比較重要的是可以先做出一個regular expression的object
然後在用re的object來做match會產生match object
在match的object中會有很多相關的資訊可以利用
大致上就是這些
還有就是python現在已經沒有atoi()的function 用int()就可以完全取代了
想當然的 我一開始會需要去看document 因為我從來就不會去記得function的名稱
結果今天我發現python的網站怪怪的 連不太上
我就想ubuntu裡面應該有python的document
就發現是要安裝一個套件python2.6-doc才可以
安裝好之後 就會發現/usr/share/doc裡面多一個python2.6-doc這個資料夾
裡面的html資料夾 就是平常會在網站上看到的文件
也可以從/usr/share/doc/python2.6/html/是一樣的地方(這裡才是真正的地方 剛剛那裡是symbolic link)
這樣我就可以開始parse我之前跑出來的log擋了
我主要用的東西是regular expression相關的module
這裡比較重要的是可以先做出一個regular expression的object
然後在用re的object來做match會產生match object
在match的object中會有很多相關的資訊可以利用
大致上就是這些
還有就是python現在已經沒有atoi()的function 用int()就可以完全取代了
h264 in ffmpeg deblocking filter survey
之前我已經確定說ffmpeg是以一個一個macroblock的形式去作inverse transform,prediction及deblocking filter
雖然說這跟standard寫得順序似乎有點出入
standard中寫是順序是要decode完一個完整frame的時候 才會一口氣做完deblocking filter
這裡就浮現了一個問題 就是每個macroblock都有可能會作intra prediction的動作(好 standard中寫只有I跟SI picture)
那在decode現在的macroblock會需要附近已經decode出來的macroblcok
那這些macroblock究竟是已經做完deblock filter還是還沒有做的勒
我看了standard發現這些時還沒有進行deblocking filter的macroblock
這時候就會發現ffmpeg的h.264的code一定有在這個地方動手腳 可能是將還沒deblocking的macroblock不知道存在哪裡
不然要怎麼reference 不過這裡我之後再看
接下來我在看standrad中luma在boundary filtering strength小於4的時候的function
基本上做的事是跟h264_loop_filter_luma_c一樣 但是裡面的判斷式 跟standard中寫得並沒有完全一樣
我想一定是因為ffmpeg為了加速改寫了一大堆的東西 不過還好的是ffmpeg中的變數名稱還認得出來
不過看的話可能要在花點時間
還有就是小記一下h264_loop_filter_luma_c是一次處理16條6個byte的內容
另外我有沿者filter_mb來開始看code
發現其實要看的code其實沒有很多 有很多部份是跟mbaff 就查一下這是什麼吧
這好像是有field的時候才會需要的東西 去除掉這些東西的話
其實要看的code就沒這麼多了
雖然說這跟standard寫得順序似乎有點出入
standard中寫是順序是要decode完一個完整frame的時候 才會一口氣做完deblocking filter
這裡就浮現了一個問題 就是每個macroblock都有可能會作intra prediction的動作(好 standard中寫只有I跟SI picture)
那在decode現在的macroblock會需要附近已經decode出來的macroblcok
那這些macroblock究竟是已經做完deblock filter還是還沒有做的勒
我看了standard發現這些時還沒有進行deblocking filter的macroblock
這時候就會發現ffmpeg的h.264的code一定有在這個地方動手腳 可能是將還沒deblocking的macroblock不知道存在哪裡
不然要怎麼reference 不過這裡我之後再看
接下來我在看standrad中luma在boundary filtering strength小於4的時候的function
基本上做的事是跟h264_loop_filter_luma_c一樣 但是裡面的判斷式 跟standard中寫得並沒有完全一樣
我想一定是因為ffmpeg為了加速改寫了一大堆的東西 不過還好的是ffmpeg中的變數名稱還認得出來
不過看的話可能要在花點時間
還有就是小記一下h264_loop_filter_luma_c是一次處理16條6個byte的內容
另外我有沿者filter_mb來開始看code
發現其實要看的code其實沒有很多 有很多部份是跟mbaff 就查一下這是什麼吧
這好像是有field的時候才會需要的東西 去除掉這些東西的話
其實要看的code就沒這麼多了
2009年9月19日 星期六
virtualbox 3.0.6的小bug
其實我不知道這是不是這一版才有的bug
就是我現在想將網路設定成bridge adapter
我就使用virtualbox中的第一張網路卡設定成Bridged adapter
結果居然是偶爾才可以用 我本來以為是我們dhcp server的問題
結果看了很久才發現是virtualbox虛擬網卡的問題
我用預設的網路卡PCnet-FAST III(我之前在3.0.0就發現有問題)
這張網卡就是偶爾才連的上
結果我就換另一張網卡 Intel PRO/1000 MT Desktop 就一切正常了
所以我想以後virtualbox網路有問題的時候
可以先換換虛擬網卡 說不定問題就解決了
就是我現在想將網路設定成bridge adapter
我就使用virtualbox中的第一張網路卡設定成Bridged adapter
結果居然是偶爾才可以用 我本來以為是我們dhcp server的問題
結果看了很久才發現是virtualbox虛擬網卡的問題
我用預設的網路卡PCnet-FAST III(我之前在3.0.0就發現有問題)
這張網卡就是偶爾才連的上
結果我就換另一張網卡 Intel PRO/1000 MT Desktop 就一切正常了
所以我想以後virtualbox網路有問題的時候
可以先換換虛擬網卡 說不定問題就解決了
2009年9月18日 星期五
h.264在ffmpeg中 deblocking fileter的實做
我之前花了點時間看了h.264目前可以拿到的standard
我就仔細的看了deblocking filter實做部份的內容
應該是在8.7的部份 大致上跟我在wiki上面的deblocking filter paper是一樣的
但在這裡我看到驚人的東西
standard上面定義的deblocking filter執行時間 跟我自己在ffmpeg中不一樣
我在standard中看到的是在decode完一個frame後才對整張frame的一個一個macroblock作deblocking fileter
但是在ffmpeg中好像不是這樣
我看到的是他是在decode一個一個macroblock的時候 順便作deblock filter
我又仔細的看了一遍 並且用debugger設了一堆的breakpoint來確定執行的順序
沒錯真的一個一個macroblock這樣做
但是我有去看jm(h.264的reference software)了
發現的作法是跟standard寫得一模一樣 但是如果是這樣的話 就會比較好加速
不過這裡我就又不懂了 如果這樣做的話那麼在intra prediction的時候的macroblock 不就是沒有經過deblocking的macroblock
這樣不會是錯的嗎
不然我會因為在傳資料上花非常多時間
我就仔細的看了deblocking filter實做部份的內容
應該是在8.7的部份 大致上跟我在wiki上面的deblocking filter paper是一樣的
但在這裡我看到驚人的東西
standard上面定義的deblocking filter執行時間 跟我自己在ffmpeg中不一樣
我在standard中看到的是在decode完一個frame後才對整張frame的一個一個macroblock作deblocking fileter
但是在ffmpeg中好像不是這樣
我看到的是他是在decode一個一個macroblock的時候 順便作deblock filter
我又仔細的看了一遍 並且用debugger設了一堆的breakpoint來確定執行的順序
沒錯真的一個一個macroblock這樣做
但是我有去看jm(h.264的reference software)了
發現的作法是跟standard寫得一模一樣 但是如果是這樣的話 就會比較好加速
不過這裡我就又不懂了 如果這樣做的話那麼在intra prediction的時候的macroblock 不就是沒有經過deblocking的macroblock
這樣不會是錯的嗎
不然我會因為在傳資料上花非常多時間