一、题目:
利用10MHz设计单周期形状的周期波形时钟。us低电平,中间10us高电平,后20us低电平为50个周期us。
二、程序语句:
///程序代码: module single_period(clk_in, rst, clk_out); input clk_in, rst; output clk_out; reg clk_out; reg [9:0]j; always @(posedge clk_in) begin if(!rst) /// begin j <= 0; clk_out <= 0; end else if(j == 199) //第20us时翻转 begin j <= j 1; clk_out <= ~clk_out; end else if(j == 299) //第30us时再次翻转 begin j <= j 1; clk_out <= ~clk_out; end else if(j == 499) //第50us时归零 begin j <= 0; clk_out <= 0; end else j <= j 1; end endmodule
三、testbench语句:
`timescale 1 ns/ 100 ps ///时间单位/时间精度 `define clk_cycle 50 //时钟周期T=2*50ns module single_period_vlg_tst(); reg clk_in; reg rst; wire clk_out; single_period i1 ( .clk_in(clk_in), .clk_out(clk_out), .rst(rst) ); initial ///定义初始信号和复位端信号 begin rst = 1; clk_in = 0; #100 rst = 0; #100 rst = 1; end always #`clk_cycle clk_in = ~clk_in; //10MHz信号翻转 initial ///定义输入信号终止时间 begin #500000 $stop; end endmodule
四、实验波形如下:
Verilog夏宇闻,第四版数字系统设计教程。