verilog -:或+:用法

最近在刷一些Verilog的題,希望對後續的找工作有所幫助吧。。。

一般而言對於類似多位輸出賦值,一般而言是這樣的:

wire a[MSB:LSB];
assign a=b[MSB:LSB];

這裏的MSB 和LSB 都需要是常數而不能是變量,那麼現實中很有可能需要對變量來進行操作,比如多路選擇器等等,那麼就可以用到 -:和+:操作符了,具體用法如下:

module top_module( 
    input [1023:0] in,
    input [7:0] sel,
    output [3:0] out );

    assign out=in[sel*4+3 -:4];
endmodule

來自刷題網站一道題,這裏需要根據sel的值來確定選擇哪個位段的數據,因爲有變量sel,所以不能採用傳統的如[sel*4+3:sel*4]這類用法。這裏-:4代表數據是4位且是按照[MSB:LSB]格式來的,簡單點理解如下:

a=[15-:8]==[15:8]
a=[0+:8]==[7:0]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章