基于verilog的5分频电路设计
1. 顶层模块
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 西安电子科技大学
// Engineer: piger朱
//
// Create Date: 10:26:14 05/09/2012
// Design Name: 5分频电路
// Module Name: clk_div3
// Project Name:
// Target Devices: vertex-5
// Tool versions: ISE12.4 modelsim 6.5se
// Description: 本设计为一个奇数(5)分频电路
// 基本原理:对于任一个奇数2*N+1(N=1、2、3……),分别利用时钟上升沿、下降沿
// 生成占空比为N:2N+1的波形,生成的两个波形错开了半个周期,
// 然后将这两个波形相或,即可得出2N+1分频电路
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module clk_div3(clk_in, rst, clk1, clk2, clk_out);
input clk_in, rst;
output clk1, clk2, clk_out;
reg clk1, clk2;
reg[2:0] cnt1,cnt2;
always @(posedge clk_in)
begin
if(!rst) begin
cnt1 <= 0;
clk1 <= 0;
end
else begin
if(cnt1 == 2) begin
cnt1 <= cnt1 + 1;
clk1 <= ~clk1;
end
else if(cnt1 == 4) begin
cnt1 <= 0;
clk1 <= ~clk1;
end
else begin
cnt1 <= cnt1 + 1;
clk1 <= clk1;
end
end
end
always @(negedge clk_in)
begin
if(!rst) begin
cnt2 <= 0;
clk2 <= 0;
end
else begin
if(cnt2 == 2) begin
cnt2 <= cnt2 + 1;
clk2 <= ~clk2;
end
else if(cnt2 == 4) begin
cnt2 <= 0;
clk2 <= ~clk2;
end
else begin
cnt2 <= cnt2 + 1;
clk2 <= clk2;
end
end
end
assign clk_out = clk1|clk2;
endmodule
2. 测试文件
module clk_div3_tb;
// Inputs
reg clk_in;
reg rst;
// Outputs
wire clk1;
wire clk2;
wire clk_out;
// Instantiate the Unit Under Test (UUT)
clk_div3 uut (
.clk_in(clk_in),
.rst(rst),
.clk1(clk1),
.clk2(clk2),
.clk_out(clk_out)
);
initial begin
clk_in = 0;
rst = 1;
#20 rst = 0;
#150 rst = 1;
#10000 $stop;
end
always #`clk_circl clk_in = ~clk_in;
endmodule
3. 仿真波形
(注:clk1,clk2其实不需作为输出,这里之所以作为输出,是为了和clk_out比,从而方便观察)
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务