自主设计控制器电路实验报告.docx
《自主设计控制器电路实验报告.docx》由会员分享,可在线阅读,更多相关《自主设计控制器电路实验报告.docx(27页珍藏版)》请在冰豆网上搜索。
自主设计控制器电路实验报告
实验一:
自主设计控制器电路
一、设计课题
秒表的设计
二、实验目的
1、熟练利用VerilogHDL语言进行数字系统设计。
2、掌握数字系统的设计方法——自顶向下的设计思想。
3、掌握计数器的设计与使用。
4、根据秒表的功能要求设计一个秒表。
5、熟练掌握用maxplusII软件进行系统原理图设计、文本设计以及进行波形仿真。
三、实验器材
装有maxplusII软件的电脑一台、FPGA教学实验系统一台、下载电缆一根。
四、实验内容
1、有毫秒、秒、分计数,数码扫描显示输出。
2、有清零端和暂停端。
3、对实验进行仿真。
4、下载,检查结果是否正确。
五、实验原理
1、功能描述
秒表是一种计时的工具,有着很广泛的用途。
本实验中的秒表要求有两个功能按钮:
一个是计数和停止计数按钮,当第一次按下此按钮时,秒表开始计数,再一次按下时,秒表停止计数,并显示所计的数字;另一个是清零按钮,当按下此按钮时,秒表清零。
在数码管上采用动态扫描显示输出。
2、基本原理:
本设计中用到的主要元件有计数器、分频器、数据选择器、译码器、位选信号发生器等。
秒、分都是60进制计数,所以必须采用两个60进制的计数器,而百分秒择采用的是100进制;分频器主要将1KHZ的时钟信号经过10分频后,产生100HZ的单位时钟周期;数据选择器主要功能是将即将显示的数据送给译码器;译码器将BCD码转换为七段译码进行显示;位选信号发生器根据人眼暂留效应和显示的数码的个数,产生一段循环码。
原理框图如下图。
图1:
秒表原理框图
3、自顶向下的设计方法
自顶向下的设计方法是数字系统设计中最常用的设计方法,也是基于芯片的系统设计的主要方法。
自顶向下的设计方法利用功能分割手段将设计由上到下进行层次话和模块化,及分层次、分模块进行设计和仿真。
功能分割时,将系统功能分解为功能块,功能块再分解为逻辑块,逻辑块再分解为更少的逻辑块和电路。
如此分割,逐步的将系统细化,将功能逐步的具体化,模块化。
高层次设计进行功能和接口描述,说明模块的功能和接口,模块功能的更详细描述在下一设计层次说明,最底层的设计才涉及具体寄存器和逻辑门电路等实现方式的描述。
六、实验步骤
1、采用自顶向下的设计方法,首先将系统分块。
2、设计元件,及逻辑块。
3、一级一级向上进行元件例化,设计顶层文件。
4、把各模块连接起来,进行综合编译仿真。
5、下载到实验箱,以验证程序。
七、电路模块设计
1、分频模块
将输入1KHZ的系统时钟经过十分频分为100HZ的单位时钟。
编程原理跟计数器原理相似。
2、定时模块
采用2个60进制、1个100进制的BCD码全加器作为定时器,分为分,秒,百分秒,输入时钟信号为分频器输出信号100HZ时钟,外界两个拨码开关作为清零按钮和暂停按钮。
3、位选发生器:
根据显示的数据位和人眼暂留效应,设计显示分为分、秒、百分秒位,每位需要2个数码管进行显示,因此变化频率至少为300HZ,为了方便则采用1KHZ,循环码则从000循环到101。
4、多路选择器
根据位选信号,输出对应位显示的数据。
5、译码器
将多路选择器输出端的数据对应的转换为七段二进制数,送给显示器。
八、仿真结果与分析
仿真时长为100us,仿真结果全图如下图所示。
S_6到S_1分别代表毫秒、秒和分的两位显示,可以看到毫秒位是十进制。
图2:
仿真结果全图
仿真结果的放大图如下图所示。
其中3E3D3B372F1F分别代表选中六个七段数码管的某一个,out_duan则对应显示当前被激活数码管所显示的数字。
由于数码管的扫描速度要大于计数器的计数周期,所以在两次扫描过程中数码管显示的数字有可能是不变的。
另外,可以看到在选中某一位数码管时有的有毛刺,是因为翻转位数大于两位时会机器会先翻转一位达到中间位然后再次翻转到达目标数据。
图3:
仿真结果放大图
实验二:
自主设计实用性电路
(一)BCD/7段译码集成电路74LS47仿真实验
一、实验目的
1掌握发光二极管、数码显示管的工作原理、结构和使用方法。
2掌握集成译码显示电路的工作原理和使用方法。
二、实验器材
74LS247,24
电阻,BCD/7段译码器。
三、实验原理
数字系统中的测量或运算结果需要用十进制数显示,目前常用三种显示器件:
发光二极管(LED),七(八)段字符显示器和液晶显示器(LCD)。
1、发光二极管
发光二极管是一个小型的固体发光器件,外加正向电压导通时,可发出一定波长的光。
通常是红,黄,绿三种颜色。
图4:
二极管
发光二极管的特点:
1)由发光二极管的正向伏安特性可以看出,它的导通电压比一般电压高,约1.6V左右。
2)发光二极管的发光亮度和正向电流近似成正比关系。
3)发光二极管的最大优势是工作电压低(1.5~3V)、寿命长、体积小、重量轻、响应速度快便于和集成电路配合使用。
2、七(八)段字符显示器
数码管由多个发光PN结构成,每一段由一个发光二极管构成,将各段阳极连在一起作为公共阳极,当某个二极管的阴极处于低电平,二极管导通,字符段显示。
3、七段字型显示器
表1:
七段字型显示器对应值
十进
制数
输入
输出
字
型
DCBA
abcdefg
0
H
H
LLLL
H/H
LLLLLLH
1
H
×
LLLH
H/H
HLLHHHH
2
H
×
LLHL
H/H
LLHLLHL
3
H
×
LLHH
H/H
LLLLHHL
4
H
×
LHLL
H/H
HLLHHLL
5
H
×
LHLH
H/H
LHLLHLL
6
H
×
LHHL
H/H
HHLLLLL
7
H
×
LHHH
H/H
LLLHHHH
8
H
×
HLLL
H/H
LLLLLLL
9
H
×
HLLH
H/H
LLLHHLL
10
H
×
HLHL
H/H
HHHLLHL
11
H
×
HLHH
H/H
HHLLHHL
12
H
×
HHLL
H/H
HLHHHLL
13
H
×
HHLH
H/H
LHHLHLL
14
H
×
HHHL
H/H
HHHLLLL
15
H
×
HHHH
H/H
HHHHHHH
×
×
××××
(输入)L/
L(输入)
H(输入)
HHHHHHH
H
L
LLLL
HHHHHHH
L
×
××××
LLLLLLL
1
为灯测试输入。
=0时灯全亮,正常工作时
=1。
2
为灭零输入,设置灭零输入信号的目的是为了把不希望显示的零熄灭,让显示更清晰。
3
为灭零输入/灭零输出信号。
四、实验内容
按74LS47真值表,测试逻辑功能。
实验电路图如下图所示。
图5:
BCD/7段译码集成电路图
五、仿真结果
打开仿真开关,分别将J1~J3设置成000~111,从共阳BCD/7段译码数码管上可以看到显示的十进制数0~7,如下图所示,图中J1~J3设置成111,故数码管显示7。
图6:
BCD/7段译码集成电路仿真结果
(二)单管分压式稳定工作点偏置电路仿真实验
一、实验目的
学会单管放大器静态工作点稳定电路的设计方法,分析静态工作点对放大器性能的影响。
掌握放大器电压放大倍数、输入电阻、输出电阻、最大不失真输出电压等参数的测试方法。
二、实验设备与器件
实验台,万用表,双踪示波器,三极管、电阻、电容等。
三、实验原理
1、分压式稳定静态工作点偏置电路图及元器件作用
:
上偏置电阻,
:
下偏置电阻,
:
发射极电阻,
:
发射极旁路电容,减少
上交流损耗。
Rc:
集电极电阻,将ic转变为vo
RL:
负载电阻
图7:
分压式稳定静态工作点偏置电路图
2、分压式偏置电路稳定静态工作点的原理
基极电压
由
和
分压后得到,即
固定。
当环境温度上升时,引起
增加,导致
的增加,使
增大。
由于
,
使得
减小,于是基极偏流
减小,使集电极电流
的增加受到限制,从而
达到稳定静态工作点的目的。
稳定工作点的过程表示如下:
ICQ基本保持不变,从而可以稳定静态工作点。
四、实验内容及仿真结果分析
1、分压式稳定工作点单管放大器仿真电路如下图:
图8:
分压式稳定工作点单管放大器仿真电路图
打开仿真开关,双击虚拟万用表,将电位器的百分比调节到35%左右时,万用表放大版面显示“6.218v”如下图所示,通过欧姆定理,我们可以间接测出和确定该放大器的静态电流
图9:
双击虚拟万用表显示数据
将虚拟信号发生器和虚拟示波器加入电路图如下:
图10:
分压式稳定工作点单管放大器仿真电路图
打开虚拟示波器图标,可以看到输入放大器的信号和放大以后的正弦波信号,如下图所示,屏幕下方可以读的“Channel_A”数据:
9.992mv,就是输入信号的幅值,另从“Channel_B”下可以读得数据:
1.170V,就是经放大器放大后输出信号的幅值。
从而很容易可以得到该单管放大器的电压放大倍数
(倍)另外,还可以看到输入信号和输出信号相位相差180度,即输入信号和输出信号反相。
图11:
分压式稳定工作点单管放大器电路仿真结果
实验证明,分压式稳定动作电影偏置电路稳定静态工作点的效果好,是一种普遍应用的偏置电路。
这种偏置电路中Re并联的旁路电容Ce的作用是提供交流信号的通道,较少信号放大过程中的损耗,是放大器的交流信号放大能力不致因Re的存在而降低。
实验中上偏置电阻Rb1常用电位器来代替,用以调整放大电路的静态工作点。
(三)8路智力竞赛抢答器电路设计
一、实验任务
1.了解利用微机实现竞赛抢答器的基本原理。
2.进一步学习使用并行接口。
二、设计要求
1. 抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0 ~ S7表示。
2. 设置一个系统清除和抢答控制开关S,该开关由主持人控制。
3. 抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,并在LED数码管上
显示,同时扬声器发出报警声响提示。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。
4. 抢答器具有音响提示功能,当选手按下按钮的同时,有“叮咚”声想起。
三、“8路智力竞赛抢答器”电路工作原理分析
抢答器具有锁存、定时、显示和报警功能。
即当抢答开始后,选手抢答按动按钮,锁存器锁存相应的选手编码,同时用数码显示管把选手的编码显示出来,并开始抢答时间的倒计时,同时用数码显示管把选手的所剩抢答时间显示出来。
而在选手按键抢答以及抢答时间倒计时到时的时候都有报警以提醒主持人和选手。
抢答时间设定30秒。
接通电源后,主持人将开关拨到"清除"状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置"开始"状态,宣布"开始"抢答器工作。
定时器倒计时。
选手在定时时间内抢答时,抢答器完成:
优先判断、编号锁存、编号显示、扬声器提示。
当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。
如果再次抢答必须由主持人再次操作"清除"和"开始"状态开关。
四、主要芯片介绍
1、优先编码器74LS148
74LS148为8线-3线优先编码器,表2为其真值表,图8为其管脚图。
图12:
74LS148管脚
表2:
74LS148—3线二进制编码器真值表
74LS148工作原理如下:
该编码器有8个信号输入端,3个二进制码输出端。
此外,电路还设置了输入使能端EI,输出使能端EO和优先编码工作状态标志GS。
当EI=0时,编码器工作;而当EI=1时,则不论8个输入端为何种状态,3个输出端均为高电平,且优先标志端和输出使能端均为高电平,编码器处于非工作状态。
这种情况被称为输入低电平有效,输出也为低电来有效的情况。
当EI为0,且至少有一个输入端有编码请求信号(逻辑0)时,优先编码工作状态标志GS为0。
表明编码器处于工作状态,否则为1。
由功能表可知,在8个输入端均无低电平输入信号和只有输入0端(优先级别最低位)有低电平输入时,A2A1A0均为111,出现了输入条件不同而输出代码相同的情况,这可由GS的状态加以区别,当GS=1时,表示8个输入端均无低电平输入,此时A2A1A0=111为非编码输出;GS=0时,A2A1A0=111表示响应输入0端为低电平时的输出代码(编码输出)。
EO只有在EI为0,且所有输入端都为1时,输出为0,它可与另一片同样器件的EI连接,以便组成更多输入端的优先编码器。
从功能表不难看出,输入优先级别的次为7,6,……,0。
输入有效信号为低电平,当某一输入端有低电平输入,且比它优先级别高的输入端无低电平输入时,输出端才输出相对应的输入端的代码。
例如5为0。
且优先级别比它高的输入6和输入7均为1时,输出代码为010,这就是优先编码器的工作原理
2、锁存器74LS279
原理:
在74ls279中,由于4回路中2回路置位端子为两个,所以使用其一时,整理两个置位输入作为1个使用,或将另一个输入固定为“H”使用。
另外,作为稍微变化74LS279的使用方法,也可将3组作为RS锁存器使用,剩余的RS锁存器作为2输入NAND门电路使用,复位输入例如①管脚固定为”L”时其输入为”H”,所以可构成将②和③作为输入,输出为④的2输入NAND。
其管脚图如图9所示。
图13:
74LS279管脚引线图
3、74LS48与七段LED数码管
图14:
74LS48与七段LED数码管
74LS48与七段LED数码管的联结
使能端的作用如下:
(1)是试灯输入端,当LT=0,BI=1时,不管其它输入是什么状态,a~g七段全亮。
(2)灭灯输入,当BI=0,不论其它输入状态如何,a~g均为0,显示管熄灭。
(3)动态灭零输入,当LT=1,BI=0时,如果A0A1A2A3=0000时,a~g均为各段熄灭。
(4)RBI为灭“0”信号,用来熄灭器件显示0。
五、电路图及仿真结果
设计的电路图如下
图15:
“8路智力竞赛抢答器”电路图
仿真结果为下图,当第六个开关按下是,显示5(计数从0开始)
图16:
“8路智力竞赛抢答器”电路图仿真结果
实验心得
……
附录:
实验一代码
//秒表
`defineHALF_FREQUENCE2//25000
modulewatch(clk,out_wei,out_duan,rst,key2,s_6,s_5,s_4,s_3,s_2,s_1);//key2==27pin
inputrst;
inputclk;
inputkey2;
output[5:
0]out_wei;
output[7:
0]out_duan;
reg[5:
0]out_wei;//=6'b000000;
reg[7:
0]out_duan;//=8'b00000011;//abcdefgdp
reg[4:
0]count;
reg[3:
0]count1;
reg[14:
0]count2;
reg[7:
0]sec_l;//=8'b00000011;//zeroatfirst
reg[7:
0]sec_h;//=8'b00000011;
reg[7:
0]fen_l;//=8'b00000011;
reg[7:
0]fen_h;//=8'b00000011;
reg[7:
0]msec_l;//=8'b00000011;
reg[7:
0]msec_h;//=8'b00000011;
output[3:
0]s_1;//=0;
output[3:
0]s_2;//=0;
output[3:
0]s_3;//=0;
output[3:
0]s_4;//=0;
output[3:
0]s_5;//=0;
output[3:
0]s_6;//=0;
reg[3:
0]s_1;//=0;
reg[3:
0]s_2;//=0;
reg[3:
0]s_3;//=0;
reg[3:
0]s_4;//=0;
reg[3:
0]s_5;//=0;
reg[3:
0]s_6;//=0;
regclk_out;
regpause;//信号
always@(posedgeclkornegedgerst)
begin//fenpin
if(!
rst)
begin
count2<=0;
clk_out<=0;
end
elseif(count2==`HALF_FREQUENCE-1)
begin//oneofthousandsecend25000
count2<=0;
clk_out<=~clk_out;
end
else
count2<=count2+1'b1;
end
always@(posedgeclk_outornegedgerst)
begin//scan
if(!
rst)
begin
count<=5'b0;
end
else
begin
if(count<6)
count<=count+1'b1;
else
count<=1;
end
end
always@(count)
begin
case(count)
1:
begin
out_wei<=6'b111110;
out_duan<=msec_l;
end
2:
begin
out_wei<=6'b111101;
out_duan<=msec_h;
end
3:
begin
out_wei<=6'b111011;
out_duan<=sec_l;
end
4:
begin
out_wei<=6'b110111;
out_duan<=sec_h;
end
5:
begin
out_wei<=6'b101111;
out_duan<=fen_l;
end
6:
begin
out_wei<=6'b011111;
out_duan<=fen_h;
end
default:
begin
out_wei<=6'b111111;
out_duan<=8'b0;
end
endcase
end
always@(negedgekey2ornegedgerst)begin
if(!
rst)
pause<=0;
else
pause<=~pause;
end
always@(posedgeclk_outornegedgerst)begin//minitesecend
if(!
rst)begin
s_1<=4'b0;
s_2<=4'b0;
s_3<=4'b0;
s_4<=4'b0;
s_5<=4'b0;
s_6<=4'b0;
count1<=0;
end
else
begin
if(count1==10)begin//if1sl+1
count1<=0;
if(s_6==9)begin
s_6<=0;
if(s_5==9)begin
s_5<=0;
if(s_1==9)begin
s_1<=0;
if(s_2==5)begin
s_2<=0;
if(s_3==9)begin
s_3<=0;
if(s_4==5)
s_4<=0;
elses_4<=s_4+1'b1;
endelses_3<=s_3+1'b1;
endelses_2<=s_2+1'b1;
endelses_1<=s_1+1'b1;
endelses_5<=s_5+1'b1;
endelses_6<=s_6+1'b1;
end
elseif(pause==1)begin
count1<=count1+1'b1;
end
end
end
//这下面全部是扫描显示用的。
always@(s_1ors_2ors_3ors_4ors_5ors_6orrst)begin
if(rst==0)
begin
sec_l=8'b00000011;//zeroatfirst
sec_h=8'b00000011;
fen_l=8'b00000011;
fen_h=8'b00000011;
msec_l=8'b00000011;
msec_h=8'b00000011;
end
else
begin
case(s_1)
4'b0000:
sec_l=8'b00000011;
4'b0001:
sec_l=8'b10011111;
4'b0010:
sec_l=8'b00100101;
4'b0011:
sec_l=8'b00001101;
4'b0100:
sec_l=8'b10011001;
4'b0101:
sec_l=8'b01001001;
4'b0110:
sec_l=8'b01000001;
4'b0111:
sec_l=8'b00011111;
4'b1000:
sec_l=8'b00000001;
4'b1001:
sec_l=8'b00001001;
default:
sec_l=1'bx;
endcase
case(s_2)
0:
sec_h=8'b00000011;//0
1:
sec_h=8'b10011111;
2:
sec_h=8'b00100101;
3:
sec_h=8'b00001101;
4:
sec_h=8'b10011001;
5:
sec_h=8'b01001001;
6:
sec_h=8'b01000001;