最近在刷一些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]