八位十进制分频器实验报告

合集下载

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。

八位十进制数字频率计

八位十进制数字频率计

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

八位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:数码管显示。

实验08八位十进制频率计

实验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位十进制频率计的设计

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。

verilog八位十进制计数器实验报告附源代码修订版

verilog八位十进制计数器实验报告附源代码修订版

v e r i l o g八位十进制计数器实验报告附源代码修订版IBMT standardization office【IBMT5AB-IBMT08-IBMT2C-ZZT18】8位10进制计数器实验报告一、实验目的学习时序逻辑电路学会用verilog语言设计时序逻辑电路掌握计数器的电路结构掌握数码管动态扫描显示原理二、实验内容实现一个8bit十进制(BCD码)计数器端口设置:用拨动开关实现复位和使能LED灯来表示8位数据用数码管显示16进制的八位数据1.复位时计数值为8‘h02.复位后,计数器实现累加操作,步长为1,逢9进1,,计数值达到8‘h99后,从0开始继续计数3.使能信号为1时正常计数,为0时暂停计数,为1时可继续计数。

4.每0.5s计数值加15.8位的结果显示在LED灯上,其中LED灯亮表示对应的位为1,LED灯灭表示对应的灯为06.用isim进行仿真,用forever语句模拟时钟信号输入,并给变量赋值仿真initial语句。

7.用7段数码管的后两位显示16进制下8位结果。

三、实验结果烧写结果:拨动reset开关到1时,LED灯显示10010000,7段数码管显示“90”。

之后拨动WE开关呢,开始计数,LED开始变化并且7段数码管开始计数。

从99后到达00,LED重新开始从00000000开始亮,且数码管重新从00开始计数。

之后拨动WE开关,暂停计数,LED暂停亮灭,七段数码管暂停变化,WE拨回1,继续计数。

拨动复位信号时,无视WE信号,直接复位。

仿真结果:当输入reset信号时波形变化如下当达到一个扫描信号的周期时的波形如下当达到一个以上计数信号的周期时的波形实验分析:实验总体结构和模块间关系如图所示:(其中还需要补上使能信号)实验原理:由于要求实现数码管和LED灯的显示,先考虑LED灯,可以直接由8位输出信号控制,而数码管需要同时显示两个不同的数字,需要时分复用,即快速的交替显示十位和个位,利用人眼的视觉暂留来达到同时显示。

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

重庆交通大学信息科学与工程学院综合性实验报告姓 名: 赵娅琳 学 号 10950214班 级: 通信工程专业2010级 2班实验项目名称: 8位16进制频率及设计实验项目性质: 设计性 实验所属课程: 数字设计基础 实验室(中心): 现代电子实验中心 指 导 教 师 : 李 艾 星 实验完成时间: 2012 年 6 月 18 日教师评阅意见:签名:年月日实验成绩:一、课题任务与要求1、验证8位16进制频率计的程序;2、根据8位16进制频率计的程序设计8位10进制频率计;二、设计系统的概述频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率,通常情况下计算每秒内待测的脉冲个数,此时闸门时间为1秒,闸门时间也可以大于或小于1秒。

频率信号易于传输,抗干扰性强,可以获得较好的测量精度。

数字频率计的关键组成部分包括一个测频控制信号发生器、一个计数器和一个锁存器,另外包括脉冲发生器、姨妈驱动电路和显示电路。

工作过程:系统正常工作时,脉冲信号发生器输入1HZ的标准信号,经过测频控制信号发生器的处理,2分频后即可产生一个脉宽为1秒的时钟信号,以此作为计数闸门信号。

测量信号时,将被测信号通过计数器作为时钟。

当技术闸门信号高平有效时,计数器开始计数,并将计数结果送入锁存器中。

设置锁存器的好处是现实的数据稳定,不会由于周期的清零信号而不断闪烁。

最后将所存的数值由外部的译码器并在数码管上显示。

三、单元电路的设计与分析(重点描述自己设计部分)1、八位十进制计数顶层模块设计(1)、此模块是元件例化语句将各个元件(测频控制模块、十进制计数模块、测频锁存器模块)连接形成一个整体,完成最终频率计所期望的功能。

(2)、具体程序如下。

library ieee; --频率计顶层文件library ieee;use ieee.std_logic_1164.all;entity freqtest is --定义逻辑电路的端口port(clk1hz,fsin:in std_logic;dout:out std_logic_vector(31 downto 0));end freqtest;architecture behv of freqtest is --说明语句component cnt10_8 --元件说明语句port(rst,fx,ena:in std_logic;d:out std_logic_vector(31 downto 0));end component;component reg32bport(lk:in std_logic;din:in std_logic_vector(31 downto 0);dout:out std_logic_vector(31 downto 0));end component;component ftctrlport (clkk:in std_logic;cnt_en :out std_logic;rst_cnt:out std_logic;load:out std_logic);end component;signal tsten1:std_logic; --信号量定义说明语句signal clr_cnt1:std_logic;signal load1:std_logic;signal dto1:std_logic_vector(31 downto 0);signal carry_out1:std_logic_vector(6 downto 0);begin --功能描述语句u1:ftctrl port map(clkk=>clk1hz,cnt_en=>tsten1,rst_cnt=>clr_cnt1,load=>load1);u2:reg32b port map(lk=>load1,din=>dto1,dout=>dout);u3:cnt10_8 port map(fx=>fsin,rst=>clr_cnt1,ena=>tsten1,d=>dto1);end behv;(3)、顶层文件的模块图2、测频控制模块(1)、此模块主要是由时钟输入、计数器使能、计数器清零、输出所存构成、其具体的实现是由一个1秒的输入信号脉冲计数允许的信号,1秒计数器结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期做好准备。

(2)、具体程序如下。

LIBRARY IEEE; --测频控制电路USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL IS --定义逻辑电路的端口PORT (CLKK:IN STD_LOGIC; --1HzCNT_EN:OUT STD_LOGIC; --计数器时钟使能RST_CNT:OUT STD_LOGIC; --计数器清零Load:OUT STD_LOGIC);--输出锁存信号END FTCTRL;ARCHITECTURE behav OF FTCTRL IS --说明语句SIGNAL Div2CLK:STD_LOGIC;BEGIN --功能描述语句PROCESS(CLKK)BEGINIF CLKK'EVENT AND CLKK='1' THEN --1Hz时钟2分频Div2CLK <= 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;3、十进制计数模块(1)、此模块先设计单个十进制计数模块,再设计八位十进制计数模块,将线设计好的单个十进制计数模块用元件例化语句构成八进制计数模块,就将可以完成八位十进制计数模块的设计,这件设计的好处是,减小了程序设计的复杂度,而且层次感强。

(2)、主要涉及两个程序如下。

library ieee; --单个十进制设计use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 is --定义逻辑端口语句port(rst,fx,ena:in std_logic;cout:out std_logic;outy:out std_logic_vector(3 downto 0));end cnt10;architecture behv of cnt10 isbegin --功能描述语句process(rst,ena,fx)variable cqi:std_logic_vector(3 downto 0);beginif rst='1' then cqi:=(others=>'0'); --清零端elsif fx'event and fx='1' thenif ena='1' thenif cqi<9 then cqi:=cqi+1; cout<='0'; --使能端为高电平开始计数elsif cqi=9 thencqi:=(others=>'0');cout<='1'; --计数值到达9时,cqi端清零,cout输出1 end if;elsif ena='0' then cqi:=(others=>'0');end if;end if;outy<=cqi;end process;end behv;library ieee; --八位十进制数模块use ieee.std_logic_1164.all;entity cnt10_8 isport(rst,fx,ena:in std_logic; --定义逻辑端口语句d:out std_logic_vector(31 downto 0));end cnt10_8;architecture behv of cnt10_8 is --说明语句component cnt10 --元件说明语句port(rst,fx,ena:in std_logic;cout:out std_logic;outy:out std_logic_vector(3 downto 0));end component;signal e:std_logic_vector(7 downto 0); --信号量定义说明语句begin --功能描述语句u1:cnt10 port map(fx=>fx,rst=>rst,ena=>ena,cout=>e(0),outy=>d(3 downto 0));u2:cnt10 port map(fx=>e(0),rst=>rst,ena=>ena,cout=>e(1),outy=>d(7 downto 4));u3:cnt10 port map(fx=>e(1),rst=>rst,ena=>ena,cout=>e(2),outy=>d(11 downto 8));u4:cnt10 port map(fx=>e(2),rst=>rst,ena=>ena,cout=>e(3),outy=>d(15 downto 12));u5:cnt10 port map(fx=>e(3),rst=>rst,ena=>ena,cout=>e(4),outy=>d(19 downto 16));u6:cnt10 port map(fx=>e(4),rst=>rst,ena=>ena,cout=>e(5),outy=>d(23 downto 20));u7:cnt10 port map(fx=>e(5),rst=>rst,ena=>ena,cout=>e(6),outy=>d(27 downto 24));u8:cnt10 port map(fx=>e(6),rst=>rst,ena=>ena,cout=>e(7),outy=>d(31 downto 28));end behv;4、测频锁存器模块(1)在频率计的设计当中设计了一个锁存器,设置锁存器的好处就是使数据显示稳定,不会由于周期周期性的清零而使信号不断的闪烁,这个模块的功能就是讲计数器在规定时间的计数值锁存进锁存器中。

相关文档
最新文档