Verilog向量可以选择其中的某几位,选择的方式有下面几种
选择1比特
只选择1比特的情况下可以直接通过常数来选择,例如
reg [7:0] data;
assign select=data[3];
也可以通过变量来选择,例如
reg [7:0] data;
reg [2:0] sel;
assign select=data[sel];
这两种情况都是可以综合的
选择多比特
选择多比特需要考虑到向量声明时的字节顺序。首先是通过常数进行位选,方式如下
reg [7:0] l_data;
wire [3:0] l_select;
assign l_select=l_data[7:4];
reg [0:7] m_data;
wire [3:0] m_select;
assign m_select=m_data[4:7];
总结来看就是向量定义的方式为vector [msb:lsb] data
,那么选择的时候也必须是data[msb:lsb]
。需要注意的是msb和lsb不能是变量,但是可以通过下面的方式来选择
reg [7:0] data;
data[lsb+:width]
data[msb-:width]
reg [0:7] data;
data[msb+:width]
data[lsb-:width]
msb和lsb可以是变量,但是width必须是常量。比如对vec[7:0]
进行选择,vec[0+:4]等于vec[3:0],vec[7-:4]等于vec[7:4]。对vec[0:7]
进行选择,vec[0+:4]等于vec[0:3],vec[7-:4]等于vec[4:7]