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
相关推荐
AEMC马广川4 小时前
能源托管项目中“企业认证+人才证书”双轨评分策略分析
大数据·运维·人工智能·能源
无锡耐特森4 小时前
CANopen转Profinet网关:小设备撬动自动化产线大效率
运维·自动化
草根站起来5 小时前
ip版SSL证书
服务器·tcp/ip·ssl
天天向上10245 小时前
成功阻止chrome浏览器自动填充密码
服务器·前端·chrome
可爱又迷人的反派角色“yang”5 小时前
ansible的概念及基本操作(一)
运维·ansible
三小尛5 小时前
linux的开发工具vim
linux·运维·vim
ChristXlx5 小时前
Linux安装redis(虚拟机适用)
linux·运维·redis
源文雨5 小时前
PVE实现USB硬盘盒在备份前自动上电/结束后自动断电脚本
linux·运维·服务器·备份·perl·pve·usb硬盘盒
ascarl20105 小时前
准确--CentOS 7 配置用户资源限制(nofile / nproc)
linux·运维·centos