新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 如何寫代碼減少邏輯單元的使用數量?

        如何寫代碼減少邏輯單元的使用數量?

        作者: 時間:2017-10-13 來源:網絡 收藏

        以下都是我在編程時發現的問題,總結一下,怕以后忘了,以我目前的水平不明白類似關鍵路徑,組合數目什么高深理論,這都是我從實際中學到的,比看書學的印象深刻得多.慢慢來吧,我想我以后也會明白那些高級的東西了!

        本文引用地址:http://www.104case.com/article/201710/365669.htm

        一....盡量不要使用大于小于這樣的判斷語句, 這樣會明顯增加使用的 .看一下報告,資源使用差別很大.

        例程:always@(posedge clk)
        begin
        count1=count1+1;
        if(count1==10000000)
        feng=1; //no_ring
        else if(count1==90000000)
        begin
        feng=0; //ring
        count1=0;
        end
        end //這么寫會用107個邏輯單元

        // 如果把這句話if(count1==10000000)改成大于小于,報告中用了135個邏輯單元

        二.....一定要想盡辦法減少reg寄存器的長度

        上次把[30:0]改到[50:0],報告里邏輯單元從100多直升到2000多!!!太嚇人了,至于為什么我就不知道了哈!

        三....case語句里一定要加default if一定要加else

        如果是組合邏輯的設計,不加default或else的話,不能保證所有的情況都有賦值,就會在內部形成一個鎖存器,不再是一個純粹的組合邏輯了,電路性能就會下降.

        例如:case({a,b})

        2b11 e=b;

        2b10 e=a;

        endcase

        //不加default,雖然只關心a=1時的結果,但是a=0的時候,e就會保存原來的值,直到a變為1

        //那么e要保存原來的值,就要在內部生成鎖存器了.

        四....盡量使用Case語句 而不是if--else語句

        復雜的if--else語句通常會生成優先級譯碼邏輯,這將會增加這些路徑上的組合時延
        用來產生復雜邏輯的Case語句通常會生成不會有太多時延的并行邏輯

        五...組合邏輯的always塊中,要注意所有的輸入全部放入敏感變量表里

        比如:always@(a or b)

        begin

        out=(abc);



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 类乌齐县| 大新县| 柳江县| 武定县| 洛扎县| 繁峙县| 沅江市| 田林县| 巫溪县| 阿瓦提县| 保德县| 武义县| 衡阳市| 临泉县| 洪泽县| 新密市| 泌阳县| 明光市| 莎车县| 土默特右旗| 潜山县| 昂仁县| 汉川市| 锡林郭勒盟| 塔城市| 青田县| 若羌县| 绍兴县| 南川市| 牙克石市| 浦县| 英超| 兰溪市| 柳江县| 皮山县| 财经| 霍林郭勒市| 万载县| 霍山县| 荥阳市| 仙游县|