差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
表决器 [2017/03/14 09:38] zhijun |
表决器 [2020/01/18 21:59] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
- | ======三人表决器====== | + | ### 三人表决器 |
- | =====一、项目介绍===== | + | |
+ | --- | ||
+ | #### 一、项目介绍 | ||
相信大家对电视中的选秀节目并不陌生,我们常常能够见到一种比赛规则:当三名评委中有两名及以上同意选手晋级时,该选手才能晋级,那么如何去实现该项目呢? | 相信大家对电视中的选秀节目并不陌生,我们常常能够见到一种比赛规则:当三名评委中有两名及以上同意选手晋级时,该选手才能晋级,那么如何去实现该项目呢? | ||
- | =====二、实现原理===== | + | |
+ | --- | ||
+ | #### 二、实现原理 | ||
其实这一切都离不开数字电路,首先我们可以绘制出三人表决器的真值表,然后用Verilog去实现它,真值表如下: | 其实这一切都离不开数字电路,首先我们可以绘制出三人表决器的真值表,然后用Verilog去实现它,真值表如下: | ||
{{ ::三人表决器真值表.png?400 |}} | {{ ::三人表决器真值表.png?400 |}} | ||
- | =====三、硬件部分===== | + | |
+ | --- | ||
+ | #### 三、硬件部分 | ||
通过对此项目进行评估我们发现: | 通过对此项目进行评估我们发现: | ||
\\ | \\ | ||
1.该项目需要三个输入,我们可以通过拨码开关进行实现;\\ | 1.该项目需要三个输入,我们可以通过拨码开关进行实现;\\ | ||
- | |||
2.需要显示模块来表示投票情况,这里我们选用数码管进行实现;\\ | 2.需要显示模块来表示投票情况,这里我们选用数码管进行实现;\\ | ||
- | =====四、Verilog实现===== | + | |
- | 首先,接口定义: | + | --- |
+ | #### 四、Verilog实现 | ||
+ | |||
+ | <code verilog> | ||
+ | // ******************************************************************** | ||
+ | // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< | ||
+ | // ******************************************************************** | ||
+ | // File name : debounce.v | ||
+ | // Module name : debounce | ||
+ | // Author : STEP | ||
+ | // Description : | ||
+ | // Web : www.stepfpga.com | ||
+ | // | ||
+ | // -------------------------------------------------------------------- | ||
+ | // Code Revision History : | ||
+ | // -------------------------------------------------------------------- | ||
+ | // Version: |Mod. Date: |Changes Made: | ||
+ | // V1.0 |2017/03/14 |Initial ver | ||
+ | // -------------------------------------------------------------------- | ||
+ | // Module Function:三人表决器 | ||
+ | |||
+ | module voter(a,b,c,num_led,result_led); | ||
+ | |||
+ | input a; //评委A | ||
+ | input b; //评委B | ||
+ | input c; //评委C | ||
+ | output [2:0] num_led; //投票数显示; | ||
+ | output result_led; //投票结果显示; | ||
+ | |||
+ | assign num_led=~{a,b,c}; //用三个LED表示投票情况,另根据硬件电路,LED为0时亮,故取反 | ||
+ | assign result_led=~((!a&b&c)||(a&!b&c)||(a&b&!c)||(a&b&c))?1:0; //此处请参阅真值表,另根据硬件电路,LED为0时亮,故取反 | ||
+ | |||
+ | endmodule | ||
+ | |||
+ | </code> | ||
+ | |||
+ | --- | ||
+ | #### 五、实现效果 | ||
+ | 拨码开关1、2、3分别代表评委A、B、C,LED1~3代表投票状态,例如,评委A投票,LED1亮,LED4代表是否通过。 | ||
+ | \\ | ||
+ | 下图为无人投票时, | ||
+ | {{ ::754057370945270088.jpg?500 |}} | ||
+ | 下图为有一位评委投票时, | ||
+ | {{ ::1ren.jpg?500 |}} | ||
+ | 下图为两人进行投票时,可见投票通过指示灯已经亮起; | ||
+ | |||
+ | {{ ::2ren.jpg?500 |}} | ||
+ | 最后,三人同时投票{{ ::369387538796888960.jpg?500 |}} | ||