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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 不同的verilog代碼風(fēng)格看RTL視圖之一

          不同的verilog代碼風(fēng)格看RTL視圖之一

          作者: 時(shí)間:2015-01-21 來源:網(wǎng)絡(luò) 收藏

            剛開始玩CPLD/開發(fā)板的時(shí)候使用的一塊基于EPM240T100的板子,alter的這塊芯片雖說功耗小體積小,但是資源還是很小的,你寫點(diǎn)稍微復(fù)雜的程序,如果不注意coding style,很容易就溢出了。當(dāng)時(shí)做一個(gè)三位數(shù)的解碼基本就讓我苦死了,對coding style的重要性也算是有一個(gè)比較深刻的認(rèn)識了。

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

            后來因?yàn)橐恢痹谕鎥ilinx的spartan3 xc3s400,這塊芯片資源相當(dāng)豐富,甚至于我在它里面緩存了一幀640*480*3/8BYTE的數(shù)據(jù)都沒有問題(VGA顯示用)。而最近接觸EPM7128,它的資源似乎也不豐富,我寫著寫著有時(shí)不注意就無法布線了。由此可見coding style對設(shè)計(jì)的重要性,尤其是在資源緊張或者速度要求較高的設(shè)計(jì)中。我個(gè)人對前者的體會深一些,高速的設(shè)計(jì)沒有涉及過,只是明白一些用流水線提高速度的方法。

            可以步入正題了,先拿一段簡單的代碼開始吧。我先提一點(diǎn),這回我用的是quartus II 7.0進(jìn)行測試,其它的EDA工具綜合出來的視圖可能會不一樣,所以僅作為在quartus II 7.0環(huán)境下的一些參考吧。不過思路是一樣的,可以借鑒的。

            Ex1:

            input[1:0] xin;

            output dout;

            assign dout = (xin == 2'b0);

            代碼很簡單,就是當(dāng)xin==2’b0時(shí)dout=1,否則dout=0。上面這段程序的視圖如下:

            

           

            其實(shí)就是一個(gè)比較器,如果xin=2’h0,那么輸出OUT就為1。和設(shè)想一樣。

            下面是我在參考一些別人的代碼的時(shí)候看到別人一種常見的寫法,它是用了?語句。

            input[1:0] xin;

            output dout;

            assign dout = (xin == 2'b0) ? 1'b1:1'b0;

            如下:

            

          點(diǎn)擊看大圖

           

            是不是發(fā)現(xiàn)多了以一個(gè)選擇器(可能不叫選擇器吧,但是你明白意思就可以),這樣平白無故的就多耗用了一點(diǎn)資源,剛開始的時(shí)候我也是傻乎乎的跟著別人用這種寫法,但是看到RTL視圖后我就不這么干了,既然前者一樣可以得到預(yù)期結(jié)果,為什么我還要畫蛇添足多一個(gè)選擇器呢。所以,推薦使用前者。資源的節(jié)約是潛移默化的~_~

            (先說一點(diǎn)吧,其它的待我想起或者是感悟到了再提吧,以上也完全是我的個(gè)人愚見,如有不妥之處歡迎拍磚~_~)



          關(guān)鍵詞: FPGA verilog RTL

          評論


          相關(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); })();