【FPGA项目】沙盘演练——基础版报文收发

这篇具有很好参考价值的文章主要介绍了【FPGA项目】沙盘演练——基础版报文收发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

                                        ​​​​​​​        ​​​​​​​        ​​​​​​​        第1个虚拟项目

前言

        点灯开启了我们的FPGA之路,那么我们来继续沙盘演练。

        用一个虚拟项目,来入门练习,以此步入数字逻辑的大门。

        Key Words:FIFO 、SOF 、EOF、计数器、缓存、时序图、方案设计

一、项目要求

  1. 输入报文长度64~2048字节;
  2. 输入报文之间最小间隔为两拍;
  3. 输出报文的前两拍添加16bit报文长度信息;第1拍为报文长度高8位;第2拍为报文长度低8位;第3拍开始为输入报文;

信号

I/O

位宽

描述

系统接口信号

i_sys_clk

I

1

系统时钟,125Mhz

i_rst_n

I

1

硬复位,低有效

输入接口信号

i_sop_in

I

1

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

i_eop_in

I

1

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

i_vld_in

I

1

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

i_data_in

I

8

输入报文数据

输出接口信号

o_sop_out

O

1

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

o_eop_out

O

1

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

o_vld_out

O

1

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

o_data_out

O

8

输出报文数据

输入接口时序

【FPGA项目】沙盘演练——基础版报文收发,FPGA项目篇,fpga开发

输出接口时序

【FPGA项目】沙盘演练——基础版报文收发,FPGA项目篇,fpga开发

二、项目方案设计

2.1项目需求

  1. 输出报文;
  2. 输出报文长度;
  3. 报文与报文长度输出满足时序要求;

2.2项目方案

1. 要求输出报文,且报文输出在报文长度输出之后,所以需要先对输入报文进行缓存,根据输入报文的位宽和长度范围,此处选择合适的同步FIFO即可;(如果是IC,那么就需要自己写FIFO,可以参考本博客的FIFO介绍)

        这里项目提出了第1个要求,掌握FIFO的使用。

2. 要求输出报文长度,所以需要对输入报文长度进行计数,并将其缓存;

        此处有坑,若只用寄存器对长度进行缓存,存在被后续报文长度覆盖的风险,故需要第2个FIFO对报文长度进行缓存。

3. 要求先输出报文长度然后紧跟着输出报文,此处需要对时序进行设计,需要掌握FIFO的读写时序,需要理解fpga的时钟沿采样。

        理解:时钟沿采样及数据下一时钟沿变化。

2.3项目代码

module zmj0001(
	input 			sys_clk,
	input 			rst_n,
	
	input			sop_in,
	input 			eop_in,
	input 			vld_in,
	input	[7:0]	data_in,
	
	output 			sop_out,
	output			eop_out,
	output			vld_out,
	output 	[7:0] 	data_out
	);

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

若需完整代码工程,FPGA项目沙盘演练-基础版报文收发(vivado2017.4)资源-CSDN文库

项目重难点:

  1. FIFO的使用及时序的设计
  2. 考虑包间隔2 clk cycle
  3. 考虑长包+超短包的情况

时序设计可以用TimingDesigner软件,简单易用,需要的可以下载。

​​​​​​​三、仿真验证

可以使用计数器来产生数据源data_in;

`timescale 1ns / 1ps

module zmj0001_tb();

reg					sys_clk				;
reg					rst_n				;
reg 	[7	:0]		data_in				;
reg					vld_in				;
reg					sop_in				;
reg					eop_in				;
reg		[11	:0]		cnt					;									
wire 				sop_out  			;
wire 				eop_out             ;
wire				vld_out             ;
wire 	[7:0] 		data_out            ;

initial
begin
	sys_clk		=	0;
	rst_n		=	0;
	#100
	rst_n		=	1;
end
always #5	sys_clk	=	~sys_clk;	//100Mhz
//用计数器来产生data_in
always @(posedge	sys_clk	or	negedge	rst_n)begin
	if(~rst_n)
		cnt				<=		12'b0;
	else if(cnt > 2048)
		cnt				<=		cnt;
	else
		cnt				<=		cnt	+	12'b1;
end
always @(posedge	sys_clk	or	negedge	rst_n)begin
	if(~rst_n)begin
		data_in			<=		8'b0;
		sop_in			<=		1'b0;
		eop_in			<=		1'b0;
		vld_in			<=		1'b0;
		end
	else begin
		data_in			<=		8'b0;
		sop_in			<=		1'b0;
		eop_in			<=		1'b0;
		vld_in			<=		1'b0;
		if((cnt > 'd10  &&   cnt  <=  'd60)|(cnt > 'd68  &&   cnt  <=  'd668))begin
			data_in		<=		data_in + 1'b1;
			vld_in		<=		1'b1;
			end
		if((cnt == 'd11)|(cnt == 'd69))
			sop_in		<=		1'b1;
		if((cnt == 'd60)|(cnt == 'd668))
			eop_in		<=		1'b1;
		if((cnt == 'd62) | (cnt == 'd63))begin  //63  66
			data_in		<=		data_in + 1'b1;
			vld_in		<=		1'b1;
			sop_in 		<= 		1'b1;
			eop_in 		<= 		1'b1;
			end
		
		end
end	


zmj0001		u_zmj0001(
	.sys_clk			(sys_clk   ),	
	.rst_n              (rst_n     ),
						 			
	.sop_in             (sop_in    ),
	.eop_in             (eop_in    ),
	.vld_in             (vld_in    ),
	.data_in            (data_in   ),
						 			
	.sop_out            (sop_out   ),
	.eop_out            (eop_out   ),
	.vld_out            (vld_out   ),
	.data_out           (data_out  )
	);

endmodule

        具体modelsim使用及与vivado的联合仿真,脚本编写请参考其他博文,后续FPGA其他专栏再考虑写相关内容。

        验证时重点关注边界情况

输入:

        共4包数据,长包+超短包+超短包+长包,包间隔均为2clk cycle

        data_in : 第1包:1-50的累加数;第2包:1;第3包:1;

【FPGA项目】沙盘演练——基础版报文收发,FPGA项目篇,fpga开发【FPGA项目】沙盘演练——基础版报文收发,FPGA项目篇,fpga开发【FPGA项目】沙盘演练——基础版报文收发,FPGA项目篇,fpga开发

输出:

【FPGA项目】沙盘演练——基础版报文收发,FPGA项目篇,fpga开发【FPGA项目】沙盘演练——基础版报文收发,FPGA项目篇,fpga开发【FPGA项目】沙盘演练——基础版报文收发,FPGA项目篇,fpga开发

若包间隔<2 clk?

输入:

【FPGA项目】沙盘演练——基础版报文收发,FPGA项目篇,fpga开发

输出:

【FPGA项目】沙盘演练——基础版报文收发,FPGA项目篇,fpga开发

可以看到,本设计甚至支持背靠背的超短包输入。

四、项目收获

  1. 方案设计的重要性:任何项目都是始于方案设计,前期需要花大量的功夫去理清思路,方案设计完成,代码实现只不过是水到渠成的事情。
  2. 仿真的学习:通过本项目,完成了testbench的编写,仿真验证,是对自己设计的一次检验,是实际项目缩短调试时间的最佳利器。
  3. 对xilinx IP的使用,对datasheet的阅读学习。
  4. 对时序的理解,时钟是FPGA的心跳:任何时序操作都是发生在时钟的跳变沿。当采样发生在当前上升沿时刻,数据变化是发生在下一时刻的上升沿。
  5. 绘画时序图,TimingDesigner的使用。有了时序图,代码就很容易实现了。

五、进阶考虑

本次虚拟项目旨在用最简单的例子带大家了解数字逻辑设计的一些基本概念,所以很多东西是没有考虑的。比如:

  1. 如果包间隔小于2个时钟周期怎么办? -----握手与反压
  2. 如果输入数据有错误怎么办? -----CRC校验
  3. 如果需要跨时钟域传输呢? -----CDC处理
  4. 报文只是简单转发,如果需要做处理呢?-----数据处理
  5. ...

所以,下一篇将沿着这个思路展开,进阶版的虚拟项目,同样可以作为公司的入职培训。

咱们下期见!文章来源地址https://www.toymoban.com/news/detail-696016.html

到了这里,关于【FPGA项目】沙盘演练——基础版报文收发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于QT做上位机开发,实现FPGA通过cyusb3014芯片完成数据的收发

    #任务要求: 要求用qt编写上位机程序,实现FPGA通过cyusb3014芯片完成数据的收发。下面是采用通过cypress并安装usb官方驱动的环境搭建,后续继续更新程序的编写。 一、安装nodejs ①下载地址:https://nodejs.org/en/ ①.1: 安装时,除了选择安装路径根据需要选择外,其他都可以默认

    2024年02月06日
    浏览(54)
  • FPGA高端项目:基于GTH的 4K HDMI 视频收发例程,提供工程源码和技术支持

    FPGA高端项目:基于GTH的 4K HDMI 视频收发例程,提供工程源码和技术支持 没玩过GT高速接口和4K 高清视频都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。GT资源是Xilinx系列FPGA的重要卖点,也是做高速接口的基础,不管是PCIE、SATA、MAC等,都需要

    2024年02月04日
    浏览(115)
  • FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+HLS图像缩放+多路视频拼接,提供4套工程源码和技术支持

    FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+HLS图像缩放+多路视频拼接,提供4套工程源码和技术支持 目前FPGA实现SDI视频编解码有两种方案:一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCrCb422,

    2024年03月26日
    浏览(54)
  • FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+纯verilog图像缩放+多路视频拼接,提供8套工程源码和技术支持

    FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+纯verilog图像缩放+多路视频拼接,提供8套工程源码和技术支持 目前FPGA实现SDI视频编解码有两种方案:一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCr

    2024年03月18日
    浏览(79)
  • FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+GTX 8b/10b编解码SFP光口传输,提供2套工程源码和技术支持

    FPGA高端项目:FPGA基于GS2971+GS2972架构的SDI视频收发+GTX 8b/10b编解码SFP光口传输,提供2套工程源码和技术支持 目前FPGA实现SDI视频编解码有两种方案:一是使用专用编解码芯片,比如典型的接收器GS2971,发送器GS2972,优点是简单,比如GS2971接收器直接将SDI解码为并行的YCrCb422,

    2024年03月23日
    浏览(46)
  • 攻防演练-组织沙盘推演的4个阶段.

    沙盘推演是在实战攻防演练的基础上,在攻击路线、攻击手段等 的有效性被证实的情况下,评估真实网络攻击可能对政企机构及公共 安全产生的影响,包括经济损失、声誉损失和社会影响等;同时,对 攻防过程中应急响应的有效性进行全过程评估。 传统的实战攻防演练更多

    2024年02月04日
    浏览(42)
  • FPGA设计实战演练.高级技巧篇-----读书笔记

    1、要求 ·对所有器件进行电源滤波,均匀分配电源,降低系统噪声。 ·匹配信号线,减小信号反射。 ·降低并行走线之间的串扰。 ·减小地反弹效应。 ·进行阻抗匹配。 2、微带传输布局,走线在PCB的顶层或底层,只有一个参考平面 3、带状传输线布局,走线在PCB内层,有两

    2024年02月14日
    浏览(35)
  • FPGA——串口收发

    常用的三大低速串口通信有UART,SPI,IIC。这里使用FPGA实现UART通信。UART通信只有两根线,一根是发送数据tx,一根是接受数据rx。PC和PFGA通过两个线实现数据通信。 完成FPGA部分的收发设计实现串口通信。 RS232 1、RS232 是 UART 的一种,没有时钟线,只有两根数据线,分别是 rx

    2024年02月15日
    浏览(45)
  • FPGA开发项目限时免费!

    在科技飞速发展的今日,FPGA(现场可编程门阵列)技术作为核心的支撑力量,在多个领域扮演着不可或缺的角色。而作为科技先锋的您,是时候把握时代机遇,成为这个高速成长领域的翘楚了! 为增加大家对FPGA的了解和认知,扎实职业技能,拓宽就业渠道。本次宸极教育特

    2024年02月04日
    浏览(48)
  • FPGA实现ESP8266驱动且进行数据包收发

    本次将使用正点原子的ESP8266 WIFI模块,来实现PC与FPGA之间的TCP通讯,其中ESP8266与FPGA之间的接口是UART。 模块实物图如下,到手就可以使用了,RST和IO_0两个IO口不接或者接高电平就可以了。 在使用之前,需要通过AT指令对模块进行配置,比如说是AP模式,还是STA模式。AP模式就

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包