飞泉

【红色飓风Nano二代测评】DCM PLL 时钟简单应用--led流水灯

0
阅读(1962)


前些天玩了一下DCM PLL IP的配置,实现了时钟分频。这里简要讲述一下xilinx DCM IP的配置方法和简单的应用。步骤如下:

1:打开ISE,新建一个新的project

2:next,选择器件类型和封装。

3:next,finish。

4:给project添加文件,首先添加IP核文件。右键点击工程,新建文件,new source.出现如下添加文件类型选项


5:点击 IP core generator & architecture wizard,并且在file name 里面写上需要写的 IP核文件的名称。点击 next;出现如下图



6:选择需要的IP核

7:点击next,finish。出现如下图(此时开始配置IP核):

8:由于我们的时钟输入的是50MHz 所以,在Inpur Freq 要修改位 50。点击next,output Freq 设置为5,phase 设置为0,Duty cycle 设置为 50%。只需要一个输出值,当然如果需要的话,可以设置多个输出值。

9:点击next,

10,点击next,直到finish。

11:点击 dcm ip核,然后点击core generator前面的“+”号,双击View HDL Instantiation TemplateISE 右侧窗口,可以看到例化该核的Verilog 语句。

12:继续添加 new source, verilog module 和 implementation constraint file。代码如下:

dcm_demo.v:

module dcm_demo(
	clk,
	rst,
	led_light
	);

input clk;
input rst;

output[7:0] led_light;

wire clk_5m;

dcm dcm(
	.CLK_IN1(clk),
	.CLK_OUT1(clk_5m),
	.RESET(!rst),
	.LOCKED()
	);

wire[7:0] led_light;

led u(
	.clk(clk_5m),
	.rst(rst),
	.led(led_light)
	);

endmodule




Led.v:

module led(
	clk,
	rst,
	led
	);

input clk;
input rst;

output [7:0]led;

parameter  T50M=5_000_000;

reg [26:0] count;
reg [7:0] led;

always @(posedge clk or negedge rst) begin
	if (!rst) begin
		count<=26'b0;
		led<=8'b00000001;
	end
	else if (count==T50M) begin
		count<=26'b0;
		led<={led[6:0],led[7]};
	end
	else begin
		count<=count+1'b1;
		led<=led;
	end
end

endmodule




Dcm_demo.ucf:

Net clk   LOC =P8 ;
NET rst   LOC =P7  ;

NET "led_light<0>" LOC = M12;
NET "led_light<1>" LOC = L12;
NET "led_light<2>" LOC = L13;
NET "led_light<3>" LOC = M14;
NET "led_light<4>" LOC = R12;
NET "led_light<5>" LOC = T12;
NET "led_light<6>" LOC = T13;
NET "led_light<7>" LOC = T14;




13: 右击project工程名, 点击 implement top module。

点击如图,产生bit文件并且通过仿真器 下载二进制文件到xilinx 芯片:

就可以看到led灯流起来了。如图: