pythonでバイナリファイル作成と並べ替え

pythonでバイナリファイルを作成したり、上詰めされたRGBのデータを取り出すなど。

from sys import byteorder

print ("change binary data")

hsize = 2
vsize = 8192
data_size = hsize * vsize
element_per_pixel = 12
lower_assign = 2
byte_per_element = 2

with open('test.bin','wb') as f:
    for value in range(data_size):
        n = value << lower_assign
        b = n.to_bytes(byte_per_element,byteorder)
        for element in range(element_per_pixel):
            f.write(b)

with open('test.bin','rb') as f:
    data = f.read(byte_per_element)
    cnt = 0
    data_list = []
    while data:
        pixel_data = 0
        for element in range(element_per_pixel):
            n = int.from_bytes(data,byteorder)
            n = n >> lower_assign
            pixel_data += n<<(element*(byte_per_element*8-2))
        data_list.append(pixel_data)
        data = f.read(byte_per_element)
        cnt += 1

with open('data.csv','w') as f:
    for data in data_list:
        f.write(hex(data)+"\n")

ポートと内部信号のリストから、verilogファイル出力

ポートと内部信号のリストから、verilogファイルを決まったインデントで生成したいと思いました。 そのためのpythonコードを作成したので、共有しておきます。

まず、入力するcsvファイル(ports.csv)です。以下のように(moduleは除く)、<1:種類>, <2:名前>, <3:ビット幅>として1行ずつ記述します。moduleは、<1:module>, <2:名前>のみです。

module, hogehoge_dut
input,clk,1
input,rst,1
input,A,10
input,AA,11
output,B,9
wire,w_out,9
reg,r_V,10
reg,r_Q,9
reg,r_A,99

port.csvを第一引数で読み込ませる、以下のPythonコードを作成しました。

import csv
import sys

EDUP ="ports declaration has duplication."

def str_add_space_to_input_reg (kind):
    kind = str(kind)
    return kind + " " if ( len(kind) == 3 or len(kind) == 5 ) else kind

def str_bit_width (width):
    _width = int(width)
    if   _width >= 11:
        return "[{width}:0]".format(width=_width)
    elif _width >=  2:
        return "[ {width}:0]".format(width=_width-1)
    elif _width ==  1:
        return "      "

def chk_duplication(_list,cnt):
    # port宣言が重複していたら停止
    if len(_list) != len(set(_list)):
        print ("ERROR: {E} (csv ({ln}) SIG: {nm} )".format(E=EDUP,ln=cnt,nm=_list[-1]))
        exit(1)
    else:
        return

# 入力ポートと出力ポートのリストを初期化
module_name = ""
ports = []
internal_sigs = []
signal_names = []

# CSVファイルを開く
with open(sys.argv[1], newline='') as csvfile:
    portreader = csv.reader(csvfile, delimiter=',')

    cnt = 0
    # 各行を処理
    for row in portreader:
        cnt += 1
        kind  = row[0].replace(' ','')
        name  = row[1].replace(' ','')

        if kind == "module":
            module_name = name
        else:
            width = row[2].replace(' ','')

            signal_names.append(name)
            chk_duplication(signal_names, cnt)

            kind_str = str_add_space_to_input_reg(kind)
            width_str = str_bit_width(width)
            if kind == "input" or kind == "output":
                ports.append        (" "*8+"{kind} {wt} {nm},".format(kind=kind_str,wt=width_str,nm=name))
            elif kind == "reg" or kind == "wire":
                internal_sigs.append(" "*4+"{kind} {wt} {nm};".format(kind=kind_str,wt=width_str,nm=name))

ports[len(ports)-1] = ports[len(ports)-1][:-1]

# ポートと内部信号の宣言を生成
ports_declaration         = '\n'.join(ports)
internal_sigs_declaration = '\n'.join(internal_sigs)

# モジュールの宣言を生成
module_declaration = '''module {module} (
{ports}
);

// モジュールの本体
{internal_sigs}

endmodule'''.format(module=module_name,ports=ports_declaration, internal_sigs=internal_sigs_declaration)

# 宣言を表示
print(module_declaration)

# CSVファイルを開く
with open(module_name+".v",'w') as outfile:
    outfile.write(module_declaration)

次に以下のコマンドを実行します。(llinuxの場合)

# python3 module.py ports.csv

以下、出力結果{module名}.vファイルです。

module hogehoge_dut (
        input         clk,
        input         rst,
        input  [ 9:0] A,
        input  [11:0] AA, 
        output [ 8:0] B
);

// モジュールの本体
    wire [ 8:0] w_out;
    reg  [ 9:0] r_V;
    reg  [ 8:0] r_Q;
    reg  [99:0] r_A;

endmodule

以上。どうでしょうか?

Ubuntu Desktop 日本語 Remixのダウンロード

目標

Vitisでアクセラレーションプラットフォームを作成するにあたり、PetalinuxがLinuxでしか動作しないツールと分かった。今回は、UbuntuをWindowsPCへインストールする。

Ubuntuのインストール

Chromeで.isoファイルをダウンロードしたが、まったく反応がなかった。 その為、FireFoxで実行してみたところ、セキュリティに引っ掛かり警告が出てきた。 勇気を出して、北陸先端科学技術大学院大学から.isoをダウンロードした。 Ubuntu 20.04 LTS 日本語 Remix リリース | Ubuntu Japanese Team

FireFoxでダウンロード

RufusUbuntuイメージをインストールUSBに書き込みます。

Rufus - 起動可能なUSBドライブを簡単に作成できます

Rufus 3.21 Portable (1.3 MB)を選択してダウンロード。ダウンロード後、exeファイルを実行して、USBとisoファイルを設定してUSBへ書き込みスタート。 スタート押下後、「ISOイメージモードで書き込む(推奨)」を選択して実行。

RufusUbuntuイメージをインストール

書き込み完了後、Ubuntuに書き込みたいPCへ差し込み、BIOS画面へ入る。(私のFUJITSUのPCだと起動時にF2を連打)

起動デバイスの優先順位を先ほど差し込んだUSBが1番に来るようにして設定を保存する。

Checking disksのcompleteが100%になるまで待つ。100%になったら、Ubuntuを試すかインストールするかを聞かれるので、 インストールを選択する。

次にキーボードのレイアウトが聞かれるので、 Japanese→Japaneseを選択して続ける。

次に、有線LANを接続していなければ、WiFiの設定が出てくるので、WiFiを設定する。

次に、インストールするアプリのパッケージを選択する。 私は通常のインストールを選択。

次に、元から入っていたWindowsUbuntuも、もういらない必要ない使わないので(ちょい無理やり)、 「ディスクを削除してUbuntuをインストール」を選択して、インストールボタン選択。

次に、どこに住んでますか?→Tokyo

次に、アカウント作成をする。

そしたらインストールを始めてくれる。30分ほどかかって「インストールが完了しました」が表示されたらおっけー。

Zybo Z7(ライセンス付き)のライセンスファイル (.lic) 入手

今日はAMDのZYNQ - 7010の評価ボードZYBO Z7を購入して、ライセンスファイルを作成して動作させるまでのメモ。 まず下記を購入する。

買ったもの

ZYBO Zynq−7010評価ボード Z7−10 開発環境ソフトライセンス付: マイコン関連 秋月電子通商-電子部品・ネット通販

参考にしたもの

ZYBOを購入したときについていたライセンスの取得手順の紙と、以下のサイトを参考に実施。

ライセンス取得手順の紙

japan.xilinx.com

Create and Generate a License Key File - 2022.2 English

ライセンスファイルをもらう

・サイトにアクセスhttp://www.xilinx.com/getlicense

AMDのアカウントでログイン。アカウントなければ新規作成から。

・ログイン後、「Create New Licenses」が出るので紙に記載のコードxxx-xxx-xxx-xxxを入力。Redeem Nowボタンを選択。

ライセンス取得手順の紙に記載のコードを入力

・確認画面が出るのでYesを選択。

ライセンス引き換えの確認画面Yesを押す

・Certificate Based Licensesのリストから、 「OEM SDSoC-Zynq Development Voucher」と「Vivado Design Suite: HL WebPACK 2015 and Earlier License」にチェックを入れてGenerate Node-Locked Licenseボタンを選択。

・Generate Node Licenseのウィンドウが開く。SYSTEM INFORMATION→Host ID→Select a hostを選択。

・Add a Hostウィンドウが開くので、Host Name、Operating System、Host ID Type、Host ID Valueを入力する。 Host NameやHost ID Valueは、アプリVivado License Managerを開き、View System Information→View Host Informationから得られる。

・Next→Next

ライセンスファイルをあるべき場所へ

Xilinxからメールが届く。その文面にその後の手順の記載があるので、Node-locked Licensesの場合を基に進める。 下記の手順により、適切なディレクトリにライセンスファイルをコピーされる。 そのコピー場所は、Windowsの場合は%APPDATA%XilinxLicense下。

  1. 適当な場所にメールへ添付されていた.licファイルを保存

  2. Vivado License Managerを起動

  3. Load License→Copy Licenseボタンを選択

  4. 1.でダウンロードしたライセンスファイルを選択(完了)