【FPGA项目】进阶版沙盘演练——报文收发(报文处理、CDC、CRC)

前言

        书接上文【FPGA项目】沙盘演练——基础版报文收发_子墨祭的博客-CSDN博客,前面我们做了基础版的报文收发,相信对逻辑设计有了一定的认知,在此基础上,继续完善一个实际报文收发可能会遇到的一些处理:

  1. 报文处理
  2. 握手与反压
  3. 跨时钟域处理CDC
  4. CRC校验

一、项目要求

        从上游模块接收报文数据,对报文中的数据进行CRC校验,生成CRC8校验码并附在报文后,随数据输出发送给下游模块。注意,接收与发送为两个时钟域,所以需要异步FIFO进行跨时钟域处理。

1.1 接口时钟

接收(与上游模块接口)时钟频率:180MHz

发送(与下游模块接口)时钟频率:200MHz

1.2 接口时序

输入时序:

【FPGA项目】进阶版沙盘演练——报文收发(报文处理、CDC、CRC)_第1张图片

输出时序:

【FPGA项目】进阶版沙盘演练——报文收发(报文处理、CDC、CRC)_第2张图片

1.3 接口信号

信号

I/O

位宽

描述

系统接口信号

clk_in_180

I

1

系统时钟,180Mhz

rst_n_180

I

1

硬复位,低有效

clk_out_200

I

1

系统时钟,200Mhz

rst_n_180

I

1

硬复位,低有效

与上游模块接口信号

sop_in

I

1

输入报文头指示信号,高有效

eop_in

I

1

输入报文尾指示信号,高有效

vld_in

I

1

输入报文数据有效信号,高有效

din_rdy

O

1

可以接收上游模块报文的指示信号,高有效

data_in

I

8

输入报文数据

与下游模块接口信号

sop_out

O

1

输出报文头指示信号,高有效

eop_out

O

1

输出报文尾指示信号,高有效

vld_out

O

1

输出报文数据有效信号,高有效

data_out

O

8

输出报文数据

dout_rdy

I

1

下游模块可以接收报文的指示信号,高有效

1.4 数据格式

1.输入数据格式:

【FPGA项目】进阶版沙盘演练——报文收发(报文处理、CDC、CRC)_第3张图片

输入数据的第一拍(sop)为报文参数head[2:0],指示报文前面有多少bit数据是无效的,即:

Head =0  : 第一行数据全部有效(0 bit无效);

Head =1  : 第一行数据最低bit无效(1 bit无效);

...

Head =7  : 第一行数据最高位有效(7 bit无效);

2.CRC校验前的数据格式:

【FPGA项目】进阶版沙盘演练——报文收发(报文处理、CDC、CRC)_第4张图片

在做CRC校验之前,需要将无效bit清除,替换为0;

并且参数(head)不参与CRC校验。

3.输出数据格式:

【FPGA项目】进阶版沙盘演练——报文收发(报文处理、CDC、CRC)_第5张图片

输出数据要求向前对齐,将CRC校验码附在报文之后,并且在末尾填充0以补足8bit。

二、项目方案设计

2.1功能分解

通过前面的描述,我们可以将功能分解为以下几块:

  1. 报文处理,包括接收的格式处理,输出的格式处理;
  2. CRC校验,这里我们使用并行的CRC8算法
  3. 跨时钟域处理,这里我们使用异步FIFO
  4. 握手与反压,上个项目只是规定了包间隔>2clk cycle,但是发送方不遵守咋办?这里就需要一个反压信号,在你能接收的时候才打开使能。

2.2系统框图

【FPGA项目】进阶版沙盘演练——报文收发(报文处理、CDC、CRC)_第6张图片

问:CRC在FIFO之后可以吗?

2.3项目代码

方案写的这么清楚了,代码还不是分分钟拿捏?

当然这不是唯一的设计方案,可以先自行考虑设计及验证。

若需完整代码工程,后续再补充。

三、工程仿真

对激励数据做CRC校验,然后与系统输出进行比数,完全匹配则通过。

四、项目收获

  1. 方案设计的重要性:任何项目都是始于方案设计,前期需要花大量的功夫去理清思路,方案设计完成,代码实现只不过是水到渠成的事情。
  2. 仿真的学习:通过本项目,完成了testbench的编写,仿真验证,是对自己设计的一次检验,是实际项目缩短调试时间的最佳利器。
  3. 对时序的理解,时钟是FPGA的心跳:任何时序操作都是发生在时钟的跳变沿。当采样发生在当前上升沿时刻,数据变化是发生在下一时刻的上升沿。
  4. 绘画时序图,可以使用https://wavedrom.com/editor.html  (每个模块的信号都可以画出时序图,便于代码设计及调试)

后记

        这个算是一个标准的完备的数字逻辑设计虚拟项目学习。可以为我们系统设计奠定一个基础。

        后续我们将进行实际项目演练。

        咱们下期见~

你可能感兴趣的:(FPGA项目篇,fpga开发,Verilog)