1、根据特权和eBoy的设计,我加之以深化,归纳了3中我们会用到的复位与亚稳态问题 (1)没有PLL (2)有一个PLL (3)多个PLL 具体如下: (1)没有PLL /******************************************************************** * File Name : System_Ctrl * Author : Crazy Bingo * Version : Quartus II 9.1 * Date : 2
2、010/12/4 * Function : 双锁相环系统异步复位 * Description : *********************************************************************/ module System_Ctrl0 ( input clk, //FPAG输入时钟信号50MHz input rst_n, //系统复位信号,低有效 output sys_rst_n //系统复
3、位信号,低有效 ); reg rst_nr1,rst_nr2; always@(posedge clk or negedge rst_n) begin if(!rst_n) rst_nr1 <= 0; else rst_nr1 <= 1; end always@(posedge clk or negedge rst_n) begin if(!rst_n) rst_nr2 <= 0; else rst_nr2 <= rst_nr1; end assign sys_rst_n = rst_
4、nr2; endmodule (2)一个PLL /******************************************************************** * File Name : System_Ctrl * Author : Crazy Bingo * Version : Quartus II 9.1 * Date : 2010/12/4 * Function : 双锁相环系统异步复位 * Description
5、 : *********************************************************************/ module System_Ctrl1 ( input clk, //FPAG输入时钟信号50MHz input rst_n, //系统复位信号,低有效 output sys_rst_n, //系统复位信号,低有效 output clk_125, //PLL1输出125MHz时钟
6、 output clk_65 //PLL2输出65MHz时钟 ); //---------------------------------------------- //PLL复位信号产生,高有效,异步复位,同步释放输出 wire pll_rst; //PLL复位信号,高有效 reg rst_r1,rst_r2; //DFF触发,稳定信号 always @(posedge clk or negedge rst_n) begin if(!rst_n) rst_r1 <= 1'b1;
7、else rst_r1 <= 1'b0; end always @(posedge clk or negedge rst_n) begin if(!rst_n) rst_r2 <= 1'b1; else rst_r2 <= rst_r1; end assign pll_rst = rst_r2; //---------------------------------------------- //系统复位信号产生,低有效,异步复位,同步释放 //等待两个锁相环都输出稳定的时候,系统释放复位 wire locked
8、 //PLL输出有效标志位,高表示PLL输出有效 wire sysrst_nr0 = rst_n & locked; //系统复位直到PLL有效输出; reg sysrst_nr1,sysrst_nr2; always @(posedge clk_125 or negedge sysrst_nr0) begin if(!sysrst_nr0) begin sysrst_nr1 <= 1'b0; sysrst_nr2 <= 1'b0; end
9、 else begin sysrst_nr1 <= 1'b1; sysrst_nr2 <= sysrst_nr1; end end assign sys_rst_n = sysrst_nr2; //---------------------------------------------- //例化PLL1产生模块 PLL1 PLL1 ( .areset(pll_rst), //PLL复位信号,高电平复位 .inclk0(clk), //PLL输入时钟
10、50MHz .c0(clk_125), //PLL输出125MHz时钟 .c1(clk_65), //PLL输出125MHz时钟(-3.5ns) .locked(locked) //PLL输出有效标志位,高表示PLL输出有效 ); endmodule (3)多个PLL /******************************************************************** * File Name : System_Ct
11、rl * Author : Crazy Bingo * Version : Quartus II 9.1 * Date : 2010/12/4 * Function : 双锁相环系统异步复位 * Description : *********************************************************************/ module System_Ctrl ( input clk1,
12、 //FPAG输入时钟信号50MHz input clk2, //FPAG输入时钟信号50MHz input rst_n, //系统复位信号,低有效 output sys_rst_n, //系统复位信号,低有效 output clk_125, //PLL1输出125MHz时钟 output clk_125_2, //PLL1输出125MHz时钟(-3.5ns) output clk_65
13、 //PLL2输出65MHz时钟 ); //---------------------------------------------- //PLL1,PLL2复位信号产生,高有效,异步复位,同步释放输出 wire pll_rst1; //PLL1复位信号,高有效 wire pll_rst2; //PLL2复位信号,高有效 reg rst_r1,rst_r2; //DFF触发,稳定信号 always @(posedge clk1 or negedge rst_n) begin if(!rs
14、t_n) rst_r1 <= 1'b1; else rst_r1 <= 1'b0; end always @(posedge clk1 or negedge rst_n) begin if(!rst_n) rst_r2 <= 1'b1; else rst_r2 <= rst_r1; end assign pll_rst1 = rst_r2; assign pll_rst2 = rst_r2; //---------------------------------------------- //系统复位信号产生,
15、低有效,异步复位,同步释放 //等待两个锁相环都输出稳定的时候,系统释放复位 wire locked1,locked2; //PLL输出有效标志位,高表示PLL输出有效 wire sysrst_nr0 = rst_n & locked1 & locked2; //系统复位直到PLL有效输出; reg sysrst_nr1,sysrst_nr2; always @(posedge clk_125 or negedge sysrst_nr0) begin if(!sysrst_nr0) begin
16、 sysrst_nr1 <= 1'b0; sysrst_nr2 <= 1'b0; end else begin sysrst_nr1 <= 1'b1; sysrst_nr2 <= sysrst_nr1; end end assign sys_rst_n = sysrst_nr2; //---------------------------------------------- //例化PLL1产生模块 PLL1 PLL1 (
17、 .areset(pll_rst1), //PLL1复位信号,高电平复位 .inclk0(clk1), //PLL1输入时钟,50MHz .c0(clk_125), //PLL1输出125MHz时钟 .c1(clk_125_2), //PLL1输出125MHz时钟(-3.5ns) .locked(locked1) //PLL1输出有效标志位,高表示PLL1输出有效 ); //例化PLL2产生模块 PLL2 PLL2 ( .areset(pll_rst2), //PLL2复位信号,高电平复位 .inclk0(clk2), //PLL2输入时钟,50MHz .c0(clk_65), //PLL2输出125MHz时钟 .locked(locked2) //PLL2输出有效标志位,高表示PLL2输出有效 ); endmodule






