Verilog(语法基础)

逻辑值:

        逻辑0:表示低电平,对应电路中GND;

        逻辑1:表示高电平,对应电路中的VCC;

        逻辑X:表示未知,有可能是高电平,也有可能是低电平;

        逻辑Z:表示高阻态,是一个悬空状态。

数字进制格式:

二进制表示如下:4'b0101表示4位二进制数字0101

十进制表示如下:4'd2表示4位十进制数字2

十六进制表示如下:4'ha表示4位十六进制数字a

(因为计算机处理的二进制数据,所以最前面的数字始终表示二进制位宽,当前面没有指出位宽时('d2),默认32位;在没有指出进制时,默认十进制(100表示32位的十进制数字100))

16’b1001_1010_1010_1001中的下划线主要由于突出显示,增加可读性,下划线在程序编译中会被直接忽略

标识符(类似于C语言的变量),可以用于定义模块名、端口名、信号名等。

标识符可以是字母、数字、下划线和$的组合,但第一个字符必须是字母或者下划线,区分大小写

(不建议大小写混合使用例如首字母大写,普通内部信号建议小写)


数据类型:寄存器数据类型、线网数据类型和参数数据类型,其中真正在数字电路中起作用的数据类型是寄存器数据类型和线网数据类型。而参数数据类型是给编译器识别的。

寄存器数据类型:寄存器表示一个抽象的数据存储单元,通过赋值语句可以改变寄存器存储的值,寄存器数据类型的关键字为reg,默认初始值为不定制X,

以下为定义寄存器类型数据的示例          :reg [31:0] delay_cnt;

                                                                    reg           key_reg;

(其中[31:0]表示该数据的位宽为32位,必须遵从高位在前的写法,当没有写出具体位宽时,默认为1位)

reg类型的数据只能在always语句和initial语句中被赋值。

        如果该过程语句是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器;

        如果该过程语句描述的是组合逻辑,即always语句中不带有时钟信号,则该寄存器变量对应为硬件连线。

线网数据类型:表示的是结构实体(例如门)之间的物理连线,不能够存储值,它的值是有驱动他的元件所决定,即不需要给这类变量赋值

驱动线网类型变量的元件有门、连续赋值语句、assign等。

如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻Z

线网数据类型的关键字为wire和tri,最常用的是wire型,

以下为定义线网类型数据的示例                :wire[1:0] key_flag;

                                                                       wire       key1;

参数数据类型:该类型的数据其实就是一个常量,其关键字为parameter

以下为定义参数数据类型(常量,类似于#define)的示例                :

                                                  parameter H_SYNC        =        11'd41;

参数型数据类型常用于定义状态机的状态、数据位宽和延迟大小,在尝试不同参数对程序影响时有很大的便利性。在模块调用时,可以通过参数传递来改变被调用模块中已定义的参数。


运算符:        [/]:整除

                      [!]=:不等于

                       [!]:非

                        [&&]:与

                        [ || ]:或

                        [a?b:c] :a为真选b

                        [~]:按位非

                        [&]:按位与

                        [ | ]:按位或

                        [^]:按位异或

                        [<<]:左移,4'b1001<<2=6'100100;左移位宽会增加

                        [>>]:右移,4'b1001>>1=4'b0100;右移位宽不变,会抛弃最低位的数值

Verilog的关键字:

        module        :模块开始定义

        endmodule  :模块结束定义

        input            :输入端口定义

        output          :输出端口定义

        inout            :双向端口定义

        parameter    :信号的参数定义(常量宏定义)

        wire             :wire信号定义

        reg               :reg信号定义

        always         :产生Reg信号语句的关键字

        assign          :产生wire信号语句的关键字

        begin            :语句的起始标志

        end               :语句的结束标志

        edge/posedge/negedge:时序电路的标志

verilog的程序框架:

        verilog的基本设计单元时“模块”(相当于C语言中的函数),一个模块有两个部分组成,一部分描述接口,另一部分描述逻辑功能: module block(a,b,c,d);

                                                                        input a,b;

                                                                        output c,d;

                                                                assign c=a|b;

                                                                assign d=a&b;//功能定义

                                                                endmodule

其中[block]是模块名,[ (a,b,c,d) ]是端口定义,[input a,b; output c,d;]是IO说明

可综合模块能够得到一个由门级结构得到电路网表,可以生成物理电路;不可综合的模块可以用来做仿真语句

如果不指定数据类型,默认端口为wire类型的

功能定义部分有三种方法:

1、assign语句:描述组合逻辑

2、always语句:描述组合/时序逻辑

3、例化实例元件

上述三种逻辑功能是并行

(在always块中,逻辑是顺序执行的,而多个always块之间是并行的)

模块调用时,顶层模块和子模块之间的各相应信号的位宽要一致,子模块的输出信号一定要传给顶层模块中的wire型数据,不能是reg型

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Verilog是一种硬件描述语言,用于描述数字电路和系统的行为和结构。下面是Verilog语法基础知识: 1. 模块定义:Verilog代码由模块组成,每个模块都有一个名称和一个端口列表。模块定义的语法如下: ```verilog module 模块名(端口列表); // 模块内部的逻辑和行为描述 endmodule ``` 2. 端口定义:模块的端口定义包括输入、输出和双向端口。每个端口都有一个方向和一个名称。端口定义的语法如下: ```verilog input 输入端口名; output 输出端口名; inout 双向端口名; ``` 3. 信号定义:在Verilog中,信号可以是线网或寄存器。线网用于连接模块的不同部分,而寄存器用于存储数据。信号定义的语法如下: ```verilog wire 信号名; reg 信号名; ``` 4. 运算符:Verilog支持各种运算符,包括算术运算符、逻辑运算符、位运算符等。常用的运算符有加法运算符(+)、乘法运算符(*)、逻辑与运算符(&&)等。 5. 过程块:过程块用于描述模块的行为。常用的过程块有始终块(always)、组合逻辑块(assign)和分支块(case)。始终块用于描述时序逻辑,组合逻辑块用于描述组合逻辑,分支块用于描述多路选择。以下是一个始终块的例子: ```verilog always @(posedge 时钟信号) // 这里是时钟上升沿触发的逻辑 ``` 以上是Verilog语法基础知识。如果你想深入学习Verilog语法,可以参考更详细的教程或参考资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值