<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 復(fù)位設(shè)計(jì)中的結(jié)構(gòu)性缺陷及解決方案

          復(fù)位設(shè)計(jì)中的結(jié)構(gòu)性缺陷及解決方案

          作者: 時(shí)間:2014-08-07 來(lái)源:網(wǎng)絡(luò) 收藏

          復(fù)位路徑的組合邏輯

          1.問(wèn)題(I)

          如果組合邏輯輸入大約在同一時(shí)間發(fā)生變化,那么使用復(fù)位路徑中的組合邏輯可能產(chǎn)生干擾,這可能在設(shè)計(jì)中觸發(fā)虛假?gòu)?fù)位。下面是一個(gè)RTL代碼,它會(huì)在設(shè)計(jì)中意外復(fù)位。

          assign module_a_rstb = ?。ǎ╯lave_addr[7:0]==8h02 write_enable (wdata[7:0]==00))

          always @(posedge clk or negedge module_rst_b)

          if(!module_rst_b) data_q 00000010 ——> 00000000 ——> 01000000 ——> 01100000“生成過(guò)渡。

          在這段時(shí)間里,salve_addr為“00000010”,如果wdata[7:0]始終為零且“write_enable”已經(jīng)被斷言,那么它將在module_rst_b創(chuàng)建一個(gè)無(wú)用脈沖,從而導(dǎo)致虛假?gòu)?fù)位。

          本文引用地址:http://www.ex-cimer.com/article/256895.htm



          圖6:復(fù)位路徑的組合邏輯。


          2.解決方案

          首先注冊(cè)組合輸出,然后再將其用作復(fù)位源(如圖7所示)。



          圖7:復(fù)位路徑的組合邏輯解決方案。


          3.問(wèn)題(II)

          在上面的示例中,復(fù)位路徑的組合邏輯解決方案并不完善。如果組合邏輯輸入大約在同一時(shí)間發(fā)生變化,那么它可能在設(shè)計(jì)中觸發(fā)虛假?gòu)?fù)位。然而,如果組合邏輯的輸入信號(hào)變化相互排斥,那么它可能不會(huì)引起任何設(shè)計(jì)問(wèn)題。例如,測(cè)試模式和功能模式相互排斥。因此復(fù)位路徑的測(cè)試復(fù)用是有效的設(shè)計(jì)實(shí)踐。

          然而,對(duì)于某些情況,變化相互排斥的靜態(tài)信號(hào)或信號(hào)可能會(huì)導(dǎo)致設(shè)計(jì)出現(xiàn)虛假?gòu)?fù)位觸發(fā)。下面的示例描述了此類設(shè)計(jì)可能出現(xiàn)問(wèn)題。



          圖8:復(fù)位路徑的組合邏輯(問(wèn)題2)。


          在上面的示例中,多路復(fù)用結(jié)構(gòu)用于復(fù)位路徑,同時(shí)進(jìn)行RTL編碼。其中“mode”是一個(gè)控制信號(hào),不頻繁改變,而mode0_rst_b和mode_1_rst_b是兩個(gè)復(fù)位事件,然而在合成RTL時(shí),在門(mén)控級(jí)它被分解成不同的復(fù)雜的組合(And-Or-Invert[AOI])信元。雖然在邏輯上它相當(dāng)于一個(gè)多路復(fù)用器,但由于不同的信元和凈延遲,每當(dāng)信號(hào)“mode”從1——>0變化時(shí),final_rst_b都會(huì)產(chǎn)生干擾。

          4.解決方案

          *在合成過(guò)程中在復(fù)位路徑保留多路復(fù)用結(jié)構(gòu),因?yàn)槎嗦窂?fù)用結(jié)構(gòu)與其他組合邏輯相比易于產(chǎn)生干擾。MUX Pragma可以在編碼RTL時(shí)使用,這將有助于合成工具在復(fù)位路徑中保留任何多路復(fù)用器。

          設(shè)計(jì)中的同步復(fù)位問(wèn)題

          1.問(wèn)題(I)

          在許多地方,設(shè)計(jì)人員在時(shí)鐘方面喜歡同步。原因可能是為了節(jié)省一些芯片面積(帶有異步復(fù)位輸入的觸發(fā)器比任何不可復(fù)位觸發(fā)器都大)或讓系統(tǒng)與時(shí)鐘完全同步,也可能有一些其他原因。對(duì)于此類設(shè)計(jì),當(dāng)復(fù)位源被斷言時(shí)需要向設(shè)計(jì)的觸發(fā)器提供時(shí)鐘,否則,這些觸發(fā)器可能會(huì)在一段時(shí)間內(nèi)都不進(jìn)行初始化。但當(dāng)該模塊被插入一個(gè)系統(tǒng)時(shí),系統(tǒng)設(shè)計(jì)人員可能選擇在復(fù)位階段禁用其時(shí)鐘(如果在一開(kāi)始不需要激活該模塊),以節(jié)省整個(gè)系統(tǒng)的動(dòng)態(tài)功耗。因此,該模塊甚至在復(fù)位去斷言后一段時(shí)間內(nèi)都不進(jìn)行初始化。如果該模塊的任何輸出直接在系統(tǒng)中使用,那么將捕獲未初始化和未知的值(X),這可能會(huì)導(dǎo)致系統(tǒng)功能故障。



          圖9:同步復(fù)位問(wèn)題時(shí)序圖。


          2.解決方案

          在復(fù)位階段啟用該模塊的時(shí)鐘且持續(xù)最短的時(shí)間,使該模塊內(nèi)的所有觸發(fā)器都在復(fù)位過(guò)程中被初始化。當(dāng)系統(tǒng)復(fù)位被去斷言時(shí),模塊輸出不會(huì)有任何未初始化的值。



          圖10:同步復(fù)位問(wèn)題已解決。

          3. 問(wèn)題(II)

          在時(shí)鐘域交叉路徑使用兩個(gè)觸發(fā)同步器是常見(jiàn)做法。然而,有時(shí)設(shè)計(jì)人員對(duì)這些觸發(fā)器使用同步復(fù)位。相同的RTL代碼是

          always @(posedge clk )

          if(!sync_rst_b) begin

          sync1 = 1b0; sync2 = 1b0 ;

          end

          else begin

          sync1 = async_in; sync2 = sync1

          end

          在硬件中進(jìn)行了RTL合成后,上面的代碼會(huì)在雙觸發(fā)器同步器的同步鏈中引入組合邏輯,這會(huì)帶來(lái)風(fēng)險(xiǎn),并縮短sync2觸發(fā)器輸入進(jìn)入亞穩(wěn)態(tài)的時(shí)間。



          圖11:同步復(fù)位問(wèn)題2。


          2. 解決方案

          可用以下方式編寫(xiě)RTL代碼,以避免同步鏈的組合邏輯。

          always @(posedge clk )

          if(!sync_rst_b) begin

          sync1 = 1b0;

          end

          else begin

          sync1 = async_in; sync2 = sync1

          end

          在上面的代碼中,對(duì)sync2觸發(fā)器不使用復(fù)位,因此在同步鏈中不會(huì)實(shí)現(xiàn)組合信元。然而,需要注意sync2需要一個(gè)額外的周期才能復(fù)位,這不應(yīng)導(dǎo)致設(shè)計(jì)出現(xiàn)任何問(wèn)題。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();