【Verilog】一、Verilog概述

文章目录

前言

一、简单的Verilog HDL模块

1.1 Verilog HDL程序

1.2 Verilog 语法小结

总结​​​​​​​


前言

        Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,是一种被用于数字逻辑电路设计的语言。用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。Verilog 模型可以是实际电路的不同级别的抽象,这些抽象的级别和它们所对应的模型类型共有以下五种:

        ① 系统级(system):用高级语言结构实现设计模型的外部性能的模型;

        ② 算法级(algorithm):用高级语言结构实现设计算法的模型;

        ③ RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理这些数据的模型;

        ④ 门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型;

        ⑤ 开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。

        一个复杂的电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或者激励信号源。利用Verilog HDL语言进行电路设计,可以对大型的复杂系统进行系统性地设计与仿真,相比于传统的原理图设计输入这种方式,在设计效率上有着很大地提升。到目前为止,Verilog 语言可以说是风靡全球,特别是在FPGA开发/IC设计领域占有绝对的领导地位。

一、简单的Verilog HDL模块

1.1 Verilog HDL程序

        下面是一个简单的Verilog HDL语言编写的程序,我们尝试这在代码的基础上去学习Verilog语法知识;

module decoder_3_8(
    input               a     ,//输入
    input               b     ,
    input               c     ,

    output reg [7:0]    out   //输出
);

always @(*)begin
    case({a,b,c})
        3'b000 : out = 8'b0000_0001;
        3'b001 : out = 8'b0000_0010; 
        3'b010 : out = 8'b0000_0100; 
        3'b011 : out = 8'b0000_1000; 
        3'b100 : out = 8'b0001_0000; 
        3'b101 : out = 8'b0010_0000; 
        3'b110 : out = 8'b0100_0000; 
        3'b111 : out = 8'b1000_0000; 
        default: out = 8'b0000_0000;
    endcase
end

endmodule

        这是一个简单的实现38译码器的程序,从这个程序中就可以看到很多的Verilog语法的运用。

       ① Verilog模块的定义:module与endmodule是成对出现的,同时也是一个Verilog程序的开头,这就相当于一个模块;当然一个代码段中也可以有多个module/endmodule模块,但是个人不建议这样写。

        ② 模块名:紧跟着module后面的就是这个模块的模块名了,这就是这个模块的身份证,例化引用这些都需要用到模块名;个人建议给模块起名做到读名知其意,即模块名最好和这个模块所实现的功能有一定的关系,不然时间久了自己都不知道这个模块是干什么的了!

        ③ 敏感列表:模块名后面括号里面的就是敏感信号了,两个敏感信号间用逗号隔开,这里共有4个敏感信号,在下面always @后面括号里面的也是敏感信号,*号代表对所有信号敏感。这里还定义了输入输出端口,这里也可以在敏感信号外进行端口定义,根据个人喜好而来。

        ④ 端口定义:input表示输入端口,output表示输出端口,inout表示双向端口(这里没有),端口定义还伴随这信号类型定义,信号类型主要有reg(寄存器型)和wire(线网型),端口信号没有定义信号类型时,默认为线网型,我们这里的输出就是寄存器类型的信号。

        ⑤ 位拼接:{a,b,c}表示将a,b,c进行位拼接,{}是位拼接符号,假如a,b,c的位宽均是一位,则{a,b,a}的位宽就是3位。

        ⑥ begin/end语句:相当于括号,当有两句语句一起执行时,需要加begin/end,如果只有一句,可加可不加。

        ⑦ case语句:case语句时一种多分支选择语句,是并行执行的。

1.2 Verilog 语法小结

          ① Verilog HDL程序是由模块构成的。每个模块的内容都是嵌在module和endmodule两个语句之间。每个模块实现特定的功能,模块是可以进行层次嵌套的。

        ② 每个模块要进行端口定义,并说明输入输出端口,然后对模块的功能进行行为逻辑描述。

        ③ Verilog HDL程序的书写格式自由,一行可以多谢几个语句,一个语句也可以分写多行。

        ④ 除了endmodule语句外,每个语句和数据定义的最后必须要有分号。

        ⑤ 可以用/*.....*/和//......//对Verilog HDL程序的任何部分注释。一个好的,有使用价值的程序都应答加上注释,以增强代码的可读性和可维护性。

总结

        这里通过一个简单的Verilog HDL程序对Verilog语法进行了简单的讲解,但这只是Verilog语法的一小部分,更多的语法知识我会一一分享,若有讲得不对的地方还望各位大佬指出,后续我也会进行更新改正!

猜你喜欢

转载自blog.csdn.net/weixin_62912626/article/details/127734495