VerilogHDL及其Testbench编写方法.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VerilogHDL及其Testbench编写方法

学习总结系列之五――Verilog HDL/Testbench 篇 Verilog HDL 及其 Testbench 总结 (欢迎批评指正:jackhuan@ ) 1 Verilog HDL 的基本观点 1) 观点 1:module 内每个基本模块之间是并行运行的。 2) 观点 2 :每个模块相当于一个连续赋值的过程。 3) 观点 3 :方程和任务是共享代码的最基本方式。 4) 观点 4 :同语言可用于生成模拟激励和指定测试的验证约束条件。 5) 观点 5:库的概念相当于Visual C++ 中的DLL 概念。 6) 观点 6:文件与文件之间的关系可以使用C++ 中的*.h 和*.cpp 之关系理解。 2 设计建模的三种方式 1) 行为描述方式。过程化结构,每个结构之间是并行的。 2) 数据流方式。连续赋值语句方式,每个赋值语句之间是并行的,且赋值语 句和结构之间是并行的。 3) 结构化方式。门和模块实例化语句。 3 两者数据类型 1) 线网数据类型 wire :表示构件间的物理连线; 2) 寄存器数据类型 reg :表示抽象的数据存储元件。 4 几个概念 1) 模块(module )。模块是Verilog HDL 的基本描述耽误,用于描述某个设计 的功能或结构及其与其它模块通信的外部端口。一个设计的结构可以使用 开关级原语、门级原语和用户定义的原语方式描述;数据流行为使用使用 连续赋值语句进行描述;时序行为使用过程结构描述。模块的声明部分和 语句可以散布在模块中的任何地方,但变量、寄存器、线网和参数说明必 须在使用前出现。 2) 只有寄存器类型数据(reg/integer )能够在initial 和 always 语句中被赋值。 3) 阻塞性和非阻塞性赋值。理解这两个概念在学习verilog HDL 中非常重要。 决定了时序的正确与否。阻塞性赋值的概念是在该条赋值语句执行完成后 再执行后面的语句,也就是说在执行该语句时,后面的语句是挂起的。而 非阻塞性赋值的结果在何时执行是不知道的,但是可以预见在某个时间步 内该语句一定能够执行完成,从这个意义上来看,非阻塞性赋值的语句类 似于并行语句,稍有处理不当,会引发多驱动源问题。关于多驱动源问题, 在我的 VHDL 总结中有所表述,此处不在费墨。 4) 用户定义原语(UDP) 。UDP 的定义不依赖于模块定义,因此出现在模块定 义之外,也可以在单独的文本文件中定义 UDP 。UDP 只能有一个输出或一 个/ 多个输入端口。UDP 的行为以真值表的形式描述。 5) 并行语句块和顺序语句块。并行语句块中的各语句并行执行。当并行语句 块中的最后动作执行完成是,顺序语句块的语句继续执行。也就是说,并 行语句块中的所有语句必须在控制转出语句块之前完成执行。并行语句块 1 学习总结系列之五――Verilog HDL/Testbench 篇 带有定界符 fork—join,顺序语句块带有定界符begin—end 。对该段的理解 似乎很困难,有些拗口。必须在多实践的基础上才能正确理解这段话。 6) 任务。一个任务就像一个过程,它可以从描述的不同位置执行共同的代码 段。共同的代码段用任务定义编写成任务,这样它就能够从设计描述的不 同位置通过任务调用被调用。任务可以包含时序控制,并且任务也能够调 用其它任务和函数。任务可以有也可以没有参数。值通过参数转入或转出。 除输入参数外(参数从任务中接收值),任务还能带有参数输出。任务的输 入和输出在任务的开始处声明,这些输入和输出的顺序决定了它们在任务 调用中的顺序。这和 C++ 中的指针作为形参传递何其类似啊! 7) 函数。函数如同任务一样,也可以在模块中的不同位置执行共同代码。函 数与任务的不同之处在于函数只能返回一个值,它不能包含任何延时和时 序控制(必须立即执行),并且它不能调用其它任务。此外,函数必须至少 带有一个输入,在函数中允

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档