shtaxxx日記

コンピュータアーキテクチャについて研究している研究者の日記や技術紹介

Python

PythonとVeriloggenのデータフローライブラリでパイプライン回路をお手軽に設計する

Veriloggen 0.5.0をリリースしました。Python 3.5をサポートしたり、遅延評価・合成の仕組みを入れたり、かなり意欲的な更新です。 github.com 最近、GoogleのTensorFlowが流行っていますね。データフローですね。そこで、今回の目玉は、パイプライン回路を…

Pythonベースの高位合成コンパイラPolyphonyを試してみた

はじめに 高位合成友の会の第3回が12/8に開催されるらしいです。 (僕はPythonでのハードウェアメタプログラミングの話をします。) hls.connpass.com プログラムによると、PolyphonyというPythonベースの高位合成コンパイラの発表があるらしいです。Python…

VeriloggenとPythonでハードウェアのRTLシミュレーションをする

Veriloggenをいろいろ更新し,Version 0.4.3をリリースしました. github.com 同時にPyverilogも1.0.1をリリースしました.テスト周りを補強しリファクタリングを行った安定版です. github.com 準備: PyverilogとVeriloggenのインストール 安定版のインスト…

Veriloggenで条件・遅延付き代入を含むVerilog HDLのステートマシンを作る

引き続きVeriloggenのお話です.今回はVeriloggenのFSMライブラリの条件付き代入や遅延付き代入を紹介します. VeriloggenはPythonでVerilog HDLのソースコードを組み立てることができるライブラリです. 今回の例はGitHubのここにあります. github.com lib…

PythonとVeriloggenで既存のVerilogモジュールを読み込んで改造する

前回に引き続きVeriloggenの話.今回は, read_verilog_module(), read_verilog_module_str() を使って,Verilog HDLで書かれた既存のハードウェア構成を取り込んで,更に改変する方法についてまとめます. VeriloggenはPythonでVerilog HDLのソースコードを…

PythonとVeriloggenでソーティングネットワークを書いてみる

@miyox氏がSynthesijer.Scalaでソーティングネットワークを自動生成していたので,Veriloggenでも試してみた. VeriloggenはPythonでVerilog HDLのソースコードを組み立てるフレームワークです. github.com このソースコード一式は,ここにあります. 基本…

PyMTLを使ってLEDチカチカ回路を作ってみる

ACM/IEEE MICRO-48で発表されたPyMTLを試してみたので,その使い方をまとめておきます. PyMTLはPython上でBehavior level, Cycle level, Register transfer levelの3種類の抽象度でハードウェアをモデリングすることができるフレームワークです. cornell-b…

Veriloggen: PythonでVerilog HDLのソースコードを組み立てるためのライブラリ

海外出張の帰りの飛行機の中でちょっと暇だったので,Verilog HDLのソースコードをPythonで組み立てるためのライブラリを作りました.Python2.x, 3.x両対応です. PyHDI/veriloggengithub.com veriloggen 0.2.0 : Python Package Indexpypi.python.org PyCoR…

emacsでPython+Jediの補完を使う

OSには事情によりCentOS 6.5を想定しているが,Ubuntu等でもほぼ同じ. 各種ソフトウェアインストール pipをインストールし,その後virtualenvをインストールする.既にインストールされていればスキップ可能.CentOS (6.5) の場合 (rootで実行) yum install…

ANTLR3.5でPythonバックエンドが使いたければコマンドラインでコンパイルしよう

ANTLR3.5をダウンロード 実行ファイルを"Complete ANTLR 3.5 Java binaries jar" (antlr-3.5-complete.jar) からダウンロードする. それとは別に"ANTLR 3.5 distribution"からソースコード一式をダウンロードする. 実行ファイルの配置とランタイムのインス…

親ディレクトリの子ディレクトリをimportするにはsys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))) )

親ディレクトリの子ディレクトリ,つまり自分と同じ深さのディレクトリをimportしたいときに検索パスを追加する,例えば ~/proj/dirA/ ~/proj/dirB/ と2つのディレクトリがあったとする.このときに,dirB中のスクリプトからdirAをimportしたい場合には, sy…

MiniSatのPythonラッパーを書いてみた

SAT(充足可能問題)を解く必要があったので,高速なSATソルバーのMiniSatをPythonから触るラッパーを書いてみた. ダウンロード githubにあげてあります.shtaxxx:pyminisat 使い方 SatSolver()がソルバーでSatVarが変数. SatSolver.append()で節を追加して…

Threadingで実行した関数の実行結果を呼び出し元で知るには

Queue.put()とQueue.getを使う. import threading import thread from Queue import Queue def threaded_func(a, b, q): #return a + b ret = a + b q.put(ret) def main(): q = Queue() th = threading.Thread(target=threaded_func, args=(1, 2, q)) th.s…

エントリーを保持しているかどうか検索するのに一番速い方法はなんだろう

リストに格納して"in"で検索・リストに格納してcount()で検索・ディクショナリに格納してhas_key()で検索の3つの方法を試してみる import sys import os import time size = 10000000 t = [] for i in range(size): t.append(str(i)) h = {} for i in range(…

型を調べる方法

isinstance(object, type) を使う n = 100 class Sample1(): def __init__(self, arg): self.arg = arg class Sample2(): def __init__(self, arg): self.arg = arg s1 = Sample1('arg1') s2 = Sample2('arg2') print isinstance(n, int) print isinstance(s…

Pythonの関数デコレータでopenしてcloseする

Pythonにはデコレータという構文があります. まだよく理解していませんが,関数function()の呼び出し時に,@decorator_nameで指定したclosureで前処理や後処理をすることができる機能です.次のような書き方をします. @decorator_name function() ファイル…