トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2021-11-28

lowRISC/ibex

で遊んでみる

git clone https://github.com/lowRISC/ibex.git
sudo apt install srecord
sudo pip install fusesoc
sudo pip3 install -r python-requirements.txt
export PATH=~/tools/riscv-gnu-toolchain/bin:$PATH
source /tools/Xilinx/Vivado/2020.2/settings64.sh
make build-arty-100 program-arty

で,ビルドしてFPGAへのプログラムができる.
examples/fpga/artya7/rtl/top_artya7.svのMEM_SIZEを

parameter int          MEM_SIZE     = 128 * 1024; // 256 kB

と変更すると

make build-arty-100 program-arty

と,Arty-35向けにもビルドできる.
ビルドすると,

examples/sw/led

がBRAMに書かれたbitファイルが生成されているよう.
ボード上のLD[3:0]が,0101(=0x0a)と1010(~0x0a)の交互に点灯する.
合成オプションとしては,

-generic {SRAMInitFile ../../../../../examples/sw/led/led.vmem} 

というのがVivadoのGenralにLanguage Optionsで与えられている.
LEDどうやって点灯してるのかと思えば,メモリへの書き込みデータを表示してるだけなのね.

 // Connect the LED output to the lower four bits of the most significant
 // byte
 logic [3:0] leds;
 always_ff @(posedge clk_sys or negedge rst_sys_n) begin
   if (!rst_sys_n) begin
     leds <= 4'b0;
   end else begin
     if (data_req && data_we) begin
       for (int i = 0; i < 4; i = i + 1) begin
         if (data_be[i] == 1'b1) begin
           leds <= data_wdata[i*8 +: 4];
         end
       end
     end
   end
 end
 assign LED = leds;

なるほど,面白い.