Sim's blog

電子工作はじめてみました

光るエレキジャックNo.11

2009-03-04 23:08:08 | 電子工作
表紙の予告が出ていたときから、予想していたとはいえ、いい意味で予想を上回っています。なんというか、ノリが女性誌です。モデルさんが載ってるあたりが、今までと違います。
回路図とかは全部webみたいです。全カラーページで、部品や基板の美しさを堪能できます。
工作難易度は意外と高そうな感じのものが多いです。
読者プレゼントコーナーなんかもあります。蝶々ネックレスが人数が多くてねらい目かも。

p.39にフリースケールコンテストのカラーフロッグ・キットのことが書いてあります。ダイセン電子工業から買えるみたいです。ホームページを見ても載っていないので、どうなったのかと思っていました。

今回はNo.8と同じく特別号なので、次回No.12からは通常進行に戻るようです。次号予告には第1特集がArudino互換のeJackinoであることが書かれています。個人的には最後はuinoで終わってほしかったです(参照)。

「難しかったら、恋人や友だちやお父さんや弟さんに作ってもらっちゃおう!」なんて書いてあります。やっぱり作れなかったら男の沽券にかかわるというか、からめ手から攻めてます。

中身がどうなってるとか、仕組みが知りたいとか、悲しい理系の性(サガ)の逆をいっています。ニコ技とかもそうですが、この雑誌を見て興味だけでも持ってくれる層が広がることを期待したいです。

動画はこちらから見れます。

3/6 追記 大人の人も「でかした!」とほめてます。
シリコンハウスへようこそさんでは「このふっきれた感じすごくいい。」と絶賛。って、あはは、ふっきれすぎです。

m8動きました

2009-03-04 19:49:01 | FPGA
m8」の続きになります。

昨日はいつものごとく色々とまぬけなことをしていたみたいで、すんなりとは動きませんでした。一番の間違いは、RAMを非同期式ではなく、同期式にしていたことです。ザイリンクスのブロックRAMは同期式なので、てっきり同期式だとばかり思っていました。非同期式だとアドレスを出したクロック内にデータを受け取れます。同期式だとアドレスを出したクロックの次のクロックでデータを受け取れます。

テストベンチです(<が全角になっています)。
`timescale 1ns/1ns
`default_nettype none
module test;
reg rst = 0;
reg clk = 1;
reg start = 1'b0;

wire mw;
wire [7:0] adr, cpuout, ramout;

m8 cpu(rst, clk, cpuout, adr, ramout, start, mw, );

ram ram(adr, ramout, cpuout, mw, clk);

initial begin
    @(posedge clk) rst <= 1'b1;
    @(posedge clk) rst <= 1'b0;
    @(posedge clk) start <= 1'b1;
    @(posedge clk) start <= 1'b0;
    #1000 $finish;
end

always #5 clk = ~clk;

endmodule

// 非同期RAM
module ram(adr, out, in, wr, clk);
    input [7:0] adr;
    output [7:0] out;
    input [7:0] in;
    input wr, clk;

    reg [7:0] m[0:255];

    assign out = m[adr];
    always @(posedge clk)
        if(wr) m[adr] <= in;

    // RAMの初期値
    initial begin
    m[8'h00] = 8'h70;   // mov #0
    m[8'h01] = 8'h01;   // add #1
    m[8'h02] = 8'h01;   //
    m[8'h03] = 8'h91;   // jmp #1
    m[8'h04] = 8'h01;   //
    end
endmodule

CPU(m8)とRAMが1個だけの構成です。サンプルプログラムはaccが1づつ増えるだけの無限ループです。
一応、veritakとISE10.1 simulatorの両方で動くはずです。ISE simulatorはなぜかVerilog 2001の構文を受け取ってくれなかったので、古いVerilogスタイルになっています。

SFLからVerilogへの変換はsfl2vlの20090223ベータ版を使いました。20090115版では使えない構文が使えるように拡張されています。m8は1箇所だけ新しい構文を使っています。

タイミングチャートです(クリックで拡大します)。

1つの命令は、命令フェッチ、デコード、実行の3クロックで実行されています。

してみたいこととしては、m8をverilogで書き直してみるとか、ブロックRAM対応にする、といったあたりでしょうか。命令が1ビット余っているので、アキュムレータを一つ増やしてAとBにするなんてのもありかもしれません。妄想はふくらみます。