课程设计基于FPGA的半整数分频器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告
设计名称EDA(VHDL)课程设计
专业班级电子0942
姓名姬鹏冲
学号0904451213
成绩评定
电气与信息工程学院
二0一二年一月
课程设计要求和成绩考核办法
(要求和成绩考核办法在封皮背面打印)
1.不允许在教室或实验室内吸烟、吃零食,不准带无关人员到教室或实验室活动,否则扣平时表现分。

2.凡病事假超过3天(每天7小时),或迟到早退三次以上,或旷课两次(1天)以上,不得参加本次考核,按不及格处理,本次课程设计不能通过。

3.病事假必须有请假条,需经班主任或有关领导批准,否则按旷课处理。

4.课程设计的考核由指导教师根据设计表现(出勤、遵守纪律情况等)、设计报告、设计成果、答辩等几个方面,给出各项成绩或权重,综合后给出课程设计总成绩。

该设计考核须经教研室主任审核,主管院长审批备案。

5.成绩评定采用五级分制,即优、良、中、及格和不及格。

6.课程设计结束一周内,指导教师提交成绩和设计总结。

7.设计过程考核和成绩在教师手册中要有记载。

实习报告要求
实习报告内容、格式各专业根据实习(设计)类别(技能实习、认识实习、生产实习、毕业实习等)统一规范,经教研室主任审核、主管院长审批备案。

注意:
1.课程设计任务书和指导书在课程设计前发给学生,设计任务书放置在设计报告封面后和正文目录前。

2.为了节省纸张,保护环境,便于保管设计报告,统一采用A4纸,课程设计报告建议双面打印(正文采用宋体五号字)或手写,左侧装订,订两个钉。

基于FPGA的半整数分频器设计
一、系统设计任务及功能概述
本系统是利用VHDL硬件描述语言和原理图输入方式,通过MUX+PLUSⅡ开发软件和ALTER 公司的FLEX系列EPF10K10LC84-4型FPGA方便的完成了半整数分频器电路的设计。

本系统是通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。

二、系统设计方案和程序设计
1.系统设计方案
我们采用脉冲吞吐计数器和锁相环技术,先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的5.5分频值。

该分频器电路可由一个异或门、一个模6数器和二分频器组成。

这样可以实现分频系数为5.5分频器以及11分频。

设计框图如下所示
2.VHDL程序设计
(1)模6计数器VHDL描述设计
该计数器可产生一个分频系数为5.5分频器,并产生一个默认的逻辑符号cont6。

其输入端口为rst、en和clk;输出端口为qa,qb,qc。

下面给出模6数器的VHDL描述代码:libraryieee;
use ieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entity cont6 is
port(clk:instd_logic;
rst:instd_logic;
en:instd_logic;
qa,qb,qc:outstd_logic);
end entity cont6;
architecturewode of cont6 is
signalcount:std_logic_vector(2 downto 0);
begin
process(clk,rst,en)is
begin
ifrst='1'then count<="000";
elsifclk'event and clk='1'then
if en='1'then
if count="101" then count<="000";
else count<=count+1;
end if;
end if;
end if;
end process;
qa<=count(0);
qb<=count(1);
qc<=count(2);
end architecture wode;
模六计数器原件生成图如下:
图一模六计数器原件生成
上面的程序经编译、时序模拟在MAX+PLUSⅡ中可得到如图所示的仿真波形:
图2模6计数器仿真波形
(2)半整数分频器设计
现在通过设计一个分频系数为5.5的分频器给出用FPGA设计半整数分频器的一般方法。

该5.5分频器由前面设计的模6计数器、异或门和D触发器组成,利用图形设计方法构造如图所示的5.5分频器电路原理图。

图3 5.5分频器电路原理图
3.将cont6、异或门和D触发器通过图3所示的电路建立逻辑连接关系,并用原理图输入方式调入图形编辑器,然后经过逻辑综合即可得到如图4所示的仿真波形。

图4 5.5分频器仿真波形图
三.
通过用VHDL语言描述模N计数器,然后进行波形仿真,原理图仿真等,了解了半整数分频器的工作原理。

试验中遇到了好多不会的通过查书,请教老师,请教同学一一解决了。

通过这次的实验认识了把课本的知识用到生活实践中,来解决问题很好的培养了自己的动手能力和学习能力。

四.参考文献
[1] 谭会生,张昌凡.EDA技术及应用. 西安:西安电子科技大学出版社,2006,12.
[2] 郭振武,从红霞。

EDA实验教程. 天津:南开大学出版社,2011,8
[3] 杨晓慧,杨永健.基于FPGA的EDA/SOPC技术与VHDL.北京:国防工业出版社,2007,7.
[4] 皱其宏 EDA实验技术教程。

北京:中国电力出版社。

2009.5.
[5] 陈雪松,滕立中编著.VHDL入门与应用.北京:人民邮电出版社. 2000.
99分钟定时器的VHDL设计
一.系统设计任务及功能概述
1.系统设计任务
任务要求:通过设计,定时器可以整体清零;可以定时最高到99MIN;以秒速度递增至预定时间,以秒速度递减至零。

2.系统功能概述
本系统是一个99分钟的定时器,具有以下功能:
具有整体清零(reset)功能,定时99分钟。

以秒速度递增至99分钟停止,启动报警(cout)5秒钟。

具有置位(cn)控制,即cn高电平时,clk脉冲上升沿到来,计数加一;cn 低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束,并同时报警(cout)5秒钟。

时钟信号提供秒信号(1HZ);四位数码管静态显示,高位high(3 downto 0)显示分,低位low(3 downto 0)显示秒。

二.系统设计方案和程序设计
1.系统设计方案
通过记数器控制中心输入秒信号,并输出两个四位的BCD码,可分别来表示各位与十位,也可整体复位清零。

通过该记数器实现以秒速度递增至清零,该记数器以秒的速度递增至99来实现置位,而以秒的速度递减至零以实现定时功能。

当以秒速度递增至99分钟停止,启动报警(cout)5秒钟。

cn低电平时,置位结束,进入倒计时阶段,以秒速度使输出计数减一至零结束时也同时报警(cout)5秒钟。

通过二选一选择器对个位和十位进行扫描输出,并将输出送到译码器,通过译码器对输入的四位BCD码进行七段码编译,然后输出到数码管。

2.VHDL程序设计
Aaa控制计数模块,是该定时器的核心部分.res为复位端,用来清零,采用异步复位方式;cn用于置位,高电平有效。

cout端将在定时结束时产生高电平。

Low和high为四位BCD 码输出端口,可用于显示。

当cn有效时,clk脉冲上升沿到来,计数加1;当cn为低电平时,置位结束,进入计时阶段,每1个时钟周期发出一个脉冲,使输出记数减1,直到记时结束,令cout位为高电平为止。

该模块的源程序如下:
libraryieee;
use ieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjsq is
port (cn,res,clk:instd_logic;
cout :out std_logic;
flow,fhigh,mlow,mhigh:outstd_logic_vector(3 downto 0));
endjsq;
architecture art of jsq is
signalfdisplow,fdisphigh,mdisplow,mdisphigh:std_logic_vector(3 downto 0); --定义信号分别表示分钟和秒钟的十位和个位
begin
process(clk,cn,res)
begin
if(res='1')then
mdisplow<="0000";
mdisphigh<="0000";
fdisplow<="0000";
fdisphigh<="0000";
cout<='0'; --res高电平执行复位
elsif (clk'event and clk='1')then
ifcn='1'then
ifmdisplow<9 then
mdisplow<=mdisplow+1;--秒钟个位数小于9时执行计数加1
cout<='0';
elsifmdisplow="1001" and mdisphigh<5 then
mdisplow<="0000";
mdisphigh<=mdisphigh+1;--秒钟十位进位加1
elsifmdisphigh="0101" and fdisplow<9 then
mdisplow<="0000";
mdisphigh<="0000";
fdisplow<=fdisplow+1;--满59秒后分钟个位加1
elsiffdisplow="1001" and fdisphigh<9 then
mdisplow<="0000";
mdisphigh<="0000";
fdisplow<="0000";
fdisphigh<=fdisphigh+1;--满9分59秒后分钟十位加1
elsiffdisplow="1000" and fdisphigh="1001" then
mdisplow<="0000";
mdisphigh<="0000";
fdisplow<="1001";--计时至99分停止
elsiffdisplow="1001" and fdisphigh="1001" then
cout<='1';--计时停止cout变为高电平
end if;
elsifcn='0' then --cn为0进入倒计时
ifmdisplow>0 then
mdisplow<=mdisplow-1;--秒钟减1
cout<='0';
elsifmdisplow="0000" and mdisphigh>0 then
mdisplow<="1001";
mdisphigh<=mdisphigh-1;--个位0时十位减1
elsifmdisphigh="0000" and fdisplow>0 then
mdisplow<="1001";
mdisphigh<="0101";
fdisplow<=fdisplow-1;--分减1
elsiffdisplow="0000" and fdisphigh>0 then
mdisplow<="1001";
mdisphigh<="0101";
fdisplow<="1001";
fdisphigh<=fdisphigh-1;--分减10
elsiffdisphigh="0000"and fdisplow="0000"and mdisphigh="0000"and mdisplow="0000"then
cout<='1';--倒计时结束cout变为高电平
end if;
end if;
end if;
end process;
mhigh<=mdisphigh;
mlow<=mdisplow;
fhigh<=fdisphigh;
flow<=fdisplow;
end art;
该计数器生成的原件如下图所示:
图一计数器原件生成图
计数器波形仿真图如下图所示:
图二计数器波形仿真
报警器模块:主要功能是计数器以秒速度递增至99分钟停止时启动报警(cout)5秒钟。

倒计时阶段,计时器以秒速度使输出计数减一至零结束时也同时报警(cout)5秒钟。

当始终把脉冲clk上升沿到来时count开始计数,同时speak置高电平开始报警,当计数达到5s后speak置0,停止报警。

它的操作源程序如下:
libraryieee;
use ieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entity cou5 is
port(clk,reset,en:instd_logic;
speak:outstd_logic);
end cou5;
architecture behavior of cou5 is
signal count:std_logic_vector(2 downto 0);--定义计数信号
begin
process(reset,clk)
begin
if reset='1' or en='0' then
count(2 downto 0)<="000";
speak<='0';--有复位信号或始能端低电平时输出0
else
if(clk'event and clk='1')then
count<=count+1;
speak<='1';--有时钟上升沿计数加1,报警信号speak高电平
if count>5 then
speak<='0';--5秒之后停止报警speak为0
end if;
end if;
end if;
end process;
end behavior;
该报警器生成的原件图如下:
图三报警器原件生成图
该报警器波形仿真图如下:
图四报警器波形仿真
译码器yima是对四位BCD码进行七段码译码,其输出p0~p6分别接数码管各段进行显示输出,它的操作源程序如下:
libraryieee;
use ieee.std_logic_1164.all;
entityyima is
port(a:in std_logic_vector(3 downto 0);
p:out std_logic_vector(6 downto 0));
endyima;
architecture arc of yima is
begin
process(a)
begin
case a is
when"0000"=>p<="0111111";
when"0001"=>p<="0000110";
when"0010"=>p<="1011011";
when"0011"=>p<="1001111";
when"0100"=>p<="1100110";
when"0101"=>p<="1101101";
when"0110"=>p<="1111101";
when"0111"=>p<="0000111";
when"1000"=>p<="1111111";
when"1001"=>p<="1101111";--七段译码器显示0—9
when others=>p<="0000000";
end case;
end process;
endarc;
该译码器原件生成图如下:
图五译码器原件生成图该译码器波形仿真图如下:
图六译码器波形仿真
对定时器设计的各个模块进行原件例化,程序如下:libraryieee;
use ieee.std_logic_1164.all;
entityyjlh is
port(sen,resa,clka,resb: in std_logic;
myimal:outstd_logic_vector(6 downto 0); --秒钟个位译码输出myimah:outstd_logic_vector(6 downto 0); --秒钟十位译码输出fyimal:outstd_logic_vector(6 downto 0); --分钟个位译码输出fyimah:outstd_logic_vector(6 downto 0); --分钟十位译码输出baoj:outstd_logic
);
end entity yjlh;
architecture art of yjlh is
componentjsq is
port (cn,res,clk:instd_logic;
cout :out std_logic;
flow,fhigh,mlow,mhigh:outstd_logic_vector(3 downto 0)); end component jsq; --jsq控制模块
componentyima is
port(a:in std_logic_vector(3 downto 0);
p:out std_logic_vector(6 downto 0));
end component yima;--译码模块
component cou5 is
port(clk,reset,en:instd_logic;
speak:outstd_logic);
end component cou5;--报警模块
signal s1,s2,s3,s4:std_logic_vector(3 downto 0);
signal s5:std_logic;
begin
u1:jsq port map(sen,resa,clka,s5,s1,s2,s3,s4);
u2:yima port map(s1,fyimal);
u3:yima port map(s2,fyimah);
u4:yima port map(s3,myimal);
u5:yima port map(s4,myimah);
u6:cou5 port map(clka,resb,s5,baoj);--各模块通过位置关联
end architecture art;
定时器原件例化后生成的原件图如下:
图七定时器原件生成图
3. 定时器原件例化后波形仿真图如下:
图八定时器原件例化后波形仿真
3.输入、输出接口说明
三.
在这次课程设计中,基本完成了99分钟定时器的设计,实现了其所有功能。

但是在此过程中,遇到了很多困难,如编写程序过程中出现错误语句,或者编写的语句不能完成预期的功能等。

但经过反复修改与调试,程序没有了错误,尽管如此,该程序也未能编译成功,后来才发现只有把要编译的文件指成当前文件才可进行编译。

又如在设计原理图过程当中保存该文件时名字命名的问题,又有了新的认识,进一步掌握了VHDL的命名规则。

同时原理图设计必须要规范,连线必须要严谨,且每一个步骤和过程都必须要编译通过,才可逐步进行下一环节。

当然还有很多问题都出现在设计过程中,但是经过反复琢磨、推敲和老师的指导都完全解决了。

最终完成了99分钟定时器的设计。

四.参考文献
[1] 谭会生,张昌凡.EDA技术及应用. 西安:西安电子科技大学出版社,2006,12.
[2] 孙俊逸,刘江海。

EDA技术课程设计。

北京:华中科技大学出版社,2009,5
[3] 徐志军,徐光辉编著.CPLD/FPGA的开发与应用. 北京:电子工业出版社.2002.
[4] 杨晓慧,杨永健.基于FPGA的EDA/SOPC技术与VHDL.北京:国防工业出版社,2007,7.
[5] 王诚,吴继华等,ALTERA FPGA/CPLD设计(基础篇).北京:人民邮电出版社,2008,12.。

相关文档
最新文档