【Kevin SOC 连载1】开启Zynq-7000之旅,入手一块Z-turn板,PL端控制RGB三色灯

作者: Kevin 分类: FPGA学习笔记 发布时间: 2016-04-03 16:35

在上海的时候,就有学习到SOC的相关知识,回到学校后,一直苦于没有一块Zynq7000的板子,所以对于SOC的学习一直处于停滞状态。一直想买一块Zynq的板子,Zed的板子对于学生党来讲,成本还是偏高了,所以自己在淘宝上选了一块相对较便宜的Z-turn来进一步学习SOC。

收到板子后,看下光盘里的资料,不得不说里边的教程,写的确实一般般,如果是一个还没使用过Vivado这个软件的朋友来讲,个人觉得阅读里边的教程还是有一定困难的。既然是写教程,就肯定是要写得让大多数人能看懂,如果达不到这个效果,就失去了写教程的意义了。

好了,言归正传,先不吐槽了,这个实验,可以说是Kevin拿到这块板子做的第一个实验。在这个实验中,我们完全是基于PL端来进行的,不涉及到PS端,所以这个实验基本上和传统的FPGA开发流程是一致的。

先来说下Kevin看完这块板子原理图的结果:1.板子上并没有专门针对于PL端的复位按键,所以Kevin是在模块内部定义的上电复位;2.针对于PL端的开发,板子上有一个12MHz的晶振,我们可以直接使用,关于这个晶振的作用,我还没仔细看,反正不是只为PL端提供时钟的,还需要给其他器件提供时钟。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2016/04/03 14:43:14
// Design Name: 
// Module Name: led_ctrl
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////


module	led_ctrl(
		input	wire		sclk,
		//input	wire		s_rst_n,
		
		output	reg	[2:0]	led_rgb
		);
	
	parameter	CNT_END	=	20'd600_0000;
	
	reg	[19:0]	cnt;
	
	reg	[19:0]	cnt_rst	=	20'd0;
	reg		s_rst_n	=	1'b0;
	
	always	@(posedge sclk)
		if(s_rst_n == 1'b1)
			cnt_rst	<=	'd0;
		else if(s_rst_n == 1'b0)
			cnt_rst	<=	cnt_rst + 1'b1;
			
	always	@(posedge sclk)
		if(cnt_rst == CNT_END)
			s_rst_n	<=	1'b1;	
	
	always	@(posedge sclk or negedge s_rst_n)
		if(s_rst_n == 1'b0)
			cnt	<=	'd0;
		else if(cnt == CNT_END)
			cnt	<=	'd0;
		else
			cnt	<=	cnt + 1'b1;
			
	always	@(posedge sclk or negedge s_rst_n)
		if(s_rst_n == 1'b0)
			led_rgb	<=	3'b100;
		else if(cnt == CNT_END)
			led_rgb	<=	{led_rgb[1:0], led_rgb[2]};
endmodule

好了,代码写完了,只需要在Vivado中编译好,绑定管脚就可以了,然后下载bitstream文件。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注