improve reset logic
diff --git a/verilog/rtl/jacaranda-8/computer.v b/verilog/rtl/jacaranda-8/computer.v index 9d8b6c6..13dccf4 100644 --- a/verilog/rtl/jacaranda-8/computer.v +++ b/verilog/rtl/jacaranda-8/computer.v
@@ -83,9 +83,13 @@ reg [7:0] nanaseg_in_data; - wire reset = la_data_in[0]; - wire instr_mem_data = wbs_dat_i[7:0]; - wire instr_mem_addr = reset ? wbs_adr_i[7:0] : pc; + wire reset; + wire [7:0] instr_mem_addr; + wire [7:0] instr_mem_data; + + assign reset = la_data_in[16]; + assign instr_mem_addr = reset ? la_data_in[15:8] : pc; + assign instr_mem_data = la_data_in[7:0]; instr_mem instr_mem(.addr(instr_mem_addr), .w_data(instr_mem_data), @@ -93,7 +97,8 @@ .r_data(instr), .clock(wb_clk_i)); - cpu cpu(.clock(wb_clk_i), + cpu cpu(.raw_clock(wb_clk_i), + .reset(reset), .instr(instr), .pc(pc), .rd_data(rd_data),
diff --git a/verilog/rtl/jacaranda-8/cpu.v b/verilog/rtl/jacaranda-8/cpu.v index 2e7d3f2..f2e128f 100644 --- a/verilog/rtl/jacaranda-8/cpu.v +++ b/verilog/rtl/jacaranda-8/cpu.v
@@ -1,5 +1,6 @@ -module cpu(clock, instr, pc, rd_data, rs_data, mem_w_en, mem_r_data, int_req, int_en, int_vec, reg_w_en); - input clock; +module cpu(raw_clock, reset, instr, pc, rd_data, rs_data, mem_w_en, mem_r_data, int_req, int_en, int_vec, reg_w_en); + input raw_clock; + input reset; input [7:0] instr; //割り込み要求線 input int_req; @@ -36,6 +37,8 @@ //レジスタに書き込むデータをALUからのデータか選択する(1)でALUから(0)でそれ以外 wire reg_alu_w_sel; + wire clock; + assign clock = reset ? 1'b0 : raw_clock; //ALUの制御信号 wire [3:0] alu_ctrl;