广告

原创 vivado 嵌入式系统设计(1)

2017-9-23 08:08 628 0 分类: FPGA/CPLD




(一)简单的硬件系统设计

     主要介绍使用IP集成器创建处理器系统,生成顶层HDL到导出设计到SDK,创建一个存储器测试程序。

(1)先新建一个新的工程,Flow Navigator 下找到 IP integrator,展开,单击Create Block Design,弹出一个对话框,输入设计模块的名字:system,其他参数默认。


点击Add IP,在搜索框输入z,在下面的IP 列表中找到ZYNQ7 Processing System,  ZYNQ7 IP添加到设计中。


单击Run Block Automation,参数默认。可以看到为DDR和固定IO自动添加了端口




双击ZYNQ块符号,打开 Zynq 7000 内部结构,该图显示了PS内各种可配置的块(绿色高亮)



双击 I/O Peripherals, 选择 UART1外设,其他都不选。

<1>去掉ENET0,USB0,SD0前面复选框的对勾;

<2>展开GPIO选项,在展开项中,去掉GPIO MIO 前的对勾;

<3>展开Memory Interfaces,在展开项中,去掉 Quad SPI Flash 前的对勾;

<4>展开 Application Processor unit,去掉Timer0前面的对勾;





   在左侧选择 PS-PL Configuration 选项,在右侧展开GPMaster AXI Interface。在展开项中,去掉 M AXI GP0 interface 后面的对勾。


  选择并展开General选项,在展开项中,找到并展开Enable Clock Resets选项。在展开项中,去掉FCLK_RESET0_N 后复选框的对勾。



在左侧选择 Clock Configuration选项,在右侧选择并展开 PL Fabric Clocks 选项。在展开项中,去掉FCLK_CLK0 前的对勾。


点击 OK 后,如下图所示,是更新配置后ZYNQ嵌入式最小系统



点击 Diagram中的如图所示图标,检查设计的正确性





(2)生成顶层HDL和导出设计到SDK

      在Source 标签下,选中system.bd,单击鼠标右键,出现浮动菜单。在浮动菜单内,执行菜单命令 Generate Output Products 。在弹出的对话框中,单击Generate按钮,弹出Generate Output Products对话框,提示输出结果成功。

     可以看到生成了system_wrapper.v文件,作为顶层文件。打开该文件(在将设计导出到SDK前,需要打开块设计,如果没有打开,则在vivado主界面下的Flow Navigator窗口下,找到并展开IP Integrator ,在展开项中单击 Open Block Design

     在主界面菜单下,依次点击File,Export,Export hardware,弹出 Export Hardware 对话框,在此无须选中Include bitstream 前面的复选框。由于当前的设计没有使用PL内的任何资源,所以不需要包含比特流文件。

     


   单击OK按钮,会自动打开SDK工具。从图中可以看出在Project Explorer 窗口下,创建了system_wrapper_hw_platform_0目录,在该目录下保存着硬件平台的信息。在该界面右侧窗口中,自动打开system.hdf 文件。在硬件描述文件(Hardware Description File,HDF)中,可以找到工程硬件配置的基本信息。同时,该文件也给出了PS系统的地址映射和驱动信息。




(2)创建存储器测试程序

     下面将使用标准工程模板,生成存储器测试程序。

 在SDK主界面菜单下,依次点击 File, New, Application Project。弹出一个对话框,按如下配置。



点击Next按钮,在左侧 Available Templates 窗口下,选择 Memory Tests


  单击Finish按钮,将创建mem_test工程和板支持包工程mem_test_bsp。可以在SDK主界面的 Project Explorer 窗口下看到这2个工程目录,并且将自动对这两个工程编译。可以在下面的 Console窗口内查看编译的信息。

  在SDK主界面左侧的Project Explorer 窗口下,展开目录。<1>mem_test:应用工程,用于验证设计的功能。<2>mem_test_bsp:是板支持包的一部分;<3>system_wrapper_hw_platform_0 :包含ps7_init函数,用于初始化PS,其作为第一级启动引导的一部分。


  在mem_test 工程下的src目录下,打开memorytest.c 文件。这个文件调用函数测试存储器,分别执行8位测试、16位测试、32位测试。


(3)验证设计 

  接下来主要给zedboard上电,并且使用SDK Terminal 标签窗口建立和主机的通信,验证设计。

  在PCZedboardJTAG端口之间使用 micro-usb 电缆进行连接,在PCZedboard之间的UART端口之间也使用usb连接,然后给板子上电。

  如图所示,单击SDK Terminal 标签。如果它没有出现,依次点击Window , Show view ,Terminal


点击绿色的加号,按图中参数进行配置(注意端口号要去设备管理器去查看)




  在Project Explorer 窗口下,选择mem_test,单击鼠标右键,在浮动菜单下,执行 Run As, Launch on Hardware(GDB),这个命令用于下载应用程序,并执行ps_initmem_test.elf





广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
LoneSurvivor 2018-02-25 08:26
C++输入/输出流(2)
1. get()函数#include<iostream>using namespace std;int main(){    char s1[80], s2[...
LoneSurvivor 2018-02-23 12:19
C++输入/输出流(1)
1. 输入/输出流类层次 C++的输入/输出流类库是用派生方法建立起的,它有2个平行的基类,streambuf和ios。其他的流类都是从这两个基类直接或间接派生的。1.1  ...
LoneSurvivor 2018-02-19 11:36
C++多态(4)——特殊运算符重载和类类型转换
1.“++”和“--”的重载     运算符“++”和“--”的重载要区分前置和后置两种形式。如果不区分前置和后置,则使用operator++()或operator—()即可...
LoneSurvivor 2018-02-12 11:15
C++多态(3)——运算符重载
1.     运算符重载的定义     运算符重载也是实现多态的一个重要手段。运算符重载实现的是编译时的多态,即静态多态性。C++预...
LoneSurvivor 2018-02-12 10:31
C++多态(2)——纯虚函数与抽象类
   抽象类是一种特殊的类,它提供了统一的操作界面。建立抽象类是为了多态地使用抽象类的成员函数。抽象类是包含纯虚函数的类。 1.    ...
LoneSurvivor 2018-02-11 16:24
C++多态(1)
1.     多态      多态是人类思维方式的一种直接模拟,多态性是指不同对象接收到相同的消息时,根据对象类的不同而产...
我要评论
0
0
广告
关闭 热点推荐上一条 /1 下一条