Vivado-hls使用实例-详细教程

81 篇文章 44 订阅
订阅专栏

【引言】

本系列教程演示如何使用xilinx的HLS工具进行算法的硬件加速。

分为三个部分,分别为HLS端IP设计,vivado硬件环境搭建,SDK端软件控制
在HLS端,要将进行硬件加速的软件算法转换为RTL级电路,生成便于嵌入式使用的axi控制端口,进行数据的传输和模块的控制。

点击查看工程源码

【HLS介绍】

HLS可以将算法直接映射为RTL电路,实现了高层次综合。vivado-HLS可以实现直接使用 C,C++ 以及 System C 语言对Xilinx的FPGA器件进行编程。用户无需手动创建 RTL,通过高层次综合生成HDL级的IP核,从而加速IP创建。

HLS的官方参考文档主要为:ug871( ug871-vivado-high-level-synthesis-tutorial.pdf )和ug902(ug902-vivado-high-level-synthesis.pdf)。

对于Vivado Hls来说,输入包括Tesbench,C/C++源代码和Directives,相应的输出为IP Catalog,DSP和SysGen,特别的,一个工程只能有一个顶层函数用于综和,这个顶层函数下面的子函数也是可以被综合的,会生成相应的VHDL和Verilog代码,所以,C综合后的RTL代码结构通常是跟原始C描述的结构是一致的,除非是子函数功能很简单,所需要的逻辑量很小。并不是所有的C/C++都可以被综合,动态内存分配和涉及到操作系统层面的操作不可以被综合。

Vivado HLS 的设计流程如下:

在这里插入图片描述
在整个流程中,用户先创建一个设计 C、C++ 或 SystemC 源代码,以及一个C的测试平台。通过 Vivado HLS Synthesis 运行设计,生成 RTL 设计,代码可以是 Verilog,也可以是 VHDL。有了 RTL 后,随即可以执行设计的 Verilog 或 VHDL 仿真,或使用工具的C封装器技术创建 SystemC 版本。然后可以进行System C架构级仿真,进一步根据之前创建的 C 测试平台,验证设计的架构行为和功能。设计固化后,就可以通过 Vivado 设计套件的物理实现流程来运行设计,将设计编程到器件上,在硬件中运行和/或使用 IP 封装器将设计转为可重用的 IP。

Step 1: 新建一个工程

1,Creat New Project新建文档,输入工程名称和工程路径。完成后点击Next。
在这里插入图片描述
2,添加设计文件,并制定顶层函数。完成后点击Next。

在这里插入图片描述

3,添加C语言仿真文件。完成后点击Next。

在这里插入图片描述

4,:配置Solution Name,一般默认即可。配置Clock Period,单位是ns。配置Uncertainty,默认为空。选择产品型号。完成后点击Finish。

在这里插入图片描述

5,工程新建成功后进入的开发界面,HLS是典型的Eclipse界面,和SDK的界面十分相似。

在这里插入图片描述

导入的文件的代码如下:

1,源文件。axi_interfaces.c

#include "axi_interfaces.h"
void axi_interfaces (dout_t d_o[N], din_t d_i[N])
{
<span class="token keyword">int</span> i<span class="token punctuation">,</span> rem<span class="token punctuation">;</span>

// Store accumulated data static
dacc_t acc[CHANNELS];
axi_interfaces_label0:
for (i=0;i<CHANNELS;i++)
{
acc[i] = 0;
}
// Accumulate each channel
For_Loop:
for (i=0;i<N;i++)
{
rem=i%CHANNELS;acc[rem] = acc[rem] + d_i[i];d_o[i] = acc[rem];
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

2,头文件。axi_interfaces.h

#ifndef AXI_INTERFACES_H_

#define AXI_INTERFACES_H_

#include <stdio.h>

typedef int din_t;

typedef int dout_t;

typedef int dacc_t;

#define CHANNELS 8

#define SAMPLES 4

#define N CHANNELS * SAMPLES

void axi_interfaces (dout_t d_o[N], din_t d_i[N]);

#endif

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3,测试文件。axi_interfaces_test.c

#include "axi_interfaces.h"

int main () {

// Create input data

din_t d_i[N] = { 10, 20, 30, 40, 50, 60, 70, 80,

11, 21, 31, 41, 51, 61, 71, 81,

12, 22, 32, 42, 52, 62, 72, 82,

13, 23, 33, 43, 53, 63, 73, 83};

dout_t d_o[N];

int i, retval=0;

FILE *fp;

// Call the function to operate on the data

axi_interfaces(d_o,d_i);

// Save the results to a file

fp=fopen(“result.dat”,“w”);

fprintf(fp, “Din Dout\n”);

for (i=0;i<N;i++) {

<span class="token function">fprintf</span><span class="token punctuation">(</span>fp<span class="token punctuation">,</span> <span class="token string">"%d   %d\n"</span><span class="token punctuation">,</span> d_i<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> d_o<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

}

fclose(fp);

// Compare the results file with the golden results

retval = system(“diff --brief -w result.dat result.golden.dat”);

if (retval != 0) {

printf(“Test failed !!!\n”);

retval=1;

} else {

printf(“Test passed !\n”);

}

// Return 0 if the test passes

return retval;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

4,测试数据。result.golden.dat

Din Dout
10   10
20   20
30   30
40   40
50   50
60   60
70   70
80   80
11   21
21   41
31   61
41   81
51   101
61   121
71   141
81   161
12   33
22   63
32   93
42   123
52   153
62   183
72   213
82   243
13   46
23   86
33   126
43   166
53   206
63   246
73   286
83   326

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

Step 2: C源代码验证

本步骤是对功能代码的逻辑验证,相当于功能前仿。
1,测试程序的代码入下图。该程序先调用综合的函数,得到计算结果,再和预先的数据集进行比较,最后返回计较的结果。计算结果和预先的数据集一致时,测试通过,不一致时,测试失败。需要查看代码,寻找错误。
在这里插入图片描述

按钮,开始C源代码验证。

在这里插入图片描述

3,验证的结果显示在控制栏中。如图显示,测试通过。

在这里插入图片描述

4,在头文件中,重定义了数据类型,参数,并进行了函数声明。

在这里插入图片描述

Step 3: 高层次综合

本步骤是把功能代码的综合成RTL逻辑。
1,点击红框中的按钮,将C代码综合成RTL。综合完成后,查看结果。

在这里插入图片描述
2,综合完成后,查看综合报告。包括时序,延时,资源占用,端口信息等。
在这里插入图片描述

在这里插入图片描述

3,端口分析。
(1)控制端口用于控制和显示该模块的工作状态。各个端口的功功能如下,默认情况下会生成下面四个控制端口。
ap_start(in):为高时,该模块开始处理数据。
ap_done(out):为高时,表示模块处理数据完成。
ap_idle(out):表明模块是否处于空闲态。高电平有效。为高时,该处于空闲态。
ap_ready(out):为高时,表示模块可以接受新的数据。

(2)数据端口用于传递模块的输入输出参数。
参数d_o,d_i 为数组类型,故默认状态下回生成内存接口。内存接口 (数组类型参数)数据来自外部的memory,通过地址信号读取相应的数据,输入到该模块中。输入数组从外部内存中读源数据,输出数组从向外部内存写入结果数据。各个端口的定义如下。
address:地址信号
ce0:片选信号
we0:写使能信号
d0 :数据信号

4,综合结果分析。
在分析界面,可以看到模块的运行情况。包括数据依赖关系和各个周期执行的操作,IO口的读写,内存端口的访问等等。

在这里插入图片描述

在这里插入图片描述

Step 4: 综合优化

在使用高层次综合,创造高质量的RTL设计时,一个重要部分就是对C代码进行优化。
Vivado HLS拥有自动优化的功能,试图最小化loop(循环)和function(函数)的latency。除了自动优化,我们可以手动进行程序优化,即用在不同的solution中添加不同的directive(优化指令)的方法,进行优化和性能对比。其中,对同一个工程,可以建立多个不同的solution(解决方案),为不同的solution添加directive可以达到如下目的。
优化的类型可分为如下类别:

端口优化。指定不同类型的模块端口。
函数优化。加快函数的执行速度,减小执行周期。
循坏优化。利用展开和流水线形式,减小循环的执行周期。

1,点击下面红框的图标,新建solution。

在这里插入图片描述

2,不同solution位于不同的文件夹中。
在这里插入图片描述
3,选中综合文件。可以在direct框中看可进行优化的标签。

在这里插入图片描述
4,双击选择d_o,选择interface,s_axilite。点击ok。将d_o的端口类型设置为s_axilite类型。
在这里插入图片描述
5,参考d_o,将d_i的接口类型也设置为s_axilite。将d_i的端口类型设置为s_axilite类型。

在这里插入图片描述

6,双击选择函数名称axi_interface,选择interface,s_axilite。点击ok。将控制端口的端口类型设置为s_axilite类型。

在这里插入图片描述

7,双击循环标签,选择流水线优化(pipeline),点击ok。
在这里插入图片描述

8,双击循环标签,选择循环展开优化(unroll),点击ok。
在这里插入图片描述
9,同上,也将标签为for_loop的循环进行流水线和展开优化。
10,最终的优化情况总结如下。
在这里插入图片描述

11,重新进行函数综合,查看综合报告如下。
在这里插入图片描述

在这里插入图片描述

12,分析。
同未优化相比,优化过后的函数综合后生成的模块的运行时钟大大减小。端口的接口类型也变为了axi_lite端口。但资源占用率有所增加,也体现了用资源换速度的设计理念。在这里插入图片描述

Step 5: 综合结果文件

综合完成后,在各个solution的syn文件夹中可以看到综合器生成的RTL代码。包括systemc,VHDL,Verilog。

在这里插入图片描述

Step 6: 导出IP

在菜单里Solution>Export TL,设置如下,点击ok。

在这里插入图片描述

IP封装完成后,会在impl文件夹中输出ip文件夹,其中包含了RTL代码(hdl),模块驱动(drivers),文档(doc)等信息,其中包含一个压缩包文件,是用于建立vivado工程所用的IP压缩包。

在这里插入图片描述

Step 7: 总结

本文重点讲解了hls软件的使用方法和优化方法,在C语言模块设计上没有重点讲解。在掌握了hls软件的基本用法和优化方法后,接下来就可以设计更加复杂的C语言模块,进行rtl综合,加快设计开发的速度。

HLS入门实践
qq_57160761的博客
05-18 3080
本次实验使用HLS工具来设计一个简单的数字电路,该电路可以控制FPGA板上的LED灯的点亮和熄灭。我们使用C语言来编写设计,然后将其转换为VHDL或Verilog硬件描述语言,以便在FPGA上实现。在本次实验中,我们使用Xilinx Vivado HLS工具来进行设计和仿真。首先,我们创建了一个新的工程,并在其中编写了一个简单的C语言程序来控制LED灯的点亮和熄灭。我们使用HLS工具来将C代码转换为硬件描述语言,并对其进行优化和调试。
FPGA开发之Vivado安装及HLS环境配置,并实现流水灯实例
qq_54347584的博客
05-22 3378
FPGA学习之HLS
Vivado HLS Optimization Directives 介绍-ALLOCATION,ARRAY!
最新发布
weixin_38873875的博客
03-29 949
ALLOCATION directive允许限制在设计中使用的操作符、内核或函数的数量。例如,如果一个名为foo的函数设计有317个乘法,但FPGA只有256个乘法器资源(dsp48)。int i;for (i=0;i
vivado HLS的基本使用
qq_44741516的博客
07-26 2879
vivado hls的基本使用
HLS(一)Vivado高层次综合概述
qq_42935931的博客
11-05 3361
目录1.什么是FPGA?1.1 简介1.2 架构1.3 FPGA并行方式与处理器对比2.硬件设计基本概念2.1 时钟频率2.2 延迟2.3 吞吐率2.4 存储布局3.高层次综合3.1 概述3.2 运算​3.3 条件语句3.3循环3.5 函数3.6 动态内存申请3.7 指针4.以计算为中心的算法5.以控制为中心的算法6. Vivado HLS中的仿真6.1 概述6.2 软件测试台6.3 代码覆盖率6.4 未初始化变量6.5 内存越界6.6 C-RTL 联合仿真6.7 C++仿真无法适用的情况7.多个程序的集成
HLS环境搭建及Vivado基本开发流程
qq_53088119的博客
05-21 2875
高层次综合(High-level Synthesis)简称 HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括 C、C++、SystemC 等,通常有着较高的抽象度,并且往往不具有时钟或时序的概念。相比之下,诸如 Verilog、VHDL、SystemVerilog 等低层次语言,通常用来描述时钟周期精确(cycle-accurate)的寄存器传输级电路模型,这也是当前 ASIC 或 FPGA 设计最为普遍使用的电路建模和描述方法。
UG871--Vivado-HLS中文翻译文档.pdf
01-16
教程介绍Vivado®高级合成(HLS)。您可以学习使用图形用户界面(GUI)和Tcl环境执行高级综合的主要任务。 本教程展示了如何使用优化指令将初始RTL实现转换为低面积和高吞吐量的实现。 #实验例程 #中文翻译 #UG871,...
vivado-HLS设计简单总结参考使用
07-15
vivado-HLS设计简单总结参考使用
Vivado-HLS流水灯源代码
11-13
本代码是上一篇博客里的源代码,讲述了vivado-HLS下,流水灯的使用。包含头文件和源文件。结合至芯科技老师在腾讯课堂上的讲解,学习更快。
vivado-hls-broadcast-optimization:[DAC 2020]分析和优化FPGA HLS中的隐式广播以提高最大频率
05-10
此存储库可以在以下方面为您提供帮助: 更好地了解由Vivado HLS生成的看似凌乱的RTL,这对于希望手动破解RTL的专家用户将是有益的。 正确的编码样式可导致设计具有良好的时序质量。 用于优化数据流设计中管道
vivado经典例子学习
04-06
教程简介:如果你未接触过ZedBoard板卡或PlanAhead软件,用板卡上的SW0-7开关来控制LD0-7的led灯。
High-Level-Synthesis-Flow-on-Zynq-using-Vivado-HLS-master.zip
08-09
四个HLS入门得例子,Xilinx暑假计划的作业,步骤特别详细,比一众的开发板教程要好的多,里面详细讲解了为什么进行这样的directives,以及这些directives的作用
vivado HLS硬件化指令(二)HLS针对数组的硬件优化
祥瑞的技术博客
08-07 9302
背景:循环结构是c语言中经常出现的内容。HLS会对数组作出具体的优化。 目的:目的,搞懂HLS对数组的操作。 UG902 v2016.4 P326:HLS用户指南中数组的内容 CH.3 HLS coding styles:Arrays 目录 1. 数组 1.1 c仿真中的数组 1.2 数组的实现 1.3 可能出现的问题 2. 数组的接入与性能 3. FIFO接入 4. 数组的...
ZYNQ之路--HLS入门实例
weixin_54358182的博客
10-27 1361
上一节我们介绍了如何建立一个HLS工程以及HLS的工程结构,这一节我们着眼于HLS的优化部分,通过Xilinx官方提供的小示例来宏观了解HLS的优化操作。
VivadoHLS+SDK开发流程(记录)
weixin_39092315的博客
03-05 1791
Vivado学习笔记
HLS开发学习-14- Vivado HLS 函数层面的优化
Vuko_Coding Zone
08-02 878
写在前面 本文是本系列专题的第十四篇,参考高亚军老师的视频教程以及课程的ppt,主要介绍了Vivado HLS 函数层面的优化。
vivado使用方法(初级)
热门推荐
qq_46689721的博客
09-12 1万+
Vavido初次使用
HLS学习篇—搭配hls环境及操作实例
执迷不悟
12-13 4078
HLS学习篇—搭配hls环境及操作实例 一、环境测试及开发流程 1、环境测试 2、i++编译与测试 3、编译为FPGA程序 4、modelsim仿真 二、Examples示例 1、Image_downsample 2、YUV2RGB 三、实例——加法器 1、C语言实现加法器 2、hls搭桥【语言转换】 3、编译测试 4、仿真验证 5、文件简介
vivadohls2018.3使用教程pdf
11-13
vivadohls2018.3使用教程pdf是一份关于Vivado HLS(High Level Synthesis)2018.3版本的使用教程的PDF文档。Vivado HLS是Xilinx公司推出的一种高层次综合工具,用于将高级语言(如C/C++)编写的算法转化为硬件描述语言(HDL)。该教程旨在指导用户使用Vivado HLS 2018.3版本进行高层次综合设计。 这份教程主要包含以下几个部分:首先,介绍了Vivado HLS的概念、特点和工作流程,帮助用户了解该工具的基本原理和使用方法。然后,详细讲解了Vivado HLS的安装和设置过程,包括环境配置、license申请等。接着,教程详细介绍了Vivado HLS使用步骤,包括创建工程、添加源文件、设置设计选项等。此外,教程详细介绍了Vivado HLS的优化技术和调试方法,帮助用户实现更高效的设计和调试。最后,教程提供了一些示例代码和实例项目,供用户参考和练习。 这份教程的编写旨在帮助用户快速上手使用Vivado HLS 2018.3版本进行高层次综合设计。通过学习和掌握教程中的知识和技巧,用户可以更加高效地使用Vivado HLS进行硬件设计,提高设计的性能和效率。此外,教程还提供了一些实例和示例代码,帮助用户深入理解和应用Vivado HLS的各项功能和特性。 综上所述,vivadohls2018.3使用教程pdf是一份以Vivado HLS 2018.3版本为基础的使用教程,通过详细介绍Vivado HLS的安装、设置、使用步骤、优化技术和调试方法等内容,帮助用户掌握Vivado HLS的基本原理和使用方法,从而快速上手并进行高效的高层次综合设计。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • AD9371、AD9361、ADRV9009驱动开发、调试 17666
  • 电磁波中的波段划分:L波段、S波段、C波段、X波段、Ku波段、K波段、Ka波段 17182
  • [Common 17-55] ‘set_property‘ expects at least one object. Resolution: If [get_<value>] was used to 14039
  • VIVADO 无法找到观测核 WARNING: [Xicom 50-38] xicom: No CseXsdb register file specified for CseXsdb slave ty 13632
  • DDR4 MIG IP核 FPGA使用及读写测试 12902

分类专栏

  • 高速AD DA开发 22篇
  • FPGA 81篇
  • RF SOC 6篇
  • FPGA 通信调制解调 1篇
  • ZYNQ 16篇
  • FPGA图像处理 11篇
  • SATA 5篇
  • 雷达信号检测 3篇
  • 万兆网FPGA&rdma 100G 6篇
  • linux 22篇
  • EMMC 4篇
  • nvme 9篇
  • PCIE 12篇
  • 加密IP 2篇
  • verilog 4篇
  • AI 边缘计算开发
  • VHDL 2篇
  • DDR4 3篇
  • SRIO 7篇
  • FPGA数字信号处理 1篇
  • Python
  • VxWorks 2篇
  • JESD204C
  • JESD204B 1篇
  • ufs

最新评论

  • ADI最新基带处理芯片 ADRV9002特性及 FPGA 驱动开发调试记录分享

    ちよぅなら: 博主您好,可以用米联客的开发板+adrv9002吗?

  • ADI最新基带处理芯片 ADRV9002特性及 FPGA 驱动开发调试记录分享

    ちよぅなら: 您学会了吗,可以向您请将一些问题吗???

  • 关于RJ45插座(HR911130C)硬件连接

    ybyt008: P2-P9是3.3V的数据,P1还是接1.8V吗?

  • 基于10G Subsystem FPGA 万兆UDP协议栈实现

    月是故乡明513: 您好,请问一下10G Ethernet subsystem ip的mac_tx/rx_configureration_vector,还有pcs_pma[535:0]寄存器该怎么配置呢

  • ADRV9009 8收8发 SDR采集存储板卡 MIMO

    FPGA_Linuxer: sun8002-a

最新文章

  • SDK无法创建LWIP工程
  • Xilinx RFSOC 47DR 8收8发 信号处理板卡
  • xilinx ip自带XDC只读
2024年14篇
2023年35篇
2022年44篇
2021年40篇
2020年54篇
2019年1篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司延安百度标王推荐阜新网站推广工具推荐本溪网站优化按天收费哪家好焦作营销网站报价德阳网站建设设计哪家好成都关键词按天收费公司巴中品牌网站设计报价大浪百度标王价格娄底营销型网站建设推荐常州企业网站建设多少钱丹竹头网站优化推广深圳百度网站优化排名公司梅州优化哪家好芜湖品牌网站设计多少钱连云港至尊标王推荐石家庄网站seo优化推荐恩施建站报价绍兴SEO按天扣费价格驻马店关键词按天收费推荐绥化至尊标王哪家好湛江百度标王贺州SEO按天收费推荐哈尔滨百度关键词包年推广多少钱襄樊网站推广工具多少钱武汉SEO按天收费价格抚顺SEO按天计费哪家好临沧网站建设多少钱安庆关键词按天计费舟山网站排名优化哪家好汕头网站优化排名价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化