본문 바로가기

FPGA/개발

다수의 Clock domain을 사용하지 않는 방법

Revision history:

220928 최초 작성

 


참조:

https://web.mit.edu/6.111/www/f2017/handouts/L07a.pdf

 

 

 

위 그림과 같이 clock을 분주하여 여러개의 clock domain을 만들게되면 클럭마다 sync를 맞추기 어려워짐으로 timing 특성이 안좋아진다.

 

 

해결방법은 아래 그림과 같이 enb라는 신호를 만들어 enb가 1일때 동작을 기술하면 된다. 따라서 D-FF의 clock은 원래 사용하던 clk(clock domain은 1개)를 사용하면 된다.

always @(posedge clk) begin

   if(resetn == 1'b0) begin

      // 리셋 동작 기술

   end

   else if(enb8)begin

      // enb8이 1이 됐을대 동작 기술

   end

end

 


시뮬레이션 코드
RTL 코드

 

module div_clk(
input clk ,
input resetn
    );

reg [3:0] count;

always @(posedge clk) begin
   if(resetn == 1'b0) begin
      count <= 4'b0;
   end
   else begin
      count <= count + 4'b1;
   end
end
wire enb2 = (count[0] == 1'b1);
wire enb4 = (count[1:0] == 2'b11);
wire enb8 = (count[2:0] == 3'b111);
wire enb16 = (count[3:0] == 4'b1111);

endmodule

 

시뮬레이션 코드
테스트벤치

module tb_div_clk();


reg clk                                 ;
reg resetn                              ;

initial begin
clk = 1'b0;
forever begin
#5 clk = ~clk;
end
end

initial begin
resetn = 1'b0;
#100;
resetn = 1'b1;
end


div_clk DUT(
.clk (clk ),
.resetn (resetn )
);

endmodule

 

'FPGA > 개발' 카테고리의 다른 글

JESD204B: DL (Deterministic Latency)  (0) 2022.08.26
JESD204B: Data Link Layer  (0) 2022.08.26
JESD204B: Transport Layer  (0) 2022.08.23
JESD204B: Clock  (0) 2022.08.23
JESD204B: 장단점  (0) 2022.08.23