八位十进制数字频率计

合集下载

8位十进制频率计 FPGA

8位十进制频率计 FPGA

8位十进制频率计1 实验目的设计8位十进制频率计,学习较复杂的数字系统设计方法;学习verilog HDL编程的使用。

2 实验内容被测信号从freg_input引脚(FPGA的13脚)输入,经过检查后测得的频率值用数码管1~8显示。

3 实验原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1S的输入信号脉冲计数允许的信号;1S计数结束后,计数值锁入锁存器,并将下一测频计数周期作准备的计数器清零。

计数器在这里是由8个十进制计数器级联组成。

4 实验程序顶层文件:module freqtest(clk,freq_input,dig,seg,test);input clk,freq_input;output[7:0]dig,seg;output[9:0]test;reg[25:0]counter;reg[31:0]freq_result;wire[31:0]pre_freq;reg rst;wire divide_c lk; //1HZ闸门信号wire clk_scan;wire cout1,cout2,cout3,cout4,cout5,cout6,cout7;assign clk_scan=counter[15];assign test=counter[9:0];always @(posedge clk)beginif(divide_clk)counter<=26'd0;elsecounter<=counter+1'b1;endassign divide_clk=(counter>=26'd4*******);always @(posedge clk)beginif(divide_clk)freq_result<=pre_freq;endalways @(posedge clk)beginif(divide_clk)rst<=1'b1;elserst<=1'b0;endcnt101 u1(freq_input,rst,1'b1,cout1,pre_freq[3:0]);cnt102 u2(freq_input,rst,cout1,cout2,pre_freq[7:4]);cnt102 u3(freq_input,rst,cout2,cout3,pre_freq[11:8]);cnt102 u4(freq_input,rst,cout3,cout4,pre_freq[15:12]);cnt102 u5(freq_input,rst,cout4,cout5,pre_freq[19:16]);cnt102 u6(freq_input,rst,cout5,cout6,pre_freq[23:20]);cnt102 u7(freq_input,rst,cout6,cout7,pre_freq[27:24]);cnt102 u8(.clk(freq_input),.rst(rst),.cin(cout7),.cout(),.dout(pre_freq[31:28]));scan_led u9(clk_scan,freq_result,dig,seg);endmodule10进制计数模块:module cnt101(clk,rst,cin,cout,dout);input clk,cin,rst;output cout;output [3:0]dout;reg[3:0]sum;reg cout;always @(posedge clk or negedge rst)if(!rst)begincout=1'b0;sum=4'd0;endelseif(sum==4'd9)begincout=~cout;sum=4'd0;endelsesum=sum+1'b1;assign dout=sum;endmodulemodule cnt102(clk,rst,cin,cout,dout);input clk,cin,rst;output cout;output [3:0]dout;reg[3:0]sum;reg cout;always @(cin)beginif(!rst)beginsum=4'd0;endelseif(sum==4'd9)begincout=~cout;sum=4'd0;endelsesum=sum+1'b1;endassign dout=sum;endmodule数码管扫描显示模块:module scan_led(clk_1k,d,dig,seg); input clk_1k;input[31:0]d;output[7:0]dig,seg;reg[7:0]seg_r,dig_r;reg[3:0]disp_dat;reg[2:0]count;assign dig=dig_r;assign seg=seg_r;always @(posedge clk_1k)begincount<=count+1'b1;endalways @(posedge clk_1k)begincase(count)3'd0:disp_dat=d[31:28];3'd1:disp_dat=d[27:24];3'd2:disp_dat=d[23:20];3'd3:disp_dat=d[19:16];3'd4:disp_dat=d[15:12];3'd5:disp_dat=d[11:8];3'd6:disp_dat=d[7:4];3'd7:disp_dat=d[3:0];case(count)3'd0:dig_r=8'b01111111;3'd1:dig_r=8'b10111111;3'd2:dig_r=8'b11011111;3'd3:dig_r=8'b11101111;3'd4:dig_r=8'b11110111;3'd5:dig_r=8'b11111011;3'd6:dig_r=8'b11111101;3'd7:dig_r=8'b11111110;endcaseendalways @(disp_dat)begincase(disp_dat)4'h0:seg_r = 8'hc0; //显示0 4'h1:seg_r = 8'hf9; //显示14'h2:seg_r = 8'ha4; //显示24'h3:seg_r = 8'hb0; //显示34'h4:seg_r = 8'h99; //显示44'h5:seg_r = 8'h92; //显示54'h6:seg_r = 8'h82; //显示64'h7:seg_r = 8'hf8; //显示74'h8:seg_r = 8'h80; //显示84'h9:seg_r = 8'h90; //显示94'ha:seg_r = 8'h88; //显示a4'hb:seg_r = 8'h83; //显示b4'hc:seg_r = 8'hc6; //显示c4'hd:seg_r = 8'ha1; //显示d4'he:seg_r = 8'h86; //显示e4'hf:seg_r = 8'h8e; //显示fendcaseendendmodule。

基于FPGA的8位十进制数字频率计设计

基于FPGA的8位十进制数字频率计设计

宝鸡文理学院学报(自然科学版),第33卷,第1期,第-页,2013年3月J o u r n a l o f B a o j iU n i v e r s i t y o fA r t s a n dS c i e n c e s (N a t u r a l S c i e n c e ),V o l .33,N o .1,p p .-,M a r .2013D O I :C N K I :61-1290/N.h t t p ://w w w.c n k i .n e t /k c m s /d e t a i l /61.1290.N.基于F P G A 的8位十进制数字频率计设计*1韩芝侠(宝鸡文理学院电子电气工程系,陕西宝鸡721016)摘 要:目的 研究复杂数字电路在E D A 开发系统上的实现方法。

方法 在介绍E D A 特征及设计方法基础上,针对具体的C P L D /F P G A 开发系统,在Q u a r t u s 环境下设计了一款8位十进制数字频率计。

结果 下载/配置到实验板的目标器件上,经实际电路测试验证,达到了预期的设计要求。

结论与传统设计方法相比,该方案具有外围电路简单,程序修改灵活和调试容易等特点;设计的数字频率计测量范围大,精度高,读数直观清晰,可用于频率测量、机械转速测量等领域。

关键词:E D A ;C P L D /F P G A ;Q u a r t u s;数字频率计;复杂数字系统;仿真中图分类号:T P 391.9 文献标志码:A 文章编号:1007-1261(2013)01-0000-04D e s i g no f 8-b i t d e c i m a l s y s t e md i gi t a l f r e q u e n c y me t e rb a s e do nF P G A HA NZ h i -x i a(D e p t .E l e c t r o n i c s&E l e c t .E n g n .,B a o j iU n i v .A r t s&S c i .,B a o ji 721016,S h a a n x i ,C h i n a )A b s t r a c t :A i m T os t u d i e dt h em e t h o dt or e a l i z ead i g i t a l c i r c u i t i nE D A d e v e l o p m e n t s ys t e m.M e t h o d s B a s e do ni n t r o d u c i n g t h ec h a r a c t e r i s t i c sa n dd e s i g n m e t h o d so fE D A ,t oa i m a ts pe c if i c C P L D /F P G Ad e v e l o p m e n t s y s t e m ,A8-b i t d e c i m a l s y s t e md ig i t a l f r e q u e n c y m e t e r i s d e s i gn e d i nQ u -a r t u s e n v i r o n m e n t .R e s u l t s I t i sd o w n l o a d /c o n f i g u r a t i o nt o t h e t a r g e td e v i c eo f e x pe r i m e n t a l p l a t e ,af t e r a c t u a l c i r c u i t t e s t i ng a n dv e r i f y i n g,t h ee x p e c t e dd e s i g nr e q u i r e m e n t i sa c h i e v e d .C o n c l u s i o n C o m p a r i n g w i t h t r a d i t i o n a l d e s i g nm e t h o d ,t h i s d e s i g nh a s c h a r a c t e r i s t i c s o f s i m p l e p e r i ph e r a l c i r c u i t ,f l e x i b l e p r o g r a m m o d i f i c a t i o nw a y a n d e a s y d e b u g m o d e ;T h i s f r e q u e n c y m e t e r a l s oh a s c h a r a c t e r i s t i c s o fw i d em e a s u r e m e n t r a n g e ,h i g ha c c u r a c y,c l e a r a n d i n t u i t i v e r e a d i n g ,a n d c a nb e u s e d f o r f r e q u e n c y m e a s u r e m e n t ,m e c h a n i c a l s p e e dm e a s u r e m e n t ,e t c .K e y wo r d s :E D A ;C P L D /F P G A ;Q u a r t u s ;d i g i t a l f r e q u e n c y m e t e r ;c o m p l e xd i g i t a l c i r c u i t ;s i m -u l a t i o n1 E D A 技术应用随着计算机技术和集成电路技术的快速发展,电子技术设计面临着复杂度不断提高而设计周期不断缩短的矛盾。

八位16进制、八位10进制频率计设计

八位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课程设计

八位十进制数字频率计基于eda课程设计

目录目录 01、EDA技术发展及介绍 (2)1.1 EDA技术的介绍 (2)1.2 EDA技术的发展 (2)1.3 EDA技术的发展趋势 (2)2、总体方案设计 (3)2.1设计内容 (3)2.2设计方案比较 (3)2.3方案论证 (5)2.4方案选择 (5)3、单元模块设计 (5)3.1分频模块 (5)3.1.1分频模块波形仿真图 (5)3.1.2分频模逻辑综合图 (6)3.1.3分频模块verilog源代码 (6)3.2计数模块 (7)3.2.1计数模块功能仿真波形 (7)3.2.2计数模块逻辑综合图 (8)3.2.3计数模块verilog源代码 (8)3.3锁存模块 (9)3.3.1锁存模块功能仿真波形 (9)3.3.2锁存模块逻辑综合图 (9)3.3.1锁存模块verilog源代码 (10)3.4七段译码模块 (10)3.4.1七段一码模块功能仿真波形 (10)3.4.2七段译码模块逻辑综合图 (11)3.4.3七段一码模块代码源程序 (11)3.5数码管显示模块 (12)3.5.1数码管显示模块功能仿真波形图 (13)3.5.2数码管显示模块综合图 (13)3.5.3数码管显示模块源代码 (14)4、软件实现 (15)4.1软件实现方法 (15)4.1.1 软件实现步骤框图 (15)4.2软件设计 (15)4.2.1 顶层模块程序如下: (15)4.2.2 顶层模块结构图 (17)5、系统仿真及调 (17)5.1顶层模块仿真及调试 (17)6、总结 (18)6.1设计小结 (18)6.2设计收获 (19)6.3设计改进 (19)6.4 致谢 (19)7 、参考文献 (19)1、EDA技术发展及介绍1.1 EDA技术的介绍EDA是Electronic Design Automation的缩写,中文译为电子设计自动化,是现代电子设计技术的有力工具。

迄今为止,EDA技术没有精确的定义,我们可以这样来认识,EDA技术就是以计算机为工作平台,以EDA软件工具为开发环境,以PLD器件或者ASIC专用集成电路为目标器件设计实现电路系统的一种技术。

8位十进制频率计的设计

8位十进制频率计的设计

8位十进制频率计的设计1.设计原理频率计的设计原理基于信号计数和数码显示。

通过对输入信号进行计数,并将计数结果转换为十进制形式进行显示,从而实现对频率的测量。

2.电路构成输入电路负责对输入信号进行放大、滤波和适配等处理,以保证输入信号的准确性和稳定性。

计数电路负责对输入信号进行计数和计数结果的存储。

显示电路负责将计数结果转换为十进制形式,并驱动数码显示器进行显示。

控制电路负责对电路的各个模块进行协调控制和时序控制。

3.工作过程当输入信号到达频率计时,输入电路将信号进行处理,并传递给计数电路。

计数电路对输入信号进行计数,并将计数结果存储在计数寄存器中。

当达到指定的计数时间后,控制电路将计数寄存器中的数值传递给显示电路。

显示电路将计数结果进行解码转换,并驱动数码显示器进行显示。

4.性能优化为了提高8位十进制频率计的性能和精度,可以采取以下几种优化措施。

a)输入电路的设计应具有较高的增益和较好的滤波特性,以保证输入信号的准确性和稳定性。

b)计数电路的设计应具有较高的计数速度和较大的计数范围,以适应不同频率信号的计数需求。

c)显示电路的设计应具有较高的解码精度和较好的驱动能力,以保证数码显示器的准确显示。

d)时序控制应合理设计,以保证各个模块之间的协调和同步,避免时序冲突和干扰。

e)程序算法的优化也是提高频率计性能的关键,可以通过优化计数算法和数据处理方式等方面来提高系统的效率和响应速度。

总之,8位十进制频率计的设计需要考虑输入电路、计数电路、显示电路和控制电路等多个方面的因素,同时还需要合理优化和调整各个模块的设计和工作方式,以提高频率计的性能和精度。

实验五 8位十进制频率计

实验五  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位十进制显示数字频率计(带周期)设计报告

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。

基于VHDL八位频率计设计

基于VHDL八位频率计设计

SIGNAL TSTEN:STD_LOGIC; SIGNAL CLR_CNT:STD_LOGIC; SIGNAL LOAD:STD_LOGIC; SIGNAL CARRY1:STD_LOGIC; SIGNAL CARRY2:STD_LOGIC; SIGNAL CARRY3:STD_LOGIC; SIGNAL CARRY4:STD_LOGIC; SIGNAL CARRY5:STD_LOGIC; SIGNAL CARRY6:STD_LOGIC; SIGNAL CARRY7:STD_LOGIC; SIGNAL CARRY8:STD_LOGIC; SIGNAL DIN:STD_LOGIC_VECTOR(31 DOWNTO 0); SIGNAL DOUT:STD_LOGIC_VECTOR(31 DOWNTO 0);
• • • • • • • • • • • • •
ELSIF CLK'EVENT AND CLK= '1' THEN IF ENA= '1' THEN IF CQI<9 THEN CQI<=CQI+1; ELSE CQI<=0;END IF; --大于9,则计数器清零 END IF; END IF; END PROCESS; PROCESS (CQI) BEGIN IF CQI=9 THEN CARRY_OUT<= '1'; --进位输出 ELSE CARRY_OUT<= '0';END IF; END PROCESS; CQ<=CQI;
• 频率测量的基本原理是计算每秒钟内待测信号的 脉冲个数。这就要求TESTCTL的计数使能信号 TSTEN能产生一个1秒脉宽的周期信号,并对频率 计的每一计数器CNT10的ENA使能端进行同步控 制。当TSTEN高电平时,允许计数;低电平时,停止 计数,并保持其所计的数。在停止计数期间,首先需 要一个锁存信号LOAD的上跳沿将计数器在前1秒 钟的计数值锁存进32位锁存器REG32B中,并由外 部的7段译码器译出并稳定显示。锁存信号之后, 必须有一清零信号CLR_CNT对计数器进行清零, 为下1秒钟的计数操作作准备。为了产生这个时序 图,需首先建立一个由D触发器构成的二分频器,在 每次时钟CLK上沿到来时其值翻转。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EDA课程设计报告书题目:8位十进制数字频率计的设计姓名:学号:所属学院:专业年级:指导教师:完成时间:8位十进制数字频率计的设计一、设计介绍数字频率计是采用数字电路制做成的能实现对周期性变化信号频率测量的仪器。

频率计主要用于测量正弦波、矩形波、三角波和尖脉冲等周期信号的频率值。

其扩展功能可以测量信号的周期和脉冲宽度。

通常说的,数字频率计是指电子计数式频率计。

频率计主要由四个部分构成:输入电路、时基(T)电路、计数显示电路以及控制电路。

在电子技术领域,频率是一个最基本的参数。

数字频率计作为一种最基本的测量仪器以其测量精度高、速度快、操作简便、数字显示等特点被广泛应用。

许多物理量,例如温度、压力、流量、液位、PH值、振动、位移、速度等通过传感器转换成信号频率,可用数字频率计来测量。

尤其是将数字频率计与微处理器相结合,可实现测量仪器的多功能化、程控化和智能化.随着现代科技的发展,基于数字式频率计组成的各种测量仪器、控制设备、实时监测系统已应用到国际民生的各个方面。

二、设计目的(1)熟悉Quatus 11软件的基本使用方法。

(2)熟悉EDA实验开发系统的使用方法。

(3)学习时序电路的设计、仿真和硬件设计,进一步熟悉VHDL设计技术。

三、数字频率计的基本原理数字频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,通常情况下计算每秒待测信号的脉冲个数,此时我们称闸门时间为1秒。

闸门时间也可以大于或小于一秒。

闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。

闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。

数字频率计的主要功能是测量周期信号的频率。

频率是单位时间(1S)信号发生周期变化的次数。

如果我们能在给定的1S时间对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。

数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔的脉冲个数,将其换算后显示出来。

这就是数字频率计的基本原理。

频率计测量频率需要设计整形电路使被测周期性信号整形成脉冲,然后设计计数器对整形后的脉冲在单位时间重复变化的次数进行计数,计数器计出的数字经锁存器锁存后送往译码驱动显示电路用数码管将数字显示出来,需要设计控制电路产生允许产生的门匣信号,计数器的清零信号和锁存器的锁存信号使电路正常工作,再设计一个量程自动转换使测量围更广。

四系统总体框架图 3.1 系统总体框架图总体框图设计思路:由50MHz系统时钟分频得到0.5Hz的基准时钟。

在基准时钟的1S 高电平期间计被测频率的脉冲个数,1S高电平结束时计数结束,所记录的脉冲个数是被测信号的频率,为了在数码管上显示计数结果需要锁存器将所计的数锁存,因此,在基准时钟下降沿来的时候锁存器实现锁存功能。

为了下次计数必须将本次计数的结果清零,所以在基准时钟低电平期间对计数器清零。

被测频率从计数器的是中端输入实现频率的测试。

将锁存器锁存的数据输入扫描器,通过译码器将锁存的二进制数译成十进制然后显示到数码管上,最终被读出来。

五、设计容实验条件:(1)开发条件:Quatus 11软件。

(2)实验设备:GW48-ES EDA实验开发系统,电脑。

(3)拟用芯片: EPF10K20TC144-4芯片。

源程序:--test controler(测频控制器)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY TESTCTL ISPORT (CLKK : IN STD_LOGIC ; --test 1HZ control clkCNT_EN,RST_CNT,LOAD : OUT STD_LOGIC); --clear the enable , count, END TESTCTL;ARCHITECTURE BEHAV 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' THEN RST_CNT <= '1';ELSE RST_CNT <= '0';END IF;END PROCESS;LOAD <= NOT DIV2CLK;CNT_EN <= DIV2CLK;END BEHAV;-- COUNT10 (CNT10.VHD)(十进制计数器)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT(CLK : IN STD_LOGIC;CLR : IN STD_LOGIC;ENB : IN STD_LOGIC;OUTY: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT: OUT STD_LOGIC);END CNT10;ARCHITECTURE BEHAV OF CNT10 ISBEGINPROCESS(CLK,CLR,ENB)VARIABLE CQI : STD_LOGIC_VECTOR (3 DOWNTO 0);BEGINIF CLR = '1' THEN CQI :="0000";ELSIF CLK'EVENT AND CLK = '1' THENIF ENB = '1' THENIF CQI < "1001" THEN CQI := CQI+1;ELSE CQI :="0000";END IF;END IF;END IF;OUTY <= CQI;COUT <= CQI(0) AND (NOT CQI(1)) AND (NOT CQI(2)) AND CQI(3); END PROCESS;END BEHAV;--REGISTER (REG4B.VHD)(4位锁存器)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG4B ISPORT (LOAD : IN STD_LOGIC;DIN : IN STD_lOGIC_VECTOR(3 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR (3 DOWNTO 0));END REG4B;ARCHITECTURE BEHAV OF REG4B ISBEGINPROCESS (LOAD ,DIN)BEGINIF LOAD'EVENT AND LOAD = '1' THEN DOUT <= DIN ; --SUO CUN END IF;END PROCESS;END BEHAV;———8位十进制频率计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity choose isport( clk:in std_logic;a,b,c,d,e,f,g,h:in STD_LOGIC_VECTOR(3 DOWNTO 0); x,y:out STD_LOGIC_VECTOR(7 DOWNTO 0));end;ARCHITECTURE ONE OF choose ISsignal ain:STD_LOGIC_VECTOR(2 DOWNTO 0);signal bin:STD_LOGIC_VECTOR(3 DOWNTO 0);beginprocess(clk)beginif(clk'event and clk='1') thenif(ain="111") then ain<="000";else ain<=ain+'1';end if;end if;end process;process(ain)begincase ain iswhen"000"=>bin<=a;y<="11111110";when"001"=>bin<=b;y<="11111101";when"010"=>bin<=c;y<="11111011";when"011"=>bin<=d;y<="11110111";when"100"=>bin<=e;y<="11101111";when"101"=>bin<=f;y<="11011111";when"110"=>bin<=g;y<="10111111";when"111"=>bin<=h;y<="01111111";when others=>null;end case;end process;process(bin)begincase bin iswhen"0000"=>x<="11111100";when"0001"=>x<="01100000";when"0010"=>x<="11011010";when"0011"=>x<="11110010";when"0100"=>x<="01100110";when"0101"=>x<="10110110";when"0110"=>x<="10111110";when"0111"=>x<="11100000";when"1000"=>x<="11111110";when"1001"=>x<="11110110";when others=>null;end case;end process;end;--QUENT1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY QUENT1 ISPORT(CLKIN : IN STD_LOGIC;FIN : IN STD_LOGIC;scan : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);seg : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUTT: OUT STD_LOGIC );END ENTITY QUENT1;ARCHITECTURE ONE OF QUENT1 ISCOMPONENT chooseport( clk:in std_logic;a,b,c,d,e,f,g,h:in STD_LOGIC_VECTOR(3 DOWNTO 0); x,y:out STD_LOGIC_VECTOR(7 DOWNTO 0));end COMPONENT;COMPONENT TESTCTLPORT (CLKK : IN STD_LOGIC;CNT_EN , RST_CNT,LOAD : OUT STD_LOGIC);END COMPONENT;COMPONENT CNT10PORT (CLK : IN STD_LOGIC;CLR : IN STD_LOGIC;ENB : IN STD_LOGIC;OUTY: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT: OUT STD_LOGIC);END COMPONENT;COMPONENT REG4BPORT (LOAD : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(3 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNAL A_ENA,B_RST,C_LOAD,COUT1,COUT2,COUT3,COUT4,COUT5,COUT6,COUT7 : STD_LOGIC;SIGNALOUTY1,OUTY2,OUTY3,OUTY4,OUTY5,OUTY6,OUTY7,OUTY8,out1,out2,out3,out4,o ut5,out6,out7,out8 : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINU1 : TESTCTL PORT MAP (CLKK=> CLKIN,CNT_EN=>A_ENA,RST_CNT=>B_RST,LOAD=>C_LOAD);U2 : CNT10 PORT MAP(CLK=> FIN,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY1,COUT=>COUT1);U3 : CNT10 PORT MAP(CLK=> COUT1,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY2,COUT=>COUT2);U4 : CNT10 PORT MAP(CLK=> COUT2,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY3,COUT=>COUT3);U5 : CNT10 PORT MAP(CLK=> COUT3,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY4,COUT=>COUT4);U6 : CNT10 PORT MAP(CLK=> COUT4,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY5,COUT=>COUT5);U7 : CNT10 PORT MAP(CLK=> COUT5,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY6,COUT=>COUT6);U8 : CNT10 PORT MAP(CLK=> COUT6,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY7,COUT=>COUT7);U9 : CNT10 PORT MAP(CLK=>COUT7,CLR=>B_RST,ENB=>A_ENA,OUTY=>OUTY8,COUT=>COUTT);U10 : REG4B PORT MAP(LOAD=> C_LOAD,DIN=> OUTY1,DOUT=>OUT1);U11 : REG4B PORT MAP(LOAD=> C_LOAD,DIN=> OUTY2,DOUT=>OUT2);U12 : REG4B PORT MAP(LOAD=> C_LOAD,DIN=> OUTY3,DOUT=>OUT3);U13 : REG4B PORT MAP(LOAD=> C_LOAD,DIN=> OUTY4,DOUT=>OUT4);U14 : REG4B PORT MAP(LOAD=> C_LOAD,DIN=> OUTY5,DOUT=>OUT5);U15 : REG4B PORT MAP(LOAD=> C_LOAD,DIN=> OUTY6,DOUT=>OUT6);U16 : REG4B PORT MAP(LOAD=> C_LOAD,DIN=> OUTY7,DOUT=>OUT7);U17 : REG4B PORT MAP(LOAD=> C_LOAD,DIN=> OUTY8,DOUT=>OUT8);u18 : choose port map(clk=>fin,a=>out1,b=>out2,c=>out3,d=>out4,e=>out5,f=>out6,g=>out7, h=>out8,x=>scan,y=>seg);END ARCHITECTURE ONE;六原理图七、总结(1)设计小结本次设计中,我们成功完成本系统设计所要求的八位十进制频率计的测频功能。

相关文档
最新文档