verilog 可变范围的bit选择

要完成16byte中byte的合并:

首先verilog 不支持可变范围的bit选择,所以下面两种写法,lint 都会报错:

复制代码
// write style 1
always (*)begin
  map_wdata ='b0;
  map_wdata[127:lower_byte_addr*8]= wdata[127:lower_byte_addr*8];
  map_wdata[(lower_byte_addr-1)*8+:8]= wone_size ? wone_data_store:wdata[(lower_byte_addr-1)*8+:8];
  map_wdata[(lower_byte_addr-1)*8-1:0]= wdata[(lower_byte_addr-1)*8-1:0];
end
// write style 2
assign map_wdata = wone_size ? {wdata[127:lower_byte_addr*8],wone_data_store,wdata[(lower_byte_addr-1)*8-1:0]}:wdata;

正确的写法是下面的,将可变范围变成按byte进行选择:

复制代码
// write style 3
always @(*)begin
  if(wone_size)
    for(i=0; i<STRB_WIDTH;i=i+1)begin 
      if(i==lower_byte_addr)
        map_wdata[i*8+:8]= wdata[i*8+:8];
      else
        map_wdata[i*8+:8]= wone_data_store;
  end
  else begin
    map_wdata = wdata;
  end
end
相关推荐
北京智和信通12 小时前
基于IPMI的服务器集中监控与带外管理方案
服务器·服务器监控·ipmi·网管平台·带外监控
昔我往昔12 小时前
Linux修改静态ip
linux·服务器·tcp/ip
MGS浪疯13 小时前
让 QClaw 将复杂的 Docker 项目转为 exe!
运维·docker·容器
wanhengidc13 小时前
网站服务器具体功能有哪些?
运维·服务器·网络·网络协议·智能手机
NineData13 小时前
使用NineData实现MySQL异地多活场景
运维·数据库·mysql
爱学习的小囧13 小时前
嵌套式 ESXi 8.x/9.0 虚拟设备下载与实战指南
java·linux·运维·服务器·虚拟化
hj28625113 小时前
初学linux命令day2
linux·运维·服务器
硅基导游14 小时前
linux系统与进程内存使用情况探测
java·linux·运维
Harvy_没救了14 小时前
【Linux】循环语句
linux·运维
小比特_蓝光14 小时前
Linux----进程概念
linux·运维·服务器