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入门到精通》公众号