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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

異步復位與同步復位的綜合后電路圖講解

454398 ? 來源:博客園 ? 作者: IC_learner ? 2020-11-14 11:32 ? 次閱讀

這里來記錄一下相似代碼之間的不同差異,比如同步復位與異步復位觸發(fā)器的對比,上升沿復位和下降沿復位的對比等等。這里主要使用ISE的綜合引擎。直接附上代碼和綜合后電路圖,有些會有部分講解。

一、異步復位與同步復位

我在復位電路里面講解了同步復位和異步復位的區(qū)別,這里就不詳細介紹了,鏈接如下:http://www.cnblogs.com/IClearner/p/6683100.html

(1)異步復位

異步復位的代碼如下所示:

module DFF1(
  input clk,
  input rst_n,
  input d,
  output reg q
);

always@(posedge clk or negedge rst_n)
  if(!rst_n)
    q <= 0; //異步清 0,低電平有效
  else
    q <= d;

endmodule

綜合得到的電路圖如下所示:

可以看到使用了一個反相器單元和一個觸發(fā)器單元;從代碼中我們可以推斷出,這是一個高電平有效的、異步復位觸發(fā)器。

(2)同步復位

同步復位觸發(fā)器代碼如下所示,注意黑體部分

module DFF2(
  input clk,
  input rst_n,
  input d,
  output reg q
);

always@(posedge clk )//注意這里有所不同
  if(!rst_n)
    q <= 0; //同步清 0,低電平有效
  else
    q <= d;

endmodule

綜合得到的電路如下所示:

我們可以看到,也是由一個反向器單元和一個觸發(fā)器單元構成,注意,這里的觸發(fā)器跟上面的觸發(fā)器顯然不是同一個類型的觸發(fā)器,管腳名稱改變了;結合代碼我們可以知道,這個觸發(fā)器是高電平觸發(fā)、同步復位的觸發(fā)器(由于是輸入信號是低電平有效,所以加了個反相器)。

二、不同電平之間的復位差異

(1)高電平觸發(fā)的異步復位VS低電平觸發(fā)的異步復位

①高電平觸發(fā)的異步復位(異步置位)

綜合得到的電路如下所示:

根據(jù)代碼,容易推斷得出這是一個高電平觸發(fā)、異步復位的觸發(fā)器(或者叫異步置位),這也與前面的內容相符合(高電平觸發(fā)復位,所以不用加反相器)。

②低電平觸發(fā)的異步復位

代碼和電路跟 一(1)的代碼和電路相同,這里不進行重述。

(2)高電平觸發(fā)的同步復位VS低電平觸發(fā)的同步復位

①高電平觸發(fā)的同步復位

代碼如下所示:

 1 module DFF4(
 2   input clk,
 3   input rst_r,
 4   input d,
 5   output reg q
 6 );
 7 
 8 always@(posedge clk )
 9   if(rst_r)
10     q <= 0; 
11   else
12     q <= d;
13 
14 endmodule

綜合得到的電路如下所示:

可以知道,這是一個高電平有效、同步復位的觸發(fā)器單元。

②低電平觸發(fā)的同步復位

代碼和電路同一(2),這里不進行重述

三、阻塞賦值和非阻塞賦值

(1)阻塞賦值綜合的觸發(fā)器

代碼如下所示,這里為了使用高電平觸發(fā)的觸發(fā)器單元,寫出高電平復位:

 1 module DFF_chain(
 2   input clk,
 3   input rst_r,
 4   input d,
 5   output reg q
 6 );
 7 reg reg_m ;
 8 always @(posedge clk )//high level reset,synchronization
 9   if(rst_r)begin
10         reg_m = 0;//block
11        q = 0; 
12   end   else begin
13         reg_m = d;
14         q = reg_m ;
15   end
16 endmodule

綜合得到的電路如下所示:

可以看到,綜合得到只有一個觸發(fā)器,中間的觸發(fā)器變量reg_m被優(yōu)化掉了,只剩下q這個觸發(fā)器。

(2)換個順序的非阻塞賦值的觸發(fā)器

把后面的這兩個語句對調一下,同時把中間的變量改個名字,改成reg_block(這里改名字只是為了區(qū)分后面的非阻塞賦值的情況)

即要綜合的代碼如下所示:

 1 module DFF_chain(
 2   input clk,
 3   input rst_r,
 4   input d,
 5   output reg q
 6 );
 7 reg reg_block ;
 8 always @(posedge clk )//high level reset,synchronization
 9   if(rst_r)begin//block
10         reg_block = 0;
11        q = 0; 
12   end   else begin //here has changed
13         q = reg_block ;
14         reg_block = d;        
15   end
16 endmodule

綜合得到的電路如下所示:

可以看到,調換順序之后,得到了我們我們想要的觸發(fā)器鏈。

結論:描述時序邏輯使用阻塞賦值可能得到正確的結果,也可以得到不正確的結果,因此時序邏輯不建議使用阻塞賦值。

(3)非阻塞賦值綜合的觸發(fā)器

代碼如下所示:

 1 module DFF_chain(
 2   input clk,
 3   input rst_r,
 4   input d,
 5   output reg q
 6 );
 7 reg reg_m ;
 8 always @(posedge clk )//high level reset,synchronization
 9   if(rst_r)begin
10         reg_m <= 0;//non block 
11        q <= 0; 
12   end   else begin
13         reg_m <= d;
14         q <= reg_m ;
15   end
16 endmodule

綜合得到的電路如下所示:

從電路圖中可以看到,綜合得到了兩個觸發(fā)器,中間的觸發(fā)器reg_m被保留下來了,達到了我們預想中的觸發(fā)器鏈。

(4)換個順序后的非阻塞賦值

跟前面的阻塞賦值一樣,我們換一下順序,代碼如下所示:

 1 module DFF_chain(
 2   input clk,
 3   input rst_r,
 4   input d,
 5   output reg q
 6 );
 7 reg reg_nonblock ;
 8 always @(posedge clk )//high level reset,synchronization
 9   if(rst_r)begin//non block
10         reg_nonblock <= 0;
11        q <= 0; 
12   end   else begin
13         q <= reg_nonblock ;
14         reg_nonblock <= d;        
15   end
16 endmodule

綜合得到的電路如下所示:

從電路中可以看到,即使調換了順序,電路還是我們需要的觸發(fā)器鏈。

結論:描述時序邏輯,使用非阻塞賦值可以得到正確的結果,因此時序邏輯推薦使用非阻塞賦值

(5)描述組合邏輯電路時的阻塞賦值和非阻塞賦值

阻塞賦值描述組合邏輯(加法器),代碼如下所示:

 1 module Adder(
 2   input a,
 3   input b,
 4   input c,
 5   output reg q
 6 );
 7 reg sum_block ;
 8 always @(* )
 9    begin
10         sum_block = a + b  ;
11         q = sum_block + c;        
12    end
13 endmodule

綜合得到電路如下所示:

綜合得到的電路是一個加法器。

我們改成非阻塞賦值看看,代碼如下所示:

 1 module Adder(
 2   input a,
 3   input b,
 4   input c,
 5   output reg q
 6 );
 7 reg sum_block ;
 8 always @(* )
 9    begin
10         sum_block <= a + b  ;
11         q <= sum_block + c;        
12    end
13 endmodule

綜合得到的電路:

綜合得到的電路也是一個加法器。

因此可以冒險地得到一個結論,無論是阻塞賦值還是非阻塞賦值,都可以描述組合邏輯,但是一般情況下,我們推薦使用阻塞賦值,一方面是對仿真有用,另一方面是區(qū)別于描述時序邏輯的非阻塞賦值。

最后我嘗試著在同一個塊中使用阻塞賦值和非阻塞賦值,ISE的綜合器報錯。
編輯:hfy

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

    關注

    14

    文章

    1992

    瀏覽量

    60978
  • 同步復位
    +關注

    關注

    0

    文章

    26

    瀏覽量

    10691
  • 異步復位
    +關注

    關注

    0

    文章

    46

    瀏覽量

    13291
收藏 人收藏

    評論

    相關推薦

    復位電路的三種方式 復位電路的原理和作用

    ) 原理: 上電復位電路通常包含一個RC(電阻-電容)網絡。當電源首次接通時,電容充電需要一定的時間,這段時間內電容上的電壓較低,導致復位電路輸出低電平,觸發(fā)微控制器的
    的頭像 發(fā)表于 10-21 10:28 ?79次閱讀

    復位電路的電容多大的 復位電路設計類型有哪幾種

    復位電路是電子系統(tǒng)中的一個關鍵部分,它確保系統(tǒng)在啟動或發(fā)生故障時能夠正確地初始化。復位電路的設計取決于多種因素,包括系統(tǒng)的復雜性、所需的復位
    的頭像 發(fā)表于 10-21 10:24 ?78次閱讀

    復位電路靜電整改案例分享(一)——交換機復位電路

    復位信號,確保單片機在上電能夠立即進入初始化狀態(tài)。其中上拉電阻可以確保在未按下按鈕時輸入引腳上具有高電平狀態(tài),避免輸入信號的浮動和噪音干擾。在選擇上拉電阻時,根據(jù)具體需求和電路設計合理參數(shù)可以提高
    的頭像 發(fā)表于 10-19 14:56 ?148次閱讀
    <b class='flag-5'>復位</b><b class='flag-5'>電路</b>靜電整改案例分享(一)——交換機<b class='flag-5'>復位</b><b class='flag-5'>電路</b>

    復位電路介紹 復位電路的原理及作用

    復位電路(Reset Circuit)是現(xiàn)代電子設備中常見的一種關鍵電路,它用于確保在正確的時間和條件下將系統(tǒng)恢復到初始狀態(tài)。復位電路的設計
    的頭像 發(fā)表于 10-18 16:44 ?133次閱讀

    STM32復位電路復位芯片和阻容復位電路區(qū)別

    STM32是一款廣泛使用的微控制器,其復位電路設計對于系統(tǒng)的穩(wěn)定性和可靠性至關重要。本文將詳細介紹STM32復位電路中使用復位芯片和阻容
    的頭像 發(fā)表于 08-06 10:26 ?708次閱讀

    FPGA同步復位異步復位

    FPGA(Field-Programmable Gate Array,現(xiàn)場可編程門陣列)中的復位操作是設計過程中不可或缺的一環(huán),它負責將電路恢復到初始狀態(tài),以確保系統(tǒng)的正確啟動和穩(wěn)定運行。在FPGA設計中,復位方式主要分為
    的頭像 發(fā)表于 07-17 11:12 ?1042次閱讀

    什么是復位同步電路 reset synchronizer?

    復位同步電路 reset synchronizer 其實只在復位信號 release 的時候派上用場。復位結束
    的頭像 發(fā)表于 02-19 09:21 ?1213次閱讀
    什么是<b class='flag-5'>復位</b><b class='flag-5'>同步</b><b class='flag-5'>電路</b> reset synchronizer?

    如何排查GD32 MCU復位是由哪個復位源導致的?

    上期為大家講解了GD32 MCU復位包括電源復位和系統(tǒng)復位,其中系統(tǒng)復位還包括獨立看門狗復位、內
    的頭像 發(fā)表于 02-03 09:46 ?1572次閱讀
    如何排查GD32 MCU<b class='flag-5'>復位</b>是由哪個<b class='flag-5'>復位</b>源導致的?

    異步復位異步釋放會有什么問題?FPGA異步復位為什么要同步釋放呢?

    一般來說,復位信號有效后會保持比較長一段時間,確保 register 被復位完成。但是復位信號釋放時,因為其和時鐘是異步的關系,我們不知道它會在什么時刻被釋放。
    的頭像 發(fā)表于 01-24 09:32 ?1601次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>復位</b><b class='flag-5'>異步</b>釋放會有什么問題?FPGA<b class='flag-5'>異步</b><b class='flag-5'>復位</b>為什么要<b class='flag-5'>同步</b>釋放呢?

    為什么需要復位電路?漫談復位reset

    在IC設計中,把復位和時鐘電路稱為最重要的兩個電路一點也不為過。前者復位電路把IC設計的電路引導
    的頭像 發(fā)表于 01-19 16:41 ?1923次閱讀
    為什么需要<b class='flag-5'>復位</b><b class='flag-5'>電路</b>?漫談<b class='flag-5'>復位</b>reset

    同步復位異步復位到底孰優(yōu)孰劣呢?

    同步復位異步復位到底孰優(yōu)孰劣呢? 同步復位異步
    的頭像 發(fā)表于 01-16 16:25 ?1451次閱讀

    復位電路復位條件和復位過程

    電源監(jiān)測芯片復位電路:這是最常見的復位電路類型,使用專用的電源監(jiān)測芯片來監(jiān)測電源電壓,并在電壓低于或高于預設閾值時觸發(fā)復位信號。
    的頭像 發(fā)表于 01-16 16:04 ?1099次閱讀

    異步復位同步撤離是什么意思?如何做到異步復位同步撤離呢?

    復位消抖之后的下一件事,[異步復位]()同步撤離。這句話什么意思呢?
    的頭像 發(fā)表于 12-04 13:57 ?4270次閱讀
    <b class='flag-5'>異步</b><b class='flag-5'>復位</b><b class='flag-5'>同步</b>撤離是什么意思?如何做到<b class='flag-5'>異步</b><b class='flag-5'>復位</b><b class='flag-5'>同步</b>撤離呢?

    復位保護電路如何進行復位保護?

    復位保護電路,是在系統(tǒng)進行復位的過程中對接口進行硬性邏輯保護,避免毛刺和錯誤對周圍系統(tǒng)產生影響的模塊。
    的頭像 發(fā)表于 12-04 13:48 ?728次閱讀
    <b class='flag-5'>復位</b>保護<b class='flag-5'>電路</b>如何進行<b class='flag-5'>復位</b>保護?

    RC復位電路中R如何影響芯片復位?

    RC復位電路中R如何影響芯片復位? RC復位電路是常見的一種復位
    的頭像 發(fā)表于 10-25 11:07 ?1139次閱讀