用python生成眼图仿真的prbs文件

眼图仿真的几种case

多通道的眼图分析在不使用PDA方法仿真时,可以分4种case来分别仿真,这4种CASE基本能覆盖到通道的最恶劣情况

case1,A通道传输prbs码,其他通道接地或者电源或者者浮空(不考虑串扰)
case2,A通道传输prbs码,其他通道传输A通道相同的码型(偶模串扰)
case3,A通道传输prbs码,其他通道传输A通道相位相反的码型(奇模串扰)
case4,A通道传输prbs码,其他通道传输与A通道tap相同,seed不同的prbs码

PRBS码的生成方法

PRBS码可以用fibonacci LFSR 来生成,但是LFSR的输入不能是全0,所以生成的PRBS码元前,可以手动加入一段与tap长度相同的全0和全1的码元,用于验证通道的ISI性能。
py的实现代码 2<= taps <= 18,多项式不唯一,可以根据协议的spec要求更改。

import os
import random
current_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(current_dir)

taps = 8
ch_num = 4

polynomial = [
[],
[],
[0,1],
[0,2],
[0,3],
[1,4],
[0,5],
[0,6],
[1,2,3,7],
[3,8],
[2,9],
[1,10],
[0,3,5,11],
[0,2,3,12],
[0,2,4,13],
[0,14],
[1,2,4,15],
[2,16],
[6,17]
]

def prbs_gen(taps):
	output=[]
	seed_list = list(map(int,list(bin(random.randrange(1,2**taps)))[2:]))
	if len(seed_list)<taps+1:
		list1 = [0]*(taps-len(seed_list))
		seed_list = list1+seed_list
	for index in range(2**taps):
		xor=0
		for x in polynomial[taps]:
			xor = seed_list[x] ^ xor
			seed_list.append(xor)
			output.append(seed_list.pop(0))
		list_0=[0]*taps
		list_1 = [1]*taps
		output= list_0+list_1+output
	return output
###############################################################
if not os.path.exists("case1"):
	os.makedirs("case1")
case_dir = os.path.join(curren_dir,"case1")

output=prbs_gen(taps)
prbs_file = "prbs{}_all_0.txt".format(taps)
with open(os.path.join(case_dir,prbs_file ),"w") as file:
	for bit in output:
		file.write(f"0")
		
prbs_file = "prbs{}_all_1.txt".format(taps)
with open(os.path.join(case_dir,prbs_file ),"w") as file:
	for bit in output:
		file.write(f"1")

prbs_file = "prbs{}.txt".format(taps)
with open(os.path.join(case_dir,prbs_file ),"w") as file:
	for bit in output:
		file.write(f"{bit}")	
###############################################################
if not os.path.exists("case2"):
	os.makedirs("case2")
case_dir = os.path.join(curren_dir,"case2")	
with open(os.path.join(case_dir,prbs_file ),"w") as file:
	for bit in output:
		file.write(f"{bit}")	
###############################################################
if not os.path.exists("case3"):
	os.makedirs("case3")
case_dir = os.path.join(curren_dir,"case3")	
with open(os.path.join(case_dir,prbs_file ),"w") as file:
	for bit in output:
		file.write(f"{bit}")
			
prbs_file = "prbs{}_ODD.txt".format(taps)
with open(os.path.join(case_dir,prbs_file ),"w") as file:
	for bit in output:
		if bit == 0:
			bit = 1
		else:
			bit = 0
		file.write(f"{bit}")
###############################################################
if not os.path.exists("case4"):
	os.makedirs("case4")
case_dir = os.path.join(curren_dir,"case4")	
for index in range(ch_num):
	output=prbs_gen(taps)
	prbs_file = "prbs{}_{}.txt".format(taps,index )
	with open(os.path.join(case_dir,prbs_file ),"w") as file:
		for bit in output:
			file.write(f"{bit}")	
###############################################################		

prbs文件使用方法

以ADS为例,调用VtPRBS 器件,mode=Bit File, BitFile=文件路径

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值