해결된 질문
작성
·
713
2
always @(*)
begin
// Address decoding for reading registers
case ( axi_araddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] )
4'h0 : reg_data_out <= slv_reg0;
4'h1 : reg_data_out <= slv_reg1;
4'h2 : reg_data_out <= slv_reg2;
4'h3 : reg_data_out <= mem0_q1[C_S_AXI_DATA_WIDTH-1:0]; // (lab12) from bram out
//4'h3 : reg_data_out <= slv_reg3;
4'h4 : reg_data_out <= slv_reg4;
4'h5 : reg_data_out <= slv_reg5;
4'h6 : reg_data_out <= slv_reg6;
4'h7 : reg_data_out <= slv_reg7;
4'h8 : reg_data_out <= slv_reg8;
4'h9 : reg_data_out <= slv_reg9;
4'ha : reg_data_out <= slv_rega;
4'hb : reg_data_out <= slv_regb;
4'hc : reg_data_out <= slv_regc;
4'hd : reg_data_out <= slv_regd;
4'he : reg_data_out <= slv_rege;
4'hf : reg_data_out <= slv_regf;
default : reg_data_out <= 0;
endcase
end
안녕하세요. 맛비님 LAB13 진행하면서 궁금한 점이 생겼습니다.
case ( axi_araddr [ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB] )
위 코드에서 ADDR_LSB = 2, 이고 OPT_MEM_ADDR_BITS = 1이기 때문에 다시 작성하게 되면, case ( axi_araddr [ 3 : 2 ] ) 이렇게 간략할 수 있습니다.
이렇게 되면 case 문으로 판단하는 변수는 2개의 Bit이지 않나요 ?? 근데 4bit의 값에 따라 (4'h0~4'hf) case 구문이 진행되면 어떻게 되는건지 잘 모르겠습니다 ,,
또, 0~15까지의 숫자를 2진수로 적었을 때, 아래와 같이 정리할 수 있습니다. 이렇게 됐을 때, axi_araddr [3] , [2] 의 bit를 가져왔을 때,
0,1,2,3 = 0 0
4,5,6,7 = 0 1
8,9,10,11 = 1 0
12,13,14,15 = 1 1
이렇게 값이 같은 구간이 생기지 않나요 ?? 아직 제가 잘 이해를 하지 못 한 것 같습니다. 조언 부탁드립니다,,, 휴일에도 항상 수고에 감사드립니다.
답변 1
0
안녕하세요 :)
어.. 지금보니까 박종호님 말씀해 주신 것이 맞네요
4개만 사용 가능합니다.
16개 모두 사용하려면 [5:2] 가 되어야합니다.
13장에서는 다음처럼 4개의 register 만 사용하니까, 예제 진행에는 문제가 없을 것으로 예상되어요.
해당 문제는 강의 밑에 적어 놓겠습니다.
즐공하세요 :)
감사합니다 이해 됐습니다 !!