- RAM에서 read 시에
rd_data = ram[addr_d1[27:2]];
wb_rdata128 <= rd_data
o_wb_dat = wb_rdata128;
이라 아무런 이상이 없음.
- RAM에 write 시에
ram[addr_d1[27:2]] <= masked_wdata;
masked_wdata는 8bit씩 잘라서 wr_mask[i]의 상태에 따라 들어감 아래와 같다.
wr_mask = ~i_wb_sel;
for(i = 0 ; i < 16 ; i ++)
assign masked_wdata = wr_mask[i] ? rd_data[8*i + 7 : 8*i] : wr_data[8*i + 7 : 8*i];
이렇게 되어있어서 encrypted data는 부분별로 다른 것이 들어가버리면 이상한 값이 되어버린다.
이대로 쓰려면 i_wb_sel이 항상 16bit 전부 1이어야 되므로
a25_aes.v 파일에서
o_wb_sel_o = 16'hffff;
이렇게 고정시켜보니 앰버 실행시 맛이 가버림..
-그래서 코어쪽에서 selective하게 write하지 않고 그냥 무조건 we를 ffff가 되게 하기 위해서 따라 올라가면
wishbone.v에서는 wbuf_be로 쓰고있고
wishbone_buf.v에서는 i_be로 쓰고 있고
그것은 다시 wishbone.v에서 i_portx_be로 연결이 되어있다.
그것은 a25_core.v에서 dcache_wb_byte_enable로 연결되어 있고
그것은 a25_mem.v에 o_wb_byte_enable로 연결이 되어있다.
a25_mem.v에서는
============================================================================
assign o_wb_byte_enable = i_daddress[3:2] == 2'd0 ? {12'd0, i_byte_enable } :
i_daddress[3:2] == 2'd1 ? { 8'd0, i_byte_enable, 4'd0} :
i_daddress[3:2] == 2'd2 ? { 4'd0, i_byte_enable, 8'd0} :
{ i_byte_enable, 12'd0} ;
여기서 만약 이대로라면 16'hffff인 상태가 될 수 없다...
i_byte_enable은 4bit짜리 wire이다...
이래서 32bit로 옮긴 다음에,
assign o_wb_write_data = {4{i_write_data}}; 이런 식으로 했던 것이다.
고로, 128bit로 옮기고 저장하지만 32bit를 제외한 것은 모두 dummy였다.
'수업 > 졸업논문-Amber' 카테고리의 다른 글
| write시에 그냥 memory에서 read한 뒤 decrypt change encrypt해서 내보내도록 (0) | 2015.09.01 |
|---|---|
| core에서 나머지 96bits를 찾기 (0) | 2015.08.31 |
| 10clk delay에다가 aes를 넣을 방법 (0) | 2015.08.16 |
| read시 10clk delay 어떻게 추가했는지 (0) | 2015.08.16 |
| 각각 따로 Implement할 시에 생기는 일 (0) | 2015.07.26 |