主要内容

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

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

出于演示目的,本示例使用64位Windows 7中的Modelsim 10.3c。然而,同样的过程可以很容易地复制到其他系统和模拟器。

要求和前提条件

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

  • MATLAB编码器®

  • 模拟器:Mentor Graphics®ModelSim®/QuestaSim®或Cadence®Xcelium™

  • 支持的C编译器之一:M金宝appicrosoft®Visual c++或GNU GCC

背景

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

串行传输以“开始位”为0开始,接着是数据位,以“奇偶校验位”和“停止位”结束。单字节传输如下图所示:

传输是异步的,这意味着没有时钟信息,因此接收机和发射机必须就使用波特率、停止位和奇偶校验位达成一致。在本例中,传输一个字节的波特率为19,200,1个停止位,没有奇偶校验位。

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

下面的示意图说明了UART接收机的设计。

第一步:MATLAB设计

第一步是编写MATLAB代码,以满足您的设计需求,您应该尝试在测试台上捕获需求。在这个例子中,我们的设计由8个单词的先进先出(FIFO)缓冲区组成。

  1. 设计:FIFO_Buffer

  2. 试验台:FIFO_Buffer_tb

步骤2:确保MATLAB测试平台捕获了需求

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

FIFO_Buffer_tb

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

  • 时钟周期<15:写6字节(打开写信号,关闭读信号),然后读6字节(打开读信号,关闭写信号)。

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

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

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

dpigen-testbenchFIFO_Buffer_tbFIFO_Bufferarg游戏{0, int8 (0), 0}

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

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

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

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

  • 输入以下命令启动模拟

run_tb_mq.do

将生成以下波形:

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

  • 当模拟结束时,你应该在控制台中看到以下文本:

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

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

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

为了使用集成了DPI组件的UART接收器,测试平台命名为“uart_rx_FIFO_tb”。已提供Sv '。要集成组件,所需要的就是在测试台中实例化组件,如下所示:

//实例化MATLAB生成的DUT基于SystemVerilog DPI FIFO_Buffer_dpi u_FIFO_Buffer_dpi(.clk(clk), .clk_enable(clk_enable), .reset(reset), .wr(rx_done_tick), .w_data(dout), .rd(rd), .Empty(Empty), .r_data(r_data), .Full(Full));

步骤5:模拟UART接收器

为了成功模拟设计,请确保以下文件在同一个文件夹中:

与步骤3类似,打开Modelsim并使用以下命令运行.do文件:

run_tb.do

产生以下波形:

在测试台上,6个ASCII字母('MATLAB')通过串行'rx'信号传输,并写入FIFO缓冲区。在第6个字母转换完成后,'rd'信号被断言以获得字母('MATLAB')返回'r_data'。

参考文献

Pong P. Chu(2008),基于Verilog的FPGA原型设计。新泽西州霍博肯:约翰·威利父子公司