2011年4月28日 星期四

Simulate Armber on Mac OS

The Amber processor core is an ARM-compatible 32-bit RISC processor. The Amber core is fully compatible with the ARM® v2a instruction set architecture (ISA) and is therefore supported by the GNU toolset.
I would like to try run on my Mac Mini, so, I install Armber, tools and do some modification...

1. Download the Amber project from the Opencores Subversion server

$ mkdir ~/AmberInstallPath
$ cd ~/AmberInstallPath
$ svn --username YOUR_NAME -password PASSWORD co http://opencores.org/ocsvn/amber/amber/trunk

2. Install the GNU cross compiler

$ sudo port install arm-none-linux-gnueabi-gcc
$ sudo port install gawk
$ cd /opt/local/bin
$ sudo ln -s gawk awk
$ sudo ln -s arm-none-linux-gnueabi-gcc-2005q3 arm-none-linux-gnueabi-gcc

3. Install Icarus Verilog Simulator

$ sudo port install iverilog

4. Edit ~/.profile and add the following

$ export AMBER_BASE=~/AmberInstallPath/trunk
$ export AMBER_CROSSTOOL=arm-none-linux-gnueabi

5. Make scripts executable and create a run link

$ cd $AMBER_BASE
$ chmod +x hw/tools/*.sh sw/tools/*.sh
$ ln -s ../tools/run.sh hw/sim/run


6. Create $AMBER_BASE/hw/tools/runIV.patch by following

--- run.sh 2011-04-29 08:47:23.000000000 +0800
+++ runIV.sh 2011-04-29 09:14:21.000000000 +0800
@@ -46,12 +46,9 @@
AMBER_LOAD_MAIN_MEM=" "
AMBER_TIMEOUT=0
AMBER_LOG_FILE="tests.log"
-SET_G=0
SET_M=0
SET_D=0
SET_T=0
-SET_S=0
-SET_V=0
SET_A=0
SET_5=0

@@ -59,14 +56,11 @@ SET_5=0
# show program usage
show_usage() {
echo "Usage:"
- echo "run [-a] [-g] [-d] [-t] [-s] [-v]"
+ echo "run [-a] [-d] [-t]"
echo " -h : Help"
echo " -a : Run hardware tests (all tests in \$AMBER_BASE/hw/tests)"
- echo " -g : Use Modelsim GUI"
echo " -d : Create vcd file"
echo " -t : Create vcd file and terminate"
- echo " -s : Use Xilinx Spatran6 Libraries (slower sim)"
- echo " -v : Use Xilinx Virtex6 Libraries (slower sim)"
echo " -5 : Use Amber25 core instead of Amber23 core"
echo ""
exit
@@ -103,14 +97,8 @@ do
case $1 in
-a) SET_A=1 # all tests
shift ;;
- -s) SET_S=1 # Xilinx libs
- shift ;;
- -v) SET_V=1 # Xilinx libs
- shift ;;
-5) SET_5=1 # Xilinx libs
shift ;;
- -g) SET_G=1 # Bring up GUI
- shift ;;
-d) SET_D=1
DUMP_START=$2
shift 2;;
@@ -135,24 +123,7 @@ done
# Set comfiguration based on command-line options
#--------------------------------------------------------

-if [ $SET_G == 1 ]; then
- RUN_OPTIONS="-do cmd.do"
-else
- RUN_OPTIONS="${RUN_OPTIONS} -c -do run.do"
-fi
-
-if [ $SET_S == 1 ]; then
- FPGA="+define+XILINX_SPARTAN6_FPGA +define+XILINX_FPGA"
- RUN_OPTIONS="${RUN_OPTIONS} -t ps +notimingchecks -L unisims_ver -L secureip"
-else
- if [ $SET_V == 1 ]; then
- FPGA="+define+XILINX_VIRTEX6_FPGA +define+XILINX_FPGA"
- RUN_OPTIONS="${RUN_OPTIONS} -t ps +notimingchecks"
- else
- FPGA=" "
- fi
-fi
-
+RUN_OPTIONS="-f iverilog.f"

if [ $SET_D == 1 ]; then
AMBER_DUMP_VCD="+define+AMBER_DUMP_VCD +define+AMBER_DUMP_START=$DUMP_START"
@@ -173,13 +144,8 @@ else
fi

if [ $SET_A == 1 ]; then
- if [ $SET_S == 1 ]; then
- TECH="-s"
- elif [ $SET_V == 1 ]; then
- TECH="-v"
- else
- TECH=" "
- fi
+
+ TECH=" "

if [ $SET_5 == 1 ]; then
CORE="-5"
@@ -273,54 +239,42 @@ fi


#--------------------------------------------------------
-# Modelsim
+# iVerilog
#--------------------------------------------------------
-if [ $MAKE_STATUS == 0 ]; then
- if [ ! -d work ]; then
- vlib work
- fi
-
- if [ $? == 0 ]; then
- vlog +libext+.v \
- +incdir+../vlog/amber23+../vlog/amber25+../vlog/system+../vlog/tb+../vlog/ethmac \
- +incdir+../vlog/lib+../vlog/xs6_ddr3+../vlog/xv6_ddr3 \
- -y ../vlog/amber23 -y ../vlog/amber25 -y ../vlog/system -y ../vlog/tb -y ../vlog/ethmac \
- -y ../vlog/lib -y ../vlog/xs6_ddr3 -y ../vlog/xv6_ddr3 \
- -y $XILINX/verilog/src/unisims \
- -y $XILINX/verilog/src \
- ../vlog/tb/tb.v \
- $XILINX/verilog/src/glbl.v \
- +define+BOOT_MEM_FILE=\"$BOOT_MEM_FILE\" \
- +define+BOOT_MEM_PARAMS_FILE=\"$BOOT_MEM_PARAMS_FILE\" \
- +define+MAIN_MEM_FILE=\"$MAIN_MEM_FILE\" \
- +define+AMBER_LOG_FILE=\"$AMBER_LOG_FILE\" \
- +define+AMBER_TEST_NAME=\"$AMBER_TEST_NAME\" \
- +define+AMBER_SIM_CTRL=$TEST_TYPE \
- +define+AMBER_TIMEOUT=$AMBER_TIMEOUT \
- ${FPGA} \
- $AMBER_CORE \
- $AMBER_DUMP_VCD \
- $AMBER_TERMINATE \
- $AMBER_LOAD_MAIN_MEM
-
- if [ $? == 0 ]; then
- vsim -voptargs="+acc=rnpc" tb ${RUN_OPTIONS}
-
- # Set a timeout value for the test if it passed
- if [ $TEST_TYPE == 1 ]; then
- tail -1 /dev/null
- if [ $? == 0 ]; then
- TICKS=`tail -1 > $AMBER_LOG_FILE
-fi
+ echo "+libext+.v" > iverilog.f
+ echo "+incdir+../vlog/amber23" >> iverilog.f
+ echo "+incdir+../vlog/amber25" >> iverilog.f
+ echo "+incdir+../vlog/system" >> iverilog.f
+ echo "+incdir+../vlog/tb" >> iverilog.f
+ echo "+incdir+../vlog/ethmac" >> iverilog.f
+ echo "+incdir+../vlog/lib" >> iverilog.f
+ echo "+incdir+../vlog/xs6_ddr3" >> iverilog.f
+ echo "+incdir+../vlog/xv6_ddr3" >> iverilog.f
+ echo "-y../vlog/amber23" >> iverilog.f
+ echo "-y../vlog/amber25" >> iverilog.f
+ echo "-y../vlog/system" >> iverilog.f
+ echo "-y../vlog/tb" >> iverilog.f
+ echo "-y../vlog/ethmac" >> iverilog.f
+ echo "-y../vlog/lib" >> iverilog.f
+ echo "-y../vlog/xs6_ddr3" >> iverilog.f
+ echo "-y../vlog/xv6_ddr" >> iverilog.f
+ echo "+define+BOOT_MEM_FILE=\"$BOOT_MEM_FILE\"" >> iverilog.f
+ echo "+define+BOOT_MEM_PARAMS_FILE=\"$BOOT_MEM_PARAMS_FILE\"" >> iverilog.f
+ echo "+define+MAIN_MEM_FILE=\"$MAIN_MEM_FILE\"" >> iverilog.f
+ echo "+define+AMBER_LOG_FILE=\"$AMBER_LOG_FILE\"" >> iverilog.f
+ echo "+define+AMBER_TEST_NAME=\"$AMBER_TEST_NAME\"" >> iverilog.f
+ echo "+define+AMBER_SIM_CTRL=$TEST_TYPE" >> iverilog.f
+ echo "+define+AMBER_TIMEOUT=$AMBER_TIMEOUT" >> iverilog.f
+ echo "$AMBER_CORE" >> iverilog.f
+ echo "$AMBER_DUMP_VCD" >> iverilog.f
+ echo "$AMBER_TERMINATE" >> iverilog.f
+ echo "$AMBER_LOAD_MAIN_MEM" >> iverilog.f
+ echo "../vlog/tb/tb.v" >> iverilog.f
+
+ rm -rf ./armber
+ iverilog -f iverilog.f -o armber
+ ./armber



7. Create runIV script for iverilog simulator

$ cd $AMBER_BASE/hw/tools
$ patch -o runIV.sh -i runIV.patch
$ chmod +x runIV.sh
$ cd $AMBER_BASE/hw/sim
$ ln -s ../tools/runIV.sh runIV

8. If you see the iverilog compile error message for log2 function in next step, you could replace log2 by $clog2 to solve the problem.

9. Run a Hello-World Test with Amber 25

$ cd $AMBER_BASE/hw/sim
$ runIV -5 hello-world

10. Hello-World simulation Result

Amber Boot Loader v20110202130047
Hello, World!

----------------------------------------------------------------------------
Amber Core
> User FIRQ IRQ SVC
r0 0x00000010
r1 0x16000000
r2 0x00000000
r3 0x00000000
r4 0x0c80e403
r5 0x00000000
r6 0x00000000
r7 0x00000000
r8 0xdeadbeef 0xdeadbeef
r9 0xdeadbeef 0xdeadbeef
r10 0x00000011 0xdeadbeef
r11 0xf0000000 0xdeadbeef
r12 0x00000000 0xdeadbeef
r13 0x08000000 0xdeadbeef 0xdeadbeef 0x01ffffb8
r14 (lr) 0x0080e420 0xdeadbeef 0xdeadbeef 0x20000787
r15 (pc) 0x0080e960

Status Bits: N=0, Z=1, C=1, V=0, IRQ Mask 0, FIRQ Mask 0, Mode = User
----------------------------------------------------------------------------

++++++++++++++++++++
Passed hello-world 29320 ticks
++++++++++++++++++++

2011年4月25日 星期一

MacPort selfupdate fail ?

剛才突然發現,做 MacPort 的 selfupdate 時會失敗,
上次做還 OK 啊..?

$sudo port -f selfupdate
Warning: No index(es) found! Have you synced your source indexes?
---> Updating the ports tree
Error: Synchronization of the local ports tree failed doing rsync
Error: /opt/local/bin/port: port selfupdate failed: Couldn't sync the ports tree: Synchronization of 1 source(s) failed

測試一下公司網路:

$ telnet rsync.macports.org 873
Trying 17.254.20.244...

嗯,Port 873 出不去!
沒想到,公司 MIS 連 rsync 的 port 也給封了!真是麻煩,
費了一番功夫後,
終於可以做 selfupdate 了:

$ sudo port selfupdate
Warning: No index(es) found! Have you synced your source indexes?
---> Updating the ports tree
---> Updating MacPorts base sources using rsync
MacPorts base version 1.9.2 installed,
MacPorts base version 1.9.2 downloaded.
---> MacPorts base is already the latest version

The ports tree has been updated. To upgrade your installed ports, you should run
port upgrade outdated

2011年4月17日 星期日

奇怪的問題,無法理解!?

家裡有三台 Mac,分別是 Mac Mini, iMac and Macbook
但 Mac Mini 最近發生了一件怪事:

用 iTunes 在看朋友分享的『棋靈王』卡通時,
突然發現『只有影像卻沒有聲音』的現象,
可是以前看過啊,沒問題啊....
且看其他影片卻是正常,
反覆實驗,確認只有『棋靈王』系列影片(全集)有問題,
其他的影片完全正常!

難道是,檔案故障?
立刻將檔案複製到其他電腦 iMac and Macbook
結果一切正常:檔案沒壞!

在 Mac Mini 反覆做了一些實驗:
1. Safari 看 Youtube,影像聲音正常。
2. 用 Quicktime 看影片, 影像聲音正常。
3. 用 iTunes 看其他影片,影像聲音正常。
4. 用 iTunes 看『棋靈王』,只有影像,沒有聲音。
5. iTunes 砍掉重裝,沒用!
6. 用 QuickTime 看『棋靈王』,一樣,只有影像,沒有聲音。
7. 用 VLC 看『棋靈王』,一樣,只有影像,沒有聲音。
8. 用 MPlayer 看『棋靈王』,一樣,只有影像,沒有聲音。
9. 磁碟工具程式->修復權限,沒用!

難掉是 Mac OS 系統內部 某個 Audio Codec 掛了,
而這 Audio Codec 恰巧只有『棋靈王』用到?
這麼巧?
在 Google 不到有用的資訊下,
只好使出絕招:OS重灌!

一個半小時後...
暈倒!完全沒用,結果一樣!
WHY?WHY?WHY?WHY?

難道我的 Mac Mini 被 佐為 附身了?

就當我看著無聲影片,絕望沮喪之時,
手一不小心碰到外接喇叭的音源線,
突然,聲音出現了!!!
好像是,音源線接頭 與 MacMini 的耳機插孔 接觸不良,
碰一下 OK,再碰一下 聲音又會消失

不對!
要真是真是『音源線接頭 與 MacMini 的耳機插孔 接觸不良』
怎會只有『棋靈王』會有問題,其他的都OK
奇怪,不合理啊.....

將『音源線接頭』拔下,用橡皮擦,用力的擦一擦,
再裝回去後,『棋靈王』影音 就 穩定正常了。

嗯,很怪,得好好研究研究了.....

2011年4月14日 星期四

衝破封鎖線

由於公司將 MSN 給封鎖了,所以決定要自行突圍

Step.1 Download Tor for Mac OS Vidalia

    將 Vidalia 拖到 Application目錄後執行,到 控制面板 去 "啟動 Tor"
    這時 Vidalia 的狀態 會顯示:『已連線到 Tor 網路!』



Step. 2 Test Tor

    到 系統偏好設定-網路-進階-代理伺服器
    設定 HTTP and HTTPS Proxy = localhost:8188

    接著,用 Safari 訪問 Are you using Tor?
    看到

    就知道 Tor 網路使已經建立...

    若看到

    就知道 Tor 連線有問題,要先解決 Tor 的問題。
    測試完成後,記得將系統的 HTTP Proxy 改回來。


Step. 3 MSN Proxy Setting

    到 Messenger-Preference-Account 設定 Socks Proxy = localhost:9050

    這樣就可衝破封鎖線了!


PS1. 不知為何 Messenger Proxy Type 選 HTTP 的話,是衝不出去的,可能公司防火牆比較厲害。
PS2. Vidalia 控制面板 的 語系要到 Vidalia-Preference-外觀-語系 去變更, 可是卻是要選擇『簡體字』才會出現 繁體中文,這應該是打錯字了。