对于vivado hls来说,输入包括tesbench,c/c++源代码和directives,相应的输出为ip catalog,dsp和sysgen,特别的,一个工程只能有一个顶层函数用于综和,这个顶层函数下面的子函数也是可以被综合的,会生成相应的vhdl和verilog代码,所以,c综合后的rtl代码结构通常是跟原始c描述的结构是一致的,除非是子函数功能很简单,所需要的逻辑量很小。 通常在main函数以下的函数都可以被综合,也就是说,并不是所有的c/c++都可以被综合,动态内存分配和涉及到操作系统层面的操作不可以被综合。
本文结构框架:
creat new project新建文档 c simulation c systhesis rtl级仿真 ip封装 总结 1.creat new project新建文档:
新建一个project name,点next(这里选取简单的4选1数据选择器为例,主要是说明流程)
在add files里添加mux41.c文件,点next
添加mux41_test测试文件,点next
点part,这里选择board下面的zedboard zynq开发板,然后点ok和finish
注释:
mux41.c代码:#include mux41.hint1 mux41(int1 sig_a, int1 sig_b,int1 sig_c,int1 sig_d, int select){ if(select==0) return sig_a; else if(select==1) return sig_b; else if(select==2) return sig_c; else if(select==3) return sig_d;}mux41.h代码:(头文件)#include mux41_tb代码:#include #include mux41.hint main(void){ int res1 = 0; int res2 = 0; int res3 = 0; int res4 = 0; res1=mux41(1,0,0,0,0); res2=mux41(0,1,0,0,1); res3=mux41(0,0,1,0,2); res4=mux41(0,0,0,1,3); if(res1 && res2 && res3 && res4) printf(test passed, well done!/n); return 0;} 2.c simulation:
在菜单里project>run c simulation,c simulation可以得到csim文件
从图中看到,可以看到test passed,well done!,证明结果是正确的:
3.c systhesis:
在菜单里solution>run c systhesis>active solution,综合会得到syn文件
注意综合得到的verilog代码的可读性很差,不需要读懂,所以大多数优化都在c这个层面去做的,下面是综合后的verilog代码:
// ==============================================================// rtl generated by vivado(tm) hls - high-level synthesis from c, c++ and systemc// version: 2016.3// copyright (c) 1986-2016 xilinx, inc. all rights reserved.// // ===========================================================`timescale 1 ns / 1 ps (* core_generation_info=mux41,hls_ip_2016_3,{hls_input_type=c,hls_input_float=0,hls_input_fixed=1,hls_input_part=xc7z020clg484-1,hls_input_clock=10.000000,hls_input_arch=others,hls_syn_clock=5.258000,hls_syn_lat=0,hls_syn_tpt=none,hls_syn_mem=0,hls_syn_dsp=0,hls_syn_ff=0,hls_syn_lut=41} *)module mux41 ( ap_start, ap_done, ap_idle, ap_ready, sig_a, sig_b, sig_c, sig_d, select_r, ap_return);parameter ap_const_lv32_0 = 32'b00000000000000000000000000000000;parameter ap_const_lv32_1 = 32'b1;parameter ap_const_lv32_2 = 32'b10;input ap_start;output ap_done;output ap_idle;output ap_ready;input [0:0] sig_a;input [0:0] sig_b;input [0:0] sig_c;input [0:0] sig_d;input [31:0] select_r;output [0:0] ap_return;wire [0:0] tmp_fu_60_p2;wire [0:0] tmp_1_fu_66_p2;wire [0:0] sel_tmp1_fu_86_p2;wire [0:0] sel_tmp2_fu_92_p2;wire [0:0] sel_tmp_fu_78_p3;wire [0:0] tmp_2_fu_72_p2;wire [0:0] tmp7_fu_106_p2;wire [0:0] sel_tmp5_fu_112_p2;wire [0:0] p_0_fu_98_p3;assign ap_done = ap_start;assign ap_idle = 1'b1;assign ap_ready = ap_start;assign ap_return = ((sel_tmp5_fu_112_p2[0:0] === 1'b1) ? p_0_fu_98_p3 : sig_d);assign p_0_fu_98_p3 = ((sel_tmp2_fu_92_p2[0:0] === 1'b1) ? sig_b : sel_tmp_fu_78_p3);assign sel_tmp1_fu_86_p2 = (tmp_fu_60_p2 ^ 1'b1);assign sel_tmp2_fu_92_p2 = (tmp_1_fu_66_p2 & sel_tmp1_fu_86_p2);assign sel_tmp5_fu_112_p2 = (tmp7_fu_106_p2 | tmp_fu_60_p2);assign sel_tmp_fu_78_p3 = ((tmp_fu_60_p2[0:0] === 1'b1) ? sig_a : sig_c);assign tmp7_fu_106_p2 = (tmp_1_fu_66_p2 | tmp_2_fu_72_p2);assign tmp_1_fu_66_p2 = ((select_r == ap_const_lv32_1) ? 1'b1 : 1'b0);assign tmp_2_fu_72_p2 = ((select_r == ap_const_lv32_2) ? 1'b1 : 1'b0);assign tmp_fu_60_p2 = ((select_r == ap_const_lv32_0) ? 1'b1 : 1'b0);endmodule //mux41 4.rtl级仿真:
在菜单里solution>runc/rtl cosimulation,需要对co-similation dialog设置如下:
得到如下结果,我们会发现verilog的status是pass,证明c/rtl cosimulation成功:
然后我们点开波形查看窗口,此时会自动打开vivado软件,从图中看到,mux41的功能正确:
5.ip封装:
在菜单里solution>export tl,设置如下:
ip封装后,会得到impl文件,其中就有我们所需要的三个子文件ip,verilog,vhdl
总结:
事实上,在整个流程中,用户先创建一个设计 c、c++ 或 systemc 源代码,以及一个c的测试平台。随后需要用 gcc/g++或 visual c++ 仿真器验证设计的系统行为。一旦行为设计运行良好,对应的测试台的问题全部解决,就可以通过 vivado hls synthesis 运行设计,生成 rtl 设计,代码可以是 verilog,也可以是 vhdl。有了 rtl 后,随即可以执行设计的 verilog 或 vhdl 仿真,或使用工具的c封装器技术创建 systemc 版本。然后可以进行system c架构级仿真,进一步根据之前创建的 c 测试平台,验证设计的架构行为和功能。设计固化后,就可以通过 vivado 设计套件的物理实现流程来运行设计,将设计编程到器件上,在硬件中运行和/或使用 ip 封装器将设计转为可重用的 ip。随后使用 ip 集成器将 ip 集成到设计中,或在系统生成器 (system generator) 中运行 ip。
本文转载自:
三星Galaxy S21配备5个摄像头和更快的充电技术
MagnaChip剥离应用处理器业务 缩业务范围
第四次科技发展的短板之处,能源储存技术
什么是LCOS硅基液晶数码成像技术
PWS4000系列电源的特点与应用优势
Vivado设计之HLS开发详细步骤
肖特基二极管参数及特点
STM8S的通用异步收发器UART的原理解析
变频器常用的控制方式综述
A706应用电路(高压升压驱动器,带有6通道恒电流调节器)
2019年Q3季度小度有屏音箱出货量蝉联全球第一
Buck型AC/AC交流变换器的设计
LN6210系列低压差电压稳压器概述、用途及特点
安富利帮助企业打造更加舒适便捷节能的智慧生活
你还在质疑比特币的故事吗
vivo NEX 3S 5G开启预热 采用隐藏式按键设计并支持44W闪充
药典包装容器密封性方法验证
防爆对讲机的基础知识
学习KNN算法的基本原理,并用Python实现该算法以及阐述其应用价值
工业网关应用分享:PLC远程监控与远程维护