Chapter 5
バグはたくさん残っているであろうが一往動いているので現状で固めておく。nandのみというルールは途中でいい加減になったが、これで、CPUの創りかた (TD4)、動かしてわかるCPUの作り方10講、CPU1738と合わせて4種類作ったことになる。
Lチカで動作確認をする。Dレジスタの出力を外に引き出した。クロックは5 Hzで動かしている。
youtu.be
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity rom is port ( address: in std_logic_vector(15 downto 0); outp: out std_logic_vector(15 downto 0) ); end entity; architecture behavior of rom is signal which_word: natural range 0 to 15; type rom_t is array (natural range <>) of std_logic_vector(15 downto 0); constant ROM: rom_t := ( /* --ram[0]に値3855を代入して、 0 @3855 1 D=A 2 @0 3 M=D --ram[1]に値240を代入して、 4 @240 5 D=A 6 @1 7 M=D --ram[0]の値をdレジスタに呼び出して、 8 @0 9 D=M --ram[1]の値と今のdレジスタの値とを足してdレジスタにストアして、 10 @1 11 D=D+M --ここに留まる。 12 @13 13 0;JMP*/ /*"0000111100001111", --3855 "1110110000010000", "0000000000000000", "1110001100001000", "0000000011110000", --240 "1110110000010000", "0000000000000001", "1110001100001000", "0000000000000000", "1111110000010000", "0000000000000001", "1111000010010000", "0000000000001101", "1110101010000111" */ ------------------------------- /* 0 @64 1 D=M 2 @0 3 0;JMP */ /* "0000000001000000", "1111110000010000", "0000000000000000", "1110101010000111"*/ /*Lチカ: 0 @15 --0b0000_1111 1 D=A 2 @240 --0b1111_0000 3 D=A 4 @0 5 0;JMP */ "0000000000001111", "1110110000010000", "0000000011110000", "1110110000010000", "0000000000000000", "1110101010000111" ); begin which_word <= to_integer(unsigned(address)); outp <= ROM(which_word); end architecture;