Make/Day

毎日なにか作ります

51日目 ~メモリの実装~

こんにちは!昨日は記念すべき50日目だったのに変わり映えのしない更新しかしなかったIn_Realityです(*_ _) 今日はデジタル回路の話題で更新します。

今回はメモリの実装に移っていきます。ただのメモリとはいえ、参考書籍の方では周辺回路をいろいろ繋げていたので、こちらの実装をできるだけ単純にするにはどうすればよいか悩みました🤔.....が、開き直って、本の通りに実装するけど何も繋げないという戦法?を取ることにしました。

潔く!!こんな感じ

というわけで以下に今回のソースコードを載せます。実際に動かすときにはledとボタン入力でもつけてあげれば良いのかもしれませんね。

module Memory (
    input [15:0] in,
    input clk, load,
    input [14:0] address,
    output [15:0] out
);
    wire ramin, ioin, scrin, keyin;
    wire [15:0] ramout, scrout, keyout, ioout;

    DMux U0(load, address[14], ramin, ioin);
    DMux U1(ioin, address[13], scrin, keyin);

    RAM16K   ram16k(in, clk, ramin, address[13:0], ramout);
    RAM8K    screen(in, clk, scrin, address[12:0], scrout);
    Register keyboard(16'h0, 1'b0, clk, keyout);  //意味を為さないが、とりあえず実装

    Mux16 U5(scrout, keyout, address[13], ioout);
    Mux16 U6(ramout, ioout, saddress[14], out);
endmodule

今回のコードもいつもの通り未検証です(というか、検証はALUまで)。検証は今後行う予定なので、自分で使ってみる際は自己責任でお願いします。(また、検証を行ったからといって、各環境下で動くことは保証していません)

これで、romは以前設計したのでコンピュータ回路をtopモジュールにして繋げてやれば一通り完成ということになります。そのあとはまた検証に入って、何事もなければ一度実際の基板に実装してみようと思います。お楽しみに
参考書籍