數(shù)字硬件建模SystemVerilog-連接和復(fù)制運(yùn)算符
經(jīng)過幾周的更新,SV核心部分用戶自定義類型和包內(nèi)容已更新完畢,接下來就是RTL表達(dá)式和運(yùn)算符。
馬上HDLBits-SystemVerilog版本也開始準(zhǔn)備了,基本這一部分完成后就開始更新~
介紹
連接和復(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é)果。
連接和復(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)寄存器)
筆記 |
---|
綜合編譯器實(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)位/輸出的加法器)
用于生成圖5-2所示實(shí)現(xiàn)的綜合編譯器將RTL加法器功能映射到通用加法器塊——綜合的下一步將針對特定的ASIC或FPGA設(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位的值。
-
向量
+關(guān)注
關(guān)注
0文章
55瀏覽量
11649 -
連接
+關(guān)注
關(guān)注
2文章
95瀏覽量
20931 -
運(yùn)算符
+關(guān)注
關(guān)注
0文章
170瀏覽量
11048
發(fā)布評論請先 登錄
相關(guān)推薦
評論