Xilinx CPLD教程,Verilog入门:点亮LED灯

本文介绍如何使用Xilinx CPLD和Verilog语言点亮LED灯。通过XC9572XL开发板和iMPACT工具,文章详细讲解了Verilog的基本语法、连续赋值与过程赋值的区别,并演示了如何定义引脚约束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2024年8月更新,增加网页链接

前言

这篇讲的不会非常细致,主要是说明下程序与实现的效果,方便熟悉c类语言的工程师了解Verilog到底是怎么样,以及前期硬件的准备

为什么用CPLD

CPLD和FPGA相比较,更简单,更便宜,更容易使用,当然性能更一般,但是却很适合入门Verilog因为不用花很多时间去配置。

使用平台、环境、开发板

这里我使用一套运行Windows7的电脑,它有LPT也就是并口,当然你可以使用并口转USB的设备来实现下载器的使用。

XC9572XL:XC9572的现代版本,VG44封装

LPT下载器:事实上这个是最适合的,不算很好用因为有点接触不良问题,但它相比较FPGA那边用的下载器来说,能正常下载到CPLD中

 这个东西其实里面没有什么特别的,两片74HC125加基本元件而已,你甚至可以轻松的打板自制

ISE 14.7:Xilinx早些时候的IDE环境,如今已经换成vivado但是它没有支持CPLD开发,安装教程  二、Win10安装Xilinx ISE14.7_ise 14.7安装包-CSDN博客 

Win11安装ise14.7~不需要虚拟机了~-CSDN博客

iMpact:下载配置工具

说明

这里使用的是Verilog语言,类似于C但是很明显许多地方不能套用C的思维。类似C的地方有蛮多的,但是加上一些Verilog的操作后和C就没什么关系了。

先确定两个赋值方法,连续赋值和过程赋值,连续赋值就是把寄存器和输出接口连起来,过程赋值就是给寄存器赋值

比如下面这个是连续赋值,前面使用assign修饰

assign LED1=sr_led;

下面这个是过程赋值,使用的是【<=】这个符号 ,相比一下,过程赋值能放在always(这个类似于while(1)里面,而连续赋值是不可以的。同样,过程赋值不能放在initial和always外面而连续赋值可以

sr_led = 4'b1110;  //4表示4位数值,b表示二进制,数值为1110

 LED点灯,整个程序如下所示,可以看到输出有四个,输入有一个

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文件定义引脚,通常正确叫法是约束

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值