0
点赞
收藏
分享

微信扫一扫

driver与monitor间的数据传输--UART

文章目录

uart发送数据(driver)

CPU通过APB总线给uart写入数据,将数据保存在TX_FIFO中,然后通过uart_driver将并行数据串行的发送到总线上。注意:发送时,应该符合uart的通信协议,在不发送数据时,sline.data应该保持高电平,当其拉低以后,表明数据传输开始。同时,数据传输应该根据波特率配置,并采用16倍频发送。具体可看uart波特率模块
在发送完前四个数据以后,后续5到8位的数据发送应该由LCR寄存器配置决定,紧接着发送奇偶校验位和停止位,停止位的位数也根据LCR配置。
部分代码如下:

// Start bit
        sline.sdata = 0;
        bitPtr = 0;
        bitPeriod;
        // Data bits 0 to 4
        while(bitPtr < 5)
          begin
            sline.sdata = pkt.data[bitPtr];
            bitPeriod;
            bitPtr++;
          end
        // Data bits 5 to 7
        if (pkt.lcr[1:0] > 2'b00)
          begin
            sline.sdata = pkt.data[5];
            bitPeriod;
          end
          ....
          ....

uart接受数据(monitor)

在monitor中,Uart接受到另外一个uart传输过来的串行数据,并将其存储到RX_FIFO中。在monitor中,有两个task,分别为数据接受和起始位检测。为了保证采样稳定可靠,必须在连续监测到8个低电平的sdata,才能真正表示数据开始发送。
起始位task代码如下:

task startBitErrorDetect;
 automatic integer i;
 automatic int startbit = 0;
   begin
     sbe = 0;
     s_char.sbe = 0;
     i = 0;
     while((sline.sdata == 1'b1) || (sline.sdata == 1'bx))
       @(posedge clk);
       startbit = 1;
     begin : startBitErrorDetect
       startbit = 99;
       while ((sbe != 1) && i<8)
         begin
           @(posedge sline.clk);
           if(sline.sdata == 1'b1)
             begin
               `uvm_warning("startBitErrorDetect", "False start bit detected")
               startbit = 88;
               sbe = 1;
               s_char.sbe = 1;
             end
             i++;//i<8, i++,当i=7即检测8个时钟沿时结束循环,表明这段时间的sbe均不为1,成功检测到起始位
             startbit = i;
         end
       if (sbe)
         forever
           @(posedge sline.clk);
      end : startBitErrorDetect
   end
endtask

数据接受的task中较为简单,和driver中相似,将driver串行发送过来的数据依次存入rxData中,需要注意的是,需要添加一个frame error位,当数据发送完时,停止位的电平应该拉高,否则拉高fe(frame error)。

repeat(8)
        @(posedge sline.clk);
      repeat(8)
        begin
          @(posedge sline.clk);
          if (sline.sdata == 1'b0)
            fe = 1;
        end

driver与monitor间的数据流如下图所示:
数据流

举报

相关推荐

0 条评论