ADS 眼图仿真加入eye mask的方法
1、tran 仿真,调用eye_probe 组件,勾选use eye mask,然后添加自己编辑的“xx.msk”文件,仿真结束后,可以从仿真数据中调用
2、DDR sim 仿真,调用eye_probe 组件,在DDR4 mask中填入mask的width和height,在measurement栏中,将DDR4MaskMargin 加入仿真,仿真结束后,可以从仿真数据中调用
3、调用memory probe,修改VIH_xx(AC),VIH_xx(DC)可以修改mask的高度,修改Tcivw可以修改mask的宽度
4、在DDS中,插入mask
如果想修改mask的值,1,2,3方法都需要再重新跑一次仿真。
第4种方法可以直接在仿真结果中反复修改。
ADS2024 update2 的DDS加入的python脚本的接口,方法4实现起来就非常轻松了。
脚本代码
脚本会自动找到所有的rect_plot 而且在添加mask前,会先删除原先的所有mask。
下面是添加方框mask的脚本,以LPDDR5 mask为例:

LP5 spec上要求DQ MASK:
tIVW1 =0.35 UI
tIVW2 =0.18 UI
vIVW =0.1V(bit_rate <=6.4Gbps)/0.08V(bit_rate >=7.5Gbps)
import pathlib
import keysight.ads.dds.experimental as dds
ds_file_path = pathlib.Path(__file__).parent.resolve()
dds_file_name = "xxx" #DDS file name
dds_file = dds.open_dds_file(dds_file_name )
bit_rate = 8.533e9
ui = 1/bit_rate
vIVW = 0.08 # mask height(V)
tIVW1 = 0.35 # mask width(ui)
tIVW2 = 0.18 # mask width(ui)
vref = 0.13 # mask ref_v(V)
offset1 = 0 # (ui)
# rec_mask
rec_x1 = ui - tIVW1/2 * ui + offset1 * ui
rec_x2 = ui + tIVW1/2 * ui + offset1 * ui
rec_y1 = vref + vIVW/2
rec_y2 = vref - vIVW/2
# polygon_mask 6 side
pol6_x1 = ui-tIVW1/2*ui + offset1 * ui
pol6_x2 = ui-tIVW2/2*ui + offset1 * ui
pol6_x3 = ui+tIVW2/2*ui + offset1 * ui
pol6_x4 = ui-tIVW1/2*ui + offset1 * ui
pol6_y1 = vref + vIVW/2
pol6_y2 = vref
pol6_y3 = vref - vIVW/2
pol6_mask_list = [
[pol6_x1, pol6_y2],
[pol6_x2, pol6_y1],
[pol6_x3, pol6_y1],
[pol6_x4, pol6_y2],
[pol6_x3, pol6_y3],
[pol6_x2, pol6_y3],
]
for page in dds_file.pages:
for obj in page.objects:
if dds.ObjectType.is_plot(obj):
if dds.ObjectType.is_rect_plot(obj):
for mask in obj.masks:
mask.delet_object()
if tIVW2:
obj.add_polygon_mask("mask1", pol6_mask_list)
else:
obj.add_rectangle_mask("mask1", rec_x1, rec_y1, rec_x2, rec_y2)

被折叠的 条评论
为什么被折叠?



