我想使用module参数作为Vector的大小参数,它包含寄存器,我尝试下面的代码:
package Test;
import Vector :: *;
(* synthesize *)
module mkTest #(
parameter UInt#(32) qsize
) (Empty);
Vector#(qsize,Reg#(Bit#(8))) queue <- replicateM (mkReg (0));
endmodule
endpackage但是用bsc编译这个模块,我得到了下一个错误消息:
Verilog generation
bsc -verilog -remove-dollar Test.bsv
Error: "Test.bsv", line 9, column 11: (T0008)
Unbound type variable `qsize'bsc版本:
Bluespec Compiler (build e55aa23)如果我使用not Registers作为Vector元素的一种类型,那么一切都是正常的。下一步代码不会产生错误:
package Test;
import Vector :: *;
(* synthesize *)
module mkTest #(
parameter UInt#(32) qsize
) (Empty);
Vector#(qsize,Bit#(8)) queue = replicate(0);
endmodule
endpackage我不明白,为什么qsize是Unbound,因为它被明确声明为参数?如果我做错了什么,你能帮我解释一下,如何正确地制作Regs的参数化大小矢量吗?
发布于 2020-03-12 14:36:45
我在github上的一个Bluespec存储库中问过这个问题,Rishiyur S.Nikhil给了我一个非常详细的解释。请参阅https://github.com/BSVLang/Main/issues/4
简而言之:作为第一个参数的Vector需要一个类型,而不是UInt (或Int或其他)。因此,正确的方法应该是:
的向量大小参数
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
endpackagehttps://stackoverflow.com/questions/60636401
复制相似问题