FPGA八位十进制数字频率计

合集下载

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 技术应用随着计算机技术和集成电路技术的快速发展,电子技术设计面临着复杂度不断提高而设计周期不断缩短的矛盾。

8位数字频率计

8位数字频率计

一、题目:基于FPGA的直接测频法设计8位数字频率计二、设计目的和要求:(一)设计目的:采用直接测频法实现8位数字频率计。

(二)设计要求:1.采用FPGA直接测频/测周法实现2.掌握四种整合方式3.用VHDL语言在Maxplux2上实现三、设计原理和相关知识(一) 设计原理:把频率信号经脉冲形成电路后加到闸门相对一个输入端,只有在闸门开通的T(以秒计)内,计数脉冲被送到计数器进行计数。

计数值为N,有频率定义可以计算得到被测信号频率为:F=N/T(二) 测频法原理图:数字频率计系统组成框图四、设计方案和设计内容(一)数字频率计底层模块设计1.频率计测频控制器模块模块分析:闸门信号上升沿,打开计数器开始计数,直到产生下降沿。

在闸门信号下降沿处产生一个上升沿作为控制时钟信号,将输入端计数结果锁存到输出端。

在闸门信号低电平期间输出一个清零信号是计数器清零,准备下一次计数。

testen使能控制端口高电平期间控制计数器进行计数clr_cnt计数器清零控制信号为1时进行清零load 锁存控制信号,上升沿进行锁存程序:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;entity testct1 isport(clk: in std_logic;testen: out std_logic;clr_cnt:out std_logic;load:out std_logic);end entity;architecture a of testct1 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;load<=not div2clk;testen<=div2clk;end process;end a;模块图:仿真结果:2.计数器模块模块分析:使能端ena置高电平有效,进行计数,使能端ena置低电平停止计数保留原数值,置高电平继续计数。

八位十进制数字频率计

八位十进制数字频率计

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

FPGA八位十进制数字频率计

FPGA八位十进制数字频率计

数字系统设计与VHDL课程设计任务书一、题目:基于FPGA的八位十进制数字频率计的设计与仿真二、主要内容本次设计是运用FPGA(现场可编程门阵列)芯片来实现一个八位十进制数字频率计,输入信号频率通过数码管来显示。

设计中采用Verilog HDL语言编程,运用QUARTUS Ⅱ软件实现。

三、基本要求1. 查阅相关原始资料,书写文献综述,英文资料翻译。

2. 理解相关的资料,确定系统功能、性能指标,选择系统组成方案。

3. 选择系统方案,运用Verilog HDL编程,采用QUARTUS Ⅱ集成开发环境进行编辑、综合测试,并进行引脚锁定。

4. 采用MagicSOPC实验开发平台,以FPGA为核心器件,主控芯片为EP2C35F672C8器件并下载到试验箱中进行验证,最终实现所需的八位十进制数字频率计,并在数码管上显示。

5. 撰写研究报告及结果分析,书写课程设计论文。

四、时间安排五、教材及参考书[1] 潘松, 王国栋. VHDL实用教程[M].西安:电子科技大学出版社,2007.[2] 黄智伟. FPGA系统设计与实践[M].北京:电子工业出版社,2005.[3] 包明. 赵明富.EDA技术与数字系统设计[M].北京:北京航空航天大学出版社,2001.[4] 莫琳,基于FPGA的频率计的设计与实现[J].现代电子技术,2004[5] EDA修改稿基于FPGA的八位十进制数字频率计学生姓名:学院:专业班级:专业课程:指导教师:2014 年6 月15 日一、系统设计1.系统设计要求(1)频率测量范围:1-99.999999MHZ。

(2)测量误差<5%。

2.方案设计使用现场可编程逻辑器件(FPGA)制作,利用Verilog HDL硬件描述语言编程进行控制,然后下载烧写实现。

对于八位十进制数字频率计的设计,本方案采用的是现场可编程逻辑器件来实现, 它的优点是所有电路集成在一块芯片上,此方案所需的外围电路简单,这样它的体积就减少了,同时还提高了系统的稳定度,还可以用软件QuartusⅡ软件进行仿真和调试等,可以充分利用verilog HDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,降低研发成本;而且易于进行功能的扩展,实现方法灵活,调试方便,修改容易。

八位十进制数字频率计的设计..

八位十进制数字频率计的设计..

2012~2013学年第二学期《数字系统设计》课程设计报告题目:数字频率计的设计班级:10电子信息(1)姓名:鲍学贵李闯王群卢军张力付世敏凌玲尹凡指导教师:周珍艮电气工程系2013年6月《数字系统设计》任务书摘要数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波、方波或其它周期性变化的信号。

数字频率计广泛应用于科研机构、学校、实验室、企业生产车间等场所。

研究数字频率计的设计和开发,有助于频率计功能的不断完善、性价比的提高和实用性的加强。

本文介绍了一种自顶向下分层设计多功能数字频率计的设计方法。

该频率计采用VHDL 硬件描述语言编程,以QuartusII为开发环境,极大地减少了硬件资源的占用。

数字频率计模块划分的设计具有相对独立性,可以对模块单独进行设计、调试和修改,缩短了设计周期。

所设计的VHDL语言通过仿真能够较好的测出所给频率并且满足数字频率计的自动清零和自动测试的功能要求,具有理论与实践意义。

关键词:VHDL ;数字频率计; EDA; QuartusII目录第一章绪论 (1)1.1 设计背景 (1)1.2 设计意义 (1)1.3 本文的主要工作 (2)第二章数字频率计的系统分析 (3)2.1 8位十进制数字频率计系统设计的原理 (3)2.1.1 数字频率计的基本原理 (3)2.1.2 系统总体框架图 (3)2.2 8位十进制数字频率计设计任务与要求 (4)2.3 目标芯片FLEX10K (4)第三章各功能模块基于VHDL的设计与仿真 (6)3.1 8位十进制数字频率计的电路逻辑图 (6)3.2 测频控制信号发生器的功能模块及仿真 (6)3.3系统时钟分频的功能模块及仿真 (8)3.4 32位锁存器的功能模块及仿真 (9)3.4.1 锁存器 (9)3.4.2 锁存器的功能模块及仿真 (9)3.5 数码管扫描的功能模块及仿真 (10)3.6 数码管译码显示的功能模块及仿真 (12)3.7 十进制计数器的功能模块及仿真 (14)3.7.1 计数器 (14)3.7.2 十进制计数器的功能模块及仿真 (14)3.8 8位十进制数字频率计的仿真 (16)第四章结束语 (23)参考文献 (24)答辩记录及评分表 (25)第一章绪论1.1设计背景数字频率计[1]是电子测量与仪表技术最基础的电子仪表类别之一,数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器,而且它是数字电压必不可少的部件。

实验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。

8位十进制数字频率计设计

8位十进制数字频率计设计
ห้องสมุดไป่ตู้
1.5 时序控制器设计
图11-9 7493真值表
图11-10 74154真值表
1.5 时序控制器设计
图11-11 图11-8电路的仿真波形
1.6 顶层电路设计与测试
图11-12 频率计顶层电路原理图
1.6 顶层电路设计与测试
图11-13 频率计工作时序波形
1.7 在FPGA中完成硬件实测
实测的内容有2项: 1. 能否完成正常的测频工作,即输入信号的频率与显示的数据是
1.2 设计一个两位十进制计数器
图11-5 图11-3电路的仿真波形
1.3 8位十进制计数器的设计
图11-6 8位十进制计 数器电路:
CNT32B.bdf
1.4 32位寄存器设计
图11-7 由4个74374构成的32位寄存器电路:LOCK32.bdf
1.5 时序控制器设计
图11-8 频率计测频时序控制器电路
数字电子技术
8位十进制数字频率计设计
1.1 测频原理
图11-1 频率计模型框图
1.1 测频原理
图11-2 测频时序
1.2 设计一个两位十进制计数器
图11-3 两位十进制计数器电路图:COUNTER10.bdf
11.1 8位十进制数字频率计设计
1.2 设计一个两位十进制计数器
图11-4 74390的真值表
否一致,稳定性是否好; 2. 被测信号能达到的频率上限是多少,与计算机的时序分析结果
的一致性如何。需要注意的是,实测时CLK1的频率必须是 8Hz。如果没有,可以从其它信号分频得到。
数字电子技术

FPGA频率计

FPGA频率计

最近自己拿FPGA弄了一个简易频率计(verilog):精度1HZ,可以测试占空比,但是精度只有10%。

下面讲解一下,希望对想弄这个的人有一点帮助:我的硬件说明:EP1C3T144C8N核心板、8位数码管、按键、8位LED、20M晶振首先说一下测量方波信号频率的原理:首先一个几位(比如4位)的计数器在方波信号的跳变沿(比如下降沿激励)激励下,来一个激励脉冲(比如下降沿)计数器将加一,但是问题出现了,这个计数器一直加的话不是溢出了?你怎么样通过这个加的数值来确定你的方波频率?先卖个关子,先来说说这个计数器!计数器肯定是一直在加的(前提是只要你的IO口有跳变沿),那么你的计数的最高数值就是由你的计数器的位数决定的,比如这里是2的4次方,又回到原来的问题,你的计数器不是有跳变沿就加一吗?那岂不是不同的方波信号频率都是加到了最大值?但是你想到没有,不同的方波信号频率输入的话,你的计数器加到最大值的时间是不同的,这里才是设计理解的关键!那么我们就是通过这个不同的时间来判断的。

下面讲解原理:我们让这个计数器在规定的时间内加,然后设定的时间一到我们把这个加的数值存起来,同时将这个计数器清零(很多人这里或许还是不理解为什么要这样,继续往下看)。

那么我们先假设这个待测输入的方波信号的频率是固定不变的,也就是说在这个设定的时间内,计数器加的数值,也就是检测到的跳变沿的个数,具体假设是下降沿,在理论上是一个固定的值!(这里可以仔细想一下),因为每次时间一到这个计数器将被清零了。

我们为了后面计算的方便,假设我们设定的时间是1秒钟,也就是1HZ,在这个1HZ时钟的控制下面,每秒钟将会把这个计数器清零,那么很显然,这个计数器在这个时间1秒钟内加的数值N就是你测的的方波的频率值!这个就是一个很简单的数学的问题,在相同的1秒钟时间内,clk信号相当于加了一次,signal信号加了N次,那么你的signal信号的频率肯定是这个clk频率的N 倍,你的测量的精度显然就是你的设定比较的时钟1HZ咯。

八位十进制频率计数器

八位十进制频率计数器

Hefei UniversityEDA技术课程设计:八位十进制频率计数器专业: 13电子(1)班姓名:学号:指导老师:一、题目分析1、设计一个八位十进制的数字频率计:(1)、能对方波测频率(2)、能用数码管显示2、频率计设计原理及总设计框图(1)、频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。

通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为2秒。

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

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

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

本次的课程设计设计的频率计是测频法设计的八位十进制频率计,他有一个测频控制信号发生器,八个有时钟使能的十进制计数器,一个锁存器组成。

二、选择方案顶层文件用原理图连接,底层文件用VHDL语言。

这样整个设计清晰明了,结构直观。

三、细化框图(1)、测频率控制信号发生器测频测量的基本原理是计算每秒钟内待测信号的脉冲个数。

这就要求测频率控制信号发生器的计数使能信号EN能产生一个1秒的脉宽的周期信号,并对频率计的每一个计数器CNT10的EN 使能端进行同步测控。

当TSTEN高电平时,允许计数;低电平时,停止计数,并保持其所计的数。

在停止计数期间,首先需要一个所存信号LOAD的上升沿将计数器在前一秒中的计数值所存进锁存器中,并由外部的7段译码器译出并稳定显示。

所存信号之后,必须有一个清零的信号对计数器进行清零,为下一秒的计数做准备。

(2)、计数模块该十进制计数模块有八个一位十进制计数器组成,计数器的特殊之处是:有一个时钟使能输入端EN,用于锁定计数器。

当高电平时计数允许,低电平时计数禁止。

该测频的八位十进制频率计的计数模块,先通过VHDL语言编写一位十进制计数器,再将其元件例化后搭建一个八位十进制计数模块。

(3)、所存模块所存模块是由锁存器构成的,主要是数据的稳定显示,不会由于周期性的清零信号而不断的闪烁。

课程设计(论文)基于fpga的数字频率计的设计

课程设计(论文)基于fpga的数字频率计的设计

目录1 引言 (2)2 FPGA及VERILOG HDL (2)2.1FPGA简介 (2)2.2V ERILOG HDL概述 (3)3 数字频率计的设计原理 (3)设计要求 (3)频率测量 (3)时间门限测量法 (3)标准频率比较测量法 (3)3.2.3 等精度测量法 (4)方案提出及确定 (4)系统设计与方案论证 (5)测频控制信号发生器设计 (5)寄存器设计 (6)计数器的设计 (6)小结 (6)4 数字频率计的设计 (6)功能模块设计 (6)分频器模块 (6)测频控制信号发生器模块 (6)4.1.3 32位锁存器模块 (7)译码器模块 (8)十进制计数器模块 (8)用原理图描述的模块 (9)4.2顶层文件 (11)小结 (12)5 软件的测试 (12)测试的环境 (12)调试和器件编程 (13)6 硬件设计 (13)6.1EPF10K30ATI144-3FPGA芯片简介 (13)6.2EPC2配置芯片简介 (13)配置模式 (13)下载方式 (13)硬件电路原理图设计 (14)频率测试 (15)7 结论及展望 (16)结论 (16)展望 (16)致谢 (17)参考文献 (18)附录 (18)基于FPGA的数字频率计的设计摘要:在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更加重要。

通过运用Verilog HDL语言,实现8位数字频率计,并利用MAX+PLUSII集成开发环境进行编辑、综合、波形仿真,并下载到FPGA器件中,经实际电路测试,该系统性能可靠。

关键词:硬件描述语言现场可编程门阵列FPGA频率计频率测量1 引言在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。

测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

基于FPGA的数字频率计设计

基于FPGA的数字频率计设计

.E D A课程设计题目基于FPGA的数字频率计设计系别计电系专业应用电子技术班级:06应电组员一:X俊组员二:杨利鲜组员三:董明超指导老师8位十进制显示数字频率计(带周期测量)功能要求:1、能测量1—99999999Hz的方波信号频率,(能测量10uS—1000mS的周期)[1MHZ/1us--1HZ/1000ms],并以十进制的方式显示。

2、具有工作方式转换控制键、开始键、停止键等控制键。

3、数值显示用LED数码管动态显示。

1、频率计的工作原理本文要设计一个8位十进制数字频率计,需要由四种器件来组成,即:测频控制信号发生器(FTCTRL)、有时钟使能的十进制计数器(T10)、32位锁存器(REG32B)、除法器模块(division). 因为是8位十进制数字频率计,所以计数器T10需用8个,7段显示LED7也需用8个.频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。

为此,测频控制信号发生器FTCTRL应设置一个控制信号时钟CLKK,一个计数使能信号输出端T_EN、一个与T_EN输出信号反向的锁存输出信号Load、和清零输出信号RST_T。

如CLKK的输入频率为1HZ,则输出信号端T_EN输出一个脉宽恰好为1秒的周期信号,可以作为闸门信号用。

由它对频率计的每一个计数器的使能端进行同步控制。

当T_EN高电平时允许计数,低电平时停止计数,并保持所计的数。

在停止计数期间,锁存信号Load的上跳沿将计数器在前1秒钟的计数值锁存进32位锁存器REG32B,由7段数码管稳定显示。

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

锁存信号之后,清零信号RST_T对计数器进行清零。

为下1秒钟的计数操作作准备。

测频控制信号发生器的工作时序如图1示。

图1 测频控制信号发生器的工作时序图图2 电路设计原理框图2、用VHDL语言设计频率计频率计所需四种器件的VHDL文件(频率计的底层文件)及波形仿真结果2.1 测频控制信号发生器FTCTRLLIBRARY IEEE; --测频控制电路USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY FTCTRL ISPORT (CLKK : IN STD_LOGIC; -- 1HzT_EN : OUT STD_LOGIC; -- 计数器时钟使能RST_T : OUT STD_LOGIC; -- 计数器清零Load : OUT STD_LOGIC ); -- 输出锁存信号END FTCTRL;ARCHITECTURE behav OF FTCTRL ISSIGNAL Div2CLK : STD_LOGIC;BEGINPROCESS( 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_T<='1';-- 产生计数器清零信号ELSE RST_T <= '0'; END IF;END PROCESS;Load <= NOT Div2CLK; T_EN <= Div2CLK;END behav;图3测频控制信号发生器的波形仿真图2.2带时钟使能十进制计数器T10LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY T10 ISPORT (CLK,RST,EN : IN STD_LOGIC;CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT : OUT STD_LOGIC );END T10;ARCHITECTURE behav OF T10 ISBEGINPROCESS(CLK, RST, EN)VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINIF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器复位ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿IF EN = '1' THEN --检测是否允许计数IF CQI < "1001" THEN CQI := CQI + 1; --允许计数ELSE CQI := (OTHERS =>'0');--大于9,计数值清零END IF;END IF;END IF;IF CQI = "1001" THEN COUT <= '1'; --计数大于9,输出进位信号ELSE COUT <= '0';END IF;CQ <= CQI; --将计数值向端口输出END PROCESS;END behav;图4带时钟使能十进制计数器的波形仿真图2.3. 除法器模块(division)library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;use IEEE.STD_LOGIC_ARITH.all;entity division isport(en:in STD_LOGIC;fx: in STD_LOGIC_VECTOR(31 downto 0);shang: out STD_LOGIC_VECTOR(31 downto 0));end division;architecture behav of division isbeginprocess(en,fx)beginif en = '1' thenshang<=CONV_STD_LOGIC_VECTOR(1000000/((conv_integer(fx(31 downto 28)))*10000000+(conv_integer(fx(27 downto 24)))*1000000+(conv_integer(fx(23 downto 20)))*100000+(conv_integer(fx(19 downto 16)))*10000+(conv_integer(fx(15 downto 12)))*1000+(conv_integer(fx(11 downto 8)))*100+ (conv_integer(fx(7 downto4)))*10+(conv_integer(fx(3 downto 0)))),32);else shang<=fx;end if;end process;end behav;图5除法器的波形仿真图2.4 32位锁存器REG32BLIBRARY IEEE; --32位锁存器USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG32B ISPORT ( LK : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0);DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ); END REG32B;ARCHITECTURE behav OF REG32B ISBEGINPROCESS(LK, DIN)BEGINIF LK'EVENT AND LK = '1' THEN DOUT <= DIN;END IF;END PROCESS;END behav;图6锁存器REG32B的波形仿真图3. 顶层原理图的设计输入在以上四个器件正确设计的基础上,再按设计原理图的要求将这四种器件连接起来,形成顶层文件,件编成电路图的形式,并在此基础上建立为一个新的工程,进行综合仿真.模块连接图如图2 电路设计原理框图所示。

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

基于FPGA的8位十进制频率计设计
目前一般情况标底大多是由中介机构编制,而且一般招标人给中 介机构编制时间都比较紧迫,加之中介机构人员能力参差不齐,要保证 在较短时间内完成一份质量较高的标底是很困难的,而目前标底在招 投标过程中仍起着较为重要角色,因此对于实行标底进行招标工程,必 须 重 视 标 底 的 审 查 工 作,保 证 标 底 准 确 、严 谨 和 科 学.
begin process(clk)is begin if clk' event and clk=' 1'then div2clk<=not div2clk; end if; end process;
process(clk,div2clk)is begin if clk='0' and div2clk='0' then clr_cnt<=' 1'; else clr_cnt<='0'; end if;
下面就如何在较短时间内做好标底审查工作谈谈看法. 一 、标 底 审 查 的 方 法 1.“筛 选 ”审 查 法 筛选法是统筹法的一种, 也是一种对比方法。建筑工程虽面积和 高度的不同, 但是它们的各个分部分项工程的工程量、造价、用工量在 每个单位面积上的数值变化不大。将这些数据加以汇集、优选, 找出归 纳为工程量、单价、用工三大类单方基本值表, 并注明其适用的建筑标 准。当所审查的预算的建筑标准与“基本值”所适用的标准不同, 就要 对其进行调整。这种方法的优点是简单易懂, 便于掌握, 审查速度快, 发 现 问 题 快 。运 用 这 方 法 的 关 键 是 平 时 要 注 意 各 种 型 工 程 造 价 指 标 的 收集, 拟审查标底的工程结构特征要与已建工程或已结算工程结构指 标的关系对应, 只有是同类型工程指标才可套用。这就要求我们平时 注意工程造价资料的积累, 特别是自己做过的工程, 要做到每做完一 个 工 程 都 要 做 相 应 的 技 术 、经 济 指 标 、常 见 主 要 材 料 消 耗 量 指 标 、主 要 工 程 量 指 标 。 除 此 之 外 还 要 多 注 意 查 阅 省 、市 造 价 管 理 部 门 发 布 的 经 济指标方面的资 料 , 这 样 我 们 积 累 的 工 程 造 价 “数 据 库 ”会 越 来 越 多 , 参考数据随处可查, 用时可信手拈来。 2.重 点 审 查 重 点 审 核 法 就 是 抓 住 工 程 预 结 算 中 的 重 点 进 行 审 核 的 方 法 。这 种 方法类同于全面审核法, 其与全面审核法之区别仅是审核范围不同而 已。该方法是有侧重的, 一般选择工程量大而且费用比较高的分项工 程 的 工 程 量 作 为 审 核 重 点 。如 基 础 工 程 、砖 石 工 程 、混 凝 土 及 钢 筋 混 凝 土工程, 门窗幕墙工程等。高层结构还应注意内外装饰工程的工程量 审核。而一些附属项目、零星项目( 雨蓬、散水、坡道、明沟、水池、垃圾 箱) 等, 往往忽略不计。其次重点核实与上述工程量相对应的定额单 价, 尤其重点审核定额子目容易混淆的单价。另外对费用的计取、材料 的价格也应仔细核实。该方法的优点是工作量相对减少, 效果较佳。 ( 1) 审查定额或单价的套用。 1. 对直接套用定额单价的审核— ——首 先 要 注 意 采 用 的 项 目 名 称 和内容与设计图纸标准是否要求相一致, 如墙体、地面、楼面、天棚、外 墙装饰的建筑做法、断面形式、强度等级( 混凝土标号、水泥砂浆比例) 等。其次工程项目是否重复套用。另外定额主材价格套用是否合理, 对 有 最 高 限 价 的 材 料 的 定 额 套 用 的 规 定 等 。 如 花 岗 石 、大 理 石 、木 地 板 、

FPGA实验——8位数码显示频率计设计

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

数字系统设计与VHDL课程设计任务书一、题目:基于FPGA的八位十进制数字频率计的设计与仿真二、主要内容本次设计是运用FPGA(现场可编程门阵列)芯片来实现一个八位十进制数字频率计,输入信号频率通过数码管来显示。

设计中采用Verilog HDL语言编程,运用QUARTUS Ⅱ软件实现。

三、基本要求1. 查阅相关原始资料,书写文献综述,英文资料翻译。

2. 理解相关的资料,确定系统功能、性能指标,选择系统组成方案。

3. 选择系统方案,运用Verilog HDL编程,采用QUARTUS Ⅱ集成开发环境进行编辑、综合测试,并进行引脚锁定。

4. 采用MagicSOPC实验开发平台,以FPGA为核心器件,主控芯片为EP2C35F672C8器件并下载到试验箱中进行验证,最终实现所需的八位十进制数字频率计,并在数码管上显示。

5. 撰写研究报告及结果分析,书写课程设计论文。

四、时间安排五、教材及参考书[1] 潘松, 王国栋. VHDL实用教程[M].西安:电子科技大学出版社,2007.[2] 黄智伟. FPGA系统设计与实践[M].北京:电子工业出版社,2005.[3] 包明. 赵明富.EDA技术与数字系统设计[M].北京:北京航空航天大学出版社,2001.[4] 莫琳,基于FPGA的频率计的设计与实现[J].现代电子技术,2004[5] EDA修改稿基于FPGA的八位十进制数字频率计学生姓名:学院:专业班级:专业课程:指导教师:2014 年6 月15 日一、系统设计1.系统设计要求(1)频率测量范围:1-99.MHZ。

(2)测量误差<5%。

2.方案设计使用现场可编程逻辑器件(FPGA)制作,利用Verilog HDL硬件描述语言编程进行控制,然后下载烧写实现。

对于八位十进制数字频率计的设计,本方案采用的是现场可编程逻辑器件来实现, 它的优点是所有电路集成在一块芯片上,此方案所需的外围电路简单,这样它的体积就减少了,同时还提高了系统的稳定度,还可以用软件QuartusⅡ软件进行仿真和调试等,可以充分利用verilog HDL硬件描述语言方便的编程,提高开发效率,缩短研发周期,降低研发成本;而且易于进行功能的扩展,实现方法灵活,调试方便,修改容易。

3.设计说明八位十进制数字频率计的基本原理是,测频法和测周期法。

测频法是在确定的时间Tw内,记录被测信号的周期Nx,则测得的频率为Fx=Nx/Tw。

测周期法需要有标准信号频率fs,在待测信号的一个周期Tx内,记录标准频率的周期数,则测得的频率为fx=fs/Ns。

4.设计模块本设计可有3个模块实现,如下图所示。

顶层模块(时基控制,分频以及对测频的控制);十进制计数器模块,对测量的脉冲进行计数;数码管显示模块,用于测量的结果,通过试验箱上的数码管显示,利用动态扫描显示。

二、软件设计1.程序框图程序框图如图1所示。

图1 程序框图2.Verilog HDL源程序(见附录)三、调试和下载验证1.实验调试(1)软件调试1) 运行Quartus II软件。

双击桌面Quartus II9.0或者开始菜单\altera\ Quartus II9.0进入程序主窗口。

2) 新建源程序文件。

点击File\new\verilog HDL File,点击ok。

输入程序代码。

3) 新建工程。

保存程序代码时,软件会自动提示新建工程,也可以点击取消,创建新的源程序文件,全部模块的源程序创建完成再新建工程,最后把所有模块添加到工程。

两个方法过程都差不多。

点击File\New Project Wizard点击next,第一行是工程目录,第二行是工程名称,第三行是顶层实体名,这必须与主程序模块名一致。

然后点击next,点击Add All再点击next,器件选择EP2C35F672C8,再点击next,确定。

4) 综合编译。

点击star compilation进行编译。

编译过程中提示首先提示Decode_8S缺失,仔细检查后发现没有创建Decode_8S源程序文件。

创建好后再编译,提示好几个地方的符号错误,双击错误定位到出现错误的地方,修改好,点击编译,提示一处错误,双击定位到出错地点,发现是逻辑错误,查阅参考书后,把错误修正了。

再点击编译,没有错误。

5) 创建波形文件。

点击File\new\vector waveform file,然后添加clk、key、SM_duan节点,设置clk频率,并把key波形随机设置几个1,点击仿真。

(2)硬件调试在软件调试调试成功的情况下,接下来我们要进行硬件调试,步骤如下:1) 运行Quartus II软件,打开工程。

2) 再次编译源程序(见附录)。

3) 分配管脚(见附录)。

4) 将生成的.sof文件写入FPGA试验箱中。

(3)实物拍照实物如图2所示。

图2 实物照片2.实验结论所做的八位十进制数字频率计,当输入信号时就会在数码管上显示被测信号的频率,并且误差很小,只有当被测信号频率特大时会出现误差,其他都和标准频率一样。

四、感受两周的实训已经过去,对于我来说这两周的实训赋予了我太多实用的东西了,不仅让我更深层次的对课本的理论知识深入了理解,而且还让我对分析事物的逻辑思维能力得到了锻炼,提高了实际动手能力,下面谈一下就这两周实训中我自己的一些心得体会。

我们在老师提供的实践平台上通过自己的实践学到了很多课本上学不到的宝贵东西,熟悉了对相关软件的一般项目的操作和学到了处理简单问题的基本方法,更重要的是掌握了verilog HDL语言的基本设计思路和方法,我想这些会对我今后的学习起到很大的助推作用。

此外,还要在今后的课本理论知识学习过程中要一步一个脚印的扎实学习,灵活的掌握和运用专业理论知识这样才能在以后出去工作的实践过程中有所成果。

其次,在连接各个模块的时候一定要注意各个输入、输出引脚的线宽,因为每个线宽是不一样的,只要让各个线宽互相匹配,才能得出正确的结果,否则,出现任何一点小的误差就会导致整个文件系统的编译出现错误提示,在器件的选择上也有一定的技巧,只有选择了合适当前电路所适合的器件,编译才能得到完满成功。

通过这次课程设计使我懂得了理论与实际相结合很重要,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

最后还要感谢学校为我们提供这样专业的实践平台还有实训老师在两周实训以来的不断指导和同学的热情帮助。

总的来说,这次实训我收获很大。

参考文献[1] 夏宇闻.Verilog数字系统教程[M].北京:北京航空航天出版社,2006.[2] 梁瑞宇.FPGA设计实验指导书(Verilog HDL)[M].北京:北京航空航天出版社,2008.[3]潘松著.EDA技术实用教程-Verilog_HDL版(第4版)[M].北京:科学出版社,2010.附录源程序八位十进制数字频率计程序实现如下module freqtest(clock,clock0,dig,seg);input clock; //系统时钟input clock0; //被测信号输入output[7:0] dig; //数码管选择输出引脚output[7:0] seg; //数码管段输出引脚reg [25:0] counter; //时钟分频计数器reg [31:0] freq_result; //频率测量结果寄存器wire [31:0] pre_freq; //脉冲计数寄存器reg rst;wire divide_clk; //1Hz 闸门信号wire clk_scan; //数码管扫描显示时钟wire cout1,cout2,cout3,cout4,cout5,cout6,cout7;assign clk_scan = counter[15]; //动态扫描时钟//时钟分频进程:分出1Hz 基准信号always @(posedge clock)beginif (divide_clk)counter <= 26'd0;elsecounter <= counter + 1'b1;endassign divide_clk = (counter >= 26'd);//锁存测量值进程always @(posedge clock)beginif(divide_clk)freq_result <= pre_freq;end//产生计数器复位信号always @(posedge clock)beginif(divide_clk)rst <= 1'b1;elserst <= 1'b0;end//8 位十进制计数模块:由8 个十进制计数模块构成cnt10 u1(.clock(clock0),.rst(rst),.cin(1'b1),.cout(cout1),.dout(pre_freq[3:0])); cnt10 u2(.clock(clock0),.rst(rst),.cin(cout1),.cout(cout2),.dout(pre_freq[7:4])); cnt10 u3(.clock(clock0),.rst(rst),.cin(cout2),.cout(cout3),.dout(pre_freq[11:8])); cnt10 u4(.clock(clock0),.rst(rst),.cin(cout3),.cout(cout4),.dout(pre_freq[15:12])); cnt10 u5(.clock(clock0),.rst(rst),.cin(cout4),.cout(cout5),.dout(pre_freq[19:16])); cnt10 u6(.clock(clock0),.rst(rst),.cin(cout5),.cout(cout6),.dout(pre_freq[23:20])); cnt10 u7(.clock(clock0),.rst(rst),.cin(cout6),.cout(cout7),.dout(pre_freq[27:24])); cnt10 u8(.clock(clock0),.rst(rst),.cin(cout7),.cout(),.dout(pre_freq[31:28]));//数码管显示模块scan_led u9(.clk_1k(clk_scan),.d(freq_result),.dig(dig),.seg(seg)); endmodulemodule cnt10(clock,rst,cin,cout,dout); //10 进制计数器input clock; //计数时钟input cin; //进位输入input rst; //复位信号output cout; //进位输出output[3:0] dout; //计数输出reg[3:0] counter; //寄存器assign dout = counter;assign cout = cin && (counter >= 4'd9); //进位输出always @(posedge clock or posedge rst)beginif(rst)counter <= 4'd0; //计数器复位else if(cin) //进位输入beginif(cout)counter <= 4'd0;elsecounter <= counter + 1'b1;endendendmodulemodule scan_led(clk_1k,d,dig,seg);input clk_1k;input [31:0] d; //输入要显示的数据output [7:0] dig; //数码管选择输出引脚output [7:0] seg; //数码管段输出引脚reg [7:0] seg_r; //定义数码管输出寄存器reg [7:0] 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)beginif(d<10)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]; //第八个数码管endcasecase(count) //选择数码管显示位3'd0:dig_r=8'b; //选择第一个数码管显示3'd1:dig_r=8'b; //选择第二个数码管显示3'd2:dig_r=8'b; //选择第三个数码管显示3'd3:dig_r=8'b; //选择第四个数码管显示3'd4:dig_r=8'b; //选择第五个数码管显示3'd5:dig_r=8'b; //选择第六个数码管显示3'd6:dig_r=8'b; //选择第七个数码管显示3'd7:dig_r=8'b; //选择第八个数码管显示endcaseendif(d>10&d<100)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];endcasecase(count)3'd1:dig_r=8'b;3'd2:dig_r=8'b;3'd3:dig_r=8'b;3'd4:dig_r=8'b;3'd5:dig_r=8'b;3'd6:dig_r=8'b;3'd7:dig_r=8'b;endcaseendif(d>100&d<1000)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];endcasecase(count)3'd0:dig_r=8'b;3'd1:dig_r=8'b;3'd2:dig_r=8'b;3'd3:dig_r=8'b;3'd4:dig_r=8'b;3'd5:dig_r=8'b;3'd6:dig_r=8'b;endcaseendif(d>1000&d<10000) 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];endcasecase(count)3'd0:dig_r=8'b;3'd1:dig_r=8'b;3'd2:dig_r=8'b;3'd3:dig_r=8'b;3'd4:dig_r=8'b;3'd5:dig_r=8'b;3'd6:dig_r=8'b;3'd7:dig_r=8'b;endcaseendif(d>10000&d<)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];endcasecase(count)3'd0:dig_r=8'b;3'd1:dig_r=8'b;3'd2:dig_r=8'b;3'd3:dig_r=8'b;3'd4:dig_r=8'b;3'd5:dig_r=8'b;3'd6:dig_r=8'b;3'd7:dig_r=8'b;endcaseendif(d>&d<)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];endcasecase(count)3'd0:dig_r=8'b;3'd1:dig_r=8'b;3'd2:dig_r=8'b;3'd3:dig_r=8'b;3'd4:dig_r=8'b;3'd5:dig_r=8'b;3'd6:dig_r=8'b;3'd7:dig_r=8'b;endcaseendif(d>&d<)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];endcasecase(count)3'd0:dig_r=8'b;3'd1:dig_r=8'b;3'd2:dig_r=8'b;3'd3:dig_r=8'b;3'd4:dig_r=8'b;3'd5:dig_r=8'b;3'd6:dig_r=8'b;3'd7:dig_r=8'b;endcaseendif(d>)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];endcasecase(count)3'd0:dig_r=8'b;3'd1:dig_r=8'b;3'd2:dig_r=8'b;3'd3:dig_r=8'b;3'd4:dig_r=8'b;3'd5:dig_r=8'b;3'd6:dig_r=8'b;3'd7:dig_r=8'b;endcaseendendalways @(disp_dat)begincase(disp_dat) //七段译码4'h0:seg_r=8'hc0; //显示04'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。

相关文档
最新文档