2 use ieee.std_logic_1164.all;
3 use ieee.std_logic_arith.conv_std_logic_vector;
4 --use ieee.std_logic_arith.all;
6 use ieee.std_logic_textio.all;
7 use ieee.std_logic_unsigned.conv_integer;
10 generic (dsize : integer := 8);
11 port ( set_clk : in std_logic;
12 trig_clk : in std_logic;
17 instruction : in std_logic_vector (dsize - 1 downto 0);
18 status_reg : in std_logic_vector (dsize - 1 downto 0);
19 pcl_d_i_n : out std_logic;
20 pcl_d_o_n : out std_logic;
21 pcl_a_o_n : out std_logic;
22 pch_d_i_n : out std_logic;
23 pch_d_o_n : out std_logic;
24 pch_a_o_n : out std_logic;
25 pc_inc_n : out std_logic;
30 architecture rtl of decoder is
32 procedure d_print(msg : string) is
33 variable out_l : line;
36 writeline(output, out_l);
39 procedure d_print(msg : string; sig : std_logic_vector) is
40 variable out_l : line;
44 writeline(output, out_l);
47 procedure d_print(msg : string; ival : integer) is
48 variable out_l : line;
52 writeline(output, out_l);
55 type dec_status is (reset0, reset1, reset2, reset3, reset4, reset5,
59 jmp1, jmp2, jmp3, jmp4,
64 signal cur_status : dec_status;
68 main_p : process (set_clk, trig_clk, res_n)
70 if (res_n'event and res_n = '0') then
71 d_print(string'("reset"));
75 if (set_clk'event and set_clk = '1') then
76 d_print(string'("*"));
92 d_print(string'("fetch"));
99 d_print(string'(" exec and decode "), conv_integer(instruction));
100 ---one byte instruction decoding.
101 if instruction = conv_std_logic_vector(16#78#, dsize) then
103 d_print(string'(" sei"));
107 ---set flag operation here.
109 elsif instruction = conv_std_logic_vector(16#a2#, dsize) then
111 d_print(string'(" ldx 0"));
115 ---load X operation here.
117 elsif instruction = conv_std_logic_vector(16#9a#, dsize) then
119 d_print(string'(" txs"));
124 elsif instruction = conv_std_logic_vector(16#4c#, dsize) then
127 d_print(string'(" jmp 0"));
134 cur_status <= unknown_stat;
135 d_print(string'("unknown inst."));
142 d_print(string'(" ldx 1"));
143 cur_status <= unknown_stat;
145 d_print(string'(" jmp 1"));
151 d_print(string'(" jmp 2"));
154 d_print(string'("unknown status."));
155 cur_status <= unknown_stat;