久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3183|回復: 0
打印 上一主題 下一主題
收起左側

全局時鐘--復位設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:104287 發表于 2016-1-31 04:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
簡單來說,就是利用雙觸發器將復位信號打慢一拍來保證穩定性
另外,亞穩態的形成,簡單來理解,就是異步操作中,建立時間和保持時間沒有符合要求所出現的異常狀態
另外,關鍵的關鍵,讀別人的代碼一定要有耐心,從代碼中去理解前人的思路

=========================================================

所謂亞穩態,是指“trecovery(recovery time <恢復時間>)指的是原本有效的異步復位信號釋放(對低電平有效的復位來說就是上跳沿)與緊跟其后的第一個時鐘有效沿之間所必須的最小時間。tremoval(removal time<去除時間>)指的是時鐘有效沿與緊跟其后的原本有效的異步復位信號變得無效之間所必須的最小時間。如果異步復位信號的上跳沿(以低電平有效為例)落在trecovery與tremoval的窗口之內,觸發器的輸出端的值將是不確定的,可能是高電平,可能是低電平,可能處于高低電平之間,也可能處于震蕩狀態),并且在未知的時刻會固定到高電平或低電平。這種狀態就稱為亞穩態。反映到仿真模型中,輸出端的值是不定態X。圖中tclk-q是觸發器時鐘端到Q端的延時,tMET是保證亞穩態不傳播到下一級所允許的亞穩態持續的最大時間。”
  個人理解:如果RST_n的釋放發生在靠近時鐘沿或者離時鐘沿很近的電,電路可能級沒有足夠的時間維持RST_n的值,也沒有足夠的時間維持D輸入端口的值,從而造成亞穩態,并通過最后一級與非門傳到Q端輸出。
同步復位:(復位信號的產生依賴于系統時鐘信號)
優缺點:更好的避免亞穩態,但是消耗更多的LE
時鐘起到了過濾復位信號小毛刺的作用
同步復位需要一個脈寬沿展器來保證復位信號有一定脈沖寬度,以確保時鐘的有效沿能采樣到
always@(posedge CLK)
begin
    if(!RST_n)
        b <= 0;
    else
        b <= a;
end
異步復位:(復位信號和系統時鐘信號相互獨立,可以發生在任何時候)
優缺點:消耗更少的LE,但是難以避免LE的消耗
always@(posedge CLK or negedge RST_n)
begin
    if(!RST_n)
        b <= 0;
    else
        b <= a;
end
因此,如果對復位信號的處理,能夠同步復位+異步復位,那將會是很完美,基于這樣的設計能夠避免亞穩態的發生,因為他讓RST_n信號的釋放再晚了一點(寄存器)
根據特權和eBoy的設計,我加之以深化,歸納了3中我們會用到的復位與亞穩態問題
(1)沒有PLL
(2)有一個PLL
(3)多個PLL
具體如下:
(1)沒有PLL
/********************************************************************
* File Name          : System_Ctrl
* Author             : Crazy Bingo
* Version            : Quartus II 9.1
* Date               : 2010/12/4
* Function             : 雙鎖相環系統異步復位
* Description        :
*********************************************************************/
module System_Ctrl0
(
    input         clk,        //FPAG輸入時鐘信號50MHz
    input         rst_n,        //系統復位信號,低有效
    output         sys_rst_n    //系統復位信號,低有效
);
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_nr2;
endmodule

(2)一個PLL
/********************************************************************
* File Name          : System_Ctrl
* Author             : Crazy Bingo
* Version            : Quartus II 9.1
* Date               : 2010/12/4
* Function             : 雙鎖相環系統異步復位
* Description        :
*********************************************************************/
module System_Ctrl1
(
    input         clk,        //FPAG輸入時鐘信號50MHz
    input         rst_n,        //系統復位信號,低有效
    output         sys_rst_n,    //系統復位信號,低有效
    output         clk_125,    //PLL1輸出125MHz時鐘
    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;
    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;            //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        
    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輸入時鐘,50MHz
    .c0(clk_125),        //PLL輸出125MHz時鐘        
    .c1(clk_65),        //PLL輸出125MHz時鐘(-3.5ns)        
    .locked(locked)        //PLL輸出有效標志位,高表示PLL輸出有效
);
endmodule
(3)多個PLL
/********************************************************************
* File Name          : System_Ctrl
* Author             : Crazy Bingo
* Version            : Quartus II 9.1
* Date               : 2010/12/4
* Function             : 雙鎖相環系統異步復位
* Description        :
*********************************************************************/
module System_Ctrl
(
    input         clk1,        //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        //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(!rst_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;
//----------------------------------------------
//系統復位信號產生,低有效,異步復位,同步釋放
//等待兩個鎖相環都輸出穩定的時候,系統釋放復位
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
        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
(
    .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




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天射影院 | 91看片官网 | 日日夜夜精品视频 | 日本精品久久久久久久 | 欧美精三区欧美精三区 | 日韩一区二区在线播放 | 日韩资源 | 天天综合91 | 亚洲永久精品国产 | 久久精品色欧美aⅴ一区二区 | 国产精品国产亚洲精品看不卡15 | 久久久999成人 | 在线日韩视频 | 日韩不卡一二区 | 成人免费在线视频 | 精品一区二区三区中文字幕 | 国产精品福利一区二区三区 | 久久久www成人免费精品 | 国产在线看片 | 国产乱码精品一区二区三区五月婷 | 精品毛片在线观看 | 国产午夜久久久 | 日日摸天天添天天添破 | 国产精品欧美精品日韩精品 | 成人免费看片 | 男人电影天堂 | 国产精品污污视频 | 台湾佬伊人 | 亚洲成人免费视频在线 | www.蜜桃av.com | 日韩不卡在线 | 一区二区三区免费 | 亚洲淫视频 | 91私密视频 | 国产一区二区视频在线 | 国产999精品久久久久久 | 操久久| 午夜在线小视频 | 中文字幕一区二区三区精彩视频 | 久久久91精品国产一区二区三区 | 97人人干 |