1
0
Fork 0
2023-fpga-computer/src/sap3/top.v

154 lines
2.1 KiB
Verilog

module top(
input CLK,
input PIN_24,
output PIN_4,
output PIN_5,
output PIN_6,
output PIN_7,
output PIN_8,
output PIN_9,
output PIN_10,
output PIN_11,
);
assign rst = PIN_24;
assign {PIN_4, PIN_5, PIN_6, PIN_7, PIN_8, PIN_9, PIN_10, PIN_11} = out;
reg[7:0] out;
always @(posedge clk, posedge rst) begin
if (rst) begin
out = 8'b0;
end else if (display) begin
out = alu_out;
end
end
reg[15:0] bus;
always @(*) begin
bus = 16'b0;
if (reg_oe)
bus = reg_out;
else if (mem_oe)
bus = {8'b0, mem_out};
else if (alu_oe)
bus = {8'b0, alu_out};
else if (alu_flags_oe)
bus = {8'b0, alu_flags};
end
reg[23:0] clk_slow;
always @(posedge CLK) begin
clk_slow <= clk_slow + 1;
end
wire rst;
wire hlt;
wire clk;
clock clock(
.hlt(hlt),
.clk_in(clk_slow[14]),
.clk_out(clk)
);
wire[4:0] reg_rd_sel;
wire[4:0] reg_wr_sel;
wire[1:0] reg_ext;
wire reg_oe;
wire reg_we;
wire[15:0] reg_out;
reg_file reg_file(
.clk(clk),
.rst(rst),
.rd_sel(reg_rd_sel),
.wr_sel(reg_wr_sel),
.ext(reg_ext),
.we(reg_we),
.data_in(bus),
.data_out(reg_out)
);
wire mem_mar_we;
wire mem_ram_we;
wire mem_oe;
wire[7:0] mem_out;
memory memory(
.clk(clk),
.rst(rst),
.mar_we(mem_mar_we),
.ram_we(mem_ram_we),
.bus(bus),
.out(mem_out)
);
wire ir_we;
wire[7:0] ir_out;
ir ir(
.clk(clk),
.rst(rst),
.we(ir_we),
.bus(bus[7:0]),
.out(ir_out)
);
wire alu_cs;
wire alu_flags_we;
wire alu_a_we;
wire alu_a_store;
wire alu_a_restore;
wire alu_tmp_we;
wire alu_oe;
wire alu_flags_oe;
wire[4:0] alu_op;
wire[7:0] alu_flags;
wire[7:0] alu_out;
alu alu(
.clk(clk),
.rst(rst),
.cs(alu_cs),
.flags_we(alu_flags_we),
.a_we(alu_a_we),
.a_store(alu_a_store),
.a_restore(alu_a_restore),
.tmp_we(alu_tmp_we),
.op(alu_op),
.bus(bus[7:0]),
.flags(alu_flags),
.out(alu_out)
);
wire display;
controller controller(
.clk(clk),
.rst(rst),
.opcode(ir_out),
.flags(alu_flags),
.out({
display,
hlt,
alu_cs,
alu_flags_we,
alu_a_we,
alu_a_store,
alu_a_restore,
alu_tmp_we,
alu_op,
alu_oe,
alu_flags_oe,
reg_rd_sel,
reg_wr_sel,
reg_ext,
reg_oe,
reg_we,
mem_ram_we,
mem_mar_we,
mem_oe,
ir_we
})
);
endmodule