最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

VHDL第三次作业

来源:动视网 责编:小OO 时间:2025-09-30 21:12:43
文档

VHDL第三次作业

数字频率计数显示器数字频率计数显示器一、功能与要求该计数器的功能:对被测试信号进行计数,在1秒定时结束后,将计数器结果送锁存,同时将计数器清零,为下一次采样测量做好准备。要求如下:1、用VHDL完成12位十进制数字频率计的设计及仿真。2、频率测量范围:1HZ~10KHZ,分成两个频段,即1~999HZ,1KHZ~10KHZ,用三位数码管显示测量频率,用LED显示表示单位,如亮绿灯表示HZ,亮红灯表示KHZ。3、具有自动校验和没理两种功能,即能用标准时钟检验、测量精度。4、具有超量程度报警功能,
推荐度:
导读数字频率计数显示器数字频率计数显示器一、功能与要求该计数器的功能:对被测试信号进行计数,在1秒定时结束后,将计数器结果送锁存,同时将计数器清零,为下一次采样测量做好准备。要求如下:1、用VHDL完成12位十进制数字频率计的设计及仿真。2、频率测量范围:1HZ~10KHZ,分成两个频段,即1~999HZ,1KHZ~10KHZ,用三位数码管显示测量频率,用LED显示表示单位,如亮绿灯表示HZ,亮红灯表示KHZ。3、具有自动校验和没理两种功能,即能用标准时钟检验、测量精度。4、具有超量程度报警功能,
数字频率计数显示器

数字频率计数显示器

一、功能与要求

该计数器的功能:对被测试信号进行计数,在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。

检验与测量共用一个电路,只是被测信号CP1不同而已。

图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。

量程控制计数器锁存小数点位置报警信号
KQ04CD3 D2 D1alert
0

0

1

1

0

1

X

X

0

0

0

1

Q3 Q2 Q1

Q3 Q2 Q1

Q3 Q2 Q1

Q3 Q2 Q1

右第一位

右第一位

右第一位

右第一位

0

1

0

1

图2.5锁存、扫描显示模块

图2.5为锁存、扫描显示模块,该模块功能如下:

锁存器输入信号:D3-D1,LD;

输出信号:Q3-Q1,小数点单位显示unit。

图2.6扫描显示电路

如图2.6扫描显示电路,该模块包含两个模块:

七段显示译码器电路(DEC LED)

分时总线切换电路(SCAN)。

三、原理图说明

Clkscam      led(8:1)

Clk1hz

          Ms123(2:1)

K

Meas           alert

Sel

                Unit

test

    

图3.1频率计显示原理图

如图3.1,输入有扫描时钟clkscan,分频时钟clklhz,单位选择键K,被测信号meas,测试信号test,测试校验选择键sel。

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

四、源代码说明

--实体说明

library IEEE;

use IEEE.STD LOGIC 11.ALL;

use IEEE.STD LOGIC ARITH.ALL;

use IEEE.STD LOGIC UNSIGNED.ALL;

entity dig frq is

    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 LOGIC VECTOR(2 downto 1);

         led : out STD LOGIC VECTOR(8 downto 1);

end dig frq;

--结构体说明

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

        if(clk1hz’event and clk1hz=’1’)then

clk05hz<=not clk05hz;

        end if;

     end process;

    --测试、校验选择模块

     test meas: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;

cp<=clk05hz and cpl;

      --计数清零信号rd,当分频信号clk05hz为0时有效

rd<=clk05hz;

      --四位bcd计数电路

      cnt process:process(cp,rd)

      variable q4 s,q3 s,q2 s,q1 s:integer range 0 to 9;

      variable c s:integer range 0 to 1;

      begin

          if(rd=’0’)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 q1 s=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;

      q4<=conv std logic vector(q4 s,4);

      q3<=conv std logic vector(q3 s,4);

      q2<=conv std logic vector(q2 s,4);

      q1<=conv std logic vector(q1 s,4);

      if(c s=0)then

c<=’0’;

       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<=’0’;

         end if;

     elsif(k=’1’)then--当计数单位选择k为1时,输出计数器的高三位

d3<=q4;

d2<=q3;

d1<=q2;

       if(c>’0’)then--此时,当计数超过四位bcd数时,报警信号置1

alert<=’1’;

        else

alert<=’0’;

         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 process: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

     if(clkscan’event and clkscan=’1’)then

         case ms123 s is

when”00”=>disp<=data2;

when”01”=>disp<=data3;

when”10”=>disp<=data1;

when others=>disp<=data1;

         end case;

     end if;

 end process;

 ms123<=ms123 s;

 --四八译码电路

 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”;

when”0111”=>led<=”00000111”;

when”1000”=>led<=”01111111”;

when”1001”=>led<=”01101111”;

when others=>led<=”00111111”;

     end case;

     if(ms123 s=”00”and k=‘0’)then

led(8)<=’1’;

     elsif(ms123 s=”10”and k=’1’)then

led(8)<=’1’;

     else

led(8)<=’0’;

     end if;

  end process;

end Behavioral;

五、仿真结果及说明

1、二分频电路仿真结果

图5.1

clk1hz一个时钟产生一个clk05hz电平,clk05hz电平高低交替。

2、测试校验选择电路

图5.2

sel为0时,cp1为测试信号meas,sel为1时,cpl为校验信号test。

3、控制电路

图5.3

当clk05hz为1,被计数信号cp为cp1,当clk05hz为0,被计数信号cp为0;

当clk05hz为1,加载信号load为0,计数清零信号为1,当clk05hz为0,加载信号load为1,计数清零信号为0。

4、四位bcd计数电路

图5.4

当清零信号rd为0时,输出信号q4,q3,q2,q1置零,当清零信号rd为1时,q4,q3,q2,q1为cp的计数值。

5、送锁存,报警模块

图5.5

当键k为0时,对bcd计数的低三位输出,当计数超出999时,报警信号输出为1。

图5.6

当键k为1时,对bcd计数的高三位输出,当计数未超出999时,报警信号输出为0。

6、锁存电路

图5.7

当键k为0时,对bcd计数的低三位锁存;

当加载键load为1时,进行锁存。

7、显示电路

图5.8

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

文档

VHDL第三次作业

数字频率计数显示器数字频率计数显示器一、功能与要求该计数器的功能:对被测试信号进行计数,在1秒定时结束后,将计数器结果送锁存,同时将计数器清零,为下一次采样测量做好准备。要求如下:1、用VHDL完成12位十进制数字频率计的设计及仿真。2、频率测量范围:1HZ~10KHZ,分成两个频段,即1~999HZ,1KHZ~10KHZ,用三位数码管显示测量频率,用LED显示表示单位,如亮绿灯表示HZ,亮红灯表示KHZ。3、具有自动校验和没理两种功能,即能用标准时钟检验、测量精度。4、具有超量程度报警功能,
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top