124 lines
3.3 KiB
Verilog
124 lines
3.3 KiB
Verilog
`timescale 1ns / 1ps
|
|
|
|
module instructionMemory(
|
|
input wire clk,
|
|
input wire [8:0] address,
|
|
output reg [8:0] readData
|
|
);
|
|
|
|
reg [8:0] memory [512:0];
|
|
|
|
initial begin
|
|
//Equation Solver
|
|
// memory[0] <= 9'b000000000;
|
|
// memory[1] <= 9'b000100000; //load
|
|
// memory[2] <= 9'b000101000; //load
|
|
// memory[3] <= 9'b010100010; //add
|
|
// memory[4] <= 9'b111100000; //shift left
|
|
// memory[5] <= 9'b111100000; //shift left
|
|
|
|
// //Testing all instructions
|
|
// memory[6] <= 9'b010100011; //sub
|
|
// memory[7] <= 9'b011001011; //addi
|
|
// memory[8] <= 9'b011110000; //slt
|
|
// memory[9] <= 9'b110111000; //nor
|
|
// memory[10] <= 9'b111011000; //or
|
|
// memory[11] <= 9'b111011001; //and
|
|
// memory[12] <= 9'b111111000; //sll
|
|
// memory[13] <= 9'b111111001; //srl
|
|
// // memory[14] <= 9'b100100010; //j
|
|
// memory[14] <= 9'b010001000; //zero
|
|
// memory[15] <= 9'b110001001; //beq
|
|
// memory[16] <= 9'b100001000; //jr
|
|
// memory[17] <= 9'b100111100; //j
|
|
|
|
|
|
//String Compare
|
|
memory[0] <= 9'b000000000;
|
|
memory[1] <= 9'b010000000;
|
|
memory[2] <= 9'b010001000;
|
|
memory[3] <= 9'b010010000;
|
|
memory[4] <= 9'b010011000;
|
|
memory[5] <= 9'b000100000;
|
|
memory[6] <= 9'b011001001;
|
|
memory[7] <= 9'b000101010;
|
|
memory[8] <= 9'b011010010;
|
|
memory[9] <= 9'b000110100;
|
|
memory[10] <= 9'b011011011;
|
|
memory[11] <= 9'b000111110;
|
|
memory[12] <= 9'b101010000;
|
|
memory[13] <= 9'b101000010;
|
|
memory[14] <= 9'b101001100;
|
|
memory[15] <= 9'b101011110; //ends initialization
|
|
memory[16] <= 9'b101000011;
|
|
memory[17] <= 9'b101001101;
|
|
memory[18] <= 9'b000110000;
|
|
memory[19] <= 9'b000111010;
|
|
memory[20] <= 9'b110010001;
|
|
memory[21] <= 9'b100100001;
|
|
memory[22] <= 9'b100110000;
|
|
memory[23] <= 9'b110011001;
|
|
memory[24] <= 9'b100100001;
|
|
memory[25] <= 9'b100101101;
|
|
memory[26] <= 9'b011000001;
|
|
memory[27] <= 9'b011001001;
|
|
memory[28] <= 9'b101000010;
|
|
memory[29] <= 9'b101001100;
|
|
memory[30] <= 9'b010110111;
|
|
memory[31] <= 9'b110010001;
|
|
memory[32] <= 9'b101110001;
|
|
memory[33] <= 9'b101000001;
|
|
memory[34] <= 9'b101001111;
|
|
memory[35] <= 9'b001001000;
|
|
memory[36] <= 9'b011000001;
|
|
memory[37] <= 9'b101000000;
|
|
memory[38] <= 9'b101110111;
|
|
memory[39] <= 9'b000000000;
|
|
|
|
|
|
end
|
|
|
|
|
|
always@(address)begin
|
|
readData <= memory[address];
|
|
end
|
|
endmodule
|
|
|
|
|
|
module instructionMemory_tb();
|
|
reg clk;
|
|
reg [8:0] address;
|
|
wire [8:0] readData;
|
|
|
|
initial begin
|
|
clk = 1'b0;
|
|
end
|
|
always begin
|
|
#5 clk = ~clk; // Period to be determined
|
|
end
|
|
|
|
instructionMemory iM0(
|
|
.clk(clk),
|
|
.address(address),
|
|
.readData(readData)
|
|
);
|
|
|
|
initial begin
|
|
#10
|
|
address = 9'b000000000;
|
|
#5
|
|
address = 9'b000000001;
|
|
#5
|
|
address = 9'b000000010;
|
|
#5
|
|
address = 9'b000000011;
|
|
#5
|
|
address = 9'b000000100;
|
|
#5
|
|
address = 9'b000000101;
|
|
#5
|
|
address = 9'b000000111;
|
|
#5
|
|
$finish;
|
|
end
|
|
endmodule |