[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小设计,有问题欢迎大家进行交流。

Virtex:registered:-6 FPGA ML605 评估套件为那些需要高性能、串行连接功能和高级存储器接口的系统设计提供了开发环境。ML605 得到了预验证的参考设计和行业标准 FPGA 夹层连接器(FMC)的支持,能够利用子卡实现升级和定制。集成式工具有助于简化符合复杂设计要求的解决方案的创建。 配置 板上配置电路(USB 到 JTAG) 16MB Platform Flash XL 32MB 并行(BPI)Flash 带有 2GB Compact FLASH(CF)卡的 System ACE CF 通信与网络 10/100/1000 三速以太网(GMII、RGMII、SGMII、MII) SFP 收发器连接器 带有4个 SMA 连接器的 GTX 端口(TX、RX) USB 到 UART 桥 USB 主端口和 USB 外设端口 PCI Express x8 边缘连接器(利用 Virtex-6 LX240T-1 芯片,卡支持高达 x4 Gen2) 存储器 DDR3 SO-DIMM(512 MB) BPI 线性 Flash(32 MB)(还可用于配置) IIC EEPROM(8 Kb) 时钟技术 200 MHz 振荡器(差分) 66 MHz 插座振荡器(单端) 用于外部时钟(差分)的 SMA 连接器 带有2个 SMA 连接器的 GTX 参考时钟端口 输入/输出和扩展端口 16x2 LCD 字符显示器 DVI 输出 系统监视器 用户按钮(5)、DIP 开关(13)、LED(13) 带有2个 SMA 连接器的用户 GPIO 2个 FMC 扩展端口 高引脚数(HPC) 8个 GTX 收发器 160个 SelectIO 低引脚数(LPC) 1个 GTX 收发器 68个 SelectIO 功耗 12V 插墙式适配器或 ATX 2.5V、1.5V、1.2V 和 1.0V 电源的电压和电流测量功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值