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

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

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

SystemVerilog-運(yùn)算符/表達(dá)式規(guī)則

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-08-03 09:03 ? 次閱讀

數(shù)字硬件建模SystemVerilog-條件(三元)運(yùn)算符

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

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

3d888314-12c4-11ed-ba43-dac502259ad0.png

介紹

RTL建模中廣泛使用的運(yùn)算符是條件運(yùn)算符,也稱為三元運(yùn)算符,該運(yùn)算符用于在兩個(gè)表達(dá)式之間進(jìn)行選擇——表5-2列出了用于表示條件運(yùn)算符的重點(diǎn)。

表5-2:RTL建模的條件(三元)運(yùn)算符

運(yùn)算符 示例用法 描述
?: s?m:n 如果s為真,則選擇m;如果s為假,則選擇n,否則(s不為真不為假)對(duì)m和n進(jìn)行按位比較

問號(hào)(?)前面列出的表達(dá)式被稱為控制表達(dá)式(control expression),表示它可以是一個(gè)簡(jiǎn)單的整數(shù)值(任何大小的向量,包括1位),也可以是另一個(gè)返回整數(shù)值的操作的結(jié)果。例如:

3dba5b0a-12c4-11ed-ba43-dac502259ad0.png

使用以下規(guī)則將控制表達(dá)式計(jì)算為true或false:

如果所有位為l,則表達(dá)式為true。

如果所有位均為0,則表達(dá)式為false。

如果未設(shè)置任何位且并非所有位均為0,則表達(dá)式未知,如果某些位為X或Z,則可能出現(xiàn)這種情況。

對(duì)于4-state值,控制表達(dá)式可能既不是真的也不是假的。在下面的值中,沒有一個(gè)位是l,但不是所有的位都是0。

3dd90118-12c4-11ed-ba43-dac502259ad0.png

當(dāng)控制表達(dá)式未知時(shí),條件運(yùn)算符對(duì)兩個(gè)可能的返回值進(jìn)行按位比較。如果對(duì)應(yīng)位均為0,則該位位置返回0,如果對(duì)應(yīng)位均為l,則該位位置返回1。如果對(duì)應(yīng)的位不同,或者任一位有X或Z值,則返回該位位置的X。下面的示例演示了這種仿真行為。

3dea21f0-12c4-11ed-ba43-dac502259ad0.png

條件運(yùn)算符的行為通常類似于硬件多路復(fù)用器。示例5-3說明了如何使用條件運(yùn)算符在寄存器的兩個(gè)輸入之間進(jìn)行選擇。圖5-3顯示了綜合該示例的結(jié)果。條件運(yùn)算符映射到四個(gè)多路復(fù)用器,四位d1和d2輸入的每一位對(duì)應(yīng)一個(gè)多路復(fù)用器。

示例5-3:使用條件運(yùn)算符:4位多路復(fù)用寄存器D輸入

//4-bitregisterwithmultiplexedDinput,usingconditional
//operator.
//
//`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
modulemuxed_register
#(parameterWIDTH=4)//registersize
(inputlogicclk,//1-bitinput
inputlogicdata_select,//1-bitinput
inputlogic[WIDTH-1:0]d1,d2,//scalableinputsize
outputlogic[WIDTH-1:0]q_out//scalableoutputsize
);
timeunit1ns;timeprecision1ns;

always_ff@(posedgeclk)
q_out<=?data_select??d1?:?d2;?????//?store?d1?or?d2

endmodule:?muxed_register
//`end_keywords
圖形5-3:示例5-3的綜合結(jié)果:條件運(yùn)算符(多路復(fù)用寄存器) 3e099fb2-12c4-11ed-ba43-dac502259ad0.png

圖5-3所示的電路是綜合編譯器將電路映射到特定ASICFPGA目標(biāo)實(shí)現(xiàn)之前的中間通用綜合結(jié)果。用于生成圖5-3的綜合編譯器使用了具有未連接的set和rst輸入的通用觸發(fā)器,使用ASIC或FPGA庫的最終實(shí)現(xiàn)可能能夠使用沒有這些輸入的觸發(fā)器(如果目標(biāo)設(shè)備中可用)。不同的綜合編譯器可能會(huì)使用不同的通用型組件來表示這些中間結(jié)果。

條件運(yùn)算符并不總是作為多路復(fù)用器實(shí)現(xiàn)。綜合編譯器可能會(huì)根據(jù)操作數(shù)的類型和運(yùn)算的上下文,將條件運(yùn)算符映射并優(yōu)化為其他類型的門級(jí)邏輯。在示例5-4中,條件運(yùn)算符表示三態(tài)緩沖器,而不是多路復(fù)用邏輯,圖5-4顯示了綜合該示例的結(jié)果,

示例5-4:使用條件運(yùn)算符:帶三態(tài)輸出的4位加法器

//4-bitadderwithtri-stateoutputs,usingconditionaloperator
//(nocarry).
//
//`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
moduletri_state_adder
#(parameterN=4)//N-bitaddersize
(inputlogicenable,//outputenable
inputlogic[N-1:0]a,b,//scalableinputsize
outputtrilogic[N-1:0]out//tri-stateoutput,nettype
);
timeunit1ns;timeprecision1ns;

assignout=enable?(a+b):'z;//tri-statebuffer

endmodule:tri_state_adder
//`end_keywords

在本例中,條件運(yùn)算符(?)選擇輸出端口應(yīng)分配(a+b)或高阻抗。如果en為false,則將out賦值為z。’z標(biāo)記是一個(gè)文字值,用于將表達(dá)式的所有位設(shè)置為高阻抗,并自動(dòng)縮放到表達(dá)式的向量大小。有關(guān)向量填充文字值的更多詳細(xì)信息,請(qǐng)參見之前的文章。

在示例5-4中觀察,out三態(tài)輸出端口被聲明為3-state logic類型,而不是通常的邏輯類型,logic數(shù)據(jù)類型只定義端口時(shí)可以有四態(tài)值,它不定義端口類型是網(wǎng)絡(luò)類型或者變量類型。輸出端口默認(rèn)為變量類型,除非顯式聲明為NET(網(wǎng)絡(luò))類型。(相反,輸入端口將默認(rèn)為NET類型,除非顯式聲明為變量類型),關(guān)鍵字?tri聲明網(wǎng)絡(luò)類型。tri類型在各個(gè)方面都與wire類型相同,但tri關(guān)鍵字可以幫助記錄網(wǎng)絡(luò)或端口的預(yù)期三態(tài)(高阻抗)值。

圖5-4:示例5-4的綜合結(jié)果:條件運(yùn)算符(三態(tài)輸出) 3e375254-12c4-11ed-ba43-dac502259ad0.png

3e678802-12c4-11ed-ba43-dac502259ad0.jpg

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

3e7804ac-12c4-11ed-ba43-dac502259ad0.jpg

SystemVerilog-運(yùn)算符/表達(dá)式規(guī)則

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

    關(guān)注

    31

    文章

    5250

    瀏覽量

    119194
  • 端口
    +關(guān)注

    關(guān)注

    4

    文章

    915

    瀏覽量

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

    關(guān)注

    0

    文章

    166

    瀏覽量

    11013

原文標(biāo)題:SystemVerilog-條件(三元)運(yùn)算符

文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    玩轉(zhuǎn)SQLite8:運(yùn)算符表達(dá)式

    本篇介紹了SQLite的基礎(chǔ)運(yùn)算符表達(dá)式,并通過命令行的方式執(zhí)行sql語句進(jìn)行測(cè)試驗(yàn)證,在實(shí)際開發(fā)中,可使用C/C++ API函數(shù)來使用。
    的頭像 發(fā)表于 09-27 08:56 ?2270次閱讀
    玩轉(zhuǎn)SQLite8:<b class='flag-5'>運(yùn)算符</b>與<b class='flag-5'>表達(dá)式</b>

    JAVA語言的運(yùn)算符表達(dá)式

    JAVA語言的運(yùn)算符表達(dá)式3.5 運(yùn)算符表達(dá)式數(shù)據(jù)的類型除了限定數(shù)據(jù)的存儲(chǔ)方式、取值范圍之外,還定義了對(duì)該數(shù)據(jù)類型可進(jìn)行的操作即運(yùn)算。表
    發(fā)表于 12-06 00:28

    數(shù)據(jù)類型、運(yùn)算符表達(dá)式

    數(shù)據(jù)類型、運(yùn)算符表達(dá)式2.1   程序設(shè)計(jì)概述2.2  C語言的數(shù)據(jù)類型 2.3  常量和變量 2.4 
    發(fā)表于 03-10 15:05

    關(guān)于C語言的運(yùn)算符表達(dá)式--筆記1

    關(guān)于C語言的運(yùn)算符表達(dá)式學(xué)好C語言的基礎(chǔ)運(yùn)算,還是很有必要,無論在C語言,還是后面單片機(jī),都會(huì)用到基礎(chǔ)運(yùn)算。如果不能很好運(yùn)用,會(huì)給我們編程帶來很多麻煩,廢話不多說,現(xiàn)在開始寫一些個(gè)人
    發(fā)表于 07-19 00:48

    C語言程序設(shè)計(jì)--運(yùn)算符表達(dá)式

    c語言對(duì)數(shù)據(jù)有很強(qiáng)的表達(dá)能力,具有十分豐富的運(yùn)算符,利用這些運(yùn)算符可以組成各種表達(dá)式及語句。運(yùn)算符就是完成某種特定
    發(fā)表于 07-14 21:30 ?46次下載

    單片機(jī)C語言教程-運(yùn)算符表達(dá)式

    單片機(jī)C語言教程-運(yùn)算符表達(dá)式   單片機(jī)C語言教程-運(yùn)算符表達(dá)式  運(yùn)算符的種類、優(yōu)先級(jí)和結(jié)合性  c語言中運(yùn)
    發(fā)表于 03-27 17:13 ?2174次閱讀

    基于運(yùn)算符信息的數(shù)學(xué)表達(dá)式檢索技術(shù)

    傳統(tǒng)的文本檢索技術(shù)主要面向一維文本,難以用于對(duì)二維結(jié)構(gòu)數(shù)學(xué)表達(dá)式的檢索。針對(duì)該問題,通過引入公式描述結(jié)構(gòu),實(shí)現(xiàn)基于運(yùn)算符信息的數(shù)學(xué)表達(dá)式檢索。利用公式描述結(jié)構(gòu)提取算法獲取 Latex數(shù)學(xué)表達(dá)式
    發(fā)表于 04-29 15:58 ?2次下載
    基于<b class='flag-5'>運(yùn)算符</b>信息的數(shù)學(xué)<b class='flag-5'>表達(dá)式</b>檢索技術(shù)

    RTL表達(dá)式運(yùn)算符

    經(jīng)過幾周的更新,SV核心部分用戶自定義類型和包內(nèi)容已更新完畢,接下來就是RTL表達(dá)式運(yùn)算符。
    的頭像 發(fā)表于 07-27 09:11 ?1562次閱讀

    關(guān)于RTL表達(dá)式運(yùn)算符

    經(jīng)過幾周的更新,SV核心部分用戶自定義類型和包內(nèi)容已更新完畢,接下來就是RTL表達(dá)式運(yùn)算符。
    的頭像 發(fā)表于 09-01 09:13 ?1711次閱讀

    RTL表達(dá)式運(yùn)算符

    經(jīng)過幾周的更新,SV核心部分用戶自定義類型和包內(nèi)容已更新完畢,接下來就是RTL表達(dá)式運(yùn)算符
    的頭像 發(fā)表于 10-11 10:15 ?1478次閱讀

    RTL表達(dá)式運(yùn)算符

    經(jīng)過幾周的更新,SV核心部分用戶自定義類型和包內(nèi)容已更新完畢,接下來就是RTL表達(dá)式運(yùn)算符
    的頭像 發(fā)表于 11-03 09:14 ?1162次閱讀

    運(yùn)算符/表達(dá)式規(guī)則

    運(yùn)算符對(duì)操作數(shù)執(zhí)行操作。大多數(shù)運(yùn)算符都有兩個(gè)操作數(shù)。例如,在運(yùn)算a+b中,+(加法)運(yùn)算的操作數(shù)是a和b。每個(gè)操作數(shù)都被稱為表達(dá)式,
    的頭像 發(fā)表于 02-09 15:37 ?837次閱讀
    <b class='flag-5'>運(yùn)算符</b>/<b class='flag-5'>表達(dá)式</b><b class='flag-5'>規(guī)則</b>

    邏輯運(yùn)算符表達(dá)式

    在C語言中,我們通常會(huì)進(jìn)行真值與假值的判斷,這時(shí)我們就需要用到邏輯運(yùn)算符與邏輯表達(dá)式。如果表達(dá)式的值不為0,則通通返回為真值。只有當(dāng)表達(dá)式的值為0時(shí),才會(huì)返回假值。
    的頭像 發(fā)表于 02-21 15:16 ?1837次閱讀
    邏輯<b class='flag-5'>運(yùn)算符</b>與<b class='flag-5'>表達(dá)式</b>

    位邏輯運(yùn)算符表達(dá)式

    位邏輯運(yùn)算符與位邏輯表達(dá)式可以實(shí)現(xiàn)位的編輯,比如位的清零、設(shè)置、取反和取補(bǔ)等操作。使用位邏輯運(yùn)算符與位邏輯表達(dá)式可以在不使用匯編的情況下實(shí)現(xiàn)部分匯編的功能
    的頭像 發(fā)表于 02-21 15:22 ?1132次閱讀
    位邏輯<b class='flag-5'>運(yùn)算符</b>與<b class='flag-5'>表達(dá)式</b>

    C語言基本的算術(shù)運(yùn)算符表達(dá)式

    注意:自增和自減運(yùn)算符只能用于變量,而不能用于常量或表達(dá)式 **C語言算術(shù)表達(dá)式運(yùn)算符的優(yōu)先級(jí)與結(jié)合性 ** 在表達(dá)式求值時(shí),
    的頭像 發(fā)表于 03-09 10:44 ?1457次閱讀