八位数字频率计实验报告
8位频率计
EDA设计报告------八位频率计姓名成绩班级学号日期地点一.试验内容在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更加重要。
通过运用Verilog HDL语言,实现8位数字频率计,并利用Quartus II 6.0集成开发环境进行编辑、综合、波形仿真,并下载到FPGA器件中,经实际电路测试,该系统性能可靠。
本次EDA试验八位十进制频率计主要是通过Quartus II 6.0编写vhdl代码通过仿真调试后,下载到GW48-SOC+EP20K200试验箱完成硬件测试。
二.试验目的通过EDA的试验设计,加深我们对FPGA的了解,熟悉FPGA的工作原理和试验环境,知道FPGA的开发流程,熟悉各种软件如Quartus II 6.0的使用。
通过设计小型试验项目学会仿真和硬件测试的基本方法。
三.试验原理,设计思路8位十进制数据显示频率计设计在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。
测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
数字式频率计的测量原理有两类:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法即测周期法,如周期测频法。
直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数器阀门的时间长短在达到不同的测量精度;间接测频法适用于低频信号的频率测量,本设计中使用的就是直接测频法,即用计数器在计算1S内输入信号周期的个数。
数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。
随着现场可编程门阵列FPGA的广泛应用,以EDA工具作为开发手段,运用VHDL等硬件描述语言语言,将使整个系统大大简化,提高了系统的整体性能和可靠性。
八位十进制数字频率计
EDA课程设计报告书题目:8位十进制数字频率计的设计姓名:学号:所属学院:专业年级:指导教师:完成时间:8位十进制数字频率计的设计一、设计介绍数字频率计是采用数字电路制做成的能实现对周期性变化信号频率测量的仪器。
频率计主要用于测量正弦波、矩形波、三角波和尖脉冲等周期信号的频率值。
其扩展功能可以测量信号的周期和脉冲宽度。
通常说的,数字频率计是指电子计数式频率计。
频率计主要由四个部分构成:输入电路、时基(T)电路、计数显示电路以及控制电路。
在电子技术领域,频率是一个最基本的参数。
数字频率计作为一种最基本的测量仪器以其测量精度高、速度快、操作简便、数字显示等特点被广泛应用。
许多物理量,例如温度、压力、流量、液位、PH值、振动、位移、速度等通过传感器转换成信号频率,可用数字频率计来测量。
尤其是将数字频率计与微处理器相结合,可实现测量仪器的多功能化、程控化和智能化.随着现代科技的发展,基于数字式频率计组成的各种测量仪器、控制设备、实时监测系统已应用到国际民生的各个方面。
二、设计目的(1)熟悉Quatus 11软件的基本使用方法。
(2)熟悉EDA实验开发系统的使用方法。
(3)学习时序电路的设计、仿真和硬件设计,进一步熟悉VHDL设计技术。
三、数字频率计的基本原理数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,通常情况下计算每秒待测信号的脉冲个数,此时我们称闸门时间为1秒。
闸门时间也可以大于或小于一秒。
闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。
闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。
数字频率计的主要功能是测量周期信号的频率。
频率是单位时间(1S)信号发生周期变化的次数。
如果我们能在给定的1S时间对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。
数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔的脉冲个数,将其换算后显示出来。
八位16进制、八位10进制频率计设计
EDA综合实习报告一李爱20111154006 电子科学与技术2011级1.数字频率计的设计(1)8位16进制频率计①.主程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MAIN ISPORT (A,clk1,CLK: IN STD_LOGIC;O:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);P: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END;ARCHITECTURE HEAD OF MAIN ISCOMPONENT CEPINPORT (CLK1:IN STD_LOGIC;CNT: OUT STD_LOGIC;RST:OUT STD_LOGIC;LOAD:OUT STD_LOGIC);END COMPONENT;COMPONENT JISHUPORT (CLR:IN STD_LOGIC;EN:IN STD_LOGIC;FIN:IN STD_LOGIC;COUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );END COMPONENT;COMPONENT SUOCUNPORT( LK :IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR (31 DOWNTO 0);QDOUT: OUT STD_LOGIC_VECTOR (31 DOWNTO 0));END COMPONENT;COMPONENT XIANSHIPORT (clk: in std_logic;Q:IN STD_LOGIC_VECTOR(31 DOWNTO 0);T:buffer STD_LOGIC_VECTOR(2 DOWNTO 0);Y:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;SIGNAL NET1,NET2,NET3:STD_LOGIC;SIGNAL NET4,NET5 :STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINU1:CEPIN PORT MAP (CLK1=>CLK,CNT=>NET1,RST=>NET2,LOAD=>NET3);U2:JISHU PORT MAP (CLR=>NET2,EN=>NET1,FIN=>A,COUT=>NET4);U3:SUOCUN PORT MAP (LK=>NET3,DIN=>NET4,QDOUT=>NET5);U4:XIANSHI PORT MAP (clk=>clk1,Q=>NET5,Y=>P,T=>O);END HEAD;②.测频LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cepin ISPORT (CLK1:IN STD_LOGIC;CNT: OUT STD_LOGIC;RST:OUT STD_LOGIC;LOAD:OUT STD_LOGIC);END ;ARCHITECTURE one OF cepin ISSIGNAL M: STD_LOGIC;BEGINPROCESS (CLK1)BEGINIF CLK1 'EVENT AND CLK1='1' THENM<= NOT M;END IF;END PROCESS;PROCESS (CLK1,M)BEGINIF CLK1='0' AND M='0' THEN RST<='1';ELSE RST <='0';END IF;END PROCESS;LOAD <= NOT M;CNT <=M;END one;③.计数LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JISHU ISPORT (CLR:IN STD_LOGIC;EN:IN STD_LOGIC;FIN:IN STD_LOGIC;COUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0));END ;ARCHITECTURE two OF JISHU ISSIGNAL Q: STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINPROCESS (CLR,EN,FIN) BEGINIF CLR='1' THEN Q <= (OTHERS=>'0');ELSIF FIN 'EVENT AND FIN='1' THENIF EN='1' THEN Q <= Q+1;END IF;END IF;END PROCESS;COUT <=Q;END two;④.锁存LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SUOCUN ISPORT( LK :IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR (31 DOWNTO 0);qDOUT: OUT STD_LOGIC_VECTOR (31 DOWNTO 0)); END ;ARCHITECTURE three OF SUOCUN ISBEGINPROCESS (LK,DIN)BEGINIF LK 'EVENT AND LK='1' THEN qDOUT <=DIN;END IF;END PROCESS;END three;⑤显示LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XIANSHI ISPORT (clk: in std_logic;Q:IN STD_LOGIC_VECTOR(31 DOWNTO 0);T:buffer STD_LOGIC_VECTOR(2 DOWNTO 0);Y:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END ;ARCHITECTURE four OF XIANSHI ISBEGINPROCESS(Q,clk,T)V ARIABLE Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF clk'event and clk='1' THENQ1:=Q1+'1';END IF;if Q1="0001" thenCASE Q(3 downto 0) ISWHEN "0000"=>T<="000";Y<="0111111";WHEN "0001"=>T<="000";Y<="0000110";WHEN "0010"=>T<="000";Y<="1011011";WHEN "0011"=>T<="000";Y<="1001111";WHEN "0100"=>T<="000";Y<="1100110";WHEN "0101"=>T<="000";Y<="1101101";WHEN "0110"=>T<="000";Y<="1111101";WHEN "0111"=>T<="000";Y<="0000111";WHEN "1000"=>T<="000";Y<="1111111";WHEN "1001"=>T<="000";Y<="1101111";WHEN "1010"=>T<="000";Y<="1110111";WHEN "1011"=>T<="000";Y<="1111100";WHEN "1100"=>T<="000";Y<="0111001";WHEN "1101"=>T<="000";Y<="1011110";WHEN "1110"=>T<="000";Y<="1111011";WHEN "1111"=>T<="000";Y<="1110001";WHEN OTHERS=> NULL;END CASE;elsif Q1="0010" thenCASE Q(7 downto 4) ISWHEN "0000"=>T<="001";Y<="0111111"; WHEN "0001"=>T<="001";Y<="0000110"; WHEN "0010"=>T<="001";Y<="1011011"; WHEN "0011"=>T<="001";Y<="1001111"; WHEN "0100"=>T<="001";Y<="1100110"; WHEN "0101"=>T<="001";Y<="1101101"; WHEN "0110"=>T<="001";Y<="1111101"; WHEN "0111"=>T<="001";Y<="0000111"; WHEN "1000"=>T<="001";Y<="1111111"; WHEN "1001"=>T<="001";Y<="1101111"; WHEN "1010"=>T<="001";Y<="1110111"; WHEN "1011"=>T<="001";Y<="1111100"; WHEN "1100"=>T<="001";Y<="0111001"; WHEN "1101"=>T<="001";Y<="1011110"; WHEN "1110"=>T<="001";Y<="1111011"; WHEN "1111"=>T<="001";Y<="1110001"; WHEN OTHERS=> NULL;END CASE;elsif Q1="0011"thenCASE Q(11 downto 8) ISWHEN "0000"=>T<="010";Y<="0111111"; WHEN "0001"=>T<="010";Y<="0000110"; WHEN "0010"=>T<="010";Y<="1011011"; WHEN "0011"=>T<="010";Y<="1001111"; WHEN "0100"=>T<="010";Y<="1100110"; WHEN "0101"=>T<="010";Y<="1101101"; WHEN "0110"=>T<="010";Y<="1111101"; WHEN "0111"=>T<="010";Y<="0000111"; WHEN "1000"=>T<="010";Y<="1111111"; WHEN "1001"=>T<="010";Y<="1101111"; WHEN "1010"=>T<="010";Y<="1110111"; WHEN "1011"=>T<="010";Y<="1111100"; WHEN "1100"=>T<="010";Y<="0111001"; WHEN "1101"=>T<="010";Y<="1011110"; WHEN "1110"=>T<="010";Y<="1111011"; WHEN "1111"=>T<="010";Y<="1110001"; WHEN OTHERS=> NULL;END CASE;elsif Q1="0100" thenCASE Q(15 downto 12) ISWHEN "0001"=>T<="011";Y<="0000110"; WHEN "0010"=>T<="011";Y<="1011011"; WHEN "0011"=>T<="011";Y<="1001111"; WHEN "0100"=>T<="011";Y<="1100110"; WHEN "0101"=>T<="011";Y<="1101101"; WHEN "0110"=>T<="011";Y<="1111101"; WHEN "0111"=>T<="011";Y<="0000111"; WHEN "1000"=>T<="011";Y<="1111111"; WHEN "1001"=>T<="011";Y<="1101111"; WHEN "1010"=>T<="011";Y<="1110111"; WHEN "1011"=>T<="011";Y<="1111100"; WHEN "1100"=>T<="011";Y<="0111001"; WHEN "1101"=>T<="011";Y<="1011110"; WHEN "1110"=>T<="011";Y<="1111011"; WHEN "1111"=>T<="011";Y<="1110001"; WHEN OTHERS=>NULL;END CASE;elsif Q1="0101" thenCASE Q(19 downto 16) ISWHEN "0000"=>T<="100";Y<="0111111"; WHEN "0001"=>T<="100";Y<="0000110"; WHEN "0010"=>T<="100";Y<="1011011"; WHEN "0011"=>T<="100";Y<="1001111"; WHEN "0100"=>T<="100";Y<="1100110"; WHEN "0101"=>T<="100";Y<="1101101"; WHEN "0110"=>T<="100";Y<="1111101"; WHEN "0111"=>T<="100";Y<="0000111"; WHEN "1000"=>T<="100";Y<="1111111"; WHEN "1001"=>T<="100";Y<="1101111"; WHEN "1010"=>T<="100";Y<="1110111"; WHEN "1011"=>T<="100";Y<="1111100"; WHEN "1100"=>T<="100";Y<="0111001"; WHEN "1101"=>T<="100";Y<="1011110"; WHEN "1110"=>T<="100";Y<="1111011"; WHEN "1111"=>T<="100";Y<="1110001"; WHEN OTHERS=> NULL;END CASE;elsif Q1="0110" thenCASE Q(23 downto 20) ISWHEN "0000"=>T<="101";Y<="0111111"; WHEN "0001"=>T<="101";Y<="0000110";WHEN "0011"=>T<="101";Y<="1001111"; WHEN "0100"=>T<="101";Y<="1100110"; WHEN "0101"=>T<="101";Y<="1101101"; WHEN "0110"=>T<="101";Y<="1111101"; WHEN "0111"=>T<="101";Y<="0000111"; WHEN "1000"=>T<="101";Y<="1111111"; WHEN "1001"=>T<="101";Y<="1101111"; WHEN "1010"=>T<="101";Y<="1110111"; WHEN "1011"=>T<="101";Y<="1111100"; WHEN "1100"=>T<="101";Y<="0111001"; WHEN "1101"=>T<="101";Y<="1011110"; WHEN "1110"=>T<="101";Y<="1111011"; WHEN "1111"=>T<="101";Y<="1110001"; WHEN OTHERS=> NULL;END CASE;elsif Q1="0111" thenCASE Q(27 downto 24) ISWHEN "0000"=>T<="110";Y<="0111111"; WHEN "0001"=>T<="110";Y<="0000110"; WHEN "0010"=>T<="110";Y<="1011011"; WHEN "0011"=>T<="110";Y<="1001111"; WHEN "0100"=>T<="110";Y<="1100110"; WHEN "0101"=>T<="110";Y<="1101101"; WHEN "0110"=>T<="110";Y<="1111101"; WHEN "0111"=>T<="110";Y<="0000111"; WHEN "1000"=>T<="110";Y<="1111111"; WHEN "1001"=>T<="110";Y<="1101111"; WHEN "1010"=>T<="110";Y<="1110111"; WHEN "1011"=>T<="110";Y<="1111100"; WHEN "1100"=>T<="110";Y<="0111001"; WHEN "1101"=>T<="110";Y<="1011110"; WHEN "1110"=>T<="110";Y<="1111011"; WHEN "1111"=>T<="110";Y<="1110001"; WHEN OTHERS=> NULL;END CASE;elsif Q1="1000" thenCASE Q(31 downto 28) ISWHEN "0000"=>T<="111";Y<="0111111"; WHEN "0001"=>T<="111";Y<="0000110"; WHEN "0010"=>T<="111";Y<="1011011"; WHEN "0011"=>T<="111";Y<="1001111";WHEN "0101"=>T<="111";Y<="1101101";WHEN "0110"=>T<="111";Y<="1111101";WHEN "0111"=>T<="111";Y<="0000111";WHEN "1000"=>T<="111";Y<="1111111";WHEN "1001"=>T<="111";Y<="1101111";WHEN "1010"=>T<="111";Y<="1110111";WHEN "1011"=>T<="111";Y<="1111100";WHEN "1100"=>T<="111";Y<="0111001";WHEN "1101"=>T<="111";Y<="1011110";WHEN "1110"=>T<="111";Y<="1111011";WHEN "1111"=>T<="111";Y<="1110001";WHEN OTHERS=> NULL;END CASE;end if; END PROCESS;END four;⑥引脚:A:测频端口CLK:1Hz输入频率CLK1:2048Hz的刷新频率O:三八译码器选择端口P:数码管显示(2)8位10进制频率计①主程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MAIN ISPORT (CLK1,FSIN:IN STD_LOGIC;CLK:IN STD_LOGIC; E:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ;ARCHITECTURE HEAD OF MAIN ISCOMPONENT JISHUPORT(CLK,RST,EN:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT :OUT STD_LOGIC);END COMPONENT;COMPONENT CEPINPORT (CLK:IN STD_LOGIC;TSTEN:OUT STD_LOGIC;CLR_CNT:OUT STD_LOGIC;LOAD:OUT STD_LOGIC);END COMPONENT;COMPONENT SUOCUNPORT(LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT :OUT STD_LOGIC_VECTOR(31 DOWNTO 0));END COMPONENT;COMPONENT XIANSHIPORT (clk: in std_logic;Q:IN STD_LOGIC_VECTOR(31 DOWNTO 0);T:buffer STD_LOGIC_VECTOR(2 DOWNTO 0);Y:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END COMPONENT;SIGNAL TSTEN:STD_LOGIC;SIGNAL CLR_CNT:STD_LOGIC;SIGNAL LOAD:STD_LOGIC;SIGNAL C1:STD_LOGIC;SIGNAL C2:STD_LOGIC;SIGNAL C3:STD_LOGIC;SIGNAL C4:STD_LOGIC;SIGNAL C5:STD_LOGIC;SIGNAL C6:STD_LOGIC;SIGNAL C7:STD_LOGIC;SIGNAL C8:STD_LOGIC;SIGNAL DIN,S:STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINU0:CEPIN PORT MAP(CLK=>CLK,TSTEN=>TSTEN,CLR_CNT=>CLR_CNT,LOAD=>LOAD);U1:JISHU PORT MAP(CLK=>FSIN,RST=>CLR_CNT,EN=>TSTEN,CQ=>DIN(3 DOWNTO 0),COUT=>C1);U2:JISHU PORT MAP(CLK=>C1,RST=>CLR_CNT,EN=>TSTEN,CQ=>DIN(7 DOWNTO 4),COUT=>C2);U3:JISHU PORT MAP(CLK=>C2,RST=>CLR_CNT,EN=>TSTEN,CQ=>DIN(11 DOWNTO 8),COUT=>C3);U4:JISHU PORT MAP(CLK=>C3,RST=>CLR_CNT,EN=>TSTEN,CQ=>DIN(15 DOWNTO 12),COUT=>C4);U5:JISHU PORT MAP(CLK=>C4,RST=>CLR_CNT,EN=>TSTEN,CQ=>DIN(19 DOWNTO 16),COUT=>C5);U6:JISHU PORT MAP(CLK=>C5,RST=>CLR_CNT,EN=>TSTEN,CQ=>DIN(23 DOWNTO 20),COUT=>C6);U7:JISHU PORT MAP(CLK=>C6,RST=>CLR_CNT,EN=>TSTEN,CQ=>DIN(27 DOWNTO 24),COUT=>C7);U8:JISHU PORT MAP(CLK=>C7,RST=>CLR_CNT,EN=>TSTEN,CQ=>DIN(31 DOWNTO 28),COUT=>C8);U9:SUOCUN PORT MAP(LOAD=>LOAD,DIN=>DIN(31 DOWNTO 0),DOUT=>S);U10:XIANSHI PORT MAP(CLK=>CLK1,Q=>S,T=>E,Y=>DOUT);END HEAD;②测频LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CEPIN ISPORT (CLK:IN STD_LOGIC;TSTEN:OUT STD_LOGIC;CLR_CNT:OUT STD_LOGIC;LOAD:OUT STD_LOGIC);END ;ARCHITECTURE TWO OF CEPIN ISSIGNAL DIV2CLK :STD_LOGIC;BEGINPROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1' THENDIV2CLK<=NOT DIV2CLK;END IF;END PROCESS;PROCESS(CLK,DIV2CLK)BEGINIF CLK='0' AND DIV2CLK='0' THENCLR_CNT<='1';ELSE CLR_CNT<='0';END IF;END PROCESS;LOAD<=NOT DIV2CLK;TSTEN <=DIV2CLK;END TWO;③计数LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY JISHU ISPORT(CLK,RST,EN:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END ;ARCHITECTURE ONE OF JISHU ISBEGINPROCESS(CLK,RST,EN)V ARIABLE CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST='1' THEN CQI:=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF EN='1' THENIF CQI<"1001" THENCQI:=CQI+1;ELSE CQI:=(OTHERS=>'0');END IF;END IF;END IF;IF CQI="1001" THEN COUT<='1';ELSE COUT<='0';END IF;CQ<=CQI;END PROCESS;END ONE;④所存LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SUOCUN ISPORT(LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT :OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); END ;ARCHITECTURE THREE OF SUOCUN ISBEGINPROCESS(LOAD,DIN)BEGINIF LOAD'EVENT AND LOAD='1' THEN DOUT<=DIN;END IF;END PROCESS;END THREE;⑤显示LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY XIANSHI ISPORT (clk: in std_logic;Q:IN STD_LOGIC_VECTOR(31 DOWNTO 0);T:buffer STD_LOGIC_VECTOR(2 DOWNTO 0);Y:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END ;ARCHITECTURE four OF XIANSHI ISBEGINPROCESS(Q,clk,T)V ARIABLE Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF clk'event and clk='1' THENQ1:=Q1+'1';END IF;if Q1="0001" thenCASE Q(3 downto 0) ISWHEN "0000"=>T<="000";Y<="0111111";WHEN "0001"=>T<="000";Y<="0000110";WHEN "0010"=>T<="000";Y<="1011011";WHEN "0011"=>T<="000";Y<="1001111";WHEN "0100"=>T<="000";Y<="1100110";WHEN "0101"=>T<="000";Y<="1101101";WHEN "0110"=>T<="000";Y<="1111101";WHEN "1000"=>T<="000";Y<="1111111"; WHEN "1001"=>T<="000";Y<="1101111"; WHEN OTHERS=> NULL;END CASE;elsif Q1="0010" thenCASE Q(7 downto 4) ISWHEN "0000"=>T<="001";Y<="0111111"; WHEN "0001"=>T<="001";Y<="0000110"; WHEN "0010"=>T<="001";Y<="1011011"; WHEN "0011"=>T<="001";Y<="1001111"; WHEN "0100"=>T<="001";Y<="1100110"; WHEN "0101"=>T<="001";Y<="1101101"; WHEN "0110"=>T<="001";Y<="1111101"; WHEN "0111"=>T<="001";Y<="0000111"; WHEN "1000"=>T<="001";Y<="1111111"; WHEN "1001"=>T<="001";Y<="1101111"; WHEN OTHERS=> NULL;END CASE;elsif Q1="0011"thenCASE Q(11 downto 8) ISWHEN "0000"=>T<="010";Y<="0111111"; WHEN "0001"=>T<="010";Y<="0000110"; WHEN "0010"=>T<="010";Y<="1011011"; WHEN "0011"=>T<="010";Y<="1001111"; WHEN "0100"=>T<="010";Y<="1100110"; WHEN "0101"=>T<="010";Y<="1101101"; WHEN "0110"=>T<="010";Y<="1111101"; WHEN "0111"=>T<="010";Y<="0000111"; WHEN "1000"=>T<="010";Y<="1111111"; WHEN "1001"=>T<="010";Y<="1101111"; WHEN OTHERS=> NULL;END CASE;elsif Q1="0100" thenCASE Q(15 downto 12) ISWHEN "0000"=>T<="011";Y<="0111111"; WHEN "0001"=>T<="011";Y<="0000110"; WHEN "0010"=>T<="011";Y<="1011011"; WHEN "0011"=>T<="011";Y<="1001111";WHEN "0101"=>T<="011";Y<="1101101"; WHEN "0110"=>T<="011";Y<="1111101"; WHEN "0111"=>T<="011";Y<="0000111"; WHEN "1000"=>T<="011";Y<="1111111"; WHEN "1001"=>T<="011";Y<="1101111"; WHEN OTHERS=>NULL;END CASE;elsif Q1="0101" thenCASE Q(19 downto 16) ISWHEN "0000"=>T<="100";Y<="0111111"; WHEN "0001"=>T<="100";Y<="0000110"; WHEN "0010"=>T<="100";Y<="1011011"; WHEN "0011"=>T<="100";Y<="1001111"; WHEN "0100"=>T<="100";Y<="1100110"; WHEN "0101"=>T<="100";Y<="1101101"; WHEN "0110"=>T<="100";Y<="1111101"; WHEN "0111"=>T<="100";Y<="0000111"; WHEN "1000"=>T<="100";Y<="1111111"; WHEN "1001"=>T<="100";Y<="1101111"; WHEN OTHERS=> NULL;END CASE;elsif Q1="0110" thenCASE Q(23 downto 20) ISWHEN "0000"=>T<="101";Y<="0111111"; WHEN "0001"=>T<="101";Y<="0000110"; WHEN "0010"=>T<="101";Y<="1011011"; WHEN "0011"=>T<="101";Y<="1001111"; WHEN "0100"=>T<="101";Y<="1100110"; WHEN "0101"=>T<="101";Y<="1101101"; WHEN "0110"=>T<="101";Y<="1111101"; WHEN "0111"=>T<="101";Y<="0000111"; WHEN "1000"=>T<="101";Y<="1111111"; WHEN "1001"=>T<="101";Y<="1101111"; WHEN OTHERS=> NULL;END CASE;elsif Q1="0111" thenCASE Q(27 downto 24) ISWHEN "0000"=>T<="110";Y<="0111111"; WHEN "0001"=>T<="110";Y<="0000110"; WHEN "0010"=>T<="110";Y<="1011011";WHEN "0100"=>T<="110";Y<="1100110";WHEN "0101"=>T<="110";Y<="1101101";WHEN "0110"=>T<="110";Y<="1111101";WHEN "0111"=>T<="110";Y<="0000111";WHEN "1000"=>T<="110";Y<="1111111";WHEN "1001"=>T<="110";Y<="1101111";WHEN OTHERS=> NULL;END CASE;elsif Q1="1000" thenCASE Q(31 downto 28) ISWHEN "0000"=>T<="111";Y<="0111111";WHEN "0001"=>T<="111";Y<="0000110";WHEN "0010"=>T<="111";Y<="1011011";WHEN "0011"=>T<="111";Y<="1001111";WHEN "0100"=>T<="111";Y<="1100110";WHEN "0101"=>T<="111";Y<="1101101";WHEN "0110"=>T<="111";Y<="1111101";WHEN "0111"=>T<="111";Y<="0000111";WHEN "1000"=>T<="111";Y<="1111111";WHEN "1001"=>T<="111";Y<="1101111";WHEN OTHERS=> NULL;END CASE;end if; END PROCESS;END four;⑥引脚:FSIN:待测频率输入CLK:1Hz输入频率CLK1:2048Hz的刷新频率E:三八译码器选择端口DOUT:数码管显示。
EDA八位十进制频率计实验报告
设计报告课程名称在系统编程技术任课教师设计题目八位十进制频率计设计班级姓名学号日期目录一、题目分析1、设计原理二、选择方案三、方案实现四、硬件测试及说明五、结论六、课程总结七、参考文献八、附件一、题目分析1、设计原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1S的输入信号脉冲计数允许的信号;1S计数结束后,计数值被锁入锁存器,计数器清零,为下一测评计数周期做好准备。
测频控制信号可以由一个独立的发生器来产生。
2、设计要求:测频控制电路的计数使能信号能产生一个1S脉宽的周期信号,并对频率计中的计数器使能端进行同步控制。
当测频控制电路的使能信号高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号的上升沿将计数器在前一秒钟的计数值锁进锁存器中,并由外部的十进制7段译码器译出,显示计数值。
设置锁存器的好处是数据显示稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号后,必须有一清零信号对计数器进行清零,为下一秒的技术操作做准备。
3、实现功能当输入一个待测频率时,在测频信号的控制下,可以通过外部的7段译码器显示出其频率值。
二、设计方案1、总体框图设计一个八位十进制频率计,首先需要一个测频控制电路来产生一个脉宽为1S的输入信号脉冲计数允许的信号;然后需要一个32位计数器进行计数,由于在计数完成之后还需要一个锁存器将计数值进行锁存,从而使显示的数值稳定。
2、模块描述(1)八位十进制频率计顶层该模块即为我们最终所要实现的模块,即给定一个频率后,我们可以在外部显示上看到待测频率的频率值。
(2)测频控制电路该模块用于产生产生一个脉宽为1S的输入信号脉冲计数允许的信号,以便于后面模块的使用。
(3)32位计数器该模块用于在1S脉宽的周期信号内对待测频率的周期进行计数,从而得到待测频率的频率值。
(4)32位锁存器该模块用于将计数器产生的最终的计数值进行锁存,从而使显示的数值稳定。
实验08八位十进制频率计
实验八8位十进制频率计一. 实验目的1. 掌握8位十进制频率计的设计;2. 学习HDL编程例化语句的使用。
二. 准备知识根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1s的输入信号脉冲计数允许的信号;1s计数结束后,计数值锁入锁存器,并将下一测频计数周期做准备的计数器清零。
在这里,计数器由8个十进制的计数器级联组成,如图8.1所示的是频率计的计数结构图,可以看出,十进制模块之间是由进位级联而成的。
本实验要使用HDL语言编写顶层文件。
使用直流电机转速信号PIN140为待测频率,为使电机转动,需要给电机的加上控制信号,MotorA(PIN138)接VCC,MotorB(PIN139)接GND。
这里对直流电机的电路不做详细说明。
图8.1 8位十进制频率计原理图三. 实验步骤1、新建工程新建文件夹,在该文件夹下新建工程freqtest。
2、编写低层HDL文件根据原理图8.1的内容,编写各个功能模块的HDL文件。
3、编写顶层HDL文件编写顶层HDL文件freq,使用例化语句,把原理图8.1描述出来。
设定为顶层文件,进行编译,如有错误,纠正直至成功为止。
3、锁定管脚按表锁定管脚,并重新进行编译,把管脚信息编译到下载文件中。
4、下载下载后,观察所测的直流电机的频率。
直流电机每转动一圈,光电探测器产生4个速度脉冲信号。
故电机的实际频率为所测频率的1/4倍。
四. 实验参考程序程序清单TESTCTL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTL ISPORT ( CLKK : IN STD_LOGIC; -- 1HzCNT_EN,RST_CNT,LOAD : OUT STD_LOGIC);END TESTCTL;ARCHITECTURE BEHA V OF TESTCTL ISSIGNAL DIV2CLK : STD_LOGIC;BEGINPROCESS( CLKK )BEGINIF CLKK'EVENT AND CLKK = '1' THENDIV2CLK <= NOT DIV2CLK;END IF;END PROCESS;PROCESS (CLKK, DIV2CLK)BEGINIF CLKK='0' AND Div2CLK='0' THENRST_CNT <= '1';ELSERST_CNT <= '0';END IF;END PROCESS;LOAD <= NOT DIV2CLK ;CNT_EN <= DIV2CLK;END BEHA V;程序清单CNT_10.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT_10 ISPORT ( CLK : IN STD_LOGIC;RST : IN STD_LOGIC; --1 RESETEN : IN STD_LOGIC; --1 COUNTER ENABLECO : OUT STD_LOGIC;Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END CNT_10;ARCHITECTURE BEH OF CNT_10 ISSIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS (CLK)BEGINIF RST='1' THENQ1<=(OTHERS=>'0');ELSIF RISING_EDGE(CLK) THENIF EN='1' THENIF Q1="1001" THENQ1<=(OTHERS=>'0');CO<='1';ELSEQ1<=Q1+1;CO<='0';END IF;END IF;END IF;Q<=Q1;END PROCESS;END BEH;程序清单REG32B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B ISPORT ( LOAD : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ); END REG32B;ARCHITECTURE BEH OF REG32B ISBEGINPROCESS(LOAD, DIN)BEGINIF LOAD'EVENT AND LOAD = '1' THENDOUT <= DIN;END IF;END PROCESS;END BEH;程序清单CNT_10.VHDLIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY freq ISport ( F_IN : IN STD_LOGIC;CLK48MHz : IN STD_LOGIC;COUT : OUT STD_LOGIC;load : OUT STD_LOGIC;MotorA : OUT STD_LOGIC;MotorB : OUT STD_LOGIC;dig : OUT STD_LOGIC_VECTOR(7 downto 0);seg : OUT STD_LOGIC_VECTOR(7 downto 0));END freq;ARCHITECTURE bdf_type OF freq IScomponent cnt_10PORT(CLK : IN STD_LOGIC;RST : IN STD_LOGIC;EN : IN STD_LOGIC;CO : OUT STD_LOGIC;Q : OUT STD_LOGIC_VECTOR(3 downto 0));end component;component testctlPORT(CLKK : IN STD_LOGIC;CNT_EN : OUT STD_LOGIC;RST_CNT : OUT STD_LOGIC;LOAD : OUT STD_LOGIC);end component;component int_divGENERIC (F_DIV:INTEGER;F_DIV_WIDTH:INTEGER);PORT(Clockin : IN STD_LOGIC;ClockOut : OUT STD_LOGIC;Cnt : OUT STD_LOGIC_VECTOR(16 downto 0));end component;component reg32bPORT(LOAD : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 downto 0);DOUT : OUT STD_LOGIC_VECTOR(31 downto 0));end component;component scanledPORT(DIN : IN STD_LOGIC_VECTOR(31 downto 0);SEL : IN STD_LOGIC_VECTOR(2 downto 0);DIG : OUT STD_LOGIC_VECTOR(7 downto 0);DSEL : OUT STD_LOGIC_VECTOR(3 downto 0));end component;component decode7PORT(DIN : IN STD_LOGIC_VECTOR(3 downto 0);DOUT : OUT STD_LOGIC_VECTOR(7 downto 0));end component;signal CLK1Hz, CLK400Hz, RESET, ENABLE: STD_LOGIC;signal F ,REGF : STD_LOGIC_VECTOR(31 downto 0);--signal load : STD_LOGIC;signal COUTA, COUTB, COUTC, COUTD, COUTF, COUTE, COUTG: STD_LOGIC; signal SCANCNT : STD_LOGIC_VECTOR(2 downto 0);signal SEGIN : STD_LOGIC_VECTOR(3 downto 0);BEGINMotorA <= '1';MotorB <= '0';U1 : cnt_10PORT MAP(CLK => F_IN,RST => RESET,EN => ENABLE,CO => COUTA,Q => F(3 downto 0));U2 : cnt_10PORT MAP(CLK => COUTA,RST => RESET,EN => ENABLE,CO => COUTB,Q => F(7 downto 4));U3 : cnt_10PORT MAP(CLK => COUTB,RST => RESET,EN => ENABLE,CO => COUTC,Q => F(11 downto 8));U4 : cnt_10PORT MAP(CLK => COUTC,RST => RESET,EN => ENABLE,CO => COUTD,Q => F(15 downto 12));U13 : cnt_10PORT MAP(CLK => COUTD,RST => RESET,EN => ENABLE,CO => COUTE,Q => F(19 downto 16));U15 : cnt_10PORT MAP(CLK => COUTE,RST => RESET,EN => ENABLE,CO => COUTF,Q => F(23 downto 20));U14 : cnt_10PORT MAP(CLK => COUTF,RST => RESET,EN => ENABLE,CO => COUTG,Q => F(27 downto 24));U16 : cnt_10PORT MAP(CLK => COUTG,RST => RESET,EN => ENABLE,CO => COUT,Q => F(31 downto 28));U9 : testctlPORT MAP(CLKK => CLK1Hz,CNT_EN => ENABLE,RST_CNT => RESET,LOAD => load);Uinst : int_divGENERIC MAP(F_DIV => 120000,F_DIV_WIDTH => 17) PORT MAP(Clockin => CLK48MHz,ClockOut => CLK400Hz);Uinst1 : reg32bPORT MAP(LOAD => load,DIN => F,DOUT => REGF);Uinst2 : scanledPORT MAP(DIN => REGF,SEL => SCANCNT,DIG => dig,DSEL => SEGIN);Uinst3 : decode7PORT MAP(DIN => SEGIN,DOUT => seg);Uinst6 : int_divGENERIC MAP(F_DIV => 8,F_DIV_WIDTH => 3) PORT MAP(Clockin => CLK400Hz,Cnt => SCANCNT);Uinst7 : int_divGENERIC MAP(F_DIV => 400,F_DIV_WIDTH => 9) PORT MAP(Clockin => CLK400Hz,ClockOut => CLK1Hz);END;程序清单CNT_10.VHDVerilog HDL 程序:。
实验五 8位十进制频率计
EDA实验报告8位十进制频率计电信1002班姓名:谌晴学号:1404100320实验五8位十进制频率计一、实验目的设计8位十进制频率计,学习较复杂的数字系统设计方法;学习VHDL编程例化语句的使用。
二、实验内容在SmartSOPC 实验箱上实现8位十进制频率计的设计。
被测信号从fre_input 引脚(FPGA的13脚,位于QuickSOP核心板的左上角)输入,经过检测后测得的频率值用数码管1~8显示。
被测的频率信号由测频模块内部产生并输出到外部引脚,其频率对应关系如下表1所示:表1 输出引脚对应的频率值三、实验原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1s的输入信号脉冲技术允许的信号;1s计数结束后,计数值锁入锁存器,并将下一测频计数周期作准备的计数器清零。
计数器在这里是由8个十进制计数器级联组成,如图1所示:图1 频率计计数器结构图四、实验步骤1)启动Quartus II 建立一个空白工程,然后命名为freqtest.qdf。
新建VHDL源程序文件freqtest.vhd、cnt10.vhd和scan_led.vhd,输入程序代码并保存(完整的VHDL程序参考程序清单1),分别进行综合编译。
若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
2)选择目标期间并对相应的引脚进行锁定,在这里所选择的期间为Altera公司Cyclone系列的EP1C12Q240C8芯片,引脚锁定方法如下表2所示,将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)。
表2 引脚锁定方法3)将freqtest.vhd设置为顶层实体。
对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
4)连接硬件、下载程序。
(1)用实验箱配置的连线将核心板上的PACK区的引脚236、237、238和239分别于数码管显示去的COM3(DIG_COM)的DIG4~DIG7相对应连接。
8位十进制显示数字频率计(带周期)设计报告
EDA期末考试设计报告设计题目:8位十进制显示数字频率计(带周期测量) 学校:梧州学院系别:电子信息工程系班别:09电本2班姓名:陈迪学号:5组员:刘芸云王缉俭指导老师:黄玉健一、设计内容:8位十进制显示数字频率计(带周期测量)。
二、设计目的与要求:1、设计电路实现测量1~Hz方波信号的频率以及其周期,并以十进制的方式显示。
2、要求其数值用七段LED数码管或液晶屏显示。
3、在实验系统上硬件测试,验证此设计的功能。
4、画出实体图,设计原理图,要求用Protel设计出具体的电路原理图。
三、设计原理:8位十进制显示数字频率计(带周期测量)是由8位十进制频率计、8位十进制周期测量器和带锁存功能的64选32数据选择器构成。
频率计基准信号采用8Hz的方波信号,而周期测量采用基准信号为50MHz的方波信号。
其中,频率计和周期测量由相同的32位数据锁存器和8位十进制计数器及不同的测频控制电路构成。
为使电路设计更加简单快捷,且方便阅读与理解,本电路使采用模块化的设计思想,先由VHDL源程序对各个模块进行独立编写、测试,然后封装,再用原理图方式进行连接、整合与波形和硬件仿真。
例如将用CLOCK5、CLOCK2输入标准频率,CLOCK0输入被测频,用数码管显示频率和周期。
Protel 设计原理图:11223344DDCCBBA ADig0Dig0Dig0Dig0Dig0Dig0Dig0Dig064选32数据选择器测频控制(频率)8位十进制计数器32位数据锁存器A32位数据锁存器B测频控制(周期)8位十进制计数器FCLKFINSENPCLK选通信号锁存信号8Hz 标准信号50MHz 标准信号测试信号32位数据32位数据32位数据32位数据32位数据锁存信号锁存信号清零信号清零信号使能信号使能信号选通灯锁存灯7段数码管显示8位十进制频率计(带测周期)09电本2本 陈迪 刘芸云 王缉俭1、频率测量的基本原理:根据频率的定义,若某一信号在T时间内重复变化N次,则可知该信号的频率为:f =N/T 对此可采用数字逻辑电路中的门电路来实现,如图:在与门端加入被测信号,另一端加宽度为T1的控制信号(称闸门信号),输出端仅能在T1时间内有波形的出现,然后送入计数器计数,得N*T2=T1所以f =N/T1。
8位十进制频率计设计 EDA技术与Verilog HDL实验报告
8位十进制频率计设计一.实验目的熟悉在QuartusII下设计2位和8位十进制频率计。
二.实验内容在QuartusII下设计2位和8位十进制频率计,并编译、仿真验证其功能。
三.程序清单频率计顶层文件设计:(1)2位十进制频率计Conter8.bdf图形输入:tf_ctro.bdf图形输入:ft_top.bdf图形输入:conter100.v文本输入:module conter100(CLK,CLR,EN,cout,ge,shi); input CLK,EN,CLR;output [3:0]ge;output [3:0]shi ;output cout;reg cout;reg [3:0]ge;reg [3:0]shi;always @(posedge CLK )if (!CLR)beginge<=0;shi<=0;cout<=0;endelse if((ge==9)&&(shi==9))beginge<=0;shi<=0;cout<=1;endelse if (ge==9)beginge<=0;shi<=shi+1;cout<=0;endelsebeginge<=ge+1;shi<=shi;cout<=0;endendmoduletf_ctro.v文本输入:module tf_ctro (clk,en,clr,lock);input clk;output en,clr,lock;reg en,clr,lock;integer d=0; always @(posedge clk) begind<=d+1;if (d==1)beginen<=0;lock<=0;clr<=0; end else if(d==2)beginlock<=1;en<=0;clr<=0;endelse if (d==3)beginlock<=0;clr<=0;en<=0;endelse if (d==6)beginlock<=0;clr<=1;en<=0;endelse if (d==7)beginlock<=0;clr<=0;en<=0;endelse if(d==8)beginlock<=0;clr<=0;en<=1;endelse if(d==16)begind<=0;en<=0;lock<=0;clr<=0;endendendmodule74374锁存器文本输入: module octal(clk,en,d_in,q_in );input clk,en;input [3:0] d_in;output [3:0] q_in;reg [3:0] Q;assign q_in=Q;always @(posedge clk)if(!en)beginQ<=d_in;endendmodule(2)8位十进制频率计ft_top.bdf图形输入:四.实验步骤1、新建一个名称为CTR10的工程,并在该文件夹中新建一个CTR10.bdf的文件,在工程文件夹中新建一个counter8.bdf的文件。
8位十六进制频率计设计
实验二 8位十六进制频率计设计一、实验目的1〕熟悉原理图输入法中74系列等宏功能元件的使用方法;2〕掌握更复杂的原理层次化设计和数字系统设计方法;3〕完成8位16进制频率计的设计。
二、实验内容首先完成2位频率计的设计,然后进行硬件测试,建议选择电路模式2〔附录图F-3〕;数码2和1显示输出频率值,带测频率F_IN接clock0;测频控制是中年CLK接clock2,假设选择clock2=8Hz,门控信号CNT_EN的脉宽恰好为1s。
然后建立一个新的原理图设计层次,在此根底上将其扩展为8位频率计,仿真测试改频率计待测信号的最高频率,并与硬件实测的结果进行比拟。
三、实验仪器1〕计算机及操作系统;2〕QuartusII软件。
3〕编程电缆。
四、实验原理利用教材介绍的2位计数器模块,连接它们的计数进位,用四个计数模块就能完成一个8位有时钟使能的计数器;对于测频控制器的控制信号,在仿真过程中应该注意它们可能的毛刺现象。
最后按照设计流程和方法即可完成全部设计。
根据频率的定义和频率测量的根本原理,测定信号的频率必须有一个脉冲宽度为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号并为下一测频计数周期做准备的计数器清0信号。
这3个信号可以由一个测频控制信号发生器产生,即TESTCTL。
TESTCTL的计数是能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA是能端进行同步控制。
当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进个锁存器REG4B 中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是数据显示稳定,不会由于周期性的清0信号而不断闪烁。
锁存信号后,必须有一清0信号RST_CNT对计数器进行清零,为下1秒的计数操作作准备。
数字频率计的关键组成局部包括一个测频控制信号发生器、一个计数器和一个锁存器,另外包含外电路的信号整形电路、脉冲发生器、译码驱动电路和显示电路,其原理框图如图1所示。
8位频率计
顶层原理图:时序波形:硬件验证成功!河南工业大学实验报告学院:信息学院科目:EDA技术基础班级:电科100X班学号:姓名:成绩:实验题目:数字频率计的设计实验目的:(1)学会设计一个能测范围为0Hz---99999999Hz的频率计;(2)要求用开发试验系统内部译码功能;(3)进一步掌握VHDL设计方法。
实验原理:简单的频率计测量方法就是在1s内对待测信号进行计数,首先要产生0.5Hz脉冲,再次就是要设计频率测试模块,采用自动清零;然后对频率测试模块进行锁存,最后利用实验系统NO.5内部的自动译码功能输出。
实验内容及步骤:(1)设计分频模块,既是对1KHz的时钟分频产生0.5Hz闸门信号;(2)设计频率测试模块,对1秒内的未知频率进行计数输出;(3)设计八位锁存器,对输入的八位信号进行锁存输出;(4)然后链接顶层电路,进行编译,仿真,以保证控制器功能的正确性。
(5)引脚锁定及硬件测试。
操作方法:选择使用结构图NO.5;CLK接到CLOCK5上,设定为1000Hz,Fx接到CLOCK0上,其他按照结构图NO.5进行锁实验主要程序:1)分频器:library ieee;use ieee.std_logic_1164.all;entity fen isport(clk:in std_logic;q:out std_logic);end fen;architecture fen_arc of fen isbeginprocess(clk)variable cnt:integer range 0 to 999;variable x:std_logic;beginif clk'event and clk='1'thenif cnt<999 thencnt:=cnt+1;elsecnt:=0;x:=not x;end if;end if;q<=x;end process;end fen_arc;2)频率测试模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ftest isport(fx,door:in std_logic;alm:out std_logic;q7,q6,q5,q4,q3,q2,q1,q0:out std_logic_vector(3 downto 0));end ftest;architecture corn_arc of ftest isbegin process(door,fx)variable c0,c1,c2,c3,c4,c5,c6,c7:std_logic_vector(3downto 0);beginif fx'event and fx='1'thenif door='1'thenif c0<"1001"thenc0:=c0+1;elsec0:="0000";if c1<"1001"thenc1:=c1+1;elsec1:="0000";if c2<"1001"thenc2:=c2+1;elsec2:="0000";if c3<"1001"thenc3:=c3+1;elsec3:="0000";if c4<"1001"thenc4:=c4+1;elsec4:="0000";if c5<"1001"thenc5:=c5+1;elsec5:="0000";if c6<"1001"thenc6:=c6+1;elsec6:="0000";if c7<"1001"thenc7:=c7+1;elsec7:="0000";alm<='1';end if;end if;end if;end if;end if;end if;end if;end if;elseif (c0="0000" and c1="0000" ) and (door='0' ordoor='1') thenalm<='0';c7:="0000";c6:="0000";c5:="0000";c4:="0000";c3:="0000";c2:="0000";c1:="0000";c0:="0000";end if;q7<=c7;q6<=c6;q5<=c5;q4<=c4;q3<=c3;q2<=c2;q1<=c1;q0<=c0;end if;end if;end process;end corn_arc;3)八位锁存器:library ieee;use ieee.std_logic_1164.all;entity lock isport(a7,a6,a5,a4,a3,a2,a1,a0:in std_logic_vector(3downto 0);clock:in std_logic;q7,q6,q5,q4,q3,q2,q1,q0:out std_logic_vector(3downto 0));end lock;architecture lock_arc of lock isbeginprocess(clock)variable c7,c6,c5,c4,c3,c2,c1,c0:std_logic_vector(3downto 0);beginif clock'event and clock='0'thenc7:=a7;c6:=a6;c5:=a5;c4:=a4;c3:=a3;c2:=a2;c1:=a1;c0:=a0;end if;q7<=c7;q6<=c6;q5<=c5;q4<=c4;q3<=c3;q2<=c2;q1<=c1;q0<=c0;end process;end lock_arc;实验结果:。
EDA实验八位十进制数字频率计的设计1
实验四 数字频率计的设计作 者:杨环宇学 号:11401701312所属学校:湖南工业大学完成时间:2013年10月28日1、实验目的1.掌握VHDL语言的基本结构。
2.掌握VHDL层次化的设计方法。
3.掌握VHDL基本逻辑电路的综合设计应用。
二、实验内容设计并调试好一个8位十进制数字频率计。
要求编写上述8位十进制数字频率计逻辑图中的各个模块的VHDL语言程序,并完成8位十进制数字频率计的顶层设计,然后利用开发工具软件对其进行编译和仿真,最后通过实验开发系统对其进行硬件验证。
三、实验条件1.计算机一台;2.Max+PlusII和Quartus II开发工具软件;3.EDA实验开发箱一台;4.编程器件:EP1K30TC144-3。
四、实验步骤1.根据测频控制信号发生器的基本原理编写TESTCTL模块的VHDL 程序,并对其进行编译和仿真,初步验证设计的正确性。
2.编写十进制计数器CNT10模块的VHDL程序,并对其进行编译和仿真,初步验证设计的正确性。
3.编写寄存器REG32B模块的VHDL程序,并对其进行编译和仿真,初步验证设计的正确性。
4.完成8位十进制数字频率计的顶层设计,并对其进行编译和仿真,初步验证设计的正确性。
5.利用开发工具软件,选择所用可编程逻辑器件,并对8位十进制数字频率计进行管脚配置。
6.通过下载电缆将编译后的*.pof文件下载到目标器件之中,并利用实验开发装置对其进行硬件验证。
五、实验原理图1是8位十进制数字频率计的电路逻辑图,它由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B组成。
以下分别叙述频率计各逻辑模块的功能与设计方法。
图1 8位十进制数字频率计逻辑图(2)十进制寄存器的源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CNT10 ISPORT (CLK:IN STD_LOGIC;CLR:IN STD_LOGIC;ENA:IN STD_LOGIC;CQ:OUT INTEGER RANGE 0 TO 15;CARRY_OUT:OUT STD_LOGIC);END ENTITY CNT10;ARCHITECTURE ART OF CNT10 ISSIGNAL CQI :INTEGER RANGE 0 TO 15;BEGINPROCESS(CLK,CLR,ENA)ISBEGINIF CLR= '1' THEN CQI<= 0;ELSIF CLK'EVENT AND CLK= '1' THENIF ENA='1' THENIF CQI<9 THEN CQI<=CQI+1;ELSE CQI<=0; END IF;END IF;END IF;END PROCESS;PROCESS (CQI) ISBEGINIF CQI=9 THEN CARRY_OUT<= '1';ELSE CARRY_OUT<= '0';END IF;END PROCESS;CQ<=CQI;END ARCHITECTURE ART;32位锁存器的源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B ISPORT(CLK: IN STD_LOGIC;D: IN STD_LOGIC_VECTOR(31 DOWNTO 0);Q: OUT STD_LOGIC_VECTOR(31 DOWNTO 0 ));END ENTITY REG32B;ARCHITECTURE ART OF REG32B ISBEGINPROCESS(CLK,D) ISBEGINIF (CLK'EVENT AND CLK='1') THENQ<=D;END IF;END PROCESS;END ARCHITECTURE测频控制信号发生器源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTL ISPORT(CLK:IN STD_LOGIC; --1 Hz测频控制时钟 TSTEN:OUT STD_LOGIC; --计数器时钟使能CLR_CNT:OUT STD_LOGIC; --计数器清零LOAD:OUT STD_LOGIC); --输出锁存信号END ENTITY TESTCTL; ARCHITECTURE ART OF TESTCTL ISSIGNAL DIV2CLK :STD_LOGIC;BEGINPROCESS ( CLK ) ISBEGINIF CLK'EVENT AND CLK= '1' THEN --1HZ 时钟二分频DIV2CLK<=NOT DIV2CLK;END IF;END PROCESS;PROCESS ( CLK,DIV2CLK ) ISBEGINIF CLK= '0' AND DIV2CLK = '0' THEN --产生计数器清零信号CLR_CNT<= '1';ELSE CLR_CNT<= '0'END IF;END PROCESS;LOAD<=NOT DIV2CLK; TSTEN<=DIV2CLK;END ARCHITECTURE ART;数字频率计的源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY FREQ ISPORT(FSIN:IN STD_LOGIC;CLK:IN STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0));END ENTITY FREQ;ARCHITECTURE ART OF FREQ8 ISCOMPONENT CNT10 IS --待调用的有时钟使能的十进制计数器端口定义PORT(CLK,CLR,ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CARRY_OUT:OUT STD_LOGIC);END COMPONENT CNT10;COMPONENT REG32B IS --待调用的32位锁存器端口定义PORT(LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0));END COMPONENT REG32B;COMPONENT TESTCTL IS --待调用的测频控制信号发生器端口定义PORT(CLK:IN STD_LOGIC;TSTEN:OUT STD_LOGIC;CLR_CNT:OUT STD_LOGIC;LOAD:OUT STD_LOGIC);END COMPONENT TESTCTL;SIGNAL SE,SC,SL:STD_LOGIC;SIGNAL S1,S2,S3,S4,S5,S6,S7,S8:STD_LOGIC;SIGNAL SD:STD_LOGIC_VECTOR(31 DOWNTO 0);BEGINU0:TESTCTL PORT MAP(CLK=>CLK,TSTEN=>SE, CLR_CNT=>SC,LOAD=>SL); U1:CNT10 PORT MAP(CLK=>FSIN,CLR=>SC,ENA=>SE,CQ=>SD (3 DOWNTO 0),CARRY_OUT=>S1); --名字关联U2:CNT10 PORT MAP(CLK=>S1,CLR=>SC,ENA=>SE,CQ=>SD (7 DOWNTO 4),CARRY_OUT=>S2);U3:CNT10 PORT MAP(S2,SC,SE,SD (11 DOWNTO 8 ),S3); --位置关联U4:CNT10 PORT MAP(S3,SC,SE,SD (15 DOWNTO 12),S4);U5:CNT10 PORT MAP(S4,SC,SE,SD (19 DOWNTO 16),S5);U6:CNT10 PORT MAP(S5,SC,SE,SD (23 DOWNTO 20),S6);U7:CNT10 PORT MAP(S6,SC,SE,SD (27 DOWNTO 24),S7);U8:CNT10 PORT MAP(S7,SC,SE,SD (31 DOWNTO 28),S8);U9:REG32B PORT MAP(LOAD=>SL,DIN=>SD(31 DOWNTO 0),DOUT=>DOUT); END ARCHITECTURE ART;6、 仿真波形设置T10仿真结果如下2. 32位锁存器仿真结果如下3.测频控制信号发生器仿真结果如下4.数字频率计仿真结果如下七、设计结论与总结:通过这次对EDA课程设计的进一步操作,能更好的在 Quartus II 上进行VHDL程序的编译及各个模块的仿真, 虽然在实际操作过程中由于粗心造成了程序的缺失和错误,但都在老师和同学的帮助下一一解决了。
八位十进制数字频率计设计报告
主控单元设计
MCU选型 1
选择功能强大、低功耗的ARM Cortex-M处理器
时钟电路 2
采用高精度晶振提供稳定的系统时钟
外围接口 3
包括GPIO、ADC、定时器、串口等外设接口
电源管理 4
整合电源调节电路以提供稳定电源 主控单元是该频率计的核心,负责采集、处理和显示数据。我们采用性能强劲、功耗低的ARM Cortex-M系列MCU作为主控芯片,并设计高精度时钟电路, 同时集成丰富的外设接口和电源管理电路,以确保系统的稳定运行。
对设计、制造、使用环境等各个环节进行全面的可靠性分析 和评估。
识别可能出现的失效模式,并采取相应的防范措施。
3 加速寿命测试
通过加速寿命试验,预测产品的实际使用寿命。
4 环境适应性
评估产品在不同环境条件下的性能和可靠性表现。
成本分析
主要原材料成本 制造成本 研发成本 营销及管理成本
占总成本64% 占总成本25% 占总成本5% 占总成本6%
关键元器件选型
集成电路
根据系统功能需求,选择合适的微控 制器、放大器、逻辑门电路等集成电 路器件。
无源元件
选用合适的电阻、电容、电感等无源 元件,满足电路的电压、电流和频率 需求。
显示模块
根据显示内容和环境选择合适的LCD 、LED或OLED显示器件。
电源模块
选用适合的变压器、稳压器、开关电 源等电源系统元件。
系统可以在相对湿度10%至95%的环 境中稳定运行,确保设备在潮湿环境中 也能可靠使用。
海拔适应
设计可在海拔0-5000米的高度环境中 正常工作,适应不同地理环境的使用需 求。
振动测试
系统通过严格的振动测试,能够承受5500Hz范围内的随机振动,抗击震能力 强。
8位数码管动态显示的频率计
8位数码管动态显示的频率计第一篇:8位数码管动态显示的频率计一、课程设计要求设计一个8位数码管显示的频率计(频率分辨率为0.1Hz)。
二、总体结构框图系统时钟分频及控制待测频率计数数据锁存动态扫描数码管段选数码管位选数码管显示图1 总体结构框图三、课程设计原理在电子技术中,频率是最基本的参数之一,并且与许多点参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得尤为重要。
测量频率的方法有很多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
数字式频率计的测量原理有两类:一是直接测频法,即在一定的闸门时间内测量被测信号的脉冲个数;二是间接测频法即周期法,如周期测频法。
直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数阀门的时间长短以达到不同的测量精度;间接测频法适用于低频信号的频率测量。
本次课程设计中使用的是直接测频法,即用计数器在计算机10s 内输入信号周期的个数,其测频范围为0Hz-9999999.9Hz。
四、器件的选择1、装有QuartusII软件的计算机一台。
2、芯片:使用altera公司生产的Cyclone系列芯片,本实验箱中为EP1C8Q208C8N芯片。
3、EDA实验箱一个。
4、下载接口是数字芯片的下载接口(JTAG)主要用于FPGA芯片的数据下载。
5、时钟源。
五、功能模块和信号仿真图以及源程序(1)系统时钟分频及控制的功能模块图及其源程序图2 功能模块图作用:将试验箱上的20MHz的晶振分频,输出CLOCK为数码管提供1kHz的动态扫描频率。
TSTEN输出为0.05s的信号,对频率计中的32位十进制计数器CNT10的ENA使能端进行同步控制,当TSTEN高电平时允许计数,低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前一秒的计数值锁存进锁存器REG32B中,并由外部的十进制7段数码管显示计数值。
基于DE2的8位数码显示频率计verilog设计
实验三 8位数码显示频率计设计一、实验目的:设计8位频率计,学习较复杂的数字系统的设计方法。
二、实验原理及内容:1、根据频率的定义和频率测量的基本原理。
2、测定信号的频率必须有一个脉宽为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期作好准备。
三、实验步骤:1.设计生成1秒时钟信号-- CLK2.设计测频控制信号发生器-- FTCTRL;3.设计1秒计数值锁存器-- REG32B;4.设计32位二进制计数器-- COUNTER32B5.设计十六进制7段译码器-- Decoder6.设计生成1KHz或10KHz待测信号-- Fin7.完成频率计设计、仿真和硬件实现。
四、实验程序:module pinlvji(clk,shu_0,shu_1,shu_2,shu_3,shu_4,shu_5,shu_6,shu_7); input clk;output [6:0]shu_0;output [6:0]shu_1;output [6:0]shu_2;output [6:0]shu_3;output [6:0]shu_4;output [6:0]shu_5;output [6:0]shu_6;output [6:0]shu_7;reg clkk;// 1'sreg [30:0]count;reg [30:0]count_1=0;//FTCTRLreg [31:0]count_2=0;//COUNTER32Breg [31:0]count_3=0;//REG32Breg load=1,rst_cnt=1,cnt_en=0;//FTCTRL shu chu reg [30:0]count_4=0;//ce shi ji shu qireg fin=0;always@(posedge clk)//ce shi xin haoif(count_4==30'd250000)beginfin=~fin;count_4<=0;endelsecount_4=count_4+1;always@(posedge clk)//sheng cheng 1s de shi zhong beginif(count==30'd2*******)beginclkk<=~clkk;count<=0;endelsecount<=count+1;endalways@(posedge clkk) //she ji FTCTRLbegincnt_en<=~cnt_en;load<=~load;endalways@(clkk,cnt_en,load)if(cnt_en==0&&load==1&&clkk==0)beginrst_cnt<=1;endelserst_cnt<=0;always@(posedge rst_cnt,posedge fin)//she ji COUNTER32B beginif(rst_cnt)begincount_2<=0;endelseif(cnt_en)count_2<=count_2+1;endalways@(posedge load)//she ji REG32Bbegincount_3<=count_2;endshuma a1(count_3[3:0],shu_0); shuma a2(count_3[7:4],shu_1); shuma a3(count_3[11:8],shu_2); shuma a4(count_3[15:12],shu_3); shuma a5(count_3[19:16],shu_4); shuma a6(count_3[23:20],shu_5); shuma a7(count_3[27:24],shu_6); shuma a8(count_3[31:28],shu_7);endmodulemodule shuma(a,b);input [3:0]a;output [6:0]b;reg [6:0]b;always@(a)case(a)4'b0000:b<=7'b0000001;4'b0001:b<=7'b1001111;4'b0010:b<=7'b0010010;4'b0011:b<=7'b0000110;4'b0100:b<=7'b1001100;4'b0101:b<=7'b0100100;4'b0110:b<=7'b1100000; 4'b0111:b<=7'b0001111; 4'b1000:b<=7'b0000000; 4'b1001:b<=7'b0001100; 4'b1010:b<=7'b0001000; 4'b1011:b<=7'b0000000; 4'b1100:b<=7'b0110001; 4'b1101:b<=7'b0000001; 4'b1110:b<=7'b0110000; 4'b1111:b<=7'b0111000; default : b=7'b0000001; endcaseendmodule。
八位数字频率计实验报告
八位十进制数字频率计一、设计任务(1)熟悉Quatus 11软件的基本使用方法。
(2)熟悉EDA实验开发系统的使用方法。
(3)学习时序电路的设计、仿真和硬件设计,进一步熟悉VHDL设计技术。
(4)分析了8位十进制数字频率计的基本原理。
(5)对数字频率计的各个模块功能的分析,进行了功能仿真测试,得出仿真波形图。
二、方案选择与设计数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。
闸门时间也可以大于或小于一秒。
闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。
闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。
数字频率计的主要功能是测量周期信号的频率。
频率是单位时间(1S)内信号发生周期变化的次数。
如果我们能在给定的1S时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。
数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。
这就是数字频率计的基本原理。
设计:1)脉冲信号的频率就是在单位时间内所产生的脉冲个数,其表达式为,f为被测信号的频率,N为计数器所累积的脉冲个数,T为产生N个脉冲所需的时间。
所以,在1秒时间内计数器所记录的结果,就是被测信号的频率。
2)被测频率信号取自实验箱晶体振荡器输出信号,加到主控室的输入端。
3)再取晶体振荡器的另一标准频率信号,经分频后产生各种时基脉冲:1ms,10ms,0.1s,1s等,时基信号的选择可以控制,即量程可以改变。
4)时基信号经控制电路产生闸门信号至主控门,只有在闸门信号采样期间内(时基信号的一个周期),输入信号才通过主控门。
5)f=N/T,改变时基信号的周期T,即可得到不同的测频范围。
6)当主控门关闭时,计数器停止计数,显示器显示记录结果,此时控制电路输出一个置零信号,将计数器和所有触发器复位,为新一次采样做好准备。
FPGA实验——8位数码显示频率计设计
哈尔滨理工大学软件学院实验报告课程FPGA题目8位数码显示频率计设计(4学时)班级集成12-2班专业集成电路设计与集成系统学生学号12140202272014年10月22日实验三8位数码显示频率计设计实验三8位数码显示频率计设计(4学时)实验目的^设计8位频率计,学习较复杂的数字系统的设计方法。
实验原理及内容二根据频率的定义和频率测量的基本原理。
测定信号的频率必换有一个脉宽为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期作好准备。
实验步骤:i设]十生成1秒时钟信号“CLK2 •设计测频控制信号发生器一3■设#1秒计磁值锁存器--4 •设计32位一进制计数器一彳设计十六进制7段译码器一FTCTRL; REG32B; COUNTER32B Decoder6 ■设计生成lKHz或lOKHz待测信号一Fin 7•気成频率计设计、仿真和妓件实现.频率计电路框图实验目的:LOAD FTCTRLCLKKRST_CWTCNT_ENJ32 1- jiCLR ENABLoourCOUNTER328F,n频率计测频控制器FTCTRL 测控时序图^-CLKK上斤泪fit 仔REG32BK _______ ™4Fin-o LOAD实验原理及内容:根据频率的定义和频率测量的基本原理。
测定信号的频率必须有一个脉宽为1秒的输入信号脉冲计数允许 的信号;1秒计数结束后,计数值被锁入锁存器,计数器清零, 为下 一测频计数周期作好准备。
实验步骤:1•设计生成1秒时钟信号-- 2•设计测频控制信号发生器-- 3•设计1秒计数值锁存器 --4•设计32位二进制计数器-- 5•设计十六进制7段译码器--6•设计生成1KHz 或10KHz 待测信号-- Fin7•完成频率计设计、仿真和硬件实现。
实验程序:CLK FTCTRL; REG32B; COUNTER32B Decodermodule frequenee (input output reg[31:0]freq_out //频率输出);reg [31:0] cnt1,num; //cnt1 ,分频作用,产生脉宽一秒基准时钟 // num,用来计算1s 内待测信号所发出的脉冲数用来计数/**** 产生占空比为50%,周期为2s 的单位脉冲sec ****/always @ (posedge clk) beginif(cnt 仁=50_000_000)// 50000000分频,产生脉宽1s 脉宽基准时钟(要基准时钟为 50M)begin cnt1<=0;inputCLK_X,// 待测信号rst , reg sec;//sec 用来产生周期为2s 脉宽1s 基准时钟reg state;// 和 sec 共同为使能信号sec<=~sec;endelsecnt1<=cnt1+1;end/**** 统计待测信号在单位时间1s 内产生的脉冲数****/always @ (posedge CLK_X )beginif (!rst)beginfreq_out<=0;num<=0;state<=1;endelsebeginif(sec) // sec为高电平期间(1s),统计待测信号产生的脉冲数beginnum<=num+1;state<=0;endelse // sec为低电平期间(1s),读取待测信号产生的脉冲数begincase(state)0: begin freq_out<=num; state<=1; end // 读取脉冲数(由于freq为reg型,在下一次sec低电平到来之前,会一直保持当前值不变)1: num<=0; // 将num 清零,为下一个sec高电平期间脉冲数的统计做准备//endcaseend//如果待测时钟频,比 1 秒脉宽的基准时钟还小,才会出现一只增数字的情况,即num未来的及清零endend endmodulemodule newclk(clk,reset,clk_out);input clk,reset;output clk_out;reg clk_out;reg[100:0] count;parameter N = 5000; //分频产生1K HZ 脉的时钟always @ (posedge clk)if(!reset)begincount <= 1'b0;clk_out <= 1'b0;endelseif ( count < N/2 -1)begincount <= count + 1'b1;endelsebeginend endmodulemodule shili(outputreg[6:0]h1,input [3:0]c,input clk); count <= 1'b0;clk_out <= ~clk_out;always@(c) begincase(c[3:0])4'b0000:h1<='b1000000;4'b0001:h1<='b1111001;4'b0010:h1<='b0100100;4'b0011:h1<='b0110000;4'b0100:h1<='b0011001;4'b0101:h1<='b0010010;4'b0110:h1<='b0000010;4'b0111:h1<='b1111000;4'b1000:h1<='b0000000;4'b1001:h1<='b0010000;4'b1010:h1<='b0001000;4'b1011:h1<='b0000011;4'b1100:h1<='b1000110;4'b1101:h1<='b0100001;4'b1110:h1<='b0000110;4'b1111:h1<='b0001110;default : h1<='b1000000;endcaseend endmodulemodule top_sevev( output [63:0]H, 须为wire 行变量input [31:0]freq, input clk);shili seven_0( H[7:0],freq[3:0],clk); 七段数码管的模块的实例化shiliseven_1( H[15:8],freq[7:4],clk);shiliseven_2( H[23:16],freq[11:8],clk);shiliseven_3( H[31:24],freq[15:12],clk);shiliseven_4( H[39:32],freq[19:16],clk);shiliseven_5( H[47:40],freq[23:20],clk);shili// H 必// 八个seven_6( H[55:48],freq[27:24],clk);shiliseven_7( H[63:56],freq[31:28],clk);en dmodule原理图:实验结果:1000Hz的测量结果100000Hz的测量结果。
频率计实验报告
频率计实验报告信息工程实验任务及要求:1.设计一个可测量的数字式频率计,测量范围为1Hz-12MHz。
2.用层次化的设计方法设计该电路,编写各个功能模块的程序。
3.仿真各功能模块,通过观察有关波形确认电路设计是否正确4.完成电路设计后,通过在实验系统上下载,验证设计的正确性实验原理分析:根据总的设计图可知:8位十进制数字频率计的设计有一个测频控制信号发生器TESTCTL,8个有时钟使能的十进制数字计数器CNT10,一个32位锁存器REG32B组成。
测频控制信号发生器的设计原理和要求:频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。
这就要求TESTCTL的计数使能信号TSTEN能产生1秒脉宽的周期信号,并对频率计的每一个计数器CNT10的ENA使能端进行不同控制。
当TSTEN高电平时允许计数,低电平时停止计数,并保持所计的数。
在停止计数的期间,首先需要一个锁存信号Load的上跳沿将计数器在前一秒的计数值锁存进32位锁存器REG32B中,且由外部的七段译码器译出并稳定显示。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一个清零信号CLR_CNT对计数器进行清零,为下一秒钟的计数操作做准备,测频控制信号发生器的工作时序为周期2秒,占空比为0.5的方波,为了产生的方波,需首先建立一个由D触发器构成的二分频器,在每秒时钟CLK上升沿到来时使其翻转,其中控制信号时钟CLK的频率为1Hz,那么信号TSTEN的脉宽恰好为1秒,可以用作闸门信号,然后根据测频的时序要求,可得出信号Load和CLR_CNT的逻辑描述,在一个计数完成后,即计数使能信号TSTEN在1秒的高电平后,利用其反向值的上升沿产生一个锁存信号Load,0.5秒后,CLR_CNT产生一个清零信号跳沿。
各个模块的源程序如下所示:TESTCTL仿真波形:REG32B仿真波形:分析:设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
Verilog实验报告
一、8位数字显示的简易频率计设计要求:①能够测试10Hz~10MHz方波信号;②电路输入的基准时钟为1Hz,要求测量值以8421BCD码形式输出;③系统有复位键;④采用分层次分模块的方法,用Verilog HDL进行设计。
⑤写出测试仿真程序1.设计原理频率计的原理即测量给定信号每秒钟脉冲个数,则系统时钟宽度应为2s,通过分频模块将基准时钟进行二分频实现;当系统时钟高电平时计数模块开始计数,低电平时清零;之后将结果存入锁存模块使其稳定显示。
2.设计方案该频率计由分频模块,计数模块,锁存模块和顶层模块构成,其中:1)分频模块(FC_div):由于基准时钟(clk_d)频率为1Hz,高电平宽度为0.5s,因此通过一个二分频模块得到一个频率为0.5Hz,高电平宽度为1s的时钟(clk_out),并作为计频器的系统时钟。
2)计数模块(FC_counter):频率计核心模块,在接入的系统时钟(clk_c)处于高电平时对输入信号(freq_in)的上升沿进行计数,从而测得输入信号的频率。
由于要把测量值以8421BCD码输出,且量程上限为10MHz。
因此程序内采用8个4位寄存器分别从低到高地按位存储测量值,最后再按位排列输出一个32位的BCD 码序列(CT)。
3)锁存模块(FC_latch):将计数模块输出的结果存储以稳定显示。
4)顶层模块(FC_top):将各模块连接实现计频器。
3.程序代码1)分频模块module FC_div(clk_d,rst_d,clk_out);input clk_d,rst_d;output clk_out;reg clk_out;always@(posedge clk_d or negedge rst_d)beginif(rst_d==0)clk_out<=0;elseclk_out<=~clk_out;endendmodule2)计数模块module FC_counter(clk_c,freq_in,CT);input clk_c;input freq_in;output [31:0] CT;reg [31:0] CT;reg [3:0] C0,C1,C2,C3,C4,C5,C6,C7;always@(posedge freq_in)beginif(!clk_c)beginC0<=0;C1<=0;C2<=0;C3<=0;C4<=0;C5<=0;C6<=0;C7<=0;endelsebeginif(C0!=4'b1001)C0<=C0+1;elsebeginC0<=0;if(C1!=4'b1001)C1<=C1+1;elsebeginC1<=0;if(C2!=4'b1001)C2<=C2+1;elsebeginC2<=0;if(C3!=4'b1001)C3<=C3+1;elsebeginC3<=0;if(C4!=4'b1001)C4<=C4+1;elsebeginC4<=0;if(C5!=4'b1001)C5<=C5+1;elsebeginC5<=0;if(C6!=4'b1001)C6<=C6+1;elsebeginC6<=0;if(C7!=4'b1001)C7<=C7+1;elseC7<=0;endendendendendendendendassign CT={C7,C6,C5,C4,C3,C2,C1,C0};endendmodule3)锁存模块module FC_latch(freq,Cl,Rl);input freq;input [31:0] Cl;output [31:0] Rl;reg [31:0] Rl;always@(negedge freq)Rl<=Cl;Endmodule4)顶层模块module FC_top(clk,rst,Freq_in,Nt);input clk,rst;input Freq_in;output [31:0] Nt;wire c0;wire [31:0] w0;FC_div d(.clk_d(clk),.rst_d(rst),.clk_out(c0));FC_counter c(.clk_c(c0),.freq_in(Freq_in),.CT(w0));FC_latch l(.freq(Freq_in),.Cl(w0),.Rl(Nt));Endmodule5)测试程序`timescale 100ns/1ns;module FC_top_test;reg clk,rst;reg Freq_in;wire [31:0] Nt;initialbeginclk=0;rst=0;Freq_in=0;#4999 rst=1;#500000$stop();endalways #50000 clk=~clk;always #5 Freq_in=~Freq_in;FC_top t(.clk(clk),.rst(rst),.Freq_in(Freq_in),.Nt(Nt));Endmodule4.仿真测试如测试程序所示,取时间单位为100ns,精度为1ns,为方便起见,定义此基准时钟为1Hz,则待测信号频率为10kHz。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
八位十进制数字频率计
一、设计任务
(1)熟悉Quatus 11软件的基本使用方法。
(2)熟悉EDA实验开发系统的使用方法。
(3)学习时序电路的设计、仿真和硬件设计,进一步熟悉VHDL设计技术。
(4)分析了8位十进制数字频率计的基本原理。
(5)对数字频率计的各个模块功能的分析,进行了功能仿真测试,得出仿真波形图。
二、方案选择与设计
数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。
闸门时间也可以大于或小于一秒。
闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。
闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。
数字频率计的主要功能是测量周期信号的频率。
频率是单位时间(1S)内信号发生周期变化的次数。
如果我们能在给定的1S时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。
数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。
这就是数字频率计的基本原理。
设计:
1)脉冲信号的频率就是在单位时间内所产生的脉冲个数,其表达式为,f为被测信号的频率,N为计数器所累积的脉冲个数,T为产生N个脉冲所需的时间。
所以,在1秒时间内计数器所记录的结果,就是被测信号的频率。
2)被测频率信号取自实验箱晶体振荡器输出信号,加到主控室的输入端。
3)再取晶体振荡器的另一标准频率信号,经分频后产生各种时基脉冲:1ms,
10ms,0.1s,1s等,时基信号的选择可以控制,即量程可以改变。
4)时基信号经控制电路产生闸门信号至主控门,只有在闸门信号采样期间内(时基信号的一个周期),输入信号才通过主控门。
5)f=N/T,改变时基信号的周期T,即可得到不同的测频范围。
6)当主控门关闭时,计数器停止计数,显示器显示记录结果,此时控制电路输出一个置零信号,将计数器和所有触发器复位,为新一次采样做好准备。
系统总体框架图
8位十进制数字频率计的电路逻辑图
8位十进制数字频率计的电路逻辑图,它由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B [8]组成。
以下分别叙述频率
计各逻辑模块的功能与设计方法。
8位十进制数字频率计的电路逻辑如图4.18所示。
图4.1 8位十进制数字频率计的电路逻辑图
三软件设计与仿真
各功能模块的源程序及每个程序运行后的仿真波形:
测频控制信号发生器的功能模块及仿真
(1)测频控制信号发生器的功能模块如下图所示。
测频控制信号发生器的功能模块图
测频控制电路图(2)源程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TESTCTL IS
PORT(CLK:IN STD_LOGIC;
TSTEN:OUT STD_LOGIC;
CLR_CNT:OUT STD_LOGIC;
LOAD:OUT STD_LOGIC);
END TESTCTL;
ARCHITECTURE ART OF TESTCTL IS
SIGNAL Div2CLK:STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN IF CLK'EVENT AND CLK='1'THEN
Div2CLK<=NOT Div2CLK;
END IF;
END PROCESS;
PROCESS(CLK,Div2CLK)
BEGIN
IF CLK='0'AND Div2CLK='0'THEN
CLR_CNT<='0';
ELSE CLR_CNT<='1';
END IF;
END PROCESS;
LOAD<=NOT Div2CLK;
TSTEN<=Div2CLK;
END ART;
频率计的关键是设计一个测频率控制信号发生器,产生测量频率的控制时序。
控制时钟
信号CLK取为1Hz,2分频后即可产生一个脉宽为1秒的时钟TSTEN,以此作为计数闸门信号。
当TSTEN为高电平时,允许计数;当TSTEN由高电平变为低电平(下降沿到来)时,应产生一个锁存信号,将计数值保存起来;锁存数据后,还要在下次TSTEN上升沿到哦来之前产生零信号CLEAR,将计数器清零,为下次计数作准备,如下图所示为测频控制信号仿真图。
32位锁存器的功能模块及仿真
(1)32位锁存器的功能模块下图所示。
锁存器的功能模块图
锁存器电路图(2)源程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG32B IS
PORT (LOAD:IN STD_LOGIC;
DIN1:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN2:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN3:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN4:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN5:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN6:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN7:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DIN8:IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT3:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT5:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT6:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT7:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT8:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END REG32B;
ARCHITECTURE ART OF REG32B IS
BEGIN
PROCESS(LOAD,DIN1,DIN2,DIN3,DIN4,DIN5,DIN6,DIN7,DIN8) BEGIN
IF(LOAD'EVENT AND LOAD='1')THEN
DOUT1<=DIN1;
DOUT2<=DIN2;
DOUT3<=DIN3;
DOUT4<=DIN4;
DOUT5<=DIN5;
DOUT6<=DIN6;
DOUT7<=DIN7;
DOUT8<=DIN8;
END IF;
END PROCESS;
END ART;
十进制计数器的功能模块及仿真
(1)十进制计数器的功能模块如下图所示:
十进制计数器的功能模块
计数器电路图
(2)源程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity CNT10 IS
PORT(CLK,CLR,ENA:IN STD_LOGIC;
CQ:OUT STD_LOGIC_VECTOR(3 downto 0 ); CARRY_OUT:OUT STD_LOGIC);
END CNT10;
ARCHITECTURE behav OF CNT10 IS
BEGIN
PROCESS(CLK,CLR,ENA)
VARIABLE Q:STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF CLR='0' THEN Q:=(OTHERS=>'0'); ELSIF CLK'EVENT AND CLK='1'THEN IF ENA='1' THEN
IF Q<9 THEN Q:=Q+1;
ELSE Q:=(OTHERS=>'0');
END IF;
END IF;
END IF;
IF Q="1001"THEN CARRY_OUT<='1'; ELSE CARRY_OUT<='0';END IF;
CQ<=Q;
END PROCESS;
END behav;
仿真波形为:
四、硬件测试
计数器电路图如下图所示。