RM新时代网站-首页

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

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

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

specify塊語(yǔ)句詳解

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

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

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

specify 塊語(yǔ)句主要有以下功能:

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

定義 specparam 常量;

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

并行連接

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

并行連接用法格式如下:

(=>) =;

一個(gè)帶有路徑延遲的 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

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

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




   specify
      (d => q) = 3 ;
   endspecify




   assign q = d & 0101 ;
endmodule

其中,specify 塊語(yǔ)句也可以展開(kāi)描述,兩種表達(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)引腳的每一位相連接。

源引腳和目的引腳的連接是組合遍歷的,且不要求位寬對(duì)應(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

邊沿敏感路徑

邊沿敏感路徑用于輸入到輸出延遲的時(shí)序建模,并使用邊緣標(biāo)識(shí)符指明觸發(fā)條件。 如果沒(méi)有指明的話,任何變化都會(huì)觸發(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 任意變化時(shí),從 clk 到 out 的路徑上升延遲為 1,下降延遲為 2
    //從 inout 的數(shù)據(jù)路徑是不可以預(yù)知的,同向、反向或不變
    (negedge clk => (out : in)) = (1,2);

條件路徑

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

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

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

但是 specify 中的 if 語(yǔ)句不能使用 else 結(jié)構(gòu),可以使用 ifnone 描述條件缺省時(shí)的路徑延遲。

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ù)值也可以通過(guò)路徑延遲的方法來(lái)描述。

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

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

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

如果沒(méi)有指定 x 轉(zhuǎn)換時(shí)間的延遲(門路徑延遲中沒(méi)有給出 12 個(gè)延遲參數(shù)),則規(guī)定:

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

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

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

x 轉(zhuǎn)換 延遲值
0->x 最?。╰_01、t_0z)
1->x 最?。╰_10、t_1z)
Z->X 最?。╰_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)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 延遲
    +關(guān)注

    關(guān)注

    1

    文章

    70

    瀏覽量

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

    關(guān)注

    16

    文章

    1193

    瀏覽量

    50409
  • 時(shí)序
    +關(guān)注

    關(guān)注

    5

    文章

    387

    瀏覽量

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

    關(guān)注

    0

    文章

    50

    瀏覽量

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

    關(guān)注

    0

    文章

    5

    瀏覽量

    1472
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言中if語(yǔ)句、if-else語(yǔ)句和switch語(yǔ)句詳解

    在C語(yǔ)言中,有三種條件判斷結(jié)構(gòu):if語(yǔ)句、if-else語(yǔ)句和switch語(yǔ)句。
    發(fā)表于 08-18 16:36 ?1.2w次閱讀
    C語(yǔ)言中if<b class='flag-5'>語(yǔ)句</b>、if-else<b class='flag-5'>語(yǔ)句</b>和switch<b class='flag-5'>語(yǔ)句</b><b class='flag-5'>詳解</b>

    【FPGA學(xué)習(xí)】Verilog HDL的語(yǔ)句應(yīng)該怎么寫

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

    Java復(fù)合語(yǔ)句的資料說(shuō)明

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

    Verilog的兩種語(yǔ)句解析

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

    Verilog的語(yǔ)句

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

    Verilog的語(yǔ)句fork...join 和 begin...end

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

    systemverilog的決策語(yǔ)句if…else語(yǔ)句介紹

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

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

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

    SystemVerilog中的always語(yǔ)句

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

    什么是SystemVerilog-決策語(yǔ)句-if-else語(yǔ)句?

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

    Verilog中的If語(yǔ)句和case語(yǔ)句介紹

    我們?cè)谏弦黄恼轮幸呀?jīng)看到了如何使用程序(例如 always 來(lái)編寫按順序執(zhí)行的 verilog 代碼。 我們還可以在程序中使用許多語(yǔ)句來(lái)控制在我們的verilog設(shè)計(jì)中信
    的頭像 發(fā)表于 05-11 15:37 ?4500次閱讀
    Verilog中的If<b class='flag-5'>語(yǔ)句</b>和case<b class='flag-5'>語(yǔ)句</b>介紹

    詳解Verilog賦值語(yǔ)句、語(yǔ)句、條件語(yǔ)句

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

    Python中什么是語(yǔ)句

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

    Python條件和條件語(yǔ)句

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

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

    單片機(jī)中的if語(yǔ)句是一種條件語(yǔ)句,用于根據(jù)不同的條件執(zhí)行不同的代碼。在程序執(zhí)行過(guò)程中,條件語(yǔ)句用來(lái)決定是否執(zhí)行特定的代碼段。在單片機(jī)編程中,if語(yǔ)
    的頭像 發(fā)表于 01-05 14:04 ?1755次閱讀
    RM新时代网站-首页