Changes between Version 3 and Version 4 of Ex06課題2015


Ignore:
Timestamp:
May 18, 2015 10:26:24 AM (11 years ago)
Author:
nakasato
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex06課題2015

    v3 v4  
    8383= 課題2 メモリの利用方法 = 
    8484以下のテストベンチファイルでは、レジスタファイルとメモリとALUをインスタンス化し、テストするためのテンプレートである。 
    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 
     91module  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; 
     171endmodule 
     172}}} 
    87173 
    88174実行結果は以下のようになるはずである。