首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >verilog:如何操作参数化大小的数组

问verilog:如何操作参数化大小的数组
EN

Stack Overflow用户
提问于 2013-01-18 06:31:07
回答 2查看 808关注 0票数 0

我有一个关于多个数组的操作的问题。下面的代码适用于固定数量的数组

代码语言:javascript
复制
wire [size-1:0] data [0:3];
wire [size-1:0] result;

assign result = data[0]&data[1]&data[2]&data[3];

但是对于像这样的参数化数字数组,我该如何处理它呢

代码语言:javascript
复制
wire [size-1:0] data [0:num-1];
wire [size-1:0] result;

assign result = ????

有任何想法或建议,希望你们有一些简单的答案。

EN

回答 2

Stack Overflow用户

发布于 2013-01-18 15:41:37

我能想到的最好的情况是:

代码语言:javascript
复制
always @* begin
  result = 0;
  for (i=0; i<num; i=i+1) begin
    result = result & data[i];
  end    
end

然而,这有两个潜在的问题:

  1. 在verilog中在敏感度列表中使用数组在技术上是不合法的。我读到过大多数模拟器/合成工具都能在敏感度列表上做你期望的事情,但有些可能做不到。
  2. 根据你数组的大小,这可能是可综合的,也可能是不可综合的。大型数组通常被实现为RAM,并且通常每个时钟周期只能读出数组的一个值,因此不能简单地将它们全部and在一起。
票数 0
EN

Stack Overflow用户

发布于 2013-01-19 13:02:20

代码语言:javascript
复制
wire [size-1:0] data[0:num-1];
wire [size-1:0] data_tmp[0:num-1];
wire [size-1:0] result;

generate
    genvar i;
    for (i=0; i < num; i=i+1) begin
        if (i == 0)
            assign data_tmp[i] = data[i];
        else if (i == num-1)
            assign result = data_tmp[i-1] & data[i];
        else
            assign data_tmp[i] = data_tmp[i-1] & data[i];
    end
endgenerate
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14389346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档