Download presentation
Presentation is loading. Please wait.
Published byΚέφαλος Ανδρεάδης Modified 6年之前
1
Verilog 数字系统设计教程 -- 建模、仿真、综合、验证和实现 -- 北京航空航天大学 夏宇闻 2004年版
2
课时安排和学习方法 十次讲课每次2小时; 五次实验每次4小时; 一次上机实验考核加面试共4小时;
课堂 =44小时,自己看书40小时共计84小时; 理论与实践结合的学习方法; 考核方法:认真听课20%;下课复习20%;实验课操作20%;最后考核40%
3
讲课的主要内容 复杂数字系统与信号处理的关系 为什么要研究复杂的数字逻辑系统 设计数字系统的基本方法 设计复杂数字系统的工具和手段
数字系统的基本结构 Verilog 语言的特点和基本语法
4
讲课的主要内容 Verilog模块和电路结构的关系 两种不同的Verilog模块 可综合模块的风格 测试用模块的编写要点 语法要点
设计示例分析
5
讲课的目的 提醒书本上容易忽略的内容; 指出重点和关键点; 帮助同学理解书本上的难点; 自己看书、上机练习为主; 互相认识,以便交流。
6
复杂数字系统与信号处理的关系 -- 接口逻辑 + 专门设计的高速计算逻辑
7
数字信号处理、计算、程序 算法和硬线逻辑的基本概念
数字信号处理、计算、程序 算法和硬线逻辑的基本概念 数字信号处理 计算(Computing) 算法和数据结构 编程语言和程序 体系结构 硬线逻辑
8
数字信号处理的基本概念 现代电子系统设备中广泛使用了数字信号处理 专用集成电路。
现代电子系统设备中广泛使用了数字信号处理 专用集成电路。 用于数字信号传输中所必需的滤波、变换、加密、解密、编码、解码、纠检错、压缩、解压缩等操作。 处理工作从本质上说都是数学运算。 完全可以用计算机或微处理器来完成处理工作。
9
计算(Computing)的基本概念 “Computing 这门学问研究怎样系统地有步骤地描述和转换信息,实质上它是一门覆盖了多个知识和技术范畴的学问,其中包括了计算的理论、分析、设计、效率和应用。它提出的最基本的问题是什么样的工作能自动完成,什么样的不能。”(摘自Denning et al., “Computing as a Discipline,” Communication of ACM, January,1989)。
10
算法和数据结构的基本概念 算法就是解决特定问题的有序步骤。 数据结构就是解决特定问题的相应的模型。
11
编程语言和程序的基本概念 编程语言: 程序:由编程语言所表达的算法问题的求解过程就是。
程序员利用一种由专家设计的既可以被人理解,也可以被计算机解释的语言来表示算法问题的求解过程。这种语言就是编程语言。 程序:由编程语言所表达的算法问题的求解过程就是。 常用的编程语言:C、Pascal、Fortran、Basic或汇编语言。
12
计算机体系结构和硬线逻辑 的基本概念 计算机体系结构:是一门 讨论和研究通用的计算机中央处理器如何提高运算速度性能的学问。
硬线逻辑: 由与门、或门、非门、触发器、多路器等基本逻辑部件造成的逻辑系统。
13
数字信号处理系统的分类 非实时系统: 信号处理的工作是可以事后进行。 实时系统: 信号处理的工作必须在规定的很短的时间内完成。
14
数字信号处理系统的实现 非实时系统: 通用的计算机和利用通用计算机改装的设备,主要工作量是编写 “C” 程序。输入/输出数据大多为文本 。
信号处理专用的微处理器为核心的设备,主要工作量是编写汇编程序。输入/输出数据大多为数据流,直接用于控制 。
15
实时数字信号 处理系统实现中存在的技术难点
算法问题。 电路实现问题: 如果由最快的信号处理专用的微处理器为核心的设备也来不及处理如此大量的数据怎么办呢?
16
实时数字信号 处理系统实现中存在的技术难点 和解决办法
算法问题。研究并行快速算法。 电路实现问题: 设计并研制具有并行结构的数字和计算逻辑结构和相应的接口逻辑。
17
实时数字信号 处理系统实现中存在的技术难点 和解决办法
电路实现的两个方向: FPGA 专用集成电路
18
实时数字信号 处理系统实现中存在的技术难点 和解决办法
用于信号处理的 FPGA 和专用集成 电路(ASIC)设计的方法: Verilog HDL 建模、仿真、综合和 全面验证。
19
为什么要研究复杂的数字 逻辑系统?
20
什么是复杂的数字逻辑系统? 嵌入式微处理机系统 数字信号处理系统 高速并行计算逻辑 高速通信协议电路 高速编码/解码、加密/解密电路
复杂的多功能智能接口 门逻辑总数超过几万门达到几百甚至达几千 万门的数字系统
21
为什么要设计复杂的 数字逻辑系统? 对嵌入式系统的性能要求越来越高 - 通用的微处理机不能满足要求 - 硬件结构是提高系统总体性能的关键
- 软件只能提高系统的灵活性能 - 军用系统的实时、高可靠、低功耗要求 - 系统的功能专一,但对其各种性能要求极高 - 降低系统的设计和制造成本
22
设计数字系统的基本方法 传统的:线路图 现代的:硬件描述语言
23
怎样设计如此复杂的系统? 传统的设计方法: - 查用器件手册; - 选用合适的微处理器和电路芯片; - 设计面包板和线路板; - 调试;
- 定型; - 设计复杂的系统(几十万门以上)极其困难。
24
怎样设计如此复杂的系统? 现代的设计方法: - 选用合适的 EDA仿真工具; - 选用合适电路图输入和HDL编辑工具;
- 逐个做Verilog HDL 电路逻辑访真; - 编写Verilog HDL总测试模块; - 做系统电路逻辑总仿真;
25
怎样设计如此复杂的系统? 现代的设计方法(续前): - 选用合适的基本逻辑元件库和宏库 - 租用或购买必要的IP核; - 选用合适的综合器;
- 进行综合得到门级电路结构; - 布局布线,得到时延文件; - 后仿真; - 定型, FPGA编码或ASIC投片
26
Top-Down 设计思想 系统级设计 模块A 模块B 模块C 模块A1 模块A2 模块C1 模块C2 模块B1 模块A3 模块C3
27
用EDA设计数字系统的流程 没问题 有问题 或 FPGA码流文件 电 路 图 设 计 文 件 HDL 电路功能仿真 HDL功能仿真
确定实现电路的具体库名 布 线 后 门 级 仿 真 与 实 现 逻 辑 的 物 理 器 件 有 关 的 工 艺 技 术 文 件 优 化 、布 局 布 线 电路制造工艺文件 或 FPGA码流文件 有问题 没问题
28
为什么要用 硬件描述语言来设计? 电路的逻辑功能容易理解; 便于计算机对逻辑进行分析处理; 把逻辑设计与具体电路的实现分成两个独立
的阶段来操作; 逻辑设计与实现的工艺无关; 逻辑设计的资源积累可以重复利用; 可以由多人共同更好更快地设计非常复杂 的逻辑电路(几十万门以上的逻辑系统)。
29
两种硬件描述语言 : Verilog VHDL
设计复杂数字系统的工具和手段 两种硬件描述语言 : Verilog VHDL
30
有哪几种硬件描述语言? 各有什么特点? Verilog HDL - 较多的第三方工具的支持 - 语法结构比VHDL简单
- 较多的第三方工具的支持 - 语法结构比VHDL简单 - 学习起来比VHDL容易 - 仿真工具比较好使 - 测试激励模块容易编写
31
Verilog HDL 的发展历史
32
有哪几种硬件描述语言? 各有什么特点? VHDL - 比VerilogHDL早几年成为I EEE标准; - 语法/结构比较严格,因而编写出的
- 语法/结构比较严格,因而编写出的 模块风格比较清晰; - 比较适合由较多的设计人员合作完成 的特大型项目(一百万门以上)。
33
VerilogHDL 与 VHDL 建 模 能 力 的 比 较
两者建模能力的比较 VITAL 系统级 算法级 寄存器传输级 逻辑门级 开关电路级 行为级 的抽象 VerilogHDL 与 VHDL 建 模 能 力 的 比 较 SystemVerilog Verilog VHDL
34
在各种抽象层次上描述数字电路 测试各种层次数字电路的行为 设计出正确有效的复杂电路结构
Verilog HDL有什么用处? 在各种抽象层次上描述数字电路 测试各种层次数字电路的行为 设计出正确有效的复杂电路结构
35
Verilog HDL 的应用方面 ASIC 和FPGA设计师可用它来编写可综合的代码。 描述系统的结构,做高层次的仿真。
验证工程师编写各种层次的测试模块对具体电路设计工程师所设计的模块进行全面细致的验证。 库模型的设计:可以用于描述ASIC 和FPGA的基本单元(Cell)部件,也可以描述复杂的宏单元(Macro Cell)。
36
Verilog HDL 的抽象级别 行为级:技术指标和算法的Verilog描述 RTL级:逻辑功能的Verilog描述
语言本身提供了各种层次抽象的表述,可以用详细程度有很大差别的的多层次模块组合来描述一个电路系统。 行为级:技术指标和算法的Verilog描述 RTL级:逻辑功能的Verilog描述 门级 :逻辑结构的Verilog描述 开关级:具体的晶体管物理器件的描述
37
Verilog HDL 的抽象级别 行为级:有关行为和技术指标模块,容易理解; RTL级 :有关逻辑执行步骤的模块,较难理解;
门级 :有关逻辑部件互相连接的模块。很难理解; 开关级:有关物理形状和布局参数的模块,非常难理解。 注解:理解是指对模块整体功能的理解
38
抽象级别和综合与仿真的关系 行为仿真:行为的验证和验证模块分割的合理性; 前仿真 :即 RTL级仿真,检查有关模块逻辑执行步骤是否正确。
后仿真:用门级模型做验证,检查由门的互连构成的逻辑其功能是否正确。 布局布线: 在门级模型的基础上加上了布线延时 布局布线后仿真:与真实的电路最接近的验证。
39
行为级与门级的不同点 ? 综合与模块的关系是什么?
简单的Verilog模块的组成 行为级与门级的不同点 ? 综合与模块的关系是什么?
40
行为级和RTL级 a out b sl module muxtwo (out, a, b, sl); input a,b,sl;
output out; Reg out; or a or b) if (!sl) out = a; else out = b; endmodule a out b sl
41
行为级和RTL级 这个行为的描述并没有说明如果输入 a 或 b是三态的(高阻时)输出应该是什么,但有具体结构的真实电路是有一定的输出的。
RTL模块的数据流动必须基于时钟。RTL模块在每个时钟的沿时刻,其变量的值必定是精确的。 RTL模块是可综合的,它是行为模块的一个子集合。 a b sl out
42
门结构级 a sela out nsl selb b sl module muxtwo (out, a, b, sl);
input a,b,sl; output out; not u1(ns1,sl); and #1 u2(sela,a,nsl); and #1 u3 (selb,b,sl); or #2 u4(out ,sela,selb); endmodule a b sl selb sela nsl u2 u3 u4 u1 out
43
综合器的作用 自动地把符合一定风格的 Verilog 行为模块转变为用门级结构描述的模块。
44
--- 8位加法器的设计和验证 --- 新设计方法的总体印象
Verilog模块的编写和验证举例 --- 8位加法器的设计和验证 --- 新设计方法的总体印象
45
Verilog HDL入门 module myadder(clock, reset, a, b, sum);
parameter width = 8; input clock, reset; input [width-1:0] a, b; output [width :0] sum; reg [width-1:0] a_reg, b_reg; reg [ width : 0 ] sum; clock or negedge reset) if (!reset) begin a_reg <= ’b0; b_reg <= ’b0; sum<= ’b0; end
46
Verilog HDL入门 else begin a_reg <= a; b_reg <= b;
sum <= a_reg + b_reg ; end endmodule
47
Verilog HDL模块的测试 `include myadder.v module t; wire [8:0] sumout;
reg [7:0] ain, bin; reg rst, clk; myadder(.clock(clk), .reset(rst), .a(ain), .b(bin), .sum(sumout)); initial begin rst = 1;clk = 0; ain = 0; bin=3; #70 rst=0; # 70 rst = 1;end always #50 clk = ~clk; clk) begin #2 ain = ain + 2; #3 bin = bin +5; end endmodule
48
Verilog HDL测试 由于 t 模块中Verilog HDL语句的功能 可以对myadder 模块进行测试
rst,clk,ain,bin 观测该模块的输出:sumout 看一看它是否符合设计要求。
49
Verilog HDL测试 t 模块中Verilog HDL的语句不用修改,还可以再进行更深入一步的测试。在t模块中把myadder 实例用综合后产生的门级结构的myadder实例模块换上,再进行一次测试,如果加法的运行仍然符合设计要求,与接口配合良好,计算正确,则模块的设计更加接近实现。 myadder 门级实例模块输入了必须的信号: rst,clk,ain,bin 又加上myadder门级实例需要的基本逻辑单元行为库的支持,所以仿真是有实际意义的。可以观测该模块的输出:sumout 。看一看它是否符合设计要求,就可确定设计是否成功。
50
有延迟的门级结构加法器的波形图 2 8 4 13 6 28 23 18 12 10 33 x 24 17 31 43 3 x x clk
28 23 18 12 10 33 x sumout 24 17 31 43 clk rst ain bin 3 a-reg b-reg x x
51
有关Verilog HDL的 几个重要基本概念
寄存器传输级Verilog HDL模块:也可称为RTL (Verilog) HDL模块。它是符合特定标准和风格的描述状态转移和变化的 Verilog HDL模块。能用综合器把它转换为门级逻辑。
52
有关Verilog HDL的 几个重要基本概念
Verilog HDL测试模块: 用Verilog HDL描述的模块,可以用来产生测试信号序列并可以接收被测试模块的信号。用于验证所设计的模块是否能正常运行,往往不可综合成具体门级电路。 Verilog HDL顶层(测试)模块: 同上。
53
有关Verilog HDL的 几个重要基本概念
布局布线: 把用综合器自动生成的门级网表(EDIF)通过运行一个自动操作的布局布线工具,使其与具体的某种FPGA或某种ASIC工艺库器件对应起来,并加以连接的过程。 Verilog HDL后仿真测试模块: 同3)、4),但被测试的模块至少是一个门级描述的或用具体FPGA(ASIC)库器件(带时间延迟信息)描述的结构型Verilog HDL 模块。
54
Verilog 模块的基本构成要素 端口信息 输入/输出说明 逻辑功能描述
55
Verilog HDL模块和接口 Verilog 模块由两部分组成:端口信息和内部功能。
module block1(a, b, c, d, e); input a, b, c; output d, e; assign d = a | ( b & ~c) ; assign e = ( b & ~c ); endmodule a d b e c
56
Verilog HDL模块的结构 Verilog 模块的结构由在module和endmodule 关键词之间的四个主要部分组成:
- 端口信息: module block1(a, b, c, d ); - 输入/输出说明 : input a, b, c ; output d ; - 内部信号: wire x; - 功能定义: assign d = a | x ; assign x = ( b & ~c ); endmodule
57
编写Verilog HDL模块的练习 请在下面的空格中填入适当的符号 使其成为右图的Verilog 模块 :
module block1(a, b, —, —, — ); input —, —, —; —— d, — ; assign d = a | ( b & ~c) ; assign e = ( b & ~c ); _______ a d b e c
58
编写Verilog HDL模块的练习 请在下面的空格中填入适当的符号 使其成为右图的Verilog 模块 :
module block1(a, b, c , d, e ); input a, b, c; output d, e ; assign d = a | ( b & ~c) ; assign e = ( b & ~c ); endmodule a d b e c
59
Verilog HDL模块中的逻辑表示 在Verilog 模块中有三种方法可以生成逻辑电路: - 用 assign 语句:
assign cs = ( a0 & ~a1 & ~a2 ) ; - 用 元件的实例调用: and2 and_inst ( q, a, b); - 用 always 块: (posedge clk or posedge clr) begin if (clr) q<= 0; else if (en) q<= d; end a d b e c
60
并行和顺序逻辑关系的表示 如在模块中逻辑功能由下面三个语句块组成 :
assign cs = ( a0 & ~a1 & ~a2 ) ; // and2 and_inst ( qout, a, b); // (posedge clk or posedge clr) //-----3 begin if (clr) q<= 0; else if (en) q<= d; end 三条语句是并行的,它们产生独立的逻辑电路; 而在 always 块中: begin 与 end 之间是顺序执行的。
61
Verilog模块中的信号 只有两种主要的信号类型: - 寄存器类型: reg 在always 块中被赋值的信号,往往代表
触发器,但不一定是触发器。 - 连线类型: wire 用 assign 关键词指定的组合逻辑的信号 或连线
62
Verilog模块中的信号要点 需要注意的是: - 寄存器 ( reg )类型不一定是触发器。 - 它只是在 always 块中赋值的信号。
63
Verilog中reg与wire的不同点
module rw1( a, b, out1, out2 ) ; input a, b; output out1, out2; reg out1; wire out2; assign out2 = a ; out1 = ~b; endmodule BUFF a out2 b out1 INV
64
Verilog中reg与wire的不同点
module rw2( clk, d, out1, out2 ) ; input clk, d; output out1, out2; reg out1; wire out2; assign out2 = d & ~out1 ; clk) begin out1 <= d ; end endmodule d out2 AND2i1 clk out1 D Q DFF
65
Verilog中两种不同的赋值语句 不阻塞(non-blocking) 赋值语句: always @(posedge clk) begin
b <= a ; c <= b; end clk D Q D Q c a b DFF DFF
66
Verilog中两种不同的赋值语句 阻塞(blocking) 赋值语句: always @(posedge clk) begin
b = a ; c = b; end clk b D Q a c DFF
67
两种不同的赋值语句区别要点 非阻塞(non-blocking) 赋值语句 ( b<= a): - 块内的赋值语句同时赋值;
赋值语句同时完成的; - 建议在可综合风格的模块中使用不阻塞赋值。 阻塞(blocking) 赋值语句 ( b = a): - 完成该赋值语句后才能做下一句的操作; - b 的值立刻被赋成新值 a; - 时序电路中硬件没有对应的电路,因而综合结果未知。
68
数字系统的构成 组合逻辑(无记忆) 时序逻辑(有记忆)
69
组合逻辑电路 多路器 加法器 缓冲器 逻辑开关 总线 逻辑运算电路
70
时序逻辑电路 计数器 同步有限状态机 运算控制器 总线分配器 总结:
用寄存器和组合逻辑一起组成的有记忆逻辑电路,能与时钟配合产生精确的控制信号。
71
数字系统的构成示意图 同步有限状态机 ena1 ena2 ena3 enan clock input_n input_1 input_2
组合逻辑 1 寄存器组 2 3 4 input_n input_1 input_2
72
组合逻辑设计要点 -用 assign 语句: 组合逻辑的两种Verilog HDL表示:
assign q = (al==1?) d : 0 ; -用 always 块: or d) begin if (al==1) q = d ; else q = 0; end
73
组合逻辑设计要点 -用always块时,没注意加else语句: 组合逻辑的两种Verilog HDL表示:
如: or d) begin if (al==1) q = d ; end 则: 此时生成的不是纯组合逻辑,因为当 al==0时,q能保留原来的值,所以生 成的电路中有锁存器。
74
组合逻辑设计要点 用always块时,必须注意电平敏感的信号表是否完全,如: always @ (a or b or c or d )
begin out = (a & b & c) | (d & e); end 此时生成的不是纯组合逻辑,因为当 e 变化时,out 不 能立即跟着变化。只有当a 或 b 或 c 或 d 变化时e 的 变化后果才显示出来。可见需要有一个寄存器来储存 e 的变化。
75
时序逻辑设计要点 - 用 always: 时序逻辑的 Verilog HDL表示: 如: always @(posedge clock)
if (!reset) do_reset; else case(state) state_1: do_state_1;
76
时序逻辑设计要点 state_2: do_state_2; state_3: do_state_3;
(继续上页) state_2: do_state_2; state_3: do_state_3; state_4: do_state_4; state_5: do_state_5; default: state <=xx; endcase
77
时序逻辑设计要点 (继续上页) task do_reset; begin Reset_Every_Register;
Prepare_For_Next_State; end endtask
78
时序逻辑设计要点 (继续上页) task do_state_1; begin if (Condition_Is_True)
Switch_Proper_Control_Logic; Prepare_For_Next_State; else Stay_In_Original_State; end endtask
79
时序逻辑设计要点 (继续上页) task do_state_2; begin if (Condition_Is_True)
Switch_Proper_Control_Logic; Prepare_For_Next_State; else Stay_In_Original_State; end endtask
80
Verilog模块的种类和用途 行为模块: - 在仿真时其表现的功能与某实体逻辑电路完 可综合模块:
全一致的 Verilog HDL 模块,但并没有手段 生成对应的门级逻辑电路与之对应。 可综合模块: - 可通过综合工具,自动地转换为门级逻辑电 路的 Verilog HDL 模块。它的仿真可以在两 个层次上进行,行为级和门级。
81
HDL行为模块的功能 行为模块: - 用于系统分割时验证各部分的功能指标分配 是否合理; - 在仿真时可用于替代与所设计电路系统相连
接的现成可购得的外围电路; - 用于产生测试信号和数据输入到所设计电路 系统并接收它的应答信号和输出以验证其功 能。
82
HDL可综合模块的功能 可综合模块: - 想要设计的用硬线逻辑构成的电路系统; - 由基本的逻辑器件为基础所构成的各种层次 的结构模块;
- 想要设计的用硬线逻辑构成的电路系统; - 由基本的逻辑器件为基础所构成的各种层次 的结构模块; - 综合器能理解并能将其编译为门级逻辑的模 块; - 对一般的综合器而言,单纯的RTL级Verilog HDL模块以及 RTL 和结构型混合HDL模块。
83
为什么Verilog能支持大型设计 Verilog 语法支持多层次多模块设计: - 用 `include 宏指令可以在一个模块中包含多个模
块; - 在一个模块中可以用实例调用别的模块中定义的 电路结构,构成多层次模块; - 在一个模块中可以用多个任务和函数来表 达复杂 的状态机和结构; - 一个设计项目往往由一个顶层测试模块和多个可 综合模块和若干个外围接口模块构成。
84
为什么Verilog能支持大型设计 设计项目举例: - myproject - 可综合部分 (我们想要设计的逻辑电路部分):
- mk_1.v, mk_2.v, mk_3.v, .....mk_8.v - mk_11.v, mk_12.v , mk_13.v..... - mk_21.v, mk_22.v, mk_23.v ..... - mk_81.v, mk_82.v, mk_83.v .....
85
为什么Verilog能支持大型设计 设计项目举例: - myproject - 外围部分:
- ww_1.v, ww_2.v, ww_3.v, ww_4.v ... - 激励部分: - SG_1.v, SG_2.v .... - 顶层测试模块: - 包括可综合部分、外围部分、激励部分 - 还包括测试步骤和输出文件等。
86
其他形式的 Verilog 模块 外围部分: - 这部分逻辑不用综合成电路,但为了验证我 们的设计, 其行为必须与真实器件完全一 致。
们的设计, 其行为必须与真实器件完全一 致。 下面我们介绍一个简化的RAM模块,我们所 设计的电路用到了该RAM, 但电路结构中并 不包括这个RAM。
87
RAM 的 Verilog 模块 `timescale 1ns/1ns
module ram(data, addr, ena, read, write) ; inout [7:0] data; input [9:0] addr; input ena, read,write; reg [7:0] ram[8 ‘hff : 0]; assign # 20 data = (read && ena)? ram[addr] : 8 ‘hzz;
88
RAM 的 Verilog 模块 (续上页) always @(posedge write) begin
#10 ram[addr] <= data; end endmodule
89
激励源的 Verilog 模块 `timescale 1ns/1ns `define timeslice 200
module sigs (ack,clock,read,write,addr,data); input ack; output clock, read, write; output [15:0] addr; inout [7:0] data; reg clock, read, write;
90
激励源的 Verilog 模块 (续上页) reg [15:0] addr;
reg w_r ; //used to record if read or write reg [7:0] DataToRam; //used to stack the data assign #10 data = (w_r)? ‘hzz : DataToRam; initial begin clock = 0; w_r = 0; DataToRam=0;
91
激励源的 Verilog 模块 (续上页) addr = 16 ‘h 0000 ; end
always # ( `timeslice/2) clock = ~ clock; (posedge ack) if (w_r == 0) begin #(5*`timeslice) write = 1; # (`timeslice) write = 0; end
92
激励源的 Verilog 模块 (续上页) else begin # (5 * `timeslice) read = 1;
end ack) begin DataToRam = DataToRam + 2; addr = addr + 1; endmodule
93
激励源的 Verilog 模块 - 上面这个模块可根据从被测试模块输出 的 ack 信号逐一发出读/写、地址、数据
(续上页) - 上面这个模块可根据从被测试模块输出 的 ack 信号逐一发出读/写、地址、数据 至被测试模块,可以用来检验被测试模 块的功能是否正确,但没有具体的门级 电路系统与之对应。
94
顶层测试 Verilog 模块 `timescale 1ns/1ns `include 可综合模块.v . . . .
module top; wire 连线定义 reg 初试化块中寄存器定义 initial begin 定义波形记录、输入数据文件、记录输出文件 、 监视重要信号、记录重要时刻、设置仿真时间等。 end
95
顶层测试 Verilog 模块 信号模块 xh1( .clock( clk), .reset(rst), .ack(ackn) ); 可综合模块 mysj1(. clock(clk), reset(rst),.ack(ackn) . . .); 外围模块 ram1(.read(rd), .write(wrt), .data(databus) . . .); endmodule
96
不同抽象级别的 HDL 模型 系统级 (System Level) 算法级 ( Algorithm Level)
寄存器传输级 (Register Transfer Level) 门级 ( Gate Level) 开关级(Switch Level)
97
可综合的 Verilog HDL 模型 算法级 ( Algorithm Level) - 部分可综合
寄存器传输级 (Register Transfer Level) - 完全可综合 门级 ( Gate Level) 开关级(Switch Level) - 用于基本逻辑器件仿真模型的建库
98
综合工具和要点 综合是把 Verilog HDL源代码通过综合工具, 转变为相应工艺的门级逻辑表示的一个过程;
经过严格检查,仅仅符合语法不一定能综合; 不同的综合工具性能有差别,支持的Verilog HDL源代码的语法集合和风格也略有差别。 综合工具必须在已知基本逻辑单元库的前提 下,才能进行综合。
99
仿真和综合工具概述 常用的仿真工具: - NC -Verilog - ModelSim - VeriBest - ViewLogic
- Verilog -XL - NC -Verilog - ModelSim - VeriBest - ViewLogic 常用的综合工具: - Synplify - Exemplar - Synopsys Express - Synopsys Designer Compiler
Similar presentations