• verilog之基本结构


    verilog语法的基本结构

    1、verilog的定义

    verilog,一种硬件描述语言,致力于提高数字电路,尤其是大规模数字电路的描述规范。从描述就可以看出,这个语言和C不同,不是高级语言。但是,这个语言也不像汇编。其本身能够完成许多高级语言的功能,比如判断、计算、选择等操作。这就容易让人误以为这是一门高级语言。其实,有人想将高级语言引入硬件设计的,只不过现在还没有成功。高级语言和硬件语言之间的差距还是比较大的。

    2、verilog的基本语法

    想学一门语言,自然要了解语法。对于高级语言来说,其本身源自人类的逻辑,所以学习者可以更具自身的逻辑来实现功能。但是对于硬件语言来说,必须掌握一套内在的规律才能设计。目前在学习了一些基本的verilog模块后,个人觉得初级的verilog语言遵循的就是信号。verilog实现了信号的输入,处理和输出。每一个信号都必须与设计相关联。对于无关信号编译器会自动排除并发出警告。与此同时,每一个信号都占用着实际的硬件资源,越少的信号使用,硬件的规模就会越小。verilog的语法原则就是信号正确。

    3、verilog的基本关键字

    想写verilog,首先要做的就是了解关键字,这是开始的材料。

    第一个就是module,用于声明硬件主体。在一个verilog代码中写一个module,并且模块名与文件名保持一致。加上endmodule就构成了一个闭合。这里类似与HTML中的标签。

    第二个就是input 和 output,前面提到verilog是以处理信号为目标的,那么就会有信号的声明。input和output就是声明这个模块的外部连接信号。当然,还有inout,这里就不做介绍。其他在内部声明的都是内部信号。

    第三个就是wire和reg,这部分则是信号的类别。和C语言中的数据类型类似,reg和wire是两种不同类型的变量。

    第四个就是assign和always,这两个就是信号的处理函数了,可以对应到C中的printf等等系统函数。

    有了这四个部分,实际上就可以设计出具有基本带你路功能的verilog代码了。

    4、verilog的基本设计

    verilog的设计,我个人习惯从信号的角度入手设计,通过实现描述信号的变化来设计。例如led灯闪烁就可以描述为一个周期变化的信号。依次执行事件1、2、3等就可以描述为状态机信号模型。这里实际上是对应到了数字设计的部分。利用verilog,完全可以设计出一个带有IO、计算器、控制器、存储器的小型处理器。当然,也可以按照事件的发生来设计,这里自己选择就好。

    还是附上一段简单的代码吧

    module mux(out, a, b, sel);
        input a, b, sel;
        output out;
        reg out;
        always @(a or b or sel)
            if (!sel) out = a;
            else out = b;
    endmodule

    上面的代码是描述了一个选择器。即sel=0,out=a,否则out=b。

    代码的设计大体的思路就是这样,尝试一下就可以快速的理解。

    5、仿真文件

    前面说的都是设计文件。但是verilog还有一个重要的作用就是数字仿真。学过数电就会知道,电路仿真在软件上实现时需要自己去找合适的激励,这一步不断的调整还是比较费力的。而对于使用verilog的设计而言,虽然可以综合为rtl级电路,但是仿真时不可能将其转化为原理图,这样太费时间了。对于大型项目来说,基本不可能。所以,既然激励源也是由电路构成的,自然而然可以使用verilog去描述。所以这里产生了仿真verilog文件。

    和设计时verilog语法不同,仿真时语法更为随意,不对应电路,会有许多系统函数可以使用。具体的设计还是要在实践中理解。

    插入一段代码:

    module RelationTest;
    reg a; reg [1:0]b; reg [5:0] c;
    initial begin
    a=1'b1; b=2'b00; c=6'b101001;
    $displayb({a, b}); //??3?b100
    $displayb({c[5:3], a}); // 4?b1011
    $displayb({4{a}}); // 4?b1111
    end
    endmodule

    这里就是仿真文件,可以看到设计中多了许多其他的语法。这些语法有时间再讲吧。这里就是了解一下代码结构。

  • 相关阅读:
    2-SAT
    模板 两次dfs
    SG函数与SG定理
    NIM博弈
    python 给小孩起名
    pytest 数据驱动
    pytest 结合selenium 运用案例
    字符串的转换方法与分割
    字符串的方法
    字符串常量池与字符串之间的比较
  • 原文地址:https://www.cnblogs.com/electricdream/p/12901032.html
Copyright © 2020-2023  润新知