拓冰建站拓冰建站
首页 / 资讯中心 / 正文

HLS高层次综合设计技巧--移位寄存器的使用

一、static修饰的win_buffervoid fuction(){static ap_uint24 win_buff[10];//c/rtl协同仿真异常#pragma HLS ARRAY_PARTITION variablewin_buff complete dim0for(ap_uint16 i0; iheight; i) {for(ap_uint16 j0; j(cols1); j) {#pragma HLS pipeline II1srctemp src.read();// 代码 if(j0){for(ap_uint4 k 0; k 10; k) {#pragma HLS UNROLLwin_buff[k] srctemp;win_buff[k 1] srctemp;win_buff[k 2] srctemp;win_buff[k 3] srctemp;win_buff[k 4] srctemp;}}else{for(ap_uint4 k 0; k 10; k) {#pragma HLS UNROLLwin_buff[k] win_buff[k 1];win_buff[k 1] win_buff[k 2];win_buff[k 2] win_buff[k 3];win_buff[k 3] win_buff[k 4];win_buff[k 4] srctemp;}}// 编程}}}注意1.上述代码static ap_uint24 win_buff[10];这个代码c/rtl协同仿真异常异常的原因是使用了static修饰了win_buffer;2.static修饰的win buffer,这个win_buffer就被综合为shift_register移位寄存器3.但是win_buff[k] srctemp;win_buff[k 1] srctemp;win_buff[k 2] srctemp;win_buff[k 3] srctemp;win_buff[k 4] srctemp;这个结构直接赋值将剖坏了移位寄存器结构所以最后c/rtl仿真失败。如何解决这个问题将static ap_uint24 win_buff[10];修改为ap_uint24 win_buff[10];也就是取消static的修饰那么就不认为winbuffer是移位寄存器了那么上述代码就可以用了二、取消static修饰win_buffervoid fuction(){ap_uint24 win_buff[10];//取消static之后c/rtl协同仿真正确#pragma HLS ARRAY_PARTITION variablewin_buff complete dim0for(ap_uint16 i0; iheight; i) {for(ap_uint16 j0; j(cols1); j) {#pragma HLS pipeline II1srctemp src.read();// 代码 if(j0){for(ap_uint4 k 0; k 10; k) {#pragma HLS UNROLLwin_buff[k] srctemp;win_buff[k 1] srctemp;win_buff[k 2] srctemp;win_buff[k 3] srctemp;win_buff[k 4] srctemp;}}else{for(ap_uint4 k 0; k 10; k) {#pragma HLS UNROLLwin_buff[k] win_buff[k 1];win_buff[k 1] win_buff[k 2];win_buff[k 2] win_buff[k 3];win_buff[k 3] win_buff[k 4];win_buff[k 4] srctemp;}}// 编程}}}
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门