首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将向量解压缩为具有一定位宽的数组

将向量解压缩为具有一定位宽的数组
EN

Stack Overflow用户
提问于 2020-10-29 19:26:44
回答 1查看 603关注 0票数 0

假设我有一个位向量。我想把它转换成n位值的数组,其中n是变量(不是参数)。我可以使用流媒体运营商来实现这一点吗?我尝试了这个(现在我只是尝试一个3的值,但最终'3‘应该是可变的):

代码语言:javascript
复制
module tb;
  bit [51:0] vector = 'b111_110_101_100_011_010_001_000;
  byte vector_byte[];
  
  initial begin
    $displayb(vector);
    vector_byte = {<<3{vector}};
    foreach(vector_byte[i])
      $display("%0d = %0b", i, vector_byte[i]);
  end
endmodule

我所期待的是:

代码语言:javascript
复制
vector_byte = '{'b000, 'b001, 'b010 ... 'b111};

然而,我得到的输出是:

代码语言:javascript
复制
# vsim -voptargs=+acc=npr
# run -all
# 00000000000000000000000000000000111110101100011010001000
# 0 = 101
# 1 = 111001
# 2 = 1110111
# 3 = 0
# 4 = 0
# 5 = 0
# 6 = 0
# exit

我是不是用错了流媒体运营商?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-30 00:16:15

流运算符只处理相邻的流。每个字节都需要插入5‘b 00000。

代码语言:javascript
复制
module tb;
  bit [51:0] vector = 'b111_110_101_100_011_010_001_000;
  int W = 3;
  byte vector_byte[];
  
  initial begin
    vector_byte = new[$bits(vector)/3];
    $displayb(vector);
    foreach(vector_byte[i]) begin
      vector_byte[i] = vector[i*W+:8] & (1<<W)-1; // mask W is in range 1-8
      $display("%0d = %0b", i, vector_byte[i]);
    end
  end
endmodule
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64597946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档