数字电路设计自动化作业—2
6、半整数分频器
设计思想:
(1)设计一个N分频器,N=m+1;
(2)设计一个扣除脉冲的电路,并把它加到计数器的输出之后,如下图。
Verilog代码如下:
module div_half(
input resetn,
input clk_in,
output clk_out);
reg [3:0] count; //计数器
reg div_1, div_2;//脉冲控制端 2、脉冲控制端 3
wire clk_half;
parameter N = 12;
assign clk_half = clk_in ^ div_2; //脉冲控制端 1
always @(posedge clk_half or negedge resetn) //模为 n 的加法计数器
begin
if(!resetn)
begin
count <= 0;
div_1 <= 0;
end
else if (count == N-1)
begin
count <= 0;
div_1 <= 1;
end
else
begin
count <= count + 1;
div_1 <= 0;
end
end
always @(posedge div_1 or negedge resetn) //2 分频电路
begin
if(!resetn)
begin
div_2 <= 0;
end
else
begin
div_2 <= ~div_2;
end
end
assign clk_out = div_1;
endmodule
测试代码如下:
//div_half_tb
`timescale 1 ns/1 ns
module div_half_tb();
reg clk_in, resetn;
wire clk_out;
div_half my_div_half(
.clk_in(clk_in),
.resetn(resetn),
.clk_out(clk_out)
);
initial
clk_in = 0;
always
#1 clk_in = ~clk_in;
initial
begin
resetn = 0;
#5 resetn = 1;
end
endmodule
仿真波形如下(清晰显示请点开放大):
设定N为12,m为11,则实现11.5分频。
7、占空比可调分频器
Verilog代码如下:
module div_n_m(
input clk,
input clr,
input load,
input [7:0] M,
input [7:0] N,
output reg div_out);
reg [7:0] count;
always @(posedge clk)
begin
if (clr)
count <= 8'd0;
else if (load)
count <= M + N;
else if (count == M + N)
count <= 8'd0;
else
count <= count + 8'd1;
end
always @(posedge clk)
begin
if (count <= M)
div_out <= 1;
else
div_out <= 0;
end
endmodule