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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 如何寫(xiě)代碼減少邏輯單元的使用數(shù)量

          如何寫(xiě)代碼減少邏輯單元的使用數(shù)量

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

          一....盡量不要使用大于小于這樣的判斷語(yǔ)句, 這樣會(huì)明顯增加使用的數(shù)量 .看一下報(bào)告,資源使用差別很大.
          例程:always@(posedge clk) begin count1=count1+1; if(count1==10000000) feng=1; //no_ring else if(count1==90000000) begin feng=0; //ring count1=0; endend //這么寫(xiě)會(huì)用107個(gè)
          // 如果把這句話(huà)if(count1==10000000)改成大于小于,報(bào)告中用了135個(gè)
          二.....一定要想盡辦法減少reg寄存器的長(zhǎng)度
          上次把[30:0]改到[50:0],報(bào)告里邏輯單元從100多直升到2000多!!!太嚇人了,至于為什么我就不知道了哈!
          三....case語(yǔ)句里一定要加default if一定要加else
          如果是組合邏輯的設(shè)計(jì),不加default或else的話(huà),不能保證所有的情況都有賦值,就會(huì)在內(nèi)部形成一個(gè)鎖存器,不再是一個(gè)純粹的組合邏輯了,電路性能就會(huì)下降.
          例如:case({a,b})
          2b11 e=b;
          2b10 e=a;
          endcase
          //不加default,雖然只關(guān)心a=1時(shí)的結(jié)果,但是a=0的時(shí)候,e就會(huì)保存原來(lái)的值,直到a變?yōu)?
          //那么e要保存原來(lái)的值,就要在內(nèi)部生成鎖存器了.

          四....盡量使用Case語(yǔ)句 而不是if--else語(yǔ)句
          復(fù)雜的if--else語(yǔ)句通常會(huì)生成優(yōu)先級(jí)譯碼邏輯,這將會(huì)增加這些路徑上的組合時(shí)延用來(lái)產(chǎn)生復(fù)雜邏輯的Case語(yǔ)句通常會(huì)生成不會(huì)有太多時(shí)延的并行邏輯
          五...組合邏輯的always塊中,要注意所有的輸入全部放入敏感變量表里
          比如:always@(a or b)
          begin
          out=(abc);
          end
          此時(shí)生成的不是純的組合邏輯,因?yàn)楫?dāng)C變化時(shí), out不會(huì)立刻發(fā)生變化(需要等到a或b變化,c的變化才會(huì)顯現(xiàn)), 所以需要生成一個(gè)寄存器來(lái)保存C的值.
          連續(xù)賦值語(yǔ)句的綜合:從賦值語(yǔ)句右邊提取出邏輯,用于驅(qū)動(dòng)賦值語(yǔ)句左邊的net
          過(guò)程賦值語(yǔ)句的綜合:從賦值語(yǔ)句右邊提取出的邏輯,用于驅(qū)動(dòng)賦值語(yǔ)句左邊的reg型變量。注意:iniTIa語(yǔ)句僅用于仿真,不綜合。只有在always中才能被綜合。
          建議組合邏輯用阻塞語(yǔ)句,時(shí)序邏輯用非阻塞語(yǔ)句,任何延時(shí)控制(如#5)都被綜合工具器忽略。一個(gè)模塊中同一個(gè)變量不能既有阻塞賦值,又有非阻塞賦值。
          always語(yǔ)句的綜合
          1對(duì)于組合邏輯,事件列表必須包括所有always語(yǔ)句中引用的變量,否則會(huì)造成綜合的結(jié)果與設(shè)計(jì)功能不匹配。
          2臨時(shí)變量可以不用在事件列表中列出。
          if語(yǔ)句的綜合
          特別要注意綜合出鎖存器。always中,某個(gè)變量沒(méi)有在所有的條件分支中被賦值,就會(huì)綜合出鎖存器。
          case語(yǔ)句綜合
          和if語(yǔ)句一樣,不完整的case分支語(yǔ)句也會(huì)導(dǎo)致鎖存器的綜合。
          避免方法:
          1)在case語(yǔ)句前,對(duì)要賦值的變量賦予初值
          always @ (state or a or b) begin
          q =0;
          case(state)
          3b000: q = A B;
          ……
          2)使用default分支語(yǔ)句
          3)使用綜合指令,具體用法在case關(guān)鍵字行的注釋中插入”synthesis full_case“
          并行CASE語(yǔ)句
          通常情況下case語(yǔ)句和if語(yǔ)句一樣會(huì)綜合出代有優(yōu)先權(quán)解碼的硬件電路,從上大俠選項(xiàng)優(yōu)先級(jí)逐漸降低。但如果設(shè)計(jì)者知道case語(yǔ)句中的所有項(xiàng)是互斥的,這時(shí)候就使用”parallel_case綜合指令。
          always @(key)
          case(key) //synthesis parallel_case
          4b0001: a = 0;
          endcase

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


          關(guān)鍵詞: 邏輯單元 代碼

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();