5分频器的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安康学院HDL数字系统课程设计报告书
课题名称:占空比为1:1的奇数分频器设计
姓名:
学号:
院系:
专业:
指导教师:
时间:
课程设计项目成绩评定表设计项目成绩评定表
课程设计报告书目录
设计报告书目录
一、设计目的 (1)
二、设计思路 (1)
三、设计过程 (1)
3.1、系统方案论证 (1)
3.2、程序代码设计 (2)
四、系统调试与结果 (4)
五、主要元器件与设备 (5)
六、课程设计体会与建议 (5)
6.1、设计体会 (5)
6.2、设计建议 (6)
七、参考文献 (6)
一、设计目的
1、了解EDA软件在电子设计当中的重要作用。
2、熟悉并掌握QuartusⅡ开发软件的基本使用方法。
3、运用ModelSim软件对分频器进行仿真测试。
二、设计思路
对于实现一个占空比为1:1的5倍奇数分频,首先经过上升沿触发进行模5计数,计数选定到2进行输出时钟翻转,然后经过4再次进行翻转得到一个占空非1:1奇数5分频时钟。再者同时进行下降沿触发的模5计数,到和上升沿触发输出时钟翻转选定值相同值时,进行输出时钟翻转,同样经过4时,输出时钟再次翻转得到占空比非1:1的5分频时钟。两个占空比非1:1的5分频时钟进行相或运算,得到占空比为1:1的5分频时钟。
要设计占空比为50%的奇数(n)倍分频器,可以先分别设计从时钟上升沿、下降沿开始的占空比为(n-1)/2n的分频器A,B。将A与B相或结果就是占空比为50%的奇数倍分频器。因为A,B产生的信号的高电平持续时间均比低电平持续时间少一个时钟周期,B相对A来说可以说是延时了半个时钟,那么A与B进行或运算,则结果的高电平持续时间增加了半个时钟周期,而低电平持续时间则减少了半个时钟周期。因此占空比达到50%。
三、设计过程
3.1系统方案论证
奇数倍(2N+1)分频:
(1)使用模为2N+1的计数器,让输出时钟在X-1(X在0到2N-1之间)和2N时各翻转一次,则可得到奇数分频器,但是占空比并不是50%(应为 X/(2N+1))。得到占空比为50%的奇数分频器的基本思想是:将得到的上升沿触发计数的奇数分频输出信号CLK1,和得到的下降沿触发计数的相同(时钟翻转值相同)奇数分频输出信号CLK2,进行相或运算。如图1所示.
图 2
(2)占空比为X/(2N+1)或(2N+1-X)/(2N+1)分频,用模(2N+1)计数器模块可以实现。取0至2N-1之间一数值X(0),当计数器时钟上升沿从0开始计数到X值时输出时钟翻转一次,在计数器继续计数达到2N时,输出时钟再次翻转并对计数器置一复位信号,使之从0 开始重新计数,即可实现。如图4所示,由四个计数器生成了两个占空比2:3的分频器step1、和step2。step1由上升沿触发器出发,step2由下降沿触发器出发。然后经过或门生成占空比为1:1的分频器。
(3)占空比为50%的分频,设计思想如下:基于(2)中占空比为非50%的输出时钟在输入时钟的上升沿触发翻转;若在同一输入时钟周期内,此计数器的两次输出时钟翻转分别在与(2)中对应的下降沿触发翻转,输出的时钟与(2)中输出的时钟进行逻辑或,即可得到占空比为50%的奇数倍分频时钟。
3.2程序代码设计
功能模块:
module div_5 ( clkin,clkout );
input clkin;
output clkout;
reg [2:0] step1, step2;
always @(posedge clkin )
begin
case (step1)
3'b000: step1<=3'b001;
3'b001: step1<=3'b011;
3'b011: step1<=3'b100;
3'b100: step1<=3'b010;
3'b010: step1<=3'b000;
default:step1<=3'b000;
endcase
end
always @(negedge clkin )
begin
case (step2)
3'b000: step2<=3'b001;
3'b001: step2<=3'b011;
3'b011: step2<=3'b100;
3'b100: step2<=3'b010;
3'b010: step2<=3'b000;
default:step2<=3'b000;
endcase
end
assign clkout=step1[0]|step2[0];
endmodule
测试模块:
`timescale 1 ps/ 1 ps
module div_5_vlg_tst();
reg eachvec;
reg clkin;
wire clkout;
div_5 i1 (
.clkin(clkin),
.clkout(clkout)
);
initial
begin
clkin=0;
forever #5 clkin=~clkin;
end
assign step1=i1.step1[0];
assign step2=i1.step2[0];
endmodule