• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > EDA/PCB > 設計應用 > SOC參數自動配置設計方法與功耗優化

    SOC參數自動配置設計方法與功耗優化

    作者: 時間:2012-10-29 來源:網絡 收藏

    在 :…… : > 中的就是Eperl 代碼,以 開始的是Vperl 代碼, 如ModuleBeg 表示模塊的開始。 在FIFO 中,可配置的主要是2 個: FIFO 深度和FIFO 寬度,所以dma_fif.evp 文件對外只有2 個可調, 而其他的比如定義信號所需要的FIFO 寄存器的最高位width_msb 、head 指針的寬度ptr_width 等都可以用Eperl 腳本生成。 這與宏定義相比體現了Eperl 的靈活性。再比如可以通用寄存器組gpr.evp 文件利用for 循環來例化每一個寄存器,更充分地體現了使用Eperl 的靈活性。 for 循環的代碼如下所示。

    for($i = 0;$i$reg _num;$i++) {

    printInstance (iu_register,iu_register_$i );n ;

    }

    : >

    ……

    3.evp 格式的文件經過Eperl 解析后生成

    3.vp格式的文件。 dma _fifo.evp 經過Eperl 解析后生成的3.vp 文件如下所示。

    ∥Synchronous FIFO.fifo_depth x fifo _width bit words。

    ModuleBeg ;

    Ports ;

    Regs ;

    Wires ;

    Force (mem ,fifomem ,15 ,0 ,3 ,0) ;

    ……

    ∥Update FIFO memory。

    always @(posedge clk) begin

    if (rstp== 1′b0 writep==1′b1 fullp==1′b0)

    fifomem [head]= din [15 :0] ;

    end

    ∥Update the head register。

    always @(posedge clk) begin

    if (rstp = = 1′b1)

    head [1 :0 ] = 2′b0 ;

    else

    if (writep = = 1′b1 fullp = = 1′b0)

    head [1 :0 ] = head [1 :0 ] + 1 ;

    end

    ……

    當然IP 模塊的不同配置會造成 系統信號的不同。 如向系統中添加通用異步收發器(UART)模塊, 系統就要增加輸入輸出端口,并且要增加很多內部的連線,比如把IP 總線引入UART.Vperl 程序可以解決這個問題。

    Vperl 的工作原理是通過分析模塊內使用的信號的屬性來確定模塊的信號定義。 HDL 具有一定的語法結構,比如Verilog 有2 種信號類型,always 塊中的= 操作符左邊一定是reg 類型信號,由此取reg 類型的補集就是wire 類型,除非顯式地通過Force()聲明為其他類型,如在dma_fifo.vp 中的第6 行代碼,聲明為二維reg 數組類型。 分析模塊也可以確定模塊的輸入輸出,如果一個信號在模塊中自始至終沒有被賦值過,那么這個信號必然是input信號;同理,如果一個信號被賦值但從來沒被使用過,就是output 信號; 如果既被賦值過,又被使用過,那么這個信號有很大可能是這個模塊的內部信號,不是模塊的端口,除非顯式地通過Force ( ) 聲明為inout類型。 對于模塊中例化的子模塊(在3.vp 中用Instance() 語句聲明) ,Vperl 程序首先分析模塊間的從屬關系,并先處理最底層的子模塊代碼,在分析子模塊接口的輸入輸出屬性后,缺省地把子模塊的輸入輸出信號作為上層模塊的接入信號,并在上層模塊中進行連接,當然Vperl 也提供了Connect () 語句來更改子模塊接入上層模塊的信號名。 所以用Vperl 的格式書寫的文件3.vp不需要在文件頭部定義信號名。 如下所示是dma_fifo.vp 文件的示例代碼。



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 南平市| 威海市| 朝阳市| 南靖县| 西乌珠穆沁旗| 延长县| 若羌县| 观塘区| 黑龙江省| 两当县| 宝坻区| 巴东县| 津市市| 安多县| 双峰县| 上栗县| 天气| 新丰县| 宜宾市| 容城县| 盐亭县| 梓潼县| 苍南县| 新丰县| 板桥市| 虎林市| 陆川县| 通道| 太白县| 乌鲁木齐县| 松原市| 渝中区| 林州市| 柏乡县| 大同县| 集贤县| 邹平县| 海盐县| 静宁县| 桦川县| 武乡县|