반응형

프로젝트 생성부터 시작한다.

Project name : pll_clock

Project type : RTL

Source : X

 

 

프로젝트를 생성 후 pll_clock_top.v 파일을 생성해 준다.

코드는 다음과 같다.

module pll_clock_top(
    input i_Clk,
    input i_Rst,
    output reg [3:0] o_LED
    );
    
parameter CLOCK_FREQ = 1_000_000_00;
parameter COUNTER_MAX_CNT=CLOCK_FREQ/2 - 1;    
reg [31:0] cnt;
reg [1:0] led_on_number;
wire clk_out1;
    
clk_wiz_0 clk_wiz_0_inst(
    .clk_out1(clk_out1),
    .resetn(i_Rst),
    .locked(),
    .clk_in1(i_Clk)
);

always@(posedge clk_out1, negedge i_Rst) begin
    if(!i_Rst) begin
        cnt <= 32'd0;
        led_on_number <= 2'd0;
    end else begin
        cnt <= cnt + 1'b1;
        if(cnt == COUNTER_MAX_CNT) begin
            cnt <= 32'd0;
            led_on_number <= led_on_number + 1'b1;
        end
    end
end

always@(led_on_number) begin
    case(led_on_number)
        0: o_LED <= 4'b0001;
        1: o_LED <= 4'b0010;
        2: o_LED <= 4'b0100;
        3: o_LED <= 4'b1000;
        default: o_LED <= 4'b1111;
    endcase
end
   
endmodule

 

Project manager > IP catalog 를 클릭 해 준다.

IP(Intellectual Property) 는 재사용 가능한 블럭들을 지칭한다. 근데 이 블럭들은 기능을 가지고 있는 

 

 

그러면 다음과 같은 창이 나온다.

 

 

Search : clock

 

아래에 있는 FPGA Features and Design > Clocking > Clocking Wizard 를 더블클릭 해 준다.

 

 

다음과 같은 IP 생성창이 나온다.

 

 

 

Input Frequency 를 50Mhz 로 조정해 준다.

 

 

위의 Output Clocks 탭을 클릭하고 clk_out1이 100Mhz인지 확인한다.

 

 

이 창에서 휠 다운을 해서 Reset Type > Negetive 로 돌려준다.(Active low)

 

 

OK 를 눌러 생성한다.

 

 

OK > 다음과 같은 창이 나온다.

 

 

이 정보가 생성이 된다고 알려주는데 그냥 generate 시킨다.

생성을 다하면 다음과 같은 창이 나오고 OK 눌러준다.

 

 

그럼 소스에 IP가 추가되어 있는 것을 볼 수 있다.

 

다음 사진과 같이 빨간 원을 친 부분을 누르면

 

 

 

이런 창이 뜨는데, OK를 눌러준다. 그러면 아래에 clk_wiz_0이 생기는걸 볼 수 있다(위 사진과 같음)

생성된 clk_wiz_0.v 파일을 열어본다.

 

 

자동 생성된 clk_wiz_0 모듈을 볼 수 있다.

이 모듈은 submodule 로 clk_wiz_0_clk_wiz 를 받는다.

그리고 우리가 설정한 대로 input 50Mhz clock 을 output 100Mhz clock 으로 늘려주는 역할을 한다.

 

모듈을 상세하게 더 알아보고 싶으면 submodule 을 클릭해 보면 된다.

 

반응형

+ Recent posts