system-verilog - 将向量解包成一定位宽的数组
问题描述
假设我有一个位向量。我想将它转换成一个n位值的数组,其中n是一个变量(不是参数)。我可以使用流媒体运营商实现这一目标吗?我试过这个(现在我只是尝试一个 3 的值,但最终 '3' 应该是可变的):
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
我所期待的是:
vector_byte = '{'b000, 'b001, 'b010 ... 'b111};
但是,我得到的输出是:
# vsim -voptargs=+acc=npr
# run -all
# 00000000000000000000000000000000111110101100011010001000
# 0 = 101
# 1 = 111001
# 2 = 1110111
# 3 = 0
# 4 = 0
# 5 = 0
# 6 = 0
# exit
我只是错误地使用了流媒体运营商吗?
解决方案
流式操作符仅适用于连续的流。您需要将 5'b00000 插入每个字节。
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
推荐阅读
- python-3.x - 正则表达式提取“:”之后的单词
- wpf - 需要帮助来查找 WPF TreeView 分层模板样式人工制品
- database - 在 wordPress 中自动动态创建页面
- java - Java Money 奇数除法和四舍五入不损失/获得美分
- server - Indy IdTCPServer 问题
- arrays - purescript:混合效果和数组上下文
- javascript - 使用数组的所有名称和计数构建 Javascript 对象
- javascript - Graphql的返回查询为空时如何在Nuxtjs中进行重定向
- python - 无法正确实现 wiki 搜索。按查询搜索结果不起作用
- python - Python War纸牌游戏运行正常但无限