在Zynq AP SoC设计中使用HLS IP(二)

对于硬件加速模块来说,这些硬件加速模块会消耗源于cpu存储器的数据,并且以streaming方式产生数据。本文使用vivado hls和xfft ip模块(在ip integrator使用hls ip那节用过)。这些模块是连接到hp0的axi4从端口,使得zynq7处理系统的数据通过axi dma ip核。硬件加速模块是免费的运行,并不需要驱动,只要数据被cpu推送(通常简称为处理系统或ps)。这里还要强调软件要求避免缓存一致性问题。
在zynq cpu和hls加速模块之间streaming data
step 1: 产生hls ip
这里会产生两个vivado hls文件,即fe_vhls_prj和be_vhls_prj,它们都包含hls ip。
step 2: 创建vivado project
打开vivado,选择create new project,下一步在project location里选择lab2文件夹,并将project name命名为project_1,然后选择rtl project和do not specify sources at this time,在board选择zynq-7 zc702 evaluation board,最后点击finish。
step 3: 给ip库里添加hls ip
在flow navigator窗口点击ip catalog,然后选择ip settings,在ip settings对话框选中add repository,在lab2下create new folder,并命名为vivado_ip_repo,然后依次添加lab2/hls_designs/fe_vhls_prj/ipxactexport/impl/ip和lab2/hls_designs/be_vhls_prj/ipxactexport/impl/ip,现在在hls ip中有hls_real2xfft和 hls_xfft2real这两个ip。
step 4: 创建顶层模块设计
1.点击create block design,并命名为zynq_realfft,然后添加fast fourier transform ip,并双击ip打开re-customize ip,将transform length设置为512,target clock frequency设置为100 mhz,并选择pipelined, streaming i/o,接着在implementation窗口里将control signals设置为aresetn,output ordering options设置为bit/digit reversed order,最后选择non real time,点击ok
2.添加hls_real2xfft和 hls_xfft2real这两个ip,然后将hls blocks 和 fft block连接起来,这里即将hls_real2xftt模块的dout接口跟fft模块的s_axis_data接口,以及hls_xfft2real模块的din接口跟fft模块的m_axis_data接口连接起来,最后按ctrl+a,给所有模块create hierarchy,并命名为realfft,并确认move ‘3’ selected blocks to new hierarchy被选中。
3.下面给realfft hierarchical block添加pins,双击realfft打开block,右击hls_real2xfft_0模块的din_v_v端口,并选择create interface pin,并命名为realfft_s_axis_din(其他默认),同理给hls_real2xfft模块的ap_clk端口create pin,并命名为aclk,同理给hls_xfft2real模块的dout_v端口create pin,并命名为realfft_m_axis_dout,同理给ap_res_n端口create pin,并命名为aresetn。
4.右键add ip输入const,双击xlconstant_0模块确认const val设置为1,展开所有的ap_ctrl端口,将所有的ap_start端口跟xlconstant_0的输出端口连接,然后分别连接所有aclk和aresetn端口,添加一个新的xlconstant,这里将const width设置为16,将const val设置为0,展开s_axis_config端口,最后将s_axis_config_tdata 和s_axis_config_tvalid跟新的xlconstant模块连接,如下图
5.添加zynq7 processing system ip,并点击run block automation,然后双击processing_system7_0模块,点击presets,并选择zc702开发板,然后点击ps-pl configuration,展开hp slave axi interface,选中并确认s axi hp0 interface下的s axi hp0 data width为64,最后选择clock configuration,展开pl fabric clocks,将要求的频率改为100mhz。
6.将realfft模块的realfft_s_axis_din端口跟zynq ap soc模块的s_axi_hp0端口连接,此时会出现三个小模块,分别是axi dma core, axi interconnect和 processor system reset block,再将realfft模块的realfft_m_axis_dout跟s_axi_hp0连接,然后点击run connection automation,再将realfft模块的aclk和aresetn端口分别连接到processing_system7_0的fclk_clk0端口和rst_processing_system7_0_100m的peripheral_aresetn端口,最后run validate design。
step 5: 实现系统
在进行系统设计之前,必须生成implementation sources,并且创建一个hdl wrapper,来用于综合和实现的顶层模块。
在这里点击project manager,右键zynq_ realfft选择generate output products,去生成必要的源文件,再次右键zynq_realfft选择create hdl wrapper,此时顶层设计变成zynq_ realfft _wrapper.v,然后generate bitstream,最后在位流文件生成后的窗口里,选择open implemented design并点击ok。
step 6:打开 sdk去测试 zynq 系统
1.在vivado file菜单里选择export > export hardware for sdk,并勾选include bitstream,然后在vivado file菜单里选择launch sdk。
2.在sdk file目录里选择new > application project,在project name里输入zynq_realfft_test,点击next,选择hello world,点击finish。在这里给zc702板通电并且测试helloworld应用,确保板子所有连接正确,在fpga器件上下载位流文件,并且可以看到zc702开发板上的文档。
3.选择xilinx tools > program fpga,此时注意到done led亮了,然后底部窗口点击sdk terminal,选择connection to serial port,port选择com1,baud rate选择115200,点击ok
4.右击zynq_design_test选择run as > launch on hardware,然后在terminal窗口验证hello world是否被接受。
5由于project使用c math库,所以必须调整build settings,右键zynq_realfft_test选择c/c+ build settings,然后在tool settings窗口,选择arm gcc linker> libraries,点击add,进入value对话框并输入m,最后点击ok,退出properties for the zynq_realfft_test对话框。

VR/AR行业发展历程 预计2025年全球VR头显出货量达2175万台
美国再次要求LG Uplus停止使用华为设备
微雪电子BB Black配件包介绍
三星李在镕串访微软、谷歌 意欲加强技术合作
英伟达“阉割版”AI芯片遇阻,推迟至明年发布
在Zynq AP SoC设计中使用HLS IP(二)
简单介绍振荡器中环振的级数
曙光“四位一体”建设模式保障智算中心建成后应用创新
聚焦两会:大数据时代的信息安全、新能源汽车
区块链基因组数据Shivom生态系统介绍
使用两点校准消除ADC失调和增益误差
12个三菱PLC图文解析
双隔驱 MD18023:高效能驱动解决方案的完美选择
关于5G的三大特性
英国电信已成为第一家获得中国许可证的国际电信公司
Oppo智能频段刚刚获得EEC认证
畅行无阻 | AS-33C激光雷达,如何灵巧躲避每一个障碍物?
电机技术的应用是什么?
如何制作可视化的电商数据分析报表
首个产品A股机器人上线