8-bit Microprocessor Verilog Code Review
always @(posedge clk or posedge rst) begin if (rst) begin registers[0] <= 8'h00; registers[1] <= 8'h00; registers[2] <= 8'h00; registers[3] <= 8'h00; end else if (wr_en) begin registers[reg_sel_wr] <= wr_data; end end endmodule module processor ( input clk, rst, output [15:0] addr_bus, inout [7:0] data_bus, output mem_read, mem_write ); // Internal signals reg [15:0] pc; reg [7:0] ir; reg [7:0] alu_out; reg zero_flag; // Register selects and controls reg [1:0] reg_sel_a, reg_sel_b, reg_sel_wr; reg [7:0] wr_data; reg wr_en; wire [7:0] reg_a, reg_b;
// Instantiate modules alu alu_inst (.a(reg_a), .b(reg_b), .op(alu_op), .result(alu_result), .zero(alu_zero)); 8-bit microprocessor verilog code
module processor_tb; reg clk, rst; wire [15:0] addr; wire [7:0] data; wire mem_read, mem_write; processor uut (.clk(clk), .rst(rst), .addr_bus(addr), .data_bus(data), .mem_read(mem_read), .mem_write(mem_write)); always @(posedge clk or posedge rst) begin if
// Memory interface assign addr_bus = (state == FETCH) ? pc : ((state == MEM_READ || state == MEM_WRITE) ? ir[7:0], reg_b : 16'hzzzz); assign data_bus = (state == MEM_WRITE) ? reg_a : 8'hzz; assign mem_read = (state == FETCH || state == MEM_READ); assign mem_write = (state == MEM_WRITE); reg_a : 8'hzz; assign mem_read = (state ==
// Control FSM states reg [2:0] state; localparam FETCH = 3'b000, DECODE = 3'b001, EXECUTE = 3'b010, MEM_READ = 3'b011, MEM_WRITE = 3'b100;
Have you built your own CPU in Verilog? Share your experience or questions in the comments!