FPGA 入门到精通系列2:verilog基础2-verilog代码规范

一、项目架构设计

FPGA设计是采用自顶向下,模块化设计的方式,这样便于仿真调试。

FPGA项目架构设计.png

注:特别是在整体架构的基础上,能把整体的数据流向和控制逻辑梳理清楚,这样实现起来就很容易。

注意:Verilog是硬件设计语言,跟软件设计有本质区别

二、模块架构设计

基本原则:控制逻辑和数据逻辑分开处理

模块结构设计.png

三、模块接口设计

1、模块定义

主要包括5个部分:端口定义、参数定义(可选)、输入输出接口、内部信号说明、功能定义。

module module_name#(

   parameter WIDTH = 10;

)(

   input wire clk,

   input wire reset,

   input wire start_i,

   input wire valid_i,

   input wire [WIDTH - 1:0] data_i,

   output reg done_o,

   output reg [WIDTH - 1:0] data_o

);

 ........

enmodule

2、接口时序设计

模块与模块之间的通过接口通信的,所以接口时序规范非常重要。


接口时序.png

3、模块输入输出接口规范

(1)考虑时序的要求,注意不允许组合电路输出,需要使用寄存器输出。

(2)接口命名规范

 命名必须见名知义,采用英文单词命名,可以使用“[a-z、A-Z、_、0-9]   大小写字母、数字、下划线”表示,注意不能以数字开头。
image.png

4、代码设计规范

(1)不使用初始化语句;

(2)不使用延时语句;

(3)不使用循环次数不确定的语句,如:forever,while等;

(4)尽量采用同步方式设计电路;

(5)尽量采用行为语句完成设计;

(6)always过程块描述组合逻辑,应在敏感信号表中列出所有的输入信号;

(7)所有的内部寄存器都应该可以被复位;

(8)用户自定义原件(UDP元件)是不能被综合的。

5、命名规范

(1)顶层文件名命名:对象+功能+top,如video_oneline_top

(2)逻辑控制文件命名:对象+ctr,如:ddr_ctr.v

(3)参数文件命名:对象+para,如lcd_para.v

(4)程序注释说明:如“//”或者“/.../”

(5)时钟信号命名:对象+功能+特性,如phy_txclk

(6)计数器命名:对象+cnt+r,如line_cnt_r

(7)复位信号命名:高电平有效:reset,低电平有效:reset_n

—————————————————————————————

以上内容是verilog代码规范的总结,希望各位读者能有所收获,谢谢。

码字不易,如果大家觉得不错,请收藏点赞。

如果需要学习更多FPGA相关的知识,请大家关注《FPGA入门到精通》公众号

你可能感兴趣的:(FPGA 入门到精通系列2:verilog基础2-verilog代码规范)