网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月07日漏签0天
fpga吧 关注:22,539贴子:70,454
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 2回复贴,共1页
<<返回fpga吧
>0< 加载中...

verilog 二维数组

  • 只看楼主
  • 收藏

  • 回复
  • hsdfhj9
  • fpga逛吧
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果想赋值 mem[addr] = data
只能把mem定义为reg型,定义为wire型,会报错addr不是一个常数
求大神解答


  • 晓落叶
  • 吧主
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在Verilog或SystemVerilog中,出现这种情况是因为:
当你将mem定义为wire类型时,wire类型表示连线,它不能在过程块(如always或initial)中被赋值,而且对于wire类型的数组索引操作(如mem[addr]),addr必须是常量表达式。这是因为wire类型主要用于表示组合逻辑,其行为类似于电路中的连线,连线的连接关系在编译时就应该确定下来,所以索引需要是常量。
而将mem定义为reg类型就可以解决这个问题。reg类型用于表示存储元件,可以在过程块中根据条件或者时序逻辑进行赋值。在过程块内,addr可以是变量,因为此时的赋值是在仿真或者硬件实现的过程中顺序执行的,能够根据变量addr的值在运行时动态地对mem数组进行索引和赋值。
例如:
reg [7:0] mem [0:255]; // 定义一个存储单元为8位,深度为256的reg型数组
reg [7:0] addr;
reg [7:0] data;
always @(*) begin
mem[addr] = data;
end
这样就可以根据addr和data的值动态地对mem数组进行赋值。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 2回复贴,共1页
<<返回fpga吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示