일단 캐시로 올리는 부분을 찾아야 되는데, a25_dcache.v에서 아래와 같은 부분이 있음.
generate
for ( i=0; i<WAYS;i=i+1 ) begin : rams
// Tag RAMs
`ifdef XILINX_SPARTAN6_FPGA
xs6_sram_256x21_line_en
`endif
`ifdef XILINX_VIRTEX6_FPGA
xv6_sram_256x21_line_en
`endif
`ifndef XILINX_FPGA
generic_sram_line_en
`endif
#(
.DATA_WIDTH ( TAG_WIDTH ),
.INITIALIZE_TO_ZERO ( 1 ),
.ADDRESS_WIDTH ( CACHE_ADDR_WIDTH ))
u_tag (
.i_clk ( i_clk ),
.i_write_data ( tag_wdata ),
.i_write_enable ( tag_wenable_way[i] ),
.i_address ( tag_address ),
.o_read_data ( tag_rdata_way[i] )
);
// Data RAMs
`ifdef XILINX_SPARTAN6_FPGA
xs6_sram_256x128_byte_en
`endif
`ifdef XILINX_VIRTEX6_FPGA
xv6_sram_256x128_byte_en
`endif
`ifndef XILINX_FPGA
generic_sram_byte_en
`endif
#(
.DATA_WIDTH ( CACHE_LINE_WIDTH) ,
.ADDRESS_WIDTH ( CACHE_ADDR_WIDTH) )
u_data (
.i_clk ( i_clk ),
.i_write_data ( data_wdata ),
.i_write_enable ( data_wenable_way[i] ),
.i_address ( data_address ),
.i_byte_enable ( {CACHE_LINE_WIDTH/8{1'd1}} ),
.o_read_data ( data_rdata_way[i] )
);
// Per tag-ram write-enable
assign tag_wenable_way[i] = tag_wenable && ( select_way[i] || source_sel[C_INIT] );
// Per data-ram write-enable
assign data_wenable_way[i] = (source_sel[C_FILL] && select_way[i]) ||
(write_hit && data_hit_way[i] && c_state == CS_IDLE) ||
(consecutive_write && data_hit_way_r[i]);
// Per data-ram idle_hit flag
assign data_hit_way[i] = tag_rdata_way[i][TAG_WIDTH-1] &&
tag_rdata_way[i][TAG_ADDR_WIDTH-1:0] == i_address[31:TAG_ADDR32_LSB] &&
c_state == CS_IDLE;
end
endgenerate
=========================================================
여기서 아래의 구문이 128 bits짜리 데이터를 캐쉬에 쓰는 구문임.
.i_write_data ( data_wdata ),
.i_write_enable ( data_wenable_way[i] ),
.i_address ( data_address ),
그렇기 때문에 이 부분에 wiring을 외부로 연결해서 aes 모듈에 연결시켜야됨.
그리고 아래의 byte_enable은 16'hffff이기에, 앞서 살펴봤던 것 같이 모든 데이터를 다 쓴다는 의미로
받아들일 수 있음.
그러면 여기서 한가지 고려해야할 사항이,
문제 1. data를 쓰고 ack 신호가 오기 전에 다른 data를 쓰라고 바뀌면 어떻게 할 것인가?
=> 그래서 이 문제 해결을 위해서는 queue를 만드는 방법이 제일 좋을 것 같음...
문제 2. write miss가 나면 어떻게 될 것인가? 메모리에서 데이터를 받아오고 다시 하나?
=> 상관 없을 것 같음... 무시 가능할듯.
==================================================================
그러면 해야할 stage로는, 일단 aes 모듈에
'수업 > 졸업논문-Amber' 카테고리의 다른 글
| 메모리에서 read하고 write 하는 것.. 버전1이라 생각하면 됨. (0) | 2015.10.13 |
|---|---|
| 모듈 만들기 (0) | 2015.09.15 |
| write시에 그냥 memory에서 read한 뒤 decrypt change encrypt해서 내보내도록 (0) | 2015.09.01 |
| core에서 나머지 96bits를 찾기 (0) | 2015.08.31 |
| mem file을 encrypt 했는데도 안되서 main_mem.v 확인결과 (0) | 2015.08.26 |