admin管理员组文章数量:1794759
Xilinx CPLD教程,Verilog入门:点亮LED灯
前言
这篇讲的不会非常细致,主要是说明下程序与实现的效果,方便熟悉c类语言的工程师了解Verilog到底是怎么样,以及前期硬件的准备
为什么用CPLDCPLD和FPGA相比较,更简单,更便宜,更容易使用,当然性能更一般,但是却很适合入门Verilog因为不用花很多时间去配置。
使用平台、环境、开发板这里我使用一套运行Windows7的电脑,它有LPT也就是并口,当然你可以使用并口转USB的设备来实现下载器的使用。
XC9572XL:XC9572的现代版本,VG44封装
LPT下载器:事实上这个是最适合的,不算很好用因为有点接触不良问题,但它相比较FPGA那边用的下载器来说,能正常下载到CPLD中
这个东西其实里面没有什么特别的,两片74HC125加基本元件而已,你甚至可以轻松的打板自制
ISE 14.7:Xilinx早些时候的IDE环境,如今已经换成vivado但是它没有支持CPLD开发
iMpact:下载配置工具
说明
这里使用的是Verilog语言,类似于C但是很明显许多地方不能套用C的思维。类似C的地方有蛮多的,但是加上一些Verilog的操作后和C就没什么关系了。
先确定两个赋值方法,连续赋值和过程赋值,连续赋值就是把寄存器和输出接口连起来,过程赋值就是给寄存器赋值
比如下面这个是连续赋值,前面使用assign修饰
assign LED1=sr_led;下面这个是过程赋值,使用的是【<=】这个符号 ,相比一下,过程赋值能放在always(这个类似于while(1)里面,而连续赋值是不可以的。同样,过程赋值不能放在initial和always外面而连续赋值可以
sr_led = 4'b1110; //4表示4位数值,b表示二进制,数值为1110LED点灯,整个程序如下所示,可以看到输出有四个,输入有一个
module Main( output LED1, output LED2, output LED3, output LED4, input iCLK ); reg sr_led=1;//寄存器sr_led assign LED1=sr_led;//让LED1和sr_led这个寄存器连接,sr_led发生变动时候LED1也变化 always@(posedge iCLK)//always和initial一样都是并发执行的,多个always会一块启动 sr_led <= 0;//赋值为0 endmodule当然这里看出来,并没有对具体的引脚进行定义(FPGA里面叫做约束),所以这里就需要UCF文件来进行定义引脚
这个引脚约束和具体的开发板电路原理图有关系,我们需要引入时钟以及四个LED灯的引脚,它们分别位于Port1和31,32,33,34
根据上面的原理图,具体定义如下
NET "iCLK" LOC = "p1" ; NET "LED1" LOC = "p34" ; NET "LED2" LOC = "p33" ; NET "LED3" LOC = "p32" ; NET "LED4" LOC = "p31" ;最终使用iMPACT来下载到XC9572里面
执行效果,左边一个LED是电源指示灯
总结
基本语法类似C但要搞清差别,比如赋值
UCF文件定义引脚,通常正确叫法是约束
版权声明:本文标题:Xilinx CPLD教程,Verilog入门:点亮LED灯 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686753618a98502.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论