VHDL第三次作业解析讲解学习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字频率计数显示器
数字频率计数显示器
一、功能与要求该计数器的功能:对被测试信号进行计数,在1 秒定时结束后,将计数器结果送锁存,同时将计数器清零,为下一次采样测量做好准备。

要求如下:
1、用VHDL完成12位十进制数字频率计的设计及仿真。

2、频率测量范围:1HZ〜10KHZ分成两个频段,即
1〜999HZ,1KHZ〜10KHZ用三位数码管显示测量频率,用LED显示表示单位,如亮绿灯表示HZ亮红灯表示KHZ
3、具有自动校验和没理两种功能,即能用标准时钟检验、测量精
度。

4、具有超量程度报警功能,在超出目前量程档的测量范围时,发出灯光和音响信号。

二、设计思路
图 2. 1 是频率计数器的原理图。

图 2.1 频率计数器的原理图
1 、基本原理:计算单位时间内待测信号的脉冲个数,各模块设计成process 。

测量/ 检验选择模块( test meas ) 测频控制信号发生器(二分频) (clk process ) 计数器模块( cnt process )
送存选择、报警模块(tostore process )
锁存模块(store process )
扫描显示模块( cnt3 process,bus process,disp process )
2、各模块功能
test -----------------------------
测量/检验选择
meas ----------- ------------------------------------- CP1
select _________________
图2.2测量检验选择
如图2.2为测量/检验选择模块,该模块的信号如下:输入信号:选择信号selet ,被测信号meas,测试信号test ;输出信号:CP1。

当selet=0 时,为测量状态,CP1=meas当selet=1 时,为
检验状态,CP1=test o
检验与测量共用一个电路,只是被测信号CP1不同而已。

1 Hz时钟jm
图2.3测频控制信号发生顺(二分频)
如图2.3为测频控制信号发生器(二分频),该模块的信号如
下:
输入信号:1HZ时钟信号;
输出信号:1秒定时信号(周期为2秒)。

图 2.4 计数器、送存选择、报警模块
1、如图2.4 为计数器、送存选择、报警模块,模块的功能如下:
设置:量程控制开关K单位显示信号Y,
当K=0 时,为1-999HZ 量程档,数码管显示的数值为被测信号频率值,unit 显示绿色,即单位为HZ;
当K=1时,为1KHZ-10KHZ量程档被测信号频率值为数码管显示数值乘1000,unit 显示红色,即单位为KHZ。

2、其中四级十进制计数模块(带进位C)模块功能如下:
输入信号:RD CP,用于计数开始、清零、锁存
输出信号:Q4-Q1 设置超出量程档测量范围示警信号alert 。

若被测信号频率小于1KHZ(K=0), 计数器只进行三级十进制计数,最大显示值999HZ;如果被测信号频率超过此范围,示警信
号驱动灯光、扬声器报警;
若被测信号为1KHZ-10KHZ(K=1),计数器进行四位十进制计
数,取高三位显示,最大显示值为9.99KHZ ,如果被测信号频率超 过此范围,报警。

3、送存选择、报警电路状态表如表
1。

量程控制
计数器 锁存
小数点位置
报警信号 K Q04 C D3 D2 D1
alert
0 0 0 Q3 Q2 Q1 右第一位 0 0 1 0 Q3 Q2 Q1 右第一位 1 1 X 0 Q3 Q2 Q1 右第一位 0 1
X
1
Q3 Q2 Q1
右第一位
1
图2.5锁存、扫描显示模块
图2.5为锁存、扫描显示模块,该模块功能如下:
输出信号:Q3-Q1,小数点单位显示 unit 。

锁存器输入信号:
D3-D1,LD;
单位整示
图2.6扫描显示电路
如图2.6扫描显示电路,该模块包含两个模块 七段显示译码器电路(DEC LED
分时总线切换电路(SCAN 。

三、原理图说明
图3.1频率计显示原理图
如图3.1,输入有扫描时钟
clkscan,分频时钟clklhz ,单位
Hi 示掃
:芯片内植
选择键K,被测信号meas,测试信号test ,测试校验选择键sei。

输出有数码管信号led,数码管选择信号ms123,报警信号
alert ,单位显示信号unit。

四、源代码说明
--实体说明
library IEEE;
use IEEE.STD LOGIC 1164.ALL;
use IEEE.STD LOGIC ARITH.ALL;
use IEEE.STD LOGIC UNSIGNED.ALL;
entity dig frq js
Port(clk1hz : in STD LOGIC]
clkscan : in std logic; _
test : in STD LOGIC; _
meas : in STD LOGIC]
sel : in STD LOGIC; _
k : in STD LOGIC;_
alert : out STD LOGIC; _
unit : out STD LOGIC; _
ms123 : out STD LOGICVECTOR(2 downto 1);
led : out STD LOGIC VECTOR(8 downto 1);
end dig frg;
--结构体说明
Architecture Behavioral of dig frq is _
signal cpl:std logic; _
signal clk05hz:std logic; _
signal cp:std logic; _
signal rd:std logic:匚'1';
signal c:std logic; _
signal q4,q3,q2,q1:std _logic _vector(4 downto 1):= ” 0000”
signal load:std logic:=_ ' 0';
signal d3,d2,d1:std ____ logic ___ vector(4 downto
1) := ” 0000” ;
signal data3,data2,data1:std _logic _vector(4 downto
1) := ” 0000” ;
signal disp:std ____ logic ____ vector(4 downto
1) := ” 0000” ;
signal ns123 s:STD LOGIC VECTOR(2 downto 1);
begin
--时钟电路,1hz信号二分频产生0.5hz信号,1s高电平,
1s低电平
clk process:process(clk1hz)
begin
event and clk1hz= ' 1' )then
if(clk1hz
clk05hzv=not clk05h z;
end if;
end process;
-- 测试、校验选择模块
test mea§:process(sel,meas,test)
begin
if(sel= ' 1' )then-sel 为1 时cpl 为测试信号
cpl<=meas;
else-sel 为0时cpl为校验信号
cpl<=test;
end if;
end process;
-- 锁存的加载信号时load,当分频信号clk05hz上升沿时有效
load<=not clk05hz;
cpv=clk05hz and cpl;
-- 计数清零信号rd,当分频信号clk05hz为0时有效
rd<=clk05hz;
-- 四位bcd计数电路
cnt process:process(cp,rd)
variable q4 s,q3 s(2 s,q1 s:integer range 0 to
9;
variable c s:integer range 0 to 1;
begin
if(rd= ' O' )then
q4 s:=0; _
q3 s:=0; _
q2 s:=0; _
q1 s:=0; _
c s:=0; _
elsif(cp ' event and cp= ' 1' )then
if(q4 s=9 and q3 s=9 and q2 s=9 and q1
s=9 and c s=1)then
q4 s:=0; _
q3 s:=0; _
q2 s:=0; _
q1 s:=0; _
c s:=0; _
elsif(q4 s=9 and _q3 s=9 and q2 s=9 and q1 _ s=9)then
q4 s:=0; _
q3 s:=0; _
q2 s:=0; _
q1 s:=0; _
c s:=0; _
elsif(q3 s=9 and q2 s=9 and q1s=9)then q4 s:= q4 s+1; _ q3 s:=0; _
q2 s:=0; _
q1 s:=0; _
elsif(q2 s=9 and q1 s=9)then _
q3 s:= q3 s+1; _
q2 s:=0; _
q1 s:=0; _
elsif(q1 s=9)then_
q2 s:= q2 s+1; _
q1 s:=0; _
elsif
q1 s:= q1 s+1; _
end if;
end if;
q4v=conv std logic vector(q4 s,4); _
q3<=conv std logic vector(q3 s,4); _
q2<=conv std Jogic _vector(q2 s,4); _
q1<=conv std Jogic vector(q_1 s,4); _
if(c s=0)then
c<=
'O'
else
c<= ' 1'
end if;
end process;
--送锁存电路tostore process:process(q4,q3,q2,q1,c,k)
begin
if(k=
'0' )then--当计数单位选择k为0时,输出计数器的低三位
d3<=q3;
d2<=q2;
d1<=q1;
if(q4> ” 0000” or c> ' 0' )then--此时,当计数超过三位bcd数时,报警信号置1
alert<= '1';
else
alert<= ? c >
= 0 ;
end if;
elsif(k=
'1' )then--当计数单位选择k为1时,输出计数器的高三位
d3<=q4;
d2v=q3;
d1v=q2;
if(c> ' O' )then--此时,当计数超过四位bcd数时,
报警信号置1
alert<= ' 1';
else
alert<= ' O';
end if;
end if;
end process;
--锁存电路
stroe process:process(load,d1,d2,d3,k)
begin
if(load ' event and load= ' 1' )then--加载信号load 下降时,锁存数据
data3<=d3;
data2<=d2;
data1<=d1;
if ( k=' 0') then--当单位选择键k为0时,单
位unit置0,显示绿色
unit<= ' 0';
else-- 当单位选择键k为1时,单位unit置1,
显示红色
unit<= ' 1';
end if;
end if;
end process;
--计数到3的计数器,产生数码管选择信号
cnt3 prpcess:process(clkscan)
variable cnt:integar range 0 to 2:=0;
begin
if(clkscan ' event and clkscan= ' 1' )then if(cnt=2)then cnt:=0;
else
cnt:=cnt+1;
end if;
end if;
ms123 s<=conv std logic vector(cnt,2);
end process;
--数码管信号选择电路
bus _process:process(data3,data2,data1,clkscan,ms123 s)
begin
event and clkscan= ' 1' )then case ms123 s is _
when
” 00” =>dispv=data2; when
” 01” =>disp<=data3; when ” 10” =>disp<=data1;
when others=>disp<=data1;
end case;
end if;
end process;
ms123<=ms123js;
--四八译码电路 disp process:process(disp,k,ms123 s)
begin case disp is
when
0000 ” =>led<= ” 00111111 when
0001 ” =>led<= ” 00000110 when
0010 ” =>led<= ” 01011011 when
0011 ” =>led<= ” 01001111 when
0100 ” =>led<= ” 01100110 when
0101 ” =>led<= ” 01101101 when
0110
” =>led<= ” 01111101
if(clkscan
end case;
led(8)v=
led(8)v=
else
led(8)<=
end if;
end process;
end Behavioral;
图5.1
clk1hz —个时钟产生一个clk05hz 电平,clk05hz电平高低when ” 0111 ” =>led<= ”
00000111 ”
when ” 1000” =>led<= ”
01111111 ”
when ” 1001 ” =>led<= ”
01101111 ”
when others=>led<= ”
00111111”
if(ms123 s= ”
00”
and k=
‘ O' )then
五、仿真结果及说明
1、二分频电路仿真结果
交替
1'
elsif(ms123 s= ” 10” and k= '
1' )then
1';
O';
2、测试校验选择电路
sei为0时,cp1为测试信号meas,sel为1时,cpl为校验信号test。

3、控制电路
当clk05hz为1,被计数信号cp为cpl,当clk05hz为0,被计数信号cp为0;
当clk05hz为1,加载信号load为0,计数清零信号为1,当clk05hz为0,加载信号load为1,计数清零信号为0。

4、四位bcd计数电路
当清零信号rd为0时,输出信号q4,q3,q2,q1 置零,当清零
信号rd 为1时,q4,q3,q2,q1 为cp 的计数值。

5、送锁存,报警模块
图5.5
当键k 为0时,对bed 计数的低三位输出,当计数超出 999 时,报警信号输出为1
k 为1时,对bed 计数的高三位输出,当计数未超出999 时,报警信号输出为 0
6、锁存电路
图5.6
图5.7
当键k为0时,对bed计数的低三位锁存;
当加载键load为1时,进行锁存。

7、显示电路
ms123为0, 1, 2时分别显示个位,十位,百位,当单位选择键k为1时,单位显示unit为1 (红灯),且,百位数据DB高位dot位为1。

相关文档
最新文档