SOC FPGA论坛首页-ChipDebug-第21页

热门评论
ICMaker的头像-ChipDebugICMaker徽章-资深玩家-ChipDebug等级-LV3-ChipDebug版主3
这个比较简单,就不专门出教程了,我给你贴代码进行说明。 我们提供的DEMO4同时提供了OSC和PLL的用法示便。 评论图片-ChipDebug 1. ELF2 器件包含一个 CMOS 环形振荡器, 环形振荡器的输出可以作为全局时钟的输入, 也可以作为 PLL的参考时钟。 环形振荡器在全局时钟路径上, 插入的可配置分频器可以对 OSC 的频率进行 1-128 任意整数分频。 可以动态配置分频系数, 不使用时可以关闭 OSC 以节省功耗。环形振荡器中心频率 287MHz, 芯片个体之间频率误差较高, 误差范围达到 30%。 即 每一片EF2之间的频率可能在这个频率附近30%范围内,但可以校准。

	EF2_PHY_OSCDIV inst(
	.rstn(1), //复位,高有效
	.stdby(0), // 休眠,高有效
	.div(7'b000_0100), //分频系数
	.clko(clko)); //出来的时钟
它有一些注意事项: 1. OSC、 OSCDIV 输出可以接 PLL, 但不能直接 Fabric, 可以通过 GCLK 连接到 Fabric。 2. ELF2系列器件不建议使用OSC+PLL的组合方式, 建议使用内部的EF2_PHY_OSCDIV (rstn, stdby, div,clko)。我们的示例工程就是这么个用法。 3. OSC 输出时钟最大偏差在 30%以内, 对时钟精度要求较高的场景不建议使用。 2. 关于PLL的例化其实没有什么要说的,其实在我们的很多demo中都有PLL的用法, PLL的端口例表如下: 评论图片-ChipDebug 比较简单的如下:

	PLL u_pll(
		.refclk  ( clk_osc    ),  
		.reset   ( ~cnt_rst[7] ), 
		.psclk   ( clk_osc    ), 
		.psdown  ( S_psdown   ),
		.psstep  ( S_psstep   ),
		.psclksel( S_psclksel ),
		.extlock (            ),
		.psdone  ( S_psdone   ),
		.clk0_out( O_clk0     ),
		.clk1_out( O_clk1     )

);
而Demo4中的PLL代码由于进行了动态调相,所以看起来相对复杂。

wire clk_osc;
wire clko;
OSC_DIV u_oscdiv(.rstn(1), .stdby(0), .div(7'b000_0100), .clko(clko)); //58.47M

EF2_LOGIC_BUFG BUFG_inst(
.o(clk_osc),
.i(clko)
);

reg [7:0] rst_cnt;
always @(posedge clk_osc) if (!rst_cnt[7]) rst_cnt <= rst_cnt + 1'b1;

wire sys_rst_n;
wire clk100m, clk50m, clk12m;
osc_pll u_osc_pll(
        .refclk(clko),
        .reset(~rst_cnt[7]),
        .stdby(0),
        .extlock(sys_rst_n),
        .clk0_out(clk100m),
        .clk1_out(clk50m),
        .clk2_out(clk12m));
相较于上面主要是下面这几个端口的区别: 评论图片-ChipDebug
安路FPGA开发板核心板 Potato Pie V2.1 软件及资料更新帖(2023/10/15)-ChipDebug安路FPGA开发板核心板 Potato Pie V2.1 软件及资料更新帖(2023/10/15)-ChipDebug安路FPGA开发板核心板 Potato Pie V2.1 软件及资料更新帖(2023/10/15)-ChipDebug
+8
安路FPGA开发板核心板 Potato Pie V2.1 软件及资料更新帖(2023/10/15)-ChipDebug
这个串口实验对时序要求比较高,我首先测了一下内部晶振,改了一下频率参量,终于成功了评论图片-ChipDebug