前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Verilog我思我用】-向量部分选择

【Verilog我思我用】-向量部分选择

作者头像
碎碎思
发布2021-02-01 10:39:04
6590
发布2021-02-01 10:39:04
举报
文章被收录于专栏:OpenFPGA

来源

Xilinx Vivado IP源代码。

代码

在《AXI_lite代码简解-AXI-Lite 源码分析》 中,查看AXI_lite的源代码之后有一个比较陌生的“面庞”,如下:

代码语言:javascript
复制
for ( byte_index = 0; byte_index <= (C_S_AXI_DATA_WIDTH/8)-1; byte_index = byte_index+1 )

    if ( S_AXI_WSTRB[byte_index] == 1 ) begin

   // Respective byte enables are asserted as per write strobes

   // Slave register 1

      slv_reg1[(byte_index*8) +: 8] <= S_AXI_WDATA[(byte_index*8) +: 8];

  end

分析

这是Verilog2001新加的语法:Verilog-2001向量部分选择

在Verilog-1995中,可以选择向量的任一位输出,也可以选择向量的连续几位输出,不过此时连续几位的始末数值的index需要是常量。而在Verilog-2001中,可以用变量作为index,进行part select。

代码语言:javascript
复制
      [base_expr +: width_expr] //positive offset

      [base_expr -: width_expr] //negative offset  

其中base_expr可以是变量,而width_expr必须是常量。+:表示由base_expr向上增长width_expr位,-:表示由base_expr向上递减width_expr位。

举例

例如:

reg [63:0] word; reg [3:0] byte_num; //a value from 0 to 7 wire [7:0] byteN = word[byte_num*8 +: 8];

如果byte_num的值为4,则word[39:32]赋值给byteN。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenFPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档