【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过程块定义。
   ●格式:

always @(敏感信号列表)
	begin
		//过程赋值
		//if-else,case语句;for循环语句
		//task,function调用
	end

   ●例:见 描述3,4

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

   F = a b + c d ‾ ‾ F=\overline{ab+\overline{cd}} F=ab+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基本时序电路设计

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#法外狂徒张三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值