ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

verilog

ROMジェネレータ作った

https://github.com/natsutan/nromgen設定ファイルにλ式を使いたい一心で久しぶりにGaucheを使いました。一番困ったのがVerilogのこういう表記です。 DATA 負の値から2の補数の16進表記が作れなくて、ここで質問したら速攻で返事が来ました。 http://chaton.…

MIIレジスタの読み書きを行う。

OpenCoresで公開されているEthmacを使って、ボード上に載っているPHYのレジスタを読み出す方法をまとめました。配布ファイルのテストベンチethmac/trunk/bench/verilog/tb_ethernet.vから、MIIレジスタの読み書き部分だけ動作させています。アクセスに使用す…

lifegameの生死判定をVerilogで

西尾さんのFPGAでライフゲームを作りましたに反応しました。 ライフゲームの生死判定を3通りの方法で書いて、合成、比較してみました。生死判定の前後にレジスタが入っているのは動作速度を比較したかったためです。結論を先に書いておくと、どう書いてもた…

FPGAスタータ・キットで初体験!オリジナル・マイコン作り

FPGAスタータ・キットで初体験!オリジナル・マイコン作りの紹介です。タイトルはオリジナル・マイコン作りになってますが、正確にはオリジナル・マイコンシステム作りです。マイコン(CPU)はオリジナルではなく、Nios IIを使っています。目次の通り進めれ…

FPGAボードで学ぶ組込システム開発入門(Xilinx編)

FPGAボードで学ぶ組込システム開発入門(Xilinx編)が良い本だったので紹介します。 全体を通して丁寧にわかりやすく説明があり、一歩一歩動かしていくのにちょうどよい難易度になっています。また、代理店に聞かないと分からないような情報も書かれており、無…

EthmacにBFMを接続する。

簡単に作るVerilogテストベンチの続きです。Opencores で公開されているEthmacに、WishboneのBFMを接続してみました。標準でついてくるWishboneのBFMがVHDLだったので、必要な機能だけVerilogで書き直しました。 Wishbone BFMはここから。http://opencores.o…

簡単に作るVerilogテストベンチ

人が作ったVerilogソースや、書き立てほやほやのVerilogソースを簡単にテストしたい時ってありますよね。OpenCoresで公開されているEthmacを使って、簡単にテストベンチを作る方法をまとめてみました。目標はできるだけ楽に動作を確認することですが、初心者…

Ethermac のI/O ポート

OpenCoresで公開されれいるEthermacを動かそうとしています。 http://opencores.org/project,ethmac RTLシミュレーションを実行してみたのですが、trunkにあるテストベンチは上手く動きません。調査がてらEthermacのI/Oポートを調べてみました。 Host Interf…

Wishbone のバスサイクル

Wishbone のバスサイクルをまとめました。一次資料はここからダウンロードできます。翻訳じゃないので、実際に使うときは規格書読んでください。 http://opencores.org/opencores,wishbone 現在の最新版は、 Revision B4 です。 転送サイクルの開始 MASTERは…

Wishbone の信号

Wishboneで使われる信号をまとめました。一次資料はここからダウンロードできます。 http://opencores.org/opencores,wishbone 現在の最新版は、 Revision B4 です。翻訳じゃないので、実際に使うときは規格書読んでください。 SYSCON Module が使う信号 SYS…

Wishbone 基礎

Wishboneは、IPコア間の共通のI/Fとして開発された規格です。Opencoreにある気合いの入ったライブラリはWishboneをサポートしているので少しまとめて見ました。一次資料はここからダウンロードできます。 http://opencores.org/opencores,wishbone 現在の最…

FPGAでエクストリームなコンピューティングの会

FPGAでエクストリームなコンピューティングの会という謎の勉強会に呼ばれたので参加してきました。僕も発表する予定だったのですが、時間が取れず今回は発表無しでした。時系列gdgdで感想を。 FPGAで証券取引の話がとても面白かったです。話を聞くまでは…

Z80作成日記をみて思ったことをつらつらと

DE0で8bit CPUのデコーダを動かす1を見てなんとなく思ったことを書いてみます。 単に僕だったらこう書くなぁというだけで、こうした方が良いという話では無いです。 デコーダから信号を切りだそう。 ぱっとみて思ったのがalways @(code) begin〜endまでが長…

FPGAでLispマシーン

小黒さんによる「Lispマシンを作ってみた」を見ました。なかなか遠くのイベントに参加できないので、録画で後から見れるようになっていると助かります。関係者の皆さんありがとうございました。動画を見てもらえれば分かりますが、FPGAの上でLispコンパイラ…

Altera FPGAを使って step by step でCPUを作るには?

[fpga-cpu]で面白そうな話題がありました。コンピュータアーキテクチャの授業で、Altera FPGAを使って簡単なCPUを作るので、生徒とTAに1冊に勧める一冊の本を教えて欲しいという質問です。このメールへのリプライに出てきた本とURLを紹介します。 opencoreの…

cadrのVerilogソースのコンパイル その2

CADRのハードウェアをFPGAに実装した場合、どれくらいの規模になるのかを確かめるためにベンチマークを取って見ました。ダウンロードできるVerilogの回路では、ボード上のメモリがほぼ全てLEに変換されています。外付けのメモリを使う事にし、メモリの記述を…

cadrのVerilogソースのコンパイル その1

http://www.unlambda.com/cadrから入手できるVerilogファイル(CADDR Revised CADR Verilog)からcadr.vと関連ファイルのみで論理合成をしてみました。ターゲットはCycloe3です。論理合成でエラーが出るので、iram(part_16kx49ram)のみ外付けメモリを使う前提…

並列コンピュータで人材獲得作戦

時代は並列コンピュータのようなので、迷路の問題を解くための並列ハードウェアをVerilogで作ってみました。 元ネタはこちら http://okajima.air-nifty.com/b/2010/01/post-abc6.html アルゴリズム 迷路をグラフで表します。 迷路の1マスに1つのプロセッサを…

s1_coreのクロックを最適化

FPGAプロトタイピングにおけるゲーテッドクロックの扱い FPGAでプロトタイピングをするときは、クロックをFPGA向けに修正するという作業が入ります。具体的にはASIC向けPLLを、FPGA内蔵PLLに置き換えます。FPGAが複数にまたがりクロック系統が複雑な場合は、…

multichannel descriptor

Verilogの規格書を見ていたら面白い機能を見つけました。他の言語で見たことが無い機能なので紹介します。Verilog の$fopenはCのfopenと同じように、ファイル名とファイルタイプを指定して呼び出します。戻り値multichannel descriptorはintegerで受けます。…

ファイルのオープンとクローズの関数

いつもコピペでテストベンチを書いていたので、いまさらながら調べてみました。 $fopen 書式:$fopen("file_name", file_type) ファイルを開く。32bitのmultichannel descriptor か32bitのfile descriptorを返すので、integerで受け取る。32bitのMSBは予約さ…

加算器を作ろう 最後の高速化

最初に決めた条件をはずせるなら、さらに高速になる可能性があります。 FPGAを変える まずオプションよりも何よりも一番効くのが「最速のデバイスにする」事です。アルゴリズムによる最適化を図る前に、最速のPCを買ってくるやり方です。現在入手可能な最速…

加算器を作ろう 手でチューニングしてみた。

「lpm_add_subを使っていれば問題無い」が結論なのですが、悔しいのでさらにチューニングしてみました。Fmaxを上げる事だけを考えているので実用的ではありません。手間暇かければ速くなるという例です。 回路の方針 32bitずつで加算を行い、各クロックでキ…

加算器を作ろう carry select adderによる加算

http://d.hatena.ne.jp/natsutan/20081121の続きです。前回はlpm_add_subを使用しましたが、手動で高速化を図ってみましょう。今回はcarry select adderと呼ばれる手法を用いました。carry select adderとは上位の加算をキャリー有り、キャリー無しの両方で…

加算器を作ろう lpm_add_subによる加算

次に最も実践的であるMegacore wizardを使う方法を紹介します。通常はこの方法だけ知っていれば十分です。 lpm_add_subの設定 Quatus2のTools→Maga Wizard Plug-In Managerを起動します。Arithmeticからlpm_add_subを選択しましょう。bit幅の設定と、Create …

加算器を作ろう マルチサイクルによる加算

CLKの周波数を維持したままタイミング制約を満たさない加算を実行するには、マルチサイクル制約を使うという手法があります。要するに加算自体を数クロックかけて行うので、タイミング制約は緩くしてねという事です。クロックによる同期設計を半ば放棄してい…

加算器を作ろう 最初の一歩

加算器のFPGA実装について調べた所、奥が深くとても面白い事がわかりました。特にFPGA実装に限ると、キャリー専用配線や、LUT構造により通常の加算器とは少し違った性能になることがあります。加算器をいかに速くできるかについて、いろいろと挑戦してみまし…

グレイコード

符号付き2進数のバリエーションのコメントで面白い話が聞けましたので検証してみました。元ネタは、第二の魚の骨発見です。どうしてこういう事が起きるのか、またグレイコードならどう違うのかをシミュレーションしてみました。Verilogによる実装も後ろで説…