今天研究Diamond的IPcore 的使用,以PLL IP为例研究了,终于在开发板上测试成功了。
首先使用编写一个LED程序:
module testcpld
(
input a,
input x_clk,
output[67:0] test_point,
output[1:0] led
);localparam TIME1MHZ_DIV = 40000_000;
localparam TIME1MHZ_DIV2 = 40000_000;//mypll __ (.CLKI( ), .CLKOP( ));
assign test_point={68{1'b1}};
wire sys_clk;
assign sys_clk =x_clk;
//defparam OSCH_inst.NOM_FREQ = "38.00";
//OSCH OSCH_inst(
//.STDBY(1'b0), // 0=Enabled, 1=Disabled // also Disabled with Bandgap=OFF
//.OSC(sys_clk),
//.SEDSTDBY()
//); // this signal is not required if not // using SED
reg[31:0] led0_blink_count,led1_blink_count;
always @(posedge clkled)
begin
if(led0_blink_count == TIME1MHZ_DIV)
led0_blink_count <= 0;
else
led0_blink_count <= led0_blink_count+ 1'd1;
endalways @(posedge sys_clk)
begin
if(led1_blink_count == TIME1MHZ_DIV2)
led1_blink_count <= 0;
else
led1_blink_count <= led1_blink_count+ 1'd1;
endreg[1:0] led_temp;
assign led = led_temp;
always @(posedge clkled)
begin
if(led0_blink_count == TIME1MHZ_DIV)
led_temp[0] <= ~led_temp[0];
else
led_temp[0] <= led_temp[0];
endalways @(posedge sys_clk)
begin
if(led1_blink_count == TIME1MHZ_DIV2)
led_temp[1] <= ~led_temp[1];
else
led_temp[1] <= led_temp[1];
endwire lockled;
wire clkled;
mypll mypll(
.CLKI(sys_clk),
.CLKOP(clkled)
);
endmodule
运行 IPexpress,进行PLL的如下设置,即10分频。
然后在input中添加.ipx 文件或.v 文件即可。
下载使用RAM 的bit 文件下载,发现可以分频的。
备注:
其中调试过程中遇到代码错误,不能编译通过,后来发现下面代码错误。
reg led_temp[1:0];
修改成 reg [1:0] led_temp; 即pass。
看来是受C的影响。