Files
WMU-ECE-3570-Lab/lab2CA.srcs/sources_1/new/dataMemory.v
2019-03-24 18:55:49 -04:00

145 lines
4.0 KiB
Verilog

`timescale 1ns / 1ps
module dataMemory(
input wire clk, writeEnable,
input wire [8:0] address, writeData,
output reg [8:0] readData
);
reg [8:0] memory [512:0];
initial begin
//Equation Solver Memory
memory[0] <= 9'b000000001;
memory[1] <= 9'b000000010;
// String Compare Memory
// memory[0] <= 9'b000000100;
// memory[1] <= 9'b000001000;
// memory[2] <= 9'b000001100;
// memory[3] <= 9'b010101010;
// memory[4] <= 9'b000001111;
// memory[5] <= 9'b000000100;
// memory[6] <= 9'b000000000;
// memory[7] <= 9'b000000111;
// memory[8] <= 9'b000001111;
// memory[9] <= 9'b000000110;
// memory[10] <= 9'b000000010;
// memory[11] <= 9'b000000000;
// memory[12] <= 9'b000000000;
// memory[13] <= 9'b000000000;
// memory[14] <= 9'b000000000;
// memory[15] <= 9'b000000000;
// Bubble Sort Initial Memory
// memory[0] <= 9'b000011000;
// memory[1] <= 9'b000000000;
// memory[2] <= 9'b000100000;
// memory[3] <= 9'b010001000;
// memory[4] <= 9'b010010000;
// memory[5] <= 9'b010011000;
// memory[6] <= 9'b101001000;
// memory[7] <= 9'b101001010;
// memory[8] <= 9'b000100011;
// memory[9] <= 9'b101001001;
// memory[10] <= 9'b011001001;
// memory[11] <= 9'b001001000;
// memory[12] <= 9'b101001001;
// memory[13] <= 9'b011101000;
// memory[14] <= 9'b110001010;
// memory[15] <= 9'b000100001;
// memory[16] <= 9'b100110100;
// memory[17] <= 9'b000001001;
// memory[18] <= 9'b011001001;
// memory[19] <= 9'b000110010;
// memory[20] <= 9'b000000001;
// memory[21] <= 9'b000111010;
// memory[22] <= 9'b101011110;
// memory[23] <= 9'b011111100;
// Binary Search Memory
// memory[0] <= 9'b000000000;
// memory[1] <= 9'b000000111;
// memory[2] <= 9'b000000001;
// memory[3] <= 9'b000000010;
// memory[4] <= 9'b000000011;
// memory[5] <= 9'b000000100;
// memory[6] <= 9'b000000101;
// memory[7] <= 9'b000000110;
// memory[8] <= 9'b000000111;
// memory[9] <= 9'b000001000;
// memory[10] <= 9'b000001001;
// memory[11] <= 9'b000001010;
// memory[12] <= 9'b000001011;
// memory[13] <= 9'b000001100;
// memory[14] <= 9'b000001101;
// memory[15] <= 9'b000001110;
// memory[16] <= 9'b000001111;
// memory[17] <= 9'b000010000;
// memory[18] <= 9'b000010001;
// memory[19] <= 9'b000010010;
end
always@(address, clk, memory)begin
if(clk == 1'b1)begin
readData <= memory[address];
if(writeEnable == 1'b1)begin
memory[address] <= writeData;
end
else begin
memory[address] <= memory[address];
end
end
end
endmodule
module dataMemory_tb();
reg clk, writeEnable;
reg [8:0] address, writeData;
wire [8:0] readData;
initial begin
clk = 1'b0;
end
always begin
#5 clk = ~clk; // Period to be determined
end
dataMemory dM0(
.clk(clk),
.writeEnable(writeEnable),
.writeData(writeData),
.address(address),
.readData(readData)
);
initial begin
writeEnable = 1'b0;
address = 9'b000000000;
writeData = 9'b010101010;
#5
address = 9'b000000100;
writeData = 9'b010101010;
#10
writeEnable = 1'b1;
address = 9'b000000000;
writeData = 9'b010101010;
#10
address = 9'b000000001;
writeData = 9'b000001111;
#10
address = 9'b000000010;
writeData = 9'b000000101;
#10
address = 9'b000000011;
writeData = 9'b000000011;
#10
address = 9'b00000010;
writeData = 9'b000001101;
#5
$finish;
end
endmodule