【FPGA】学习笔记—{Verilog}—{一、Verilog设计初步}

1.1 Verilog简介

   Verilog是一种硬件描述语言。
   Idea→行为级描述→RTL描述→门(Gate)级网表→物理版图

1.2 Verilog模块的结构

1.2.1 Verilog程序的特点

  1. ●Verilog程序的基本设计单元是“模块”(module);
    ●每个模块的内容都嵌在moduleendmodule之间;
    ●每个模块实现特定的功能。
  2. ●每个模块首先要进行端口定义;
    ●并说明输入和输出口(inputoutputinout);
    ●再对模块的功能进行定义。
  3. ● 除endmodule等少数语句外,每个语句的最后必须有分号 。
  4. 注释:
    //······
    /*······*/

1.2.2 Verilog程序的4个主要部分

 1、模块声明

  1、模块声明包括:模块名字,模块输入、输出端口列表。
  2、格式:

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

  3、模块结束的标志为关键字 endmodule

 2、端口(Port)定义

  1、端口分类:

端口是模块与外界连接和通信的信号线

   ● input:输入端口
   ● output:输出端口
   ● inout:双向端口
  2、格式:

input     端口名1,端口名2,…………端口名n;  //输入端口 
output    端口名1,端口名2,…………端口名n;  //输出端口 
inout     端口名1,端口名2,…………端口名n;  //双向端口 

  3、注意:!!!
   ● 每个端口需要进行端口类型声明(输入、输出还是双向端口)和数据类型声明(wire型、reg型还是其他类型)
   ● 输入和双向端口不能声明为寄存器型
   ●在测试模块中不需要定义端口。

 3、信号类型声明

   ●模块中所有用到的信号(包括端口信号、节点信号等)都必须进行数据类型的定义。
   ●Verilog语言提供的各种信号类型,分别模拟实际电路中的 各种物理连接和物理实体。
   ●若信号的数据类型没有定义,则综合器将其默认为是wire型。
   ●在Verilog-2001标准中,规定可以将端口声明和信号类型声明放在一条语句中完成。
   ●端口声明和信号类型声明可以都放在模块列表中,而不是模块内部。

 4、逻辑功能定义

  1、用assign持续赋值语句定义。
   ●assign语句一般用于组合逻辑的赋值,称为持续赋值方式
   ●格式:assign 结果信号名=表达式;
   例:assign f=~((a&b)|(~(c&d)));
  2、用always过程块定义。
   ●格式:

扫描二维码关注公众号,回复: 11251634 查看本文章
always @(敏感信号列表)
	begin
		//过程赋值
		//if-else,case语句;for循环语句
		//task,function调用
	end

   ●例:见 描述3,4

  3、调用元件(元件例化)。
  
  
  

   F = a b + c d F=\overline{ab+\overline{cd}}
在这里插入图片描述
用Verilog对该电路描述:
描述1:

module aoi(a,b,c,d,f);         //模块名为aoi,端口列表a,b,c,d,f
input a,b,c,d;                 //模块输入端为a,b,c,d
output f;                     //模块输出端为f
wire a,b,c,d,f;               //定义信号的数据类型 
assign f=~((a&b)|(~(c&d)));   //逻辑功能描述
endmodule

描述2:

module aoi                   //将端口类型和信号类型的声明都放在模块列表
		(input  wire a,b,c,d,   //在Verilog-2001标准中,规定可以将端口声明和信号类型声明放在一条语句中完成。   
		output wire f);
assign f=~((a&b)|(~(c&d)));   
endmodule

描述3:

module aoi(a,b,c,d,f);         
input a,b,c,d;               
output f; 
reg f;                             //在always过程块中赋值的变量应定义为reg型
always @(a or b or c or d)         //always过程块及敏感信号列表
	begin
	     f=~((a&b)|(~(c&d)));      //逻辑功能描述
	end
endmodule               

描述4:

module aoi                           //模块声明采用Verilog-2001格式
		(input a,b,c,d,             
		  output reg f); 
always @(*)              //通配符,等价于a or b or c or d
	begin
	     f=~((a&b)|(~(c&d)));      //逻辑功能描述
	end
endmodule               

1.3 Verilog基本组合电路设计

1.4 Verilog基本时序电路设计

猜你喜欢

转载自blog.csdn.net/qq_43935020/article/details/106259092