为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)缓冲区组成。
设计:FIFO_Buffer
试验台: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原型设计。新泽西州霍博肯:约翰·威利父子公司