verilong 学习笔记(1)概述

verilong 学习笔记(1)=>概述

  • 概述

    verilong程序是由模块构成的。内容都嵌入在module和endmodule两个关键词之间;每个模块实现特定的功能。

    每个模块都需要进行端口定义,并说明输入和输出口(input、output或inout),然后对模块的功能进行定义。

    除了endmodule等少数语句外,每个语句的最后必须有分号。

    一行可以写几个语句,一个语句可以分多行写。

    注释可以用/*和//,同c语言。

    verilong的关键字必须小写,其他字符区分大小写,输入程序要注意。

  • 模块声明

    模块声明包括模块名字,模块输入、输出端口列表。定义格式如下:

    module 模块名(端口1,端口2,端口3,…);

  • 端口定义

    对模块的输入输出端口要明确说明,其格式为:

    input 端口名1,端口名2,…端口名n;//输入端口

    output 端口名1,端口名2,…端口名n;//输出端口

    inout 端口名1,端口名2,…端口名n; //输入输出端口

  • 信号类型声明

    • 对模块所用到的所有信号(包括端口信号、节点信号等)都必须进行数据类型的定义。

      verilong语言提供了各种信号类型,分别模拟实际电路中的各种物理连接和物理实体

    • 如果信号的数据类型没有定义,则综合器将其默认为wire型

  • 逻辑功能定义

    • 模块中最核心的部分是逻辑功能定义。

    • 定义逻辑功能的几种基本方法:

      • assign持续赋值语句定义

        assign语句多用于组合逻辑的赋值,成为持续赋值方式。若干连续赋值语句是并列执行与顺序无关

      • always过程块定义

        always过程语句既可以用来描述组合电路,也可以描述时序电路。过程块反复依据条件执行,相当无限循环执行。多个always过程块并行执行,与顺序无关

      • 调用元件(元件例化)

        调用元件的方法类似于在电路图输入方式下调入图形符号来完成设计,这种方法侧重于电路的结构描述

    • 以上逻辑功能混合使用时,他们都是并行执行的。

  • verilong模块的模板

    module <顶层模块名>(<输入输出模块列表>);
    output 输出端口列表;		//输出端口声明
    input  输入端口列表;		//输入端口声明
    /*定义数据,信号的类型,函数声明*/
    reg 信号名;
    //逻辑功能定义
    assign <结果信号名>=<表示式>;	//使用assign语句定义逻辑功能
    //用always块描述逻辑功能
    always @ (<敏感信号表达式>) begin
        //过程赋值
        //if-else, case语句
        //while, repeat, for循环语句
        //task, function调用
    end
    //调用其他模块
    <调用模块名module_name><例化模块名>(<端口列表port_list>);
    //门元件例化
    门元件关键字<例化门元件名>(<端口列表port_list>);
    endmodule
    
  • 组合逻辑电路与时序逻辑电路特点

    • 组合逻辑电路:电路任意时刻的输出状态只由该时刻各输入状态组合决定,而与电路原本状态无关。
    • 时序逻辑电路:电路的任意时刻的输出状态不仅取决于该时刻的输入状态,还与电路的原状态有关。所以时序电路都有记忆功能
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页