
在半导体制造和芯片测试中,晶圆映射图(Wafer Map) 是最直观的分析工具之一。它把一颗颗晶粒(Die)在圆形晶圆上的位置、测试结果(Pass/Fail)用色块可视化出来。工程师一眼就能看出“中间良率高,边缘良率低”,或者某个区域出现了系统性失效。
本文将带你用 C# + WPF,以极少量代码绘制出一张专业级的半导体晶圆良率分布图,核心逻辑仅需 30 行左右。
晶圆是圆形的,而晶粒是矩阵网格(Row/Column)排列的。判断一个晶粒是否“真实存在”于晶圆上,只需一个经典公式:
点到圆心距离 ≤ 半径 即
(x - cx)² + (y - cy)² ≤ R²
为了更贴近真实半导体晶圆,我们还会在底部添加一个平边(Flat Zone) 或凹口(Notch)(用于晶圆定位)。为了代码足够精简,我们只实现 “圆形 + 底部平边裁剪”,并随机生成良率数据模拟测试结果。
创建一个 WPF 项目,在 MainWindow.xaml 中放入一个画布和一个按钮:
<Window x:Class="WaferMap.MainWindow"
Title="半导体晶圆良率图" Height="600" Width="600">
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- 核心绘制区域 -->
<Border Grid.Row="0" BorderBrush="Gray" BorderThickness="1" Background="#1e1e1e">
<Canvas x:Name="WaferCanvas" Background="Transparent"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<!-- 生成按钮 -->
<Button Grid.Row="1" Content="🚀 随机生成晶圆良率图"
Margin="0,15,0,0" Padding="10" Click="GenerateWaferMap_Click"/>
</Grid>
</Window>在 MainWindow.xaml.cs 中,我们编写绘制函数。这里使用 Rectangle 作为晶粒单元,颜色编码:绿色=通过(Pass),红色=失效(Fail),深灰=空白区域。
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
namespace WaferMap
{
public partial class MainWindow : Window
{
public MainWindow() => InitializeComponent();
private void GenerateWaferMap_Click(object sender, RoutedEventArgs e)
{
WaferCanvas.Children.Clear(); // 清空画布
const int dieSize = 12; // 每个晶粒像素尺寸
const int waferDiameter = 400; // 晶圆直径(像素)
int radius = waferDiameter / 2; // 圆心 (200, 200)
var rand = new Random();
const double yieldRate = 0.82; // 假设综合良率82%
// 循环遍历网格 (行/列)
for (int row = 0; row < waferDiameter; row += dieSize)
{
for (int col = 0; col < waferDiameter; col += dieSize)
{
// 计算晶粒中心点坐标
double cx = col + dieSize / 2.0;
double cy = row + dieSize / 2.0;
// 条件1: 必须在晶圆圆形轮廓内
bool isInsideCircle = (Math.Pow(cx - radius, 2) + Math.Pow(cy - radius, 2)
<= Math.Pow(radius - dieSize/2, 2));
// 条件2: 模拟底部平边 (Flat Zone),y > 350 的区域裁剪掉(真实晶圆常见)
bool isFlatZone = cy > 350;
if (isInsideCircle && !isFlatZone)
{
// 生成良率结果 (0~100随机,低于82%标红)
bool isGood = rand.NextDouble() < yieldRate;
var rect = new Rectangle
{
Width = dieSize - 1, // -1 留出网格间隙
Height = dieSize - 1,
Fill = isGood ? Brushes.LimeGreen : Brushes.OrangeRed
};
// 定位到画布坐标
Canvas.SetLeft(rect, col);
Canvas.SetTop(rect, row);
WaferCanvas.Children.Add(rect);
}
}
}
// 额外绘制晶圆外圈轮廓(增加专业感)
var circle = new Ellipse
{
Width = waferDiameter - dieSize,
Height = waferDiameter - dieSize,
Stroke = Brushes.White,
StrokeThickness = 1.5
};
Canvas.SetLeft(circle, dieSize / 2.0);
Canvas.SetTop(circle, dieSize / 2.0);
WaferCanvas.Children.Add(circle);
Title = $"✅ 晶圆良率图生成完成 | 模拟良率: {yieldRate * 100}%";
}
}
}点击按钮后,你会看到:
如果你希望这段代码真正用于半导体数据分析,只需修改 3 处关键点:
rand.NextDouble() < yieldRate 替换为从 CSV/数据库读取的 List<DieResult>。bool isGood 替换为 int bin(如 Bin1~Bin10),用 switch 分配不同颜色(用于失效模式分类)。waferDiameter 设为动态属性,并添加 ScrollViewer 包裹画布,轻松适配 300mm 晶圆的高分辨率映射。如果想添加“凹口(Notch)”替代平边,只需将 bool isFlatZone = cy > 350 改成计算左下角特定角度的圆弧剔除逻辑(例如 Math.Atan2(cx - radius, cy - radius) > 某个角度),但平边已经能覆盖 80% 的实际晶圆形态。
晶圆图是半导体工程师的“仪表盘”。以往我们用 Excel 或专用 EDA 工具生成,流程冗长。而当你用 C# + WPF 写出上面这 30 行核心代码后,相当于自己打造了一个轻量级晶圆 Map 引擎。
这段代码虽然短,却完整包含了:
下一步:你可以尝试把 dieSize 调小到 6,把 waferDiameter 增加到 600。你会瞬间得到一个极其精细的“晶圆卫星图”——此时代码性能依然丝滑,因为 WPF 的硬件加速足以驾驭数千个矩形单元。
从这串极简代码出发,你离半导体大数据可视化的门槛,只差一个 using System.Windows.Shapes 的距离。快去跑起来,看看你的第一张“数字晶圆”长什么样吧!🚀
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。