
一、AXIS接口1.流接口不允许带反馈2.数据样本顺序传输3.axis可以输入寄存输出基础输入和输出都寄存全部都不寄存四种类型4.没有寄存的axis在多axi4-stream register slice5.带旁路信息的axi4-stream接口6.不带旁路信息的axis4-stream接口二、axilite接口1.多个顶层port可以单独综合为一个axilite接口也可也bundle为一个axilite接口2.不能同时使用axilite和bram约束对数组进行约束这个是矛盾的bram约束会被综合工具忽略3.axilite ap_memory两种约束是可以同时作用于数组的4.axilite ap_memory约束数组数组不再是接口了而是实实在在的ram缓冲器件5.axilite ap_stable约束指令是不能共生的会被综合工具忽略6.MCU或者CPU调用axilite接口的时候浮点类型要注意因为FPGA的信号都是unsigned类型来处理的float a3.0f,r1;u32 ua,ur1;//写float类型到FPGA// cast float “a” to type U32XCaculate_SetA(calculate,*((u32*)a));//读float类型到ARMur1XCaculate_GetR1(caculate);// cast return type U32 to float type for “r1”r1*((float*)ur1);7.关于float浮点运算在vivado hls底层都是调用DSP来实现的使用Xilinx Floating-Point IP 核实现其具体功能是 将有符号 32 位整数转换为单精度浮点数。接口都被综合为32bit的unsigned类型需要用户传递的时候将float和u32之间做变换不能直接传。三、MCU控制hls ip模块1.要启动块操作ap_start 寄存器必须设置为 12.生成的ip模块分为单次执行和多次执行3.ip的单次执行就是函数的一次性执行流流ip的多次执行就是函数的多次执行流程4.单次执行流程完成后ap_start拉低后续模块就不再工作了可以利用中断doneap_start复位来控制模块的开启和关闭四、axi4-m接口1.可以单次访问的方式进行数据传输-一个数据进行一次访问地址2.可以突发的模式进行数据的传输-》一次突发访问一次地址3.使用循环pipeline的方式或者memcpy的方式来实现burst突发传输4.突发传输需要具备一定的规则for循环的流水线要使用pipeline优化需要地址是升序的不能是降序不能将数据的访问置于条件语句内。案例不能将数据的访问置于条件语句内int sum 0;for (int i 0; i N; i) {if (valid[i]) {sum A[i]; // 访问被条件包裹}}这个是错误的burst传输设计对于A[]的访问这个代码做不了burst突发访问因为这个A[]的访问是有条件的所以没有办法做到burst突发传输五、axi-m突发访问的配置1.latency选项--这个比较复杂和难以理解很少用2.max_read_burst_length指定突发传输期间读取的数据值的最大数量3.num_read_outstanding指定在设计停滞前可对 AXI4 总线发出的读取请求的数量无响应