Clock Control

RTL 2011. 2. 10. 11:34

SoC design을 하다보면 power consumption을 줄이기 위하여 system의 일부분의 clock을 죽여주거나 clock frequency를 바꾸어주어야 하는 경우가 있다.
이러한 경우 simulation 상에서는 아래와 같이
clock을 clock enable 또는 clock select signal을 통해서 단순히 선택해주게 하는 방법을 써도 되지만

assign clk = clk_sel ? clk1 : clk2

실제 back end 까지 진행이 된다면 단순한 multiplexor를 통해 clock을 선택해 주는 것은 timing에 매우 치명적인 오류를 가져다 줄 수 있다.
그래서 foundery에서 제공한 library의 clock mux module을 가지고 clock multiplexing을 하여야만 한다.
예)

ifdef ASIC

// synopsys dc_script_begin
/
/    set_dont_touch uInstance_Name
// synopsys dc_script_end

      SEN_MUX2_2 uInstance_Name (.X(clk), D0(clk1), .D1(clk2), .S( clk_sel);

`else

      assign clk = clk_sel ? clk1 : clk2;

`endif

위와 같이 RTL을 작성하면,
만약 back end를 진행하는 상황이라면 ASIC이라는 definition이 선헌해주어 foundary에서 제공한 library의 SEN_MUX2_2 (clock multiplexor, 이는 techonology와 foundery에 따라 다르므로 찾아서 바꾸어주어야 한다.) 를 instantiation하여 clock muxing을 해주고,
일반 simulation에서는 ASIC이라는 definition을 선언해주지 않음으로써 단순히 assign 문을 실행하게 된다.

'RTL' 카테고리의 다른 글

Simulation 자동 종료하기  (0) 2011.02.11
Dump 받기  (0) 2011.02.11
AXI narrow write operation  (0) 2010.11.24
SystemVerilog Syntax vi Plug-in  (0) 2010.06.14
Testbench 작성시 @(posedge CLK)의 유의 사항  (0) 2010.05.12
Posted by sunshowers
,