加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

verilog中关于+:和-:的位选操作

(2012-08-15 22:24:51)
标签:

杂谈

verilog中关于+:和-:的位选操作

 

wire  [15:0]  data_ref;

wire  [4:0]   data_get;

 

assign  data_get = data_ref[7 -: 5];  //  (1)

//  assign  data_get = data_ref[7 +: 5];  (2)

 

其中,

data_ref[7 -: 5]表示将data_ref中以data_ref[7]为起始,索引依次递减,从而获得的长度为5的字串,即data_ref[7],data_ref[6],data_ref[5],data_ref[4],data_ref[3],并按照data_ref定义时索引的升降序规则将上述比特流进行排列,得到data_ref[7:3]。所以,(1)的效果相当于

assign  data_get = data_ref[7:3];  // 也可以这么说,assign  data_get = data_ref[7:7-5+1];

 

data_ref[7 +: 5]表示将data_ref中以data_ref[7]为起始,索引依次递加,从而获得的长度为5的字串,即data_ref[7],data_ref[8],data_ref[9],data_ref[10],data_ref[11],并按照data_ref定义时索引的升降序规则将上述比特流进行排列,得到data_ref[11:7]。所以,(2)的效果相当于

assign data_get = data_ref[12:7]; // 也可以这么说,assign data_get = data_ref[7+5-1:7];

注意,(2)的结果不是data_ref[7:12]而是data_ref[12:7],是因为data_ref定义时是wire  [15:0]  data_ref,其索引是降序,所以data_ref的比特流也要降序排列。

 

如果data_ref定义为wire [15:0] data_ref,则(1)的结果则变为data_ref[3:7],(2)的结果则变为[12:7];

 

上述结果为个人理解,如有误欢迎拍砖。 

 

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有