首页 » 科学 » FPGA设计规范总结_模块_功效

FPGA设计规范总结_模块_功效

南宫静远 2025-01-08 08:39:56 0

扫一扫用手机浏览

文章目录 [+]

设计背景:系统以MCU+FPGA为架构,FPGA实现各种运用功能,MCU则实现对FPGA各种功能的管理与掌握;

一、架构设计规范

FPGA设计规范总结_模块_功效 FPGA设计规范总结_模块_功效 科学

a)MCU与FPGA内部功能模块的寄存器接口模块

FPGA设计规范总结_模块_功效 FPGA设计规范总结_模块_功效 科学
(图片来自网络侵删)

b)仿照数据源的数据测试模块(用于调试,测试,自检等)

c)数据回读掌握模块(从各个功能模块得等触发式的数据)

a)详细功能模块:

i.状态变量;

ii.命令变量;

iii.写数据变量;

iv.读数据变量;

v.事情状态:

vi.正常事情模式

vii.触发测试模式

二、IP调用规范

a)常用根本IP:基于FPGA内部RAM构建的DPRAM,FIFO,ROM等,基于内部乘法器构建的各种实数乘法器,复数乘法器,浮点等等;针对每种功能封装一个IP模块,接口参数则包含了该功能详细的类型;

b)功能IP:例如DDR3,SRIO,GTX,PCIE等,也封装成一个IP模块,接口参数尽可能的减少;

三、代码设计规范

a)设计必须文档化

b) 采取参数化设计,便于可移植

c)编码风格统一

d) 必要的注释解释

四、仿真测试规范

a)数据源的仿照(通过MATLAB天生仿真数据)

b)每个功能模块的仿真文件;

c)MCU的大略单纯仿照(以接口任务模式仿照)

五、时序约束规范

a)异步时序的约束;

六、版本管理规范

a)利用语法:SystemVerilog;

b)利用工具:开放前统一版本;

c)发行程序:开拓者自行管理;

d)发行程序的文档解释:记录当前版本的详细信息,及版本号管理

七、需求功能分解规范

a) 需求剖析:根据用户提交的需求解释文档,进行前期的功能剖析,验证 方案可行性

b) 详细设计:采取FPGA自顶向下设计,模块化分,接口定义

c) 子模块实现:每个模块配有相应的测试勉励

d) 测试验证:数据格式统一

八、 文档管理

a) 设计文档:

i:模块划分

ii:接口定义

iii:数据格式

iv:数据协议

v:算法设计及移植

vi:调试记录:硬件或软件存在的问题,及办理方案

b)需求文档:

c)变更解释文档:

d)版本解释文档:

九、 代码格式

1、 文件头 :

//===============================================================

//-- 名称 : MODULE_NAME

//-- 描述 : 功能总体描述

//--

//-- 作者 :

//-- 创建日期 :

//-- 修正 :

//-- 状态 :调试状态

//-- 版本号 :

//===============================================================

2、 模块命名:

模块名、模块例化名统一,例化名前加大写U_区分,多次例化另加标志 三者关系: 文件名 :XXX_Top.v

模块名 :与文件名相同

例化名 :U_模块名

3、 IP核的所有的模块名都要加IP名或者IP名简称作前缀,必须通过文 件封装后再利用

4、 端口定义的顺序:

按照 输入,输出,双向的顺序

5、 宏定义、参数定义用大写: `define SIMULATE parameter IDLE = 3’h0

6、 每个always模块前加一段注释,增加可读性

7、变量命名规范:基于含义命名,含义可分段(最多分三段),每一小段之间加下划线”_”,字符都小写,比如: tx_data_val

8、 每个文件代码函数最多200

9、 源文件的目录:顶层文件夹->功能文件夹->子功能文件夹->基本单元库

文件夹命名和文件名相同

10、 状态机采取一段式,状态采取parameter定义 parameter IDE = 4’h0;

11、 功能模块配个相应的.h文件,定义功能模块和子模块的一些参数变量

12、 把稳if else 、case 语句的条件完全性

if else 搭配利用,对付缺省的条件要写”else;”;

If else 的条件判别式要全面,比如if(a == 1’b0);

Case中的缺省条件要写”default”;

13、 begin end的利用

always 中,一定要用begin end 区分,格式和代码风格统一如下:

always @ (posedge clk or negedge rst_n)

begin

if (rst_n==1’b0)

syn_rst<= ‘DLY 1’b0;

else

begin

if (a==b)

begin

syn_rst<= ‘DLY 1’b1;

end

else

begin

syn_rst<= ‘DLY 1’b0;

end

end

end

14、文件内容举例如下图所示:

标签:

相关文章