Verilog語(yǔ)法中(zhōng)有(yǒu)一(yī)个(gè)常用(yòng)的(de)選擇語(yǔ)句(jù),其語(yǔ)法形式为(wèi):
vect[a +: b]或(huò)vect [a -: b];
vect为(wèi)變(biàn)量(liàng)名字(zì),a为(wèi)起始位置,加号(hào)或(huò)者(zhě)減号(hào)代(dài)表(biǎo)着升(shēng)序或(huò)者(zhě)降序,b是(shì)進(jìn)行升(shēng)序或(huò)者(zhě)降序的(de)宽(kuān)度(dù)。
vect[a +: b]等同(tóng)于(yú)vect[a : a+b-1],vect的(de)區(qū)間(jiān)從a開(kāi)始,往比a大的(de)方(fāng)向(xiàng)數b个(gè)數;vect [a -: b]等同(tóng)于(yú)vect[a : a-b+1],vect的(de)區(qū)間(jiān)從a開(kāi)始,往比a小的(de)方(fāng)向(xiàng)數b个(gè)數。a可(kě)以(yǐ)是(shì)一(yī)个(gè)常數也(yě)可(kě)以(yǐ)是(shì)一(yī)个(gè)可(kě)變(biàn)的(de)數,但b必須是(shì)一(yī)个(gè)常數。
例1:vect[7 +: 3];
其中(zhōng),起始位置为(wèi)7,+代(dài)表(biǎo)着升(shēng)序,宽(kuān)度(dù)为(wèi)3。即從7開(kāi)始往比7大的(de)方(fāng)向(xiàng)數3个(gè)數。其等價形式为(wèi):vect[7 +: 3]==vect[7 : 9]。
例2:vect[9 -: 4];
其中(zhōng),起始位置为(wèi)9,-代(dài)表(biǎo)着降序,宽(kuān)度(dù)为(wèi)4。即從9開(kāi)始往比9小的(de)方(fāng)向(xiàng)數4个(gè)數。其等價形式为(wèi):vect[9 -: 4]==vect[9 : 6]。
在(zài)实際使用(yòng)的(de)过(guò)程中(zhōng),这(zhè)个(gè)語(yǔ)法最(zuì)常用(yòng)的(de)形式是(shì)将a作为(wèi)一(yī)个(gè)可(kě)變(biàn)的(de)數来(lái)使用(yòng)。例如(rú)需要(yào)設計(jì)如(rú)下(xià)代(dài)碼:
assign data[15-8*cnt -: 8] <= din[7:0]
當cnt==0时(shí),将din[7:0]賦值給(gěi)data[15:8];當cnt==1时(shí)将din[7:0]賦值給(gěi)data[7:0]。
在(zài)設計(jì)的(de)时(shí)候便可(kě)以(yǐ)写成(chéng):(这(zhè)里(lǐ)需要(yào)把15-8*cnt看(kàn)成(chéng)一(yī)个(gè)整體(tǐ)a,它(tā)是(shì)一(yī)个(gè)随着cnt變(biàn)化(huà)而(ér)變(biàn)化(huà)的(de)數)。这(zhè)樣(yàng)就(jiù)可(kě)以(yǐ)精簡我(wǒ)们(men)的(de)代(dài)碼了(le)。
笔(bǐ)者(zhě)經(jīng)验(yàn):在(zài)实際工程中(zhōng)可(kě)以(yǐ)多(duō)多(duō)使用(yòng)選擇語(yǔ)句(jù)vect[a +: b]或(huò)vect [a -: b]的(de)形式来(lái)写代(dài)碼,这(zhè)将有(yǒu)助于(yú)精簡設計(jì)代(dài)碼。








