そういうわけで、なんだかすごくはまって1週間くらいかかりましたが、無事に PS/2 キーボードから入力がとれるようになりました。わほーい。
なんか、原因はよくわかりませんが、どうやら俺の書き方が XST のお気に召さなくて、FSM の合成がうまくできなかった模様で、state の持たせ方を変えたら直ったよ。ごく普通の one-hot state register だったんだけどなぁ…
投稿者: yasu
デザインウェーブ休刊
どうも、Design Wave Magazine が休刊になる、という話だ。
青春だったのになあ。
中学生の頃、Design Wave というのはまだトラ技の別冊付録で、「FPGA とか CPLD っていうのはすごいデバイスだ! 74LS とかいらなくなるのかね?」とか、「回路書くのに HDL というのがあるのかー、すげーなー!! (でも CAD もそれを動かすためのコンピュータも高いよなあ)」とか、読みながらそんなことを考えてたわけです。
で、大学で研究室に入って、(まさかそんなことになるとは思っていなかったのだが) 自分が FPGA ボードとかを作るようになるころには月刊化されており、けっこう買っていて、とても勉強になった。博士を出てからは今年の夏までずっと生物系の研究室にいたので、しばらく買ってなかったが。
思えば月刊化されてからいままで、というのはプログラマブル・デバイスが急激に普及したり、高位言語からの合成が実用化され始めたり、いろいろな転換期だったような気がする。
売れないから休刊、というよりは、ひとつの時代と役目がおわったのかな。
ありがとうございました。
安曇野その後
3週間かけて、ようやく第2部まで読了。
こんなのよく高校生のときに読んだな、という感じで、断然いまのほうが内容をちゃんと読めている気がする。期待通り、という言い方はおかしいけれど、非常におもしろい。
先週本棚を整理していたら藤村の「春」が出てきたのは、以前にこれを読んだときに触発されて買ったのだろうか。しかし、なぜか全然記憶がない。第5部まで全部読み終えたら、また藤村あたりを読みあさるか。
それ以外にも読まなきゃいけない本はたくさんあるのだけれどね…
Intel 82562V
研究室にある Dell のマシンに FreeBSD を入れたら、Ethernet controller が em0 で認識されて、em0: <Intel(R) PRO/1000 Network Connection 6.9.5> と出たのだけれど、同じマシンに入っている Windows は、10/100 だという。
えー。
そういえば 100M でしかリンクしないぞ!!
と思って調べてみると、こいつは FreeBSD の em とか Linux の e1000 で動く Fast ethernet なのだそうだ。
なんてこった。いくら安いのか知らんが、このご時世にそんなもの作るなよ Intel。そして、そんなもの積むなよ Dell!!!
Windows デバイスドライバ作るぜ!
最近は HDL 設計の勘を取り戻すためにいろいろやるのに必死で、全然ドライバ関係の仕事が進んでいないのだけれど、大学で MSDN の subscription が使えるようになったので、何をインストールすればいいのかだけでも調べて、とりあえずドキュメントを手に入れることにした。
そういうわけで、Web で最新情報サーベイ。
まず、DDK (Driver Development Kit) は、WDK (Windows Driver Kit) というのになったそうだ。
WIndows Hardware Develop Central (WHDC) のページ に情報が集約されており、WDK それ自体は MIcrosoft Connect というページに MSN Passport のアカウントを登録すれば無償でダウンロードできる。WDK のバージョンは Windows Server 2008 用だが、これで Windows2000 以降の NT 系のドライバがみんな作れるそうだ。
Microsoft のドキュメントとしては、
– Windows Server 2008 WDK の最新版ドキュメント
– Windows Vista のドライバについて
– Windows Server 2003 DDK (obsoleted by WDK)
– Windows ドライバ開発環境 – はじめに – (may be obsoleted)
あたりが使えそう。
それから、実戦派で参考になりそうなのは、Kenji Aikoさんのページの、
– Windows device driver programming Part 1
– Windows device driver programming Part 2
あたり。ドライバからのデバッグメッセージを、localhost で受信する方法などが書かれており、参考になりそうです。
VGA controller 動いた!
みかんキャンディ
ちょっと前にアメリカ土産にいただいた、Butterfields というところの Tangerine Candy をようやく開けてみた。
とってもおいしい!
今度アメリカにいったら探してみよう…
並木
VGA controller その後
昨夜作りかけたディスプレイコントローラだが、ちょこちょこっとデバッグして、画面が映るようになった。しかし、VGA の解像度に充分な容量のメモリは (DRAM が動かない限り) ないので、いまのところ適当なパターンを作る回路が仕込んであり、スイッチでそれを切り替えて遊べる、みたいな感じ。
で、テキスト VRAM みたいなのがあって、文字を表示できたらいいかなー、と思ったので、現状のパターン発生回路の出力にテキストをスーパーインポーズできるような仕掛けを作ることにした。フォントを作っちゃえばあとはなんとかなるだろ、と思うのだが、甘いかな。とりあえず、テキストに簡単な属性がつけられるといいなー、と思って、本棚から何年ぶりかで「PC-9800シリーズ テクニカルデータブック」を引っ張り出してみた。テキストVRAMの属性ビットのところをみると、
– R
– G
– B
– VL (Vertical Line)
– UL (Under Line)
– RV (Reverse)
– BL (Blink)
– ST_ (Secret)
だそうだ。Secret は実装しなくてもいいか。UL は 4 pixel 右にずれる仕様で、つまり、VL と合わせると罫線としても使えるようになっている。いまさらだけど、98 かっこいいな!
で、XC3S700AN の Block RAM は 20 個ある、というのを前提に仕様を整理してみることにする。
CG (Character Generator) に必要なメモリは、1文字 8×16 で 16bytes. カタカナだけの 8bit コードを全部サポートすると、4kB 必要になるが、ASCII だけの 7bit コードなら、2kB だから、BlockRAM ひとつにちょうど収まる (こう考えてみると、CG というのはけっこう大きな ROM が必要で、ましてや漢字をサポートするというのは、16×16 だとしても 32bytes/character なわけで、ひと昔前ならば一大事業だと思う)。
VRAM のほうは、1文字 8bit で、80×25 でちょうど 2kB. これだと 640×400 しか使い切れない (NEC の気持ちがわかった気がするぞ!)。キャラクタの高さを 16 ドットにすると、80×30 まで入るわけで、これだと 2400bytes 必要であり、352バイトはみ出してしまうが、さすがにこれだけのために BlockRAM をもうひとつ使うのはなんかもったいないので、attribute を 4bit に圧縮して、BlockRAM の後半をこれに使うことにした。RGB + UL でいいかな。
VRAM のアドレッシングは、VGA コントローラから現在の X 座標と Y 座標の値が出てくるので、X (8 pixels/character) は下の 3 bit を切り捨てて、Y (16 pixels / character) は下の 4bit を切り捨ててやれば、キャラクタ座標になるわけだ。しかし、ここからアドレスに変換するところが実に問題で、80 を掛ける、というのはけっこうしんどい。そこで、text + attribute で、一行あたり 120 bytes だから、128bytes / line を割り当てることにした。こうすると、4kB のメモリには 32 行分乗ることになり、30行の画面には充分である。結局のところ、アドレス計算は、
assign TEXT_A[11:0] = {VGA_Y[9:4], VGA_X[9:3]};
みたいな感じでできる。Attribute のほうは、2 桁分が 1 バイトで読めてくるので、そこはちょっと工夫が必要だが、たいしたことはない。
CG は、アドレスの上位 7 ビットが文字コードで、下位 4 ビットが Y 軸。
これが終わったら、とりあえず文字の表示とかが FPGA 単体でできるようになるわけなので、学生の教育用に UART と Ethernet の MAC くらいは作りたいが、Ethernet MAC は大変そうだなあ。