【精品博文】EDK之路(1)——GPIO之XPS篇
说明
EDK在现在已经略显过时了,毕竟vivado才是续集的主角。但不排除现在还有许多工程用着EDK,且EDK和vivado还是有很多操作是共通的。所以还是把之前写的EDK之路系列搬移至此。
工程目的
通过建立一个简单的GPIO工程,熟悉EDK软件以及整个EDK流程,特别是SDK的使用。本工程所用板子为Atlys,预实现的效果为当拨码开关SW0打开时,8位led开始显示流水灯;否则8位led常亮。(注:将忽略部分常见过程)。
XPS部分
由于我们使用的是digilent所生产的开发板,这种开发板一般都有相对应的BSB板级支持包供我们使用,里面包括一些IP核,ucf文件等,可以极大的方便我们使用。因此,在建立工程时记得将板级支持包的库(路径到lib)添加进去,如下图所示(还有一种方式是将板级支持包放在ISE工具的某个文件夹中,这样就不必每次新建工程都要这样添加了,但试了几次都没有成功,以后成功了再补充说明吧):
这样,在如下窗口中我们就可以选择digilent的atlys开发板,而不用选择定制开发板。
在接下来的窗口中:
1号位置表示的是处理器的频率,注意并不是外部晶振的频率(外部晶振频率信息已经包含在板级支持包中),因此此处可以灵活设置。
2号位置所设置的容量大小是用来存储程序的,当程序很大时,如果该容量太小,则会发生程序溢出。该错误会在SDK进行程序编译的时候报出,如果该问题出现,则需要返回xps中修改存储器容量(后面会提到)。因此为了尽量避免这种情况的发生,这里我选择64K。当然,也可以根据需要选择。另外,如果64K还不够,则需要将程序放到外部存储器(如DDR)中。Instruction Memory Size 和Data Cache Size 暂时不用管,保持默认。
3号位置是atlys自带的IP核,好处在于当我们选择了里面的IP核,那么很多东西如ucf文件等就不需要我们去编写了。而不足之处在于,这些IP核不够灵活,比如在本工程中,我们只需要一个拨码开关,而这里提供的IP核是8个拨码开关。因此,在此我们remove所有IP核,在接下来的操作中再按自己的需要创建,这里只需要建立一个最小系统即可。
接着,我们自己添加两个GPIO的IP核,如下,dip0是一位的,led_8bits是8位的。
然后需要将GPIO的相应端口连接到外部端口。这里既可以使用GPIO_IO来连接外部端口,也可以根据输入输出
特性选择特定的输入输出端口来连接外部端口。如dip0是输入,则选择GPIO_IO_I,led_8bits是输出,则可以选择GPIO_IO_O来连接到外部端口。
此时,可以看到External Ports栏多了下面两个端口:
接着记得编写ucf文件。
回到之前所提到的,万一所设置的程序容量太小,导致装不下所编译的程序,则需要在这里修改。这里有2个64K,对应的就是我们建立工程时所选择的64K,在这里修改其中一个的大小,则另外一个也会跟着变化。