首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >genvar变量可以用作verilog中模块实例的常量输入吗?

genvar变量可以用作verilog中模块实例的常量输入吗?
EN

Stack Overflow用户
提问于 2022-05-09 09:07:53
回答 2查看 176关注 0票数 -1

我想在verilog中使用一个生成块来实现多路复用器,每个复用器都将genvar变量作为常量输入。仿真结果表明,该方法没有误差。但是,我想确保"i“被认为是9位常量。

代码语言:javascript
运行
复制
genvar i;
generate
for (i=254; i>-1; i=i-1) begin  : ripple

    mux mux_0(.sel(in[i]), .input1(i), .input0(input_num[i+1]), .out(input_num[i]));
end    

module mux(
input sel,
input [8:0] input0, input1,
output reg [8:0] out
);

always@(*) begin    
out = 0;
    if(sel)
        out = input1;
    else 
        out = input0;
end
endmodule
EN

回答 2

Stack Overflow用户

发布于 2022-05-20 04:12:36

正如其他提到的,genvar被视为一个常量的32位有符号值.您可以选择一个genvar的位范围,就像您可以为一个integer选择一样。

在Verilog中,它应该是:(注意:i[8:0]+1'b1将计算为10位值)

代码语言:javascript
运行
复制
for (i=254; i>-1; i=i-1) begin : ripple
    mux mux_0(.sel(in[i[8:0]]), .input1(i[8:0]), .input0(input_num[i[8:0]+1'b1]), .out(input_num[i[8:0]]));
end

如果您有SystemVerilog,可以使用:

代码语言:javascript
运行
复制
for (i=254; i>-1; i=i-1) begin : ripple
    mux mux_0(.sel(in[9'(i)]), .input1(9'(i)), .input0(input_num[9'(i+1)]), .out(input_num[9'(i)]));
end
票数 0
EN

Stack Overflow用户

发布于 2022-05-09 15:48:30

genvar以常量integer类型展开,这是一个32位有符号的值.这与您可以手动编写下面的内容一样。

代码语言:javascript
运行
复制
mux ripple[254].mux_0(.sel(in[254]), .input1(254), .input0(input_num[255]), .out(input_num[254]));
mux ripple[253].mux_0(.sel(in[253]), .input1(253), .input0(input_num[254]), .out(input_num[253]));
...
mux ripple[  0].mux_0(.sel(in[  0]), .input1(  0), .input0(input_num[  1]), .out(input_num[  0]));
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72169472

复制
相关文章

相似问题

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