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

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

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

連接和復(fù)制運(yùn)算符

汽車電子技術(shù) ? 來源:OpenFPGA ? 作者: 碎碎思 ? 2023-02-09 15:40 ? 次閱讀

數(shù)字硬件建模SystemVerilog-連接和復(fù)制運(yùn)算符

poYBAGPkowyALvtUAATZyu9VRrM226.png

經(jīng)過幾周的更新,SV核心部分用戶自定義類型和包內(nèi)容已更新完畢,接下來就是RTL表達(dá)式和運(yùn)算符。

馬上HDLBits-SystemVerilog版本也開始準(zhǔn)備了,基本這一部分完成后就開始更新~

pYYBAGPkoxiAUJ-5AAIk-uoqDPg077.png

介紹

連接和復(fù)制運(yùn)算符將多個(gè)表達(dá)式連接在一起,形成一個(gè)向量表達(dá)式。結(jié)果向量中的位總數(shù)是每個(gè)子表達(dá)式中所有位的總和。連接有兩種形式,簡單連接和復(fù)制連接。一個(gè)簡單的連接將任意數(shù)量的表達(dá)式連接在一起。復(fù)制連接將表達(dá)式連接在一起,然后復(fù)制指定次數(shù)的結(jié)果。表5-3顯示了連接和復(fù)制運(yùn)算符的一般語法和用法:

表5-1:RTL建模的連接和復(fù)制運(yùn)算符

以下變量和值用于顯示這些運(yùn)算符的結(jié)果。

poYBAGPkoy-AXTi_AAAvdjJlvVU994.png

連接和復(fù)制運(yùn)算符是可綜合的。運(yùn)算符不直接表示硬件中的任何邏輯功能。它們只是表示同時(shí)使用多個(gè)信號,將文字值附加到信號或文字值。

示例5-1和5-2說明了連接運(yùn)算符在RTL建模中的兩種常見應(yīng)用:

在賦值語句的右側(cè)或左側(cè)將多個(gè)信號連接在一起。在每個(gè)示例之后,圖5-1和5-2顯示了連接運(yùn)算符如何在綜合生成的門級功能。然而,在RTL模型中,連接運(yùn)算符是一種有用的構(gòu)造,用于以簡潔的方式表示硬件功能。

示例5-1:使用連接運(yùn)算符:多輸入狀態(tài)寄存器

//`begin_keywords

"1800-2012"

//useSystemVerilog-2012keywords

modulestatus_reg

(inputlogicclk,//registerclk

inputlogicrstN,//active-lowreset

inputlogicint_en,//1-bitinterrupt

enable

inputlogiczero,//1-bitresult=0flag

inputlogiccarry,//1-bitresultoverflowflag

inputlogicneg,//1-bitnegativeresultflag

inputlogic[1:0]parity,//2-bitparitybits

outputlogic[7:0]status//8-bitstatusregisteroutput

);

timeunit1ns;timeprecision1ns;

always_ff@(posedgeclkornegedgerstN)//asyncreset

if

(!rstN)//active-lowreset

status<=?{1

'b0,2'

b11,5

'b0};//reset

else

status<=?{int_en,2'

b11,zero,carry,neg,parity};//load

endmodule:status_reg

//`end_keywords

圖5-1:示例5-l的綜合結(jié)果:連接運(yùn)算符(狀態(tài)寄存器)

pYYBAGPkoz-ANHa2AAGNkcfVBvg169.png
筆記
綜合編譯器實(shí)現(xiàn)運(yùn)算符的方式會(huì)受到許多因素的影響,包括目標(biāo)設(shè)備、與運(yùn)算符一起使用的其他運(yùn)算符或編程語句、使用的綜合編譯器,以及”指定的綜合選項(xiàng)和約束。

示例5-1中的狀態(tài)寄存器有兩個(gè)未使用的位,它們的常量值為1,用于生成圖5-1所示狀態(tài)寄存器實(shí)現(xiàn)的綜合編譯器將這兩個(gè)未使用的位映射到8位上拉輸出上。其他綜合編譯器,或者指定不同的綜合約束,可能會(huì)以不同的方式映射相同的RTL功能,例如通過使用預(yù)設(shè)為1值的觸發(fā)器

示例5-2:使用連接運(yùn)算符:帶進(jìn)位的加法器

//`begin_keywords

"1800-2012"

modulertl_adder

(inputlogica,b,ci,

outputlogicsum,co

);

timeunit1ns;timeprecision1ns;

assign{co,sum}=a+b+ci;

endmodule:rtl_adder

//`end_keywords

圖5-2:示例5-2的綜合結(jié)果:加法運(yùn)算符(帶進(jìn)位/輸出的加法器)

pYYBAGPko0yAAycnAAG_jja-u34700.png

用于生成圖5-2所示實(shí)現(xiàn)的綜合編譯器將RTL加法器功能映射到通用加法器塊——綜合的下一步將針對特定的ASICFPGA設(shè)備,通用加法器將在該步驟中映射到特定的加法器實(shí)現(xiàn)。

連接和復(fù)制運(yùn)算符經(jīng)常用于創(chuàng)建用作其他運(yùn)算符操作數(shù)的表達(dá)式。這方面的例子將在本章后面的章節(jié)和后面的章節(jié)中看到。

在使用連接時(shí),有一些重要的規(guī)則需要注意:

  • 可以將任何多個(gè)表達(dá)式連接在一起,只包括一個(gè)表達(dá)式,
  • 連接中的表達(dá)式必須具有固定大小。無大小的文字值不允許使用,例如數(shù)字5和’1,是不被允許的。
  • 連接的結(jié)果始終是無符號的,無論連接中表達(dá)式的符號是什么。

不要將連接與賦值列表混淆。SystemVerilog有一個(gè)包含在’{and}(賦值列表)標(biāo)記之間的賦值列表運(yùn)算符。雖然賦值列表運(yùn)算符看起來類似于連接運(yùn)算符,但其功能卻大不相同。賦值列表運(yùn)算符將多個(gè)值連接在一起,以創(chuàng)建一個(gè)新的單個(gè)值。賦值列表運(yùn)算符以撇號開頭(’),并且用于將單個(gè)值的集合分配給數(shù)組的單個(gè)元素或結(jié)構(gòu)的單個(gè)成員。

{{4{a[3]}},a} 結(jié)果是11111011(二進(jìn)制)一個(gè)8位的值, a的有效位重復(fù)4次,然后連接到a。

{8{2’bl0}}結(jié)果是1010101010101010(二進(jìn)制),一個(gè)16位的值,2’b01重復(fù)8次。

{4’hF,a}結(jié)果是1111_1011(二進(jìn)制),一個(gè)8位的值。

{a,b}結(jié)果是101100010001(二進(jìn)制),一個(gè)12位的值。

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

    關(guān)注

    0

    文章

    55

    瀏覽量

    11649
  • 連接
    +關(guān)注

    關(guān)注

    2

    文章

    95

    瀏覽量

    20931
  • 運(yùn)算符
    +關(guān)注

    關(guān)注

    0

    文章

    170

    瀏覽量

    11048
收藏 人收藏

    評論

    相關(guān)推薦

    C語言基礎(chǔ)知識(4)--運(yùn)算符

    C語言中,運(yùn)算符包括有算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算。
    的頭像 發(fā)表于 06-15 09:38 ?3187次閱讀

    C語言運(yùn)算符的使用方法

    詳細(xì)介紹了C語言表達(dá)式、算術(shù)運(yùn)算符、賦值運(yùn)算符、關(guān)系運(yùn)算符、條件結(jié)構(gòu)、邏輯運(yùn)算符、位運(yùn)算符的語法和使用方法,并討論了
    發(fā)表于 11-02 11:30 ?1415次閱讀
    C語言<b class='flag-5'>運(yùn)算符</b>的使用方法

    matlab關(guān)系運(yùn)算符

    matlab關(guān)系運(yùn)算符 算數(shù)運(yùn)算符 + 矩陣加  - 減  * 乘  .* 數(shù)組乘  ^ 矩陣乘方  .^ 數(shù)
    發(fā)表于 06-18 14:47 ?2825次閱讀

    條件運(yùn)算符是什么_條件運(yùn)算符有哪些

    運(yùn)算符優(yōu)先級高于賦值、逗號運(yùn)算符,低于其他運(yùn)算符。關(guān)系運(yùn)算實(shí)際上是邏輯比較運(yùn)算,它是邏輯運(yùn)算
    發(fā)表于 11-16 16:02 ?1.1w次閱讀
    條件<b class='flag-5'>運(yùn)算符</b>是什么_條件<b class='flag-5'>運(yùn)算符</b>有哪些

    單目運(yùn)算符是什么_單目運(yùn)算符有哪些

    單目運(yùn)算符是指運(yùn)算所需變量為一個(gè)的運(yùn)算符,又叫一元運(yùn)算符,其中有邏輯非運(yùn)算符:!、按位取反運(yùn)算符
    的頭像 發(fā)表于 02-24 15:42 ?6w次閱讀
    單目<b class='flag-5'>運(yùn)算符</b>是什么_單目<b class='flag-5'>運(yùn)算符</b>有哪些

    C運(yùn)算符的優(yōu)先級和結(jié)合性詳細(xì)解決

    運(yùn)算符是一種告訴編譯器執(zhí)行特定的數(shù)學(xué)或邏輯操作的符號。 C語言內(nèi)置了豐富的運(yùn)算符,大體可分為10類:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位
    的頭像 發(fā)表于 02-22 17:27 ?3185次閱讀

    淺析MySQL中的各類運(yùn)算符

    MySQL支持多種運(yùn)算符,我們在寫SQL腳本時(shí)經(jīng)常會(huì)需要用到各種各樣的運(yùn)算符,這些運(yùn)算符可以用來連接表達(dá)式,進(jìn)而從數(shù)據(jù)庫中查詢我們需要的結(jié)果集等。這些類型主要包括算術(shù)
    的頭像 發(fā)表于 05-03 17:41 ?2022次閱讀
    淺析MySQL中的各類<b class='flag-5'>運(yùn)算符</b>

    python運(yùn)算符是什么

    python運(yùn)算符 0. 什么是運(yùn)算符? 本章節(jié)主要說明Python的運(yùn)算符。舉個(gè)簡單的例子 4 +5 = 9 。 例子中,4和5被稱為操作數(shù),“+”號為運(yùn)算符。 Python語言支持
    的頭像 發(fā)表于 02-21 16:44 ?2341次閱讀

    C語言總結(jié)_語句、運(yùn)算符

    當(dāng)前文章復(fù)盤C語言的: 位運(yùn)算運(yùn)算符、基本運(yùn)算符、數(shù)據(jù)類型、變量、for語句、while語句、goto語句、switch語句、運(yùn)算符優(yōu)先級強(qiáng)制轉(zhuǎn)換等。
    的頭像 發(fā)表于 08-14 09:39 ?968次閱讀

    什么是運(yùn)算符重載

    重載運(yùn)算符是具有特殊名稱的函數(shù),是通過關(guān)鍵字** operator **后跟運(yùn)算符的符號來定義的
    的頭像 發(fā)表于 01-20 15:30 ?2423次閱讀

    條件(三元)運(yùn)算符

    RTL建模中廣泛使用的運(yùn)算符是條件運(yùn)算符,也稱為三元運(yùn)算符,該運(yùn)算符用于在兩個(gè)表達(dá)式之間進(jìn)行選擇——表5-2列出了用于表示條件運(yùn)算符的重點(diǎn)。
    的頭像 發(fā)表于 02-09 15:42 ?1297次閱讀
    條件(三元)<b class='flag-5'>運(yùn)算符</b>

    什么是移位運(yùn)算符

    移位運(yùn)算符將向量的位向右或向左移位指定的次數(shù)。SystemVerilog具有按位和算術(shù)移位運(yùn)算符
    的頭像 發(fā)表于 02-09 15:49 ?1761次閱讀
    什么是移位<b class='flag-5'>運(yùn)算符</b>

    什么是邏輯運(yùn)算符

    邏輯運(yùn)算符對其操作數(shù)求值,并返回一個(gè)值,該值指示求值結(jié)果是真還是假(true or false)。例如,運(yùn)算a && b測試a和b是否都為真,如果兩個(gè)操作數(shù)都為真,則運(yùn)算符返回真。否則,運(yùn)算符
    的頭像 發(fā)表于 02-09 15:55 ?1948次閱讀
    什么是邏輯<b class='flag-5'>運(yùn)算符</b>

    C語言的運(yùn)算符

    在C語言中,我們常常會(huì)用到表達(dá)式,在使用表達(dá)式的過程中便會(huì)使用到運(yùn)算符。C語言中,不同的運(yùn)算符擁有不同的優(yōu)先級和結(jié)合性。在執(zhí)行運(yùn)算的過程中,程序會(huì)按照運(yùn)算符的優(yōu)先級和結(jié)合性進(jìn)行計(jì)算。
    的頭像 發(fā)表于 02-21 15:12 ?1145次閱讀
    C語言的<b class='flag-5'>運(yùn)算符</b>

    Go語言運(yùn)算符主要包括哪些呢?

    Go語言運(yùn)算符主要包括:算數(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符和其他
    的頭像 發(fā)表于 05-26 15:54 ?822次閱讀
    Go語言<b class='flag-5'>運(yùn)算符</b>主要包括哪些呢?