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

这个示例展示了如何为一个FIFO缓冲接口生成SystemVerilog DPI组件的完整工作流程,该接口意味着要与UART接收器集成。该接口是用MATLAB编写的,并导出到HDL仿真器中。还提供了用于UART接收器及其测试工作台的SystemVerilog文件。

为了说明的目的,本示例使用的Modelsim 10.3c在64位Windows 7然而,这种相同的方法可以很容易地复制的其他系统和模拟器。

需求和先决条件

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

  • MATLABCoder®

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

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

背景

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

以“起始位”,这是0串行传输开始,后面跟数据位,和以“奇偶校验位”和一个单字节的“停止bit'.Transmission端是显示在如下图所示:

转印是异步的,这意味着没有时钟信息,所以接收器和发送器必须在什么波特率,停止位以及奇偶校验位被用于同意。在这个例子中一个字节将具有19200的波特率,则1个停止位和无奇偶校验位来传送。

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

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

步骤1:MATLAB设计

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

  1. 设计:FIFO_Buffer

  2. 试验台:FIFO_Buffer_tb

步骤2:确保MATLAB testbench捕获需求

运行testbench以确保没有运行时错误,下面的图应该被绘制出来。

FIFO_Buffer_tb

注意,testbench以以下方式执行设计:*时钟周期<15:写6字节(启用写信号,禁用读信号),然后读取6字节(启用读信号,禁用写信号)。*时钟周期>15:同时读写。(例如:写入的字节将在下一个时钟周期中读取)。

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

为了生成部件执行以下命令:

FIFO_Buffer -args {0,int8(0),0}

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

一旦DPIGEN生成了DPI组件和它的testbench,你可以通过以下步骤运行SystemVerilog testbench:

  • 开始的ModelSim / QuestaSim在GUI模式。

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

  • 输入以下命令来启动你的模拟

做run_tb_mq.do

会产生下列波形:

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

  • 当模拟完成后,你应该看到以下文字打印在您的控制台:

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

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

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

将运动与集成的DPI组件的UART接收器,已经提供了一个名为“uart_rx_FIFO_tb.sv”的测试平台。为了整合所需要的组件的所有是实例在测试平台组件如下所示:

//实例化DUT生成使用MATLAB为基础的SystemVerilog DPI 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), FPGA原型的Verilog例子。新泽西州霍博肯:约翰威利父子公司。