电子系统设计083107华永奇Word文档下载推荐.docx
- 文档编号:18417949
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:78
- 大小:2.10MB
电子系统设计083107华永奇Word文档下载推荐.docx
《电子系统设计083107华永奇Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电子系统设计083107华永奇Word文档下载推荐.docx(78页珍藏版)》请在冰豆网上搜索。
0'
)THEN
cqi:
=(OTHERS=>
'
);
ELSIF(clk'
EVENTANDclk='
1'
IF(en='
IF(cqi<
9)THEN
=cqi+1;
ELSE
ENDIF;
IF(cqi=9)THEN
cout<
='
;
cq<
=cqi;
ENDPROCESS;
ENDbehav;
2、千位计数器(顶层电路):
仿真结果:
三、药片自动包装计数控制显示系统
(一)设计要求
设计一个药片自动包装计数控制显示系统。
药片通过透明的传送导管加到药瓶中,当药片挡住光电开关时,累计加上一个数。
每计完24片药片,就完成1瓶药片的装瓶,机械手就自动将瓶盖拧上。
(二)顶层设计方框图
(三)程序代码部分
1.十八分频器
LIBRARYIEEE;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.ALL;
ENTITYdivIS
PORT(clk_sys:
clk:
enddiv;
architecturebehavofdivis
signalq:
std_logic_vector(18downto0);
begin
process(clk_sys)
begin
if(clk_sys'
eventandclk_sys='
)then
q<
=q+1;
endif;
clk<
=q(18);
endprocess;
endbehav;
2.二分频器
LIBRARYIEEE;
ENTITYdiv2IS
PORT(clk_scan:
sel:
OUTINTEGERRANGE0TO1);
end;
architecturew1ofdiv2is
signalcnt:
INTEGERRANGE0TO1;
process(clk_scan)
begin
if(clk_scan'
eventandclk_scan='
)then
cnt<
=cnt+1;
else
=cnt;
sel<
endw1;
3.防抖电路:
ENTITYdff_2IS
PORT(clk,ctin:
q_n:
architecturew1ofdff_2is
signalq1,q2:
std_logic;
process(clk)
ifclk'
EVENTANDCLK='
THEN
q1<
=ctin;
q2<
=q1;
q_n<
=not(notq1andq2);
end;
4.二十四进制加法器
ENTITYcnt_24IS
PORT(clk,rst,en:
cao:
OUTstd_logic;
QH,QL:
OUTstd_logic_vector(3downto0));
architecturebehavofcnt_24is
signalh0,h1:
std_logic_vector(3downto0);
process(rst,clk)
if(rst='
h1<
="
0000"
h0<
0001"
elsif(clk'
eventandclk='
if(en='
)then
if(h1=2andh0=4)thenh1<
h0<
elsif(h0=9)thenh0<
=h1+1;
elseh0<
=h0+1;
QL<
=h0;
QH<
=h1;
cao<
='
when(h1=2andh0=4anden='
)else'
endbehav;
5.八选四选择器
ENTITYmux8_4IS
PORT(SEL:
INSTD_LOGIC_VECTOR(3DOWNTO0);
QOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
architectureaofmux8_4is
signals:
s<
=SEL;
PROCESS(QH,QL,S)
BEGIN
IFS='
THENQOUT<
=QL;
ELSEQOUT<
=QH;
ENDa;
6.译码显示模块
ENTITYbcd7IS
PORT(Q:
INstd_logic_vector(3downto0);
A,B,C,D,E,F,G:
architecturebehavofbcd7is
signaldout:
std_logic_vector(6downto0);
signaldin:
din<
=Q;
PROCESS(din)
casedinis
when"
=>
dout<
1111110"
0110000"
0010"
1101101"
0011"
1111011"
0100"
0110011"
0101"
1011011"
0110"
1011111"
0111"
1110000"
1000"
1111111"
1001"
1010"
1110111"
1011"
0011111"
1100"
1001110"
1101"
0111101"
1110"
1001111"
1111"
1000111"
whenothers=>
endcase;
A<
=dout(6);
B<
=dout(5);
C<
=dout(4);
D<
=dout(3);
E<
=dout
(2);
F<
=dout
(1);
G<
=dout(0);
ENDbehav;
(四)顶层设计
管脚设计:
四、出租车计费系统
(一)出租车计程计价表设计任务书
设计一个出租车计程计价表,基本要求:
(1)具有车型设置功能
设置
00
01
10
11
车轮直径
520mm
540mm
560mm
580mm
(2)具有起步里程设置功能
000
001
010
011
100
101
110
111
起步里程
3km
4km
5km
6km
7km
8km
9km
10km
(3)具有起步价设置功能
起步价
5元
6元
8元
10元
(4)里程显示采用4位七段数码管,显示格式为×
×
.×
公里。
(5)计费显示采用4位七段数码管,显示格式为×
元。
(6)出租车启动后,当行驶里程不超过起步里程,里程显示起步里程,计费显示起步价。
(7)当行驶里程超过起步里程,里程显示实际行驶里程,计费作相应显示。
(8)采用FPGA器件EP1C6Q240C8,开发系统采用QuartusII。
其他要求:
(1)起步里程后,白天(6:
00~23:
00)每公里按1.20元计费,晚间(23:
00~6:
00)每公里按1.80元计费(每公里加收50%车费)。
(2)显示复位功能。
(3)内部具有时间计时功能,并可选择显示(计时和计费可选择显示)。
时间显示采用8位七段数码管,显示格式为×
(小时)×
(分)×
(秒)。
(4)可独立设置小时和分计时值。
(二)方案设计
按照任务要求,可将整体部分分为计价量程部分和计时部分。
其中计价里程部分可用下面的系统框图表示:
计时部分系统框图设计:
整体框图:
本次设计主要分4个部分
第一部分:
里程计价部分;
第二部分:
计时部分;
第六部分:
整体电路连接部分
里程计价部分
1、
用到的模块
2、各个模块的作用
(1)Div模块作用:
对芯片给的50MHZ的频率进行分频,然后传输给计数器A,提供扫描频率。
(2)计数器A作用:
对车轮传感器送来的车轮脉冲信号clk进行计数分频,车轮每转一圈送出一个脉冲。
车每行驶100m,计数器A输出1个“100m脉冲信号oclk”,不同车型的车轮直径不一样,计数器A的分频系数也不一样
(3)计数器B作用:
对输入的100m脉冲oclk进行累加;
在开始时输出起步里程数据,而当超出起步里程时自动输出实际公里数据给译码/动态扫描模块:
每计满500m路程送出1个脉冲clkout给计数器C。
(4)计数器C作用:
实现步长可变(即单价可调)的累加计数;
分时计价控制端“hourin”输入信号为0时,每500m计费0.6元;
分时计价控制端“hourin”输入信号为1时,每500m计费0.9元。
(5)BCD模块:
输入licheng信号和money信号转换成相应的七段数码管数据信号和地址信号输出
(6)DM_ROM点阵显示模块:
将要显示的汉字或字母按照“1”为点亮,“0”为熄灭的规则设计程序,并显示在两个8行8列的点阵显示模块上,DM_ROM显示内容为“车价”
3、各个模块的vhdl文件及仿真
(1)Div模块的vhdl文件及仿真
useieee.std_logic_arith.all;
ENTITYdivIS
PORT(clk_sys:
INstd_logic;
clk:
OUTstd_logic;
clk_scan:
outstd_logic);
ENDdiv;
ARCHITECTUREaOFdivIS
signalq:
std_logic_vector(23DOWNTO0);
BEGIN
PROCESS(clk_sys)
if(clk_sys'
eventandclk_sys='
)thenq<
=q+1;
——系统脉冲每来一次下降沿,q加1
endif;
clk<
=q(18);
clk_scan<
=q(9);
——把q的18位上的数据送入clk,把q的9位上的数据送入clk
endprocess;
enda;
仿真波形如图2(注:
为方便仿真,在此clk<
=q(4);
clk_scan<
=q
(2);
):
(2)计数器A的vhdl文件及仿真
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt_Ais--实体取名cnt_A
port(--端口描述
instd_logic;
--输入信号clk为来自车轮传感器的脉冲信号
start:
--输入信号start为启动信号(即使能信号)
cartype:
instd_logic_vector(1downto0);
--输入信号cartype为DIP_A的车型设置码
oclk:
--oclk为百米脉冲输出信号
endcnt_A;
architecturebehaveofcnt_Ais--结构体名称behave
signalmode:
std_logic_vector(5downto0);
--mode为分频系数(内部信号)
signaltemp:
std_logic_vector(5downto0);
--temp为6位,记录计数值用
mode<
111100"
whencartype="
00"
else--520mm,/61分频
"
111010"
01"
else--540mm,/59分频
111000"
10"
else--560mm,/57分频
110110"
--580mm,/55分频
process(start,clk)
ifrising_edge(clk)then--若clk的上升沿来到,则
ifstart='
then--若有start=‘1’,则
iftemp=(mode)then--若temp=(mode)(计数模值),则
temp<
=(others=>
'
--temp=“000000”(同步复零)
else--否则
=temp+'
--加1计数
oclk<
when(temp=mode)else'
--当temp=mode时oclk<
=’1’,否则=0
endbehave;
仿真波形如图3(注:
为方便仿真,在此mode<
000011"
)
:
(3)计数器B的vhdl文件及仿真
entitycnt_Bis--实体名cnt_B,500km路程出1个clkout脉冲的分频模块
port(
reset:
clkin:
instd_logic;
--100m脉冲信号作为输入的信号clkin
dip:
instd_logic_vector(2downto0);
--用dip设置起步里程
clkout:
outstd_logic;
--500m脉冲输出信号clkout
length:
outstd_logic_vector(12downto0));
--计数位长13位,最大计999.9km
endentity;
architecturetwoofcnt_Bis
signallicheng:
std_logic_vector(12downto0);
--13位内部信号licheng;
存放起步里程
signaltemp0:
std_logic_vector(12downto0);
--13位内部信号temp0存放百米脉冲累计数
signaltemp1:
std_logic_vector(3downto0);
--4位内部信号temp1存放摸5计数器计数值
withdipselect
licheng<
=conv_std_logic_vector(30,13)when"
000"
--000档:
30×
100m=3km
conv_std_logic_vector(40,13)when"
001"
--001档:
40×
100m=4km
conv_std_logic_vector(50,13)when"
010"
--010档:
50×
100m=5km
conv_std_logic_vector(60,13)when"
011"
--011档:
60×
100m=6km
conv_std_logic_vector(70,13)when"
100"
--100档:
70×
100m=7km
conv_std_logic_vector(80,13)when"
101"
--101档:
80×
100m=8km
conv_std_logic_vector(90,13)when"
110"
--110档:
90×
100m=9km
conv_std_logic_vector(100,13)whenothers;
--111档:
100×
100m=10km
p1:
process(clkin)--进程p1,实际计数值加法计数器的描述
if(reset='
)thentemp0<
=(others=>
elsifrising_edge(clkin)then--若百米脉冲信号clkin有上升沿则
temp0<
=temp0+'
--实际里程累计值temp0加1(单位:
100m)
endprocessp1;
p2:
process(temp0,clkin)--进程p2,temp0大于起步里程时,temp1计数
ifrising_edge(clkin)then--若clkin有上升沿,则
if(temp0>
=licheng)then–-若temp0>
=licheng(起步里程),则
if(temp1=conv_std_logic_vector(4,4))then–-temp1的值为4,则
temp1<
--temp1复0,(即temp1的模为5,对应500m)
elsetemp1<
=temp1+'
--否则,temp1的值加1
endprocessp2;
clkout<
when(temp1=conv_std_logic_vector(4,4))else'
--temp1的值为4时进位输出clkout为1
length<
=lichengwhen(temp0<
=licheng)elsetemp0;
--当temp0<
=licheng时,length显示licheng,否则显示实际计数值temp0
endtwo;
仿真波形如图4:
(4)计数器C的vhdl文件及仿真
useieee.numeric_std.all;
--此句在Altera的MAX+plusⅡ下,无效
entitycnt_cis--实体名cnt_c
hourin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 系统 设计 083107 华永奇
![提示](https://static.bdocx.com/images/bang_tan.gif)