ADS中使用Momentum进行电源完整性分析示例

这个应用可以帮助工程师用更快的时间使用ADS Momentum完成PDN分析。该应用描述了利用ADS Momentum RF模拟器进行PDN分析的方法,大大缩短了计算时间。

该分析主要应用与高速数字设计。

在此应用中使用了以下ADS特性:

  1. ADS设计流程集成(ADFI)。
  2. 电磁协同仿真。
  3. Momentum仿真。

仿真流程如下:

  1. 在Allegro中创建ADFI文件

要将Allegro文件导出到ADS,首先需要在Allegro中创建一个ADFI文件。步骤如下:

  1. 在Allegro中创建setup;

选择Export To ADS/EMPro>setup,之后弹出set up for EEsof Export设置框,在Export Setting中选择默认设置Sample Fine Setting A:use strip and vias,点击OK完成设置:

  1. 选择基于网络的几何图形进行导出并放置EM电磁端口;

完成上述setup设置之后需要选择网络、器件或管脚,建立一个切割器、创建一个端口。步骤如下:

在Allegro中点击Export To ADS/EMPro>select traces,之后弹出select geometry and place ports对话框。1).在Trace select界面,可通过网络名称搜索、直接在Allegro中点击、过滤器过滤等几种方式选择信号或电源网络。2).在Layer select界面,设置层叠,保持默认即可。3).在Cookie cutter界面,点击Build for Signal Nets自动实现网络区域切割。4).在Component/pin select界面,选择所有相关的器件和管脚。5).在Ports界面,点击autoplace完成端口自动创建。至此,设置完成,点击OK。

  1. 导出ADFI文件。

在建立了设计和选择网之后,最后一步是保存所选的设计信息以供导入。Allegro DFI导出设置和选择是专门为从ADS/EMPro建立和运行EM仿真收集相关信息而量身定做的。如果必要,你应该小心在Allegro DFI选择数据和调整出口。这可以在ADS/EMPro中执行EM模拟时节省大量时间。

点击Export to ADS/EMPro>Export>Selected to ADS,创建用于导入ADS的ADFI文件。

  1. 在ADS中导入ADFI文件。

注意提前必须先在ADS中创建一个workspace并打开,此次才能使用File>import>design进行导入。

选择文件格式为ADFI File Format,并浏览指定要导入的文件。

点击options,选择网络名<net name>和管脚名<pin name>,同时勾选generate schematic for all remaining components。点击ok完成设置。

点击OK完成导入后自动打开Layout内容。

  1. 建立Momentum仿真。

使用EM设置窗口,定义各种模拟器选项,如基板、端口和频率。步骤如下:

  1. 定义基板

在Layout界面,点击EM>Substrate,在弹出的界面,指定高亮的传导层操作为sheet。

  1. 选择Momentum RF模拟器

选择EM>simulation setting进行仿真设置。

在弹出的对话框(如下图),所示点击Mom RF Cosim如下图所示:

设置类型为EM Cosimulation,EM Simulator为Momentum RF。

  1. 设置频率

选择Frequency Plan,添加频率设置如下。

  1. 指定物理模型设置

为了获得更快的EM仿真结果,请指定以下物理模型设置:

点击Options>physical model,选择Via为wire。

  1. 指定预处理设置

在用户定义的snap距离中输入0.015 mm,以指定最大布线宽度的20%。在弧度分辨率度数arc revolution中输入60。

  1. 创建端口

点击Port右侧的open Layout Port Editor,打开port editor编辑器。移动所有的GND管脚到各自器件对应VDD管脚的下面,作为其负端,如下图所示。同时确保Feed Type下所有端口选择为Direct。

点击Refresh进行刷新,再打开EM>simulation setting中的port再次刷新。

  1. 创建EM协同仿真视图

在完成EM设置之后,产生一个EM协同仿真视图。确保EM Cosimulation被选中,之后点击右下角Go,完成之后会弹出提示框。

  1. 创建用于PDN分析的原理图

若要创建用于PDN分析的设置,请执行以下操作:

  1. 在ADS主窗口创建新的原理图;
  2. 在新的原理图中放置一个PCB原理图的symbol

  1. 将该symbol和其他器件连接
  2. 在原理图左侧搜索Term并放置,用于添加50欧的端接电阻。
  3. 根据VCC的数目添加14个Term。
  4. 确保symbol符号中相同的引脚号连接到各自相应的终端。
  5. 在原理图中添加S-Param器件。双击并设置Sweep Type右侧下拉选中Log,设开始品10KHz,结束频率1GHz,步进间隔100。在Parameters界面选择Z-parmeaters。点击OK完成设置。

 

在原理图中点击工具栏快捷键choose view for simulation,再点击原理图中的器件,弹出对话框选择使用emCosim仿真视图。点击OK。之后点击simulate进行仿真,之后自动返回电源完整性原理图。

  1. 显示仿真结果

在执行晚EM协同仿真之后,可以在数据显示窗口查看仿真分析结果。点击左侧rectangular plot图标,弹出要绘制的视图设置对话框,。双击 Z(1,1)选择Mangnitude。在Plot options界面选择X Aixs,Scale选择Log。单击OK完成图形绘制。

 

 

 

 

  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FGSM是一种常见的生成对抗性样本攻击方法,它可以在不改变原始图像的情况下,通过添加一些扰动来欺骗训练好的分类器。在PyCharm使用FGSM生成对抗性示例,可以按照以下步骤进行: 1. 导入必要的Python库和模块: ``` import torch import torchvision import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms ``` 2. 定义一个用于训练分类器的函数: ``` def train(model, device, train_loader, optimizer, criterion, epoch): model.train() for batch_idx, (data, target) in enumerate(train_loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() if batch_idx % 10 == 0: print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format( epoch, batch_idx * len(data), len(train_loader.dataset), 100. * batch_idx / len(train_loader), loss.item())) ``` 3. 定义一个用于测试分类器的函数: ``` def test(model, device, test_loader, criterion): model.eval() test_loss = 0 correct = 0 with torch.no_grad(): for data, target in test_loader: data, target = data.to(device), target.to(device) output = model(data) test_loss += criterion(output, target).item() pred = output.argmax(dim=1, keepdim=True) correct += pred.eq(target.view_as(pred)).sum().item() test_loss /= len(test_loader.dataset) print('Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format( test_loss, correct, len(test_loader.dataset), 100. * correct / len(test_loader.dataset))) ``` 4. 定义一个用于生成对抗性示例的函数: ``` def fgsm_attack(image, epsilon, data_grad): sign_data_grad = data_grad.sign() perturbed_image = image + epsilon * sign_data_grad perturbed_image = torch.clamp(perturbed_image, 0, 1) return perturbed_image ``` 5. 定义一个用于运行模型的函数: ``` def run_model(): device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print("Using device:", device) transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) train_dataset = datasets.MNIST('./data', train=True, download=True, transform=transform) test_dataset = datasets.MNIST('./data', train=False, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True) test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=1000, shuffle=True) model = nn.Sequential( nn.Conv2d(1, 20, 5, 1), nn.ReLU(), nn.MaxPool2d(2, 2), nn.Conv2d(20, 50, 5, 1), nn.ReLU(), nn.MaxPool2d(2, 2), nn.Flatten(), nn.Linear(4 * 4 * 50, 500), nn.ReLU(), nn.Linear(500, 10), ).to(device) optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5) criterion = nn.CrossEntropyLoss() for epoch in range(1, 11): train(model, device, train_loader, optimizer, criterion, epoch) test(model, device, test_loader, criterion) epsilon = 0.1 for data, target in test_loader: data, target = data.to(device), target.to(device) data.requires_grad = True output = model(data) loss = criterion(output, target) model.zero_grad() loss.backward() data_grad = data.grad.data perturbed_data = fgsm_attack(data, epsilon, data_grad) output = model(perturbed_data) print(output.argmax(dim=1, keepdim=True).flatten()) break ``` 6. 最后,运行上述函数: ``` run_model() ``` 这将会训练一个简单的卷积神经网络模型来分类手写数字,并使用FGSM方法生成对抗性示例。可以通过调整epsilon的值来改变扰动的大小,以及通过在test_loader迭代来生成多个示例

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值