2021-09-15から1日間の記事一覧

VHDL版CPU1738の動作確認 / 9 ÷ 2 = 4余り1を計算する

アセンブラのようなものも『CPUの創りかた』のときと同じくPythonで作った。 def generate_mif(file_name, width, depth, rom): f = open(file_name, "w") f.write("WIDTH=%d;\n" % width) f.write("DEPTH=%d;\n" % depth) f.write("ADDRESS_RADIX=UNS;\n") …

CPU、ROM、クロックジェネレーターをまとめてCPU1738を完成させる

ROM、クロックジェネレーターは、『CPUの創りかた』のときに作ったVHDLをそのまま使った。 これで一往完成である。 library ieee; use ieee.std_logic_1164.all; entity cpu1738 is port( source_clk : in std_logic; manual_clk_in: in std_logic; sel : in…

CPUにまとめる

これまで作ったモジュール同士を配線してCPUにする。ROMを除いておおむね図34 CPUの全体接続図(p.126)のような形になる。 library ieee; use ieee.std_logic_1164.all; entity cpu is port( aclr_n : in std_logic; inp : in std_logic_vector(3 downto 0); …

A、B、OUTの各レジスタとPCとをVHDLで書き換える

今度はA、B、OUTの各レジスタとPC (pp.115-118)。『CPUの創りかた』のときと同じく、まず共通のカウンター兼レジスターを作っておく(このとき作った74161のようなものからリプルキャリーアウト機能を省いたもの)。それを4つまとめて実体化する。 共通のカウ…

命令デコーダーをVHDLで書き換える

今度は命令デコーダー(pp.123-125)。 表10、11の真理値表をそのまま書き写した。 library ieee; use ieee.std_logic_1164.all; entity instruction_decoder is port( data: in std_logic_vector(7 downto 4); zero: in std_logic; cout: in std_logic; ld_en…

ステートマシンをVHDLで書き換える

今度はステートマシン(pp.120-123)。テキストはhalt命令用の回路も同じブロックに分けてあるので、ここでもそれに倣った。 図29 (p.122)の回路をそのままVHDLで表現した。 library ieee; use ieee.std_logic_1164.all; entity state_machine is port( halt_n…

ALUをVHDLで書き換える

『CPUの創りかた』のときと同じくCPU1738も全部VHDLで書き換えてみる。また、トライステートバッファーで実現していたバス選択はマルチプレクサに置き換える。 まずはALU (pp.118-120)から。基本的には加減算器。0出力、Aスルー、Bスルー、-Bスルーの各機能…