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
相关推荐
杜子不疼.8 分钟前
Linux 部署 RocketMQ 实操:从内网到公网,搞定远程消息服务
linux·运维·人工智能·rocketmq
!沧海@一粟!9 分钟前
麒麟V10Sp3系统部署Zabbix7.0全攻略
linux·运维
一叶星殇11 分钟前
解决IIS无法支持APK文件的下载
运维·服务器
袖手蹲16 分钟前
Arduino UNO Q 板载 Nanobot 自动化编程指南之一
运维·自动化
早安试言17 分钟前
【了解】对话指令详解
服务器·python
老星*17 分钟前
Umami:轻量级开源网站分析工具,打造隐私友好的Google Analytics替代方案
运维·安全·开源
bai_lan_ya18 分钟前
嵌入式linux--文件IO中dup/dup2的使用
linux·运维·服务器
雪碧聊技术19 分钟前
前端项目部署到服务器
服务器·nginx·ubuntu·前端项目部署
AC赳赳老秦19 分钟前
OpenClaw 系统监控实战指南:构建高效的电脑/服务器状态监控与自动告警系统
服务器·开发语言·人工智能·php·ai-native·deepseek·openclaw
H_老邪20 分钟前
新人初识ECS 服务器
运维·服务器