| 85 | | |
| 86 | | http://galaxy.u-aizu.ac.jp/comparch2014/test_mem.v |
| | 85 | {{{ |
| | 86 | `timescale 1ns/1ps |
| | 87 | `include "Registers.v" |
| | 88 | `include "Memory.v" |
| | 89 | `include "ALU.v" |
| | 90 | |
| | 91 | module MemTest; |
| | 92 | // for Memory |
| | 93 | reg [31:0] address; |
| | 94 | reg [31:0] write_data; |
| | 95 | reg write_enable, read_enable; |
| | 96 | reg ck; |
| | 97 | wire [31:0] read_data; |
| | 98 | |
| | 99 | // for Registers |
| | 100 | reg [4:0] read_adr1_reg, read_adr2_reg, write_adr_reg; |
| | 101 | reg [31:0] write_data_reg; |
| | 102 | reg write_enable_reg; |
| | 103 | reg clear_reg; |
| | 104 | wire [31:0] read_data1_reg, read_data2_reg; |
| | 105 | |
| | 106 | // for ALU |
| | 107 | reg [31:0] A, B; |
| | 108 | reg [3:0] ALUop; |
| | 109 | wire Zero; |
| | 110 | wire [31:0] Result; |
| | 111 | |
| | 112 | Memory mem(address, write_data, read_data, write_enable, read_enable, ck); |
| | 113 | |
| | 114 | Registers regs(read_adr1_reg, read_adr2_reg, write_data_reg, write_enable_reg, write_adr_reg, |
| | 115 | ck, clear_reg, |
| | 116 | read_data1_reg, read_data2_reg); |
| | 117 | |
| | 118 | ALU alu(A, B, ALUop, Result, Zero); |
| | 119 | |
| | 120 | initial |
| | 121 | begin |
| | 122 | $dumpfile("MemTest.vcd"); |
| | 123 | $dumpvars(0, MemTest); |
| | 124 | |
| | 125 | // data segment |
| | 126 | Mem.cell['h00005000] = 32'h0000000a; |
| | 127 | Mem.cell['h00005004] = 32'h0000000b; |
| | 128 | Mem.cell['h00005008] = 32'h00000000; |
| | 129 | Mem.cell['h00005010] = 32'h00000000; |
| | 130 | Mem.cell['h00005014] = 32'h00000000; |
| | 131 | Mem.cell['h00005018] = 32'h00000000; |
| | 132 | |
| | 133 | #0 |
| | 134 | ck = 1'b1; |
| | 135 | clear_reg = 1'b1; |
| | 136 | |
| | 137 | read_enable = 1'b0; |
| | 138 | address = 32'h00000000; |
| | 139 | write_enable_reg = 1'b0; |
| | 140 | write_adr_reg = 5'b00000; |
| | 141 | write_data_reg = 32'h00000000; |
| | 142 | |
| | 143 | #110 |
| | 144 | clear_reg = 1'b0; |
| | 145 | |
| | 146 | #190 // read memory at 0x5000 |
| | 147 | read_enable = 1'b1; |
| | 148 | address = 32'h00005000; |
| | 149 | |
| | 150 | #100 // write data to $v0 and read memory at 0x5004 |
| | 151 | write_enable_reg = 1'b1; |
| | 152 | write_adr_reg = 5'b00010; |
| | 153 | write_data_reg = read_data; |
| | 154 | |
| | 155 | #100 |
| | 156 | read_enable = 1'b0; |
| | 157 | write_enable_reg = 1'b0; |
| | 158 | |
| | 159 | #100 |
| | 160 | read_adr1_reg = 5'b00010; |
| | 161 | |
| | 162 | #100 |
| | 163 | $display("$v0 = %x",read_data1_reg); |
| | 164 | |
| | 165 | #2000 |
| | 166 | |
| | 167 | $finish; |
| | 168 | end // initial begin |
| | 169 | |
| | 170 | always #50 ck = ~ck; |
| | 171 | endmodule |
| | 172 | }}} |