日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SystemVerilog-条件(三元)运算符

發(fā)布時間:2024/1/1 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SystemVerilog-条件(三元)运算符 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

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

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

介紹

RTL建模中廣泛使用的運算符是條件運算符,也稱為三元運算符,該運算符用于在兩個表達式之間進行選擇——表5-2列出了用于表示條件運算符的重點。

表5-2:RTL建模的條件(三元)運算符運算符示例用法描述
?:s?m:n如果s為真,則選擇m;如果s為假,則選擇n,否則(s不為真不為假)對m和n進行按位比較

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

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

  • 如果所有位為l,則表達式為true。

  • 如果所有位均為0,則表達式為false。

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

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

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

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

示例5-3:使用條件運算符:4位多路復(fù)用寄存器D輸入//?4-bit?register?with?multiplexed?D?input,?using?conditional //?operator. // //`begin_keywords?"1800-2012"?//?use?SystemVerilog-2012?keywords module?muxed_register #(parameter?WIDTH?=?4)?????????????????//?register?size (input??logic?????????????clk,?????????//?1-bit?inputinput??logic?????????????data_select,?//?1-bit?inputinput??logic?[WIDTH-1:0]?d1,?d2,??????//?scalable?input?sizeoutput?logic?[WIDTH-1:0]?q_out????????//?scalable?output?size );timeunit?1ns;?timeprecision?1ns;always_ff?@(posedge?clk)q_out?<=?data_select??d1?:?d2;?????//?store?d1?or?d2endmodule:?muxed_register //`end_keywords圖形5-3:示例5-3的綜合結(jié)果:條件運算符(多路復(fù)用寄存器)

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

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

示例5-4:使用條件運算符:帶三態(tài)輸出的4位加法器//?4-bit?adder?with?tri-state?outputs,?using?conditional?operator //?(no?carry). // //`begin_keywords?"1800-2012"?//?use?SystemVerilog-2012?keywords module?tri_state_adder #(parameter?N?=?4)????????????????//?N-bit?adder?size (input??logic?????????????enable,?//?output?enable input??logic?????[N-1:0]?a,?b,???//?scalable?input?size output?tri?logic?[N-1:0]?out?????//?tri-state?output,?net?type );timeunit?1ns;?timeprecision?1ns;assign?out?=?enable??(a?+?b)?:?'z;??//?tri-state?bufferendmodule:?tri_state_adder //`end_keywords

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

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

圖5-4:示例5-4的綜合結(jié)果:條件運算符(三態(tài)輸出)

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

SystemVerilog-運算符/表達式規(guī)則

總結(jié)

以上是生活随笔為你收集整理的SystemVerilog-条件(三元)运算符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。