k0b0's record.

Computer Engineering, Arts and Books

SystemVerilogで符号拡張を記述してみる

符号拡張

 ビット連結を利用して、符号拡張を記述してみる。

ビット連結の記述例

// 8bitのデータを二つ連結して16bitの信号に代入
data_y[15:0] = {data_x_upper[7:0], data_x_lower[7:0]}; 

符号拡張の記述例

// 上位8bitを符号拡張して16bitの信号に代入
data_y[15:0] = {{8{data_x[7]}, data_x[7:0]}; 

HiFIve1のシリアルコンソールに接続できない

f:id:k0b0:20180204144849p:plain

シリアルコンソールに接続できない

 HiFive1にCoremarkをアップロードして性能計測をしようと思ったのだが、シリアルコンソールにうまく接続できず結果を確認することができない。

 下記のコンパイルおよびアップロードまではうまくいくのだが。。。

$ make software PROGRAM=coremark
$ make upload PROGRAM=coremark

 下記のscreenコマンドがうまく動作せずシリアルコンソールに接続できない。。。

$ screen /dev/ttyUSB1 115200

 macOS、Ubuntuでテストをしているのだが、USBデバイスはちゃんと接続できてるし、認識もできている。
 調べてみると、SiFive Forumsで「ボードが破損していた。。。」と言う声も結構あった(^^;;

 ボードが破損していないことを祈りつつ、引き続き調査してみますかね。

参考サイト

forums.sifive.com

gitのエラー:fatal: remote origin already exists.

fatal: remote origin already exists.

 "git remote add origin 〜"を実行したら"fatal: remote origin already exists."と怒られた。
 とりあえず、「既にoriginは存在しますよ。」と言われたので、以下のようにoriginを消して再度"git remote add origin 〜"を実行したらうまくいった。

$ git remote rm origin
$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git
$ git push -u origin master

macOSのFinderからRaspberry Pi にアクセスしてファイルを共有する

macOSからRaspberryPiのディレクトリにアクセスする

 macOSのFinderからRaspberryPiにアクセスしファイルを共有できるようにする。

1, avahi-deamonのインストール

 以下のコマンドにてRaspberryPiにavahi-deamonをインストールする。

$ sudo apt-get install avahi-daemon
$ sudo update-rc.d avahi-daemon defaults

2, afpd.serviceの設定

 ファイル”/etc/avahi/services/afpd.service”を作成する。

sudo vim /etc/avahi/services/afpd.service

 ”/etc/avahi/services/afpd.service”に以下の内容を追記する。

afpd.serviceに追記する内容

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
   <name replace-wildcards="yes">%h</name>
   <service>
      <type>_afpovertcp._tcp</type>
      <port>548</port>
   </service>
</service-group>

3, avahi-deamonを再起動

sudo /etc/init.d/avahi-daemon restart

これで、一通りの設定は完了。

macOSからRaspberryPiにアクセスしてみる

アクセス手順

  • Finderを開く
  • メニュバーの「移動」-> 「サーバへ接続」を選択
  • 「afp://ipアドレス」または「afp://ホスト名」を入力

上記の手順を実行して、FinderにRaspberryPiが表示されたらOK。

openOCDのエラー:LIBUSB_ERROR_ACCESS(on macOS)

LIBUSB_ERROR_ACCESS

 HiFive1を動作させるためにopenOCDをインストールして色々と試してたら”LIBUSB_ERROR_ACCESS”と怒られた。

原因

 調べてみると、macOSではOpenOCDはlibFTDIパッケージ(Homebrewでインストールする)を必要とし、アップル提供のFTDIドライバでは動作しないようだ。それで、USBデバイスを接続すると、FTDIドライバがlibFTDIパッケージを要求し、OpenOCDはうまく動作せずLIBUSB_ERROR_ACCESSが出ると言うわけだ。
(詳細は参考サイトを参照。)

解決方法

 Apple FTDI kext(FTDIドライバ)を無効にすると問題は解決するみたいなので、以下のコマンドよりApple FTDI kextを無効にする。

$ sudo kextunload -p -b com.apple.driver.AppleUSBFTDI
$ sudo kextutil -b com.apple.driver.AppleUSBFTDI -p AppleUSBEFTDI-6010-1

 上記の設定はシステムを再起動させるまで有効である。
もし、設定を元に戻したいのであれば以下のコマンドを実行して元に戻すことも可能。

$ sudo kextload -b com.apple.driver.AppleUSBFTDI

RISC-VのArduino互換ボード「HiFive1」を試す

f:id:k0b0:20180204144849p:plain

HiFive1を試す。

 前から欲しいと思っていたHiFive1を購入したので動かしてみる。
f:id:k0b0:20190104203234j:plain
f:id:k0b0:20190104151207j:plain

[HiFive1の仕様]

  • SiFive Freedom E310
  • RISC-V 32bit, RV32IMAC
  • RV32I Base Integer Instruction Set, Version 2.0
    • “M” Standard Extension for Integer Multiplication and Division, Version 2.0
    • “A” Standard Extension for Atomic Instructions, Version 2.0
    • “C” Standard Extension for Compressed Instructions, Version 1.9
  • RISC-V Privileged ISA Specification, Version 1.9.1
  • RISC-V External Debug Support, Version 0.11
  • Processor Speed:320+MHz
  • Processor Performance: 1.61 DMIPs/MHz
  • Memory:
    • 16KB L1 Instruction Cache
    • 16KB Data SRAM scratchpad
  • UART, QSPI, PWM
  • JTAG

1, freedom-e-sdkをインストールする

 HiFive1の開発環境にはFreedomStudioやeclipse、aruduinoと言ったGUIの環境があるが、今回はSiFiveが開発している"freedom-e-sdk"というコマンドラインベースの環境を使う。以下より、"freedom-e-sdk"をダウンロードする。
(HiFive1は32bitの環境であるので、今回は"freedom-e-sdk"を使うが、64bitのHiFive unleashedを使う場合は"freedom-u-sdk"を使う。)

github.com

gitコマンドでダウンロードする場合は以下を実行する。

$ git clone https://github.com/sifive/freedom-e-sdk.git --recurse-submodules

2, RISC-V Toolchain(OpenOCD, GNU Embedded Toolchain)をインストールする

 HiFive1でのプログラムのコンパイルおよびアップロードを行うためにOpenOCD, GNU Embedded Toolchainをインストールする。
 以下のサイトから、OpenOCDとGNU Embedded Toolchainをダウンロードする。
www.sifive.com

 ダウンロードが完了したら、以下のコマンドでダウンロードしたファイルを解凍し、任意のディレクトリに
解凍したファイルを移動する。

$ tar -xvf openocd-<date>-<platform>.tar.gz
$ tar -xvf riscv64-unknown-elf-gcc-<date>-<platform>.tar.gz

(「date」と「platform」には日付とプラットフォーム名が入る。)

3, 環境変数とPATHの設定

 先ほどインストールしたopenocd、riscv64-unknown-elf-gccの環境変数とPATHを設定する。

環境変数の設定

$ export RISCV_OPENOCD_PATH=./openocdのディレクトリ
$ export RISCV_PATH=./riscv64-unknown-elf-gccのディレクトリ

PATHの設定

$ export PATH="$PATH:$RISCV_OPENOCD_PATH/bin"
$ export PATH="$PATH:$RISCV_PATH/bin"

4, 試しにLEDを点滅させてみる

freedom-e-sdkに移動

 プログラムのコンパイルとアップロードを行うためにディレクトリ"freedom-e-sdk"に移動する。

$ cd ./freedom-e-sdk

freedom-e-sdkをアップデートする

$ git pull origin master
$ git submodule update --init --recursive

make softwareを実行する

$ make software

LED点灯させるプログラムをコンパイルする

 以下の書式に従ってプログラムをコンパイルする。

[書式]
make software BOARD=freedom-e300-hifive1 PROGRAM=[プログラム名]

 LEDを点灯プログラム"freedom-e-sdk/software/led_fade/led_fade.c"を以下のコマンドでコンパイルする。

$ make software BOARD=freedom-e300-hifive1 PROGRAM=led_fade

コンパイルしたプログラムをHiFive1にアップロードする

コンパイルしたプログラムを以下の書式に従ってアップロードする。

[書式]
make upload  BOARD=freedom-e300-hifive1 PROGRAM=[プログラム名]

コンパイルしたプログラム(led_fade)を以下のコマンドでHiFive1にアップロードする。

$ sudo make upload BOARD=freedom-e300-hifive1 PROGRAM=led_fade

以下のように表示されたらアップロードは成功。

...
Start address 0x20400000, load size 3202
Transfer rate: 11 KB/sec, 457 bytes/write.
halted at 0x20400004 due to step
halted at 0x20400004 due to step
shutdown command invoked
shutdown command invoked
A debugging session is active.

	Inferior 1 [Remote target] will be detached.

Quit anyway? (y or n) [answered Y; input not from terminal]
Remote connection closed

 少し分かりにくいが、右側のLEDが点灯したらアップロードは成功である。
f:id:k0b0:20190104151319j:plain

参考サイト

qiita.com
www.aps-web.jp

SSHのエラー : WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

SSHを使ったらなんか接続エラーがでた

sshでリモートに接続しようとしたら以下のエラーがでた。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
...
(以下略)
...

調べてみると、このエラーは以下のことを行うと発生するみたい。

・ssh接続先サーバがOSを再インストールした
・接続先サーバがDHCPでアドレスが変わる
・接続先サーバがホスト名を付け替えた

解決方法

以下のいずれかの方法で"$HOME/.ssh/known_hosts"に書かれているホスト名を消去する。

1, ssh-keygenを使う方法

以下のコマンドで"$HOME/.ssh/known_hosts"にある"remote_host_name"を削除する。
("remote_host_name"は環境によって異なる。)

$ ssh-keygen -R "remote_host_name"

2, vimで直接編集する方法

vim(or その他のエディタ)で直接"$HOME/.ssh/known_hosts"を編集して、"remote_host_nmae"を削除する。

$ vim $HOME/.ssh/known_hosts

参考サイト

qiita.com