ICE51 IP核模擬記錄

上文提到了51內核ICE51(https://github.com/ashleyjr/ice51.git

本文就來看看怎麼編譯C程序,仿真模擬運行在該IP軟核上:

環境:MingW32、iverilog、yosys、arachne-pnr、icestorm(icetime)等

 

軟核佈線:(synth腳本)

#!/bin/bash
echo "========================================================"
echo "Running synth..."
rm -f syn.log
yosys -p 'synth_ice40 -top ice51_top -blif ice51.blif' rtl/ice51_top.v rtl/ice51.v rtl/mem_512x8b.v > syn.log
cat syn.log | grep -A20 statistics
echo "========================================================"
echo "Running place and route..."
rm -f blif.log
yosys -o ice51.syn.v ice51.blif > blif.log
arachne-pnr -d 5k -w etc/ice51.pcf ice51.blif -o ice51.asc 
echo "========================================================"
echo "Running Timing check..."
icetime -tmd hx1k ice51.asc > ice51.time
cat ice51.time | grep -A20 "Total path delay"

編譯仿真:(run腳本)

#!/bin/bash
CMD="cd verif/src"
echo $CMD
$CMD

CMD="make"
echo $CMD
$CMD

CMD="cd ../.."
echo $CMD
$CMD

PRELOAD="preload"
if [[ "$2" == "$PRELOAD" ]]; then
   P_PRELOAD=" -D PRELOAD"
fi

#
#./run all preload
#
# Run all tests add check for pass fail
ALL="all"
if [[ "$1" == "$ALL" ]]; then
   echo ""
   echo "--- Simulation begins ---"
   for filename in verif/src/*.c; do
      echo $filename 
      echo -n -e " >\t\t\t"
      ext=".hex"
      cp -f ${filename/\.c/$ext} load_mem.hex
      ext=".checks"
      cp -f ${filename/\.c/$ext} checks.hex
      iverilog -o ice51.dat -D SIM $P_PRELOAD -c etc/filelist.txt
      vvp ice51.dat -vcd | grep "PASSED\|ERROR" 
   done
   echo "--- Simulation ends ---"
   exit
fi

# Run a single test
ext=".hex"
CMD="cp -f verif/src/${1/\.c/}$ext load_mem.hex"
echo $CMD
$CMD

ext=".checks"
CMD="cp -f verif/src/${1/\.c/}$ext checks.hex"
echo $CMD
$CMD

CMD="iverilog -o ice51.dat -D SIM $P_PRELOAD -c etc/filelist.txt"
echo $CMD
$CMD

CMD="vvp ice51.dat -vcd > /dev/null 2>&1"
echo $CMD
$CMD 

# Load waves for a single test
WAVES="w"
if [ "$2" == "$WAVES" ] || [ "$3" == "$WAVES" ]; then
   CMD="gtkwave -S etc/signals.tcl ice51.vcd"
   echo $CMD
   $CMD
fi

準備好環境,分別執行1、synth 2、run

仿真結果如下:

運行仿真結果:

一個CPU就製作出來了,神奇不?

 

記住,山外有山,很多時候,不是自己笨,而是自己的眼界沒有被打開!!!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章