【红色飓风Nano二代测评】DCM PLL 时钟简单应用--led流水灯
0赞前些天玩了一下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 Template,在ISE 右侧窗口,可以看到例化该核的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灯流起来了。如图: