色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

什么是變量?

汽車電子技術 ? 來源: OpenFPGA ? 作者:碎碎思 ? 2023-02-09 14:40 ? 次閱讀


pYYBAGPklRWAPZEZAATf9QVsofo091.png

System Verilog提供兩組通用的數據類型:網絡和變量(nets 和 variables)。網絡和變量同時具有類型和數據類型特性。類型表示信號為網絡或變量,數據類型表示網絡或變量的值系統,即2態或4態。為簡單起見,使用術語data type來表示信號的類型和數據類型。

軟件工具(如仿真器和綜合編譯器)使用數據類型來確定如何存儲數據和處理數據上的更改。數據類型影響操作,并在RTL建模中用于指示所需的硅行為。例如,數據類型用于確定加法器應基于整數還是基于浮點,以及應執行有符號算術還是無符號算術。

網絡類型和變量類型

變量用作編程的臨時存儲。此臨時存儲用于仿真。實際的硅通常不需要相同的臨時存儲,這取決于使用變量的編程環境。SystemVerilog有幾種變量類型,將在第下節中討論。

網絡用于將設計塊連接在一起,網絡將數據值從源(稱為驅動程序)傳輸到目標或接收端驅動程序。SystemVerilog提供了幾種網絡類型,后面會對此進行了更詳細的討論。

兩態和四態數據類型(位和邏輯)

SystemVerilog變量可以是2態數據類型或4態數據類型。對于2態,變量的每一位可以具有0或1的值,對于4態,變量的每一位可以具有0、1、Z或X的值。SystemVerilog網絡只能是4態數據類型。關鍵字位定義變量為2態數據類型。關鍵字邏輯定義變量或網絡為4態數據類型。

變量類型

程序塊指定的左側需要變量。以下代碼示例中的信號總和和輸出必須是變量。

poYBAGPklQWAOQn0AADbQLSJr20500.png

變量為仿真提供臨時存儲。

前面代碼段中的always_comb過程將執行賦值語句sum=a+b;每次a或b改變值時。必須通過仿真器存儲sum的值,直到下一次a或b發生變化。類似地,always_ff過程將在時鐘的每個正邊緣執行if-else決策語句。out的值必須在時鐘周期之間通過仿真器進行存儲。

仿真器所需的臨時存儲并不一定意味著實際硅需要存儲。前面代碼片段中的always_comb過程將在硅中作為組合邏輯實現。因此,總和的值將持續反映加法器的輸出,并且不需要任何類型的硬件存儲。另一方面,always_ff程序將作為觸發器在硅中實現,觸發器是一種硬件存儲設備。

可綜合變量數據類型

通過同時指定類型和數據類型來聲明變量。類型可以顯式指定或隱式推斷,關鍵字var。

var關鍵字很少在實際SystemVeriIog代碼中使用。相反,var類型是從其他關鍵字和上下文推斷出來的。

SystemVerilog有幾個內置變量數據類型的關鍵字。這些關鍵字推斷var邏輯(4態)或var位(2態)變量類型。幾個變量數據類型表示硅的行為,并且是可綜合的。表3-1列出了這些可綜合的數據類型。

表3-1:可綜合變量數據類型

類型 代表
reg 用戶定義向量大小的通用4態變量;等價于var logic
logic 通常推斷用戶定義向量大小的通用var logic 4態變量,模塊input/inout端口除外,在模塊input/inout端口上推斷wire logic
integer 32位4態狀態變量;等價于var logic [ 31: 0 ]
bit 具有用戶定義向量大小的通用2態var變量;如果未指定大小,則默認為1位大小
int 32位2態變量;相當于var bit[31 0];綜合編譯器將int視為4態integer整數類型
byte 8位2態變量;等效于var bit [ 7 : 0 ]
shortint 16位2態變量;等效于var bit [ 15: 0 ]
longint 64位2態變量;等效于var bit [ 63: 0 ]
最佳做法準則3-3
使用4態邏輯數據類型推斷RTL模型中的變量。不要在RTL模型中使用2態類型。本指南的一個例外是使用int類型聲明for-loop迭代中變量。

使用4態變量允許仿真器在實際硬件中的值不明確時使用X值。

上下文相關的邏輯數據類型。

在幾乎所有的上下文中,logic數據類型推斷出一個與reg相同的4態變量。關鍵字logic實際上不是變量類型,它是一種數據類型,表示網絡或變量可以有4態值。但是,當logic關鍵字單獨使用或與模塊輸出端口的聲明結合使用時,會推斷變量。當logic與input or inout端口的聲明結合使用時,如果logic不推斷變量,則會推斷網絡類型.

過時的reg數據類型

reg數據類型是原始Verilog語言遺留下來的過時數據類型。應使用logic類型而不是reg。最初的Verilog語言使用reg數據類型作為通用變量。

不幸的是,關鍵字reg的使用是一個誤稱,它似乎是“register”的縮寫,寄存器是用觸發器構建的硬件設備。實際上,使用reg變量與推斷的硬件之間沒有相關性。使用變量的上下文決定所表示的硬件是組合邏輯還是時序觸發器邏輯。使用logic代替reg有助于防止這種錯誤觀念,即硬件寄存器將被推斷

X值可能表示存在設計問題

當仿真過程中出現X值時,通常表明存在設計問題。會導致X值的某些類型的設計錯誤包括:

  • 未復位或以其他方式初始化的寄存器。
  • 在低功耗模式下未正確保持狀態的電路。
  • 未連接的模塊輸入端口(未連接的輸入端口在高阻抗下浮動,當高阻抗值傳播到其他邏輯時,通常會產生X值)。
  • 多驅動程序沖突(總線爭用)。具有未知結果的操作。
  • 超出范圍的位選擇和數組索引
  • 建立或保持時間沖突。

在RTL模型中避免使用2態數據類型。

bit、byte、shortint、int和longint數據類型僅存儲2態值。這些類型不能表示高阻抗(Z值),也不能使用X值表示未初始化或未知的仿真條件。當使用2態數據類型時,不會出現指示潛在設計錯誤(如上面列表中的錯誤)的X值。由于2態數據類型只能有一個0或1值,因此在仿真過程中出現錯誤的設計可能會正常運行,這是不好的!使用2態變量的合適位置是驗證試驗臺中的隨機刺激。

不可綜合的變量類型

SystemVerilog有幾種主要用于驗證的變量類型,RTL綜合編譯器通常不支持這些類型。表3-2列出了這些額外的變量類型。這些數據類型沒有在本系列中任何要綜合的示例中使用。

表3-2:不可綜合的變量數據類型

類型 代表
real 雙精度浮點變量
shortreal 單精度浮點變量
time 具有timeunit和timeprecision屬性的64位無符號4態變量
realtime 雙精度浮點變量;與real一模一樣
string 可存儲8位ASCII字符字符串的字節類型的動態大小數組
event 存儲仿真同步對象句柄的指針變量
class handle 存儲類對象句柄的指針變量(聲明類型是類的名稱,而不是關鍵字類)
chandle 一個指針變量,用于存儲從SystemVerilog直接編程接口(DPI,Direct Programming Interface)傳遞到仿真中的指針
virtual interface 存儲接口端口句柄的指針變量(interface關鍵字是可選的)

上述的類型不代表在任何綜合器中都不可綜合,只代表了在大部分綜合器中不可綜合。

變量聲明規則

變量是通過同時指定類型和數據類型來聲明的,類型是關鍵字var,可以顯式指定或隱式推斷。

筆記
在實際的SystemVeriIog代碼中很少使用var關鍵字。相反,var類型是從其他關鍵字和上下文推斷出來的

一些示例變量聲明:

logicv1//推斷varlogic(1位4態變量)

bit v2;//推斷var bit(1位2態變量)

integer

v3//推斷var

integer

(32位4態變量)

intv4//推斷varint(32位2態變量)

唯一需要var關鍵字的地方是將input 或者 inout端口聲明為4態變量時。如果未顯式聲明為變量,則這些端口方向將默認為網絡類型,輸入端口很少需要是變量。

標量變量。標量變量是一個1位變量。reg, logic 和 bit數據類型默認為1位標量,

向量變量(packed arrays)。向量是連續位的數組。IEEE SystemVerilog標準將向量稱為包陣列(packed arrays)。該reg, logic and bit數據類型可以表示任意大小的向量:通過在方括號中指定位的范圍([]),后跟向量名稱來聲明向量的大小。范圍聲明為[最高有效位編號:最低有效位編號]。最高有效位(MSB)和最低有效位(LSB)可以是任意的數字,并且LSB可以小于或大于MSB。LSB為較小數字的向量范圍稱為小端點。LSB為較大數值的向量范圍稱為大端

logic[31:0]v9;//32位向量,小端邏輯

logic [1:32] v10;;//32位向量,大端邏輯

RTL建模中最常見的約定是小端邏輯,并使用0作為向量范圍的LSB。上述變量v9說明了這一慣例。本系列中的所有例子都使用了小端邏輯約定。

byte、shortint、int、longint和integer數據類型具有預定義的向量大小,如表3-1所述。預定義范圍為小端,LSB編號為位0。

有符號和無符號變量

在操作中,存儲在向量變量中的值可以被視為有符號或無符號。無符號變量僅存儲正值。有符號變量可以存儲正值和負值。SystemVerilog使用2的補碼表示負值。有符號變量的最高有效位是符號位。設置符號位時,向量的剩余位以二補形式表示負值。

默認情況下,reg、logic、bit和time數據類型是無符號變量,byte、shortint、int、integer和longint數據類型是有符號變量??梢酝ㄟ^將變量顯式聲明為有符號或無符號來更改此默認值。

poYBAGPklPGASxtWAAB2v4osmN0826.png

常量位選擇和部分選擇

向量可以全部或部分引用。位選擇引用向量的單個位。位選擇使用向量名稱,后跟方括號中的位號([ ])部分選擇指向量的多個連續位。部分選擇使用向量名稱,后跟方括號中的一系列位號([ ])

部分選擇必須滿足兩個規則:位的范圍必須是連續的,并且部分選擇的endian必須與向量聲明的endian相同。位選擇或部分選擇的結果總是無符號的,即使完整變量是有符號的。

變量位選擇和部分選擇。前面代碼段中的位選擇使用了硬編碼位號。這稱為固定位選擇。位選擇的索引號也可以是變量。比如說。

pYYBAGPklOKAFaObAAB2bZH4TOk180.png

pYYBAGPklNSAILOXAAE3GHdSpTE913.png

零位選擇的起點也可以是可變的。零位選擇可以從變量起點遞增或遞減。選擇的總位數為固定范圍,可變部分選擇的形式為:

pYYBAGPklL6ALVclAACv3kh9cKo002.png

第二個問題:標記指示從起始點位號開始遞增。標記指示從起始點位號開始遞減。

下面的示例使用可變部分選擇來迭代32位向量的字節。

poYBAGPklLKAFOZzAADz3FO0yZs916.png

可變位和部分選擇是可綜合的。但是,前面說明變量位和部分選擇的代碼段不滿足某些綜合編譯器所需的其他RTL編碼限制。

帶有子字段的向量。通過使用兩組或多組方括號來定義向量范圍,可以使用子字段聲明向量。下面的代碼片段顯示了簡單32位向量和帶有子字段的32位向量之間的區別:

poYBAGPklJ6AKrz1AAB78sBgqLo571.png

圖3-1說明了這兩種聲明的區別。

poYBAGPklI-AD_8tAAHZmn1rVKk300.png

圖3-1:帶有子字段的向量

聲明:

pYYBAGPklGCAC7H2AABRw0Jb8oU979.png

第一個范圍[3 :0]定義向量中有多少子字段。在本例中,有四個子字段,索引為 b [ 0 ],b [ l ],b [ 2 ],和 b[3]。第二個范圍[7:0]定義了每個子字段的大小,在本例中為8位。圖3-1說明了簡單32位向量和細分為4字節的32位向量的布局。

細分向量的子字段可以使用單個索引而不是部分選擇來引用。下面的代碼片段演示了在向量b的字節之間循環,并且更簡單,因為每個字節都是向量的一個子字段。

poYBAGPklFKATskNAADPjWuqfrM944.png

細分向量的位選擇需要多個索引-選擇向量b第三字節的位7編碼為:b[3][7]

最佳做法準則3-4
當設計主要選擇整個向量或向量的單個位時,使用簡單的向量聲明;當設計經常選擇向量的部分時,使用帶有子字段的向量,并且這些部分位于已知邊界上,例如字節或字邊界。

選擇向量的子字段而不是使用簡單向量的固定部分或可變部分,可以使代碼更易于編寫和維護。

變量分配規則

變量可以通過多種方式賦值:

  • 作為過程賦值語句的左側(在always、always_comb、always_latch、always_ff或初始過程塊中,或在任務或函數中)。
  • 作為連續賦值語句的左側(使用assign語句)。
  • 作為賦值運算符的結果,例如++增量運算符。
  • 作為模塊、任務或功能的輸入。
  • 作為模塊實例、任務實例、功能實例或原語實例的輸出端口的連接。

變量只能由單個源分配。例如,如果變量從assign 連續賦值語句中,則在程序塊或模塊輸入端口中也為變量賦值是非法的。但是,對同一變量的任何數量的程序賦值都被視為一個源。要使以下代碼正常工作,此規則非常重要:

pYYBAGPklEeAANuTAACsVmTPc1w334.png

在RTL建模中,單個源變量賦值的語義限制非常重要,該限制有助于確保抽象RTL仿真行為和綜合后實現行為相同

always_ff,always_comb and always_latch程序塊進一步將對變量的程序賦值限制為僅在一個程序內,這強制了綜合編譯器的要求。同一過程中變量的多個賦值被視為單個驅動程序。

poYBAGPklC6ANcvXAAIcQ27cSS0227.png

未初始化變量

在為變量指定值之前,變量未初始化。4態變量的未初始化值為X(所有位均設置為x)。2態變量的未初始化值為“0”(所有位均設置為0)。

在下面的示例中,直到clk的第一個正邊緣出現,變量q才被初始化。作為一種4態邏輯類型,在第一個時鐘之前,q將有一個X值,此時q將被指定為0值或d值。如果clk的正邊緣沒有出現,該X值可能表示設計問題,可能是由于時鐘選通或其他一些情況。

poYBAGPklCOAHOTDAACtC3werrI451.png
筆記
未初始化的2態變量可以隱藏設計問題。未初始化的2態變量的值為0,這可能是一個合法的復位值。這可能會隱藏設計中復位邏輯的問題。

在線變量初始化

SystemVerilog允許在聲明變量時初始化變量,稱為在線初始化。例如:

pYYBAGPklBeAJ2ZqAAARW3DIiKs450.png

在仿真開始時,變量的在線初始化只執行一次.

一些FPGA設備可以編程,使寄存器在已知狀態下通電,而無需復位。在線變量初始化可用于仿真這些時序設備(如觸發器)的通電狀態。

筆記
ASIC技術不支持在線變量初始化,某些FPGA技術可能支持在線變量初始化。

當針對不支持可編程通電狀態的設備時,綜合編譯器將:(a)不允許在線初始化,(b)忽略它-當忽略在線初始化時,RTL仿真行為和綜合門級實現可能不匹配,

最佳做法準則3-5
僅在將作為FPGA實現的RTL模型中使用變量初始化,并且僅對觸發器的加電時建模。

對于ASIC設計,應使用復位功能來初始化變量。不要使用在線初始化。對于FPGA設計,只有在確定RTL模型始終針對支持加電寄存器狀態的設備時,才使用在線初始化。在RTL模型中使用在線初始化有效地將模型鎖定為僅用于該類型FPGA設備。

最佳做法準則3-6
僅在RTL模型中使用內嵌變量初始化。不要使用初始過程初始化變量。

支持在線變量初始化的綜合編譯器和目標FPGA設備也允許使用初始過程對觸發器的通電值進行建模。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110077
  • System
    +關注

    關注

    0

    文章

    165

    瀏覽量

    36929
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28360
收藏 人收藏

    評論

    相關推薦

    全局變量和局部變量有什么區別

    全局變量是編程術語中的一種,源自于變量之分。變量分為局部與全局,局部變量又可稱之為內部變量。局部變量
    發表于 12-11 11:58 ?3.3w次閱讀
    全局<b class='flag-5'>變量</b>和局部<b class='flag-5'>變量</b>有什么區別

    全局變量和成員變量的區別分析

    成員變量是指定維度的成員變量,用于標識某個維度成員。簡介由 Analysis Services 內部使用的值,以標識某個維度成員。MemberKeyColumn 屬性指定維度的成員變量。例如,1到12之間的某個數字可以是相應于年
    發表于 12-11 13:50 ?6910次閱讀
    全局<b class='flag-5'>變量</b>和成員<b class='flag-5'>變量</b>的區別分析

    靜態變量、自動變量與寄存器變量的存儲

    register限定詞通知編譯器--程序中的變量將頻繁使用。它的意思是建議編譯器將程序中用register限定的變量放置在計算機的內部寄存其中,這樣可能得到更小更快的程序。但是,編譯器將根據實際情況考慮是否采納該建議--是否將register
    發表于 06-03 11:27 ?3165次閱讀
    靜態<b class='flag-5'>變量</b>、自動<b class='flag-5'>變量</b>與寄存器<b class='flag-5'>變量</b>的存儲

    什么是PLC變量

    什么是變量變量是用于程序的,可以有不同值的變量。 根據應用范圍,變量可分為以下幾類 局部變量: 局部
    的頭像 發表于 10-11 11:53 ?1.8w次閱讀
    什么是PLC<b class='flag-5'>變量</b>

    C語言中局部變量和全局變量

    全局變量也稱為外部變量,它是在函數外部定義的變量。它不屬于哪一個函數,它屬于一個源程序文件。其作用域是整個源程序。在函數中使用全局變量,一般應作全局
    的頭像 發表于 10-15 10:48 ?5522次閱讀

    西門子PLC變量表中定義變量

    什么是變量變量是用于程序的,可以有不同值的變量。? 根據應用范圍,變量可分為以下幾類 ●? 局部變量:? 局部
    的頭像 發表于 12-23 16:25 ?2w次閱讀
    西門子PLC<b class='flag-5'>變量</b>表中定義<b class='flag-5'>變量</b>

    基于變量依賴關系模型的變量重要性度量綜述

    基于變量依賴關系模型的變量重要性度量綜述
    發表于 07-02 14:44 ?0次下載

    Static變量和Local變量的區別

    變量可以分為3類,即Static、Automatic、和Local。如下表所示。
    的頭像 發表于 10-12 09:35 ?1384次閱讀

    淺談Javascript變量

    變量是引用數字或字符串等值的標識。在使用變量之前,您需要聲明它。要聲明變量,請使用`var`關鍵字后跟變量名,例如`var message;`。
    的頭像 發表于 12-12 17:35 ?768次閱讀

    Python-局部變量與全局變量

    局部變量是在函數內部定義的變量,只能在函數內部使用,函數執行結束后,函數內部的局部變量會被系統回收,不同的函數,可以定義相同名稱的局部變量,相互之間沒有任何關聯
    的頭像 發表于 02-16 15:16 ?890次閱讀
    Python-局部<b class='flag-5'>變量</b>與全局<b class='flag-5'>變量</b>

    C語言的變量-1

    變量,顧名思義就是可以變化的量。在C語言中,提供了很多變量類型,這些變量類型可以用來表示不同數據類型的數據。為了區分不同的變量,我們需要給變量
    的頭像 發表于 02-21 15:04 ?794次閱讀
    C語言的<b class='flag-5'>變量</b>-1

    變量的存儲

    在編寫C程序的過程中,我們常常會使用到變量。而基本的變量類型在前面的教程也已經講到,在我們創建這些變量的時候,變量會被創建在內存。值得注意的是,變量
    的頭像 發表于 02-21 15:07 ?794次閱讀
    <b class='flag-5'>變量</b>的存儲

    Java變量的命名規范

    什么是變量? 變量就是初中數學的代數的概念,例如一個簡單的方程,x,y都是變量: y=x^2+1 在Java程序設計中,變量是指一個包含值的存儲地址以及對應的符號名稱。 從定義上來看,
    的頭像 發表于 10-10 11:49 ?716次閱讀

    什么是變量?PLC變量哪些部分組成?

    變量在 TIA Portal 中集中管理。 在程序編輯器中創建 PLC 變量與在 PLC 變量表中創建 PLC 變量沒什么區別。 如果在程序或 HMI 畫面的多個位置使用某個
    發表于 10-15 11:31 ?4961次閱讀
    什么是<b class='flag-5'>變量</b>?PLC<b class='flag-5'>變量</b>哪些部分組成?

    for循環里的變量是局部變量

    對于一個普通for循環而言,循環變量是局部變量。在大多數編程語言中,循環變量只在循環內部的作用域中可見。換句話說,循環變量的聲明和賦值僅在循環的每次迭代中有效,并且不能在循環外部訪問或
    的頭像 發表于 11-23 14:50 ?2718次閱讀
    主站蜘蛛池模板: 欧美乱妇15p图| 亚洲午夜久久久无码精品网红A片 亚洲午夜久久久久中文字幕 | 色狗综合网| 在线毛片片免费观看| 国产高清视频免费在线观看| 蜜桃成熟时2在线观看完整版hd| 校园刺激全黄H全肉细节文| 99亚洲精品| 久久综合伊人 magnet| 小草影院免费| 范冰冰hdxxxx| 捏揉舔水插按摩师| 欲奴第一季在线观看全集| 国产婷婷色一区二区三区在线 | 乌克兰美女x?x?y?y| old老男人野外树林tv| 老师湿乎乎两半嫩| 伊人国产在线视频| 国产在线一卡二卡| 无码国产成人777爽死在线观看| 不卡无线在一二三区| 免费视频网站嗯啊轻点| 一级毛片西西人体44rt高清| 国产免费高清mv视频在线观看| 日韩精品 电影一区 亚洲高清| 973午夜伦伦电影论片| 久久青青草原精品国产软件| 亚洲精品卡2卡3卡4卡5卡区| 国产精品伦理一二三区伦理| 日欧一片内射VA在线影院| WWW国产亚洲精品久久| 美女扒开腿让男生桶爽免费APP| 一本到2v不卡区| 簧片在线免费观看| 性色AV一区二区三区V视界影院 | 在线观看永久免费网站| 国产午夜精品一区二区| 兽交白浆喷水高潮| 丰满五十老女人性视频| 日本枯瘦娇小| 超污视频带污疼免费视频|