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

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

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

為什么在Verilog HDL設(shè)計(jì)中一定要用同步而不能用異步時(shí)序邏輯?

FPGA之家 ? 來源:FPGA之家 ? 2023-03-29 17:40 ? 次閱讀

同步時(shí)序邏輯是指表示狀態(tài)的寄存器組的值只可能在唯一確定的觸發(fā)條件發(fā)生時(shí)刻改變。只能由時(shí)鐘的正跳沿或負(fù)跳沿觸發(fā)的狀態(tài)機(jī)就是一例。always @(posedge clock) 就是一個(gè)同步時(shí)序邏輯的觸發(fā)條件, 表示由該 always 控制的 begin end 塊中寄存器變量重新賦值的情形只有可能在 clock 正跳沿發(fā)生。

而異步時(shí)序邏輯是指觸發(fā)條件由多個(gè)控制因素組成,任何一個(gè)因素的跳變都可以引起觸發(fā)。記錄狀態(tài)的寄存器組其時(shí)鐘輸入端不是都連結(jié)在同一個(gè)時(shí)鐘信號上。例如用一個(gè)觸發(fā)器的輸出連結(jié)到另一個(gè)觸發(fā)器的時(shí)鐘端去觸發(fā)的就是異步時(shí)序邏輯。

Verilog HDL 設(shè)計(jì)的可綜合模塊,必須避免使用異步時(shí)序邏輯,這不但是因?yàn)樵S多綜合器不支持異步時(shí)序邏輯的綜合,而且也因?yàn)橛卯惒綍r(shí)序邏輯確實(shí)很難來控制由組合邏輯和延遲所產(chǎn)生的冒險(xiǎn)和競爭。當(dāng)電路的復(fù)雜度增加時(shí),異步時(shí)序邏輯無法調(diào)試。工藝的細(xì)微變化也會造成異步時(shí)序邏輯電路的失效。因?yàn)楫惒綍r(shí)序邏輯中觸發(fā)條件很隨意,任何時(shí)刻都有可能發(fā)生,所以記錄狀態(tài)的寄存器組的輸出在任何時(shí)刻都有可能發(fā)生變化。而同步時(shí)序邏輯中的觸發(fā)輸入至少可以維持一個(gè)時(shí)鐘后才會發(fā)生第二次觸發(fā)。這是一個(gè)非常重要的差別,因?yàn)槲覀兛梢岳眠@一個(gè)時(shí)鐘的時(shí)間在下一次觸發(fā)信號來到前,為電路狀態(tài)的改變創(chuàng)造一個(gè)穩(wěn)定可靠的條件。

因此我們可以得出結(jié)論:同步時(shí)序邏輯比異步時(shí)序邏輯具有更可靠更簡單的邏輯關(guān)系。如果我們強(qiáng)行作出規(guī)定,用 Verilog 來設(shè)計(jì)可綜合的狀態(tài)機(jī)必須使用同步時(shí)序邏輯,有了這個(gè)前提條件,實(shí)現(xiàn)自動(dòng)生成電路結(jié)構(gòu)的綜合器就有了可能 。因?yàn)檫@樣做大大減少了綜合工具的復(fù)雜度,為這種工具的成熟創(chuàng)造了條件。也為 Verilog 可綜合代碼在各種工藝和 FPGA 之間移植創(chuàng)造了條件。

Verilog RTL 級的綜合就是基于這個(gè)規(guī)定的。

下面我們將詳細(xì)說明同步與異步時(shí)序邏輯的差異。

在同步邏輯電路中,觸發(fā)信號是時(shí)鐘(clock)的正跳沿(或負(fù)跳沿);觸發(fā)器的輸入與輸出是經(jīng)由兩個(gè)時(shí)鐘來完成的。第一個(gè)時(shí)鐘的正跳沿(或負(fù)跳沿)為輸入作準(zhǔn)備,在第一個(gè)時(shí)鐘正跳沿(或負(fù)跳沿)到來后到第二個(gè)時(shí)鐘正跳沿(或負(fù)跳沿)到來之前的這一段時(shí)間內(nèi),有足夠的時(shí)間使輸入穩(wěn)定。當(dāng)?shù)诙€(gè)時(shí)鐘正跳沿(或負(fù)跳沿)到來時(shí)刻,由前一個(gè)時(shí)鐘沿創(chuàng)造的條件已經(jīng)穩(wěn)定,所以能夠使下一個(gè)狀態(tài)正確地輸出。

若在同一時(shí)鐘的正跳沿(或負(fù)跳沿)下對寄存器組既進(jìn)行輸入又進(jìn)行輸出,很有可能由于門的延遲使輸入條件還未確定時(shí),就輸出了下一個(gè)狀態(tài),這種情況會導(dǎo)致邏輯的紊亂。而利用上一個(gè)時(shí)鐘為下一個(gè)時(shí)鐘創(chuàng)造觸發(fā)條件的方式是安全可靠的。但這種工作方式需要有一個(gè)前提:確定下一個(gè)狀態(tài)所使用的組合電路的延遲與時(shí)鐘到各觸發(fā)器的差值必須小于一個(gè)時(shí)鐘周期的寬度。只有滿足這一前提才可以避免邏輯紊亂。在實(shí)際電路的實(shí)現(xiàn)中,采取了許多有效的措施來確保這一條件的成立,其中主要有以下幾點(diǎn):

(1)全局時(shí)鐘網(wǎng)絡(luò)布線時(shí)盡量使各分支的時(shí)鐘一致;

(2)采用平衡樹結(jié)構(gòu),在每一級加入緩沖器,使到達(dá)每個(gè)觸發(fā)器時(shí)鐘端的時(shí)鐘同步。(如圖 1、2 所示)

ebdf8e98-c896-11ed-bfe3-dac502259ad0.png

通過這些措施基本可以保證時(shí)鐘的同步,在后仿真時(shí),若邏輯與預(yù)期設(shè)計(jì)的不一樣,可降低時(shí)鐘頻率,就有可能消除由于時(shí)鐘過快引起的觸發(fā)器輸入端由延遲和冒險(xiǎn)競爭造成的不穩(wěn)定從而使邏輯正確。

在組合邏輯電路中,多路信號的輸入使各信號在同時(shí)變化時(shí)很容易產(chǎn)生競爭冒險(xiǎn),從而結(jié)果難以預(yù)料。下面就是一個(gè)簡單的組合邏輯的例子:C = a & b;

ebf08392-c896-11ed-bfe3-dac502259ad0.png

a 和 b 變化不同步使 C 產(chǎn)生了一個(gè)脈沖。這個(gè)結(jié)果也許與當(dāng)初設(shè)計(jì)時(shí)的想法并不一致,但如果我們能過一段時(shí)間,待 C 的值穩(wěn)定后再來取用組合邏輯的運(yùn)算結(jié)果,就可以避免競爭冒險(xiǎn)。同步時(shí)序邏輯由于用上一個(gè)時(shí)鐘的跳變沿時(shí)刻(置寄存器作為組合邏輯的輸入)來為下一個(gè)時(shí)鐘的跳變沿時(shí)刻的置數(shù)(置下一級寄存器作為該組合邏輯的輸出)做準(zhǔn)備,只要時(shí)鐘周期足夠長,就可以在下一個(gè)時(shí)鐘的跳變沿時(shí)刻得到穩(wěn)定的置數(shù)條件,從而在寄存器組中存入可靠的數(shù)據(jù)。

而這一點(diǎn)用異步電路是做不到的,因此在實(shí)際設(shè)計(jì)中應(yīng)盡量避免使用異步時(shí)序邏輯。若用彌補(bǔ)的方法來避免競爭冒險(xiǎn),所耗費(fèi)的人力物力是很巨大的。也無法使所設(shè)計(jì)的 Verilog HDL代碼和已通過仿真測試的電路模塊結(jié)構(gòu)有知識產(chǎn)權(quán)的可能,因?yàn)楣に嚨募?xì)微改變就有可能使電路無法正常工作。顯而易見使用異步時(shí)序邏輯會帶來設(shè)計(jì)的隱患,無法設(shè)計(jì)出能嚴(yán)格按同一時(shí)間節(jié)拍操作控制數(shù)據(jù)流動(dòng)方向開關(guān)的狀態(tài)機(jī)。而這種能按時(shí)鐘節(jié)拍精確控制數(shù)據(jù)流動(dòng)開關(guān)的狀態(tài)機(jī)就是同步有限狀態(tài)機(jī)。它是算法計(jì)算過程中數(shù)據(jù)流動(dòng)控制的核心。計(jì)算結(jié)構(gòu)的合理配置和運(yùn)算效率的提高與算法狀態(tài)機(jī)的設(shè)計(jì)有著非常密切的關(guān)系。我們只有通過閱讀有關(guān)計(jì)算機(jī)體系結(jié)構(gòu)的資料和通過大量的設(shè)計(jì)實(shí)踐才能熟練地掌握復(fù)雜算法系統(tǒng)的設(shè)計(jì)。

審核編輯:湯梓紅

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

    關(guān)注

    13

    文章

    494

    瀏覽量

    42637
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110124
  • HDL
    HDL
    +關(guān)注

    關(guān)注

    8

    文章

    327

    瀏覽量

    47398
  • 同步時(shí)序
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    7888
  • 異步時(shí)序
    +關(guān)注

    關(guān)注

    0

    文章

    6

    瀏覽量

    8647

原文標(biāo)題:為什么在 Verilog HDL 設(shè)計(jì)中一定要用同步而不能用異步時(shí)序邏輯?

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    15條FPGA設(shè)計(jì)經(jīng)驗(yàn)及同步時(shí)序設(shè)計(jì)注意事項(xiàng)

    了用面積復(fù)制換取速度的提高。(2)硬件原則:理解HDL本質(zhì);(3)系統(tǒng)原則:整體把握;(4)同步設(shè)計(jì)原則:設(shè)計(jì)時(shí)序穩(wěn)定的基本原則。2、Verilog作為
    發(fā)表于 05-04 08:00

    為什么 Verilog HDL 設(shè)計(jì)中一定要用同步不能用異步時(shí)序邏輯?

    發(fā)表于 03-25 15:09

    什么是同步邏輯異步邏輯?

    本文來自芯社區(qū),謝謝。1:什么是同步邏輯異步邏輯同步邏輯是時(shí)鐘之間有固定的因果關(guān)系。
    發(fā)表于 07-26 08:26

    什么是同步邏輯異步邏輯

    什么是同步邏輯異步邏輯同步電路和異步電路的區(qū)別在哪?時(shí)序
    發(fā)表于 09-29 07:33

    什么是同步邏輯異步邏輯?

    轉(zhuǎn)自知乎答主ictown_數(shù)字IC設(shè)計(jì)工程師筆試面試經(jīng)典100題-有答案-陳恩1:什么是同步邏輯異步邏輯?(漢王)同步
    發(fā)表于 11-11 06:13

    異步時(shí)序邏輯電路

    異步時(shí)序邏輯電路:本章主要從同步時(shí)序邏輯電路與異步
    發(fā)表于 09-01 09:12 ?0次下載

    Verilog HDL程序基本結(jié)構(gòu)與程序入門

    Verilog HDL程序基本結(jié)構(gòu)與程序入門 Verilog HDL程序基本結(jié)構(gòu)  Verilog
    發(fā)表于 02-08 11:43 ?2302次閱讀

    Verilog HDL語言實(shí)現(xiàn)時(shí)序邏輯電路

    Verilog HDL語言實(shí)現(xiàn)時(shí)序邏輯電路 Verilog
    發(fā)表于 02-08 11:46 ?4716次閱讀

    基本組合邏輯功能雙向管腳的Verilog HDL源代碼

    電子發(fā)燒友網(wǎng)核心提示: 本例程是Verilog HDL源代碼:關(guān)于基本組合邏輯功能中雙向管腳的功能實(shí)現(xiàn)源代碼。 Verilog HDL: B
    發(fā)表于 10-15 11:28 ?1613次閱讀

    如何使用Verilog-HDL做CPLD設(shè)計(jì)的時(shí)序邏輯電路的實(shí)現(xiàn)

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用Verilog-HDL做CPLD設(shè)計(jì)的時(shí)序邏輯電路的實(shí)現(xiàn)。
    發(fā)表于 12-12 16:25 ?10次下載
    如何使用<b class='flag-5'>Verilog-HDL</b>做CPLD設(shè)計(jì)的<b class='flag-5'>時(shí)序</b><b class='flag-5'>邏輯</b>電路的實(shí)現(xiàn)

    Verilog HDL的基礎(chǔ)知識詳細(xì)說明

    (4) Verilog HDL時(shí)序邏輯語句結(jié)構(gòu) (5)Verilog HDL 程序設(shè)計(jì)中需
    發(fā)表于 07-03 17:36 ?54次下載
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>的基礎(chǔ)知識詳細(xì)說明

    Verilog HDL verilog hdl和vhdl的區(qū)別

    Verilog HDL種以文本形式描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的硬件描述語言,也可描述邏輯電路圖、邏輯表達(dá)式等。
    的頭像 發(fā)表于 07-23 14:36 ?1.1w次閱讀

    什么是同步邏輯異步邏輯?同步電路與異步電路有何區(qū)別?

    什么是同步邏輯異步邏輯?同步電路與異步電路有何區(qū)別? 同步
    的頭像 發(fā)表于 11-17 14:16 ?2374次閱讀

    verilog同步異步的區(qū)別 verilog阻塞賦值和非阻塞賦值的區(qū)別

    Verilog種硬件描述語言,用于設(shè)計(jì)和模擬數(shù)字電路。Verilog中,同步異步是用來描
    的頭像 發(fā)表于 02-22 15:33 ?1747次閱讀

    Verilog HDL的基礎(chǔ)知識

    本文繼續(xù)介紹Verilog HDL基礎(chǔ)知識,重點(diǎn)介紹賦值語句、阻塞與非阻塞、循環(huán)語句、同步異步、函數(shù)與任務(wù)語法知識。
    的頭像 發(fā)表于 10-24 15:00 ?436次閱讀
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>的基礎(chǔ)知識