« August 2008 | Main | October 2008 »

2008.09.27

プロセッサに詳しい人に質問です

Q01まずは「プロセッサに詳しい」かどうか判定するための質問です。正しいものを選んでください。これに答えられない方は解答をご遠慮ください。(択一)

(1)MIPSアーキテクチャのMIPSは「Microprocessor without Interlocked Pipeline Stages」の略称であり、RISCアーキテクチャの代表の一つである。
(2)MIPSアーキテクチャは、FPGAの中で動かす事を前提としてXilinx社によって開発された。
(3)MIPSアーキテクチャは、レジスタウィンドウと呼ばれる特徴的な構造を持っている。
(4)MIPSアーキテクチャは、Intel社によって開発され、最も普及しているCISCアーキテクチャの一つである。
(5)MIPSアーキテクチャは、イギリスで開発された変態アーキテクチャである。GBA、NDSをはじめとする組み込み機器、低電力アプリケーションで広く普及している。
(6)MIPSアーキテクチャは、ヘネシー先生が攻め、パターソン先生が受けである。

こうですか、わかりません><

| | Comments (3) | TrackBack (0)

2008.09.23

貧乏人のためのDDR2/DDRコントローラ続き

もっと良い名前無いものか。名前の元ネタはGNU Calc -- poor man's Mathematica。

基本的にはアイデア一発勝負もの。誰かが作ってくれたらうれしい。自分が必要になった場合は、こんな風に作ると思う。DDR2を念頭に書いているけど、DDRでも本質は同じ。

DDR2の難しさっていうのは2つあって、一つが最低周波数、もう一つはDQSの扱い。初期化とか制御線の制御は誰でもできると思うので省略。

まずはDDR2メモリのライト動作を見てみる。


図はJEDEC Standard No. 79-2Cからの引用。

趣味でやっているのにこんなタイミング作ってられないよ、ってのが正直な感想。特に困るのが、ライト時はメモリに都合の良いようにDQSを作らないといけないのに、リード時のDQSはメモリの都合で出して来ること。

ここを簡単にするにはどうしたらよいか。
まずはライト。

こんな感じで、ライトのコマンドを出したら適当にDQSを出して、その間DQを一定にする。ちなみに、DDR2でもDQSはシングルエンドで動く。ODTも多分制御しなくて大丈夫。基板上では、CKの立ち下がりでRASやらCASをを変化させ、立ち上がりでメモリにサンプリングさせる。これで特別なタイミングの調整は要らない。FPGAの中は、普通に立ち上がりで動作させ、外に出すクロックだけ反転させればよい。

実は反転クロックにもPLL/DCM使う必要は無い。

DDR用のI/Oを使って、datain_hに0、datain_lに1、outclockに内部のCLKを入れておけば、ちゃんとした反転クロックを出してくれる。DDR2の場合はCKが作動だから、論理を逆にしたものをペアで入れれば良い。ロジックで反転させると、配置配線の度にタイミング変わるから困る。貧乏人向けとはいえ、100MHz overで動かす回路だから、そこはしっかり合わせ込もう。DQSもイネーブル付きを選べば、同じように1つのCLKで生成できる。適当に書ければ良いので90度ずらす必要は無い。

次にリード。リードのコマンドを出したら、レイテンシを適当に計算して、だいたいこの辺って所でサンプリングする。

書き込み時に8回同じデータ書き込んでいるから、リードの最中はDQは変化しない。メモリから来るDQSは無視して、内部のCLKでだいたい真ん中でサンプリングする。

OK、OK、言いたいことは分かる。
8回のバースト転送で1回分のデータしかR/Wできていないから、DDRの容量が1/8になるよね。でも、ボード上に512MByte乗っていたら、64MByteも使えるんだぜ。俺プロセッサの動作用には十分でしょ?SP3のスタータキットでも8Mバイトもつかえる。全く使えないか、追加のDCM無しで8MByte使えるかどっちが良い?

ちょっとだけマジレスすると、DQの制御を8バースト中の前半、後半に分けても良い。これでもタイミング的には4倍楽になるし、容量も1/4になるだけ。

実は「絶対に納品物では使わない」のが、この回路の一番のメリットだったりする。

| | Comments (4) | TrackBack (0)

2008.09.21

貧乏人のためのDDR/DDR2コントローラ

CLK1系統、無料、測定器による微調整必要なし、のDDR/DDR2コントローラって需要あるかしら。
当然スピードは遅いし、いろいろ制約もある。

AlteraもXilinxもコア使おうとすると正規の開発環境がいるので学生や趣味でやりたい人にはきついと思う。仮に無料だとしても、CLK系統は多いし、状況によっては測定器いるし、でかなり面倒。

想定している使い方は、俺様CPU用のさっと使えるメモリコントローラ。
興味ある方は、遠慮無くコメントかはてぶで。生暖かく見守る方は[生]タグ有効。

| | Comments (4) | TrackBack (0)

2008.09.17

あーきてくちゃ

http://shinh.skr.jp/m/?date=20080917から
Windows3.1?というのはさておき、ノンプリエンプティブなOSは身近に欲しいと思う。

call/ret をシステムコールにしちゃうとオーバーヘッドでかそうだから、先読み付きの大きいデータキャッシュを用意して、ミスヒットしたらコンテキストスイッチすればどうだろう。命令数は難しいかもしれないけど、コンテキストスイッチでクリアーするようなWDTがあれば目的は達成出来る思う。

外部割り込みを無効にすると、uITRONってそんな感じなので、あろは先生に期待しよう。

| | Comments (2) | TrackBack (0)

2008.09.10

Verilog のポート宣言にパラメータを使う

俺メモ

module add_4
  (
   input clk,
   input [3:0] a,
   input [3:0] b,
   output [4:0] c
   );
  add #(.width(4) ) add_u(.clk(clk), .a(a), .b(b), .c(c));
endmodule // add_4

module add   #(parameter width = 8)
  (
   input clk,
   input [width-1:0] a,
   input [width-1:0] b,
   output reg [width:0] c
   );
  always @ (posedge clk)begin
    c <= a + b;
  end
endmodule // add

| | Comments (7) | TrackBack (0)

2008.09.06

アルゴリズムの名前

雑記帖のきむら(K)さん経由で知る。
http://www.atmarkit.co.jp/fcoding/articles/tengoku/04/shibata_a.html
ブレゼンハムのアルゴリズムというらしい。
今まで「足して超えたら1増やすアルゴリズム」だと思っていました。

どうも名前がよくわからないと、適当に名前を付けてしまう傾向がある。
「関数の最後が関数呼び出しだけだとジャンプになる最適化」は、一般的には tail call optimization らしい。Twitterで教わりました。

他にも勝手に名前を付けているアルゴリズムはあると思う。

| | Comments (0) | TrackBack (1)

2008.09.02

今日の日記

・全盛期の俺
 会社からの帰り道に「エンジニアでいたいなら現場を離れない方が良いよ」とアドバイスをもらう。今回はミスが多いのと進捗が思わしくないからだと思う。まあ、確かにあり得ないミスはしている。
気持ちだけでも若い人達に負けないようにしないと。

・関数型日記(仮)
おおっ、復活!
http://lambda.cocolog-nifty.com/blog/

・LLF/LLVM
 いろんな所からリンクを張られた。このままでは、Gのなつたんになってしまう><

・中二病
 C++とCommon Lispをマスターしたいと思いながら、全然手を動かさないのは中二病と判明。安心した。

・Forthプロセッサ
FPGAで動くForthプロセッサというのは、Forthがそのまま動くのではなく、スタックが2つあるだけのプロセッサのこと。Forthのコードを動かそうとすると、そのプロセッサ向けのコンパイラがいる。b16 ProcessorがGPLでへこむ。仕事には使えない。
仕様をまるパクリして、BSDライセンスで配布するしかないな。

| | Comments (2) | TrackBack (0)

« August 2008 | Main | October 2008 »