SparkRoad测评(5)-时钟系统与IP资源引用
[复制链接]
对于fpga的芯片很多都内置了一些IP资源,本期测试用来验证SparkRoad的时钟系统和如何引用内置的PLL资源。
- module ledflash(clk,led,x);
-
- input clk;
- output led;
- output x;
- wire sreset;
- wire sstdby;
- wire srefclk;
- wire sclk;
-
- reg [23:0] counter;
- reg led;
- assign sreset=1'b0;
- assign sstdby=1'b0;
- assign x=1'b0;
- assign sclk=clk;
-
- pllclk pll(
- .refclk(clk),
- .reset(sreset),
- .stdby(sstdby),
- .clk0_out(srefclk),
- .extlock()
- );
-
- always @(posedge srefclk)
- if (counter == 12000000)
- begin
- counter <= 0;
- led <= !led ;
- end
- else
- counter <= counter + 1'b1;
-
- endmodule
-
上面这段程序是将外接的clk,引入到硬件pll中,将24M的频率通过内置的PLL硬件倍频到100M的过程。
首先第一步、建立主模块,这里有个坑:先不要写代码或者先不要写模块引用代码。
第二步,向过程中进入IP,也就是引用硬件PLL,菜单 Tool-> IP Generator
选择默认 create a new IP Core
给定文件名称
选择PLL内核,当然还有其它的内核。这里我根据需要选择pll
这里的输入时钟为24.00000000M,其它默认
这个我需要的频率是100M,直接next就可以生成IP了
这里就是生成好的ip了,这是注意:这时需要进行‘综合’,而不是编写引用代码,如果这时马上编写引用代码,就会出现很多的‘综合’错误!!!,不管你的代码是如何的正确,这里就是我说的坑。
第三步,综合正确后,就可以引用该模块了。
- wire sreset;
- wire sstdby;
- wire srefclk;
- wire sclk;
-
- reg [23:0] counter;
- reg led;
- assign sreset=1'b0;
- assign sstdby=1'b0;
- assign x=1'b0;
- assign sclk=clk;
-
- pllclk pll(
- .refclk(clk),
- .reset(sreset),
- .stdby(sstdby),
- .clk0_out(srefclk),
- .extlock()
- );
-
我使用四个中间变量 sreset; sstdby; srefclk; sclk;和模块连接。
这里注意rest和stdby的信号都必须为低电平,以后将clk,也就是与晶振连接的clk引脚。输入给模块的refclk,模块输出为clk0_out引脚,就可以通过srefclk取出信号。
- always @(posedge srefclk)
- if (counter == 12000000)
- begin
- counter <= 0;
- led <= !led ;
- end
- else
- counter <= counter + 1'b1;
-
这时,就可以看到原来使用24M的led闪烁的速度变快了。说明引用成功了。
|