|
楼主 |
发表于 2014-9-25 19:23:46
|
显示全部楼层
//任意分频系数为 N+0.5 的占空比为1:1的非整数分频器
module div2(clk, clk_div, cnt1, cnt2, temp1, temp2);
input clk;
output clk_div;
output reg [31:0]cnt1, cnt2;
output reg temp1, temp2;
parameter N=1;
initial begin temp1=0; temp2=1;cnt1=0;cnt2=2*N;end
always @(posedge clk)
begin
if(cnt1==2*N) begin cnt1<=0; end
else begin cnt1<=cnt1+1; end
if(cnt1==0) begin temp1<=1; end
if(cnt1==N+1) begin temp1<=0; end
end
always @(negedge clk)
begin
if(cnt2==0) begin temp2<=0; end
if(cnt2==N) begin temp2<=1; end
if(cnt2==2*N) begin cnt2<=0; end
else begin cnt2<=cnt2+1; end
end
assign clk_div=temp1&&temp2;
endmodule
// Testbench
`timescale 1 ns/ 1 ns
module div2_vlg_tst();
// constants
// general purpose registers
reg eachvec;
// test vector input registers
reg clk;
wire clk_div;
wire [31:0] cnt1;
wire [31:0] cnt2;
wire temp1;
wire temp2;
div2 i1 (
.clk(clk),
.clk_div(clk_div),
.cnt1(cnt1),
.cnt2(cnt2),
.temp1(temp1),
.temp2(temp2)
);
initial
begin
clk=0;
forever #5 clk=~clk;
end
endmodule
|
|