精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

specify塊語句詳解

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

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

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

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

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

定義 specparam 常量;

在電路中設(shè)置時序檢查。

并行連接

每條路徑都有一個源引腳和目的引腳,將這些路徑的延遲依次用 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

可以用關(guān)鍵字 specparam 在 specify 塊中定義延遲數(shù)值常量,然后賦值給路徑延遲。

specparam 定義的常量只能在 specify 塊內(nèi)部使用。

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

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

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




   specify
      (d => q) = 3 ;
   endspecify




   assign q = d & 0101 ;
endmodule

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

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

全連接

在全連接中,源引腳中的每一位與目標(biāo)引腳的每一位相連接。

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

全連接用法格式如下:

(*>) =;

例如 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

邊沿敏感路徑

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

用法舉例如下:

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

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

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

條件路徑

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

條件中的操作數(shù)可以是標(biāo)量,也可以是向量,條件表達(dá)式也可以包含任意操作符。

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

但是 specify 中的 if 語句不能使用 else 結(jié)構(gòu),可以使用 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

門延遲路徑

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

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

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

//1參數(shù):上升、下降、關(guān)斷延遲只使用一個延遲參數(shù)
   specify
      specparam t_delay = 1.5 ;
      (clk => q) = t_delay ;
   endspecify
   //2 個參數(shù): 上升延遲(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 個參數(shù): 上升延遲(0->1, z->1)= 1.5
   //         下降延遲(1->0, z->0)= 2
   //         關(guān)斷延遲(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 個參數(shù):分別對應(yīng)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 個參數(shù):分別對應(yīng)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

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

//上升、下降和關(guān)斷延的延遲值: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 轉(zhuǎn)換時間的延遲(門路徑延遲中沒有給出 12 個延遲參數(shù)),則規(guī)定:

從 x 轉(zhuǎn)換為已知狀態(tài)的延遲時間為,可能需要的最大延遲時間;

從已知狀態(tài)轉(zhuǎn)換為 x 的延遲時間為,可能需要的最小延遲時間。

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

x 轉(zhuǎn)換 延遲值
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)
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 延遲
    +關(guān)注

    關(guān)注

    1

    文章

    70

    瀏覽量

    13513
  • 引腳
    +關(guān)注

    關(guān)注

    16

    文章

    1184

    瀏覽量

    50294
  • 時序
    +關(guān)注

    關(guān)注

    5

    文章

    386

    瀏覽量

    37290
  • 路徑
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    12485
  • 邏輯模塊
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    1472
收藏 人收藏

    評論

    相關(guān)推薦

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

    在C語言中,有三種條件判斷結(jié)構(gòu):if語句、if-else語句和switch語句
    發(fā)表于 08-18 16:36 ?1.2w次閱讀
    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學(xué)習(xí)】Verilog HDL的語句應(yīng)該怎么寫

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

    Java復(fù)合語句的資料說明

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

    Verilog的兩種語句解析

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

    Verilog的語句

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

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

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

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

    決策語句(Decision statements)允許程序的執(zhí)行流程根據(jù)設(shè)計中信號的當(dāng)前值分支到特定語句
    的頭像 發(fā)表于 10-21 08:58 ?3092次閱讀

    決策語句允許程序的執(zhí)行流程

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

    SystemVerilog中的always語句

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

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

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

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

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

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

    不可綜合語句經(jīng)常用在測試文件中,未注明的語句均是可綜合的
    的頭像 發(fā)表于 07-02 10:47 ?7004次閱讀
    <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中什么是語句

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

    Python條件和條件語句

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

    單片機(jī)if是什么語句

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