Verilog课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模块的功能定义可采用下面4种方式描述:
1) 2) 3) 4) 数据流方式:assign 行为方式:在always、initial、function、task 结构方式: 内置门原语(在门级)、 模块实例 混合描述方式
2018年10月26日
6
模块的功能定义
1、数据流描述方式:
用连续赋值语句“assign” ,只能描述组合逻辑。
always @ ( A or B or Cin ) begin Sum = (A ^ B) ^ Cin; T1 = A & Cin; T2 = B & Cin; T3 = A & B; Cout = (T1| T2) | T3; end endmodule
2018年10月26日 10
模块的功能定义
module FA_Seq (A, B, Cin, Sum, Cout); input A, B, Cin; output Sum, Cout;
用always语句对1位全加器电路建模
行 为 描 述 方 式
reg Sum, Cout; reg T1, T2, T3;
module sample( q, a, b, sel, clk, resetn ); input a, b, sel, clk, resetn; output q; reg q;
wire
…... endmodule
// 输出端口类型定义 c; // 模块内信号线的定义
2018年10月26日
5
模块的功能定义
连续赋值语句的语法为: assign [delay] LHS_net =
RHS_expression
• 无论右边的操作数何时发生变化,
右边表达式都重新 计算, 并且在指定的时延后赋给左边线网变量。 • Assign #2 Sum = A ^ B; • 如果没有定义时延值, 缺省时延为0。
2018年10月26日
• 定义端子方向有如下语句:
•
input(输入端口) output(输出端口) inout(双向端口) 定义信号位宽: 信号类型 [MSB:LSB] 信号名 如:input [11:0] address; inout [ 7:0] data;
I/O说明也可写在端口声明语句里,Verilog 2001支 持下面的描述方式。
module adder_16 (output reg [15:0] sum,output reg cout, input wire cin, input wire [15:0] a, b);
2018年10月26日 4
模块的结构
百度文库
内部信号说明:在模块内与端口有关的和内部用到的 wire、reg 进行变量声明。 如: reg [width-1 : 0] R变量1,R变量2, …; wire [width-1 : 0] W变量1,W变量2 ,…;
程序模块和电路图符号是一致的,电路图符号的引脚 也就是程序模块的接口。而程序模块描述了电路图符 号所实现的逻辑功能。
2018年10月26日 2
模块的结构
从上面的例子可以看出:
Verilog模块结构完全嵌在module和endmodule声明语句 之间;
每个Verilog程序包括四个主要部分:端口定义、I/O说 明、内部信号声明、功能定义。 端口定义
7
模块的功能定义
`timescale 1ns/ 1ns module Decoder2x4 (A, B, EN, Z); input A, B, EN; output [ 0 :3] Z;
wire Abar, Bbar; assign #1 Abar = ~ A; assign #1 Bbar = ~ B; 。 assign #2 Z[0] = ~ (Abar & Bbar & EN) ; 2-4解码器电路 assign #2 Z[1] = ~ (Abar & B & EN) ; assign #2 Z[2] = ~ (A & Bbar & EN) ; assign #2 Z[3] = ~ (A & B & EN) ; endmodule 连续赋值语句是隐式而非显式的建模方式。 连续赋值语句是并发执行,即各语句的执行顺序出现的顺序无关。
2018年10月26日
9
模块的功能定义
2、行为描述方式:
• 用类似软件程序中的各种算符,直接表示输入输出信号 之间关系的描述方法称为行为描述。如if、case、for • 主要包括:语句/语句块、过程结构、时序控制、流控制 • 行为功能主要在下述过程语句结构描述: 1)initial语句:此语句只执行一次。 2)always语句:此语句总是循环执行, 或者说重复执行。 3)funtions语句:建立函数 4)task语句:建立任务 寄存器类型数据只能在这4种语句中被赋值。 所有的initial语句和always语句在0时刻并发执行。
2018年10月26日 8
数 据 流 描 述 方 式
模块的功能定义
时延: Verilog HDL模型中的所有时延都根据 时间单位定义。
• Assign #2 Sum = A ^ B; //#2指2个时间单位。 • 使用编译指令`timescale将时间单位与物理时间相
关联。编译指令需在模块描述前定义 • ` timescale 1ns/100ps 此语句说明时延时间单位为1ns并且时间精度为 100ps (时间精度是指所有的时延必须被限定在 0.1ns内)。 • 如果此编译指令所在的模块包含上面的连续赋值语 句, #2代表2ns。
• 模块的端口定义:
声明了模块的输入输出口。其格式如下: module 模块名(端口1,端口2,端口3,………); 如:module DFF ( q,d, clk, reset_n ) ;
2018年10月26日
3
模块的结构
I/O说明:对输入输出端口的属性进行定义,包括端 口的方向、信号位宽等。
逻辑设计与FPGA
模块概述
福州大学微电子系
2018年10月26日 1
模块的结构
“模块”(module)是Verilog的基本设计单元。 一个模块是由两部分组成的,一部分描述接口,另一 部分描述逻辑功能,即定义输入是如何影响输出的。
module block (a,b,c,d); input a,b; output c,d; assign c= a | b ; assign d= a & b; endmodule