乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      eXvision‘s Blog Verilog代碼編寫規(guī)范

       ekylin 2007-05-26
      投票
      關于投票
      Verilog代碼編寫規(guī)范

      一. 強調Verilog代碼編寫風格的必要性。
          強調Verilog代碼編寫規(guī)范,經常是一個不太受歡迎的話題,但卻是非常有必要的。
      每個代碼編寫者都有自己的編寫習慣,而且都喜歡按照自己的習慣去編寫代碼。與自己編寫風格相近的代碼,閱讀起來容易接受和理解。相反和自己編寫風格差別較大的代碼,閱讀和接受起來就困難一些。
          曾有編程大師總結說,一個優(yōu)秀的程序員,能維護的代碼長度大約在1萬行數(shù)量級。代碼的整潔程度,很大程度上影響著代碼的維護難度。
          遵循代碼編寫規(guī)范書寫的代碼,很容易閱讀、理解、維護、修改、跟蹤調試、整理文檔。相反代碼編寫風格隨意的代碼,通?;逎⒘鑱y,會給開發(fā)者本人的調試、修改工作帶來困難,也會給合作者帶來很大麻煩。
          (實際上英文Coding Style有另一層涵義,更偏重的是,某一個電路,用那一種形式的語言描述,才能將電路描述得更準確,綜合以后產生的電路更合理。本文更偏重的是,編寫Verilog代碼時的書寫習慣。)

      二. 強調編寫規(guī)范的宗旨。
      縮小篇幅
      提高整潔度
      便于跟蹤、分析、調試
          增強可讀性,幫助閱讀者理解
          便于整理文檔
          便于交流合作

      三. 變量及信號命名規(guī)范。
      1.     系統(tǒng)級信號的命名。
      系統(tǒng)級信號指復位信號,置位信號,時鐘信號等需要輸送到各個模塊的全局信號;系統(tǒng)信號以字符串Sys開頭。

      2.     低電平有效的信號后一律加下劃線和字母n。如:SysRst_n;FifoFull_n;

      3.     經過鎖存器鎖存后的信號,后加下劃線和字母r,與鎖存前的信號區(qū)別。如CpuRamRd信號,經鎖存后應命名為CpuRamRd_r。
      低電平有效的信號經過鎖存器鎖存后,其命名應在_n后加r。如CpuRamRd_n信號,經鎖存后應命名為CpuRamRd_nr
      多級鎖存的信號,可多加r以標明。如CpuRamRd信號,經兩級觸發(fā)器鎖存后,應命名為CpuRamRd_rr。

      4.    模塊的命名。
          在系統(tǒng)設計階段應該為每個模塊進行命名。命名的方法是,將模塊英文名稱的各個單詞首字母組合起來,形成3到5個字符的縮寫。若模塊的英文名只有一個單詞,可取該單詞的前3個字母。各模塊的命名以3個字母為宜。例如:
          Arithmatic Logical Unit模塊,命名為ALU。
          Data Memory Interface模塊,命名為DMI。
          Decoder模塊,命名為DEC。

      5.    模塊之間的接口信號的命名。
      所有變量命名分為兩個部分,第一部分表明數(shù)據(jù)方向,其中數(shù)據(jù)發(fā)出方在前,數(shù)據(jù)接收方在后,第二部分為數(shù)據(jù)名稱。
      兩部分之間用下劃線隔離開。
      第一部分全部大寫,第二部分所有具有明確意義的英文名全部拼寫或縮寫的第一個字母大寫,其余部分小寫。
      舉 例:CPUMMU_WrReq,下劃線左邊是第一部分,代表數(shù)據(jù)方向是從CPU模塊發(fā)向存儲器管理單元模塊(MMU)。下劃線右邊Wr為Write的縮 寫,Req是Request的縮寫。兩個縮寫的第一個字母都大寫,便于理解。整個變量連起來的意思就是CPU發(fā)送給MMU的寫請求信號。
              模塊上下層次間信號的命名也遵循本規(guī)定。
          若某個信號從一個模塊傳遞到多個模塊,其命名應視信號的主要路徑而定。

      6. 模塊內部信號:
      模塊內部的信號由幾個單詞連接而成,縮寫要求能基本表明本單詞的含義;
      單詞除常用的縮寫方法外(如:Clock->Clk, Write->Wr, Read->Rd等),一律取該單詞的前幾個字母( 如:Frequency->Freq, Variable->Var 等);
      每個縮寫單詞的第一個字母大寫;
      若遇兩個大寫字母相鄰,中間添加一個下劃線(如DivN_Cntr);
      舉例:SdramWrEn_n;FlashAddrLatchEn;

      四. 編碼格式規(guī)范。

      1. 分節(jié)書寫,各節(jié)之間加1到多行空格。如每個always,initial語句都是一節(jié)。每節(jié)基本上完成一個特定的功能,即用于描述某幾個信號的產生。在每節(jié)之前有幾行注釋對該節(jié)代碼加以描述,至少列出本節(jié)中描述的信號的含義。

      2. 行首不要使用空格來對齊,而是用Tab鍵,Tab鍵的寬度設為4個字符寬度。行尾不要有多余的空格。

      3. 注釋。
      使用//進行的注釋行以分號結束;
      使用/* */進行的注釋,/*和*/各占用一行,并且頂頭;
      例:
      // Edge detector used to synchronize the input signal;

      4. 空格的使用:
      不同變量,以及變量與符號、變量與括號之間都應當保留一個空格。
      Verilog關鍵字與其它任何字符串之間都應當保留一個空格。如:
      Always @ (......)
      使用大括號和小括號時,前括號的后邊和后括號的前邊應當留有一個空格。
      邏輯運算符、算術運算符、比較運算符等運算符的兩側各留一個空格,與變量分隔開來;單操作數(shù)運算符例外,直接位于操作數(shù)前,不使用空格。
      使用//進行的注釋,在//后應當有一個空格;注釋行的末尾不要有多余的空格。
      例:
      assign SramAddrBus = { AddrBus[31:24], AddrBus[7:0] };
      assign DivCntr[3:0] = DivCntr[3:0] + 4‘b0001;
      assign Result = ~Operand;

      5. 同一個層次的所有語句左端對齊;Initial、always等語句塊的begin關鍵詞跟在本行的末尾,相應的end關鍵詞與Initial、always對齊;這樣做的好處是避免因begin獨占一行而造成行數(shù)太多;
      例:
      always @ ( posedge SysClk or negedge SysRst ) begin
      if( !SysRst ) DataOut <= 4‘b0000;
      else if( LdEn ) begin
      DataOut <= DataIn;
      End
      else DataOut <= DataOut + 4‘b0001;
      end

      6. 不同層次之間的語句使用Tab鍵進行縮進,每加深一層縮進一個Tab;

      8.    在endmodule,endtask,endcase等標記一個代碼塊結束的關鍵詞后面要加上一行注釋說明這個代碼塊的名稱;

      9.    在task名稱前加tsk以示標記。在function的名稱前加func以示標記。例如:
      task tskResetSystem;
      ......
      endtask    //of tskResetSystem

      五.小結:
          以上列出的代碼編寫規(guī)范無法覆蓋代碼編寫的方方面面,還有很多細節(jié)問題,需要在實際編寫過程中加以考慮。并且有些規(guī)定也不是絕對的,需要靈活處理。并不是律條,但是在一個項目組內部、一個項目的進程中,應該有一套類似的代碼編寫規(guī)范來作為約束。
      總的方向是,努力寫整潔、可讀性好的代碼。

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多