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

目录

一、前言

二、时钟信号

    2.1 设计源文件

    2.2 测试文件

    ​2.3 仿真结果

    ​2.4 参考资料


一、前言

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

二、时钟信号

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

    2.1 设计源文件

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


module clock(clk_in,clk_out );
input [7:0] clk_in;
output [7:0]clk_out;
assign clk_out=clk_in;
endmodule

    2.2 测试文件

测试代码


`timescale 1ns / 1ns
module tb_clk( );
reg [7:0]tb_clkin;
wire clkout_50_always;
wire clkout_rand_always;
wire clkout_50_forever;
wire clkout_rand_forever;
parameter PERIOD = 10;
//always实现占空比为50%的时钟信号
always 
begin
  tb_clkin[0] = 1'b0;
  #(PERIOD/2) tb_clkin[0] = 1'b1;
  #(PERIOD/2);
end
clock dut0(.clk_in(tb_clkin[0]),.clk_out(clkout_50_always));

//always实现指定占空比的时钟信号
parameter DUTY_CYCLE = 0.7;   //占空比为0.7

always begin
   tb_clkin[1] = 1'b0;
   #(PERIOD-(PERIOD*DUTY_CYCLE)) tb_clkin[1] = 1'b1;
   #(PERIOD*DUTY_CYCLE);
end
				
clock dut1(.clk_in(tb_clkin[1]),.clk_out(clkout_rand_always));				
//forever实现占空比为50%的时钟信号
initial 
   begin
   tb_clkin[2] = 1'b0;
   #(PERIOD/2);
   forever
    #(PERIOD/2) tb_clkin[2] = ~tb_clkin[2];
   end
clock dut2(.clk_in(tb_clkin[2]),.clk_out(clkout_50_forever));
//forever实现指定占空比的时钟信号
initial
   forever 
   begin
      tb_clkin[3] = 1'b0;
      #(PERIOD-(PERIOD*DUTY_CYCLE)) tb_clkin[3]  = 1'b1;
      #(PERIOD*DUTY_CYCLE);
    end
clock dut3(.clk_in(tb_clkin[3] ),.clk_out(clkout_rand_forever));     
endmodule

    ​2.3 仿真结果

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

    ​2.4 参考资料

Vivado软件language templates

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识充实人生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值