0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

DFF的電路工作原理與ModelSim仿真

GReq_mcu168 ? 來(lái)源:知芯情報(bào)局 ? 作者:知芯情報(bào)局 ? 2022-07-12 10:22 ? 次閱讀

之前的理解

最近在做設(shè)計(jì)的時(shí)候,發(fā)現(xiàn)之前對(duì)DFF的理解有些模糊,直到有次在實(shí)踐中遇到了一些問(wèn)題,含糊其詞的也不能解決問(wèn)題,于是乎就把DFF理解透徹透徹,畢竟這可是時(shí)序電路的基本概念。

對(duì)于DFF,之前理解的,DFF在時(shí)鐘的上升沿進(jìn)行對(duì)D端的數(shù)據(jù)采集,再下一個(gè)時(shí)鐘的上升沿來(lái)臨,Q端輸出D端采集的數(shù)據(jù)。能這么理解,是離開(kāi)書(shū)本時(shí)間太長(zhǎng)了,又觀(guān)察到了ModelSim仿真波形的影響,這么理解只是在描述仿真波形的表征現(xiàn)象,并非根本的原理。比如,在Modelsim仿真中,若通過(guò)DFF將數(shù)據(jù)組進(jìn)行延時(shí),用時(shí)鐘將寄存器進(jìn)行多個(gè)時(shí)鐘周期的同步,并帶有異步復(fù)位,對(duì)應(yīng)Verilog描述如下:

reg [7:0] data_d0, data_d1, data_d2;always @ ( posedge clk or negedge rst_n ) begin    if ( !rst_n ) begin        data_d0 <= 8'b0;        data_d1 <= 8'b0;    end else begin        data_d0 <= data_in;        data_d1 <= data_d0;    endend
對(duì)應(yīng)仿真波形如下:05ed7dcc-0119-11ed-ba43-dac502259ad0.png 此時(shí),時(shí)鐘上升沿和數(shù)據(jù)的變化沿都是對(duì)齊的,就產(chǎn)生了不正確的理解:通過(guò)Modelsim的wave窗口查看仿真波形的時(shí)候,如果將光標(biāo)打到時(shí)鐘的上升沿時(shí)候(比如心在光標(biāo)在Event 1時(shí)刻),對(duì)應(yīng)的數(shù)據(jù)data_in應(yīng)該是從8‘h00->8‘h0’1,可是光標(biāo)處data_in的數(shù)值顯示為8’h01。這樣,我就理解成了在Even1時(shí)刻,時(shí)鐘的上升沿對(duì)data_in(值為8’h01)進(jìn)行捕獲(接入到寄存器data_d0的D端),在下一個(gè)時(shí)鐘的上升沿到來(lái)的時(shí)刻(Event2時(shí)刻),寄存器data_d0的Q端數(shù)據(jù)發(fā)生改變(值為8’h01)。上述理解完全是根據(jù)波形描述出來(lái)的,是不全面的,是非本源的,是錯(cuò)誤的。

正確的理解

正確的理解應(yīng)該從DFF本身出發(fā),通過(guò)DFF的電路原理圖分析DFF的電路工作原理,了解時(shí)鐘上升沿之前和之內(nèi)部邏輯的如何變化,如何影響了從D端到Q端的數(shù)據(jù)輸出。

D鎖存器

在網(wǎng)上找到的很多電路圖講的都是D鎖存器,D鎖存器的電路為消除邏輯門(mén)控SR鎖存器不確定狀態(tài),在電路的S和R輸入端連接一個(gè)非門(mén)(Inverter),從而保證了S和R同時(shí)為0的條件,參考下圖由與非門(mén)構(gòu)成的D鎖存器電路圖:

06177e2e-0119-11ed-ba43-dac502259ad0.png

如果D信號(hào)在E=1期間發(fā)生變化,電路提供的信號(hào)路徑將使Q端信號(hào)跟隨D端變化。 在E由1跳變?yōu)?以后,鎖存器將鎖存跳變前瞬間D端的邏輯值,可以暫存1位二進(jìn)制數(shù)據(jù)。又因?yàn)橛蠭nverter的存在,SR鎖存器不會(huì)存在S&R==1的狀態(tài),所以就有了D鎖存器的捕獲數(shù)據(jù),E為0的時(shí)候會(huì)一直維持?jǐn)?shù)據(jù)狀態(tài)。此D鎖存器的功能表為:

06285c3a-0119-11ed-ba43-dac502259ad0.png

D觸發(fā)器

觸發(fā)和觸發(fā)器——時(shí)鐘脈沖邊沿作用下的狀態(tài)刷新稱(chēng)為觸發(fā),具有這種特性的存儲(chǔ)單元電路稱(chēng)為觸發(fā)器。D觸發(fā)器的電路圖如下(圖中的SR為了標(biāo)注有兩級(jí)SR鎖存器,方便邏輯推理):

064a9232-0119-11ed-ba43-dac502259ad0.png

以上升沿觸發(fā)為例,進(jìn)一步分析D觸發(fā)器在上升沿捕獲數(shù)據(jù),并維持鎖存的過(guò)程。當(dāng)D端為0,CLK為0時(shí),此時(shí)第一級(jí)的D鎖存器輸出為0,第二級(jí)SR鎖存器處于保持狀態(tài),詳情參考下圖:

065be6b8-0119-11ed-ba43-dac502259ad0.png

若繼續(xù)保持D端為0,CLK變?yōu)?時(shí),第一級(jí)D鎖存器處于保持狀態(tài),第二級(jí)的SR鎖存器將上一次的D值傳遞到Q端輸出,詳情參考下圖:

066de08e-0119-11ed-ba43-dac502259ad0.png

若在D端數(shù)值發(fā)生改變?yōu)?,且CLK仍然為1,第一級(jí)的D鎖存器仍處于保持狀態(tài),不會(huì)由于D端的變化而改變,更不會(huì)影響最后Q端的輸出。

06899aae-0119-11ed-ba43-dac502259ad0.png

D端繼續(xù)保持為1,CLK轉(zhuǎn)換為0,此時(shí)第一級(jí)D鎖存器的輸出為D端的數(shù)據(jù),Q端輸出仍為保持狀態(tài)。

06ab5626-0119-11ed-ba43-dac502259ad0.png

D端數(shù)據(jù)繼續(xù)保持為1,CLK轉(zhuǎn)換為高,第一級(jí)D鎖存器的結(jié)果就會(huì)輸出到Q端,Q端的值也就隨著CLK的上升沿,捕獲到了1,并進(jìn)行輸出到Q端;

從邏輯圖中,也可以看出DFF的數(shù)據(jù)捕獲和輸出都需要滿(mǎn)足一定的時(shí)間約束。比如:

    • 時(shí)鐘上升沿之前前后的數(shù)據(jù)要做夠穩(wěn)定,否則在時(shí)鐘跳變時(shí)刻,可能無(wú)法將其傳遞到Q端進(jìn)行輸出;

    • 時(shí)鐘上升沿捕獲數(shù)據(jù)之后,到Q端輸出也需要一定的時(shí)間,穩(wěn)定之后才能用于下一級(jí)工作;

DFF捕獲時(shí)鐘上升沿的D端數(shù)據(jù),并在Q端輸出,一直維持到下一時(shí)鐘上升沿到來(lái)之前。在此期間,D端的數(shù)據(jù)變化不會(huì)直接影響到Q端的輸出。

ModelSim仿真

將tb文件中的data_in輸入做5個(gè)單位的傳輸延時(shí),仿真結(jié)果見(jiàn)下圖:

06d16d66-0119-11ed-ba43-dac502259ad0.png ????????可以看出,在時(shí)鐘的上升沿前后數(shù)據(jù)是不發(fā)生變化的,對(duì)于寄存器做延時(shí)的時(shí)序理解為:

Event 1時(shí)刻:

    • 在Event 1時(shí)刻,時(shí)鐘上升沿之前data_in(值為8’h00),data_d0的D端為data_in(值為8’h00);

    • 在Event 1時(shí)刻,時(shí)鐘上升沿之后data_in(值為8’h00),data_d0的Q端為data_in(值為8’h00);所以在Event 1時(shí)刻,data_d0的Q端保持為8’h00不變;

Event 2時(shí)刻:
    • 在Event 2時(shí)刻,時(shí)鐘上升沿之后data_in(值為8’h01),data_d0的D端為data_in(值為8’h01);
    • 在Event 2時(shí)刻,時(shí)鐘上升沿之后data_in(值為8’h01),data_d0的D端為data_in(值為8’h01);所以在Event 2時(shí)刻,data_d0的Q端從8’h00變?yōu)?’h01;
Event 3時(shí)刻:
    • 在Event 3時(shí)刻,時(shí)鐘上升沿之后data_in(值為8’h02),data_d0的D端為data_in(值為8’h02);
    • 在Event 3時(shí)刻,時(shí)鐘上升沿之后data_in(值為8’h02),data_d0的D端為data_in(值為8’h02);所以在Even 3時(shí)刻,data_d0的Q端從8’h01變?yōu)?’h02;
可以看出在Event 1到Event 2一個(gè)時(shí)鐘周期內(nèi),data_d0的數(shù)值保持為8’h00;Event 1到Event 2一個(gè)時(shí)鐘周期內(nèi),data_d0的數(shù)值保持為8’h01;在時(shí)序上就表明了使用data_d0寄存器,通過(guò)clk對(duì)data_in進(jìn)行了1個(gè)時(shí)鐘周期的延時(shí)。在Modelsim仿真中,若數(shù)據(jù)的變化沿與時(shí)鐘的上升沿對(duì)齊,cursor在時(shí)鐘上升沿時(shí)刻,對(duì)應(yīng)的數(shù)據(jù)需要往后加入延時(shí),才能與實(shí)際電路情況相符合。

總結(jié)

DFF捕獲時(shí)鐘上升沿的D端數(shù)據(jù),并在Q端輸出,一直維持到下一時(shí)鐘上升沿到來(lái)之前。在此期間,D端的數(shù)據(jù)變化不會(huì)直接影響到Q端的輸出。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 時(shí)序電路
    +關(guān)注

    關(guān)注

    1

    文章

    114

    瀏覽量

    21652
  • ModelSim
    +關(guān)注

    關(guān)注

    5

    文章

    172

    瀏覽量

    47013
  • D鎖存器
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    3677
  • dff
    dff
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    3361

原文標(biāo)題:時(shí)序電路之DFF再理解

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Altera ModelSim 6.5仿真入門(mén)教程

    Altera ModelSim 6.5仿真入門(mén)教程,需要的可自行下載。 平臺(tái) 軟件:ModelSim-Altera 6.5e (Quartus II 10.0) Starter Edition 內(nèi)容 1 設(shè)計(jì)流程 使用
    發(fā)表于 08-15 15:40 ?255次下載
    Altera <b class='flag-5'>ModelSim</b> 6.5<b class='flag-5'>仿真</b>入門(mén)教程

    Modelsim的功能仿真和時(shí)序仿真

    ModelSim 進(jìn)行功能仿真,進(jìn)行功能仿真首先要檢查設(shè)計(jì)的語(yǔ)法是否正確;其次檢查代碼是否達(dá)到設(shè)計(jì)的功能要求。下文主要介紹仿真步驟和測(cè)試激勵(lì)的加載。
    發(fā)表于 11-13 15:35 ?8983次閱讀

    MODELSIM仿真(適合x(chóng)ilinx ISE)

    基于Xilinx ISE的modelsim仿真教程
    發(fā)表于 11-30 15:52 ?8次下載

    使用 ModelSim 進(jìn)行設(shè)計(jì)仿真詳解

    本章為ModelSim的初級(jí)教程,讀者讀完本章可以較為熟練的使用ModelSim進(jìn)行設(shè)計(jì)仿真,本章沒(méi)有也不可能涉及ModelSim的各個(gè)方面,要想全面的掌握
    發(fā)表于 12-24 18:29 ?0次下載

    modelsim仿真詳細(xì)過(guò)程(功能仿真與時(shí)序仿真

    modelsim仿真詳細(xì)過(guò)程(功能仿真與時(shí)序仿真).ModelSim不僅可以用于數(shù)字電路系統(tǒng)設(shè)計(jì)
    發(fā)表于 12-19 11:14 ?6.6w次閱讀
    <b class='flag-5'>modelsim</b><b class='flag-5'>仿真</b>詳細(xì)過(guò)程(功能<b class='flag-5'>仿真</b>與時(shí)序<b class='flag-5'>仿真</b>)

    仿真軟件ModelSim及其應(yīng)用,ModelSim仿真流程

    ModelSim不僅可以用于數(shù)字電路系統(tǒng)設(shè)計(jì)的功能仿真,還可以應(yīng)用于數(shù)字電路系統(tǒng)設(shè)計(jì)的時(shí)序仿真。 Mod
    的頭像 發(fā)表于 12-29 11:35 ?9454次閱讀

    Modelsim仿真教程Modelsim的基礎(chǔ)入門(mén)基礎(chǔ)教程免費(fèi)下載

    筆者一直以來(lái)都在糾結(jié),自己是否要為仿真編輯相關(guān)的教程呢?一般而言,Modelsim等價(jià)仿真已經(jīng)成為大眾的常識(shí),但是學(xué)習(xí)仿真是否學(xué)習(xí)Modelsim
    發(fā)表于 04-30 18:24 ?23次下載
    <b class='flag-5'>Modelsim</b><b class='flag-5'>仿真</b>教程<b class='flag-5'>Modelsim</b>的基礎(chǔ)入門(mén)基礎(chǔ)教程免費(fèi)下載

    基于ModelSim使用二聯(lián)合Quarus自動(dòng)仿真教程

    3 ModelSim工程實(shí)戰(zhàn)之自動(dòng)仿真說(shuō)完了 ModelSim 的使用流程,接下來(lái)我們將會(huì)對(duì)每個(gè)流程進(jìn)行詳細(xì)的操作演示,一步步、手把手帶領(lǐng)大家學(xué)習(xí)使用 ModelSim 軟件。首先我們
    的頭像 發(fā)表于 07-23 10:51 ?1947次閱讀
    基于<b class='flag-5'>ModelSim</b>使用二聯(lián)合Quarus自動(dòng)<b class='flag-5'>仿真</b>教程

    基于ModelSim使用四ModelSim手動(dòng)仿真教程

    4.1 新建仿真工程 在開(kāi)始動(dòng)手仿真之前,首先,我們需要?jiǎng)?chuàng)建一個(gè)文件夾用來(lái)放置我們的 ModelSim 仿真工程文件,這里我們就在之前創(chuàng)建的 Quartus 工程目錄下的 simula
    的頭像 發(fā)表于 07-23 11:10 ?3856次閱讀

    如何夾帶modelsim仿真波形白底黑線(xiàn)

    Modelsim使用技巧—波形白底黑線(xiàn)設(shè)置 在發(fā)表期刊或者論文時(shí),我們需要夾帶modelsim仿真波形在我們的論文里,在modelsim默認(rèn)模式下的波形一般是黑底綠線(xiàn)白字,如圖1所示
    的頭像 發(fā)表于 08-26 11:23 ?3774次閱讀

    ModelSim手動(dòng)仿真教程

    在開(kāi)始動(dòng)手仿真之前,首先,我們需要?jiǎng)?chuàng)建一個(gè)文件夾用來(lái)放置我們的 ModelSim 仿真工程文件,這里我們就在之前創(chuàng)建的 Quartus 工程目錄下的 simulation 文件夾中創(chuàng)建一個(gè)
    的頭像 發(fā)表于 07-11 10:58 ?4902次閱讀

    芯片設(shè)計(jì)之Modelsim仿真工具

    Modelsim仿真將設(shè)計(jì)以樹(shù)狀表示,設(shè)計(jì)中的每一個(gè)實(shí)體,每一個(gè)module、每一個(gè)進(jìn)程(always塊、initial塊等)在Modelsim仿真中以對(duì)象的形式展現(xiàn)。
    的頭像 發(fā)表于 08-12 15:04 ?2453次閱讀

    modelsim自動(dòng)化仿真實(shí)驗(yàn) 利用腳本實(shí)現(xiàn)modelsim自動(dòng)化仿真

    大家好!今天給大家?guī)?lái)的是modelsim自動(dòng)化仿真程序。我們?cè)诖a編寫(xiě)完成時(shí),通常都需要先進(jìn)行仿真,然后上板實(shí)驗(yàn)。但是如果我們每次仿真都要去新建一個(gè)工程,添加.v文件以及testbe
    的頭像 發(fā)表于 07-19 10:10 ?1440次閱讀
    <b class='flag-5'>modelsim</b>自動(dòng)化<b class='flag-5'>仿真</b>實(shí)驗(yàn) 利用腳本實(shí)現(xiàn)<b class='flag-5'>modelsim</b>自動(dòng)化<b class='flag-5'>仿真</b>

    Vivado調(diào)用Modelsim仿真

    Modelsim是十分常用的外部仿真工具,在Vivado中也可以調(diào)用Modelsim進(jìn)行仿真,下面將介紹如何對(duì)vivado進(jìn)行配置并調(diào)用Models
    的頭像 發(fā)表于 07-24 09:04 ?3152次閱讀
    Vivado調(diào)用<b class='flag-5'>Modelsim</b><b class='flag-5'>仿真</b>

    電路仿真軟件multium的工作原理

    Multisim(是美國(guó)國(guó)家儀器有限公司推出的仿真工具)的工作原理主要基于電路元件的建模與仿真分析。
    的頭像 發(fā)表于 03-29 15:24 ?808次閱讀