芯片原厂必学课程 - 第六篇章 - FPGA 设计篇
06-04 量产项目中 ASIC 转 FPGA 的工作内容
新芯设计:专注,积累,探索,挑战
🌏 一、引言
对于量产项目中,FPGA 开发是单独划分成了一条支线的,由专门的 FPGA 工程师来维护,部分芯片原厂的 FPGA 工程师和数字 IC 设计工程师可能是同一个人,因此,熟悉量产项目中 ASIC 转 FPGA 的工作内容,对于成为一名高级数字 IC 设计工程师是必不可少的一个技能树分支
NOTES:本文来自《芯片原厂必学课程 - 第六篇章 - FPGA 设计篇》技术专栏
🌏 二、正文
✅ ASIC 的模拟部分、PLL 晶振部分、存储部分、DFT 部分、GPIO 部分、外围 PAD 部分等等都是无法直接在 FPGA 上实现的,需要进行同等功能的 ASIC 到 FPGA 的转换,才能够达到原型验证的目的,如下所示,这是 FPGA SRAM 的标准写法,直接替代了 ASIC 上的 MEMORY 单元
module aiip_sram #(
parameter ADDR_WIDTH = 32 ,
DATA_WIDTH = 1
)(
input wire sram_clk ,
input wire sram_cs ,
input wire sram_wen ,
input wire [ADDR_WIDTH-1:0] sram_addr ,
input wire [DATA_WIDTH-1:0] sram_wdata ,
`ifndef SRAM_READ_SYNC
output wire [DATA_WIDTH-1:0] sram_rdata
`else
output reg [DATA_WIDTH-1:0] sram_rdata
`endif
);
parameter UDLY = 1 ;
parameter DATA_DEPTH = 2**ADDR_WIDTH;
reg [DATA_WIDTH-1:0] mem [8192-1:0] /* synthesis ramstyle = "no_rw_check" */ ;
always @(posedge sram_clk) begin
if(sram_wen && sram_cs)
mem[sram_addr] <= #UDLY sram_wdata;
`ifdef SRAM_READ_SYNC
else if(!sram_wen && sram_cs)
sram_rdata <= #UDLY mem[sram_addr];
`endif
end
`ifndef SRAM_READ_SYNC
assign sram_rdata = mem[sram_addr];
`endif
endmodule
✅ ASIC 的电源域、时钟开关、时钟切换、复位顺序等流程都是较为复杂的,到了 FPGA 直接就是简单的全部上电、时钟直连、单一复位等等,重点不在于验证电源时钟复位,当然,可能想要验也验不了
✅ ASIC 在 FPGA 上实在无法实现的部分需要特殊处理,可以是绕过验证或者是基于 FPGA 的额外设计,例如 FPGA 的 MIG DDR 控制器可以暂时替代 ASIC 来直接满足 FPGA 验证需求
✅ 存在一些 FPGA 专用寄存器或者总线转换桥,可以提供给验证者较大的灵活性测试,而不需要考虑 PPA 相关的
✅ 由于时钟通路和部分电路逻辑发现了变化,FPGA 需要基于 ASIC 重新输出一版详细的时序约束,保证上板之后电路能够正常稳定地工作
✅ FPGA 需要基于特定的 FPGA 开发板来手动约束引脚,这取决于板子的引脚位置和数量,具有较大的灵活性,对于 ASIC 是直接通过版图和封装的方式,无法更改
✅ FPGA 可以添加相关的内部信号来直接 DEBUG,例如 ILA 或者 STP,具备良好的可观测性,对于 ASIC 只能通过物理 IO PAD 引脚和示波器,非常有限