对于有些按照一楼方法仍不能解决初始化问题,可以参照高云官方提供的的最新DDR例程(2025)进行修改。(适用于25K与60K器件)
PLL配置方法:
工程配置与例化:
[C#] 纯文本查看 复制代码 wire mdrp_inc;
wire [1:0] mdrp_op;
wire [7:0] mdrp_wdata;
wire [7:0] mdrp_rdata;
wire pll_stop;
reg pll_stop_r;
reg wr;
wire pll_lock;
reg [15:0] pll_lock_reg;
always @ (posedge clk50M)
pll_lock_reg <= {pll_lock_reg[14:0], pll_lock};
always@(posedge clk50M)
pll_stop_r <= pll_stop;
always@(posedge clk50M)
if(!pll_lock_reg[15])
wr <= 1'b0;
else if(~pll_stop & pll_stop_r)begin
wr <= 1'b1;
end
else if(pll_stop & (~pll_stop_r))begin
wr <= 1'b1;
end
else begin
wr <= 1'b0;
end
pll_mDRP_intf u_pll_mDRP_intf(
.clk(clk50M),
.rst_n(1'b1),
.pll_lock(pll_lock_reg[15]),
.wr(wr),
.mdrp_inc(mdrp_inc),
.mdrp_op(mdrp_op),
.mdrp_wdata(mdrp_wdata),
.mdrp_rdata(mdrp_rdata)
);
ddr_pll ddr_pll(
.lock(pll_lock), //output lock
.clkout0(), //output clkout0
.clkout2(loc_clk400m), //output clkout2
.mdrdo(mdrp_rdata), //output [7:0] mdrdo
.clkin(clk50M), //input clkin
.reset(!reset_n), //input reset
.pll_init_bypass(pll_lock_reg[15]), //input pll_init_bypass
.mdclk(clk50M), //input mdclk
.mdopc(mdrp_op), //input [1:0] mdopc
.mdainc(mdrp_inc), //input mdainc
.mdwdi(mdrp_wdata) //input [7:0] mdwdi
);
其余配置和一楼一致。
具体可参考如下例程(ACG525):
ch43_ov5640_ddr3_hdmi.zip
(4.54 MB, 下载次数: 80)
|