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

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

3天內不再提示

RTL表達式和運算符

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-07-27 09:11 ? 次閱讀

數字硬件建模SystemVerilog-連接和復制運算符

經過幾周的更新,SV核心部分用戶自定義類型和包內容已更新完畢,接下來就是RTL表達式和運算符。

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

b975cb1a-0d44-11ed-ba43-dac502259ad0.png

介紹

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

表5-1:RTL建模的連接和復制運算符
b9af4d90-0d44-11ed-ba43-dac502259ad0.png

以下變量和值用于顯示這些運算符的結果。

b9cd8b52-0d44-11ed-ba43-dac502259ad0.png
  • {a,b}結果是101100010001(二進制),一個12位的值。

  • {4’hF,a}結果是1111_1011(二進制),一個8位的值。

  • {8{2’bl0}}結果是1010101010101010(二進制),一個16位的值,2’b01重復8次。

  • {{4{a[3]}},a} 結果是11111011(二進制)一個8位的值, a的有效位重復4次,然后連接到a。

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

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

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

示例5-1:使用連接運算符:多輸入狀態寄存器
//`begin_keywords"1800-2012"//useSystemVerilog-2012keywords
modulestatus_reg
(inputlogicclk,//registerclk
inputlogicrstN,//active-lowreset
inputlogicint_en,//1-bitinterruptenable
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的綜合結果:連接運算符(狀態寄存器)
b9e4e176-0d44-11ed-ba43-dac502259ad0.png
筆記
綜合編譯器實現運算符的方式會受到許多因素的影響,包括目標設備、與運算符一起使用的其他運算符或編程語句、使用的綜合編譯器,以及”指定的綜合選項和約束。

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

示例5-2:使用連接運算符:帶進位的加法器
//`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的綜合結果:加法運算符(帶進位/輸出的加法器)
ba0e9016-0d44-11ed-ba43-dac502259ad0.png

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

連接和復制運算符經常用于創建用作其他運算符操作數的表達式。這方面的例子將在本章后面的章節和后面的章節中看到。

在使用連接時,有一些重要的規則需要注意:

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

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

審核編輯:湯梓紅


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

    關注

    1

    文章

    382

    瀏覽量

    59162
  • 運算符
    +關注

    關注

    0

    文章

    163

    瀏覽量

    10959

原文標題:SystemVerilog-連接和復制運算符

文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    數字硬件建模SystemVerilog-按位運算符

    經過幾周的更新,SV核心部分用戶自定義類型和包內容已更新完畢,接下來就是RTL表達式運算符。
    的頭像 發表于 08-12 14:27 ?2044次閱讀

    關于數字硬件建模SystemVerilog

    經過幾周的更新,SV核心部分用戶自定義類型和包內容已更新完畢,接下來就是RTL表達式運算符。
    的頭像 發表于 09-01 08:50 ?1011次閱讀

    JAVA語言的運算符表達式

    JAVA語言的運算符表達式3.5 運算符表達式數據的類型除了限定數據的存儲方式、取值范圍之外,還定義了對該數據類型可進行的操作即運算。表
    發表于 12-06 00:28

    數據類型、運算符表達式

    數據類型、運算符表達式2.1   程序設計概述2.2  C語言的數據類型 2.3  常量和變量 2.4 
    發表于 03-10 15:05

    C語言單片機第七課 運算符表達式(關系運算符)

    第七課 運算符表達式(關系運算符)關系運算符,同樣我們也并不陌生。單片機C語言中有六種關系運算符,這些東西同樣是在我們小時候學算術時就已經
    發表于 10-21 09:38

    關于C語言的運算符表達式--筆記1

    關于C語言的運算符表達式學好C語言的基礎運算,還是很有必要,無論在C語言,還是后面單片機,都會用到基礎運算。如果不能很好運用,會給我們編程帶來很多麻煩,廢話不多說,現在開始寫一些個人
    發表于 07-19 00:48

    單片機C語言教程-運算符表達式

    單片機C語言教程-運算符表達式   單片機C語言教程-運算符表達式  運算符的種類、優先級和結合性  c語言中運
    發表于 03-27 17:13 ?2139次閱讀

    RTL表達式運算符

    運算符對操作數執行操作。大多數運算符都有兩個操作數。
    的頭像 發表于 07-21 09:11 ?1365次閱讀

    SystemVerilog-運算符/表達式規則

    RTL建模中廣泛使用的運算符是條件運算符,也稱為三元運算符,該運算符用于在兩個表達式之間進行選擇
    的頭像 發表于 08-03 09:03 ?2384次閱讀

    關于RTL表達式運算符

    經過幾周的更新,SV核心部分用戶自定義類型和包內容已更新完畢,接下來就是RTL表達式運算符。
    的頭像 發表于 09-01 09:13 ?1359次閱讀

    RTL表達式運算符

    經過幾周的更新,SV核心部分用戶自定義類型和包內容已更新完畢,接下來就是RTL表達式運算符。
    的頭像 發表于 10-11 10:15 ?1235次閱讀

    RTL表達式運算符

    決策語句(Decision statements)允許程序塊的執行流程根據設計中信號的當前值分支到特定語句。SystemVerilog有兩個主要的決策語句:if…else語句和case語句,使用關鍵字case、case…inside,casex和casez。
    的頭像 發表于 10-21 09:04 ?1045次閱讀

    RTL表達式運算符

    經過幾周的更新,SV核心部分用戶自定義類型和包內容已更新完畢,接下來就是RTL表達式運算符。
    的頭像 發表于 11-03 09:14 ?946次閱讀

    位邏輯運算符表達式

    位邏輯運算符與位邏輯表達式可以實現位的編輯,比如位的清零、設置、取反和取補等操作。使用位邏輯運算符與位邏輯表達式可以在不使用匯編的情況下實現部分匯編的功能
    的頭像 發表于 02-21 15:22 ?986次閱讀
    位邏輯<b class='flag-5'>運算符</b>與<b class='flag-5'>表達式</b>

    C語言基本的算術運算符表達式

    注意:自增和自減運算符只能用于變量,而不能用于常量或表達式 **C語言算術表達式運算符的優先級與結合性 ** 在表達式求值時,
    的頭像 發表于 03-09 10:44 ?1323次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>