欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Verilog学习:结构要求

程序员文章站 2024-03-26 08:34:41
...

基本要求:

1)Verilog HDL程序是由模块组成。模块嵌套在module和endmodule声明语句中。模块可以进行层次嵌套

2)每个Verilog HDL源文件中只有一个顶层模块,其他是子模块。每个模块一个文件

3)每个模块需要进行端口定义,并说明输入输出端口,然后对端口进行逻辑描述

4)模块中的时序逻辑部分在always块的内部,在always块内部只能对寄存器变量进行赋值

5)模块中对端口或其他wire型变量进行赋值,必须在always块的外部使用assign语句进行,通常是将寄存器的值送出

6)程序格式*,一行可以写几个语句,也可以一个语句分多行写

7)除了endmodule,begin——end,for-join语句之外,每个语句或者数据定义的最后必须有分号

8)可用/*....*/ 或者//...对程序进行注释,

 

模块

模块通常由端口定义、端口说明、信号类型、功能说明四个主要部分组成。

module ss(clk,a,b,c);//端口定义

input clk,a;//端口说明
ouput b;
ouput c;

reg c = 0;//信号类型说明
reg b;

//行为描述
assign c = clk; //阻塞赋值,按照语句顺序执行
[email protected](posedge clk)
begin
    b <= a;//非阻塞赋值,所有语句同时执行
end

endmodule

 

变量

线网型变量wire

除了特别声明,所有的输入输出默认是wire。wire主要是信号之间起到连接作用,用来构成信号的传递或者形成组合逻辑,需要在时序控制always块之外进行赋值,使用assign语句。

wire不保存状态,其值随时可以改变,不受时钟信号的影响。

寄存器类型reg

寄存器是数据存储单元的抽象,通过对寄存器的赋值语句可以改变寄存器存储的值。reg型数据通常用来表示时序控制always块内的指定信号,代表触发器,在时钟的有效边沿改变值。通常在设计中,always块通过使用行为描述语句来表达逻辑关系。在always块内部被赋值的吗,每一个信号都必须定义为寄存器的或者功能等同于寄存器型的变量

 

设计文件中。可以设置输入为wire,输出为reg或wire。。。只有输出通过assign语句赋值的时候才使用wire,一般可以使用reg

仿真文件相反,输入使用reg,输出使用wire.

相关标签: Verilog