【精选】Verilog基本知识汇总

您所在的位置:网站首页 不可综合成为电路的verilog模块有何作用 【精选】Verilog基本知识汇总

【精选】Verilog基本知识汇总

2023-10-21 23:55| 来源: 网络整理| 查看: 265

目录

1、Verilog HDL基本知识

1.1 Verilog HDL的抽象级别

1.2 Verilog HDL 最重要的基本概念

1.3 Verilog HDL 基本设计单元

2、Verilog基本知识  

3、数据类型

3.1 寄存器数据类型

3.2 线网数据类型

3.3 参数类型

4、运算符

5、Verilog关键字

6、Verilog语句

6.1 块语句

6.2 条件语句

6.3 循环语句

6.4 结构说明语句

6.5 赋值语句

6.6 功能定义语句

6.7 任务和函数语句

7、常用函数

1、Verilog HDL基本知识 1.1 Verilog HDL的抽象级别

        1.系统级:用于对待设计模块的描述和功能的验证。

        2.算法级:实现算法运行的模型。

        3.RTL级:描述数据如何在寄存器间流动、传输的模型。

        4.门级:描述逻辑门如何连接的模型。

        5.开关级:描述器件模型。

1.2 Verilog HDL 最重要的基本概念

        并行性、层次结构性、可综合性       

1.3 Verilog HDL 基本设计单元

基本设计单元是模块(Block),类比C语言中的函数。 模块由两部分组成,一部分描述接口,一部分描述逻辑功能, 每个Veirlog程序包括端口定义、IO说明、内部信号说明、功能定义。

// 模块名(端口定义); module block(a,b,c,d); //IO说明 input a,b; output c,d; /************************************************ 1.未说明类型就是wire类型,reg类型定义为: output reg [3:0] led //在位宽之前加reg 2.端口定义和IO说明可以放在一起,例如 module led( input sys_clk , //系统时钟 input sys_rst_n, //系统复位,低电平有效 output reg [3:0] led //4 位 LED 灯 ); ************************************************/ //内部信号说明就是只在此模块内部使用的一些信号,不是输入输出 /************************************************ 功能定义:3种方法: assign描述组合逻辑 always描述组合/时序逻辑 例化示例元件 例如 and #2 u1(q,a,b) 3种逻辑功能是并行的 ************************************************/ //assign 给wire类型赋值 assign c = a|b; assign d = a&b; endmodule

        Verilog 语法中的模块例化。

        FPGA 逻辑设计中通常是一个大的模块中包含了一个或多个功能子模块,Verilog 通过模块调用或模块实例化来实现这些子模块与高层模块的连接。【把系统划分为几个模块,每个模块对应一个module,一个module一个Verilog程序文件。顶层模块只做例化(调用其它模块),不做逻辑。】

2、Verilog基本知识  

逻辑值

0:低电平,即GND1:高电平,即VCCX:未知,可能是高可能是低Z:高阻态,悬空,即三态门的0开关下的输出

数字进制

        数字的表示:

         (位宽默认为系统位宽,进制默认十进制)

        进制:  二进制binary 八进制octonary 十进制decimalism 十六进制hexadecimal

        x不定值  z/?高阻值

        负数: -8'd10 写在最前面

        二进制表示:4’b0101,即四位二进制数0101         八进制表示:4’o7,即四位八进制数7         十进制表示:4’d2,即四位十进制数2(0101)         十六进制表示:4’ha,即四位十六进制数a(二进制1010)         注意:前面的4表示是的实际的位宽,如果没有指定,默认的是32位的位宽。可以在数之间加入下划线,如16’b1001_1010_1010_1001以增加可读性。

标识符

        用于定义模块名,端口名,信号名,由字母、数字、$和_(下划线)组成,第一个字符必须是字母或者下划线,区分大小写。         不建议大小写混合使用,普通内部信号建议全部小写,参数定义建议大写。         采用一些前缀或后缀,比如:时钟采用 clk 前缀:clk_50m,clk_cpu;低电平采用_n 缀:enable_n;

3、数据类型

        主要有三种:寄存器数据类型、线网数据类型、参数数据类型

3.1 寄存器数据类型

        寄存器数据类型:表示一个抽象的数据存储单元(类似于寄存器),关键字是reg,默认的初始值是X,定义方法是:

//reg define reg [31:0] delay_cut; //32位寄存器 reg key_reg; //默认位宽为 1 reg类型的数据只能在always语句和initial语句中被赋值,不能够给予初始值如果语句描述的是时序逻辑电路,那么always语句将带有时钟信号,则该寄存器变量相当于一个触发器如果语句描述的是组合逻辑电路,那么always语句不带有时钟信号,则该寄存器变量相当于一条硬件连接线 3.2 线网数据类型

        线网数据类型:表示结构实体之间的物理连线,不能够存储值,他的值是由它所连接的元件所控制的,只是一条连接线。关键字包括wire型和tri型,最常用是wire。默认是高阻态Z。

//wire define wire data_en; //数据使能信号 wire [7:0] data ; //数据 3.3 参数类型

        参数数据类型:实际上就是一个常量,用parameter定义(类似C语言中的define),右边必须有一个常量表达式。可以一次定义多个参数,但参数与参数之间需要用逗号隔开。

//parameter define parameter DATA_WIDTH = 8; //数据位宽为8位 //可以[DATA_WIDTH : 0]只修改参数值来修改位宽

        参数型数据用于定义状态机的状态、数据位宽和延迟大小等,在模块调用时可以通过参数传递来改变调用模块中已定义的参数。

4、运算符

        ①算术运算符(+,-,*,/,%): Verilog 实现乘除比较浪费组合逻辑资源,尤其是除法。所以 2 的指数次幂的乘除习惯用移位,非 2 的指数次幂的乘除调用现成的 IP。

+:a+b,表示相加-:a-b,表示相减*:a乘以b,表示相乘/:a除以b,表示整除%:a%b,表示取余

        ②关系运算符(>,=,:a>b,表示a大于b=b,表示a大于等于b



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3