此示例显示了如何为FIFO缓冲区接口生成SystemVerilog DPI组件的完整工作流,这意味着与UART接收器集成。该接口写入MATLAB,并导出到HDL模拟器。还提供了UART接收器的SystemVerilog文件及其测试台。
出于说明性目的,此示例使用64位Windows 7中的ModelSIM 10.3c。但是,可以轻松地复制此相同的程序,可用于其他系统和模拟器。
s manbetx 845此示例所需的产品:
MatlabCoder®.
模拟器:MentorGraphics®SexchingIm®/Questasim®或Cadence®Incisive
其中一个支持的C编译器万博1manbetx:Microsoft®VisualC ++或GNU GCC
通用异步接收器和发射器(UART)是通过串行线发送和接收数据的电路。UART通常与RS-232标准一起使用并包含一个接收器和发射器。但是在该示例中,仅使用接收器。
串行传输以“起始位”开始为0,然后是数据位,并以“奇偶校验位”和“停止位”结尾。在下图中显示单个字节的传输:
传输是异步的,这意味着没有时钟信息,因此接收器和发射机必须达成符合哪些波特率,停止位和奇偶校验位。在该示例中,将以19,200,14秒钟和没有奇偶校验位的波特率传输一个字节。
超采样方案将用于以16倍波特率的速率估计数据位的中间点,如下图所示。
以下示意图说明了UART接收器设计。
第一步是编写MATLAB代码,将满足您设计的要求,您应该尝试捕获测试台中的要求。在此示例中,我们的设计由8个单词的第一个(FIFO)缓冲区组成。
设计:FIFO_BUFFER.
试验台:FIFO_BUFFER_TB.
运行TestBench以确保没有运行时错误,应绘制以下图。
FIFO_BUFFER_TB.
请注意,Testbench正在以下列方式锻炼设计:
时钟周期<15:写入6个字节(启用写入信号,读取信号禁用),然后读取6个字节(读取信号,禁用写入信号)。
时钟周期> 15:同时读写。(例如:写入的字节在下一个时钟周期中读取)。
要生成组件执行以下命令:
DPIGEN.-试验台FIFO_BUFFER_TB.FIFO_BUFFER.- args.{0,Int8(0),0}
下图显示了此示例的相关文件。
一旦DPIGEN生成DPI组件及其测试台,您就可以按照以下步骤运行SystemVerilog TestBench:
以GUI模式启动Modelsim / Questasim。
将当前目录更改为HDL模拟器中的代码生成目录下的“dpi_tb”。
输入以下命令以启动模拟
做run_tb_mq.do.
将生成以下波形:
请注意,这与我们的MATLAB测试台匹配,我们在其中编写6个字节,然后读取它们,然后同时编写和读取8个字节。
仿真完成后,您应该看到控制台中打印以下文本:
**************测试完成(通过)**************
在验证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));
要成功模拟设计,请确保以下文件位于同一文件夹中:
类似于STEP 3,打开MOTEMEMIM并使用:
做run_tb.do.
生成以下波形:
在TestBench 6中,ASCII字母('MATLAB')通过串行'Rx'信号传输,并将其写入FIFO缓冲区。在第6个字母传输完成之后,“RD”信号被断言以获取字母(“r_data”的字母('matlab')。
Pong P. Chu(2008),FPGA由Verilog示例进行原型设计。霍博肯,新泽西:John Wiley&Sons,Inc。