第一篇:基于FPGA的數(shù)字頻率計(jì)設(shè)計(jì)報(bào)告
電子技術(shù)綜合試驗(yàn)實(shí)驗(yàn)報(bào)告
班級(jí):測(cè)控一班
學(xué)號(hào):2907101002
姓名:李大帥 指導(dǎo)老師:李穎
基于FPGA的數(shù)字頻率計(jì)設(shè)計(jì)報(bào)告
一、系統(tǒng)整體設(shè)計(jì)
設(shè)計(jì)要求:
1、被測(cè)輸入信號(hào):方波
2、測(cè)試頻率范圍為:10Hz~100MHz
3、量程分為三檔:第一檔:閘門時(shí)間為1S時(shí),最大讀數(shù)為999.999KHz
第二檔:閘門時(shí)間為0.1S時(shí),最大讀數(shù)為9999.99KHz
第三檔:閘門時(shí)間為0.01S時(shí),最大讀數(shù)為99999.9KHz。
4、顯示工作方式:a、用六位BCD七段數(shù)碼管顯示讀數(shù)。
b、采用記憶顯示方法
c、實(shí)現(xiàn)對(duì)高位無(wú)意義零的消隱。
系統(tǒng)設(shè)計(jì)原理:
所謂“頻率”,就是周期性信號(hào)在單位時(shí)間(1秒)內(nèi)變化的次數(shù)。若在一定的時(shí)間間隔T內(nèi)計(jì)數(shù),計(jì)得某周期性信號(hào)的重復(fù)變化次數(shù)為N,則該信號(hào)的頻率可表達(dá)為:f = N / T.基于這一原理我們可以使用單位時(shí)間內(nèi)對(duì)被測(cè)信號(hào)進(jìn)行計(jì)數(shù)的方法求得對(duì)該信號(hào)的頻率測(cè)量,具體實(shí)現(xiàn)過(guò)程簡(jiǎn)述如下: 首先,將被測(cè)信號(hào)①(方波)加到閘門的輸入端。由一個(gè)高穩(wěn)定的石英振蕩器和一系列數(shù)字分頻器組成了時(shí)基信號(hào)發(fā)生器,它輸出時(shí)間基準(zhǔn)(或頻率基準(zhǔn))信號(hào)③去控制門控電路形成門控信號(hào)④,門控信號(hào)的作用時(shí)間T是非常準(zhǔn)確的(由石英振蕩器決定)。門控信號(hào)控制閘門的開與閉,只有在閘門開通的時(shí)間內(nèi),方波脈沖②才能通過(guò)閘門成為被計(jì)數(shù)的脈沖⑤由計(jì)數(shù)器計(jì)數(shù)。
閘門開通的時(shí)間稱為閘門時(shí)間,其長(zhǎng)度等于門控信號(hào)作用時(shí)間T。比如,時(shí)間基準(zhǔn)信號(hào)的重復(fù)周期為1S,加到閘門的門控信號(hào)作用時(shí)間T亦準(zhǔn)確地等于1S,即閘門的開通時(shí)間——“閘門時(shí)間”為1S。在這一段時(shí)間內(nèi),若計(jì)數(shù)器計(jì)得N=100000個(gè)數(shù),根據(jù)公式f = N / T,那么被測(cè)頻率就是100000Hz。如果計(jì)數(shù)式頻率計(jì)的顯示器單位為“KHz”,則顯示100.000KHz,即小數(shù)點(diǎn)定位在第三位。不難設(shè)想,若將閘門時(shí)間設(shè)為T=0.1S,則計(jì)數(shù)值為10000,這時(shí),顯示器的小數(shù)點(diǎn)只要根據(jù)閘門時(shí)間T的改變也隨之自動(dòng)往右移動(dòng)一位(自動(dòng)定位),那么,顯示的結(jié)果為100.00Khz。在計(jì)數(shù)式數(shù)字頻率計(jì)中,通過(guò)選擇不同的閘門時(shí)間,可以改變頻率計(jì)的測(cè)量范圍和測(cè)量精度。
系統(tǒng)單元模塊劃分: 1)分頻器,將產(chǎn)生用于計(jì)數(shù)控制的時(shí)鐘分別為1HZ,10HZ,100HZ脈沖和1KHZ的用于七段顯示數(shù)碼管掃描顯示的掃描信號(hào)。
2)閘門選擇器,用于選擇不同的閘門時(shí)間以及產(chǎn)生后續(xù)的小數(shù)點(diǎn)的顯示位置。3)門控電路,產(chǎn)生用于計(jì)數(shù)的使能控制信號(hào),清零信號(hào)以及鎖存器鎖存信號(hào)。4)計(jì)數(shù)器,用于對(duì)輸入的待測(cè)信號(hào)進(jìn)行脈沖計(jì)數(shù),計(jì)數(shù)輸出。
5)鎖存器,用于對(duì)計(jì)數(shù)器輸出數(shù)據(jù)的鎖存,便于后續(xù)譯碼顯示電路的對(duì)數(shù)據(jù)進(jìn)行記憶顯示,同時(shí)避免計(jì)數(shù)器清零信號(hào)對(duì)數(shù)據(jù)產(chǎn)生影響。
6)譯碼顯示,用于產(chǎn)生使七段顯示數(shù)碼管的掃描數(shù)字顯示,小數(shù)點(diǎn)顯示的輸出信號(hào),同時(shí)對(duì)高位的無(wú)意義零進(jìn)行消隱。
二、單元電路設(shè)計(jì)
1、分頻器:
該電路將產(chǎn)生四個(gè)不同頻率的信號(hào)輸出,因?yàn)殡娐钒迳辖o出了一個(gè)48MHZ的晶振,所以我們只需要對(duì)48MHZ的信號(hào)進(jìn)行適當(dāng)分頻即可得到我們所需的四個(gè)不同頻率的信號(hào)輸出,我們?cè)O(shè)計(jì)一個(gè)輸入為48MHZ,有四個(gè)輸出端分別為1HZ,10HZ和100HZ,1KHZ的分頻器,原程序如下:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity fenpinqi is Port(clk : in STD_LOGIC;clkout1 : out STD_LOGIC;clkout10 : out STD_LOGIC;clkout100 : out STD_LOGIC;clkout1K : out STD_LOGIC);end fenpinqi;
architecture Behavioral of fenpinqi is signal cnt1:integer range 1 to 24000000;signal cnt10:integer range 1 to 2400000;signal cnt100:integer range 1 to 240000;signal cnt1K:integer range 1 to 24000;signal c1:std_logic;signal c2:std_logic;signal c3:std_logic;signal c4:std_logic;begin process(clk)is begin if clk'event and clk='1' then if cnt1<24000000 then
--對(duì)cnt1進(jìn)行計(jì)數(shù),當(dāng)cnt1未計(jì)滿后對(duì)其進(jìn)行加1 cnt1<=cnt1+1;elsif cnt1=24000000 then
--cnt1計(jì)滿后對(duì)其進(jìn)行賦一,并且令c1進(jìn)行翻轉(zhuǎn),然后將c1的值賦給clkout1
c1<=not c1;--由于48MHZ的的信號(hào),前一半的時(shí)候c1為0,則后一半是為1,就完成了對(duì)信號(hào)進(jìn)行分頻,產(chǎn)生了1HZ的信號(hào) cnt1<=1;end if;end if;end process;process(clk)is begin if clk'event and clk='1' then--方法同上
if cnt10<2400000 then cnt10<=cnt10+1;elsif cnt10=2400000 then c2<=not c2;
cnt10<=1;
end if;end if;end process;
process(clk)is begin
if clk'event and clk='1' then
--方法同上
if cnt100<240000 then
cnt100<=cnt100+1;
elsif cnt100=240000 then
c3<=not c3;
cnt100<=1;
end if;end if;end process;
process(clk)is begin
if clk'event and clk='1' then
--方法同上
if cnt1K<24000000 then
cnt1K<=cnt1K+1;
elsif cnt1=24000 then
c4<=not c4;
cnt1K<=1;
end if;end if;end process;clkout1<=c1;clkout10<=c2;clkout100<=c3;clkout1K<=c4;end Behavioral;源文件編寫成功后編譯并生成圖形文件符號(hào)如圖:仿真文件編寫如下:
LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;
ENTITY tbb_vhd IS END tbb_vhd;ARCHITECTURE behavior OF tbb_vhd IS COMPONENT fenpinqi 4
BEGIN
END;uut: fenpinqi PORT MAP(clk => clk,clkout1 => clkout1, clkout10 => clkout10, clkout100 => clkout100, clkout1K => clkout1K);PORT(clk : IN std_logic;
clkout1 : OUT std_logic;clkout10 : OUT std_logic;clkout100 : OUT std_logic;clkout1K : OUT std_logic);END COMPONENT;SIGNAL clk : std_logic := '0';SIGNAL clkout1 : std_logic;SIGNAL clkout10 : std_logic;SIGNAL clkout100 : std_logic;SIGNAL clkout1K : std_logic;tb : PROCESS BEGIN
clk<='0';wait for 10 ps;clk<='1';wait for 10 ps;END PROCESS;對(duì)該模塊進(jìn)行仿真結(jié)果如下:
有上圖可知分頻器工作正常,產(chǎn)生的個(gè)信號(hào)也沒有毛刺,結(jié)果十分理想。
2、閘門選擇器:
在這個(gè)模塊中我們有四個(gè)輸出端和六個(gè)輸入端,其中四個(gè)輸出端中有一個(gè)是頻率輸出端,是通過(guò)三個(gè)閘門選擇開關(guān)輸入和三個(gè)輸入頻率決定的,另外三個(gè)輸出端則是用來(lái)后面的小數(shù)點(diǎn)控制的,而六個(gè)輸入端中的三個(gè)是上面分頻器的三個(gè)輸出1HZ,10HZ和100HZ,另外三個(gè)是電路板上的撥動(dòng)開關(guān),用來(lái)選擇閘門,控制輸出。其原程序和分析如下:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity SELE is Port(SE1 : in STD_LOGIC;
SE10 : in STD_LOGIC;SE100 : in STD_LOGIC;F1HZ : IN STD_LOGIC;F10HZ : IN STD_LOGIC;F100HZ :IN STD_LOGIC;FREF : out STD_LOGIC;DP1 : out STD_LOGIC;DP2 : out STD_LOGIC;DP3 : out STD_LOGIC);end SELE;architecture Behavioral of SELE is begin PROCESS(SE1,SE10,SE100)IS BEGIN IF SE1='1' AND SE10='0' AND SE100='0' THEN
FREF<=F1HZ;--當(dāng)閘門控制在第一檔的時(shí)候,令輸出端輸出1HZ輸入端的輸入,小數(shù)點(diǎn)控制dp1有效,dp2,dp3無(wú)效
DP1<='0';
DP2<='1';DP3<='1';END IF;IF SE1='0' AND SE10='1' AND SE100='0' THEN
FREF<=F10HZ;
--第二檔,輸出為10HZ,dp2有效
DP1<='1';
DP2<='0';DP3<='1';END IF;IF SE1='0' AND SE10='0' AND SE100='1' THEN
FREF<=F100HZ;
--第三檔,輸出為100HZ,dp3有效
DP1<='1';
DP2<='1';DP3<='0';END IF;END PROCESS;end Behavioral;源代碼編寫完成后保存并生成圖形文件符號(hào)如圖:
仿真文件編寫如下:
LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;
ENTITY TTB_vhd IS END TTB_vhd;ARCHITECTURE behavior OF TTB_vhd IS COMPONENT SELE
PORT(SE1 : IN std_logic;
SE10 : IN std_logic;
SE100 : IN std_logic;
F1HZ : IN std_logic;
F10HZ : IN std_logic;
F100HZ : IN std_logic;
FREF : OUT std_logic;
DP1 : OUT std_logic;
DP2 : OUT std_logic;DP3 : OUT std_logic);END COMPONENT;SIGNAL SE1 : std_logic := '1';SIGNAL SE10 : std_logic := '0';SIGNAL SE100 : std_logic := '0';SIGNAL F1HZ : std_logic := '0';SIGNAL F10HZ : std_logic := '0';SIGNAL F100HZ : std_logic := '0';SIGNAL FREF : std_logic;SIGNAL DP1 : std_logic;SIGNAL DP2 : std_logic;SIGNAL DP3 : std_logic;BEGIN uut: SELE PORT MAP(SE1 => SE1,SE10 => SE10,SE100 => SE100,F(xiàn)1HZ => F1HZ,F(xiàn)10HZ => F10HZ,F(xiàn)100HZ => F100HZ,F(xiàn)REF => FREF,DP1 => DP1,DP2 => DP2, DP3 => DP3);
tb : PROCESS BEGIN
F1HZ<='0';FREF<='0';
wait for 100 ns;
F1HZ<='1';FREF<='1';WAIT FOR 100 NS;END PROCESS;END;仿真結(jié)果如圖:
有仿真結(jié)果可知閘門選擇器工作正常,能夠準(zhǔn)確輸出我們所需的信號(hào)。
3、門控信號(hào):
在此模塊中有一個(gè)輸入端和兩個(gè)輸出端,輸入端為上面的閘門選擇器輸出的頻率,兩個(gè)輸出端分別為計(jì)數(shù)器是能控制信號(hào)(鎖存器控制信號(hào)),和計(jì)數(shù)器清零信號(hào)。具體源程序即分析如下:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity CONTROLS is Port(FREF : in STD_LOGIC;GAT : out STD_LOGIC;CLR : out STD_LOGIC);end CONTROLS;
architecture Behavioral of CONTROLS is SIGNAL G1: STD_LOGIC:='0';begin
PROCESS(FREF)IS
BEGIN IF FREF'EVENT AND FREF='1' THEN G1<=NOT G1;--該過(guò)程對(duì)時(shí)鐘信號(hào)又一次進(jìn)行分頻,產(chǎn)生出半個(gè)周期時(shí)間為1的控制信號(hào),作為計(jì)數(shù)使能,保證了時(shí)間的準(zhǔn)確性
END IF;END PROCESS;PROCESS(FREF,G1)IS
BEGIN IF FREF='0' AND G1='0' THEN CLR<='1';--該過(guò)程產(chǎn)生清零信號(hào),即當(dāng)使能信號(hào)為無(wú)效0同時(shí)時(shí)鐘為0時(shí),即在技術(shù)始終無(wú)效半個(gè)時(shí)鐘時(shí)間后,對(duì)計(jì)數(shù)器清零
--清零信號(hào)高電平有效 ELSE CLR<='0';END IF;END PROCESS;GAT<=G1;--將G1賦給gat輸出端,它是計(jì)數(shù)器的使能信號(hào)同時(shí)也是鎖存器的鎖存信號(hào)
end Behavioral;源文件編寫完成后保存編譯并生成圖形文件符號(hào)如圖:
仿真文件代碼如下:
LIBRARY ieee;8
USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;
ENTITY TBCON_vhd IS END TBCON_vhd;ARCHITECTURE behavior OF TBCON_vhd IS
BEGIN
END;tb : PROCESS BEGIN
FREF<='0';WAIT FOR 100 NS;FREF<='1';WAIT FOR 100 NS;uut: CONTROLS PORT MAP(FREF => FREF, GAT => GAT, CLR => CLR);COMPONENT CONTROLS PORT(FREF : IN std_logic;
GAT : OUT std_logic;CLR : OUT std_logic);END COMPONENT;SIGNAL FREF : std_logic := '0';SIGNAL GAT : std_logic;SIGNAL CLR : std_logic;END PROCESS;對(duì)上面的文件進(jìn)行仿真,結(jié)果如下:
由上圖的仿真結(jié)果可知,控制電路工作正常,輸出信號(hào)穩(wěn)定,很理想。同時(shí)我們也可以看出來(lái)該模塊對(duì)分頻器的時(shí)鐘輸出的穩(wěn)定性依賴十分嚴(yán)重,一旦分頻器輸出時(shí)鐘有毛刺,該控制信號(hào)將會(huì)完全的無(wú)效,這也是為什么我知道上面的分頻器設(shè)計(jì)不是最優(yōu)的方案,卻還是采用了上述方法的原因。
4、計(jì)數(shù)器:
該模塊實(shí)現(xiàn)的功能是對(duì)輸入信號(hào)脈沖的計(jì)數(shù),并正確的輸出結(jié)果和溢出。使用上面的門控信號(hào)產(chǎn)生的gat信號(hào)控制計(jì)數(shù)器的使能端,以實(shí)現(xiàn)計(jì)數(shù)器的定時(shí)計(jì)數(shù)。該模塊是使用六個(gè)十進(jìn)制計(jì)數(shù)器同步并聯(lián)而成的,首先我們?cè)O(shè)計(jì)用于并聯(lián)的十進(jìn)制計(jì)數(shù)器,原程序如下:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;9
entity CNT10 is Port(CLK : in STD_LOGIC;CLR : in STD_LOGIC;
ENA : in STD_LOGIC;CQ : out STD_LOGIC_VECTOR(3 downto 0);CO : out STD_LOGIC);end CNT10;
architecture Behavioral of CNT10 is SIGNAL CQI: STD_LOGIC_VECTOR(3 DOWNTO 0):=“0000”;
--定義中間信號(hào)CQI,用于數(shù)據(jù)輸出的循環(huán)計(jì)數(shù)
begin
PROCESS(CLK,CLR)IS
end Behavioral;
BEGIN IF CLR='1' THEN CQI<=“0000”;
--當(dāng)CLR清零信號(hào)有效時(shí)使輸出為0000,無(wú)效時(shí)進(jìn)行下述操作--對(duì)時(shí)鐘進(jìn)行計(jì)數(shù) ELSIF CLK'EVENT AND CLK='1' THEN
IF ENA='1' THEN
--判斷使能信號(hào),有效則進(jìn)行計(jì)數(shù),否則不作處理
--數(shù)據(jù)0~9循環(huán),計(jì)滿后重新回到0 IF CQI=“1001” THEN CQI<=“0000”;ELSE CQI<=CQI+'1';END IF;END IF;END IF;END PROCESS;CO <= '1' when ena = '1' and cqi = 9 else '0';CQ<=CQI;
--進(jìn)位信號(hào),最高位的僅為信號(hào)作為計(jì)數(shù)的溢出信號(hào)
--當(dāng)且僅當(dāng)使能有效且計(jì)數(shù)為9時(shí)產(chǎn)生進(jìn)位信號(hào),進(jìn)位信號(hào)1有效,同步并聯(lián)時(shí)連高位的使能端
文件編寫完成后保存編譯生成圖形文件符號(hào),如上圖:
創(chuàng)建圖形文件cnt6并按照下圖進(jìn)行連接,保存后編譯生成圖形文件符號(hào)如圖:
仿真文件代碼如下:
LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;
ENTITY TBCNT10_vhd IS END TBCNT10_vhd;ARCHITECTURE behavior OF TBCNT10_vhd IS
COMPONENT CNT10 PORT(CLK : IN std_logic;
CLR : IN std_logic;ENA : IN std_logic;CQ : OUT std_logic_vector(3 downto 0);CO : OUT std_logic);END COMPONENT;SIGNAL CLK : std_logic := '0';SIGNAL CLR : std_logic := '0';SIGNAL ENA : std_logic := '1';SIGNAL CQ : std_logic_vector(3 downto 0);SIGNAL CO : std_logic;BEGIN
END;tb : PROCESS BEGIN
CLK<='0';wait for 100 ns;CLK<='1';WAIT FOR 100 NS;uut: CNT10 PORT MAP(CLK => CLK, CLR => CLR, ENA => ENA, CQ => CQ, CO => CO);END PROCESS;仿真結(jié)果如圖:
如仿真結(jié)果我們可以看出,該模塊運(yùn)行正常,計(jì)數(shù)穩(wěn)定,結(jié)果十分理想。
5、鎖存器:
由于前面的計(jì)數(shù)器的輸出為六組四位二進(jìn)制數(shù)和一個(gè)溢出信號(hào),所以我們使用的鎖存器也使用六個(gè)四位鎖存器和一個(gè)一位鎖存器。鎖存器使用下降沿鎖存,即當(dāng)計(jì)數(shù)器的使能信號(hào)變?yōu)闊o(wú)效的一瞬間我們令鎖存器將數(shù)據(jù)鎖存。四位鎖存器的原代碼如下:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity LATCH4 is Port(CLK : in STD_LOGIC;DIN : in STD_LOGIC_VECTOR(3 downto 0);QOU : out STD_LOGIC_VECTOR(3 downto 0));end LATCH4;architecture Behavioral of LATCH4 is begin
PROCESS(CLK,DIN)IS
BEGIN
IF CLK'EVENT AND CLK='0' THEN--當(dāng)時(shí)鐘信號(hào)下降沿時(shí),實(shí)現(xiàn)鎖存
QOU<=DIN;
END IF;END PROCESS;end Behavioral;上述文件編寫完成后保存編譯生成圖形文件符號(hào)如圖: 再編寫一位鎖存器,源程序代碼如下:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity LATCH1 is Port(CLK : in STD_LOGIC;DIN : in STD_LOGIC_VECTOR;QOU : out STD_LOGIC_VECTOR);end LATCH1;architecture Behavioral of LATCH1 is begin
PROCESS(CLK,DIN)IS
BEGIN
IF CLK'EVENT AND CLK='0' THEN--當(dāng)時(shí)鐘信號(hào)下降沿時(shí),實(shí)現(xiàn)鎖存
QOU<=DIN;
END IF;END PROCESS;end Behavioral;
文件編寫完成后保存編譯生成圖形文件符號(hào),如圖:
鎖存完成后有六組四位二進(jìn)制數(shù)和一個(gè)一位二進(jìn)制數(shù),所以我們隊(duì)總線進(jìn)行了合并,即將六組四位數(shù)合并成一個(gè)二十四位數(shù),合并程序如下:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity ADVOCATES is Port(S0 : in STD_LOGIC_VECTOR(3 downto 0);S1 : in STD_LOGIC_VECTOR(3 downto 0);S2 : in STD_LOGIC_VECTOR(3 downto 0);S3 : in STD_LOGIC_VECTOR(3 downto 0);S4 : in STD_LOGIC_VECTOR(3 downto 0);S5 : in STD_LOGIC_VECTOR(3 downto 0);S6 : out STD_LOGIC_VECTOR(23 downto 0));
end ADVOCATES;
architecture Behavioral of ADVOCATES is
begin S6(23 DOWNTO 20)<=S0;S6(19 DOWNTO 16)<=S1;S6(15 DOWNTO 12)<=S2;S6(11 DOWNTO 8)<=S3;S6(7 DOWNTO 4)<=S4;S6(3 DOWNTO 0)<=S5;end Behavioral;--將總線的對(duì)應(yīng)位進(jìn)行連接
文件編寫完成后保存編譯生成圖形文件符號(hào),如圖:
創(chuàng)建該模塊的頂層圖形文件LAT.sch將上述個(gè)文件按照如圖所示連接,保存編譯生成圖形文件符號(hào)如圖:
該模塊的輸入輸出簡(jiǎn)單,無(wú)需仿真。
6、譯碼顯示:
該模塊實(shí)現(xiàn)的是對(duì)鎖存器鎖存的數(shù)據(jù)進(jìn)行處理并顯示輸出,以及小數(shù)點(diǎn)的不同閘門的輸出顯示,以及電路板上七段顯示譯碼管的掃描信號(hào)輸出。其中對(duì)鎖存數(shù)據(jù)的處理包括溢出有效時(shí)的數(shù)據(jù)消除,和對(duì)高位無(wú)意義零的自動(dòng)消隱。首先我們編寫小數(shù)點(diǎn)控制的源文件代碼:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity POINTCON is Port(SE1 : in STD_LOGIC;SE10 : in STD_LOGIC;SE100 : in STD_LOGIC;SEL : in STD_LOGIC_VECTOR(2 downto 0);DP : out STD_LOGIC);end POINTCON;
architecture Behavioral of POINTCON is begin
PROCESS(SE1,SE10,SE100,SEL)IS
BEGIN
IF SE1='1' AND SE10='0' AND SE100='0' AND SEL=“011” THEN DP<='0';
--當(dāng)為第一檔時(shí),令第四位的數(shù)碼管的小數(shù)點(diǎn)點(diǎn)亮,其他的不亮
ELSIF SE1='0' AND SE10='1' AND SE100='0' AND SEL=“010” THEN DP<='0';
--第二檔時(shí),第三位的數(shù)碼管小數(shù)點(diǎn)點(diǎn)亮
ELSIF SE1='0' AND SE10='0' AND SE100='1' AND SEL=“001” THEN DP<='0';
--第三檔時(shí),第二位的小數(shù)點(diǎn)點(diǎn)亮--不符合上述三檔時(shí),小數(shù)點(diǎn)全部消隱 ELSE DP<='1';END IF;END PROCESS;end Behavioral;編寫完成后保存編譯生成圖形文件符號(hào)如圖:
再編寫用于數(shù)碼管掃描顯示的的位選信號(hào)生成文件,其代碼如下:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity CTRLS is Port(CLK : in STD_LOGIC;SEL : out STD_LOGIC_VECTOR(2 downto 0));end CTRLS;
architecture Behavioral of CTRLS is SIGNAL CNT: STD_LOGIC_VECTOR(2 DOWNTO 0):=“000”;begin PROCESS(CLK)IS 14
BEGIN IF CLK'EVENT AND CLK='1' THEN
--接入1KHZ的時(shí)鐘信號(hào),使CNT進(jìn)行循環(huán)計(jì)數(shù),從000到101
IF CNT=”101” THEN CNT<=”000”;--計(jì)滿則清零,不滿則加一
ELSE CNT<=CNT+’1’;END IF;END IF;END PROCESS;SEL<=CNT;--將CNT信號(hào)賦給SEL輸出
end Behavioral;文件編寫完成后保存編譯生成圖形文件符號(hào)如圖:
再編寫使高位無(wú)意義零自動(dòng)消隱功能的的文件,源程序代碼如下:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity DSELE is Port(DP1: IN STD_LOGIC;DP2: IN STD_LOGIC;DIN : in STD_LOGIC_VECTOR(23 downto 0);QOU : out STD_LOGIC_VECTOR(23 downto 0));end DSELE;architecture Behavioral of DSELE is begin PROCESS(DP1,DP2,DIN)IS
BEGIN
IF DP1='0' AND DP2='1' THEN
IF DIN(23 DOWNTO 20)=“0000” THEN
QOU(23 DOWNTO 20)<=“1111”;
QOU(19 DOWNTO 0)<=DIN(19 DOWNTO 0);
END IF;
IF DIN(23 DOWNTO 20)=“0000” AND DIN(19 DOWNTO 16)=“0000” THEN
QOU(23 DOWNTO 20)<=“1111”;
QOU(19 DOWNTO 16)<=“1111”;
QOU(15 DOWNTO 0)<=DIN(15 DOWNTO 0);
END IF;
END IF;
IF DP1='1' AND DP2='0' THEN
IF DIN(23 DOWNTO 20)=“0000” THEN
QOU(23 DOWNTO 20)<=“1111”;
QOU(19 DOWNTO 0)<=DIN(19 DOWNTO 0);
END IF;
IF DIN(23 DOWNTO 20)=“0000” AND DIN(19 DOWNTO 16)=“0000” THEN
QOU(23 DOWNTO 20)<=“1111”;QOU(19 DOWNTO 16)<=“1111”;
THEN
QOU(23 DOWNTO 20)<=“1111”;QOU(19 DOWNTO 16)<=“1111”;QOU(15 DOWNTO 12)<=“1111”;QOU(11 DOWNTO 8)<=“1111”;QOU(7 DOWNTO 0)<=DIN(7 DOWNTO 0);
QOU(15 DOWNTO 0)<=DIN(15 DOWNTO 0);END IF;IF DIN(23 DOWNTO 20)=“0000” AND DIN(19 DOWNTO 16)=“0000” AND DIN(15 DOWNTO 12)=“0000” THEN
QOU(23 DOWNTO 20)<=“1111”;QOU(19 DOWNTO 16)<=“1111”;QOU(15 DOWNTO 12)<=“1111”;QOU(11 DOWNTO 0)<=DIN(11 DOWNTO 0);END IF;END IF;IF DP1='1' AND DP2='1' THEN
IF DIN(23 DOWNTO 20)=“0000” THEN QOU(23 DOWNTO 20)<=“1111”;QOU(19 DOWNTO 0)<=DIN(19 DOWNTO 0);END IF;IF DIN(23 DOWNTO 20)=“0000” AND DIN(19 DOWNTO 16)=“0000” THEN
QOU(23 DOWNTO 20)<=“1111”;QOU(19 DOWNTO 16)<=“1111”;QOU(15 DOWNTO 0)<=DIN(15 DOWNTO 0);END IF;IF DIN(23 DOWNTO 20)=“0000” AND DIN(19 DOWNTO 16)=“0000” AND DIN(15 DOWNTO 12)=“0000” THEN
QOU(23 DOWNTO 20)<=“1111”;QOU(19 DOWNTO 16)<=“1111”;QOU(15 DOWNTO 12)<=“1111”;QOU(11 DOWNTO 0)<=DIN(11 DOWNTO 0);END IF;IF DIN(23 DOWNTO 20)=“0000” AND DIN(19 DOWNTO 16)=“0000” AND DIN(15 DOWNTO 12)=“0000” AND DIN(11 DOWNTO 8)=“0000” END IF;END IF;END PROCESS;end Behavioral;該段代碼的編寫的主要原理是首先判斷小數(shù)點(diǎn)的位置,然后對(duì)小數(shù)點(diǎn)前的高位數(shù)從高到低依次進(jìn)行判斷,如果高位為零則將數(shù)據(jù)取反,在后續(xù)譯碼中將不再顯示,從而實(shí)現(xiàn)高位無(wú)意義零的自動(dòng)消隱。代碼編寫完成后保存編譯生成圖形文件符號(hào)如上圖: 然后我們編寫數(shù)據(jù)顯示輸出文件,代碼如下:
library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity DISPLAY1 is 16
Port(SEL : in STD_LOGIC_VECTOR(2 downto 0);
OVERIN : IN STD_LOGIC;
DATAIN : in STD_LOGIC_VECTOR(23 downto 0);SEG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END DISPLAY1;
architecture Behavioral of DISPLAY1 is SIGNAL DATA: STD_LOGIC_VECTOR(3 DOWNTO 0):=“0000”;BEGIN PROCESS(SEL,OVERIN)IS
BEGIN
CASE SEL IS
--對(duì)位選信號(hào)進(jìn)行判斷,對(duì)應(yīng)每一位分別提取數(shù)據(jù)中的不同位置的數(shù)據(jù)賦給中間信號(hào)DATA
WHEN “000”=>DATA<=DATAIN(3 DOWNTO 0);
WHEN “001”=>DATA<=DATAIN(7 DOWNTO 4);
WHEN “010”=>DATA<=DATAIN(11 DOWNTO 8);
WHEN “011”=>DATA<=DATAIN(15 DOWNTO 12);
WHEN “100”=>DATA<=DATAIN(19 DOWNTO 16);
WHEN “101”=>DATA<=DATAIN(23 DOWNTO 20);
WHEN OTHERS=>DATA<=“0000”;
END CASE;
CASE DATA IS
--對(duì)中間信號(hào)DATA進(jìn)行譯碼,SEG為數(shù)碼管的數(shù)據(jù)顯示輸出,從而使不同位置上有不同的數(shù)字顯示
WHEN “0000”=>SEG<=“1000000”;
WHEN “0001”=>SEG<=“1111001”;
WHEN “0010”=>SEG<=“0100100”;
WHEN “0011”=>SEG<=“0110000”;
WHEN “0100”=>SEG<=“0011001”;
WHEN “0101”=>SEG<=“0010010”;
WHEN “0110”=>SEG<=“0000010”;
WHEN “0111”=>SEG<=“1111000”;
WHEN “1000”=>SEG<=“0000000”;
WHEN “1001”=>SEG<=“0010000”;
WHEN OTHERS=>SEG<=“1111111”;
END CASE;
if OVERIN='1' THEN
--判斷溢出,若溢出則令輸出全部不顯示
SEG<=“1111111”;END IF;END PROCESS;end Behavioral;代碼編寫完成后保存編譯生成圖形文件符號(hào)如圖:
建立該模塊的頂層圖形文件DISPLAY.sch,按照下圖連接各元件,保存編譯生成圖形文件符號(hào)如下圖:17
該模塊的輸入數(shù)據(jù)量太大難以仿真,故這里只對(duì)其中的掃描信號(hào)生成文件進(jìn)行仿真,仿真文件代碼如下:
LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;
ENTITY TBCTRLS_vhd IS END TBCTRLS_vhd;ARCHITECTURE behavior OF TBCTRLS_vhd IS
BEGIN
END;uut: CTRLS PORT MAP(CLK => CLK, SEL => SEL);COMPONENT CTRLS PORT(CLK : IN std_logic;
SEL : OUT std_logic_vector(2 downto 0));END COMPONENT;SIGNAL CLK : std_logic := '0';SIGNAL SEL : std_logic_vector(2 downto 0);tb : PROCESS BEGIN
CLK<='0';WAIT FOR 100 NS;CLK<='1';WAIT FOR 100 NS;END PROCESS;結(jié)果如下:
有仿真結(jié)果我們可以看出程序運(yùn)行正常,邏輯上沒有任何問(wèn)題。至此所有的單元電路全部完成。
三、設(shè)計(jì)實(shí)現(xiàn)
1、頂層文件:
創(chuàng)建圖形文件FRYALL.sch,按照下圖連接各模塊生成的圖形文件符號(hào),完成后保存編譯。
2、管腳分配:
由系統(tǒng)的頂層文件可以看到該系統(tǒng)的輸入端共有5個(gè),輸出端有11個(gè),管腳分配文件FRYALL.ucf如下:
NET “CLKIN” LOC = T8;NET “DCLK” LOC = C16;NET “DP” LOC = C11;NET “NECT” LOC = D7;NET “SE1” LOC = L6;NET “SE10” LOC = N5;NET “SE100” LOC = L7;NET “SEG<0>” LOC = B14;NET “SEG<1>” LOC = A13;NET “SEG<2>” LOC = C13;NET “SEG<3>” LOC = C12;NET “SEG<4>” LOC = A12;NET “SEG<5>” LOC = B12;NET “SEG<6>” LOC = A11;NET “SEL<0>” LOC = F8;NET “SEL<1>” LOC = D8;NET “SEL<2>” LOC = E7;19
3、下載過(guò)程:
光標(biāo)移至【Generate Programing File】后單擊鼠標(biāo)右鍵,然后單擊【Properties】在打開的對(duì)話框的左側(cè)欄選中【Configuration Options】將右側(cè)的Unused IOB Pins這一項(xiàng)改為Pull Up,單擊OK。在界面的左下角雙擊【 Generate Programing File】,軟件將自動(dòng)對(duì)整個(gè)系統(tǒng)進(jìn)行編譯并生成可執(zhí)行文件FRYALL.bit。將彈出的對(duì)話框關(guān)掉,雙擊【 Generate Prom, ACE,or JTAG File】在彈出的對(duì)話框中點(diǎn)擊Finish,在隨后出現(xiàn)的對(duì)話框中選擇FRYALL.bit,然后點(diǎn)擊打開,在隨后的對(duì)話框中點(diǎn)擊Bypass。右鍵單擊左邊圖標(biāo)選擇Program,在隨后的對(duì)話框中單擊OK,文件將自動(dòng)下載到開發(fā)板上,成功后,接入函數(shù)發(fā)生器進(jìn)行測(cè)試。
四、測(cè)試結(jié)果及結(jié)論
經(jīng)過(guò)了前三步,最后我們將所完成的工程下載到了板子上,連接好函數(shù)發(fā)生器,并設(shè)定好了函數(shù)發(fā)生器的輸出信號(hào)電平(5Vpp),就可以進(jìn)行使用了。
最后結(jié)果顯示程序工作正常,讀數(shù)清晰穩(wěn)定,完全符合開始時(shí)的要求。
誤差分析:
我將函數(shù)發(fā)生器的頻率調(diào)節(jié)到999,999HZ時(shí),頻率計(jì)不顯示,即產(chǎn)生了計(jì)數(shù)溢出,然后我進(jìn)行了進(jìn)一步的調(diào)節(jié),將函數(shù)發(fā)生器的頻率調(diào)節(jié)到999,997時(shí)讀書顯示為999.999,單位為KHZ。由此可知相對(duì)誤差為±0.0002%,誤差很小。所以本次實(shí)驗(yàn)圓滿成功。
通過(guò)對(duì)數(shù)字頻率計(jì)的設(shè)計(jì)實(shí)現(xiàn),我深入的學(xué)習(xí)了ise軟件的使用,VHDL語(yǔ)言的編寫規(guī)范,語(yǔ)法結(jié)構(gòu)等。在本次試驗(yàn)中我回顧了在《數(shù)字電路》課程中學(xué)過(guò)的關(guān)于數(shù)字電路的設(shè)計(jì)的部分,了解了VHDL和Verilog語(yǔ)言的區(qū)別與聯(lián)系,以及它們的優(yōu)缺點(diǎn),以及它們主要針對(duì)的設(shè)計(jì)對(duì)象。我覺得我通過(guò)本次試驗(yàn)學(xué)會(huì)了很多。
第二篇:基于FPGA的簡(jiǎn)易數(shù)字頻率計(jì)
EDA 簡(jiǎn)易數(shù)字頻計(jì) 設(shè)計(jì)性實(shí)驗(yàn) 2008112020327 ** 電子信息科學(xué)與技術(shù)
物電
電工電子中心2009年5月繪制
2008.6.10 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
簡(jiǎn)易數(shù)字頻率計(jì)設(shè)計(jì)
一.任務(wù)解析
通過(guò)對(duì)選擇題的分析,認(rèn)為該簡(jiǎn)易數(shù)字頻率計(jì)應(yīng)該能達(dá)到以下要求: 1. 準(zhǔn)確測(cè)出所給的方波信號(hào)的頻率(1HZ以上的信號(hào))。2. 在顯示環(huán)節(jié)上,應(yīng)能實(shí)現(xiàn)高位清零功能。3. 另外還有一個(gè)總的清零按鍵。
二.方案論證
本實(shí)驗(yàn)中所做的頻率計(jì)的原理圖如上圖所示。即在一個(gè)1HZ時(shí)鐘信號(hào)的控制下,在每個(gè)時(shí)鐘的上升沿將計(jì)數(shù)器的數(shù)據(jù)送到緩沖器中保存起來(lái),再送數(shù)碼管中顯示出來(lái)。
第2頁(yè),共11頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
在本實(shí)驗(yàn)中,用到過(guò)幾中不同的方案,主要是在1HZ時(shí)鐘信號(hào)的選擇和計(jì)數(shù)器清零環(huán)節(jié)上:
1. 在實(shí)驗(yàn)設(shè)計(jì)過(guò)程中,考濾到兩種1HZ時(shí)鐘信號(hào)其波形如下圖所
對(duì)于上術(shù)的兩種波形,可以調(diào)整各項(xiàng)參數(shù)來(lái)產(chǎn)生兩種1HZ時(shí)鐘信號(hào)。最后通過(guò)實(shí)驗(yàn)的驗(yàn)證發(fā)現(xiàn)第二種波形對(duì)于控制緩沖器獲得數(shù)據(jù)和控制計(jì)數(shù)器清零更易實(shí)現(xiàn)。并且,用第二種波形做為時(shí)鐘信號(hào),可以在很短的高電平時(shí)間內(nèi)對(duì)計(jì)數(shù)器清零,在低電平時(shí)間內(nèi)讓計(jì)數(shù)器計(jì)數(shù),從面提高測(cè)量的精度。而用第一種波形則不易實(shí)現(xiàn)這個(gè)過(guò)程。
2.在計(jì)數(shù)器的清零過(guò)程中,也有兩個(gè)方案,分別是能通過(guò)緩沖器反回一個(gè)清零信號(hào),另一個(gè)是在時(shí)鐘的控制下進(jìn)行清零。最終通過(guò)實(shí)驗(yàn)發(fā)現(xiàn),用時(shí)鐘進(jìn)行清零更易實(shí)現(xiàn)。因?yàn)槿绻镁彌_器反回一個(gè)清零信號(hào),有一個(gè)清零信號(hào)歸位問(wèn)題,即當(dāng)緩沖器反回一個(gè)低電平清零信號(hào)時(shí),計(jì)數(shù)器實(shí)現(xiàn)清零,但不好控制讓緩器沖的清零信號(hào)又回到高電平,否則計(jì)數(shù)器就一直處于清零狀態(tài)面不能正常計(jì)數(shù)了。
三.實(shí)驗(yàn)步驟
通過(guò)上分析后,實(shí)驗(yàn)分為以下幾步:
1.1HZ時(shí)鐘信號(hào)的產(chǎn)生(產(chǎn)生該信號(hào)的模塊如下):
module ones(clk,clkout);input clk;output clkout;parameter parameter N=24000000;n=24;
第3頁(yè),共11頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
reg [n:0]cnt;reg clkout;
always @(posedge clk)begin if(cnt==N)else end endmodule begin cnt=0;
clkout=1;clkout=0;end
end begin cnt=cnt+1;最終產(chǎn)生的信號(hào)的波形:
2. 計(jì)數(shù)模塊。其主要公能是在每個(gè)被測(cè)信號(hào)的上升沿自動(dòng)加一,并且有一個(gè)清零信號(hào)的輸入端,在1HZ時(shí)鐘信號(hào)的高電平時(shí)間里進(jìn)行清零。模塊如下:
module count_99999999(sign,clr,b0,b1,b2,b3,b4,b5,b6,b7);input sign,clr;output [3:0]b0,b1,b2,b3,b4,b5,b6,b7;reg [3:0]b0,b1,b2,b3,b4,b5,b6,b7;always @(posedge sign or posedge clr)
if(clr)begin b0=0;b1=0;b2=0;b3=0;b4=0;b5=0;b6=0;b7=0;end else begin if(b0<9)b0=b0+1;else begin b0=0;if(b1<9)
第4頁(yè),共11頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
b1=b1+1;else begin b1=0;if(b2<9)b2=b2+1;else begin
b2=0;
if(b3<9)
b3=b3+1;
else begin
b3=0;
if(b4<9)
b4=b4+1;
else begin
b4=0;
if(b5<9)
b5=b5+1;
else begin
b5=0;
if(b6<9)
b6=b6+1;
else begin
b6=0;
if(b7<9)
b7=b7+1;
else b7=0;
第5頁(yè),共11頁(yè)
湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
end
end
end
end
end
end end
end endmodule 如果要訪真該模塊,要設(shè)定較長(zhǎng)的訪真時(shí)間,故在此不進(jìn)行軟件訪真,只在實(shí)驗(yàn)箱上進(jìn)行實(shí)驗(yàn)。
3. 數(shù)據(jù)緩沖模塊。在每個(gè)秒級(jí)門控信號(hào)的上升沿接收計(jì)數(shù)器的數(shù)據(jù),并送到驅(qū)動(dòng)八個(gè)數(shù)碼管的顯示模塊里。
module fre_count(clk,clr,b0,b1,b2,b3,b4,b5,b6,b7,a0,a1,a2,a3,a4,a5,a6,a7);input clk,clr;input [3:0]b0,b1,b2,b3,b4,b5,b6,b7;output [3:0]a0,a1,a2,a3,a4,a5,a6,a7;reg clro;reg [3:0]a0,a1,a2,a3,a4,a5,a6,a7;always @(posedge clk or negedge clr)//clk應(yīng)該為1HZ的信號(hào)// begin if(!clr)
begin
a0<=0;a1<=0;a2<=0;a3<=0;a4<=0;a5<=0;a6<=0;a7<=0;end else
第6頁(yè),共11頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
end begin a0<=b0;a1<=b1;a2<=b2;a3<=b3;a4<=b4;a5<=b5;a6<=b6;a7<=b7;end endmodule 在此模塊中用了到了<=阻塞賦值的方式。
4.編寫控制高位清零的模塊,利用在掃描模塊中控制SEL的值來(lái)實(shí)現(xiàn)高位清零。即先從高位開始判斷,當(dāng)只有個(gè)位有數(shù)據(jù)時(shí),SEL只能等于0,當(dāng)只有個(gè)位和十位有數(shù)據(jù)時(shí),SEL要小于1,依此類推,實(shí)現(xiàn)高位清零功能。module scan(clk,a1,a2,a3,a4,a5,a6,a7,sel);input clk;input [3:0]a1,a2,a3,a4,a5,a6,a7;output [2:0]sel;reg [2:0]sel;always @(posedge clk)if({a1,a2,a3,a4,a5,a6,a7}==0000000)sel=0;else if({a2,a3,a4,a5,a6,a7}==000000)if(sel<1)sel=sel+1;else sel=0;else if({a3,a4,a5,a6,a7}==00000)if(sel<2)sel=sel+1;else sel=0;else if({a4,a5,a6,a7}==0000)if(sel<3)sel=sel+1;
第7頁(yè),共11頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
else sel=0;else if({a5,a6,a7}==000)if(sel<4)sel=sel+1;else sel=0;else if({a6,a7}==00)if(sel<5)sel=sel+1;else sel=0;else if({a7}==0)if(sel<6)sel=sel+1;else sel=0;else sel=sel+1;endmodule 5.上述三個(gè)模塊為本次實(shí)驗(yàn)的主要模塊。除此,還用到了,譯碼,數(shù)據(jù)選擇器模塊。相應(yīng)的模塊代碼省略。
6.所有模塊都寫完后,就是寫頂層文件。
module top(clk,clr,sig_in,a,b,c,d,e,f,g,dp,sel);input clk,clr,sig_in;output [2:0]sel;output a,b,c,d,e,f,g,dp;
wire clk1,clk2,clk3;wire [2:0]sel_sign;wire [3:0] QA,QB,QC,QD,QE,QF,QG,QH;wire [3:0] b0_o,b1_o,b2_o,b3_o,b4_o,b5_o,b6_o,b7_o;wire [3:0] org_data;
第8頁(yè),共11頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
assign sel=sel_sign;assign clk3=clk;
fre_count frequence(.clk(clk2),.clr(clr),.b0(b0_o),.b1(b1_o),.b2(b2_o),.b3(b3_o),.b4(b4_o),.b5(b5_o),.b6(b6_o),.b7(b7_o),.a0(QA),.a1(QB),count_99999999 mycounter(.sign(sig_in),.clr(clk2),.b0(b0_o),.b1(b1_o),.a2(QC),.a3(QD),.a4(QE),.a5(QF),.a6(QG),.a7(QH));.b2(b2_o),.b3(b3_o),.b4(b4_o),.b5(b5_o),.b6(b6_o),.b7(b7_o));
clk_div clksource(.clk(clk3),.clko1(clk1));
ones ones_con(.clk(clk3),.clkout(clk2));scan myscan(.clk(clk1),.a1(QB),.a2(QC),.a3(QD),.a4(QE),.a5(QF),.a6(QG),.a7(QF),.sel(sel_sign));mux81 mymux81(.sel(sel_sign),.a(QA),.b(QB),.c(QC),.d(QD),.e(QE),.f(QF),.g(QG),.h(QH),.out(org_data));
第9頁(yè),共11頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
decode3_8 decode(.org(org_data),.a(a),.b(b),.c(c),.d(d),.e(e),.f(f),.g(g),.dp(dp));
endmodule
7. 寫完了全部代碼后,就是器件選擇,分配引腳,下載程序,最后在實(shí)驗(yàn)箱上進(jìn)行實(shí)驗(yàn)。
在實(shí)驗(yàn)的驗(yàn)證過(guò)程中,用到了DDS函數(shù)信號(hào)發(fā)生器,從其TTL輸出端輸出各種不同頻率的方波信號(hào),接入接簡(jiǎn)易頻率計(jì)的被測(cè)信號(hào)輸入端,在八個(gè)數(shù)碼管上顯示出相應(yīng)的測(cè)量結(jié)果。
四.結(jié)果分析
在上述實(shí)驗(yàn)過(guò)程中,我們選取了若干組不同的TTL輸出進(jìn)行測(cè)量,發(fā)現(xiàn)當(dāng)被測(cè)信號(hào)的頻率不小于1HZ時(shí),簡(jiǎn)易頻率計(jì)可以精確的測(cè)出被測(cè)信號(hào)的頻率。但是,當(dāng)被測(cè)信號(hào)小于1HZ時(shí),顯示的測(cè)量結(jié)果在0和1之間跳動(dòng),不穩(wěn)定。分析簡(jiǎn)易頻率計(jì)的結(jié)構(gòu)可知,在如下圖所示波形關(guān)系中,當(dāng)被測(cè)信號(hào)的頻率小于1HZ時(shí),在秒級(jí)門控信號(hào)的一個(gè)周期內(nèi),計(jì)數(shù)器要么能計(jì)數(shù)一次,要么計(jì)數(shù)零次,因而不能準(zhǔn)確的測(cè)出被測(cè)信號(hào)的頻率。
五.經(jīng)驗(yàn)總結(jié)
1.本實(shí)驗(yàn)中的頻率計(jì)由于其在結(jié)構(gòu)上存在缺限,因而在測(cè)量小于1HZ的信號(hào)時(shí),會(huì)有較大的誤碼差,在測(cè)量頻率大于1HZ信號(hào)時(shí),也可能存1HZ誤差,其原因在于如果在一個(gè)秒級(jí)門控信號(hào)的周期內(nèi),被測(cè)信號(hào)的上升沿的個(gè)數(shù)正好
第10頁(yè),共11頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
和其周數(shù)相同,則測(cè)量結(jié)果是準(zhǔn)確的,如果上升沿的個(gè)數(shù)比周期數(shù)多一,則測(cè)量結(jié)果比實(shí)際值大一。
2.提高測(cè)量精度的另一個(gè)關(guān)鍵地方在所產(chǎn)生的秒級(jí)門控信號(hào)的精度。只有所產(chǎn)生的秒級(jí)門控信號(hào)的低電平時(shí)間長(zhǎng)度為嚴(yán)格的一秒時(shí),測(cè)量結(jié)果才會(huì)更精確。由于實(shí)驗(yàn)箱上所使用的晶振不是嚴(yán)格等于24MHZ,因而可用示波器測(cè)出晶振的準(zhǔn)確頻率后,再在parameter
N=24000000;語(yǔ)句中改變N的值。也可以在實(shí)驗(yàn)中逐漸調(diào)整N的值,直到測(cè)量結(jié)果最精確為止。最終我們的實(shí)驗(yàn)中,N的值取的是24000351。
3.對(duì)于高位清零功能的加入,正是儀器設(shè)計(jì)人性化的一個(gè)體現(xiàn)。如果沒有這個(gè)功能,再未顯示數(shù)據(jù)的數(shù)碼管也一直處于工作狀態(tài),一則是對(duì)資源的亂費(fèi),二則是會(huì)減少器件的使用壽命。
第11頁(yè),共11頁(yè)
第三篇:數(shù)字頻率計(jì)設(shè)計(jì)
數(shù)字頻率計(jì)設(shè)計(jì) 1.設(shè)計(jì)任務(wù)
設(shè)計(jì)一簡(jiǎn)易數(shù)字頻率計(jì),其基本要求是:
1)測(cè)量頻率范圍1Hz~10Hz,量程分為4檔,即×1,×10,×100,×1000。2)頻率測(cè)量準(zhǔn)確度?fx??2?10?3.fx3)被測(cè)信號(hào)可以是下弦波、三角波和方波。4)顯示方式為4位十進(jìn)制數(shù)顯示。5)使用EWB進(jìn)行仿真。2.設(shè)計(jì)原理及方案
頻率的定義是單位時(shí)間(1s)內(nèi)周期信號(hào)的變化次數(shù)。若在一定時(shí)間間隔T內(nèi)測(cè)得周期信號(hào)的重復(fù)變化次數(shù)為N,則其頻率為
f=N/T 據(jù)此,設(shè)計(jì)方案框圖如圖1所示。
圖1 數(shù)字頻率計(jì)組成框圖
其基本原理是,被測(cè)信號(hào)ux首先經(jīng)整形電路變成計(jì)數(shù)器所要求的脈沖信號(hào),頻率與被測(cè)信號(hào)的頻率fx相同。時(shí)鐘電路產(chǎn)生時(shí)間基準(zhǔn)信號(hào),分頻后控制計(jì)數(shù)與保持狀態(tài)。當(dāng)其高電平時(shí),計(jì)數(shù)器計(jì)數(shù);低電平時(shí),計(jì)數(shù)器處于保持狀態(tài),數(shù)據(jù)送入鎖存器進(jìn)行鎖存顯示。然后對(duì)計(jì)數(shù)器清零,準(zhǔn)備下一次計(jì)數(shù)。其波形邏輯關(guān)系圖如圖2所示。3.基本電路設(shè)計(jì) 1)整形電路
整形電路是將待測(cè)信號(hào)整形變成計(jì)數(shù)器所要求的脈沖信號(hào)。電路形式采用由555定時(shí)器所構(gòu)成的施密特觸發(fā)器,電路如圖XXX所示。若待測(cè)信號(hào)為三角波,輸入整形電路,設(shè)置分析為瞬態(tài)分析,啟動(dòng)電路,其輸入、輸出波形如圖XXX所示??梢娸敵鰹榉讲?,二者頻率相同。
2)時(shí)鐘產(chǎn)生電路
時(shí)鐘信號(hào)是控制計(jì)數(shù)器計(jì)數(shù)的標(biāo)準(zhǔn)時(shí)間信號(hào),其精度很大程度上決定了頻率計(jì)的頻率測(cè)量精度。當(dāng)要求頻率測(cè)量精度較高時(shí),應(yīng)使用晶體振蕩器通過(guò)分頻獲得。在此頻率計(jì)中,時(shí)鐘信號(hào)采用555定時(shí)器構(gòu)成的多諧振蕩器電路,產(chǎn)生頻率為1Kz的信號(hào),然后再進(jìn)行分頻。多諧振蕩器電路如圖XXX所示。由555定時(shí)器構(gòu)成多諧振蕩器的周期計(jì)算公式為
XXXXXXXXXX 取XXXXXXXXXXXXXX,則得到振蕩頻率為1Kz的負(fù)脈沖,其振蕩波形如圖XXX所示。3)分頻器電路
采用計(jì)數(shù)器構(gòu)成分頻電路,對(duì)1Kz的時(shí)鐘脈沖進(jìn)行分頻,取得不同量程所需要的時(shí)間基準(zhǔn)信號(hào),實(shí)現(xiàn)量程控制。1Kz的時(shí)鐘脈沖,對(duì)其進(jìn)行3次10分頻,每個(gè)10分頻器的輸出信號(hào)頻率分別為100Hz,10Hz,1Hz三種時(shí)間基準(zhǔn)信號(hào)。對(duì)應(yīng)于以1Kz,100Hz,10Hz,1Hz的信號(hào)作為時(shí)間基準(zhǔn)信號(hào)時(shí),相應(yīng)的量程為×1000,×100,×10,×1。
構(gòu)成10分頻帶電路是采用十進(jìn)制計(jì)數(shù)器74LS160實(shí)現(xiàn)的。具體電路及其輸入、輸出波形如圖XXX所示。
(1)T觸發(fā)器
T觸發(fā)器電路是用來(lái)將分頻帶器輸出阻抗的窄脈沖整形為方波,因?yàn)橛?jì)數(shù)器需要用方波來(lái)控制其計(jì)數(shù)/保持狀態(tài)的切換。整形后方波的頻率為頻器輸出信號(hào)頻率的一半,則對(duì)應(yīng)于1Kz,100Kz,10Kz,1Hz的信號(hào),T觸發(fā)器輸出信號(hào)的高電平持續(xù)時(shí)間分別為0.001s,0.01s,0.1s,1s。T觸發(fā)器采用JK觸發(fā)器7473為實(shí)現(xiàn),其電路連接圖及其輸入、輸出波形如圖XXX所示。
(2)單穩(wěn)觸發(fā)器
單穩(wěn)觸發(fā)器用于產(chǎn)生一窄脈沖,以觸發(fā)鎖存器,使計(jì)數(shù)器在計(jì)數(shù)完畢后更新鎖存器數(shù)值。單穩(wěn)觸發(fā)器電路采用555定時(shí)器實(shí)現(xiàn),為了保證系統(tǒng)正常工作,單穩(wěn)電路產(chǎn)生的脈沖寬度不能大于該量程分頻帶器輸出信號(hào)的周期。例如,計(jì)數(shù)器的最大量程是×1000,對(duì)應(yīng)分頻帶器輸出的時(shí)間基準(zhǔn)信號(hào)頻率為1000Hz,周期是1ms。取單穩(wěn)電路輸出脈沖寬度TW=0.1ms。根據(jù)TW=1.1RC,取C=0.01Uf,則R=9.8KΩ,取標(biāo)稱什為10KΩ。單穩(wěn)觸發(fā)器輸入信號(hào)是T觸發(fā)器輸出信號(hào)經(jīng)Rd、Cd組成的微分器將方波變成尖脈沖后加到555定時(shí)器的觸發(fā)器。電路圖及輸入、輸出波形如圖XXX所示。
(3)延遲反相器
延時(shí)反相器的功能是為了得到一個(gè)對(duì)計(jì)數(shù)器清零的信號(hào)。由于計(jì)數(shù)器清零是低電平有效,而且計(jì)數(shù)器清零必須在單穩(wěn)觸發(fā)信號(hào)之后,故延遲反相器是在上述單穩(wěn)電路之后,再加一級(jí)單穩(wěn)觸發(fā)電路,且在其輸出端加反相器輸出。其輸入、輸出波形如圖XXX所示。(4)計(jì)數(shù)器
計(jì)數(shù)器在T觸發(fā)器輸出信號(hào)的控制下,對(duì)經(jīng)過(guò)整形的待測(cè)信號(hào)進(jìn)行脈沖計(jì)數(shù),所得結(jié)果乘以量程即為待測(cè)信號(hào)頻率。
根據(jù)精度要求,采用4個(gè)十進(jìn)制計(jì)數(shù)器級(jí)聯(lián),構(gòu)成N=1000計(jì)數(shù)器。十進(jìn)制計(jì)數(shù)器仍采用74LS160實(shí)現(xiàn)。其電路圖如圖XXX所示。其中計(jì)數(shù)器的清零信號(hào)由延遲反相器提供,控制信號(hào)由T觸發(fā)器提供,計(jì)數(shù)器輸出結(jié)果送入鎖存器。
(5)鎖存器和顯示
計(jì)數(shù)器的結(jié)果進(jìn)入鎖存器鎖存,4個(gè)七段數(shù)碼管顯示測(cè)試信號(hào)的頻率。鎖存器使用了兩片8D集成觸發(fā)器實(shí)現(xiàn),其控制信號(hào)來(lái)自于延遲反相器,具體電路如圖XXX所示。
(6)數(shù)字頻率計(jì)的總體電路
圖XXX是數(shù)字頻率計(jì)的總體電路圖。
4.測(cè)試
搭建好以上電路以后,進(jìn)行調(diào)試,首先分模塊進(jìn)行調(diào)試,待每一個(gè)模塊調(diào)試正確后,不規(guī)則進(jìn)行聯(lián)調(diào)。因?yàn)檎麄€(gè)電路的分析是瞬態(tài)分析,故總體電路的分析需要較長(zhǎng)時(shí)間。以上僅僅是學(xué)生所做綜合電路分析與設(shè)計(jì)的例子,由于EWB5.12教學(xué)版本庫(kù)元件的限制,有些電路與系統(tǒng)無(wú)法進(jìn)行全部電路的仿真(例如收發(fā)信通信系統(tǒng)等),但有些局部電路也可以進(jìn)行仿真,從而節(jié)省對(duì)這部分電路設(shè)計(jì)化費(fèi)的時(shí)間。
第四篇:簡(jiǎn)易數(shù)字頻率計(jì)設(shè)計(jì)報(bào)告
EDA技術(shù)基礎(chǔ) 簡(jiǎn)易數(shù)字頻率計(jì) 必做實(shí)驗(yàn)
電子信息科學(xué)與技術(shù)
物電學(xué)院
2011-06-24 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
簡(jiǎn)易數(shù)字頻率計(jì)
一.實(shí)驗(yàn)要求
用Verilog硬件描述語(yǔ)言設(shè)計(jì)一個(gè)時(shí)序邏輯電路,能夠?qū)斎氲腡TL信號(hào)進(jìn)行1s時(shí)長(zhǎng)計(jì)數(shù),將計(jì)數(shù)結(jié)果在數(shù)碼管上顯示,讓該電路循環(huán)運(yùn)行,則數(shù)碼管顯示的就是輸入信號(hào)的頻率。
用標(biāo)準(zhǔn)DDS信號(hào)發(fā)生器輸入TTL信號(hào),測(cè)試信號(hào)的頻率與DDS輸出設(shè)定的頻率比較,分析誤差以及誤差產(chǎn)生的原因。
顯示效果好,無(wú)閃爍,高位零不顯示。
二.方案原理圖
總體框圖:
三、主要部分原理說(shuō)明及實(shí)驗(yàn)步驟
根據(jù)原理圖,先把計(jì)數(shù)器模塊、顯示模塊、掃描模塊分別做出。對(duì)于計(jì)數(shù)器模塊因?yàn)橐獙?shí)現(xiàn)00000000~99999999的計(jì)數(shù)器,所以要用32bit,即要用
32第2頁(yè),共8頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
個(gè)D觸發(fā)器。從而要用8個(gè)數(shù)碼管進(jìn)行循環(huán)掃描顯示。對(duì)于1HZ的精密脈沖在低電平時(shí),一方面和被測(cè)脈沖通過(guò)或門,當(dāng)被測(cè)脈沖為高電平時(shí)門電路開啟,另一方面通過(guò)一個(gè)非門把計(jì)數(shù)器的清零端置1,計(jì)數(shù)器正常工作開始計(jì)數(shù)。高電平時(shí)對(duì)計(jì)數(shù)器清零的同時(shí),把測(cè)得的數(shù)據(jù)送入BUFFER中進(jìn)行顯示鎖存。數(shù)碼管的掃描時(shí)鐘由外部提供。在此基礎(chǔ)上把前面的0清除。
1、我在該設(shè)計(jì)中使用了一個(gè)或門作為門控電路,當(dāng)輸入時(shí)鐘clka為低電平時(shí),被測(cè)信號(hào)clk通過(guò),當(dāng)輸入時(shí)鐘clka為高電平時(shí),被測(cè)信號(hào)被阻止。從clka端輸入的是一個(gè)24M的脈沖,經(jīng)過(guò)1HZ模塊處理后生成一秒赫茲信號(hào)(如下圖)
由這個(gè)信號(hào)來(lái)控制99999999計(jì)數(shù)器的清零和buffer中數(shù)據(jù)的更新以及被測(cè)信號(hào)的通過(guò)與阻止
其verilog語(yǔ)言代碼如下 module clk_1hz(clk,clked);input clk;output clked;reg clked;reg[31:0]jishu;always @(posedge clk)begin if(jishu==24000000)begin jishu=0;clked=1;end else begin jishu=jishu+1;clked=0;end end endmodule
2、門控電路部分
其verilog語(yǔ)言代碼如下
第3頁(yè),共8頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
module mynot(clk_1hz,nclk_1hz);input clk_1hz;output nclk_1hz;assign nclk_1hz=!clk_1hz;endmodule
99999999計(jì)數(shù)器計(jì)數(shù)在到達(dá)1S的瞬間,1HZ時(shí)鐘出現(xiàn)上升沿,控制緩存器將此時(shí)的計(jì)數(shù)值鎖存起來(lái),然后送出顯示。很短一段時(shí)間后,1HZ時(shí)鐘恢復(fù)低電平,在這很短的時(shí)間內(nèi)1HZ時(shí)鐘經(jīng)非門也完成了計(jì)數(shù)器的清零,之后計(jì)數(shù)器又恢復(fù)計(jì)數(shù)狀態(tài),進(jìn)入下一秒的計(jì)數(shù)。
其verilog語(yǔ)言代碼如下 module mynot(clk_1hz,nclk_1hz);input clk_1hz;output nclk_1hz;assign nclk_1hz=!clk_1hz;endmodule
3、計(jì)數(shù)模塊
第4頁(yè),共8頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
99999999計(jì)數(shù)器是本次實(shí)驗(yàn)的關(guān)鍵所在,它的主要功能是:在1hz精密時(shí)鐘和門控電路的控制下,在1s的時(shí)間內(nèi),對(duì)輸入信號(hào)進(jìn)行計(jì)數(shù),1s后,由于門控電路的存在,計(jì)數(shù)器停止計(jì)數(shù) 其verilog語(yǔ)言代碼如下 module cnt99999999(clr,clk,q);input clr,clk;output [31:0]q;reg [31:0]q;always @(posedge clk or negedge clr)begin if(!clr)q[31:0]=0;else if(q[31:0]==31'H99999999)q[31:0]=q[31:0]+32'H66666667;else if(q[27:0]==27'H9999999)q[31:0]=q[31:0]+28'H6666667;else if(q[23:0]==24'H999999)
q[31:0]=q[31:0]+24'H666667;else if(q[19:0]==20'H99999)
q[31:0]=q[31:0]+20'H66667;else if(q[15:0]==16'H9999)
q[31:0]=q[31:0]+16'H6667;else if(q[11:0]==12'H999)
q[31:0]=q[31:0]+12'H667;else if(q[ 7:0]== 8'H99)
q[31:0]=q[31:0]+8'H67;else if(q[ 3:0]== 4'H9)
q[31:0]=q[31:0]+4'H7;else q[31:0]=q[31:0]+1;end endmodule
4、顯示數(shù)據(jù)緩沖buffer的設(shè)計(jì)
數(shù)據(jù)緩沖buffer的功能是當(dāng)用計(jì)數(shù)器對(duì)輸入信號(hào)計(jì)數(shù),這些數(shù)據(jù)都暫時(shí)存在這個(gè)里面,每當(dāng)時(shí)鐘的上升沿到來(lái)的時(shí)候,它就向后面的模塊輸送數(shù)據(jù),這樣就可以得到相對(duì)穩(wěn)定的顯示。
第5頁(yè),共8頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
其verilog語(yǔ)言代碼如下
module buff(in,clk,n1,n2,n3,n4,n5,n6,n7,n8);input clk;input [31:0]in;output [3:0]n1,n2,n3,n4,n5,n6,n7,n8;reg [3:0]n1,n2,n3,n4,n5,n6,n7,n8;
always @(posedge clk)begin begin n1=in[3:0];n2=in[7:4];n3=in[11:8];n4=in[15:12];n5=in[19:16];n6=in[23:20];n7=in[27:24];n8=in[31:28];end end endmodule
5、顯示部分
由于要用到8個(gè)數(shù)碼管對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行顯示,我們可以設(shè)計(jì)一個(gè)譯碼模塊:
其verilog語(yǔ)言代碼如下 module yima(in,a,b,c,d,e,f,g,dp);input
[3:0]in;output a,b,c,d,e,f,g,dp;reg
a,b,c,d,e,f,g,dp;always @(in)begin case(in)
第6頁(yè),共8頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
4'b0000:{dp,g,f,e,d,c,b,a}=8'b00111111;4'b0001:{dp,g,f,e,d,c,b,a}=8'b00000110;4'b0010:{dp,g,f,e,d,c,b,a}=8'b01011011;4'b0011:{dp,g,f,e,d,c,b,a}=8'b01001111;4'b0100:{dp,g,f,e,d,c,b,a}=8'b01100110;4'b0101:{dp,g,f,e,d,c,b,a}=8'b01101101;4'b0110:{dp,g,f,e,d,c,b,a}=8'b01111101;4'b0111:{dp,g,f,e,d,c,b,a}=8'b00000111;4'b1000:{dp,g,f,e,d,c,b,a}=8'b01111111;4'b1001:{dp,g,f,e,d,c,b,a}=8'b01101111;default:{dp,g,f,e,d,c,b,a}=8'b01000000;endcase end endmodule 部分引腳功能的排列如下圖所示
數(shù)碼管的引腳排列 以上5部分就是頂層原理圖的主要部分
四、實(shí)驗(yàn)總結(jié)
1、要用1HZ的精確時(shí)鐘不能直接接一個(gè)外接的信號(hào)源,這樣的誤差太大,只能將一個(gè)標(biāo)準(zhǔn)的24M的時(shí)鐘進(jìn)行24分頻,才能的到相對(duì)穩(wěn)定的時(shí)鐘信號(hào)。
2、數(shù)據(jù)緩沖部分不能少,如果沒有這部分,將得不到想要的結(jié)果,數(shù)碼管上會(huì)出現(xiàn)一排亂跳的數(shù)字。
3、在整個(gè)實(shí)驗(yàn)設(shè)計(jì)過(guò)程中,我發(fā)現(xiàn)只要弄清楚所需要的幾個(gè)模塊,然后將模塊分開來(lái)進(jìn)行生成,設(shè)計(jì)也并不是想象中的那么難。
第7頁(yè),共8頁(yè) 湖北師范學(xué)院電工電子實(shí)驗(yàn)教學(xué)省級(jí)示范中心電子版實(shí)驗(yàn)報(bào)告
4、在此程序設(shè)計(jì)中,對(duì)各個(gè)模塊的功能有針對(duì)性的設(shè)計(jì)思路有了一定的提高,對(duì)于一個(gè)程序的需要哪些功能模塊,需要什么樣的輸入輸出,都比以前有了一定的提高。
5、學(xué)EDA已經(jīng)有一學(xué)期了,現(xiàn)在對(duì)那些原理框圖并不陌生了,現(xiàn)在也可以寫一些簡(jiǎn)單的代碼。我發(fā)現(xiàn)只要我們認(rèn)真的去學(xué)習(xí),虛心的的去請(qǐng)教他人,我們誰(shuí)都可以把這門課學(xué)好。雖然在學(xué)習(xí)這門課以及做實(shí)驗(yàn)的過(guò)程中,我們往往會(huì)遇到種種困難,但是當(dāng)實(shí)驗(yàn)結(jié)果與現(xiàn)象出來(lái)的那一剎那,我們就會(huì)感受那成功的快樂(lè)。
第8頁(yè),共8頁(yè)
第五篇:FPGA搶答器設(shè)計(jì)報(bào)告
Vb開辦上海電力學(xué)院
課程設(shè)計(jì)報(bào)告
信息工程系
搶答器設(shè)計(jì)報(bào)告
一、設(shè)計(jì)目的:
本課程的授課對(duì)象是電子科學(xué)與技術(shù)專業(yè)本科生,是電子類專業(yè)的一門重要的實(shí)踐課程,是理論與實(shí)踐相結(jié)合的重要環(huán)節(jié)。
本課程有助于培養(yǎng)學(xué)生的數(shù)字電路設(shè)計(jì)方法、掌握模塊劃分、工程設(shè)計(jì)思想與電路調(diào)試能力,為以后從事各種電路設(shè)計(jì)、制作與調(diào)試工作打下堅(jiān)實(shí)的基礎(chǔ)
二、實(shí)驗(yàn)器材和工具軟件:
PC機(jī)一臺(tái)、QuartusII軟件、DE2板。
三、設(shè)計(jì)內(nèi)容:
(1)搶答器可容納四組12位選手,每組設(shè)置三個(gè)搶答按鈕供選手使
用。
(2)電路具有第一搶答信號(hào)的鑒別和鎖存功能。在主持人將系統(tǒng)復(fù)位并發(fā)出搶答指令后,蜂鳴器提示搶答開始,時(shí)顯示器顯示初始時(shí)間并開始倒計(jì)時(shí),若參賽選手按搶答按鈕,則該組指示燈亮并用組別顯示器顯示選手的組別,同時(shí)蜂鳴器發(fā)出“嘀嘟”的雙音頻聲。此時(shí),電路具備自鎖功能,使其它搶答按鈕不起作用。
(3)如果無(wú)人搶答,計(jì)時(shí)器倒計(jì)時(shí)到零,蜂鳴器有搶答失敗提示,主持人可以按復(fù)位鍵,開始新一輪的搶答。
(4)設(shè)置犯規(guī)功能。選手在主持人按開始鍵之前搶答,則認(rèn)為犯規(guī),犯規(guī)指示燈亮和顯示出犯規(guī)組號(hào),且蜂鳴器報(bào)警,主持人可以終止搶答執(zhí)行相應(yīng)懲罰。
(5)搶答器設(shè)置搶答時(shí)間選擇功能。為適應(yīng)多種搶答需要,系統(tǒng)設(shè)有10秒、15秒、20秒和3O秒四種搶答時(shí)間選擇功能。
四、設(shè)計(jì)具體步驟:
首先把系統(tǒng)劃分為組別判斷電路模塊groupslct,犯規(guī)判別與搶答信號(hào)判別電路模塊fgqd,分頻電路模塊fpq1,倒計(jì)時(shí)控制電路模塊djs,顯示時(shí)間譯碼電路模塊num_7seg模塊,組別顯示模塊showgroup模塊這六個(gè)模塊,各模塊設(shè)計(jì)完成后,用電路原理圖方法將各模塊連接構(gòu)成系統(tǒng)。
各模塊功能及代碼:
1、組別判別模塊
(1)功能:可容納四組12位選手,每組設(shè)置三個(gè)搶答按鈕供選手使用。若參賽選手按搶答按鈕,則輸出選手的組別。此時(shí),電路具
signal rst : std_logic;begin
h<=“0000” when(a=“000” and b=“000” and c=“000” and d=“000”)else
“0001” when(a/=“000” and b=“000” and c=“000” and d=“000”)else
“0010” when(a=“000” and b/=“000” and c=“000” and d=“000”)else
“0100” when(a=“000” and b=“000” and c/=“000” and d=“000”)else
“1000” when(a=“000” and b=“000” and c=“000” and d/=“000”)else
“0000”;process
begin
wait on clock until rising_edge(clock);
if clr='1' then
rst<='1';
g<=“0000”;
end if;
if h/=“0000” then
if rst='1' then
g<=h;
rst<='0';
end if;
end if;
end process;
end behave_groupslct;
2、犯規(guī)判別與搶答信號(hào)判別模塊
(1)功能:若參賽選手在主持人按開始鍵之后按搶答按鈕,則使該組指示燈亮并輸出選手的組別,同時(shí)蜂鳴器發(fā)出響聲。
選手在主持人按開始鍵之前搶答,則認(rèn)為犯規(guī),犯規(guī)指示燈亮并輸出犯規(guī)組號(hào),且蜂鳴器報(bào)警。
(2)原理:c[3..0]接組別判別模塊的g[3..0],即此時(shí)c為按鍵組別的信息。go接主持人的“開始”按鍵。由于無(wú)論是在正常情況還是犯規(guī)情況下按下按鍵,都必須顯示按鍵的組別且蜂鳴器響,所以將c的值給hex以輸出按鍵組別,且在有按鍵按下(c/=“0000”)時(shí)輸出fm為‘1’,否則為‘0’。若在開始之前有按鍵按下時(shí),即go='0'且c/=“0000”,輸出ledfg為‘1’,否則為‘0’。若在開始之后有按鍵按下,將c的值給led,使該組指示燈亮,開始之前l(fā)ed輸出“0000”。
(3)程序代碼:
library ieee;
use ieee.std_logic_1164.all;
entity fgqd is port(c:in std_logic_vector(3 downto 0);
go:in std_logic;
hex:out std_logic_vector(3 downto 0);
led:out std_logic_vector(3 downto 0);
ledfg,fm:out std_logic);
end fgqd;
architecture behave_fgqd of fgqd is begin);end djs;
architecture behave_djs of djs is begin
process(clock,aclr,s)
begin
if(aclr='1')then
if(s=“00”)then
q<=“01010”;
elsif(s=“01”)then
q<=“01111”;
elsif(s=“10”)then
q<=“10100”;
else
q<=“11110”;
end if;
else
if rising_edge(clock)then
if en='1' then
q<=q-1;
if(q=“00000” and grpsl=“0000”)then
time0<='1';
else
time0<='0';
end if;
end if;
end if;
end if;
end process;end behave_djs;
4、分頻器模塊
(1)功能:實(shí)現(xiàn)50MHz—1Hz的分頻,為倒計(jì)時(shí)模塊提供時(shí)鐘。
(2)程序代碼
library ieee;
use ieee.std_logic_1164.all;
entity fpq1 is port(clkin :in std_logic;
clkout:out std_logic);end fpq1;
architecture behave_fpq1 of fpq1 is constant N: Integer:=24999999;signal Counter:Integer RANGE 0 TO N;signal Clk: Std_Logic;begin
process(clkin)
begin
if rising_edge(clkin)then--每計(jì)到N個(gè)(0~n-1)上升沿,輸出信號(hào)翻轉(zhuǎn)一次
if Counter=N then
Counter<=0;
Clk<=NOT Clk;
else
Counter<= Counter+1;
end if;
end if;
end process;clkout<= Clk;end behave_fpq1;
5、時(shí)間顯示譯碼器
(1)功能:將時(shí)間信息在7段數(shù)碼管上顯示。
(2)程序代碼
library ieee;
use ieee.std_logic_1164.all;
entity num_7seg is port(c:in std_logic_vector(4 downto 0);
hex:out std_logic_vector(13 downto 0));
end num_7seg;
architecture behave_num_7seg of num_7seg is begin
with c(4 downto 0)select
hex<= “10000001000000” when “00000” ,--“0”
“10000001111001” when “00001” ,--“1”
“10000000100100” when “00010” ,--“2”
“10000000110000” when “00011” ,--“3”
“10000000011001” when “00100” ,--“4”
“10000000010010” when “00101” ,--“5”
“10000000000010” when “00110” ,--“6”
“10000001111000” when “00111” ,--“7”
“10000000000000” when “01000” ,--“8”
“10000000010000” when “01001” ,--“9”
“11110011000000” when “01010” ,--“10”
“11110011111001” when “01011” ,--“11”
“11110010100100” when “01100” ,--“12”
“11110010110000” when “01101” ,--“13”
“11110010011001” when “01110” ,--“14”
“11110010010010” when “01111” ,--“15”
“11110010000010” when “10000” ,--“16”
“11110011111000” when “10001” ,--“17”
“11110010000000” when “10010” ,--“18”
“11110010010000” when “10011” ,--“19”
“01001001000000” when “10100” ,--“20”
“01001001111001” when “10101” ,--“21”
“01001000100100” when “10110” ,--“22”
“01001000110000” when “10111” ,--“23”
“01001000011001” when “11000” ,--“24”
“01001000010010” when “11001” ,--“25”
“01001000000010” when “11010” ,--“26”
“01001001111000” when “11011” ,--“27”
來(lái)。然后就是將選出的組別鎖存。將按下按鍵的組別賦給一內(nèi)部信號(hào)“h”(沒有按鍵按下時(shí)h=“0000”),當(dāng)復(fù)位鍵按下時(shí)(clr=‘1’)輸出g=“0000”并且將另一內(nèi)部信號(hào)rst置1。當(dāng)復(fù)位后(rst=‘1’)有按鍵按下時(shí)將h的值給輸出信號(hào)g,并且將標(biāo)志信號(hào)rst清零。這樣就實(shí)現(xiàn)最快按鍵組別鎖存功能。
六、心得體會(huì)
通過(guò)此次設(shè)計(jì),我掌握了數(shù)字電路的設(shè)計(jì)方法,尤其是模塊劃分、工程設(shè)計(jì)思想與電路調(diào)試能力,都有了一定的提高。為以后從事各種電路設(shè)計(jì)、制作與調(diào)試工作打下堅(jiān)實(shí)的基礎(chǔ)。