×

AXU2CGB Zynq UltraScale板上的GNU Radio工具包 第1部分

消耗积分:2 | 格式:zip | 大小:0.00 MB | 2023-06-14

分享资料个

描述

这是如何为 Alinx 制造的AXU2CGA /B Zynq UltraScale+ FPGA 开发板创建硬件加速器平台的分步教程,该平台 可用于在 Xilinx Vitis 工具集下运行具有加速功能的 GNU Radio 应用程序。

添加 EA4GPZ 开发的gr-satellites并构建您自己的 OOT 模块也包含在这套教程中。

创建 Vitis 平台有几个主要步骤:

先决条件

您应该已经从 AMD-Xilinx 安装了以下软件工具:

  • 葡萄 2021.2
  • 维瓦多 2021.2
  • Petalinux 2021.2

这是第 1/4 部分:创建 Vivado 硬件设计

我们应该首先准备文件夹层次结构。为此,请执行以下命令:

mkdir axu2cgb
cd axu2cgb
mkdir hardware
mkdir software
mkdir platform

cd hardware

创建 Vivado 硬件设计

1- 运行 Vivado 并在硬件文件夹中创建一个名为“axu2cgb_2021_2-vivado”的项目。

pYYBAGNYgzuAILzjAAAp2jE7wH4912.png
 

2- 在项目类型页面上,选择 RTL 项目并选择以下选项:

  • 此时不要指定来源
  • 项目是一个可扩展的 Vitis 平台
poYBAGNYgz2AFfyQAAAjYy3xos4886.png
 

3- 在零件选项卡中选择名为xczu2cg-sfvc784-1-e的正确零件,然后单击下一步并完成。

poYBAGNYgz-AHv3rAAAzxG374mw238.png
 

4- 创建模块设计并添加Zynq UltraScale+ MPSoc IP。

pYYBAGNYg0GAIGmXAABdNyuONoA976.png
 

5- 现在我们需要为定制的 AXU2CGB 板仔细重新配置 Zynq Ultrascale+ 模块。

您将需要开发板用户手册,可从制造商网页下载:

http://www.alinx.vip:81/ug_en/AXU2CG_User_Manual.pdf

下载并打开它。我们需要根据 AXU2CGB 板的用户手册提供的数据来设置 Zynq 模块中的几乎所有设置。

注意:您可以跳过下面的整个第 6 节,只需执行第 7 节中的 TCL 命令即可一次性完成 Zynq 模块配置。

6- 双击电路板设计中的 Zynq 模块并浏览所有可用设置。

6-1- QSPI 配置

  • 启用 QSPI 并在低速部分设置以下内容:
poYBAGNYg0OAHjTRAABU5wEBXVs418.png
 

6-2- eMMC 配置

  • 启用 SD 0 并选择:MIO13..22
  • 插槽类型:eMMC
  • 数据传输模式:8Bit
  • 启用复位,然后选择 MIO23。
pYYBAGNYg0WAcOXPAABYLfwp8As644.png
 

6-3- SD卡配置

  • 启用 SD 1
  • 选择 MIO 46..51
  • 插槽类型:SD 2.0
  • 数据传输模式:4Bit
  • 启用 CD 以检测 SD 卡插入并选择 MIO45
poYBAGNYg0iAcO9WAABnHPEwp6Q019.png
 

6-4- EEPROM 的 I2C 配置

  • 启用 I2C 1
  • 选择 MIO 32..33
pYYBAGNYg0qAJt5uAAA74QVDEfM664.png
 

6-5- UART 配置

  • 使能串口 UART 1
  • 选择 MIO 24..25
poYBAGNYg0yANpyLAAB7MeybSqY337.png
 

6-6- 启用 TTC0 - TTC3

poYBAGNYg06AHtQBAABRcWOCUlI074.png
 

6-7- 千兆以太网配置

  • 启用 GEM3 和 MDIO3
  • 选择 MIO 64..75 GEM3
  • 为 MDIO3 选择 MIO 76..77
pYYBAGNYg1CABy_dAAD6lGePu-I058.png
 

6-8- USB 端口配置

  • 启用 USB 0
  • 选择 MIO 52..63
  • 启用 USB 3.0 并选择 GT Lane1
poYBAGNYg1OANhIhAAEb7nzmZP8900.png
 
  • 如下配置 USB 复位:
pYYBAGNYg1WABeFHAABOSIUgTB0810.png
 

6-9- 配置 PCIe 和 Display Port

poYBAGNYg1iAAAhmAABMm458VyE399.png
 

6-10- 附加 PCIe 配置

  • 在页面导航器中启用切换到高级模式(左上角)
  • 选择PCIe 配置选项卡。设置以下内容:
pYYBAGNYg1qANykIAABh20KiQ0U650.png
 

6-11- 时钟配置

选择时钟配置选项卡和输入时钟选项卡。设置以下内容:

  • 输入参考频率 > PSS_REF_CLOCK:33.333MHz;
  • PCIe:参考 Clk0,100MHz
  • 显示端口:Ref Clk2,27MHz;
  • USB0:参考时钟 1,26MHz。
poYBAGNYg1yAZjj1AABCKfkAayY179.png
 

6-12 在输出时钟选项卡中

  • 如果未选择 IOPLL,则将其更改为 IOPLL。因此,它与同一个 PLL 对应。
pYYBAGNYg16AY9rkAAB0Q59gEhc438.png
 

6-13-输出时钟继续

  • DP_VIDEO:更改为 VPLL
  • DP_AUDIO 和 DP_STC:更改为 RPLL。
  • 其余的保持默认
pYYBAGNYg2GAAjgNAABvp59Wqt4801.png
 

6-14- DDR 配置

  • 加载 DDR 预设:选择DDR4_MICRON_MT40A256M16GE_083E
  • 其他选项保持默认。
poYBAGNYg2OAeNCgAABvR0TH03A460.png
 

6-15- 单击确定,然后配置完成

7- 如果您需要一次重复整个 Zynq UltraScale+ 模块配置,这里有一个 TCL 命令。该命令可以在 TCL 控制台中执行。

set_property -dict [list CONFIG.PSU__DPAUX__PERIPHERAL__IO {MIO 27 .. 30} CONFIG.PSU__GEM__TSU__ENABLE {0} CONFIG.PSU__ENET0__PERIPHERAL__ENABLE {0} CONFIG.PSU__ENET1__PERIPHERAL__ENABLE {0} CONFIG.PSU__ENET2__PERIPHERAL__ENABLE {0} CONFIG.PSU__ENET3__PERIPHERAL__ENABLE {1} CONFIG.PSU__ENET3__GRP_MDIO__ENABLE {1} CONFIG.PSU__I2C1__PERIPHERAL__ENABLE {1} CONFIG.PSU__I2C1__PERIPHERAL__IO {MIO 32 .. 33} CONFIG.PSU__PCIE__PERIPHERAL__ENABLE {1} CONFIG.PSU__PCIE__PERIPHERAL__ENDPOINT_IO {MIO 37} CONFIG.PSU__PCIE__PERIPHERAL__ROOTPORT_IO {MIO 37} CONFIG.PSU__USB0__REF_CLK_SEL {Ref Clk1} CONFIG.PSU__PCIE__DEVICE_PORT_TYPE {Root Port} CONFIG.PSU__PCIE__CLASS_CODE_SUB {0x04} CONFIG.SUBPRESET1 {DDR4_MICRON_MT40A256M16GE_083E} CONFIG.PSU__QSPI__PERIPHERAL__ENABLE {1} CONFIG.PSU__QSPI__PERIPHERAL__DATA_MODE {x4} CONFIG.PSU__QSPI__GRP_FBCLK__ENABLE {1} CONFIG.PSU__SD0__PERIPHERAL__ENABLE {1} CONFIG.PSU__SD0__SLOT_TYPE {eMMC} CONFIG.PSU__SD0__RESET__ENABLE {1} CONFIG.PSU__SD1__PERIPHERAL__ENABLE {1} CONFIG.PSU__SD1__PERIPHERAL__IO {MIO 46 .. 51} CONFIG.PSU__SD1__GRP_CD__ENABLE {1} CONFIG.PSU__SD1__SLOT_TYPE {SD 2.0} CONFIG.PSU__TTC0__PERIPHERAL__ENABLE {1} CONFIG.PSU__TTC1__PERIPHERAL__ENABLE {1} CONFIG.PSU__TTC2__PERIPHERAL__ENABLE {1} CONFIG.PSU__TTC3__PERIPHERAL__ENABLE {1} CONFIG.PSU__UART1__PERIPHERAL__ENABLE {1} CONFIG.PSU__UART1__PERIPHERAL__IO {MIO 24 .. 25} CONFIG.PSU__USB0__PERIPHERAL__ENABLE {1} CONFIG.PSU__USB0__RESET__ENABLE {1} CONFIG.PSU__USB0__RESET__IO {MIO 44} CONFIG.PSU__USB__RESET__MODE {Shared MIO Pin} CONFIG.PSU__USB3_0__PERIPHERAL__ENABLE {1} CONFIG.PSU__USB3_0__PERIPHERAL__IO {GT Lane1} CONFIG.PSU_BANK_0_IO_STANDARD {LVCMOS18} CONFIG.PSU_BANK_1_IO_STANDARD {LVCMOS18} CONFIG.PSU_BANK_2_IO_STANDARD {LVCMOS18} CONFIG.PSU__DISPLAYPORT__PERIPHERAL__ENABLE {1} CONFIG.PSU__CRF_APB__DP_VIDEO_REF_CTRL__SRCSEL {VPLL} CONFIG.PSU__CRF_APB__DP_AUDIO_REF_CTRL__SRCSEL {RPLL} CONFIG.PSU__CRF_APB__DP_STC_REF_CTRL__SRCSEL {RPLL} CONFIG.PSU__CRF_APB__TOPSW_MAIN_CTRL__SRCSEL {APLL} CONFIG.PSU__CRL_APB__SDIO0_REF_CTRL__SRCSEL {IOPLL} CONFIG.PSU__CRL_APB__SDIO1_REF_CTRL__SRCSEL {IOPLL}] [get_bd_cells zynq_ultra_ps_e_0]

8- 将Clocking Wizard添加到模块设计中并双击clk_wiz_0 IP 模块以打开 Re-Customize IP 对话框

单击输出时钟选项卡。在输出时钟列中启用 clk_out1 到 clk_out3。如下设置请求的输出频率

  • clk_out1100 MHz
  • clk_out2200 MHz
  • clk_out3400 MHz

在对话框的底部,将重置类型设置低电平有效。

pYYBAGNYg2aALDFGAACCxZyPrf0910.png
 
# Equivalent TCL command for adding the Clocking Wizard

create_bd_cell -type ip -vlnv xilinx.com:ip:clk_wiz:6.0 clk_wiz_0

set_property -dict [list CONFIG.CLKOUT2_USED {true} CONFIG.CLKOUT3_USED {true} CONFIG.CLKOUT2_REQUESTED_OUT_FREQ {200.000} CONFIG.CLKOUT3_REQUESTED_OUT_FREQ {400.000} CONFIG.RESET_TYPE {ACTIVE_LOW} CONFIG.MMCM_CLKOUT1_DIVIDE {6} CONFIG.MMCM_CLKOUT2_DIVIDE {3} CONFIG.NUM_OUT_CLKS {3} CONFIG.RESET_PORT {resetn} CONFIG.CLKOUT2_JITTER {102.086} CONFIG.CLKOUT2_PHASE_ERROR {87.180} CONFIG.CLKOUT3_JITTER {90.074} CONFIG.CLKOUT3_PHASE_ERROR {87.180}] [get_bd_cells clk_wiz_0]

9- 在设计中添加三个处理器系统复位IP 并将 IP 连接在一起,如下图所示

poYBAGNYg2iAIR_5AAEicwq-mXI073.png
 
# Adding 3 Processor System Reset IPs
create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 proc_sys_reset_0
create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 proc_sys_reset_1
create_bd_cell -type ip -vlnv xilinx.com:ip:proc_sys_reset:5.0 proc_sys_reset_2

connect_bd_net [get_bd_pins zynq_ultra_ps_e_0/pl_clk0] [get_bd_pins clk_wiz_0/clk_in1]

connect_bd_net [get_bd_pins zynq_ultra_ps_e_0/pl_resetn0] [get_bd_pins clk_wiz_0/resetn]
connect_bd_net [get_bd_pins zynq_ultra_ps_e_0/pl_resetn0] [get_bd_pins proc_sys_reset_1/ext_reset_in]
connect_bd_net [get_bd_pins zynq_ultra_ps_e_0/pl_resetn0] [get_bd_pins proc_sys_reset_0/ext_reset_in]
connect_bd_net [get_bd_pins zynq_ultra_ps_e_0/pl_resetn0] [get_bd_pins proc_sys_reset_2/ext_reset_in]

connect_bd_net [get_bd_pins clk_wiz_0/clk_out1] [get_bd_pins proc_sys_reset_0/slowest_sync_clk]
connect_bd_net [get_bd_pins clk_wiz_0/clk_out2] [get_bd_pins proc_sys_reset_1/slowest_sync_clk]
connect_bd_net [get_bd_pins clk_wiz_0/clk_out3] [get_bd_pins proc_sys_reset_2/slowest_sync_clk]

connect_bd_net [get_bd_pins clk_wiz_0/locked] [get_bd_pins proc_sys_reset_1/dcm_locked]
connect_bd_net [get_bd_pins clk_wiz_0/locked] [get_bd_pins proc_sys_reset_0/dcm_locked]
connect_bd_net [get_bd_pins clk_wiz_0/locked] [get_bd_pins proc_sys_reset_2/dcm_locked]

regenerate_bd_layout

10-平台设置

为平台启用所有三个时钟。使用菜单窗口 -> 平台设置。将时钟 2 设置为默认值。

poYBAGNYg2qAJYAjAACm07nH3NY420.png
 

11-添加中断支持。

再次双击Zynq UltraScale+ MPSoC模块

  • 选择PS-PL 配置 > PS-PL 接口 > 主接口
  • 启用AXI HPM0 LPD选项
  • 禁用AXI HPM0 FPDAXI HPM1 FPD
  • 启用常规 > 中断 > PL 到 PS > IRQ0[0-7]中断
pYYBAGNYg22AEBzBAABKpIvpkgw485.png
 

添加AXI 中断控制器 IP并将其配置为中断输出连接。点击确定

pYYBAGNYg2-AVt9VAAAwHiMosKM146.png
 

然后单击“运行连接自动化”链接。

选择 clk_out2 (200 MHz) 作为主从接口的源,然后按 OK。

poYBAGNYg3GAbwQUAAA6E9EgGOA952.png
 

irq输出引脚连接到 Zynq 中断输入。

pYYBAGNYg3SAE_WvAAFlw6Ykd4Q882.png
 

12- 在平台设置选项卡中为平台启用 AXI 接口

  • 启用zynq_ultra_ps_e_0下的前八个接口并为其设置SP Tag
pYYBAGNYg3aAbTcyAADb_zXUeJM603.png
 
  • 在 ps8_0_axi_periph 下启用M01_AXI 到M07_IXA接口
poYBAGNYg3mALptOAAEDX-jLAvw440.png
 

等效的 TCL 命令:

# Enable AXI Interfaces in Platform Setup
set_property PFM.AXI_PORT {M_AXI_HPM0_FPD {memport "M_AXI_GP" sptag "" memory "" is_range "false"} M_AXI_HPM1_FPD {memport "M_AXI_GP" sptag "" memory "" is_range "false"} S_AXI_HPC0_FPD {memport "S_AXI_HPC" sptag "HPC0" memory "" is_range "false"} S_AXI_HPC1_FPD {memport "S_AXI_HPC" sptag "HPC1" memory "" is_range "false"} S_AXI_HP0_FPD {memport "S_AXI_HP" sptag "HP0" memory "" is_range "false"} S_AXI_HP1_FPD {memport "S_AXI_HP" sptag "HP1" memory "" is_range "false"} S_AXI_HP2_FPD {memport "S_AXI_HP" sptag "HP2" memory "" is_range "false"} S_AXI_HP3_FPD {memport "S_AXI_HP" sptag "HP3" memory "" is_range "false"}} [get_bd_cells /zynq_ultra_ps_e_0]

set_property PFM.AXI_PORT {M01_AXI {memport "M_AXI_GP" sptag "" memory "" is_range "false"} M02_AXI {memport "M_AXI_GP" sptag "" memory "" is_range "false"} M03_AXI {memport "M_AXI_GP" sptag "" memory "" is_range "false"} M04_AXI {memport "M_AXI_GP" sptag "" memory "" is_range "false"} M05_AXI {memport "M_AXI_GP" sptag "" memory "" is_range "false"} M06_AXI {memport "M_AXI_GP" sptag "" memory "" is_range "false"} M07_AXI {memport "M_AXI_GP" sptag "" memory "" is_range "false"}} [get_bd_cells /ps8_0_axi_periph]

13-在中断选项卡中,启用intr

pYYBAGNYg3uAFvV3AABgED3EU64393.png
 

14-更新平台名称

poYBAGNYg32AGEmaAABwepanSwI493.png
 

15-出口硬件-XSA

  • 验证块设计 - 按F6 (忽略 axi_intc_0/intr 警告)
  • 创建 HDL Wrapper (在Source选项卡中,右键单击 Design Sources 组中的 design_1.bd 文件)
  • Generate Block Design并选择Synthesis Options to Global。然后单击生成
  • 生成比特流- 单击Flow Navigator窗口中的按钮。
  • 导出平台- 单击Flow Navigator窗口中的按钮。选择Hardware ,然后Pre-synthesis并启用Include bitstream。
poYBAGNYg3-AcvCYAAAghCUeXag015.png
 
pYYBAGNYg4GAOZa7AAAyDESUmOk277.png
 
poYBAGNYg4OALaR7AAAua-WPMP0645.png
 
pYYBAGNYg4aAInUVAAApFsHg2r0719.png
 

这是创建平台的第一个 Vivado 部分的结束。您现在可以关闭 Vivado 程序。

要继续,请转到项目的第二个 - PetaLinux 部分:

转到第 2 部分 - PetaLinux

快速通道

如果您被困在某个地方,可以附加一个 TCL 脚本来创建上述整个项目。

使用 source 命令在 Tcl 控制台窗口中启动 Vivado 后立即运行脚本。

source create_axu2cgb_hw_acc_platform.tcl
pYYBAGNYg4iAK4t_AAA7EOyODc0341.png
 

当 TCL 脚本完成时:

  • 验证设计- 按 F6
  • 创建 HDL 包装器
  • Generate Block Design并选择Synthesis Options to Global。
  • 生成比特流
  • Export the Platform 并选择Hardware , Pre-synthesis并启用Include bitstream。

下一步

转到第 2 部分 - 软件 - PetaLinux 和 GNU Radio


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.lene-v.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'AXU2CGB Zynq UltraScale板上的GNU Radio工具包 第1部分',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.lene-v.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);