首页 > 其他 > 详细

Verilog练习——系统任务的使用

时间:2020-08-18 08:14:11      阅读:69      评论:0      收藏:0      [点我收藏+]

一、实验硬软件环境:

  1. EDA软件:Vivado2019
  2. 实验开发板:Basys3 FPGA套件

二、实验内容:

  实现的电路功能为:当开关开启,led点亮;开关关闭,则led灯关闭,在设计文件和测试文件中,在合适的位置,分别插入$monitor、$display、$stop以及$finish语句,观察simulation的结果。

三、 具体实现

  1. 设计源码
     1 `timescale 1ns / 1ps
     2 //////////////////////////////////////////////////////////////////////////////////
     3 // Company: 
     4 // Engineer: 
     5 // 
     6 // Create Date: 2020/08/17 18:02:59
     7 // Design Name: 
     8 // Module Name: led
     9 // Project Name: 
    10 // Target Devices: 
    11 // Tool Versions: 
    12 // Description: 
    13 // 
    14 // Dependencies: 
    15 // 
    16 // Revision:
    17 // Revision 0.01 - File Created
    18 // Additional Comments:
    19 // 
    20 //////////////////////////////////////////////////////////////////////////////////
    21 
    22 
    23 module led(
    24     input key,
    25     input clk,
    26     output reg led
    27     );
    28     
    29     reg [28:0] count;
    30     
    31     always @(posedge clk)
    32     begin
    33        if(key == 0)
    34            count <= 29b0;
    35        else
    36            if(count == 20)
    37                count <= 29b0;
    38            else
    39                count <= count + 1;
    40     end
    41     
    42     always@(posedge clk)
    43     begin
    44         if(key == 0)
    45             led <= 0;
    46         else
    47             if(count == 20)
    48                 begin
    49                     led <= ~led;
    50                     $display("at this moment, count is 20, led is %b, and will be changed to %b.", led, ~led);
    51                 end
    52             else
    53                 led <= led;
    54     end
    55 endmodule
  2. 仿真代码
     1 `timescale 1ns / 1ps
     2 //////////////////////////////////////////////////////////////////////////////////
     3 // Company: 
     4 // Engineer: 
     5 // 
     6 // Create Date: 2020/08/17 18:19:52
     7 // Design Name: 
     8 // Module Name: led_tb
     9 // Project Name: 
    10 // Target Devices: 
    11 // Tool Versions: 
    12 // Description: 
    13 // 
    14 // Dependencies: 
    15 // 
    16 // Revision:
    17 // Revision 0.01 - File Created
    18 // Additional Comments:
    19 // 
    20 //////////////////////////////////////////////////////////////////////////////////
    21 
    22 
    23 module led_tb;
    24     reg key;
    25     reg clk;
    26     wire led;
    27     
    28     led uut(.key(key), .clk(clk), .led(led));
    29     
    30     initial
    31     begin
    32         $monitor("count = %d, key = %d, led = %d", uut.count, uut.key, uut.led);
    33         
    34         key = 0;
    35         clk = 0;
    36         
    37         #100 key = 1;
    38         
    39     end
    40 
    41     always #5 clk = ~clk;
    42 endmodule
  3. 约束文件
    1 set_property PACKAGE_PIN V17 [get_ports key]
    2 set_property IOSTANDARD LVCMOS33 [get_ports key]
    3 set_property PACKAGE_PIN U17 [get_ports led]
    4 set_property IOSTANDARD LVCMOS33 [get_ports led]
  4. 波形图技术分享图片
  5. console工具部分输出:输出设计源码中$display语句内容,同时执行仿真代码中$monitor语句,即使key和led的值没变,只要count的值改变,就打印指定内容。

    技术分享图片

  6. $display后分别加入$stop和$finish语句,出现现象
    • 插入$stop后,波形图和console

      技术分享图片

      技术分享图片

    • 插入$finish后,波形图和console

      技术分享图片

      技术分享图片

  7. 总结
    • $display用于输出变量信息,可以帮助调试和验证,但是只有当执行到该语句时才被触发,属于被动输出;
    • $monitor只要参数列表中的某个参数值发生变化,则输出指定内容,且该语句一旦被触发,则一直处于监视状态,属于主动输出。
    • $stop暂停仿真并将仿真器值置于互模式;
    • $finish退出模拟并将控制权交还给系统。
    • 看到有博客提到使用$stop后,使用run命令可继续仿真,而$finish则直接退出,但是尝试了一下,两者都可以使用run继续进行仿真。

Verilog练习——系统任务的使用

原文:https://www.cnblogs.com/mantha/p/13521080.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!