EDA多模式流水灯设计Word格式文档下载.docx
- 文档编号:20974250
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:21
- 大小:517.67KB
EDA多模式流水灯设计Word格式文档下载.docx
《EDA多模式流水灯设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《EDA多模式流水灯设计Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
∙、必须有手动/自动CLK
∙、至少4种流水灯方式
∙、数显管的显示
3、设计原理图
4、设计方案的选择
设计流水灯可以采用状态机来实现不同的LED显示方式从而实现流水效果,1Hz、2Hz信号可以将DE2板上的50MHZ的有源晶体作为时钟源,通过50000000、25000000分频得到1Hz,2Hz信号,多模式的选择可以采用设计多进制计数器的方法,控制输出从而实现多模式的控制。
(1)、顶层设计
从原理图我们可以看到主要有6个模块,包括1hz分频器、2hz分频器、时钟选择器、模块选择器、流水灯实现、数显管实现六个模块。
程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityliushuiis--顶层文件
port(clk_50m:
instd_logic;
--DE2开发板上的50Mhz的时钟
clr:
--清零信号(开关)
mode_select:
--模式选择
clk_hand:
--手动时钟
clk_select:
--自动/手动时钟选择信号
y1,y2,y3,y4,y5,y6,y7,y8:
outstd_logic_vector(6downto0);
--数显管的输出
led:
outstd_logic_vector(17downto0));
--流水灯的显示
endliushui;
architectureaofliushuiis
signalclk:
std_logic;
--时钟选择的输出
signalflash:
--数显管的闪烁信号
signala1,a2,a3,a4,a5,a6,a7,a8:
std_logic_vector(3downto0);
--数显管的驱动信号
signalclk_1hz:
--1HZ时钟信号
signalmode:
std_logic_vector(1downto0);
--模式选择信号的输出
componentclock_1hz
port(clk_in:
--50MHZ的DE2系统的主时钟输入信号
clk_out:
outstd_logic);
--1hz的方波信号
endcomponent;
componentclock_2hz
port(clk_in:
outstd_Logic);
--2hz的方波信号
componentclk_selection
port(clk_select:
clk_1hz:
--手动时钟
clk:
--时钟输出
componentled7s
port(a:
instd_logic_vector(3downto0);
flash:
--数显管的闪烁信号
y:
outstd_Logic_vector(6downto0));
componentmode_selection
port(mode_select:
mode:
bufferstd_logic_vector(1downto0));
endcomponent;
componentmode_led
port(clr:
--清零信号(开关)
clk:
--时钟信号
instd_logic_vector(1downto0);
--模式选择信号
outstd_logic_vector(0to17);
a1,a2,a3,a4,a5,a6,a7,a8:
outstd_logic_vector(3downto0));
--数显管的闪烁信号
begin
--设置由50MHZ分频得到1HZ时钟的映射
u1:
clock_1hz
portmap(clk_in=>
clk_50m,clk_out=>
clk_1hz);
--设置由50MHZ分频得到125HZ时钟的映射
u2:
clock_2hz
flash);
--设置自动/手动时钟选择的映射
u3:
clk_selection
portmap(clk_select=>
clk_select,clk_1hz=>
clk_1hz,clk_hand=>
clk_hand,clk=>
clk);
--设置流水灯效果的映射
u4:
mode_selection
portmap(mode_select=>
mode_select,mode=>
mode);
--设置流水灯模式选择的映射
u5:
mode_led
portmap(clr=>
clr,clk=>
clk,mode=>
mode,led=>
led,a1=>
a1,a2=>
a2,a3=>
a3,a4=>
a4,a5=>
a5,a6=>
a6,a7=>
a7,a8=>
a8);
--设置数显管显示的映射
u6:
led7s
portmap(a=>
a1,flash=>
flash,y=>
y1);
u7:
led7s
portmap(a=>
a2,y=>
y2,flash=>
u8:
a3,y=>
y3,flash=>
u9:
a4,y=>
y4,flash=>
u10:
a5,y=>
y5,flash=>
u11:
a6,y=>
y6,flash=>
u12:
a7,y=>
y7,flash=>
u13:
a8,y=>
y8,flash=>
--u14:
clock_125hz
--portmap(clk_in=>
clk_50m,clk_out=>
clk_125hz);
enda;
(2)模块设计
1、1hz,2hz分频器的设计
本方案的设计思路是:
设计一个计数器,其阀值为分频数的一半,每记到规定阀值的时候就溢出一个信号,再对此信号进行采集,当此信号处于上升沿触发时,就把输出信号翻转一次,从而达到设计的目的。
1hz分频器的程序:
entityclock_1hzis
port(clk_in:
--50Mhz的时钟信号
clk_out:
endclock_1hz;
architectureaofclock_1hzis
signalfull:
signalcp1:
integerrange0to25000000;
begin
p1:
process(clk_in)--此进程进行25000000分频
ifclk_in'
eventandclk_in='
1'
then
ifcp1<
25000000then
cp1<
=cp1+1;
elsecp1<
=0;
endif;
ifcp1=25000000thenfull<
='
;
elsefull<
0'
endif;
endprocessp1;
p2:
process(full)--此进程设定了一个T触发器,对上一个进程的信号再进行2分频,得到1hz的时钟信号
variablecp2:
if(full'
eventandfull='
)then
cp2:
=notcp2;
if(cp2='
clk_out<
else
endif;
endif;
endprocessp2;
2hz分频器的程序
entityclock_2hzis
endclock_2hz;
architecturebehaveofclock_2hzis
signalfull:
integerrange0to12500000;
process(clk_in)--此进程进12500000分频
12500000then
ifcp1=12500000thenfull<
process(full)----此进程设定了一个T触发器,对上一个进程的信号再进行2分频,得到2hz的时钟信号
endbehave;
2、时钟选择
设计方案:
定义一个选通信号clk_select,当clk_select为高电平时,选通1hz的信号,当clk_select为低电平时,选通手动信号。
entityclk_selectionis
endclk_selection;
architecturebofclk_selectionis
process(clk_1hz,clk_select,clk_hand)--此进程是通过控制信号来选择手动/自动的时钟信号
begin
if(clk_select='
)then
clk<
=clk_1hz;
else
=clk_hand;
endprocess;
endb;
3、模式选择器
设计一4进制计数器,分别对应着4种不同的流水灯方式,采用手动的信号控制,当检测到信号处于上升沿状态时,就执行程序,即加1.
模式控制器的程序:
entitymode_selectionis
port(mode_select:
outstd_logic_vector(1downto0));
endmode_selection;
architecturecofmode_selectionis
signalstate:
begin
process(mode_select)--此进程为4种模式的选择
ifmode_select'
eventandmode_select='
then
state<
=state+1;
--mode_select上升沿到来时,实现加1
mode<
=state;
endc;
4、流水灯的实现
方案:
采用状态机的方式,当处于某个状态时,对应于某个状态的输出,当加入时钟信号之后,状态机开始运行,这时就可以根据不同的状态的转换实现流水效果。
流水灯程序:
entitymode_ledis
outstd_logic_vector(3downto0)--数显管的驱动信号
);
endmode_led;
architectureaofmode_ledis
typestates1is(s0,s1,s2,s3,s4,s5);
--自定义了四种枚举类型states1、states2、states3、states4
typestates2is(s0,s1,s2,s3,s4,s5);
typestates3is(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17);
typestates4is(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15,s16,s17);
signalstate1:
states1;
--状态机
signalstate2:
states2;
signalstate3:
states3;
signalstate4:
states4;
process(mode,clk,clr)
ifmode="
00"
then--模式1的状态机设置
if(clr='
)then--初始化状态
state1<
=s0;
elsif(clk'
eventandclk='
casestate1is
whens0=>
state1<
=s1;
whens1=>
=s2;
whens2=>
=s3;
whens3=>
=s4;
whens4=>
=s5;
whens5=>
=s0;
whenothers=>
state1<
endcase;
elsifmode="
01"
then--模式2的状态机设置
state2<
casestate2is
state2<
state2<
10"
then--模式3的状态机设置
if(clr='
state3<
elsif(clk'
eventandclk='
casestate3is
state3<
=s6;
whens6=>
=s7;
whens7=>
=s8;
whens8=>
=s9;
whens9=>
=s10;
whens10=>
=s11;
whens11=>
=s12;
whens12=>
=s13;
whens13=>
=s14;
whens14=>
=s15;
whens15=>
=s16;
whens16=>
=s17;
whens17=>
endcase;
elsifmode="
11"
then--模式4的状态机设置
state4<
casestate4is
state4<
state
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 模式 流水 设计