1. write를 할 시에


10clk delay를 주는데 그 동안 ack는 계속 0이 된다. 그리고 write를 주고 계속 0이다가 

메모리에서 받았을 때, ack를 준다. 몇clk주는지는 모름.


2. read를 할 시에


메모리에서 데이터와 함께 ack가 오는데 그게 각각 몇clk씩 오는지를 모른다...


//////////////////////////////////////////////


3. write -> read로 바뀔 시에


만약 write를 하고 ack를 받아서 바로 read로 바뀐 다면...


=>일단, write상태에서 read로 바뀌는 그 즉시 ack를 1clk동안 1->0으로 바꾸어 보자...(1clk만..)

****성공.. 바로 0으로 바뀜..


/////////////////////////////////////////////


4. read -> write로 바뀔 시에


만약 read 상태에서 ack를 받아서 바로 write로 바뀔 시에..이것도 o_wb_we_i가 1->0으로 바뀔 때에

즉시 ack를 0으로 1clk동안 바꾸어 보자..그래도 되는가..


만약 3과 4가 가능하다면 o_wb_we_i가 1에서 0으로 바뀔 때

assign i_wb_ack_o = o_wb_we_i ? i_wb_ack_i : ack_saved[9]로 만들 수 있다.

*****성공했음..


*** 실험했던 코드

/* Experiment1 */

wire    ex_ack;

assign  ex_ack          = changed_timing ? 1'd0 : i_wb_ack_i;

reg     changed_timing  = 'd0;

reg     brief           = 'd0;


always @(i_clk)

begin

        if(~o_wb_we_i)

                brief   <=      1'd1;

        else

                brief   <=      1'd0;

end


always @(i_clk)

begin

        if(o_wb_we_i && brief == 1'd1)

                changed_timing  <=      1'd1;

        else

                changed_timing  <=      1'd0;

end 


assign  i_wb_ack_o  =  changed_timing ? 1'd0 : i_wb_ack_i;




////////////////////////////////////////////


자 위에 3, 4가 되면 ack_saved에는, o_wb_we_i == 1일 때는 계속 0을 집어넣어 줘야된다..

그리고 read시에 dat와 ack둘다 저장해서 넣어주는 식으로 해야된다....근데 ack가 계속 1이 들어가는 형식이 생길 수도 있음... 이걸

ack를 몇클락 넣어야 되는지 조정을 좀 해줘야된다.



ack를.. 10clk 늘이는데, ack를 10clk delay를 주긴 할 것인데, diff가 1이 되면 ack를 0으로 만들어 줄 수도 있겠다..

그렇다면 할 것은..

일단 o_wb_we_i == 1일 때는 ack_saved에 계속 0을 넣어준다. 그러다가 

o_wb_we_i == 0이 될 때에 ack_saved[9]를 ack output에 연결해 준다.


***이렇게만 해주면 안된다....


이게 안되면, diff가 오면(read할 주소가 달라지면) ack_saved에 모두 0을 넣어준다.

*** 됬음.

+ Recent posts