Files
learnFPGA/step5.v
2025-08-11 07:13:51 +03:00

55 lines
1.3 KiB
Verilog

/* Register bank and state machine */
`default_nettype none
`include "clockworks.v"
module SOC (
input clk,
input rst_i,
input [4:0] led,
input RXD,
output TXD
);
wire clk_i;
wire resetn;
reg [31:0] MEM [0:31];
reg [31:0] instr;
reg [31:0] PC;
inital begin
PC = 0;
//addi x0, x0, 0
// imm 12bit- rs1 5bit- funct3 3bit- rd 5bit - opC 7bit
instr = 32'b0000_0000_0000_0000_0000_0000_0001_0011;
// add x1, x0, x0
MEM[1] = 32'b0000_0000_0000_0000_0000_0000_1011_0011;
// addi x1, x1, 1
MEM[2] = 32'b0000_0000_0001_0000_1000_0000_1001_0011;
// addi x1, x1, 1
MEM[3] = 32'b0000_0000_0001_0000_1000_0000_1001_0011;
// addi x1, x1, 1
MEM[4] = 32'b0000_0000_0001_0000_1000_0000_1001_0011;
// ebreak
MEM[5] = 32'b0000_0000_0001_0000_0000_0000_0111_0011;
end
wire isALUreg = (instr[6:0] == 7'b011_0011);
wire isALUimm = (instr[6:0] == 7'b001_0011);
wire isLUI = (instr[6:0] == 7'b011_0111);
wire isAUIPC = (instr[6:0] == 7'b001_0111);
wire isJAL = (instr[6:0] == 7'b110_1111);
wire isJALR = (instr[6:0] == 7'b110_0111);
wire isBRANCH = (instr[6:0] == 7'b110_0011);
wire isLOAD = (instr[6:0] == 7'b000_0011);
wire isSTORE = (instr[6:0] == 7'b010_0011);
wire isSYSTEM = (instr[6:0] == 7'b111_0011);