我有一个输入,其宽度我想在精化时确定。我想要确定从单个参数派生的宽度,而不是提供两个参数。像这样:
module my_module #(
COUNT = 9
) (
[bitwidth(COUNT)-1:0] index
);
如果我在模块中声明了一个reg内部函数,我有一个适用于我的函数但是我需要通过端口映射从外部驱动它。
function integer bitwidth;
input integer n;
integer exp2, width;
begin
width=1;
for (exp2=1; exp2<<1 <= n; exp2=exp2<<1)
width=width+1;
bitwidth = width;
end
endfunction
reg [bitwidth(COUNT)-1:0] this_works = COUNT;
我如何做到这一点?我可以利用界面(+ modports)来获取我想要的东西吗?
答案 0 :(得分:0)
显示一个完整的自包含示例真的很有帮助。以下为我工作
module my_module #(
COUNT = 9
) (
[bitwidth(COUNT)-1:0] index
);
function integer bitwidth;
input integer n;
integer exp2, width;
begin
width=1;
for (exp2=1; exp2<<1 <= n; exp2=exp2<<1)
width=width+1;
bitwidth = width;
end
endfunction
initial $displayb(index);
endmodule
module top;
my_module #(10) mm();
endmodule
如果我们假设$ clog2不存在,那么有关此代码的几条评论。
int
代替integer
。 module my_module #(
COUNT = 9
) (
input wire [bitwidth(COUNT)-1:0] index
);
function integer bitwidth(input int n);
int width;
width=1;
for (int exp2=1; exp2<<1 <= n; exp2=exp2<<1)
width=width+1;
bitwidth = width;
endfunction
initial $displayb(index);
endmodule
module top;
my_module #(10) mm();
endmodule