电子设计自动化课程
设计报告
小组成员:
学 院: 机电与信息工程学院
专 业: 电子信息科学与技术
年 级
一、实验要求
基本要求是利用FPGA,设计程序,让LED显示呼吸灯效果,即控制灯的亮暗速率,使LED由暗缓慢变亮 再逐渐变暗的过程。另外,数码管可以一直显示学号后四位,复位按键用来对系统进行复位。
可扩展功能是以不同的速率控制呼吸灯,能使八个LED显示不同的呼吸效果,并自行实现其它的拓展创新效果。
二、设计思路
1.显示学号
实现数码管循环显示两名组员的学号后四位。本次实验使用的数码管是4位共阳数码管,由4个输入控制选通,且4个数码管共用8个段引脚。
若想显示学号的后四位,思路是首先利用4位输入的选通端,显示学号的后四位,然后调整输入时钟的频率,加快选通端的交替速度,利用人类视觉暂留的特点来实现。这样,具体实现为设计状态机,不同的状态分别表示对应的数码管的数字。这样就可以显示出一名组员的学号。
2.呼吸灯
呼吸的效果是通过输入PWM(脉宽调制信号),以不同的占空比输入高低电平来实现的。当占空比逐渐增大时,LED灯的亮度会逐渐增大,反之占空比逐渐减小,LED的亮度会逐渐降低。
为了输出PWM波形,我们是这样来实现的:由基本频率分频产生相差1000倍的两个频率F0和F1,不妨假设F0=1,F1=1000。由F0和F1加计数,计数值分别为cnt1和cnt2,计数值范围相同,从0到999共1000个数。当cnt2cnt1时,输出低电平。这样我们可以想象,每1秒,cnt1只改变1次,而cnt2改变1000次,这里面总有cnt1小于cnt2的时候,也有cnt1大于cnt2的时候,相应的就会产生高低电平,且周期固定,为F0。如此一来我们就产生了周期不变,只改变占空比的PWM波形。但问题是这种方法只产生占空比增大的PWM,为了实现PWM占空比减小,我们再把F0分频1000倍,为F0’,当cnt1计数完一遍后,F0’便取反,通过F0’为高电平和低电平两种状态,控制已产生的PWM波的占空比变化的方向。
3.发挥部分
8个LED每两个为一组共3组,每一组的两个LED的呼吸速率是相同的,不同组的LED呼吸速率是不同的。合理安排每组LED对应的引脚,实现较为美观的呼吸效果。
三、关键程序
1. 分频
PROCESS(CLK)
variable count:integer range 0 to 9;
BEGIN
IF CLK'EVENT AND CLK='1' THEN
if count=9 then clk1w
count:=0;
else count:=count+1;
end if;
end if;
end process;
PROCESS(CLK)
variable count:integer range 0 to 99;
BEGIN
IF CLK'EVENT AND CLK='1' THEN
if count=99 then clk1m
count:=0;
else count:=count+1;
end if;
end if;
2. 计数
process(clk1k)------------PWMjishu
begin
if clk1k'event and clk1k='1' then
if cnt1=999 then cnt1
else cnt1
end if;
end if;
end process;
process(clk1k)------------PWMjishu
begin
if clk1k'event and clk1k='1' then
if cnt4=4999 then cnt4
else cnt4
end if;
end if;
3. 状态机
COM:PROCESS(ST) BEGIN
CASE ST IS
WHEN S0 => H1
WHEN S1 => H1
WHEN S2 => H1
WHEN S3 => H1
WHEN OTHERS =>NST
END CASE;
END PROCESS COM;
REG:PROCESS(CLK1J,RST) BEGIN
IF RST='0' THEN ST
ELSIF CLK1J'EVENT AND CLK1J='1' THEN ST
END PROCESS REG;
HEX1
四、RTL图、状态图、实物图
四位数码管循环显示学号的后四位的同时,8个LED分为L1&L2&L4、L3&L6、L5&L7&L8四组分别以不同速率呈现呼吸灯效果。
五、实验总结
本次实验的一个难点在于PWM波的产生,如果是使用C51单片机一类的芯片,那么通过中断是可以较容易的实现的,但由于此次使用FPGA芯片,没有中断功能,一开始并没有思路。几番查阅书籍、搜索网络资源,我们在他人的基础上研究学习,通过修改达到了自己想要的结果,所以对我们来说这真是一份宝贵的经验和财富。
总之,本次实验不仅让我们复习了学过的FPGA知识,还通过尝试新方法、解决难题等掌握了新的思路、新的方法,使我们对FPGA的应用更加熟练。实验过程中有成功也有失败,磨练了我们的意志,锻炼了我们的技巧,希望此次实验可以给我们将来带了有益的帮助。
电子设计自动化课程
设计报告
小组成员:
学 院: 机电与信息工程学院
专 业: 电子信息科学与技术
年 级
一、实验要求
基本要求是利用FPGA,设计程序,让LED显示呼吸灯效果,即控制灯的亮暗速率,使LED由暗缓慢变亮 再逐渐变暗的过程。另外,数码管可以一直显示学号后四位,复位按键用来对系统进行复位。
可扩展功能是以不同的速率控制呼吸灯,能使八个LED显示不同的呼吸效果,并自行实现其它的拓展创新效果。
二、设计思路
1.显示学号
实现数码管循环显示两名组员的学号后四位。本次实验使用的数码管是4位共阳数码管,由4个输入控制选通,且4个数码管共用8个段引脚。
若想显示学号的后四位,思路是首先利用4位输入的选通端,显示学号的后四位,然后调整输入时钟的频率,加快选通端的交替速度,利用人类视觉暂留的特点来实现。这样,具体实现为设计状态机,不同的状态分别表示对应的数码管的数字。这样就可以显示出一名组员的学号。
2.呼吸灯
呼吸的效果是通过输入PWM(脉宽调制信号),以不同的占空比输入高低电平来实现的。当占空比逐渐增大时,LED灯的亮度会逐渐增大,反之占空比逐渐减小,LED的亮度会逐渐降低。
为了输出PWM波形,我们是这样来实现的:由基本频率分频产生相差1000倍的两个频率F0和F1,不妨假设F0=1,F1=1000。由F0和F1加计数,计数值分别为cnt1和cnt2,计数值范围相同,从0到999共1000个数。当cnt2cnt1时,输出低电平。这样我们可以想象,每1秒,cnt1只改变1次,而cnt2改变1000次,这里面总有cnt1小于cnt2的时候,也有cnt1大于cnt2的时候,相应的就会产生高低电平,且周期固定,为F0。如此一来我们就产生了周期不变,只改变占空比的PWM波形。但问题是这种方法只产生占空比增大的PWM,为了实现PWM占空比减小,我们再把F0分频1000倍,为F0’,当cnt1计数完一遍后,F0’便取反,通过F0’为高电平和低电平两种状态,控制已产生的PWM波的占空比变化的方向。
3.发挥部分
8个LED每两个为一组共3组,每一组的两个LED的呼吸速率是相同的,不同组的LED呼吸速率是不同的。合理安排每组LED对应的引脚,实现较为美观的呼吸效果。
三、关键程序
1. 分频
PROCESS(CLK)
variable count:integer range 0 to 9;
BEGIN
IF CLK'EVENT AND CLK='1' THEN
if count=9 then clk1w
count:=0;
else count:=count+1;
end if;
end if;
end process;
PROCESS(CLK)
variable count:integer range 0 to 99;
BEGIN
IF CLK'EVENT AND CLK='1' THEN
if count=99 then clk1m
count:=0;
else count:=count+1;
end if;
end if;
2. 计数
process(clk1k)------------PWMjishu
begin
if clk1k'event and clk1k='1' then
if cnt1=999 then cnt1
else cnt1
end if;
end if;
end process;
process(clk1k)------------PWMjishu
begin
if clk1k'event and clk1k='1' then
if cnt4=4999 then cnt4
else cnt4
end if;
end if;
3. 状态机
COM:PROCESS(ST) BEGIN
CASE ST IS
WHEN S0 => H1
WHEN S1 => H1
WHEN S2 => H1
WHEN S3 => H1
WHEN OTHERS =>NST
END CASE;
END PROCESS COM;
REG:PROCESS(CLK1J,RST) BEGIN
IF RST='0' THEN ST
ELSIF CLK1J'EVENT AND CLK1J='1' THEN ST
END PROCESS REG;
HEX1
四、RTL图、状态图、实物图
四位数码管循环显示学号的后四位的同时,8个LED分为L1&L2&L4、L3&L6、L5&L7&L8四组分别以不同速率呈现呼吸灯效果。
五、实验总结
本次实验的一个难点在于PWM波的产生,如果是使用C51单片机一类的芯片,那么通过中断是可以较容易的实现的,但由于此次使用FPGA芯片,没有中断功能,一开始并没有思路。几番查阅书籍、搜索网络资源,我们在他人的基础上研究学习,通过修改达到了自己想要的结果,所以对我们来说这真是一份宝贵的经验和财富。
总之,本次实验不仅让我们复习了学过的FPGA知识,还通过尝试新方法、解决难题等掌握了新的思路、新的方法,使我们对FPGA的应用更加熟练。实验过程中有成功也有失败,磨练了我们的意志,锻炼了我们的技巧,希望此次实验可以给我们将来带了有益的帮助。