[FPGA]ISE-Xilinx-ML605之流水灯

前言:找了好久,网上没有这方面的入门教材,不知是不是自己找的不是地。自己试着编写的流水灯程序,还是为了熟悉ISE软件和开发板。一些步骤不那么详细了,可以参考前篇文章ISE 14.7初次上手(Virtex-6 ML605 实现拨码开关LED–VHDL

系统:WIN10, 开发平台:ISE 14.7
编程语言:VHDL
硬件平台:Virtex-6 FPGA ML605开发板
项目描述:利用板子上自带66MHz的单极晶振,分频出2Hz的时钟,用来实现8个LED灯依次亮灭,每0.5s亮一个。
Tips:用到了变量之间的类型转换;ISE工具栏最右边的小灯泡很有用!

以下正文

一、创建工程

打开ISE软件,按步骤创建顶层文件,同时写入8个LED输出端口和一个CLK时钟输入端口。下图是顶层文件刚创好的时候。注意顶层文件名会是以后.bit的文件名
顶层文件刚创建好

二、写代码 0.0

architecture Behavioral of LED is
	signal clk1: std_logic;					  -- 时钟分频
	signal LED : std_logic_vector (0 to 7);   -- 控制灯的整体变量 

begin

	process (clk)                             -- 66MHz时钟分频 成2Hz
		variable cnt: integer range 0 to 33000000 :=0;
	begin 
		if(clk'event and clk='1')then 
			if cnt=32999999 then 
				cnt:=0;
				else 
				cnt:=cnt+1;
			end if;
			if cnt<=16499999 then 
				clk1<='1';
				else 
				clk1<='0';
			end if ;
		end if;
	end process;
 -------------------------------------------
 使用移位操作符SLL移位,但只能 bit_vector类型才可以使用移位操作符,
 所以就需要一些变量类型转换。
 ------------------------------------------
	process (clk1)											 
		variable count :bit_vector(8 downto 0):="000000001"; 
		begin
			if(clk1'event and clk1 = '1')then
				if count = "100000000" then
					count:="000000001";
				else 
					LED <= To_StdLogicVector(count(7 downto 0));
					count := count SLL 1;
				end if ;
			end if ;	
			led0 <= LED(0);
			led1 <= LED(1);
			led2 <= LED(2);
			led3 <= LED(3);
			led4 <= LED(4);
			led5 <= LED(5);
			led6 <= LED(6);
			led7 <= LED(7);
	end process;
end Behavioral;

这里我才发现一个很有用的地方!就是ISE工具栏最右边的小灯泡!里面有各个函数的介绍和使用,包含在哪个头文件下很清晰。里面有tcl 操作的使用,UCF约束文件,还有VHDL和Verilog的语法。
小灯泡
变量转换语句
在这里可以找到变量转换使用的语句,很方便。

三、综合和仿真

  • 直接双击Synthesis -XST 进行综合,等亮绿灯说明没有问题。

  • 切换到Simulation栏,右键项目创建 VHDL Test Bench 文件。

      signal BLED : std_logic_vector (0 to 7);   -- 控制灯的整体变量
    

在Test Bench文件信号声明下面加上上面句子,因为我的顶层文件名叫LED,与顶层文件里面的信号LED重名了,就改成BLED了。剩下的clk_process不用改,就改下一个进程。

	   stim_proc: process(clk)
	   variable count :bit_vector(8 downto 0):="000000001";
	   begin		
				led0 <= BLED(0);
				led1 <= BLED(1);
				led2 <= BLED(2);
				led3 <= BLED(3);
				led4 <= BLED(4); 
				led5 <= BLED(5);
				led6 <= BLED(6);
				led7 <= BLED(7);
			if(clk'event and clk = '1')then
					if count = "100000000" then
						count:="000000001";
					else 
						BLED <= To_StdLogicVector(count(7 downto 0));
						count := count SLL 1;
					end if ;
			end if ;					
	   end process;

编译成功后,Behavior Model就可以进入Simulate Behavior Model观看仿真波形。在这里插入图片描述
在这里插入图片描述
在新弹出的窗口 输入 run 1ms。。这是仿真时长。
仿真波形
剩下按照前一篇文章进行管脚的锁定和程序的下载就可以了,就只放一张成果照片了~
在这里插入图片描述

整个工程我放在了GitHub上,上面还有一些其他的FPGA小设计,有问题欢迎大家进行交流。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于FPGA(Field-Programmable Gate Array)的流水灯是一种常见的数字电路设计,用于显示数字序列,通常用于电子学习、嵌入式系统和硬件编程实验中。FPGA是可编程逻辑器件,能够灵活地配置和实现各种逻辑功能,包括流水灯控制。 实现步骤如下: 1. **基本原理**:流水灯由多个LED组成,它们串联起来形成一个环形。通过控制各个LED的通断,可以显示0到9或其他数字序列,就像流水一样逐个点。 2. **FPGA设计**:在FPGA中,你需要使用组合逻辑(如门电路)来控制LED的驱动信号,并使用时序逻辑(如计数器)来管理LED的点顺序。你可以将这些逻辑块映射到FPGA的特定逻辑单元或阵列上。 3. **编程工具**:通常使用高级硬件描述语言(HDL),如Verilog或VHDL,编写设计文件。然后,使用FPGA开发环境(如Xilinx ISE或Quartus II)进行编译和下载到实际硬件。 4. **配置下载**:将编译好的设计文件下载到FPGA中,这个过程可能涉及到配置文件的生成和下载,以及硬件复位等步骤。 5. **测试验证**:完成下载后,通过观察LED的表现,确认流水灯是否按照预期工作,可能需要调试来解决可能存在的问题。 相关问题: 1. FPGA的优势体现在流水灯设计中的哪些方面? 2. 如何用Verilog或VHDL编写控制流水灯的逻辑模块? 3. FPGA流水灯项目中,如何使用硬件描述语言实现计数器功能? 4. 流水灯设计中,如果需要改变显示的数字范围,如何修改FPGA程序?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值