FPGA/Verilog study

[Verilog] 클럭 나눠서 원하는 시간 맞추기 (clock division)

섭섭입니다 2021. 5. 17. 16:40

 

사용보드 : zynq berry 보드

 

 

 

100M clk 1초에 100M번 진동하니 50M 진동할 때 LED를 반전시켜 주어서 0.5초 만큼의 시간 주기를 갖게한다.

 

 

< clk.led.v >

//0.5초 간격으로 LED 깜박이기 

`timescale 1ns/ 1ns

module CLK_LED (
    input CLK,
    input rst_n,
    output reg led
);

reg [25:0] count;

    always @ (posedge CLK, negedge rst_n) begin
    if(!rst_n) begin //rst_n 0
        led <=0;
	count <= 0;
    end else begin 
	    if(count==26'b10111110101111000010000000) begin // clk가 100M = 100.000.000 일때의 최대 값 
               led <= ~led;
   	       count <= 0;
            end
	    else         
	    count <= count +1;
	end
    end
    endmodule 

 

< clk_led_testbench.v >

`timescale 1ns/ 1ns

module clk_led_test();

reg clk,rst_n;
wire led;

CLK_LED chip_CLK_LED(clk,rst_n,led);

initial
begin
    clk  =0;
    rst_n = 0; #100;
    rst_n = 1; #100;
	
end

always
begin
     #50 clk = 1; 
     #50 clk = 0; 
end

endmodule