RM新时代网站-首页

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

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

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

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

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-10-11 10:15 ? 次閱讀

數(shù)字硬件建模SystemVerilog-歸約運(yùn)算符(Reduction operators)

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

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

55939fba-4902-11ed-a3b6-dac502259ad0.png

介紹

歸約運(yùn)算符對(duì)單個(gè)操作數(shù)的所有位執(zhí)行運(yùn)算,并返回標(biāo)量(1位)結(jié)果。表5-9列出了歸約運(yùn)算符。

55c78f6e-4902-11ed-a3b6-dac502259ad0.png 表5-9:RTL建模的歸約運(yùn)算符

歸約運(yùn)算符包括一個(gè)NAND和一個(gè)NOR運(yùn)算符,這是按位運(yùn)算符所沒有的。歸約AND OR 和 XOR 運(yùn)算符一次執(zhí)行一位操作,從最右邊的位(最低有效位)向最左邊的位(最高有效位)移動(dòng)。歸約NAND、NOR和XNOR運(yùn)算符首先分別執(zhí)行歸約AND、OR或XOR運(yùn)算,然后反轉(zhuǎn)1位結(jié)果。

AND、NAND或NOR運(yùn)算符是X-optimistic。對(duì)于歸約運(yùn)算符,如果操作數(shù)中的任何位為0,結(jié)果將為1’b0。對(duì)于歸約NAND,如果操作數(shù)中的任何位為0,結(jié)果將為1’b1。類似地,對(duì)于歸約運(yùn)算符,或者如果操作數(shù)中的任何位為l,結(jié)果將為1’b1。對(duì)于歸約NOR,如果操作數(shù)中的任何位為l,結(jié)果將是1’b0.歸約XOR和XNOR運(yùn)算符是X-pessimistic。如果操作數(shù)的任何一位是X或Z,結(jié)果將是1’bx。表5-10顯示了幾個(gè)示例值的每個(gè)歸約運(yùn)算符的結(jié)果。

表5-10:歸約操作的示例結(jié)果 56a8f850-4902-11ed-a3b6-dac502259ad0.png

示例5-6說明了一個(gè)小型RTL模型,該模型利用歸約運(yùn)算符檢查數(shù)據(jù)值的正確奇偶性,圖5-6顯示了該RTL模型綜合結(jié)果。

示例5-6:使用歸約運(yùn)算符:使用異或的奇偶校驗(yàn)

//
//Book,"RTLModelingwithSystemVerilogforASICandFPGADesign"
//byStuartSutherland
//
//Paritycheckerusingevenparity,registerederrorflag
//
//Copyright2016,StuartSutherland.Allrightsreserved.
//
//Version1.0
//

//
//User-definedtypedefinitions
//
`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
packagedefinitions_pkg;
typedefstruct{
logic[7:0]data;
logicparity_bit;
}data_t;
endpackage:definitions_pkg
`end_keywords


//
//Paritycheckerusingevenparity,registerederrorflag.
//Thecombineddatavalueplusparitybitshouldalwayshave
//anevennumberofbitssetto1
//
`begin_keywords"1800-2012"http://useSystemVerilog-2012keywords
moduleparity_checker
importdefinitions_pkg::*;
(inputdata_tdata_in,//9-bitstructureinput
inputclk,//clockinput
inputrstN,//active-lowasynchronousreset
outputlogicerror//setifparityerrordetected
);
timeunit1ns/1ns;

always_ff@(posedgeclk,negedgerstN)
if(!rstN)error<=?0;
???else???????error?<=?^{data_in.parity_bit,?data_in.data};
?????//?reduction-XOR?returns?1?if?an?odd?number?of?bits?are
?????//?set?in?the?combined?data?and?parity_bit
endmodule:?parity_checker
`end_keywords

該文件的仿真文件如下:

//
//Book,"RTLModelingwithSystemVerilogforASICandFPGADesign"
//byStuartSutherland
//
//Testbench
//
//Copyright2016,StuartSutherland.Allrightsreserved.
//
//Version1.0
//
`begin_keywords"1800-2012"
moduletest
importdefinitions_pkg::*;
(outputlogicrstN,
outputdata_tdata_in,
inputlogicerror,
inputlogicclk
);
timeunit1ns/1ns;

//generatestimulus
initialbegin
$timeformat(-9,0,"ns",6);//nanoseconds,noprecision,6columns
rstN<=?0;????????????????????//?reset?DUT?(active?low)
????repeat(2)??@(negedge?clk)?;???//?hold?reset?for?2?clock?cycles
????rstN?=?1;?????????????????????//?remove?reset
????repeat?(10)?begin
??????@(negedge?clk)?;
??????data_in.data?=?$urandom();
??????data_in.parity_bit?=?$urandom()%2;??//?randomly?wrong?parity?value
??????@(negedge?clk)?check_results;
????end
????@(negedge?clk)?$finish;
??end

??//?verify?results
??task?check_results;
????$write("At?%t:?data=%b??parity_bit=%b:??",?$time,?data_in.data,?data_in.parity_bit);
????if?(^data_in.data?===?data_in.parity_bit)?begin:?good_data_in
??????$write("Good?data_in.?EXPECT:?error?=?0,?ACTUAL:?%b?",?error);
??????if?(error?===?1'b0)?$display("?OK");
??????else????????????????$display("?ERROR!");
????end:?good_data_in
????else?begin:?bad_data_in
??????$write("Bad?data_in.??EXPECT:?error?=?1,?ACTUAL:?%b?",?error);
??????if?(error?===?1'b1)?$display("?OK");
??????else????????????????$display("?ERROR!");
????end:?bad_data_in
??endtask

endmodule:?test
`end_keywords

`begin_keywords?"1800-2012"
module?top;
??timeunit?1ns/1ns;
??import?definitions_pkg::*;
??parameter?WIDTH?=?8;

??logic??clk,?rstN;
??data_t?data_in;
??logic??error;

??test???????????test?(.*);
??parity_checker?dut??(.*);

??initial?begin
????clk?<=?0;
????forever?#5?clk?=?~clk;
??end
endmodule:?top
`end_keywords

圖5-6:示例5-6的綜合結(jié)果:歸約異或(奇偶校驗(yàn))

56e12fc2-4902-11ed-a3b6-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • RTL
    RTL
    +關(guān)注

    關(guān)注

    1

    文章

    385

    瀏覽量

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

    關(guān)注

    0

    文章

    172

    瀏覽量

    11079

原文標(biāo)題:SystemVerilog-歸約運(yùn)算符(Reduction operators)

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)字硬件建模SystemVerilog-按位運(yùn)算符

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

    關(guān)于數(shù)字硬件建模SystemVerilog

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

    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 ?2219次閱讀

    基于運(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)算符

    運(yùn)算符對(duì)操作數(shù)執(zhí)行操作。大多數(shù)運(yùn)算符都有兩個(gè)操作數(shù)。
    的頭像 發(fā)表于 07-21 09:11 ?1758次閱讀

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

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

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

    RTL建模中廣泛使用的運(yùn)算符是條件運(yùn)算符,也稱為三元運(yùn)算符,該運(yùn)算符用于在兩個(gè)表達(dá)式之間進(jìn)行選擇
    的頭像 發(fā)表于 08-03 09:03 ?3104次閱讀

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

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

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

    決策語句(Decision statements)允許程序塊的執(zhí)行流程根據(jù)設(shè)計(jì)中信號(hào)的當(dāng)前值分支到特定語句。SystemVerilog有兩個(gè)主要的決策語句:if…else語句和case語句,使用關(guān)鍵字case、case…inside,casex和casez。
    的頭像 發(fā)表于 10-21 09:04 ?1340次閱讀

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

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

    運(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 ?981次閱讀
    <b class='flag-5'>運(yùn)算符</b>/<b class='flag-5'>表達(dá)式</b>規(guī)則

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

    在C語言中,我們通常會(huì)進(jìn)行真值與假值的判斷,這時(shí)我們就需要用到邏輯運(yùn)算符與邏輯表達(dá)式。如果表達(dá)式的值不為0,則通通返回為真值。只有當(dāng)表達(dá)式的值為0時(shí),才會(huì)返回假值。
    的頭像 發(fā)表于 02-21 15:16 ?2119次閱讀
    邏輯<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 ?1241次閱讀
    位邏輯<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 ?1603次閱讀
    RM新时代网站-首页