Zebu UART例子解读

本篇文章中我们先来看看一个UART Transactor的例子,我们可以通过这个例子来理解ZeBu中transactor的具体概念和基本应用,另外还可以了解一下ZeBu运行的整个流程。首先我们来看看DUT。

UART DUT wrappter

在每个ZEBU的工程中,DUT都要有一个WRAPPTER,这个wrapper负责例化DUT,产生必要的时钟,挂载必要的transactor等等,我们来看看UART例子的wrapper:

// 例化DUT
dut dut (
   .clk         (clk),
   .rstn        (rstn),
   .RTS_0       (RTS_0),
   .CTS_0       (CTS_0),
   .TxD_0       (TxD_0),
   .RxD_0       (RxD_0),
   .RTS_1       (RTS_1),
   .CTS_1       (CTS_1),
   .TxD_1       (TxD_1),
   .RxD_1       (RxD_1)
);

// 例化Driver
uart_driver uart_driver_0(
  .CTS          (RTS_0),
  .RTS          (CTS_0),
  .TxD          (RxD_0),
  .RxD          (TxD_0),
  .xtor_cclock0 (clk),
  .save         ()
);

// 例化第二个driver, 为什么要两个,是因为IP支持两路串口?
uart_driver uart_driver_1(
  .CTS          (RTS_1),
  .RTS          (CTS_1),
  .TxD          (RxD_1),
  .RxD          (TxD_1),
`ifndef ZEBU_NO_RTB
  .xtor_cclock0 (clk),
`endif
  .save         ()
);
// 例化时钟
zceiClockPort clockPort0(
    .cclock       (clk),
    .cresetn      (rstn)
);

在上面的wrapper中,我们可以看到实际上我们使用了两个uart_driver来连接我们的DUT,这两个uart_driver会和我们的C语言程序进行通信,而这个uart_driver的内容是加密的,我们也看不到具体的实现。


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

发表新评论