You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Verilog中如何使用case语句替代for循环实现7人投票逻辑

问题描述

以下是用Verilog编写的7人投票程序,受for循环效率问题影响,需要将代码中的for循环替换为case语句。

原完整代码:

module voter7(pass, vote);

output pass;
input[6:0] vote;
reg[2:0] sum;

integer i;
reg pass;

always @(vote) 
    begin
        sum = 0;
        for(i=0; i<=6; i=i+1)
            if(vote[i]) sum = sum+1;
        if(sum[2]) pass = 1;
        else pass = 0;
    end

endmodule

需要替换的代码段:

for(i=0; i<=6; i=i+1)
  if(vote[i]) sum = sum+1;

实现方案

因为vote是固定7位位宽的输入,总共有128种取值可能,直接以vote作为case的分支判断条件,枚举所有输入对应的赞成票总数赋值给sum即可,完全不需要循环逻辑。

替换后的完整代码如下:

module voter7(pass, vote);

output pass;
input[6:0] vote;
reg[2:0] sum;
reg pass;

always @(vote) 
    begin
        case(vote)
            // 0票赞成
            7'b0000000: sum = 3'd0;
            // 1票赞成
            7'b0000001,7'b0000010,7'b0000100,7'b0001000,7'b0010000,7'b0100000,7'b1000000: sum = 3'd1;
            // 2票赞成
            7'b0000011,7'b0000101,7'b0000110,7'b0001001,7'b0001010,7'b0001100,7'b0010001,7'b0010010,7'b0010100,7'b0011000,7'b0100001,7'b0100010,7'b0100100,7'b0101000,7'b0110000,7'b1000001,7'b1000010,7'b1000100,7'b1001000,7'b1010000,7'b1100000: sum = 3'd2;
            // 3票及以上赞成,直接赋值sum最高位为1即可满足pass判定
            default: sum = 3'd4;
        endcase
        pass = sum[2];
    end

endmodule

该实现为纯组合逻辑查找表结构,综合后电路延迟比for循环生成的逐位加法电路更低,运行效率更高。


内容的提问来源于stack exchange,提问作者Freya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:54:03