新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ASIC設計規范

        ASIC設計規范

        作者: 時間:2017-06-06 來源:網絡 收藏
        1.設計必須文檔化。要將設計思路,詳細實現等寫入文檔,然后經過嚴格評審通過

        后才能進行下一步的工作。這樣做乍看起來很花時間,但是從整個項目過程來看,絕對

        要比一上來就寫代碼要節約時間,且這種做法可以使項目處于可控、可實現的狀態。



        2.代碼規范。

        a.設計要參數化。比如一開始的設計時鐘周期是30ns,復位周期是5個時鐘周期,我

        們可以這么寫:

        parameter CLK_PERIOD = 30;

        parameter RST_MUL_TIME = 5;

        parameter RST_TIME = RST_MUL_TIME * CLK_PERIOD;

        ...

        rst_n = 1'b0;

        # RST_TIME rst_n = 1'b1;

        ...

        # CLK_PERIOD/2 clk = ~clk;

        如果在另一個設計中的時鐘是40ns,復位周期不變,我們只需對CLK_PERIOD進行重

        新例化就行了,從而使得代碼更加易于重用。



        b.信號命名要規范化。

        1) 信號名一律小寫,參數用大寫。

        2) 對于低電平有效的信號結尾要用_n標記,如rst_n。

        3) 端口信號排列要統一,一個信號只占一行,最好按輸入輸出及從哪個模塊來到哪

        個模塊去的關系排列,這樣在后期仿真驗證找錯時后 方便很多。如:

        module a(

        //input

        clk,

        rst_n, //globle signal

        wren,

        rden,

        avalon_din, //related to avalon bus

        sdi, //related to serial port input

        //output

        data_ready,

        avalon_dout, //related to avalon bus

        ...

        );

        4) 一個模塊盡量只用一個時鐘,這里的一個模塊是指一個module或者是一個en

        tity。在多時鐘域的設計中涉及到跨時鐘域的設計中最好有專門一個模塊做時鐘域的隔

        離。這樣做可以讓綜合器綜合出更優的結果。

        5) 盡量在底層模塊上做邏輯,在高層盡量做例化,頂層模塊只能做例化,禁止

        出現任何膠連邏輯(glue logic),哪怕僅僅是對某個信號取反。理由同上。

        6) 在FPGA的設計上禁止用純組合邏輯產生latch,帶D觸發器的latch的是允許的

        ,比如配置寄存器就是這種類型。

        7) 一般來說,進入FPGA的信號必須先同步,以提高系統工作頻率(板級)。

        所有模塊的輸出都要寄存器化,以提高工作頻率,這對設計做到時序收斂也

        是極有好處的。

        9) 除非是低功耗設計,不然不要用門控時鐘--這會增加設計的不穩定性,在要

        用到門控時鐘的地方,也要將門控信號用時鐘的下降沿 打一拍再輸出與時鐘相與。

        clk_gate_en -------- ----

        -----------------|D Q |------------------| gate_clk

        _out

        | | ---------| )--------

        -

        ------o|> | | | /

        clk | -------- | ----

        ------------------------------------

        10)禁止用計數器分頻后的信號做其它模塊的時鐘,而要用改成時鐘使能的方式

        ,否則這種時鐘滿天飛的方式對設計的可靠性極為不利,也大大增加了靜態時序分析的

        復雜性。如FPGA的輸入時鐘是25M的,現在系統內部要通過RS232與PC通信,要以rs232_

        1xclk的速率發送數據。

        不要這樣做:

        always (posedge rs232_1xclk or negedge rst_n)

        begin

        ...

        end

        而要這樣做:

        always (posedge clk_25m or negedge rst_n)

        begin

        ...

        else if ( rs232_1xclk == 1'b1 )

        ...

        end

        11)狀態機要寫成3段式的(這是最標準的寫法),即

        ...

        always @(posedge clk or negedge rst_n)

        ...

        current_state = next_state;

        ...

        always @ (current_state ...)

        ...

        case(current_state)

        ...

        s1:

        if ...

        next_state = s2;

        ...

        ...

        always @(posedge clk or negedge rst_n)

        ...

        else

        a = 1'b0;

        c = 1'b0;

        c = 1'b0; //賦默認值

        case(current_state)

        s1:

        a = 1'b0; //由于上面賦了默認值,這里就不用再對b

        、c賦值了(b、c在該狀態為0,不會產生鎖存器,下同)

        s2:

        b = 1'b1;

        s3:

        c = 1'b1;

        default:

        ...

        ...



        3.ALTERA參考設計準則

        1) Ensure Clock, Preset, and Clear configurations are free of glitch

        es.

        2) Never use Clocks consisting of more than one level of combinatori

        al logic.

        3) Carefully calculate setup times and hold times for multi-Clock sy

        stems.

        4) Synchronize signals between flipflops in multi-Clock systems when

        the setup and hold time requirements cannot be met.

        5) Ensure that Preset and Clear signals do not contain race conditio

        ns.

        6) Ensure that no other internal race conditions exist.

        7) Register all glitch-sensitive outputs.

        Synchronize all asynchronous inputs.

        9) Never rely on delay chains for pin-to-pin or internal delays.

        10)Do not rely on Power-On Reset. Use a master Reset pin to clear al

        l flipflops.

        11)Remove any stuck states from state machines or synchronous logic.



        關鍵詞: ASIC設計規范

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 句容市| 石屏县| 贵港市| 边坝县| 濮阳市| 乌拉特中旗| 增城市| 吉木乃县| 晋中市| 东乌珠穆沁旗| 西平县| 板桥市| 体育| 鲜城| 永福县| 乡宁县| 迁西县| 高清| 灵石县| 星子县| 金秀| 黄平县| 金乡县| 大丰市| 永靖县| 固始县| 曲阳县| 无棣县| 河北区| 连云港市| 汕尾市| 新绛县| 明水县| 平昌县| 庆阳市| 安远县| 汝州市| 罗山县| 海盐县| 安国市| 莫力|