微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 由组合逻辑开始学习FPGA编程

由组合逻辑开始学习FPGA编程

时间:10-02 整理:3721RD 点击:

    在掌握下载器的使用方法后,就可以利用Quartus II 13.1来编写和验证程序了。我是按照验证、修改、编写、应用的节奏来学习FPGA编程的。

    所谓“验证”,就是利用光盘所配的例程来进行编程学习,并通过验证了解程序的功能和时序方式。我选的首个例程是LED灯测试程序。由于它的程序极为简单,故适于零起点起步。

    由于该例程已带有sof文件,故直接下载即可得到图1所示的运行效果。


    LED灯测试效果


    所谓“修改”,就是我们通过极简单的功能,即可达到新的效果或功能,以LED灯的测试程序为例其核心就是根据赋值语句来控制LED灯的状态,仿此我们只需变更输出值即可改变LED灯的显示效果,如:


assign LED0 = 1'b1;        //输出高电平,使LED灯熄灭

assign LED1 = 1'b0;        //输出低电平,使LED灯点亮

assign LED2 = 1'b0;        

assign LED3 = 1'b1;        

assign LED4 = 1'b1;        

assign LED5 = 1'b0;        

assign LED6 = 1'b0;        

assign LED7 = 1'b1;


     然而在编译时才发现试用版的Quartus 是无法生成sof文件,必须进行破解才能解决。


    再解决了sof文件生成之后,就可以自行走一轮程序的“编写”过程了,当然程序内容可以原样照搬例程的代码,目的不在别的就是完整掌握程序编写的流程。

       有了前面的基础,才能够向“应用”迈进,当然应用有益有难,但即使功能再简单,若能按自己的设想来实现程序功能就是自己的应用成果。

       从起点来讲,组合逻辑要比时序逻辑好一些,因此建议程序的编写从组合逻辑入手比较好,然后再接触时序逻辑的程序设计。

    以按键的例程为基础,我们只需简单的修改就可以将它改造成一个逻辑功能模拟程序,其程序如下:

  1. //-----------------------------------------------------------------------------
  2. //--        文件名  :    A4_luojimoni.v
  3. //--        作者     :    jinglixixi
  4. //--        描述     :   使用 LED0,LED1,LED2显示KEY0,KEY1,KEY2的输入状态,
  5. //--                        使用 LED4显示KEY0逻辑非
  6. //--                        使用 LED5显示KEY1,KEY2的逻辑与
  7. //--                        使用 LED6显示KEY1,KEY2的逻辑或
  8. //--                        使用 LED7显示KEY1,KEY2的逻辑异或
  9. //-----------------------------------------------------------------------------
  10. module A4_Key3                                
  11. (
  12.         //输入端口
  13.         KEY0,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6,KEY7,
  14.         //输出端口
  15.         LED0,LED1,LED2,LED3,LED4,LED5,LED6,LED7
  16. );

  17. //---------------------------------------------------------------------------
  18. //--        外部端口声明
  19. //---------------------------------------------------------------------------
  20. input   KEY0,KEY1,KEY2,KEY3,KEY4,KEY5,KEY6,KEY7;            //对应开发板上的KEY
  21. output  LED0,LED1,LED2,LED3,LED4,LED5,LED6,LED7;        //对应开发板上的LED

  22. //---------------------------------------------------------------------------
  23. //--        逻辑功能实现        
  24. //---------------------------------------------------------------------------        
  25. assign LED0 = ~KEY0;        //触摸按键1控制D1
  26. assign LED1 = ~KEY1;        //触摸按键2控制D2
  27. assign LED2 = ~KEY2;        //触摸按键3控制D3
  28. assign LED3 = 1'b1;            //使LED灯熄灭
  29. assign LED4 = KEY0;            //KEY0逻辑非
  30. assign LED5 =(~KEY1)&(~KEY2);            //KEY1,KEY2的逻辑与
  31. assign LED6 = (~KEY1)|(~KEY2);             //KEY1,KEY2的逻辑或
  32. assign LED7 = (~KEY1)^(~KEY2);           //KEY1,KEY2的逻辑异或

  33. endmodule                                            //模块的结束

复制代码

  


开发板相关部分原理图


      在此程序的基础上,若建立以下对应关系,则可模拟一个逻辑芯片的功能。

开发板与74C32的引脚对应关系:

KEY0 ---- 1A     KEY1 ---- 1B    LED0 ---- 1Y

KEY2 ---- 2A     KEY3 ---- 2B    LED2 ---- 2Y

KEY4 ---- 3A     KEY5 ---- 3B    LED4 ---- 3Y

KEY6 ---- 4A     KEY7 ---- 4B    LED6 ---- 4Y




实现逻辑芯片74LS32的程序如下:

assign LED0 =(~KEY0)|(~KEY1);             //KEY0,KEY1的逻辑或

assign LED2 =(~KEY2)|(~KEY3);            //KEY2,KEY3的逻辑或

assign LED4 = (~KEY4)|(~KEY5);            //KEY4,KEY5的逻辑或

assign LED6 = (~KEY6)|(~KEY7);            //KEY6,KEY7的逻辑或


    仿此,我们实现四2输入与门74LS08、四2输入异或门74LS86等。

       除了实现逻辑功能外,还可译码器和编码器等,下面就介绍一下译码器的实现方法,编码器类此。

开发板与74C32的引脚对应关系:

LED0 ---- Y0     LED1 ---- Y1

LED2 ---- Y2     LED3 ---- Y3

LED4 ---- Y4     LED5 ---- Y5

LED6 ---- Y6     LED7 ---- Y7

KEY0 ---- A0     KEY1 ---- A1     

KEY2 ---- A2


74LS138逻辑表达式


实现译码器功能的程序如下::

assign LED0 = ~((~KEY0)&(~KEY1)&(~KEY2));        

assign LED1 = ~(KEY0&(~KEY1)&(~KEY2));        

assign LED2 = ~((~KEY0)&KEY1&(~KEY2));        

assign LED3 = ~(KEY0&KEY1&(~KEY2));        

assign LED4 = ~((~KEY0)&(~KEY1)&KEY2);        

assign LED5 = ~(KEY0&(~KEY1)&KEY2);        

assign LED6 = ~((~KEY0)&KEY1&KEY2);        

assign LED7 = ~(KEY0&KEY1&KEY2);        


       后面将结合时序逻辑的程序设计来丰富逻辑芯片的模拟仿真功能,如采用数码管来显示逻辑芯片的名称,以按键来选取模拟的芯片功能及对应功能模块实现逻辑功能等。


略做了解                                    

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top