三人表决器的设计实现

2020-02-03 10:07发布

三人表决器的设计实现
1  三人表决器的真值表
图片9.jpg
2  三人表决器的代码
  1. module         three_votes(
  2.                                    a,
  3.                                    b,
  4.                                    c,
  5.                                    l
  6.                                         );
  7. input         a,b,c;
  8. output  l;

  9. reg l;
  10. always @(a,b,c)
  11.         begin
  12.                 case({a,b,c})
  13.                         3'b000:l=1'b0;
  14.                         3'b001:l=1'b0;
  15.                         3'b010:l=1'b0;
  16.                         3'b011:l=1'b1;
  17.                         3'b100:l=1'b0;
  18.                         3'b101:l=1'b1;
  19.                         3'b110:l=1'b1;
  20.                         3'b111:l=1'b1;
  21.                         default:l=1'bz;
  22.                 endcase
  23.         end

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

图片11.jpg
4.1        三人表决器源代码
  1. module three_votes(
  2.                                 key1,
  3.                                 key2,
  4.                                 key3,
  5.                                 led1,
  6.                                 led2,
  7.                                 led3,
  8.                                 seg_en,
  9.                                 seg_data
  10.                         );
  11. input key1,key2,key3;
  12. output led1,led2,led3;
  13. output [5:0]seg_en;
  14. output [6:0]seg_data;

  15. parameter         SEG_NUM0=7'h3f,
  16.                 SEG_NUM1=7'h06,
  17.                 SEG_NUM2=7'h5b,
  18.                 SEG_NUM3=7'h4f;
  19. assign seg_en=6'b11111_0;

  20. reg [6:0]seg_data;
  21. reg led1,led2,led3;
  22. always @(key1,key2,key3)
  23.         begin
  24.                 case({key1,key2,key3})
  25.                         3'b000:        begin        //three led
  26.                                                         {led1,led2,led3}=3'b000;
  27.                                                         seg_data=SEG_NUM3;
  28.                                                 end
  29.                         3'b001:         begin        //two led
  30.                                                         {led1,led2,led3}=3'b001;
  31.                                                         seg_data=SEG_NUM2;
  32.                                                 end
  33.                         3'b010:        begin        //two led
  34.                                                         {led1,led2,led3}=3'b010;
  35.                                                         seg_data=SEG_NUM2;
  36.                                                 end
  37.                         3'b011:         begin        //one led
  38.                                                         {led1,led2,led3}=3'b011;
  39.                                                         seg_data=SEG_NUM1;
  40.                                                 end
  41.                         3'b100:         begin        //two led
  42.                                                         {led1,led2,led3}=3'b100;
  43.                                                         seg_data=SEG_NUM2;
  44.                                                 end
  45.                         3'b101:         begin        //one led
  46.                                                         {led1,led2,led3}=3'b101;
  47.                                                         seg_data=SEG_NUM1;
  48.                                                 end
  49.                         3'b110:         begin        //one led
  50.                                                         {led1,led2,led3}=3'b110;
  51.                                                         seg_data=SEG_NUM1;
  52.                                                 end
  53.                         3'b111:         begin        //zero led
  54.                                                         {led1,led2,led3}=3'b111;
  55.                                                         seg_data=SEG_NUM0;
  56.                                                 end
  57.                         default:        begin        //zero led
  58.                                                         {led1,led2,led3}=3'b111;
  59.                                                         seg_data=SEG_NUM0;
  60.                                                 end
  61.                 endcase
  62.         end

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





0条回答

一周热门 更多>