- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Verilog HDL行为级仿真模型建模
* 行为级仿真模型建模 学习指南 【知识目标】 (1)了解Verilog HDL语言不可综合行为描述的特点; (2)了解仿真模型和Testbench的概念和作用; (3)掌握各种常用Verilog HDL行为描述方法。 【技能目标】 (1) 熟练应用Verilog行为描述构建仿真模型和Testbench; (2) 熟练构建可进行自动测试的芯片仿真环境。 【重点难点】 (1) 行为级建模与可综合建模的区别与联系; (2) 如何构建可进行自动测试的仿真环境。 1 行为级建模概述 图1 一个完整的芯片设计工程 一个完整的芯片设计工程应该包含Testbench测试 环境的设计和被测对象的设计。 被测对象我们又可以叫做“芯片”,因为它描述的是我们希望设计的芯片本身的功能。 Testbench通常是用Verilog HDL语言描述的不可综合的模块,用来产生与芯片真实的工作环境相同的输入激励,来对芯片的功能进行测试。 2 仿真时间和时序控制 在运行真实芯片时,芯片的各个时间参数和我们真实生活中使用的时间是相同的。在 仿真的时候,我们也有自己的时间,这个时间是仿真器虚拟出来的,与真实的时间不一定 相同。 复杂的电路行为往往在时间上有很强的前后依赖关系。在可综合的电路描述中,这种 时序上的控制只能通过同步时钟和有限状态机来实现。当电路的功能变得复杂以后,对时 序控制逻辑的设计也变得越来越困难。 Verilog HDL提供的时序控制语句主要有3种:延迟控制语句,事件控制语句和条件等 待语句。 延迟控制语句用#加数字的形式来表示程序继续运行需要等待的仿真时间。 ... initial begin #10 a = b; #20 a = c; end 2 仿真时间和时序控制 事件控制语句指利用语法@()进行描述。@后面的括号里包含需要等待的事件。当事件满足后,程序继续运行,事件不满足时,程序等待在此处,直到条件满足。 ... 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 3 仿真模型建模实例 3.1 时钟发生器 时钟发生器是Verilog HDL仿真模型中最重要的模块。所有硬件电路的工作都离不开时钟输入。同步时序电路中的存储单元在时钟沿触发,对电路的数据流和状态进行控制。 【例6.1】用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 = 1b0; // 每隔半周期,时钟信号反转一次。 always #(period/2) o_clk = ~o_clk; endmodule 3 仿真模型建模实例 3.2简单的仿真环境 【例6.4】用Verilog HDL设计一个简单的仿真环境,对本书例5.2所示的带异步复位端口的 寄存器模块进行自动测试。 // 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), 3 仿真模型建模实例 .o_dout(dout) ); // 加载输入激励 in
文档评论(0)