那曲檬骨新材料有限公司

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

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

3天內不再提示

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

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

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

一、異步復位與同步復位

我在復位電路里面講解了同步復位和異步復位的區別,這里就不詳細介紹了,鏈接如下: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

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

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

(2)同步復位

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

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

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

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

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

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

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

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

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

②低電平觸發的異步復位

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

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

①高電平觸發的同步復位

代碼如下所示:

 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

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

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

②低電平觸發的同步復位

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

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

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

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

 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

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

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

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

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

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

 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

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

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

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

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

代碼如下所示:

 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

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

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

(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

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

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

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

(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

綜合得到的電路:

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

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

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

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

    關注

    14

    文章

    2003

    瀏覽量

    61347
  • 同步復位
    +關注

    關注

    0

    文章

    27

    瀏覽量

    10738
  • 異步復位
    +關注

    關注

    0

    文章

    47

    瀏覽量

    13346
收藏 人收藏

    評論

    相關推薦

    FPGA復位的8種技巧

    在 FPGA 設計中,復位起到的是同步信號的作用,能夠將所有的存儲元件設置成已知狀態。在數字電路設計中,設計人員一般把全局復位作為一個外部引腳來實現,在加電的時候初始化設計。全局
    的頭像 發表于 11-16 10:18 ?421次閱讀
    FPGA<b class='flag-5'>復位</b>的8種技巧

    復位電路的設計問題

    前言 最近看advanced fpga 以及fpga設計實戰演練中有講到復位電路的設計,才知道復位電路有這么多的門道,而不是簡單的外界信號輸入系統
    的頭像 發表于 11-15 11:13 ?216次閱讀
    <b class='flag-5'>復位</b><b class='flag-5'>電路</b>的設計問題

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

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

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

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

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

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

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

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

    STM32復位電路復位芯片和阻容復位電路區別

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

    雙管正激勵磁復位電路的作用

    雙管正激勵磁復位電路是一種廣泛應用于電子設備中的電路,它具有多種功能和優點。 一、雙管正激勵磁復位電路的作用 雙管正激勵磁
    的頭像 發表于 08-02 15:41 ?653次閱讀

    FPGA同步復位異步復位

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

    單端正激電路磁芯復位的方法

    復位的原理、復位方式、復位電路設計以及復位電路的優化等方面。 一、磁芯
    的頭像 發表于 07-10 09:51 ?1894次閱讀

    電容在復位電路中的作用(復位電路具體要怎么設計)

    數字電路中寄存器和 RAM 在上電之后默認的狀態和數據是不確定的,如果有復位,我們可以把寄存器復位到初始狀態,RAM 的數據可以通過復位來觸發 RAM 初始化程序邏輯如果進入了錯誤的狀
    發表于 03-13 12:16 ?1691次閱讀
    電容在<b class='flag-5'>復位</b><b class='flag-5'>電路</b>中的作用(<b class='flag-5'>復位</b><b class='flag-5'>電路</b>具體要怎么設計)

    L431采用PLL異步時鐘,復位ADC采樣值發生偏差的原因?

    前提:可以確認的是外部條件沒有變化。 問題:開機復位的情況下,ADC_DMA讀取值幾乎相同,而每次重新復位,ADC_DMA讀出來的值差別較大。在采用ADC
    發表于 03-08 07:32

    ABB變頻器怎么復位 | 復位時可能會出現哪些問題?

    ,ABB變頻器如何進行復位呢?本文將為大家詳細講解ABB變頻器復位的方法和步驟。 一、ABB變頻器的復位方式 在使用ABB變頻器時,復位可以
    的頭像 發表于 02-21 10:50 ?8443次閱讀
    ABB變頻器怎么<b class='flag-5'>復位</b> | <b class='flag-5'>復位</b>時可能會出現哪些問題?

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

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

    復位電路的基本功能介紹

    復位電路是用于將系統恢復到已知的、穩定的初始狀態。這一過程通常被稱為“復位”,它在很多電子設備的正常運行中起著至關重要的作用。復位操作可以由多種原因觸發,包括電源上電、用戶操作、硬件故
    的頭像 發表于 02-16 10:14 ?1767次閱讀
    <b class='flag-5'>復位</b><b class='flag-5'>電路</b>的基本功能介紹
    百家乐娱乐城主页| 百家乐官网下注几多| 适合做生意的开运方法| 菲律宾云顶国际| 好运来百家乐现金网| 博马百家乐官网娱乐城| 将军百家乐的玩法技巧和规则| 至尊百家乐官网facebook| 百家乐首选| 百家乐官网顺序| 大发888信誉平台| 百家乐长玩必输| 新东泰百家乐的玩法技巧和规则 | bet365滚球| 百家乐投注方向| 百家乐官网永利娱乐城| 大发888网页免费游戏| 百家乐怎么开户| 百家乐官网书包| 大发888娱乐场 东南网| 高级百家乐出千工具| 在线百家乐官网官方网| 大发888特惠代码| 百家乐波音平台开户导航| 百家乐官网群号| 95博彩通| KK百家乐的玩法技巧和规则| 百家乐官网园太阳| 百家乐官网有秘技吗| 大发888娱乐城pt| 百家乐出千赌具| 百家乐官网博乐城| 靖宇县| 大发888手机版下载安| 百家乐怎么| 劳力士百家乐官网的玩法技巧和规则 | 顶级赌场官网| 澳门百家乐网上赌城| 路冲铺面能做生意吗| 新澳门百家乐官网娱乐城| 淘金盈娱乐|