XC7V2000T+TMS320C6678设计文件,包含原理图,PCB等文件,已验证,可直接生产。

最近在折腾高速数据采集项目时,基于Xilinx Virtex-7 XC7V2000T和TI TMS320C6678异构平台做了个狠货。实测这套组合拳能跑出1200MB/s的跨板数据传输,板级验证已通过热成像拷机测试,直接拿生产文件去贴片就行。

硬件设计上最刺激的是DDR3走线。XC7V2000T挂了两组64位DDR3-1600,TMS320C6678自己又带两组32位DDR3。为了满足时序,用Altium Designer的Tuning功能手动蛇形绕线时差点把眼瞅瞎。比如这段地址线匹配代码:

set_property MIN_DELAY 120ps [get_nets {DDR3_A[0]}]
set_property MAX_DELAY 130ps [get_nets {DDR3_A[0]}]
add_cmd "route_design -phys_opt"

这段约束脚本专门对付那些倔强的Fly-by拓扑分支,实测能把信号抖动控制在±15ps以内。不过注意V7的Bank电压配置,有次手滑设成1.35V直接让DDR3原地摆烂。

DSP和FPGA的千兆互联是性能关键。用Aurora 8B/10B协议搞了个私有通道,Verilog代码里这个状态机特别有意思:

always @(posedge clk_156m) begin
    case(state)
        IDLE: if(dsp_rdy) begin
            tx_data <= {8'hAA, sensor_data[127:8]};
            state <= SEND_HEADER;
        end
        SEND_HEADER: if(tx_done) begin
            crc_acc <= calc_crc(tx_data);
            state <= WAIT_ACK;
        end
        //...其他状态省略
    endcase
end

这里故意留了个坑——CRC校验在第三个时钟周期才开始计算,结果导致首包数据被DSP拒收。后来在C6678端补了个软件重传机制才搞定,所以说硬件逻辑得和DSP固件打配合战。

生产环节最怕的是BGA焊接。分享个血泪教训:PCB的散热过孔千万别省。有次为了压缩成本减掉了20%的过孔,结果贴片时XC7V2000T像煎饼一样拱起,报废了五块板子。现在的设计文件里做了8x8阵列的0.3mm微孔,配合底部散热片能稳过72小时老化测试。

实测性能时用了个骚操作——让DSP的EDMA和FPGA的AXI DMA玩接力赛。C代码里这段EDMA配置直接榨干了6678的传输带宽:

EDMA3_paramConfig(chan, &edmaParamCfg, 
    (uint32_t)srcAddr,  //FPGA内存地址
    (uint32_t)dstAddr,  //DSP L2地址
    FRAME_COUNT,        //每帧4096字节
    BURST_SIZE_256BYTE, //突发长度
    LINK_TO_NEXT_PARAM); 

配合FPGA端的AXI Stream FIFO深度调优,成功实现了零气泡传输。不过要注意EDMA的传输完成中断会偶发丢失,后来在FPGA侧加了硬件心跳包才彻底根治。

整套设计文件(原理图+PCB+约束文件)已打包成Altium Designer 21工程,生产用Gerber文件单独放在Output文件夹里。贴片厂反馈说丝印层的元件极性标识特别清晰,省了他们一半的工程确认时间。有兄弟拿去打样时记得把1.0mm板厚改成1.2mm,否则12层板的阻抗控制会飘。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐