首页 > 其他分享 >Verilog设计实现7人投票表决器

Verilog设计实现7人投票表决器

时间:2024-05-31 22:58:33浏览次数:40  
标签:begin end test6 投票表决 Verilog 模块 pass vote 设计

使用verilog实现七人投票表决器。要求若超过四人含四人投票赞成,则表决通过。

设计模块:

// 定义模块 test6,声明输出端口 pass 和输入端口 vote
module test6(
    output pass,      // 输出端口,表示投票结果是否通过
    input  vote      // 输入端口,一个 7 位的向量,每位表示一票(1 表示赞成,0 表示反对)
    );

    // 重新声明输入 vote 为一个 7 位的线网类型,这一步在本上下文中是冗余的,因为 input 已定义了 vote 类型
    wire[6:0] vote;

    // 声明一个寄存器类型变量 pass,用于存储最终的投票结果
    reg  pass;

    // 声明一个整型变量 i,用于循环计数
    integer i;

    // 声明一个 3 位的寄存器类型变量 sum,用于累加赞成票数
    reg[2:0]  sum;

    // 始终当 vote 变化时执行该块内的逻辑
    always@(vote)  begin
        
        // 初始化 sum 为 0,准备累计赞成票
        sum=0;

        // 循环遍历 vote 的每一位
        for (i=0;i<=6;i=i+1) begin
            
            // 如果当前位为 1(即有人投了赞成票)
            if (vote[i]) begin
                // 累加 sum 的值
                sum=sum+1;
            end
            
            // 如果累加的票数(sum)达到或超过 4 票(即 sum 的最高位为 1,表示二进制数 >= 4)
            if (sum[2]) begin
                // 设置 pass 为 1,表示投票通过
                pass=1;
            end
            else begin
                // 否则,如果票数不足 4,则设置 pass 为 0,表示未通过
                pass=0;
            end
        end
    end // always block 结束

endmodule // 模块结束

测试模块:

// 定义一个名为 tb_test6 的测试平台模块
module tb_test6;

    // 声明一个 wire 类型的信号 pass,用于从待测模块(test6)接收测试结果
    wire  pass;

    // 声明一个 reg 类型的变量 vote,它有 7 位,用于存储随机生成的投票数值
    reg[6:0]  vote;

    // 初始化块,仿真开始时执行一次
    initial begin

        // 使用 repeat 循环,让下面的代码块重复执行 5 次
        repeat(5) begin

            // 生成一个随机数并对 128 取模,确保结果在 [0, 127] 范围内,然后赋值给 vote
            vote = {$random} % 128;

            // 打印当前 vote 的二进制值
            $display("vote=%b", vote);

            // 暂停仿真时钟 5 个时间单位(具体单位取决于仿真环境的定义)
            #5;

            // 判断 pass 信号的值
            if (pass) begin
                // 如果 pass 为高电平(逻辑1),表示测试通过,打印通过信息
                $display("++++pass++++");
            end
            else begin
                // 如果 pass 为低电平(逻辑0),表示测试未通过,打印未通过信息
                // 修正了之前代码中的笔误 $diplay -> $display
                $display("+++++nopass+++++");
            end
        end
    end

    // 实例化待测模块 test6,将 pass 和 vote 分别连接到 test6 模块的相应端口
    test6  t6(.pass(pass), .vote(vote));
 
endmodule

波形:

标签:begin,end,test6,投票表决,Verilog,模块,pass,vote,设计
From: https://blog.csdn.net/jskwys/article/details/139345458

相关文章

  • Verilog设计实现两个8位二进制数相乘
    乘法器的基本原理可以通过多种方法实现,例如移位相加法、查找表法等。在Verilog中,我们可以使用内建的乘法运算符“*”来实现乘法功能。首先明确计算的范围。8位2进制1111_1111=255,所以两个8位二进制数的取值范围是0-255。考虑最大值255*255=65025=(1111_1110_0000_0001)2。所......
  • JS设计模式学习【待吸收】
    版权:千锋HTML5大前端教研院,源自大前端私房菜JS设计模式一.设计模式介绍设计模式是我们在解决问题的时候针对特定问题给出的简洁而优化的处理方案在JS设计模式中,最核心的思想:封装变化。将变与不变分离,确保变化的部分灵活、不变的部分稳定。二.构造器模式类似......
  • 基于springboot实现大学生一体化服务平台系统项目【项目源码+论文说明】计算机毕业设
    摘要如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统大学生综合服务信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个大学生......
  • 基于springboot实现毕业设计成绩管理系统项目【项目源码+论文说明】计算机毕业设计
    摘要传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装毕业设计成绩管理系统软件来发挥其高效地信息处理的作用,可以规范信息管理流程,让管理工作可以系统化和程序化,同时,毕业设计......
  • 基于LabVIEW虚拟示波器设计
    随着计算机技术的发展,传统仪器开始向计算机化的方向发展。虚拟仪器是90年代提出的新概念。虚拟仪器技术的提出与发展,标志着二十一世纪自动测试与电子测量仪器领域技术发展的一个重要方向。所谓虚拟仪器,就是在通用的计算机平台上定义和设计仪器的测试功能,使用者操作这台计算机,就......
  • 基于springboot实现周边游平台个人管理系统项目【项目源码+论文说明】计算机毕业设计
    摘要在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对旅游信息管理的提升,也为了对旅游信息进行更好的维护,周边游平台的出现就变得水到渠成不可缺少。通过对周边......
  • 基于springboot实现学生网上选课系统项目【项目源码+论文说明】计算机毕业设计
    摘要如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统学生选课信息管理难度大,容错率低,管理人员处理数据费工费时,所以专门为解决这个难题开发了一个学生网上选课......
  • 基于SSM的网上商城系统毕业设计论文【范文】
    摘要在数字经济时代背景下,电子商务迅猛发展,网上商城作为其重要组成部分,对于促进商业活动、满足消费者需求起到了关键作用。本文围绕基于Spring、SpringMVC和MyBatis(简称SSM)框架的网上商城系统的设计与实现进行研究,旨在提供一个高效、稳定、易维护的电子商务平台。文章首先介绍了......
  • java期末练习题,设计一个学生类,包括公开的学号、私有的成绩及其题目所要求的条件进行打
    (1)Student类中包含公开的学号、私有的成绩两个属性;(2)分别给这两个属性分别定义设置值与获取值的方法;1)在学号设置方法中,如果学号长度大于12位,提示用户并截取前12位。2)在分数设置方法中,如果分数不在0-100范围内,提示用户并默认60分。(3)Student类中定义一个无参的......
  • java期末练习题,设计教师类,完成教授,副教授,讲师三个类的定义,在完成相应的测试。
        教授的基本工资为5000元,每学时补贴70元;     副教授的基本工资为3500元,每学时补贴60元;     讲师的基本工资2600元,每学时补贴55元。     已知每个教师的学时数,计算每个教师的每月工资数。输入1对应教授。输入2对应副教......