FPGA分频器设计文档格式.docx
- 文档编号:19034151
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:12
- 大小:17.51KB
FPGA分频器设计文档格式.docx
《FPGA分频器设计文档格式.docx》由会员分享,可在线阅读,更多相关《FPGA分频器设计文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
实验人
学
号
20091185015
实验小组
第2
组
实验性质
□验证性
□设计性□综合性
□应用性
实验成绩:
评阅教师签名:
一.实验目的:
(1)掌握常用的EDA设计工具的使用方法;
(2)熟悉软件编程环境,熟练使用QuartusⅡ软件的各项功能;
(3)在软件上调用各项已编译好的Verilog语言程序,参考熟悉Verilog语言编程的格式;
(4)提高学生使用开发工具进行实际电路或系统设计的能力。
二.实验内容:
(1)用HDL完成10分频,占空比为50%
(2)用HDL完成9分频,占空比为50%
(3)分别对上述仿真进行验证,并综合处电路图。
三.用HDL完成10分频,占空比为50%
源代码如下:
moduleodd_division(clk,rst,count,clk_odd);
inputclk,rst;
outputclk_odd;
output[3:
0]count;
regclk_odd;
reg[3:
parameterN=10;
always@(posedgeclk)
if(!
rst)
begin
count<
=1'
b0;
clk_odd<
end
else
if(count<
N/2-1)
=count+1'
b1;
=~clk_odd;
endmodule
激励波形:
仿真后的结果:
仿真成功后得到的电路图:
四.用HDL完成9分频,占空比为50%
源代码为:
modulecount_num(reset,clk,count);
parameternum=9;
inputclk,reset;
outputwirecount;
reg[4:
0]m,n;
regcount1,count2;
assigncount=count1|count2;
always@(posedgeclk)
beginif(!
reset)
begincount1<
=0;
m<
beginif(m==num-1)m<
elsem<
=m+1;
if(m<
(num-1)/2)count1<
=1;
elsecount1<
always@(negedgeclk)
reset)begincount2<
n<
beginif(n==num-1)n<
elsen<
=n+1;
if(n<
(num-1)/2)count2<
elsecount2<
/
仿真成功后的电路图:
实验总结:
(1).学习运用HDL语言描述简单的分频电路,9分频和10分频看似一样其实中间有些许
区别,9分频为奇分频,9分频时将两个分频叠加;
十分频为偶分频,使用一模N计数器模块
即可实现,即每当模N计数器上升沿从0开始计数至N-1时,输出时钟进行翻转,同时给计
数器一复位信号使之从0开始重新计数,以此循环即可。
(2)占空比为50%的分频,设计思想如下:
基于
(1)中占空比为非50%的输出时钟在输入时钟的上升沿触发翻转;
若在同一个输入时钟周期内,此计数器的两次输出时钟翻转分别
在与
(1)中对应的下降沿触发翻转,输出的时钟与
(1)中输出的时钟进行逻辑或,即可得到占空比为50%的奇数倍分频时钟。
当然其输出端再与偶数倍分频器串接则可以实现偶数倍分频。
《CPLD/FPGA原理及应用》课程上机实验报告(四)
实验名称输入32位时钟可调的计数器
2012年5
月
计算机机房101
30日
高傲
喻正考
第
一.实验目的
实现电子时钟等中等复杂程度功能模块的设计,掌握模块例化的方法
及技巧,熟练运用测试平台modsim进行仿真。
并熟练掌握FPGA的设计、综合、
适配、下载及后仿真的全流程及方法。
二.实验内容
1.设计一个32为可调的月计数器,用verilog编程。
2.用测试平台modsim进行仿真。
3.用quartus综合出电路图。
三.实验过程
1.分频模块
moduledivto(clk,rst,cout);
parameterNUM=32768;
outputregcout;
reg[14:
0]m;
rst)begincout<
elsebeginif(m==NUM-1)m<
if(m<
(NUM-1)/2)cout<
elsecout<
end
2.秒计数模块
moudel
count_date(clk,rst,second,minute,hour,day,month,initialyear);
inputclk,rst,initialyear;
reg[4:
0]y_day;
outputreg[5:
0]second,minute,day;
outputreg[4:
0]hour;
outputreg[3:
0]month;
always@(posedgeclkorposedgerst)
if(rst)second<
elseif(second>
=59)second<
elsesecond<
=second+1;
End
3.分钟计数模块
if(rst)minute<
elseif(minute<
=59)
if(second==59)
minute<
=minute+1;
elseminute<
4.小时计数模块
if(rst)hour<
elseif(hour<
=23)
if(second==59&
&
minute==59)
hour<
=hour+1;
elsehour<
5.天计数模块
if(month==1||month==3||month==5||month==7||month==8||month==10||mo
nth==12)
y_day=31;
elseif(month==4||month==6||month==9||month==11)
y_day=30;
if(initialyear%100==0)&
initialyear(%400==0)||(initialyear%100!
=0)
(initialyear%4==0)))
y_day=29;
elsey_day=28;
if(rst)day<
elseif(day<
=y_day)
minute==59&
hour==23)
day<
=day+1;
elseday<
6.月计数模块
if(rst)month<
elseif(month<
=12)
if(day==y_day+1)
month<
=month+1;
day=1;
elsemonth<
Endmodule
7.调节计数器模块
always@(posedgeclkorposedgerst)
/******判断是否为复位信号********/
if(rst)
second=0
minute=0
hour=0
day=1
month=1
8.仿真模块
modulemytest;
parameterDELAY=100;
regclk,rst,initialyear;
wirecout;
wire[5:
0]minute,day;
wire[4:
wire[3:
divtou1(clk,rst,cout);
count_dateu2(clk,rst,cout,minute,hour,day,month,initialyear);
always#(DELAY/2)clk=~clk;
initialbeginclk=0;
rst=0;
initialyear=2012;
#DELAYrst=1;
#DELAYrst=0;
#(DELAY*300)$finish;
initial$monitor($time,,,"
clk=%drst=%dcout=%dminute=%dhour=%d
day=%dmonth=%disryear=%d"
clk,rst,cout,
minute,hour,day,month,isryear);
9.仿真结果
1).秒计数器模块
2).分计数模块
3).小时计数模块
4).天计数模块
5).月计数器模块
综合电路图:
通过本实验学会将一个较复杂的设计分模块进行,逐个击破最终得到想要的结果,。
学会了按层次进行设计,将相同功能模块实例化,让设计更加清楚明了,更加简洁。
其次还学会了如何运用modsim进行仿真,怎样写好一个仿真程序,怎样进行仿真
验证设计的正确与否。
仿真正确后在用quartus综合的出电路图。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 分频器 设计