首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寄存器大小的向量不能由模块参数参数化

寄存器大小的向量不能由模块参数参数化
EN

Stack Overflow用户
提问于 2020-03-11 20:47:29
回答 1查看 105关注 0票数 1

我想使用module参数作为Vector的大小参数,它包含寄存器,我尝试下面的代码:

代码语言:javascript
复制
package Test;
import Vector      :: *;
(* synthesize *)
module mkTest #(
  parameter UInt#(32) qsize
) (Empty);
  Vector#(qsize,Reg#(Bit#(8))) queue <- replicateM (mkReg (0));
endmodule
endpackage

但是用bsc编译这个模块,我得到了下一个错误消息:

代码语言:javascript
复制
Verilog generation
bsc -verilog -remove-dollar Test.bsv
Error: "Test.bsv", line 9, column 11: (T0008)
  Unbound type variable `qsize'

bsc版本:

代码语言:javascript
复制
Bluespec Compiler (build e55aa23)

如果我使用not Registers作为Vector元素的一种类型,那么一切都是正常的。下一步代码不会产生错误:

代码语言:javascript
复制
package Test;
import Vector      :: *;
(* synthesize *)
module mkTest #(
  parameter UInt#(32) qsize
) (Empty);
  Vector#(qsize,Bit#(8)) queue = replicate(0);
endmodule
endpackage

我不明白,为什么qsizeUnbound,因为它被明确声明为参数?如果我做错了什么,你能帮我解释一下,如何正确地制作Regs的参数化大小矢量吗?

EN

回答 1

Stack Overflow用户

发布于 2020-03-12 14:36:45

我在github上的一个Bluespec存储库中问过这个问题,Rishiyur S.Nikhil给了我一个非常详细的解释。请参阅https://github.com/BSVLang/Main/issues/4

简而言之:作为第一个参数的Vector需要一个类型,而不是UInt (或Int或其他)。因此,正确的方法应该是:

  1. 为模块创建了一个接口,并将该接口设置为type-polymorphic
  2. Use类型,作为

的向量大小参数

代码语言:javascript
复制
package Test;
import Vector      :: *;

interface Queue_IFC #(numeric type qsize_t);
  method Bool done;
endinterface

module mkQueue ( Queue_IFC #(qsize_t) );
  Vector #(qsize_t, Reg #(Bit #(8))) queue <- replicateM (mkReg (0));
endmodule

endpackage
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60636401

复制
相关文章

相似问题

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