verilog/cpu/cpu.v
2017-02-19 06:50:41 -06:00

48 lines
1.2 KiB
Verilog

`include "datareg.v"
`include "alu.v"
`include "insdec.v"
`include "pc.v"
module cpu(clk_i,rst_i,p_addr,p_data,r_addr,r_data_i,r_data_o,we);
input clk_i,rst_i;
input [7:0] p_data;
input [3:0] r_data_i;
output [3:0] p_addr,r_addr,r_data_o;
output we;
wire load_a,load_b,load_rf,dsel,aluop,jmp,hlt,rst,clk;
wire [3:0] reg_in,a_out,b_out,r_in;
pc PC(.clk_i (clk),
.rst_i (rst),
.jump_i (jmp),
.jump_v (p_data[3:0]),
.count_o (p_addr) );
datareg A(.clk_i (clk),
.rst_i (rst),
.en_i (load_a),
.in_i (reg_in),
.out_o (a_out) );
datareg B(.clk_i (clk),
.rst_i (rst),
.en_i (load_b),
.in_i (reg_in),
.out_o (b_out) );
datareg R(.clk_i (clk),
.rst_i (rst),
.en_i (load_rf),
.in_i (r_in),
.out_o (r_data_o) );
alu ALU(.a (a_out),
.b (b_out),
.op (aluop),
.r (r_in));
insdec DECODER(.ins (p_data[7:4]),
.carry (1'b0),
.zero (1'b0),
.aload (load_a),
.bload (load_b),
.dsel (dsel),
.rfload (load_rf),
.str (we),
.opsel (aluop),
.jump (jmp),
.hlt (hlt) );
endmodule