用VHDL设计数字系统实例.pdf
- 文档编号:3437151
- 上传时间:2023-05-05
- 格式:PDF
- 页数:91
- 大小:561.21KB
用VHDL设计数字系统实例.pdf
《用VHDL设计数字系统实例.pdf》由会员分享,可在线阅读,更多相关《用VHDL设计数字系统实例.pdf(91页珍藏版)》请在冰点文库上搜索。
目录例1矩形波发生器2例2三角波发生器15例3数字频率计22例4数字钟32例5交通灯控制器43例6LED字符显示器52例7LED跑马灯55例8过河游戏59例9拔河游戏69例10键盘输入显示器8212附录I用VHDL设计数字系统实例为了拓宽设计思路,在光盘中再举出一些用VHDL设计数字系统的实例。
以下实例只提供简单的总体框图和简单的注释作为提示,未涉及之处留给读者思考、开拓。
例1矩形波发生器1.设计任务及要求
(1)设计一个矩形波发生器,输出频率范围为10Hz1kHz,分如下两挡:
110Hz100Hz挡,其频率可调节,频率递增步进长度为10Hz。
2100Hz1kHz挡,其频率可调节,频率递增步进长度为100Hz。
(2)输出矩形波的占空比在1090之间可调,调节的递增步进长度为10。
(3)输出电压峰峰值为5V。
(4)每个周期信号的构造数据由30个取样点的值组成。
2.可选器件EPM7128S、共阴极七段数码管、DAC0832、LM741、开关、电阻和电容。
3.设计总体框图矩形波发生器总体框图如附图1.1所示。
附图1.1矩形波发生器总体框图4.源程序及注释
(1)上层模块libraryieee;useieee.std_logic_1164.all;3useieee.std_logic_signed.all;useieee.std_logic_unsigned.all;entitycheifisport(clk_1m:
instd_logic;-时钟信号,1MHz。
k1:
instd_logic;-调节频率的开关信号。
k2:
instd_logic;-调节占空比的开关信号。
k3:
instd_logic;-换挡开关信号。
sel:
outstd_logic_vector(5downto0);-数码管片选信号。
d:
outstd_logic_vector(6downto0);-数码管的驱动信号。
f:
outstd_logic_vector(7downto0);-输出给DAC0832的8位数字信号。
endcheif;architectureaaofcheifissignalmode_mid:
integerrange0to1;signalclk_125_mid:
std_logic;signals1:
std_logic;signals2:
std_logic;signals3:
std_logic;signalfs_mid:
std_logic;signalstatusf_mid:
integerrange0to9;signalstatush_mid:
integerrange0to8;componentkeyin-调用防抖动模块。
port(k:
instd_logic;kout:
bufferstd_logic;clk_125:
instd_logic);endcomponent;componentfp-调用分频及控制模块。
port(clk_1m:
instd_logic;s1:
instd_logic;s3:
instd_logic;statusf:
outintegerrange0to9;mode:
outintegerrange0to1;fs:
outstd_logic);endcomponent;componentoutput-调用信号输出模块。
port(fs:
instd_logic;s2:
instd_logic;statush:
outintegerrange0to8;f:
outstd_logic_vector(7downto0);4endcomponent;componentdisplay-调用分频及显示模块。
port(statusf:
inintegerrange0to9;statush:
inintegerrange0to8;mode:
inintegerrange0to1;clk_1m:
instd_logic;clk_125:
outstd_logic;sel:
outstd_logic_vector(5downto0);d:
outstd_logic_vector(6downto0);endcomponent;beginu1:
keyinportmap(k1,s1,clk_125_mid);u2:
keyinportmap(k2,s2,clk_125_mid);u3:
keyinportmap(k3,s3,clk_125_mid);u4:
fpportmap(clk_1m,s1,s3,statusf_mid,mode_mid,fs_mid);u5:
outputportmap(fs_mid,s2,statush_mid,f);u6:
displayportmap(statusf_mid,statush_mid,mode_mid,clk_1m,clk_125_mid,sel,d);endaa;
(2)下层模块防抖动模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitykeyinisport(k:
instd_logic;-有抖动的开关信号。
kout:
bufferstd_logic;-消抖动后的开关信号。
clk_125:
instd_logic);-时钟信号,125Hz。
endkeyin;architectureaaofkeyinissignala,d1,d2,s,r,q1,q2,b:
std_logic;beginp1:
process(clk_125)beginif(clk_125=0)thend1=k;d2=d1;endif;endprocess;p2:
process5begins=d1andd2;r=(notd1)and(notd2);a=sor(notr)anda);endprocess;p3:
process(clk_125)beginif(clk_125eventandclk_125=1)thenq2=q1;q1=a;endif;b=q1andnotq2;kout=b;endprocess;endaa;分频及控制模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_signed.all;useieee.std_logic_unsigned.all;entityfpisport(clk_1m:
instd_logic;-时钟信号,1MHz。
s1:
instd_logic;-经过防抖后输入的调节频率的开关信号。
s3:
instd_logic;-经过防抖后输入的换挡开关信号。
statusf:
outintegerrange0to9;-改变频率的控制计数器。
mode:
outintegerrange0to1;-换挡控制信号。
fs:
outstd_logic);-取样信号。
endfp;architectureaaoffpissignaln:
integerrange0to166;signalm:
integerrange0to1;signalstatus:
integerrange0to9;signalfs2:
std_logic;signalfs2_10:
std_logic;signalfs1:
std_logic;signalcount:
integerrange0to166;signalc:
integerrange0to10;beginprocess(s1,s3)beginif(s1eventands1=1)then6if(status=9)thenstatus=0;elsestatus=status+1;endif;endif;if(s3eventands3=1)thenif(m=1)thenm=0;elsif(m=0)thenmnnnnnnnnnnn=null;endcase;endprocess;process(clk_1m)beginif(clk_1meventandclk_1m=1)thenif(count=n)then-n的值不同,输出信号的频率也不同。
count=1;fs2=1;elsecount=count+1;fs2=0;endif;elsenull;endif;endprocess;process(fs2)beginif(fs2eventandfs2=1)then-实现换挡功能。
if(m=0)thenfs2_10=fs2;elseif(c=9)thenc=0;fs2_10=0;elsec=c+1;fs2_10=1;endif;endif;endif;endprocess;process(fs2_10)beginif(fs2_10eventandfs2_10=1)thenfs1=notfs1;-2分频后得到不同频率的取样信号。
endif;endprocess;fs=fs1;statusf=status;mode=m;endaa;信号输出模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_signed.all;entityoutputisport(fs:
instd_logic;-取样信号。
s2:
instd_logic;-经过防抖后输入的调节占空比的开关信号。
statush:
outintegerrange0to8;-改变占空比的控制计数器。
f:
outstd_logic_vector(7downto0);-输出给DAC0832的8位数字信号。
endoutput;architectureaaofoutputissignalm:
integerrange0to29;signalstatus:
integerrange0to8;beginp1:
process(s2)begin78if(s2eventands2=1)thenif(status=8)thenstatus=0;elsestatus=status+1;endif;endif;endprocessp1;p3:
process(fs)-本进程描述一个用于调节脉宽的控制计数器。
beginif(fseventandfs=1)thenif(m=29)thenm=0;elsemcasemis-当mffffcasemis。
when0=fffffffcasemis9when0=ffffffffffcasemiswhen0=fffffffffffffcasemiswhen0=ffffffffffffffffcasemiswhen18=fffffffffffffcasemiswhen21=ffffffffffcasemiswhen24=fffffffcasemiswhen27=fffff=null;endcase;endprocessp2;statush=status;endaa;分频及显示模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_signed.all;useieee.std_logic_unsigned.all;entitydisplayisport(statusf:
inintegerrange0to9;-改变显示频率的控制计数器。
statush:
inintegerrange0to8;-改变显示占空比的控制计数器。
mode:
inintegerrange0to1;-换挡控制信号。
clk_1m:
instd_logic;-时钟信号,1MHz。
clk_125:
outstd_logic;-防抖动模块的时钟信号。
sel:
outstd_logic_vector(5downto0);-数码管片选信号。
d:
outstd_logic_vector(6downto0);-数码管的驱动信号。
enddisplay;architectureaaofdisplayissignaln:
integerrange0to1999;signalclk_500:
std_logic;signalclk_250:
std_logic;signalclk_125_mid:
std_logic;signalm:
integerrange0to5;beginprocess(clk_1m)beginif(clk_1meventandclk_1m=1)thenif(n=1999)thenn=0;clk_500=0;elsen=n+1;clk_500=1;endif;endif;endprocess;121process(clk_500)beginif(clk_500eventandclk_500=1)thenclk_250=notclk_250;endif;endprocess;process(clk_250)beginif(clk_250eventandclk_250=1)thenclk_125_mid=notclk_125_mid;endif;endprocess;process(clk_250)beginif(clk_250eventandclk_250=1)thenif(m=5)thenm=0;elsemsel=011111;if(mode=1)thend=0111111;elseif(statusf=9)thend=0000110;elsedsel=101111;if(mode=1)thenif(statusf=9)thend=0000110;elseddddddddddddsel=110111;if(mode=0)thenddddddddddddsel=111011;dselddddddddddsel=111110;dsel=null;d=null;endcase;endif;endprocess;clk_125=clk_125_mid;endaa;5.程序说明
(1)将矩形波的一个周期波形进行30点幅度取样,用信号输出电路将各取样点的值顺序读出,送到DAC芯片,经过D/A转换,得到输出的电流值,再经LM741运算放大器,转换成电压值,形成一个离散的矩形波。
用数码管显示其频率值和占空比,用示波器观测波形。
(2)矩形波的一个周期共有30个取样点,输出矩形波信号频率为f,则取样频率为30f。
(3)分频及控制模块采用数控分频法,通过开关改变信号n的值,从而使计数值发生变化,分出不同频率的信号fs。
返回首页15例2三角波发生器1.设计任务及要求
(1)设计一个三角波发生器,频率在100Hz1kHz之间可调,调节的递增步进长度为100Hz。
(2)输出电压峰峰值为5V。
(3)每个周期信号的构造数据由25个取样点值组成。
2.可选器件EPM7128S、共
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 设计 数字 系统 实例
![提示](https://static.bingdoc.com/images/bang_tan.gif)