Changes between Initial Version and Version 1 of Ex06課題2015


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

--

Legend:

Unmodified
Added
Removed
Modified
  • Ex06課題2015

    v1 v1  
     1トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2015 
     2 
     3= メモリとレジスタ =  
     4 
     5 
     6= 課題1 レジスタの利用方法 = 
     7以下のテストベンチは、レジスタファイルをインスタンス化して、$a0レジスタに"0xffffffff"を書き込んでいる。 
     8{{{ 
     9`timescale 1ns/1ps 
     10`include "Registers.v" 
     11 
     12module  RegTest; 
     13   reg [4:0]  read_adr1,  read_adr2,  write_adr; 
     14   reg [31:0] write_data; 
     15   reg        write_enable; 
     16   reg        ck,clear; 
     17   wire [31:0] read_data1, read_data2; 
     18 
     19   Registers regs(read_adr1, read_adr2, write_data, write_enable, write_adr, ck, clear, read_data1, read_data2); 
     20 
     21   initial 
     22     begin 
     23        $dumpfile("RegTest.vcd"); 
     24        $dumpvars(0, RegTest); 
     25 
     26 
     27        #0 
     28        ck = 1'b1; 
     29        clear = 1'b1; 
     30 
     31        #110 
     32        clear = 1'b0; 
     33 
     34        #190 
     35        read_adr1 = 5'b00100; 
     36 
     37        #100 
     38        write_enable = 1'b1; 
     39        write_adr  = 5'b00100; 
     40        write_data = 32'hffffffff; 
     41        $display("%x %x",read_adr1, read_data1); 
     42 
     43        #100 
     44        write_enable = 1'b0; 
     45        $display("%x %x",read_adr1, read_data1); 
     46 
     47        #900 
     48 
     49        $finish; 
     50     end // initial begin 
     51 
     52   always #50 ck = ~ck; 
     53endmodule 
     54}}} 
     55 
     56これを参考にして、以下のテーブルに示すように、レジスタに値の値を書き込んで、読み出すテストベンチを作成し実行したうえで、クロック信号(ck)、読み出しているレジスタのアドレス(read_adr1)と読み出し結果(read_data1)の波形を確認しなさい。波形には、この三つの信号のみを表示すること。表示する順番は、小さいアドレスから大きいアドレスになるようにすること。なお、表示している信号名がわかるようにすること。 
     57 
     58||レジスタ|| 値|| 
     59|| $sp ||  0xfffff     || 
     60|| $v0 ||  0xfafa      || 
     61|| $v1 ||  0x1010      || 
     62|| $t0 ||  0xffffffff  || 
     63|| $t1 ||  0xaaaaaaaa  || 
     64|| $ra ||  0x98765432  || 
     65|| $t2 ||  0x98765432  || 
     66|| $t3 ||  0x12121     || 
     67 
     68== 波形の例 ==               
     69以下のように各レジスタにデータを書き込んだ場合: 
     70 
     71|| $at ||  0xf      || 
     72|| $v0 ||  0xff     || 
     73|| $v1 ||  0xfff    || 
     74|| $a0 ||  0xffff   || 
     75 
     76実行結果の波形の例: 
     77 
     78[[Image(http://galaxy.u-aizu.ac.jp/comparch2014/image/comparch_ex6_reg.png)]] 
     79 
     80 
     81= 課題2 メモリの利用方法 = 
     82以下のテストベンチファイルでは、レジスタファイルとメモリとALUをインスタンス化し、テストするためのテンプレートである。 
     83 
     84http://galaxy.u-aizu.ac.jp/comparch2014/test_mem.v 
     85 
     86実行結果は以下のようになるはずである。 
     87{{{ 
     88% ncverilog test_mem.v 
     89 
     90....省略 
     91 
     92ncsim> run 
     93$v0 = 0000000a 
     94 
     95....省略 
     96}}} 
     97 
     98ちなみに、以下の部分でメモリからデータを読み出し、レジスタファイル($v0)に書き込んでいる。 
     99{{{ 
     100        #190 // read memory at 0x5000 
     101        read_enable = 1'b1; 
     102        address = 32'h00005000; 
     103 
     104        #100 // write data to $v0 
     105        write_enable_reg = 1'b1; 
     106        write_adr_reg    = 5'b00010; 
     107        write_data_reg   = read_data; 
     108 
     109        #100 
     110        read_enable = 1'b0; 
     111        write_enable_reg = 1'b0; 
     112}}} 
     113 
     114実行結果の波形の例: 
     115 
     116[[Image(http://galaxy.u-aizu.ac.jp/comparch2014/image/comparch_ex6_mem.png)]] 
     117 
     118このテンプレートを元にして、アドレス0x5000と0x5004にあるデータを演算した結果を、再びメモリに書き込むテストベンチを作成せよ。格納アドレスと演算結果の対応は以下の通りとする。特に、レジスタへの読み書き、演算をして結果をメモリに書き込む部分の波形を確認すること。 
     119 
     120|| 0x5008 || 加算      || 
     121|| 0x500c || 減算      || 
     122|| 0x5010 || AND演算   || 
     123|| 0x5014 || 3*"0x5000のデータ"+"0x5004のデータ" ||