Verilog HDL编程方法

Verilog HDL是硬件描述语言的一种,使用Verilog HDL编写代码实际是绘制数字电路。

Verilog HDL基本语法:

1、模块Module:基本设计单元

一个模块由两部分组成:一部分描述接口;一部分描述逻辑功能,即定义输入是如何影响输出的。

Verilog HDL语法结构完全嵌入在module和endmodule声明语句之间,每个verilog HDL程序包含4个主要部分:端口定义、输入/输出IO说明、信号类型声明和功能描述。
○ 模块的端口定义:格式如下:
Module 模块名(端口1,端口2,端口3,端口4,……)
○ 模块内容:包括输入/输出IO说明、信号类型声明和功能描述。
○ I/O说明格式:
输入端口:input 端口1, 端口2, …
输出端口:output 端口1,端口2,….
输入/输出双向:inout 端口1,端口2,….
○ 信号类型声明:说明逻辑描述中所用信号的数据类型。
例如:reg[7:0] out; // 定义out的数据类型化为8 bit的reg型。
对于端口信号的默认定义类型为wire(连线)型。
○ 功能描述:主要是描述电路所实现的功能。
有3种方法可在模块中描述逻辑功能。
i. assign声明语句:比如:assign a = b && c;
ii. 实例元件:比如 and and_inst(.q(q), .a(a), .b(b));
iii. always声明语句:最常用方法,即可用于描述组合逻辑也可描述时序逻辑。

2、Verilog HDL语法基本要素

○ 标识符:可以是任意一组字母、数字、$符号和_下划线符号的组合,但第一个字符必须是字母或者下划线。标识符区分大小写。关键词必须是小写的。
○ 注释:单行/多行注释 /* */ // 在本行结束
○ 系统任务和函数:以$字符开始的标识符。任务提供一种封装行为的机制,这种机制可在设计的不同部分被调用。任务可以返回0个或多个值,函数只能返回一个值。比如:

 $ time
 $ display ("Welcom to FPGA world!!!");

○ 编译指令:以’(反引号)开始的某些标识符是编译器指令。比如:

'include
'timescale:将时间单位与实际时间相关联,用于定义时延的单位和时延精度。格式如下:
'timescale time_unit/time_precision
'define, 'undef:define宏定义一般用于定义数据位宽。
'ifdef, 'else,, 'endif

○ 格式:区分大小写,自由书写格式:结构可跨越多行编写,也可在一行内编写。

3、数据类型及常量、变量

○ Verilog HDL语法中共有19种数据类型,最基本的3种数据类型:parameter型、reg型和wire型。
○ 常量:
(1)数字–整数:<位宽><进制><数字> 例如:8’b01010000 或者 8’b0101_0000
(2)数字–x和z:x表示不定值,z/?表示高阻值。比如:4’b011z //最低位为高阻z
(3)数字–负数:在位宽表达式前加一个减号,必须写在数字定义表达式的最前面,比如:- 8‘ d5
(4)parameter常量:符号常量,parameter型数据是一种常数型的数据,格式如下:
parameter 参数名1=表达式,参数名2=表达式,…..,参数名n=表达式;
示例:parameter msb=7;
注:parameter用于参数定义,常用于状态机状态定义、参数常量定义或者模块端口参数化传递。

○ 变量:主要有线型(wire)和寄存器型(reg)两种。
(1)线型(wire):表示硬件资源中的连线资源,常用来表示以assign语句赋值的组合逻辑信号,可以用作任何表达式的输入。
定义形式:
wire 数据名;
wire[n:1] 数据名;
wire[n-1:0] 数据名;
(2)寄存器型(reg):表示硬件资源中的寄存器资源,智能在always,initial中赋值。
定义形式:
reg 数据名;
reg[n:1] 数据名;
reg[n-1:0] 数据名;
示例: reg [3:0] counter_reg5; // 计数寄存器定义

4、运算符和表达式

○ 算术运算符、逻辑运算符、关系运算符、位运算符、等式运算符、缩减运算符、条件运算符、位拼接运算符{}
○ 赋值语句:
(1)阻塞赋值语句“=”:阻塞赋值表示只要源信号发生变化,目标信号就立刻完成赋值操作。可用在assign和always语句中。
(2)非阻塞赋值语句“<=”:非阻塞赋值表示的是该语句结束时完成赋值操作,只能用在always语句中。
○ 条件语句:必须在always语句内使用。
(1)if-else语句:与C语言类似
(2)case语句:case、casex、casez
(3)结构描述语句always与assign:Verilog HDL语法中最重要的逻辑功能定义语句。
§ always语句:用于对reg型的变量赋值。always语句既能表述时序逻辑也能描述组合逻辑。

    基本格式:
    always @ (<敏感信号列表>)
    begin
        各种语句;
    end
用法介绍:
[1] 敏感信号列表:当该表达式的值发生变化时,就会执行一遍内部所有的语句。多个信号之间用“or”连接。
“*”表示敏感信号列表中的所有信号。
[2] 关键词posedge 与 negedge:
posedge clk:表示在时钟信号的上升沿;negedge clk:表示在时钟信号的下降沿。
[3] begin与end块描述语句:用来表示同一优先级的语句的集合,作用相当于C语言中的{ }。
    用Verilog HDL来设计电路,首先必须知道哪些操作是并行执行;哪些操作是顺序执行的。
    begin与end语句之间的所有语句是顺序执行的。
    在一个module中,所有语句之间是并行执行的。
§ assign语句:  用于对wire型变量赋值。assign语句既能描述组合逻辑又能拼接数据。

○ generate语句:允许细化时间的选取或者某些语句的重复。这些语句包括模块实例引用语句、连续赋值语句、always语句、initial语句和门级实例引用语句等。
○ 函数function和循环语句for:
(1)函数定义:

function <返回值位宽> 函数名;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
端口声明;
局部变量定义;
其他语句;
endfunction

(2)循环语句:for(初始表达式;条件表达式;步进表达式)

5、从硬件角度理解Verilog HDL语法:

用Verilog HDL设计硬件电路时,最重要的一点是要知道所设计的Verilog HDL代码对应的硬件结构。

在FPGA和CPLD中,主要的硬件资源分为连线资源和寄存器资源,所以使用assign与always语句、if与case语句、阻塞与非阻塞赋值语句就可以实现大部分硬件功能。

可综合语法:可以被编译器识别,并综合成具体硬件电路的语法。
不可综合语法:大部分编译器不能识别,也不能综合成具体硬件电路的语法。
(1)initial语句:给信号赋予初值。
(2)while语句:循环执行
(3)forever语句:永远执行所包含的所有语句。
(4)repeat语句:将所包含的语句执行“循环次数表达式”所表示的次数;
(5)运算符乘法、除法和%
(6)延时符号#:格式:信号1 <= #n 信号2 将信号2延时n个时间单位再赋给信号1。
(7)任务task:
注:为了达到可靠的设计,建议在具体的项目设计中只使用可综合语法。

思考:
1、循环语句for综合成硬件的结构是什么?—->多个并行的硬件实例
2、函数function综合成硬件的结构是什么?—->独立的组合逻辑电路

6、Verilog HDL模块调用

Verilog HDL模块也可用Verilog HDL进行例化。
FPGA模块例化就是函数调用,FPGA子模块类似C语言的子函数。

7、Verilog设计层次与风格

Verilog是一种能够在多个层级对数字系统进行的语言,Verilog模型可以是实际电路不同级别的抽象,这些抽象级别可分为以下5级:
(1)系统级:比如case语句;
(2)算法级:比如与或非逻辑运算;
(3)寄存器传输级RTL;
(4)门级:利用逻辑门来构筑电路模型;
(5)开关级:主要是描述器件中晶体管和存储节点以及它们之间的连接关系。


本博文只能阅读,谢绝转载,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2963033731@qq.com

文章标题:Verilog HDL编程方法

字数:2.2k

本文作者:Soaring Lee

发布时间:2025-01-19, 16:00:00

最后更新:2025-01-19, 16:48:05

原始链接:https://soaringleefighting.github.io/2025/01/19/【FPGA系列】Verilog HDL编程方法/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏

相册