Verilog学习:结构要求
基本要求:
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学习:结构要求
-
Python新手学习基础之循环结构——For语句 博客分类: Python python循环语句for遍历
-
二维码学习(一):概念篇 博客分类: 二维码 二维码概念二维码分类QRCode二维码符号结构二维码的优点和缺点
-
linux用while-until-for三种循环结构分别计算1+2+3...+100的值并输出----shell脚本初学习
-
oracle 递归查询 博客分类: 学习转贴 Oracle数据结构
-
数据库表结构空间学习
-
SQL学习笔记——表结构的修改
-
转载JfreeChart学习总结 jfreechartServlet数据结构WebJSP
-
ETCD 源码学习--Raft 协议实现的文件说明及 Raft 数据结构解析(三)
-
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法