1 / 23
文档名称:

南大培训资料-行为级仿真模型建模.ppt

格式:ppt   页数:23
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

南大培训资料-行为级仿真模型建模.ppt

上传人:所以所以 2013/2/28 文件大小:0 KB

下载得到文件列表

南大培训资料-行为级仿真模型建模.ppt

文档介绍

文档介绍:第6章行为级仿真模型建模
Verilog HDL 数字系统设计及实践
学习指南
【知识目标】
(1)了解Verilog HDL语言不可综合行为描述的特点;
(2)了解仿真模型和Testbench的概念和作用;
(3)掌握各种常用Verilog HDL行为描述方法。
【技能目标】
(1) 熟练应用Verilog行为描述构建仿真模型和Testbench;
(2) 熟练构建可进行自动测试的芯片仿真环境。
【重点难点】
(1) 行为级建模与可综合建模的区别与联系;
(2) 如何构建可进行自动测试的仿真环境。
行为级建模概述
一个完整的芯片设计工程
一个完整的芯片设计工程应该包含Testbench测试
环境的设计和被测对象的设计。
被测对象我们又可以叫做“芯片”,因为它描述的是我们希望设计的芯片本身的功能。
Testbench通常是用Verilog HDL语言描述的不可综合的模块,用来产生与芯片真实的工作环境相同的输入激励,来对芯片的功能进行测试。
仿真时间和时序控制
在运行真实芯片时,芯片的各个时间参数和我们真实生活中使用的时间是相同的。在
仿真的时候,我们也有自己的时间,这个时间是仿真器虚拟出来的,与真实的时间不一定
相同。
复杂的电路行为往往在时间上有很强的前后依赖关系。在可综合的电路描述中,这种
时序上的控制只能通过同步时钟和有限状态机来实现。当电路的功能变得复杂以后,对时
序控制逻辑的设计也变得越来越困难。
Verilog HDL提供的时序控制语句主要有3种:延迟控制语句,事件控制语句和条件等
待语句。
延迟控制语句用#加数字的形式来表示程序继续运行需要等待的仿真时间。
...
initial begin
#10 a = b;
#20 a = c;
end
仿真时间和时序控制
事件控制语句指利用语法@()进行描述。@后面的括号里包含需要等待的事件。当事件满足后,程序继续运行,事件不满足时,程序等待在此处,直到条件满足。
...
initial begin
@ (posedge clk)
a = b;
@ (posedge clk)
#10 a = b;
end
条件等待语句是指用关键词wait描述的过程语句。
...
initial begin
wait (rst_n)
a = b;
@ (rst_n)
a = c;
end
仿真模型建模实例
时钟发生器
时钟发生器是Verilog HDL仿真模型中最重要的模块。所有硬件电路的工作都离不开时钟输入。同步时序电路中的存储单元在时钟沿触发,对电路的数据流和状态进行控制。
【】用Verilog HDL设计一个时钟发生模块。时钟周期可通过参数period调节,占空比为50%
// example_6_1: A simple clock generator for simulation
module clock_gen
#(
parameter period = 10
)
(
output reg o_clk
);
initial
// 设置时钟的初始值
o_clk = 1'b0;
// 每隔半周期,时钟信号反转一次。
always #(period/2) o_clk = ~o_clk;
endmodule
仿真模型建模实例

【】用Verilog HDL设计一个简单的仿真环境,
寄存器模块进行自动测试。
// example_6_4: Testbench for the DFF appears as example_5_2
module dff_asyn_reset_tb ();
wire clk;
wire dout;
reg rst_n;
reg din;
reg flag_data_check; // 该标志位用来表示是否进行输出数据检查
clock_gen #(15) cgen
(
.o_clk(clk)
);
dff_asyn_reset dff1
(
.i_clk(clk),
.i_rst_n(rst_n),
.i_din(din),
仿真模型建模实例
.o_dout(dout)
);
// 加载输入激励
initial begin
// 初始化仿真模型的寄存器变量
#0 rst_n = 1'b1; din = 1'b0; flag_data_check = 1'b0;
// 开始进行复位,复位时间视系统要求而定
#50 rst_n = 1'b0;
#50 rst_n = 1'b1;
// 复