这个示例展示了如何为一个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接收器的设计。
第一步是编写MATLAB代码,以满足您的设计需求,您应该尝试在一个测试台上捕获需求。在本例中,我们的设计由一个由8个单词组成的先进先出(FIFO)缓冲区组成。
设计:FIFO_Buffer
试验台:FIFO_Buffer_tb
运行testbench以确保没有运行时错误,下面的图应该被绘制出来。
FIFO_Buffer_tb
注意,testbench以以下方式执行设计:*时钟周期<15:写6字节(启用写信号,禁用读信号),然后读取6字节(启用读信号,禁用写信号)。*时钟周期>15:同时读写。(例如:写入的字节将在下一个时钟周期中读取)。
为了生成部件执行以下命令:
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个字节匹配。
当模拟完成后,你应该看到以下文字打印在您的控制台:
* * * * * * * * * * * * * *测试完成(通过)* * * * * * * * * * * * * *
在验证了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);
为了成功地进行设计仿真,请确保以下文件在同一文件夹:
与步骤3类似,打开Modelsim并使用以下命令运行.do文件:
做run_tb.do
产生下列波形:
在测试台上,6个ASCII字母('MATLAB')通过串行'rx'信号传输,并写入FIFO缓冲区。在第6个字母传输完成后,“rd”信号被断言为将字母(“MATLAB”)返回到“r_data”中。
Pong P. Chu (2008), FPGA原型的Verilog例子。新泽西州霍博肯:约翰威利父子公司。