FPGA通信设计基础ModelSim使用培训讲义.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
FPGA通信设计基础ModelSim使用培训讲义

4.1 ModelSim简介 4.2 ModelSim运行模式 4.3 ModelSim仿真 4.4 ModelSim仿真工作模式 4.5 Verilog Testbench编写 设计组织 并行块 包含文件 施加激励 线性激励 循环激励 数组激励 矢量采样 矢量回放 错误及警告报告 强制激励 强制激励 建立时钟 建立时钟 建立时钟 使用task 使用task 4.5 系统任务和系统函数 4.6系统任务和系统函数 保存在文件中的矢量反过来可以作为激励 module read_file_tb; parameter num_vecs = 256; reg [7:0] data_bus; reg [7:0] stim [num_vecs-1:0]; integer i; DUT u1 (results, data_bus) initial begin // Vectors are loaded $readmemb (vec. txt, stim); for (i =0; i num_vecs ; i = i + 1) #50 data_bus = stim[i]; end endmodule // 激励文件vec.txt00111001001111000010100001111000. . 使用矢量文件输入/输出的优点: 激励修改简单 设计反复验证时直接使用工具比较矢量文件。 使用文本或文件输出类的系统任务报告错误及警告 always @( posedge par_err) $display ( error-bus parity errors detected); always @( posedge cor_err) $display(warning-correctable error detected); 一个更为复杂的test bench可以: 不但能报告错误,而能进行一些动作,如取消一个激励块并跳转到下一个激励。 在内部保持错误跟踪,并在每次测试结束时产生一个错误报告。 在过程块中,可以用两种持续赋值语句驱动一个值或表达式到一个信号。 过程持续赋值通常不可综合,所以它们通常用于测试基准描述。 对每一种持续赋值,都有对应的命令停止信号赋值。 不允许在赋值语句内部出现时序控制。 对一个寄存器使用assign和deassign,将覆盖所有其他在该信号上的赋值。这个寄存器可以是RTL设计中的一个节点或测试基准中在多个地方赋值的信号等。 initial begin #10 assign top.dut.fsm1.state_reg = `init_state ; #20 deassign top.dut.fsm1.state_reg ; end 在register和net上(例如一个门级扫描寄存器的输出)使用force和release,将覆盖该信号上的所有其他驱动。 initial begin #10 force top. dut. counter. scan_ reg. q = 0 ; #20 release top. dut. counter. scan_ reg. q ; end 可以强制(force)并释放一个信号的指定位、部分位或连接,但位的指定不能是一个变量(例如out_vec[i]) 不能对register的一位或部分位使用assign和deassign 对同一个信号,force覆盖assign。 后面的assign或force语句覆盖以前相同类型的语句。 如果对一个信号先assign然后force,它将保持force值。在对其进行release后,信号为assign值。 如果在一个信号上force多个值,然后release该信号,则不出现任何force值。 在上面两个例子中,在 net或register上所赋的常数值,覆盖所有在时刻10和时刻20之间可能发生在该信号上的其他任何赋值或驱动。如果所赋值是一个表达式,则该表达式将被持续计算。 例1:虽然有时候在设计中给出时钟,但通常时钟是测试基准中建立。 下面介绍如何产生不同的时钟波形。同时给出用门级和行为级描述方法 下面是一个简单对称时钟的例子: reg ck; always begin #( period/2) c

文档评论(0)

taotao0b + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档