女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

specify塊語句詳解

CHANBAEK ? 來源:數字IC與好好生活的兩居室 ? 作者:除夕之夜啊 ? 2023-03-30 11:42 ? 次閱讀

路徑延遲用關鍵字 specify 和 endspecify 描述,關鍵字之間組成 specify 塊語句。

specify 是模塊中獨立的一部分,不能出現在其他語句塊(initial, always 等)中。

specify 塊語句主要有以下功能:

指定所有路徑中引腳到引腳的延遲;

定義 specparam 常量;

在電路中設置時序檢查。

并行連接

每條路徑都有一個源引腳和目的引腳,將這些路徑的延遲依次用 specify 語句描述出來,稱為并行連接。

并行連接用法格式如下:

(=>) =;

一個帶有路徑延遲的 4 輸入的與邏輯模塊模型描述如下:

module and4(
   output       out,
   input        a, b, c, d);


   specify
      (a => out) = 2.5 ;
      (b => out) = 2.5 ;
      (c => out) = 3.5 ;
      (d => out) = 3.5 ;
   endspecify


   wire         an1, an2 ;
   and          (an1, a, b);
   and          (an2, c, d);
   and          (out, an1, an2);
endmodule

可以用關鍵字 specparam 在 specify 塊中定義延遲數值常量,然后賦值給路徑延遲。

specparam 定義的常量只能在 specify 塊內部使用。

specify
      specparam ab_2_out = 2.5 ;
      specparam cd_2_out = 3.5 ;

      (a => out) = ab_2_out ;
      (b => out) = ab_2_out ;
      (c => out) = cd_2_out ;
      (d => out) = cd_2_out ;
   endspecify

并行連接中,源引腳和目的引腳是一一對應的。 并行連接也支持多位寬信號間的路徑延遲描述,但是位寬必須保持一致。

module paral_conn(
    input [3:0]         d,
    output [3:0]        q);




   specify
      (d => q) = 3 ;
   endspecify




   assign q = d & 0101 ;
endmodule

其中,specify 塊語句也可以展開描述,兩種表達方式是等效的。

specify
      (d[0] => q[0]) = 3 ;
      (d[1] => q[1]) = 3 ;
      (d[2] => q[2]) = 3 ;
      (d[3] => q[3]) = 3 ;
   endspecify

全連接

在全連接中,源引腳中的每一位與目標引腳的每一位相連接。

源引腳和目的引腳的連接是組合遍歷的,且不要求位寬對應。

全連接用法格式如下:

(*>) =;

例如 4 輸入的與邏輯模塊可以描述如下:

module and4(
   output       out,
   input        a, b, c, d);


   specify
      (a,b *> out) = 2.5 ;
      (c,d *> out) = 3.5 ;
   endspecify


   wire         an1, an2 ;
   and          (an1, a, b);
   and          (an2, c, d);
   and          (out, an1, an2);
endmodule

邊沿敏感路徑

邊沿敏感路徑用于輸入到輸出延遲的時序建模,并使用邊緣標識符指明觸發條件。 如果沒有指明的話,任何變化都會觸發源引腳到目的引腳的延遲值的變化。

用法舉例如下:

//在 clk 上升沿,從 clk 到 out 的路徑上升延遲為 1,下降延遲為 2
    //從 inout 的數據路徑是同向的,即 out = in
    (posedge clk => (out +: in)) = (1,2);

    //在 clk 下降沿,從 clk 到 out 的路徑上升延遲為 1,下降延遲為 2
    //從 inout 的數據路徑是反向的,即 out = ~in
    (negedge clk => (out -: in)) = (1,2);

    //clk 任意變化時,從 clk 到 out 的路徑上升延遲為 1,下降延遲為 2
    //從 inout 的數據路徑是不可以預知的,同向、反向或不變
    (negedge clk => (out : in)) = (1,2);

條件路徑

Verilog 也允許模型中根據信號值的不同,有條件的給路徑延遲進行不同的賦值。

條件中的操作數可以是標量,也可以是向量,條件表達式也可以包含任意操作符。

需要注意的是,應當只使用 if 語句將條件路徑中所有的輸入狀態都完整的聲明。 沒有聲明的路徑會使用分布延遲,分布延遲也沒有聲明的話,將使用零延遲。 如果路徑延遲和分布延遲同時聲明,將選擇最大的延遲作為路徑延遲。

但是 specify 中的 if 語句不能使用 else 結構,可以使用 ifnone 描述條件缺省時的路徑延遲。

specify
      if (a)    (a => out) = 2.5 ;
      if (~a)   (a => out) = 1.5 ;


      if (b & c)        (b => out) = 2.5 ;
      if (!(b & c))     (b => out) = 1.5 ;


      if ({c, d} == 2'b01)
                (c,d *> out) = 3.5 ;
      ifnone    (c,d *> out) = 3 ;
   endspecify

門延遲路徑

門延遲(上升延遲、下降延遲、關斷延遲)的數值也可以通過路徑延遲的方法來描述。

可以定義的延遲路徑個數為 1 個,2 個,3 個,6 個, 12 個,其他數量的延遲值都是錯誤的。

下面舉例說明門延遲模型中路徑延遲的表示方法。

//1 個參數:上升、下降、關斷延遲只使用一個延遲參數
   specify
      specparam t_delay = 1.5 ;
      (clk => q) = t_delay ;
   endspecify
   //2 個參數: 上升延遲(0->1, z->1, 0->z)= 1.5
   //         下降延遲(1->0, z->0, 1->z)= 2
   specify
      specparam t_rise = 1.5, t_fall = 2 ;
      (clk => q) = (t_rise, t_fall) ;
   endspecify

   //3 個參數: 上升延遲(0->1, z->1)= 1.5
   //         下降延遲(1->0, z->0)= 2
   //         關斷延遲(1->z, 0->z)= 1.8
   specify
      specparam t_rise = 1.5, t_fall = 2, t_turnoff = 1.8 ;
      (clk => q) = (t_rise, t_fall, t_turnoff);
   endspecify


   //6 個參數:分別對應0->1, 1->0, 0->z, z->1, 1->z, z->0
   specify
      specparam t_01 = 1.5, t_10 = 2,   t_0z = 1.8 ;
      specparam t_z1 = 2,   t_1z = 2.2, t_z0 = 2.1 ;
      (clk => q) = (t_01, t_10, t_0z, t_z1, t_1z, t_z0) ;
   endspecify
   //12 個參數:分別對應0->1, 1->0, 0->z, z->1, 1->z, z->0
   //                 0->x, x->1, 1->x, x->0, x->z, z->x
   specify
      specparam t_01 = 1.5, t_10 = 2,   t_0z = 1.8 ;
      specparam t_z1 = 2,   t_1z = 2.2, t_z0 = 2.1 ;
      specparam t_0x = 1.1, t_x1 = 1.2, t_1x = 2.1 ;
      specparam t_x0 = 2,   t_xz = 2  , t_zx = 2.1 ;


      (clk => q) = (t_01, t_10, t_0z, t_z1, t_1z, t_z0,
                    t_0x, t_x1, t_1x, t_x0, t_xz, t_zx) ;
   endspecify

門路徑延遲模型中,也可以指定最大值、最小值和典型值。

//上升、下降和關斷延的延遲值:min: typical: max
   specify
      specparam t_rise    = 1:1.5:1.8;
      specparam t_fall    = 1:1.8:2 ;
      specparam t_turnoff = 1.1:1.2:1.3 ;
      (clk => q) = (t_rise, t_fall, t_turnoff);
   endspecify

X 傳輸延遲

如果沒有指定 x 轉換時間的延遲(門路徑延遲中沒有給出 12 個延遲參數),則規定:

從 x 轉換為已知狀態的延遲時間為,可能需要的最大延遲時間;

從已知狀態轉換為 x 的延遲時間為,可能需要的最小延遲時間。

例如,當門路徑延遲中給出 6 個延遲參數時,則 x 傳輸延遲時間定義如下表所示:

x 轉換 延遲值
0->x 最小(t_01、t_0z)
1->x 最小(t_10、t_1z)
Z->X 最小(t_z1、t_z0)
x->0 最大(t_10、t_z0)
X->1 最大(t_01、t_z1)
X->Z 最大值(t_1z, t_0z)
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 延遲
    +關注

    關注

    1

    文章

    74

    瀏覽量

    13730
  • 引腳
    +關注

    關注

    16

    文章

    1547

    瀏覽量

    52337
  • 時序
    +關注

    關注

    5

    文章

    397

    瀏覽量

    37779
  • 路徑
    +關注

    關注

    0

    文章

    50

    瀏覽量

    12607
  • 邏輯模塊
    +關注

    關注

    0

    文章

    5

    瀏覽量

    1542
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    C語言中if語句、if-else語句和switch語句詳解

    在C語言中,有三種條件判斷結構:if語句、if-else語句和switch語句
    發表于 08-18 16:36 ?1.3w次閱讀
    C語言中if<b class='flag-5'>語句</b>、if-else<b class='flag-5'>語句</b>和switch<b class='flag-5'>語句</b><b class='flag-5'>詳解</b>

    【FPGA學習】Verilog HDL的語句應該怎么寫

    Verilog HDL 在執行語句時分為順序和并行兩種方式。在順序語句中,語句按給定次序順序執行;在并行語句
    發表于 09-25 09:22

    Java復合語句的資料說明

    同C語言或其他語言相同,Java語言的復合語句是以整個區為單位的語句,所以又稱語句。復合語句
    發表于 03-22 08:00 ?2次下載
    Java復合<b class='flag-5'>語句</b>的資料說明

    Verilog的兩種語句解析

    1. 語句有兩種,一種是 begin-end 語句, 通常用來標志()執行的語句;一種是 fork-join 語句,通常用來標志()執行的
    的頭像 發表于 06-18 15:16 ?3238次閱讀

    Verilog的語句

    begin_end順序,用于將多條語句組成順序語句按順序一條一條執行(除了帶有內嵌延遲控制的非阻塞賦值語句),每條
    的頭像 發表于 05-18 10:29 ?1554次閱讀

    Verilog的語句fork...join 和 begin...end

    begin_end順序,用于將多條語句組成順序語句按順序一條一條執行(除了帶有內嵌延遲控制的非阻塞賦值語句),每條
    的頭像 發表于 06-09 10:30 ?3561次閱讀

    systemverilog的決策語句if…else語句介紹

    決策語句(Decision statements)允許程序的執行流程根據設計中信號的當前值分支到特定語句
    的頭像 發表于 10-21 08:58 ?3733次閱讀

    決策語句允許程序的執行流程

    SystemVerilog case語句與C switch語句類似,但有重要區別。SystemVerilog不能使用break語句(C使用break從switch語句的分支退出)。ca
    的頭像 發表于 10-27 08:57 ?1143次閱讀

    SystemVerilog中的always語句

    “always”關鍵字意味著這個語句“總是”一直執行。大多數時候“always”后面跟一個邊沿事件或者延遲。
    的頭像 發表于 12-06 09:47 ?2773次閱讀

    什么是SystemVerilog-決策語句-if-else語句

    決策語句(Decision statements)允許程序的執行流程根據設計中信號的當前值分支到特定語句。SystemVerilog有兩個主要的決策語句:if…else
    的頭像 發表于 02-09 14:15 ?1488次閱讀
    什么是SystemVerilog-決策<b class='flag-5'>語句</b>-if-else<b class='flag-5'>語句</b>?

    Verilog中的If語句和case語句介紹

    我們在上一篇文章中已經看到了如何使用程序(例如 always 來編寫按順序執行的 verilog 代碼。 我們還可以在程序中使用許多語句來控制在我們的verilog設計中信
    的頭像 發表于 05-11 15:37 ?5546次閱讀
    Verilog中的If<b class='flag-5'>語句</b>和case<b class='flag-5'>語句</b>介紹

    詳解Verilog賦值語句語句、條件語句

    不可綜合語句經常用在測試文件中,未注明的語句均是可綜合的
    的頭像 發表于 07-02 10:47 ?8162次閱讀
    <b class='flag-5'>詳解</b>Verilog賦值<b class='flag-5'>語句</b>、<b class='flag-5'>塊</b><b class='flag-5'>語句</b>、條件<b class='flag-5'>語句</b>

    Python中什么是語句

    條件判斷 語句 什么是語句呢? 語句是在條件為真(條件
    的頭像 發表于 09-12 16:41 ?1283次閱讀

    Python條件和條件語句

    if語句 對于if語句,若條件判定為真,那么后面的語句就會被執行。若條件判定為假,語句就會被
    的頭像 發表于 09-12 16:45 ?787次閱讀

    單片機if是什么語句

    單片機中的if語句是一種條件語句,用于根據不同的條件執行不同的代碼。在程序執行過程中,條件語句用來決定是否執行特定的代碼段。在單片機編程中,if
    的頭像 發表于 01-05 14:04 ?2436次閱讀