主要内容

为UART接收器生成FIFO接口DPI组件

此示例显示了如何为要与UART接收器集成的FIFO缓冲区接口生成SystemVerilog DPI组件的完整工作流程。该接口用MATLAB编写,并输出到HDL模拟器。还提供了UART接收器及其测试台的SystemVerilog文件。

出于说明性目的,此示例使用64位Windows 7中的ModelSIM 10.3c。但是,可以轻松地复制此相同的程序,可用于其他系统和模拟器。

要求和先决条件

下载188bet金宝搏此示例所需的产品:

  • MATLAB编码器®

  • 模拟器:MentorGraphics®SexchingIm®/Questasim®或Cadence®Incisive

  • 其中一个支持的C编译器金宝app:Microsoft®VisualC ++或GNU GCC

背景

通用异步收发器(UART)是通过串行线路发送和接收数据的电路。UART通常与RS-232标准一起使用,并包含一个接收器和发射器。然而,在此示例中,仅使用接收器。

串行传输以“起始位”开始为0,然后是数据位,并以“奇偶校验位”和“停止位”结尾。在下图中显示单个字节的传输:

传输是异步的,这意味着没有时钟信息,因此接收器和发射机必须达成符合哪些波特率,停止位和奇偶校验位。在该示例中,将以19,200,14秒钟和没有奇偶校验位的波特率传输一个字节。

超采样方案将用于以16倍波特率的速率估计数据位的中间点,如下图所示。

以下示意图说明了UART接收器设计。

第1步:MATLAB设计

第一步是编写满足设计要求的MATLAB代码,您应该尝试在测试台上捕获这些要求。在本例中,我们的设计包括一个8字的先进先出(FIFO)缓冲区。

  1. 设计:FIFO_BUFFER.

  2. 试验台:先进先出缓冲区

第2步:确保Matlab TestBench捕获要求

运行测试台以确保没有运行时错误,应绘制下图。

先进先出缓冲区

请注意,测试台以以下方式进行设计:

  • 时钟周期<15:写入6个字节(启用写入信号,读取信号禁用),然后读取6个字节(读取信号,禁用写入信号)。

  • 时钟周期> 15:同时读写。(例如:写入的字节在下一个时钟周期中读取)。

步骤3:生成DPI组件并验证HDL模拟器中的行为

要生成组件,请执行以下命令:

迪根-试验台先进先出缓冲区FIFO_BUFFER.-  args.{0,Int8(0),0}

下图显示了此示例的相关文件。

一旦DPIGEN生成DPI组件及其测试台,您就可以按照以下步骤运行SystemVerilog TestBench:

  • 在GUI模式下启动ModelSim/QuestaSim。

  • 将当前目录更改为HDL模拟器中的代码生成目录下的“dpi_tb”。

  • 输入以下命令以启动模拟

run_tb_mq.do.

将生成以下波形:

请注意,这与我们的MATLAB测试台匹配,我们在其中编写6个字节,然后读取它们,然后同时编写和读取8个字节。

  • 仿真完成后,您应该看到控制台中打印以下文本:

**************测试完成(通过)**************

步骤4:将生成的DPI组件集成到UART接收器设计中

在验证DPI组件行为之后,是时候将其集成到UART接收器中。下图显示了不同组件所需的文件。

要使用已集成的DPI组件锻炼UART接收器,已提供名为“UART_RX_FIFO_TB”的TestBench。要集成所需的组件,即在测试台中的组件实例化,如下所示:

//实例化DUT使用基于MATLAB的SystemVerog DPI FIFO_BUFFER_DPI U_FIFO_BUFFER_DPI(.clk(clk),.clk_enable(clk_enable),.reset(重置),.wr(rx_done_tick),.w_data(dout),.rd(rd),。空(空),.r_data(r_data),.fulll(full));

步骤5:模拟UART接收器

要成功模拟设计,请确保以下文件位于同一文件夹中:

类似于STEP 3,打开MOTEMEMIM并使用:

run_tb.do.

生成以下波形:

在测试台中,6个ASCII字母(“MATLAB”)通过串行“rx”信号传输,并写入FIFO缓冲器。第6个字母传输完成后,将断言“rd”信号,以将字母(“MATLAB”)返回到“r_数据”中。

工具书类

庞P。Chu(2008),通过Verilog示例进行FPGA原型设计。新泽西州霍博肯:约翰·威利父子公司。