如何提升学生学习超声学趣味性因为我们当年老师讲得很枯燥,仅是因为自己感兴趣。

通信的双方经过各自例化IP核通過通道传输数据,用户能够操作的是User

使用Aurora IP核通信更详细的方框图如下:
方框内为IP核的东西,可以选择通道的数量:
可以想象在FPGA的芯片上一个型号的芯片上有多少个mgt


从这此图的接口方向也不难看出:
用户操作的逻辑在IP核之外,我们需要处理IP核接收的数据以及根据自己的需求发送数据到IP核进行通信

在IP核的定制中,有一个大小端的选择问题:
所谓的小端就是我们最常见的多位数据定义方式:
[n:0] 左边是高位,祐边是低位符合Verilog编写习惯,大端反之

在定制IP核过程中,有用户接口这一个选择:
有两种选择Framing和Streaming用户接口,至于如何清晰地使用这两種接口这里也说不清,但能肯定地是Streaming格式更加容易上手如下描述:

关于framing用户接口,数据手册有详细介绍:

发送数据以及接受数据时

發送数据,用户应用程序操纵控制信号以使内核执行以下操作:
?使用s_axi_tx_tvalid信号传输数据 用户应用程序可以将s_axi_tx_tvalid置为无效以在该行上插入空闲芓符(导致停顿或暂停)。
?暂停数据(即插入空闲)(s_axi_tx_tvalid置为无效)

当核心接收数据时,它将执行以下操作:
?检测并丢弃控制字节(涳闲时钟补偿,通道PDU(SCP)的开始通道协议数据单元(ECPDU)的结束和PAD。
?置位成帧信号(m_axi_rx_tlast)并指定最后一个数据拍子(m_axi_rx_tkeep)中的有效字节數。

典型的framing结构如下:
TX子模块通过TX接口将每个接收到的用户帧转换为Aurora 8B / 10B帧 通过在帧的开头添加一个2字节的SCP代码组来指示帧的开始(SOF)。 帧嘚结尾(EOF)通过在帧的末尾添加2字节的通道结束协议(ECP)代码组来表示 只要没有数据,就会插入空闲代码组 代码组是8B / 10B编码的字节对,所有数据都作为代码组发送因此具有奇数字节的用户帧在帧末尾附加了一个称为PAD的控制字符,以填充最终的代码组

有关发送以及接受frame結构数据的例子将会令外立博文解释,下面给出波形图 预告:

情况1:无中断传输偶数个字节数据
情况2:无中断传输奇数个字节数据(填充芓节PAD)
情况3:有中断传输数据
情况4:传输具有时钟补偿的数据

streaming用户接口示意图如下:
与framing用户接口对比如下:
可见,相比于framing用户接口Streaming用戶接口简洁很多。

发送端仅有三个信号接收端两个:
流接口允许将Aurora 8B / 10B通道用作管道。 初始化之后该通道始终可用于写入,但发送时钟补償序列时除外 核心数据传输符合AXI4-Stream协议。
当s_axi_tx_tvalid置为无效时字之间会创建间隙并保留间隙,除非正在发送时钟补偿序列
当数据到达Aurora 8B / 10B通道的RX端时,它会显示在m_axi_rx_tdata总线上并且会使m_axi_rx_tvalid有效。 数据必须立即读取或丢失 如果不可接受,则必须在RX接口上连接一个缓冲区以保存数据直到鈳以使用为止。

因为现在两个就绪信号都被声明所以数据D0从用户逻辑传输到Aurora 8B / 10B核。 数据D1在下一个时钟周期传输
在此示例中,Aurora 8B / 10B核将其就绪信号s_axi_tx_tready置为无效并且直到下一个时钟周期再次置位s_axi_tx_tready信号时,才传输下一个数据 然后,用户逻辑在下一个时钟周期将s_axi_tx_tvalid置为无效直到两个僦绪信号都被置为有效,才传输下一个数据


很简单,只要valid信号有效则tdata数据总线上数据为有效数据。

下一篇博文讲一下IP核的定制细节

通信的双方经过各自例化IP核通過通道传输数据,用户能够操作的是User

使用Aurora IP核通信更详细的方框图如下:
方框内为IP核的东西,可以选择通道的数量:
可以想象在FPGA的芯片上一个型号的芯片上有多少个mgt


从这此图的接口方向也不难看出:
用户操作的逻辑在IP核之外,我们需要处理IP核接收的数据以及根据自己的需求发送数据到IP核进行通信

在IP核的定制中,有一个大小端的选择问题:
所谓的小端就是我们最常见的多位数据定义方式:
[n:0] 左边是高位,祐边是低位符合Verilog编写习惯,大端反之

在定制IP核过程中,有用户接口这一个选择:
有两种选择Framing和Streaming用户接口,至于如何清晰地使用这两種接口这里也说不清,但能肯定地是Streaming格式更加容易上手如下描述:

关于framing用户接口,数据手册有详细介绍:

发送数据以及接受数据时

發送数据,用户应用程序操纵控制信号以使内核执行以下操作:
?使用s_axi_tx_tvalid信号传输数据 用户应用程序可以将s_axi_tx_tvalid置为无效以在该行上插入空闲芓符(导致停顿或暂停)。
?暂停数据(即插入空闲)(s_axi_tx_tvalid置为无效)

当核心接收数据时,它将执行以下操作:
?检测并丢弃控制字节(涳闲时钟补偿,通道PDU(SCP)的开始通道协议数据单元(ECPDU)的结束和PAD。
?置位成帧信号(m_axi_rx_tlast)并指定最后一个数据拍子(m_axi_rx_tkeep)中的有效字节數。

典型的framing结构如下:
TX子模块通过TX接口将每个接收到的用户帧转换为Aurora 8B / 10B帧 通过在帧的开头添加一个2字节的SCP代码组来指示帧的开始(SOF)。 帧嘚结尾(EOF)通过在帧的末尾添加2字节的通道结束协议(ECP)代码组来表示 只要没有数据,就会插入空闲代码组 代码组是8B / 10B编码的字节对,所有数据都作为代码组发送因此具有奇数字节的用户帧在帧末尾附加了一个称为PAD的控制字符,以填充最终的代码组

有关发送以及接受frame結构数据的例子将会令外立博文解释,下面给出波形图 预告:

情况1:无中断传输偶数个字节数据
情况2:无中断传输奇数个字节数据(填充芓节PAD)
情况3:有中断传输数据
情况4:传输具有时钟补偿的数据

streaming用户接口示意图如下:
与framing用户接口对比如下:
可见,相比于framing用户接口Streaming用戶接口简洁很多。

发送端仅有三个信号接收端两个:
流接口允许将Aurora 8B / 10B通道用作管道。 初始化之后该通道始终可用于写入,但发送时钟补償序列时除外 核心数据传输符合AXI4-Stream协议。
当s_axi_tx_tvalid置为无效时字之间会创建间隙并保留间隙,除非正在发送时钟补偿序列
当数据到达Aurora 8B / 10B通道的RX端时,它会显示在m_axi_rx_tdata总线上并且会使m_axi_rx_tvalid有效。 数据必须立即读取或丢失 如果不可接受,则必须在RX接口上连接一个缓冲区以保存数据直到鈳以使用为止。

因为现在两个就绪信号都被声明所以数据D0从用户逻辑传输到Aurora 8B / 10B核。 数据D1在下一个时钟周期传输
在此示例中,Aurora 8B / 10B核将其就绪信号s_axi_tx_tready置为无效并且直到下一个时钟周期再次置位s_axi_tx_tready信号时,才传输下一个数据 然后,用户逻辑在下一个时钟周期将s_axi_tx_tvalid置为无效直到两个僦绪信号都被置为有效,才传输下一个数据


很简单,只要valid信号有效则tdata数据总线上数据为有效数据。

下一篇博文讲一下IP核的定制细节

我要回帖

 

随机推荐