打印
[verilog]

三人表决器的设计实现

[复制链接]
2761|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
三人表决器的设计实现

1  三人表决器的真值表


2  三人表决器的代码

module         three_votes(
                                   a,
                                   b,
                                   c,
                                   l
                                        );
input         a,b,c;
output  l;

reg l;
always @(a,b,c)
        begin
                case({a,b,c})
                        3'b000:l=1'b0;
                        3'b001:l=1'b0;
                        3'b010:l=1'b0;
                        3'b011:l=1'b1;
                        3'b100:l=1'b0;
                        3'b101:l=1'b1;
                        3'b110:l=1'b1;
                        3'b111:l=1'b1;
                        default:l=1'bz;
                endcase
        end

endmodule
3  三人表决器的RTL级

4        用外设来实现三人表决器
    我们需要使用的外设有LED灯、按键、数码管,然后要将其拼合在一起,就是一个实际应用的小工程。做项目的思路也是如此,当碰到一个大项目,我们要将这个大项目分成若干个小模块。在这里我们用按键作为输入进行人机交互实现投票功能,当按键按下其对应的LED灯将会点亮,表示该按键进行了投票。FPGA实现三人表决电路,数码管用来显示投票的总票数。下图是整个三人表决器的系统框图。


4.1        三人表决器源代码
module three_votes(
                                key1,
                                key2,
                                key3,
                                led1,
                                led2,
                                led3,
                                seg_en,
                                seg_data
                        );
input key1,key2,key3;
output led1,led2,led3;
output [5:0]seg_en;
output [6:0]seg_data;

parameter         SEG_NUM0=7'h3f,
                SEG_NUM1=7'h06,
                SEG_NUM2=7'h5b,
                SEG_NUM3=7'h4f;
assign seg_en=6'b11111_0;

reg [6:0]seg_data;
reg led1,led2,led3;
always @(key1,key2,key3)
        begin
                case({key1,key2,key3})
                        3'b000:        begin        //three led
                                                        {led1,led2,led3}=3'b000;
                                                        seg_data=SEG_NUM3;
                                                end
                        3'b001:         begin        //two led
                                                        {led1,led2,led3}=3'b001;
                                                        seg_data=SEG_NUM2;
                                                end
                        3'b010:        begin        //two led
                                                        {led1,led2,led3}=3'b010;
                                                        seg_data=SEG_NUM2;
                                                end
                        3'b011:         begin        //one led
                                                        {led1,led2,led3}=3'b011;
                                                        seg_data=SEG_NUM1;
                                                end
                        3'b100:         begin        //two led
                                                        {led1,led2,led3}=3'b100;
                                                        seg_data=SEG_NUM2;
                                                end
                        3'b101:         begin        //one led
                                                        {led1,led2,led3}=3'b101;
                                                        seg_data=SEG_NUM1;
                                                end
                        3'b110:         begin        //one led
                                                        {led1,led2,led3}=3'b110;
                                                        seg_data=SEG_NUM1;
                                                end
                        3'b111:         begin        //zero led
                                                        {led1,led2,led3}=3'b111;
                                                        seg_data=SEG_NUM0;
                                                end
                        default:        begin        //zero led
                                                        {led1,led2,led3}=3'b111;
                                                        seg_data=SEG_NUM0;
                                                end
                endcase
        end

endmodule
5        总结
这个小的工程项目,只是让我们先对FPGA有个初步的了解,对系统先有个概念。下面的工程,会逐步深入。





相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

26

帖子

1

粉丝