三人表决器的设计实现
2020-02-03 10:07发布
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
三人表决器的设计实现
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有个初步的了解,对系统先有个概念。下面的工程,会逐步深入。
一周热门 更多>