当前位置:   article > 正文

Verilog测试文件编写大全之时钟_verilog 时钟

verilog 时钟

目录

一、前言

二、时钟信号

    2.1 设计源文件

    2.2 测试文件

    ​2.3 仿真结果

    ​2.4 参考资料


一、前言

    完成工程设计之后,通常需要编写对应的测试文件对设计进行功能仿真验证。因为测试文件中对外是只有输入输出端口,并无信号,而测试文件就是通过编写输入信号的形式,连接到设计文件对应的输入端口,通过输出端口来确认逻辑是否正确。时钟又是最最基础的信号,无时钟信号类似手机不联网。本节将结合实际modelsim来讲解测试文件中时钟的写法。

二、时钟信号

    从信号特点看,可分为占空比为50%和非50%,实现语句可分为always语句和forever语句

    2.1 设计源文件

为方便查看时钟信号,功能很简单,输出信号等于输入信号

  1. module clock(clk_in,clk_out );
  2. input [7:0] clk_in;
  3. output [7:0]clk_out;
  4. assign clk_out=clk_in;
  5. endmodule

    2.2 测试文件

测试代码

  1. `timescale 1ns / 1ns
  2. module tb_clk( );
  3. reg [7:0]tb_clkin;
  4. wire clkout_50_always;
  5. wire clkout_rand_always;
  6. wire clkout_50_forever;
  7. wire clkout_rand_forever;
  8. parameter PERIOD = 10;
  9. //always实现占空比为50%的时钟信号
  10. always
  11. begin
  12. tb_clkin[0] = 1'b0;
  13. #(PERIOD/2) tb_clkin[0] = 1'b1;
  14. #(PERIOD/2);
  15. end
  16. clock dut0(.clk_in(tb_clkin[0]),.clk_out(clkout_50_always));
  17. //always实现指定占空比的时钟信号
  18. parameter DUTY_CYCLE = 0.7; //占空比为0.7
  19. always begin
  20. tb_clkin[1] = 1'b0;
  21. #(PERIOD-(PERIOD*DUTY_CYCLE)) tb_clkin[1] = 1'b1;
  22. #(PERIOD*DUTY_CYCLE);
  23. end
  24. clock dut1(.clk_in(tb_clkin[1]),.clk_out(clkout_rand_always));
  25. //forever实现占空比为50%的时钟信号
  26. initial
  27. begin
  28. tb_clkin[2] = 1'b0;
  29. #(PERIOD/2);
  30. forever
  31. #(PERIOD/2) tb_clkin[2] = ~tb_clkin[2];
  32. end
  33. clock dut2(.clk_in(tb_clkin[2]),.clk_out(clkout_50_forever));
  34. //forever实现指定占空比的时钟信号
  35. initial
  36. forever
  37. begin
  38. tb_clkin[3] = 1'b0;
  39. #(PERIOD-(PERIOD*DUTY_CYCLE)) tb_clkin[3] = 1'b1;
  40. #(PERIOD*DUTY_CYCLE);
  41. end
  42. clock dut3(.clk_in(tb_clkin[3] ),.clk_out(clkout_rand_forever));
  43. endmodule

    ​2.3 仿真结果

四种时钟信号如下图,占空比和周期符合设计

    ​2.4 参考资料

Vivado软件language templates

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/411066
推荐阅读
相关标签
  

闽ICP备14008679号