0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

加载激励块或源代码块的方法

lhl545545 来源:FPGA开发圈 作者:FPGA开发圈 2020-06-09 15:38 次阅读

本篇博文旨在演示其构建方式及其用于实践 IP 的机制。我觉得这部分内容值得讲一讲,因为只要您能够充分理解测试激励文件,就可以将其作为有效的模板来用于将 RF Data Converter IP 构建到自己的仿真设置中。

我并不会细讲这里的所有内容,只是为了演示一下仿真的机制。当然,您也可以自行深入分析测试激励文件 RTL。

您可能已经知道,IP 设计示例随附有完整的测试激励文件。此测试激励文件可在仿真中提供激励生成和采集,用于 ADCDAC 实践。仿真具有内置自检功能,因此它可用于检验您的 IP 设置。

让我们来简单了解下设计测试激励文件示例。

加载激励块或源代码块的方法

从 IP 设计示例层面上来看,不仅有 IP,还有激励块和采集块(均为大型块 RAM 数组)。

此外还有 1 个 SmartConnect 块用于连接到 IP 的 AXI4-Lite 端口

因此,测试激励文件需提供的是:

时钟生成,用于设计中的所有时钟。ADC 和 DAC Tile 的输入、AXI 流传输接口和 1 个 AXI4-Lite 接口。

加载激励块或源代码块的方法。

将“实数”信号应用于模拟输入的方法,以及将实数信号从 DAC 转换为数字总线以便检查的方法。

最重要的是,需要 1 个定序器 (sequencer) 用于管理仿真。

检验采集块或接收端 (sink) 块的方法。

让我们来看看测试激励文件。测试激励文件的所有源文件都包含在设计工程示例中的导入 (imports) 目录中。

顶层测试激励文件包含在 demo_tb.sv SystemVerilog 文件中。我们不会逐行详细分析其中所有内容。在此级别只需连接各主要块即可。让我们来看下仿真功能的最重要的部分。

时钟生成

有一个非常简单的模块可用于在仿真中创建所有必要的时钟信号。其中的输入带有_phase后缀,支持用户为时钟设置高低时间。它用于为每个 Tile 和 AXI Stream 时钟创建所期望的频率。

加载激励块或源代码块的方法

加载激励块或源代码块的方法

我们可在仿真中对此进行检查,确保它按我们期望的方式运行。

在此情况下可以看到,DAC 采样时钟以 6.4GSPS 运行,而 AXI stream 传输时钟的运行速率为该速率除以 16。

加载激励块或源代码块的方法

激励生成

在仿真中,ADC 和 DAC 将分别单独处理。在此情况下并不执行环回。

DAC 与 ADC 来源相同。

ADC 包含demo_tb_rfadc_data_source.sv,其中包含demo_tb_rfadc_tile_source.sv。在代码中,我们提供的是正弦查找表 (LUT)。在此情况下,将循环此 LUT 并生成正弦波输出。

加载激励块或源代码块的方法

此正弦波将输出到测试激励文件的顶层。我们可将其转换为实数,以便将其强制添加到demo_tb中的 Tile 的 UNISIM 模型层的模拟信号输入中。

加载激励块或源代码块的方法

对于 DAC,只需将此数据写入设计示例中的 DAC 源块上的 AXI 接口即可。在demo_tb层级上,我们可将 DAC 模拟信号从实数转换为位数,并将其应用于 DAC 接收端输入。

加载激励块或源代码块的方法

测试激励文件定序器

鉴于时钟正在运行仿真,并且先前已经讲解过数据源相关内容,因此我们可以继续讲解测试激励文件的主要部分。

在demo_tb_axi4l_nano_seq.sv文件中可以了解到仿真的设置和控制方式。此文件使用部分 SystemVerilog 任务以便于我们访问 RF 的 Tile,并对其执行部分设置。此外还有其它任务可用来控制仿真。我们将演示仿真的整个过程,并根据需要来探讨这些任务。

通过观察此文件可以发现,它使用参数化寻址来允许我们处理测试激励文件中 AXI4-Lite 上的各个子块。各项任务将通过这些子块来控制仿真。

加载激励块或源代码块的方法

定序器 (Sequencer) 首先会对测试激励文件中的所有一切都应用复位。然后它会对 Tile 执行写入以启用仿真加速。这样即可缩短 Tile 的启动时间,因为它可缩短电源微调时间以及 ADC 校准时间。仿真仅允许 Tile 达到 IP 的启动状态机的状态 1。

加载激励块或源代码块的方法

在此步骤后,它会对 Tile 执行某些设置,然后开始在测试激励文件中开启源端和接收端。它还会开始加载 DAC 源内存。

加载激励块或源代码块的方法

最好在执行每个步骤时都打印仿真时间。这样即可根据需要检查波形。

可以看到,IP 设置完成后,就会于 169us 附近开始写入 DAC 激励数据。DAC 源内存位于基址 0x300000000 处。

加载激励块或源代码块的方法

下一步,启动 Tile 时钟,并运行 ADC 和 DAC 直至时钟检测步骤为止。

加载激励块或源代码块的方法

完成此步骤后,即可启动 DAC 源并运行 DAC,直至启动 FSM 结束为止:

加载激励块或源代码块的方法

通过观察波形可知,音调已传入,而 DAC 输出总线正在运行。

此处可看到 25Mhz/50Mhz/100Mhz/200Mhz。

加载激励块或源代码块的方法

然后,针对 ADC 重复此过程:

加载激励块或源代码块的方法

运行后,可在波形中查看结果。在此情况下,vout_00和vout02总线即为仿真中 ADC 源的输出。

我在此处还附上了 AXI Stream 传输的 8 个采样之一的截屏,以显示 ADC 能正常转换单音信号。

加载激励块或源代码块的方法

数据接收端和检查器

ADC 和 DAC 在demo_tb中具有一组接收端块。

在这些块中,将对数据进行缩放,并且将执行 FFT。这样即可确认信号能以正确方式进行转换。

加载激励块或源代码块的方法

这些块用于管理错误计数器。如果全部正确,那么定序器 (Sequencer) 就会停止仿真。

加载激励块或源代码块的方法

加载激励块或源代码块的方法

责任编辑:pj

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

    关注

    5

    文章

    1541

    浏览量

    148931
  • 源代码
    +关注

    关注

    96

    文章

    2942

    浏览量

    66447
  • SmartConnect
    +关注

    关注

    0

    文章

    2

    浏览量

    6832
收藏 人收藏

    评论

    相关推荐

    振动电机偏心调整方法

    的核心部件,其调整方法对振动电机的性能和使用寿命具有重要影响。本文将详细介绍振动电机偏心的调整方法。 一、振动电机偏心的工作原理 振动电机的偏心
    的头像 发表于 06-12 16:17 1299次阅读

    西门子博途:属性- 隐藏参数

    在 LAD FBD 中调用该时,可隐藏参数。刚开始时,隐藏的参数不可见;但可通过框底部边缘处的小箭头进行显示。
    发表于 01-16 09:30 1293次阅读
    西门子博途:<b class='flag-5'>块</b>属性- 隐藏<b class='flag-5'>块</b>参数

    西门子博途示例:设置优化访问

    默认情况下,为 S7 - 1200/1500 的所有新创建的启用优化访问。可为 OB、FB 和全局DB设置访问。对于背景DB,设置来自各自的 FB。 如果将从 S7- 300
    的头像 发表于 01-15 10:41 4094次阅读
    西门子博途示例:设置优化<b class='flag-5'>块</b>访问

    如何快速为DB变量添加属性

    有些情况需要为PLC DB变量添加一些属性,常规的做法是在DB中选中这个变量,然后打开变量属性输入属性名称和属性值。
    的头像 发表于 01-02 14:18 1540次阅读
    如何快速为DB<b class='flag-5'>块</b>变量添加属性

    文件存储和存储的区别和联系

    ,它将文件以树状结构进行组织,每个文件都被分配一个唯一的文件名。文件系统将文件划分为逻辑上的数据,然后将这些映射到磁盘其他存储介质
    的头像 发表于 12-20 17:16 915次阅读

    西门子博途:打开

    其他用户可以通过 CPU 上并行工作的结点,在选定的 CPU 上执行加载过程。因此可能发生这样的情况,如果仅存在于设备中,已经打开的在线加载过程中将删除。这种情况下,在线
    的头像 发表于 12-10 16:08 1519次阅读
    西门子博途:打开<b class='flag-5'>块</b>

    西门子博途: 功能、组织介绍-从设备上传

    请注意,加载单个时,变量其它可能引用的所需不会与各个一起加载。在
    的头像 发表于 12-10 16:06 2214次阅读
    西门子博途: 功能<b class='flag-5'>块</b>、组织<b class='flag-5'>块</b>介绍-从设备上传

    安秉信息源代码图纸防泄密方案,电路图纸,源代码文件

    安秉信息源代码图纸防泄密方案,电路图纸,源代码文件
    发表于 12-01 16:56 0次下载

    抄一pcb板难吗?

    抄一pcb板难吗?
    的头像 发表于 11-23 14:23 535次阅读

    vs中如何快速注释多行代码

    在VS中,快速注释多行代码可以通过以下几种方法实现。我将详细介绍每种方法的步骤和应用场景。 方法一:注释
    的头像 发表于 11-22 10:26 1.5w次阅读

    如何查看及更改函数/函数的调用环境

    模块化设计的思想是把一些相似的功能(比如电机控制、阀控制)设计成函数函数,这样就可以反复调用。其优点是:使程序架构更加清晰,避免重复编写相似功能的代码。不过可能会产生一个疑惑:既然PLC的程序
    的头像 发表于 11-17 09:08 669次阅读
    如何查看及更改函数/函数<b class='flag-5'>块</b>的调用环境

    什么是FB功能?为什么要使用FB功能?如何制作一个FB功能

      FB功能是一种封装了特定逻辑功能的模块。它类似于一个子程序函数,但是它有自己的内部变量和接口。FB功能可以被多次调用,并且每次调用都会创建一个新的实例。
    的头像 发表于 11-09 16:13 3109次阅读
    什么是FB功能<b class='flag-5'>块</b>?为什么要使用FB功能<b class='flag-5'>块</b>?如何制作一个FB功能<b class='flag-5'>块</b>?

    SCL函数的结构介绍 创建SCL函数的步骤说明

    下图显示了 SCL 函数的结构。
    的头像 发表于 10-30 10:16 702次阅读
    SCL函数<b class='flag-5'>块</b>的结构介绍 创建SCL函数<b class='flag-5'>块</b>的步骤说明

    博途中FC的接口OUT不能使用触点

    方法1:把电机的输出定义成INOUT,而不要定义成OUT ,但此方法有一个弊端就是所有有引脚都在程序的左边,不利于调试与观察,在FC还可能会用到很多的上升沿的标志位
    的头像 发表于 10-16 16:51 918次阅读
    博途中FC<b class='flag-5'>块</b>的接口OUT不能使用触点

    静态代码、构造代码、构造函数及普通代码的执行顺序

    在Java中,静态代码、构造代码、构造函数、普通代码的执行顺序是一个笔试的考点,通过这篇文
    的头像 发表于 10-09 15:40 983次阅读
    静态<b class='flag-5'>代码</b><b class='flag-5'>块</b>、构造<b class='flag-5'>代码</b><b class='flag-5'>块</b>、构造函数及普通<b class='flag-5'>代码</b><b class='flag-5'>块</b>的执行顺序