仔细观察

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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]

posted on 2022-04-06 17:21  注意看  阅读(499)  评论(0编辑  收藏  举报