欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7444|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

Quartus EDA實(shí)驗(yàn)指導(dǎo)書下載(詳解9個(gè)項(xiàng)目)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
EDA 實(shí)驗(yàn)指導(dǎo)書
實(shí)驗(yàn)Quartus軟件的使用
[實(shí)驗(yàn)?zāi)康腯   掌握Quartus軟件的使用。
[實(shí)驗(yàn)內(nèi)容]   學(xué)習(xí)Quartus軟件的設(shè)計(jì)操作步驟。
[實(shí)驗(yàn)原理]Quartus軟件功能介紹。
Quartus軟件功能簡(jiǎn)介:
1) 原理圖輸入(Graphic Editor)
    Quartus軟件具有圖形輸入能力,用戶可以方便的使用圖形編輯器輸入電路圖,圖中的元器件可以調(diào)用元件庫中元器件,除調(diào)用庫中的元件以外,還可以調(diào)用該軟件中的符號(hào)功能形成的功能塊。
2) 硬件描述語言輸入(Text Editor)
Quartus軟件中有一個(gè)集成的文本編輯器,該編輯器支持VHDL,AHDL和Verilog硬件描述語言的輸入,同時(shí)還有一個(gè)語言模板使輸入程序語言更加方便,該軟件可以對(duì)這些程序語言進(jìn)行編譯并形成可以下載配置數(shù)據(jù)。
3) 波形編輯器(waveform Editor)
    Quartus9.1版本軟件,在進(jìn)行邏輯電路的行為仿真時(shí),需要在所設(shè)計(jì)電路的輸入端加入一定的波形,波形編輯器可以生成和編輯仿真用的波形,使用該編輯器的工具條可以容易方便的生成波形和編輯波形。
4) 編譯與仿真
    Quartus9.1版本軟件,當(dāng)設(shè)計(jì)文件被編譯好,并在波形編輯器中將輸入波形編輯完畢后,就可以進(jìn)行行為仿真了,通過仿真可以檢驗(yàn)設(shè)計(jì)的邏輯關(guān)系是否準(zhǔn)確。Quartus11.0版本軟件沒有仿真功能,需要其它仿真軟件的支持,例如:Modelsim 軟件。
5) 管腳配置
這里需要參考實(shí)驗(yàn)板提供的管腳配置TCL腳本文件。開發(fā)板實(shí)驗(yàn)指導(dǎo)手冊(cè)中也有介紹。
6) 器件編程下載
    當(dāng)設(shè)計(jì)全部完成后,就可以將形成的目標(biāo)文件下載到實(shí)驗(yàn)板的FPGA芯片中,實(shí)際驗(yàn)證設(shè)計(jì)的準(zhǔn)確性。
[實(shí)驗(yàn)步驟]
可以按照電子版的開發(fā)板實(shí)驗(yàn)指導(dǎo)手冊(cè)進(jìn)行學(xué)習(xí),熟練掌握Quartus11.0版本軟件的開發(fā)流程。注意采用的芯片要改為EP2C8Q208C8
注意事項(xiàng):請(qǐng)牢記工程未使用到的 IO引腳請(qǐng)?jiān)O(shè)置為三態(tài)輸入(As input tri-stated)
一定不能將未使用的引腳設(shè)置為輸出(As outputs driving ground), 否則可能會(huì)造成核心板主芯片及存儲(chǔ)芯片沖突損壞!或是造成其它意想不到的損壞!
如何設(shè)置未使用的引腳為三態(tài)?
答:Quartus--菜單 Assignments--Device---Device and Pin Options---Unused
Pins---Reserve all unused pins==改為 As input tri-stated
每個(gè)例程下載前都養(yǎng)成習(xí)慣,先查下設(shè)置對(duì)不對(duì),不對(duì)的話,改好,要重新編譯一下(別
忘記這步!)如果程序下載進(jìn)去,數(shù)碼管、LED 燈都亂亮了,那肯定是沒設(shè)置好,請(qǐng)嚴(yán)格遵照上面的修改好,重新編譯!
注意:用繪圖法設(shè)計(jì)半加器和全加器來學(xué)習(xí)軟件的操作過程. 半加器電路圖如下所示。
然后生成圖形符號(hào)再設(shè)計(jì)全加器。全加器電路圖如下所示。
[實(shí)驗(yàn)報(bào)告]
   不做要求。注意實(shí)驗(yàn)板的電路原理圖要事先看看。
實(shí)驗(yàn)二簡(jiǎn)單組合邏輯電路設(shè)計(jì)
[實(shí)驗(yàn)?zāi)康腯 1  掌握組合邏輯電路的設(shè)計(jì)方法。
2 熟悉實(shí)驗(yàn)板上FPGA芯片的管腳配置分配表。            
[實(shí)驗(yàn)內(nèi)容]
  • 設(shè)計(jì)一個(gè)4-2線優(yōu)先編碼器
  • 設(shè)計(jì)一個(gè)3-8譯碼器
[實(shí)驗(yàn)原理]
根據(jù)以上組合電路的真值表,利用行為級(jí)的編程風(fēng)格來設(shè)計(jì)。
[實(shí)驗(yàn)步驟]
啟動(dòng)Quartus11.0軟件,將編寫的設(shè)計(jì)文件編譯后再根據(jù)實(shí)驗(yàn)板的管腳配置表分配好管腳,最后下載相應(yīng)的.sof文件測(cè)試。注意在選管腳時(shí)可以將輸入用撥碼開關(guān)代替,輸出可以采用發(fā)光二極管代替。
[實(shí)驗(yàn)報(bào)告]
要求用VHDL語言編程完成以上8-3線優(yōu)先編碼器,3-8譯碼器的設(shè)計(jì),并且比較圖形輸入法與語言輸入法的優(yōu)劣。
參考程序如下:
(1)3-8譯碼器
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY YMQ38 IS
        PORT (A : IN STD_LOGIC_VECTOR( 2 DOWNTO 0) ;
             EN : IN STD_LOGIC ;
             Y  : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0)) ;
END YMQ38 ;
ARCHITECTURE  DEC_BEHAVE OF YMQ38 IS
SIGNAL  SEL : STD_LOGIC_VECTOR( 3 DOWNTO 0) ;
BEGIN
     SEL(0) <= EN ;
     SEL(1) <= A(0) ;
     SEL(2) <= A(1) ;
     SEL(3) <= A(2) ;
WITH SEL SELECT
      Y<= "00000001" WHEN "0001",
         "00000010" WHEN "0011",
         "00000100" WHEN "0101",
         "00001000" WHEN "0111",
         "00010000" WHEN "1001",
         "00100000" WHEN "1011",
         "01000000" WHEN "1101",
         "10000000" WHEN "1111",
         "11111111" WHEN OTHERS ;
END DEC_BEHAVE;
(2)4-2線優(yōu)先編碼器
library ieee;
use ieee.std_logic_1164.all;
entity encode42 is
port(
d: in std_logic_vector(3 downto 0);
a0n,a1n: out std_logic);
end encode42;
architecture behav of encode42 is
signal q : std_logic_vector(1 downto 0);
begin
a0n<=q(0);a1n<=q(1);
process(d)
begin
if d(3)='0' then
    q<="00";
elsif d(2)='0' then
    q<="01";
elsif d(1)='0' then
    q<="10";
elsif d(0)='0' then
    q<="11";
else
    q<="00";
end if;
end process;
end behav;
實(shí)驗(yàn)三簡(jiǎn)單時(shí)序電路設(shè)計(jì)
[實(shí)驗(yàn)?zāi)康腯
1、              掌握D觸發(fā)器的邏輯功能。
2、              掌握簡(jiǎn)單時(shí)序電路的設(shè)計(jì)方法。
[實(shí)驗(yàn)內(nèi)容]
  •      設(shè)計(jì)一個(gè)D觸發(fā)器
  •      設(shè)計(jì)一個(gè)同步四位加法計(jì)數(shù)器。
[實(shí)驗(yàn)原理]
1、D觸發(fā)器:
正沿觸發(fā)的D觸發(fā)器的電路符號(hào)如下圖所示。它是一個(gè)正邊沿觸發(fā)的D觸發(fā)器,有一個(gè)數(shù)據(jù)輸入端d,一個(gè)時(shí)鐘輸入端clk和一個(gè)數(shù)據(jù)輸出端q。D觸發(fā)器的真值表如下表所示。從表中可以看到,D鎖存器的輸出端只有在正沿脈沖過后,輸入端d的數(shù)據(jù)才可以傳遞到輸出端q。
表1  D鎖存器真值表
數(shù)據(jù)輸入端
時(shí)鐘輸入端
數(shù)據(jù)輸出端
D
CLK
Q
0
0
1
1
   2.同步四位加法計(jì)數(shù)器,要求有使能端控制,enable=1時(shí),開始計(jì)數(shù)。
[實(shí)驗(yàn)步驟]
啟動(dòng)Quartus11.0軟件,將編寫的設(shè)計(jì)文件編譯后再根據(jù)實(shí)驗(yàn)板的管腳配置表分配好管腳,最后下載相應(yīng)的.sof文件測(cè)試。注意在選管腳時(shí)可以將輸入用撥碼開關(guān)代替,輸出可以采用發(fā)光二極管代替。
[實(shí)驗(yàn)報(bào)告]
要求用VHDL語言編程完成D觸發(fā)器和四位加法計(jì)數(shù)器的設(shè)計(jì)。
思考題:能否利用移位寄存器實(shí)現(xiàn)八位流水燈的設(shè)計(jì)電路。
參考程序如下:
(1)D觸發(fā)器
LIBRARY ieee;
use ieee.std_logic_1164.all;
entity dff1 is
port(clk,d: in std_logic;
     q: out std_logic);
end dff1;
architecture dff1_behave of dff1 is
begin
  process(clk)
     begin
      if (clk'event and clk='1') then
      q<=d;
      end if;
  end process;
end dff1_behave;
(2)同步四位加法計(jì)數(shù)器
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count4 is
port(clk,en: in std_logic;
     qa,qb,qc,qd: out std_logic);
end count4;
architecture behave of count4 is
signal count_6: std_logic_vector(3 downto 0);
signal clk2:std_logic;
begin
process(clk)  --分頻模塊  
variable count11:integer range 0 to 2500000;
begin
if clk'event and clk='1' then
    if count11=2500000 then
    count11:=0;
    clk2<=not clk2;
    else
    count11:=count11+1;
    end if;
end if;
end process;
process(clk2)
    begin
      if (clk2'event and clk2='1') then
           if(en='1') then   
             count_6<=count_6+'1';
            end if;
      end if;
   end process;
qa<=count_6(0);
   qb<=count_6(1);
   qc<=count_6(2);
   qd<=count_6(3);
end behave;
(3) 設(shè)計(jì)參考程序:流水燈的控制電路。
LIBRARY IEEE;                     
USE IEEE.STD_LOGIC_1164.ALL; --這3個(gè)程序包足發(fā)應(yīng)付大部分的VHDL程序設(shè)計(jì)
USE IEEE.STD_LOGIC_Arith.ALL;
USE IEEE.STD_LOGIC_Unsigned.ALL;
USE IEEE.NUMERIC_STD.ALL;
ENTITY ledwater IS
PORT(clk: IN              STD_LOGIC;
led: OUT STD_LOGIC_VECTOR(8 DOWNTO 1));
END;
ARCHITECTURE one OF ledwater IS
signal              led_r:              std_logic_vector(9 downto 1);
signal clk2:std_logic;
BEGIN
led<=led_r(8 DOWNTO 1);
process(clk)  --分頻模塊  
variable count11:integer range 0 to 2500000;
begin
if clk'event and clk='1' then
    if count11=2500000 then
    count11:=0;
    clk2<=not clk2;
    else
    count11:=count11+1;
    end if;
end if;
end process;
PROCESS(clk2)
BEGIN
              IF RISING_EDGE(clk2) THEN
                            led_r<=led_r(8 DOWNTO 1) & '0';
                            IF led_r="000000000" THEN--循環(huán)完畢嗎?
                                          led_r<="111111111";--是,則重新賦初值
                            END IF;            
              END IF;
END PROCESS;
END;
實(shí)驗(yàn)四LED顯示譯碼電路的設(shè)計(jì)
[實(shí)驗(yàn)?zāi)康腯
  • 掌握LED顯示譯碼電路的設(shè)計(jì)。
  • 熟悉用數(shù)碼管實(shí)現(xiàn)十六進(jìn)制計(jì)數(shù)的動(dòng)態(tài)顯示原理
[實(shí)驗(yàn)內(nèi)容]
  • 編寫能夠同時(shí)在八個(gè)數(shù)碼管輪換顯示0F十六進(jìn)制數(shù)的電路。
  • 編寫能夠用動(dòng)態(tài)掃描方式顯示數(shù)字:12345678的電路
[實(shí)驗(yàn)原理]
用數(shù)碼管除了可以顯示0~9的阿拉伯?dāng)?shù)字外,還可以顯示一些英語字母。在實(shí)驗(yàn)電路板的原理圖上要分析出數(shù)碼管是共陰極接法還是共陽極接法。
[實(shí)驗(yàn)步驟]
啟動(dòng)Quartus11.0軟件,將編寫的設(shè)計(jì)文件編譯后再根據(jù)實(shí)驗(yàn)板的管腳配置表分配好管腳,最后下載相應(yīng)的.sof文件測(cè)試。
[實(shí)驗(yàn)報(bào)告]
要求用VHDL語言編程完成以上LED顯示譯碼器與動(dòng)態(tài)掃描電路的設(shè)計(jì)。
思考題:如何實(shí)現(xiàn)一個(gè)N(偶數(shù))分頻器的設(shè)計(jì)。
(1)0~F計(jì)數(shù)顯示電路。
LIBRARY              IEEE;
USE              IEEE.STD_LOGIC_1164.ALL;
USE              IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY sled              IS
PORT(clk:IN               STD_LOGIC;
              dig:              OUT              STD_LOGIC_VECTOR(7              DOWNTO 0);            
              seg:              OUT              STD_LOGIC_VECTOR(7              DOWNTO 0));              --七段譯碼輸出
END;
ARCHITECTURE ONE OF sled IS
signal seg_r:STD_LOGIC_VECTOR(7 DOWNTO 0);              --定義數(shù)碼管輸出寄存器
signal count_4: std_logic_vector(3 downto 0);
signal clk2:STD_LOGIC;
BEGIN
seg<=seg_r;                                                                      --輸出數(shù)碼管譯碼結(jié)果
dig<="00000000";
process(clk)     --分頻器
variable count11:integer range 0 to 25000000;
begin
if clk'event and clk='1' then
    if count11=25000000 then
    count11:=0;
    clk2<=not clk2;
    else
    count11:=count11+1;
    end if;
end if;
end process;
process(clk2)
begin
   if (clk2'event and clk2='1') then
        count_4<=count_4+'1';
   end if;
end process;
PROCESS(count_4)                                                                      --七段譯碼
BEGIN
              CASE count_4 IS
                            WHEN               X"0"=>              seg_r<=X"c0";--顯示0
                            WHEN              X"1"=>              seg_r<=X"f9";--顯示1
                            WHEN              X"2"=>              seg_r<=X"a4";--顯示2
                            WHEN              X"3"=>              seg_r<=X"b0";--顯示3
                            WHEN              X"4"=>              seg_r<=X"99";--顯示4
                            WHEN              X"5"=>              seg_r<=X"92";--顯示5
                            WHEN              X"6"=>              seg_r<=X"82";--顯示6
                            WHEN              X"7"=>              seg_r<=X"f8";--顯示7
                            WHEN              X"8"=>              seg_r<=X"80";--顯示8
                            WHEN              X"9"=>              seg_r<=X"90";--顯示9
                            WHEN              X"a"=>              seg_r<=X"88";--顯示a
                            WHEN              X"b"=>              seg_r<=X"83";--顯示b
                            WHEN              X"c"=>              seg_r<=X"c6";--顯示c
                            WHEN              X"d"=>              seg_r<=X"a1";--顯示d
                            WHEN              X"e"=>              seg_r<=X"86";--顯示e            
                            WHEN              X"f"=>              seg_r<=X"8e";--顯示f                                                      
                            WHEN              OTHERS=> seg_r<=X"FF";            
              END CASE;
END PROCESS;
END;
(2)動(dòng)態(tài)掃描顯示數(shù)字:12345678電路設(shè)計(jì)。
library ieee;                     
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity dled is
port(
clk:in              std_logic;
dig:out              std_logic_vector(7               downto 0);                            --數(shù)碼管選擇輸出引腳
seg:out std_logic_vector(7               downto 0) );              --數(shù)碼管段輸出引腳
end entity;
architecture one of dled is
constant d:              std_logic_vector(31 downto 0):= x"12345678";
signal               seg_r:                            std_logic_vector(7 downto 0);              --定義數(shù)碼管輸出寄存器
signal  dig_r:                            std_logic_vector(7 downto 0);              --定義數(shù)碼管選擇輸出寄存器
signal              disp_dat:              std_logic_vector(3 downto 0);                            --定義顯示數(shù)據(jù)寄存器
signal              count:              std_logic_vector(2 downto 0);                            --定義計(jì)數(shù)寄存器
signal clk_1k: std_logic;
begin
dig<=dig_r;
seg<=seg_r;
process(clk)   
variable count11:integer range 0 to 25000;
begin
if clk'event and clk='1' then
    if count11=25000 then
    count11:=0;
    clk_1k<=not clk_1k;
    else
    count11:=count11+1;
    end if;
end if;
end process;
process(clk_1k)
begin
              if              rising_edge(clk_1k) then
                            count<=count+1;                           
              end if;
end process;
PROCESS(clk_1k)
BEGIN
              IF              rising_edge(clk_1k) THEN
                            CASE count IS
                            WHEN "000"=>              disp_dat<=d(31 DOWNTO 28);              --第一個(gè)數(shù)碼管
                            WHEN "001"=>              disp_dat<=d(27 DOWNTO 24);              --第二個(gè)數(shù)碼管
                            WHEN "010"=>              disp_dat<=d(23 DOWNTO 20);              --第三個(gè)數(shù)碼管
                            WHEN "011"=>              disp_dat<=d(19 DOWNTO 16);              --第四個(gè)數(shù)碼管
                            WHEN "100"=>              disp_dat<=d(15 DOWNTO 12);              --第五個(gè)數(shù)碼管
                            WHEN "101"=>              disp_dat<=d(11 DOWNTO 8);              --第六個(gè)數(shù)碼管
                            WHEN "110"=>              disp_dat<=d(7 DOWNTO 4);              --第七個(gè)數(shù)碼管
                            WHEN "111"=>              disp_dat<=d(3 DOWNTO 0);              --第八個(gè)數(shù)碼管
                            END CASE;
                            CASE count IS                                                                      --選擇數(shù)碼管顯示位
                            WHEN "000"=>              dig_r<="01111111";                            --選擇第一個(gè)數(shù)碼管顯示
                            WHEN "001"=>              dig_r<="10111111";                            --選擇第二個(gè)數(shù)碼管顯示
                            WHEN "010"=>              dig_r<="11011111";                            --選擇第三個(gè)數(shù)碼管顯示
                            WHEN "011"=>              dig_r<="11101111";                            --選擇第四個(gè)數(shù)碼管顯示
                            WHEN "100"=>              dig_r<="11110111";                            --選擇第五個(gè)數(shù)碼管顯示
                            WHEN "101"=>              dig_r<="11111011";                            --選擇第六個(gè)數(shù)碼管顯示
                            WHEN "110"=>              dig_r<="11111101";                            --選擇第七個(gè)數(shù)碼管顯示
                            WHEN "111"=>              dig_r<="11111110";                            --選擇第八個(gè)數(shù)碼管顯示
                            END CASE;
              END IF;
END PROCESS;
PROCESS(disp_dat)
BEGIN
              CASE disp_dat IS
                            WHEN               X"0"=>              seg_r<=X"c0";--顯示0
                            WHEN              X"1"=>              seg_r<=X"f9";--顯示1
                            WHEN              X"2"=>              seg_r<=X"a4";--顯示2
                            WHEN              X"3"=>              seg_r<=X"b0";--顯示3
                            WHEN              X"4"=>              seg_r<=X"99";--顯示4
                            WHEN              X"5"=>              seg_r<=X"92";--顯示5
                            WHEN              X"6"=>              seg_r<=X"82";--顯示6
                            WHEN              X"7"=>              seg_r<=X"f8";--顯示7
                            WHEN              X"8"=>              seg_r<=X"80";--顯示8
                            WHEN              X"9"=>              seg_r<=X"90";--顯示9
                            WHEN              X"a"=>              seg_r<=X"88";--顯示a
                            WHEN              X"b"=>              seg_r<=X"83";--顯示b
                            WHEN              X"c"=>              seg_r<=X"c6";--顯示c
                            WHEN              X"d"=>              seg_r<=X"a1";--顯示d
                            WHEN              X"e"=>              seg_r<=X"86";--顯示e
                            WHEN              X"f"=>              seg_r<=X"8e";--顯示f
              END CASE;
END PROCESS;
END;
實(shí)驗(yàn)五數(shù)字鐘設(shè)計(jì)
[實(shí)驗(yàn)?zāi)康腯
    1. 掌握多位計(jì)數(shù)器相連的設(shè)計(jì)方法。
2. 掌握十進(jìn)制、六十進(jìn)制、二十四進(jìn)制計(jì)數(shù)器的設(shè)計(jì)方法。
3. 掌握喇叭的驅(qū)動(dòng)方法。。
4. 掌握層次化設(shè)計(jì)方法。
[實(shí)驗(yàn)內(nèi)容]
1. 具有時(shí)、分、秒計(jì)數(shù)顯示功能,以24小時(shí)循環(huán)計(jì)時(shí)。
2. 具有清零,調(diào)節(jié)小時(shí)、分鐘的功能。
3. 具有整點(diǎn)報(bào)時(shí)功能,整點(diǎn)報(bào)時(shí)的同時(shí)LED燈花樣顯示。
[實(shí)驗(yàn)原理]
在同一塊FPGA芯片集成了如下電路模塊:
1. 時(shí)鐘計(jì)數(shù):秒——60進(jìn)制BCD碼計(jì)數(shù);分——60進(jìn)制BCD碼計(jì)數(shù);時(shí)——24進(jìn)制BCD碼計(jì)數(shù);同時(shí)整個(gè)計(jì)數(shù)器有清零,調(diào)分,調(diào)時(shí)功能。在整點(diǎn)時(shí)間能提供報(bào)時(shí)信號(hào)。
2. 有驅(qū)動(dòng)8位七段共陰極掃描數(shù)碼管的片選驅(qū)動(dòng)信號(hào)輸出和七段字行譯碼輸出。
3. 喇叭在整點(diǎn)時(shí)有報(bào)時(shí)驅(qū)動(dòng)信號(hào)產(chǎn)生。
4. LED燈根據(jù)設(shè)計(jì)在整點(diǎn)時(shí)有花樣顯示信號(hào)產(chǎn)生。
[實(shí)驗(yàn)步驟]
1、啟動(dòng)Quartus11.0軟件,將編寫的設(shè)計(jì)文件編譯后再根據(jù)實(shí)驗(yàn)板的管腳配置表分配好管腳,最后下載相應(yīng)的.sof文件測(cè)試
實(shí)驗(yàn)現(xiàn)象:當(dāng)程序下載完畢后數(shù)碼管從00時(shí)00分00秒開始計(jì)時(shí),通過按鍵K1可以調(diào)節(jié)時(shí)鐘的分鐘顯示,通過按鍵K2可以調(diào)節(jié)時(shí)鐘的小時(shí)顯示。當(dāng)時(shí)鐘走到整點(diǎn)時(shí),喇叭開始鳴叫1分鐘,發(fā)光二極管LED1~LED3循環(huán)閃爍。
[實(shí)驗(yàn)報(bào)告]
1. 畫出整個(gè)數(shù)字鐘電路的結(jié)構(gòu)框圖。
2. 用VHDL語言完成頂層圖形文件中各個(gè)子模塊的設(shè)計(jì)。如果設(shè)計(jì)中的某些模塊在以前
的實(shí)驗(yàn)中使用過,該模塊可以不要再寫,例如LED顯示譯碼器。
                           
                           
實(shí)驗(yàn)六頻率計(jì)設(shè)計(jì)
[實(shí)驗(yàn)?zāi)康腯
1、掌握多位計(jì)數(shù)器相連的設(shè)計(jì)方法。
2、掌握頻率計(jì)的工作原理。
3、掌握EDA技術(shù)的層次化設(shè)計(jì)方法。
[實(shí)驗(yàn)內(nèi)容]
設(shè)計(jì)一個(gè)頻率計(jì),其測(cè)頻范圍為1HZ<f<50MHz.。
[實(shí)驗(yàn)原理]
本實(shí)驗(yàn)所設(shè)計(jì)的頻率計(jì)由三個(gè)模塊組成:測(cè)頻控制信號(hào)發(fā)生器TESTCTL、8個(gè)有時(shí)鐘使能的十進(jìn)制計(jì)數(shù)器CNT10和一個(gè)32位鎖存器REG32B。以下分別敘述頻率計(jì)各個(gè)邏輯模塊的功能與設(shè)計(jì)方法。
測(cè)頻控制信號(hào)發(fā)生器的設(shè)計(jì)要求:頻率測(cè)量的基本原理是計(jì)算每秒鐘內(nèi)待測(cè)信號(hào)的脈沖個(gè)數(shù)。這就要求TESTCTL的計(jì)數(shù)使能信號(hào)TSTEN能產(chǎn)生一個(gè)1秒脈寬的周期信號(hào),并對(duì)頻率計(jì)的每一計(jì)數(shù)器CNT10的ENA使能端進(jìn)行同步控制。當(dāng)TSTEN為高電平時(shí),允許計(jì)數(shù);為低電平時(shí)停止計(jì)數(shù),并保持其所計(jì)的脈沖個(gè)數(shù)。在停止計(jì)數(shù)期間,首先需要一個(gè)鎖存信號(hào)LOAD的上跳沿將計(jì)數(shù)器在前1秒鐘的計(jì)數(shù)值鎖存進(jìn)32位鎖存器REG32B中,并由外部的7段譯碼器譯出,并穩(wěn)定顯示。設(shè)置鎖存器的好處是,顯示的數(shù)據(jù)穩(wěn)定,不會(huì)由于周期性的清零信號(hào)而不斷閃爍。鎖存信號(hào)之后,必須有一個(gè)清零信號(hào)CLR_CNT對(duì)計(jì)數(shù)器進(jìn)行清零,為下1秒鐘的計(jì)數(shù)操作作準(zhǔn)備。測(cè)頻控制信號(hào)發(fā)生器的工作時(shí)序如下圖所示。為了產(chǎn)生這個(gè)時(shí)序圖,需首先建立一個(gè)由D觸發(fā)器構(gòu)成的二分頻器,在每次時(shí)鐘CLK上升沿到來時(shí)其值翻轉(zhuǎn)。

其中控制信號(hào)時(shí)鐘CLK的頻率取1HZ,那么信號(hào)TSTEN的脈寬恰好為1S,可以用作計(jì)數(shù)閘門信號(hào)。然后根據(jù)測(cè)頻的時(shí)序要求,可得出信號(hào)LOAD和CLR_CNT的邏輯描述。由上圖可見,在計(jì)數(shù)完成后,即計(jì)數(shù)使能信號(hào)TSTEN在1S的高電平后,利用其反相值的上跳沿產(chǎn)生一個(gè)鎖存信號(hào)LOAD,0.5S后,CLR_CNT產(chǎn)生一個(gè)清零信號(hào)上跳沿。高質(zhì)量的測(cè)頻控制信號(hào)發(fā)生器的設(shè)計(jì)十分重要,設(shè)計(jì)中要對(duì)其進(jìn)行仔細(xì)的實(shí)時(shí)防真,防止可能產(chǎn)生的毛刺。
寄存器REG32B設(shè)計(jì)要求:若已有32位BCD碼存在于此模塊的輸入口,在信號(hào)LOAD的上升沿后即被鎖存到寄存器REG32B的內(nèi)部,并由REG32B的輸出端輸出,然后由實(shí)驗(yàn)板上的7段譯碼器譯成能在數(shù)碼管上顯示輸出的相應(yīng)數(shù)值。
計(jì)數(shù)器CNT10設(shè)計(jì)要求:此十進(jìn)制計(jì)數(shù)器的特殊之處是,有一時(shí)鐘使能輸入端ENA,用于鎖定計(jì)數(shù)值。當(dāng)高電平時(shí)計(jì)數(shù)允許,低電平時(shí)禁止計(jì)數(shù)。
[實(shí)驗(yàn)步驟]
1. 啟動(dòng)Quartus11.0軟件,將編寫的設(shè)計(jì)文件編譯后再根據(jù)實(shí)驗(yàn)板的管腳配置表分配好管腳,最后下載相應(yīng)的.sof文件測(cè)試。
2. 注意要測(cè)量的信號(hào)源可以采用多個(gè)分頻器實(shí)現(xiàn)。做實(shí)驗(yàn)時(shí)可以選擇分頻器的一個(gè)輸出信號(hào)進(jìn)行測(cè)試。
[實(shí)驗(yàn)報(bào)告]
1、畫出設(shè)計(jì)的頂層文件原理圖。
2、對(duì)照頻率計(jì)波形圖分析電路工作原理。
3、寫出各功能模塊的VHDL語言源程序,并且給出相應(yīng)的注釋。如果設(shè)計(jì)中的某些模塊
在以前的實(shí)驗(yàn)中使用過,該模塊可以不要再寫,例如LED顯示譯碼器,LED位選掃描產(chǎn)生電路。
實(shí)驗(yàn)七  樂曲演奏電路設(shè)計(jì)
[實(shí)驗(yàn)?zāi)康腯
1. 了解樂曲演奏電路的原理。
2. 掌握利用可編程邏輯器件實(shí)現(xiàn)樂曲演奏的設(shè)計(jì)方法。
[實(shí)驗(yàn)內(nèi)容]
用VHDL語言設(shè)計(jì)一個(gè)“梁祝”樂曲演奏電路。
[實(shí)驗(yàn)原理]
與利用微處理器(CPU或MCU)來實(shí)現(xiàn)樂曲演奏相比,以純硬件完成樂曲演奏電路的邏輯要復(fù)雜得多,如果不借助于功能強(qiáng)大的EDA工具和硬件描述語言,僅憑傳統(tǒng)的數(shù)字邏輯技術(shù),即使最簡(jiǎn)單的演奏電路也難以實(shí)現(xiàn)。
本實(shí)驗(yàn)設(shè)計(jì)項(xiàng)目作為“梁祝”樂曲演奏電路的實(shí)現(xiàn),其工作原理是這樣的:我們知道,組成樂曲的每個(gè)音符的發(fā)音頻率值及其持續(xù)的時(shí)間是樂曲能連續(xù)演奏所需的兩個(gè)基本要素,問題是如何來獲取這兩個(gè)要素所對(duì)應(yīng)的數(shù)值以及通過純硬件的手段來利用這些數(shù)值實(shí)現(xiàn)所希望樂曲的演奏效果。
    本實(shí)驗(yàn)設(shè)計(jì)由四個(gè)模塊組成,其每一個(gè)模塊的功能如下所述。模塊一為一個(gè)數(shù)控分頻器SPEAKERA,其CLK端輸入一具有較高頻率(本實(shí)驗(yàn)為1MHz)的信號(hào),通過SPEAKERA分頻后由SPKOUT輸出。由于直接從數(shù)控分頻器中出來的輸出信號(hào)是脈寬極窄的脈沖式信號(hào),為了有利于驅(qū)動(dòng)喇叭,需另加一個(gè)D觸發(fā)器以均衡其占空比,但這時(shí)的頻率將是原來的1/2。SPEAKERA對(duì)CLK輸入信號(hào)的分頻比由11位預(yù)置數(shù)TONE[10..0]決定。SPKOUT的輸出頻率將決定每一音符的音調(diào),這樣分頻計(jì)數(shù)器的預(yù)置值TONE[10..0]與SPKOUT的輸出頻率就有了對(duì)應(yīng)關(guān)系。例如在TONETABA模塊中若取TONE[10..0]=1036,將發(fā)音符為“3”音的信號(hào)頻率。
    模塊二TONETABA是確定樂曲的速度以及每個(gè)音符的節(jié)拍數(shù)。TONETABA的功能首先是為SPEAKERA提供決定所發(fā)音符的分頻預(yù)置數(shù),而此數(shù)在SPEAKERA輸入口停留的時(shí)間即為此音符的節(jié)拍值。模塊TONETABA是樂曲簡(jiǎn)譜碼對(duì)應(yīng)的分頻預(yù)置數(shù)查表電路,其中設(shè)置了“梁祝”樂曲全部音符所對(duì)應(yīng)的分頻預(yù)置數(shù),共13個(gè),每一音符的停留時(shí)間由音樂節(jié)拍和音調(diào)發(fā)生器模塊NOTETABS的CLK的輸入頻率決定,在此為4Hz。這13個(gè)值的輸出由對(duì)應(yīng)于TONETABA的4位輸入值Index[3..0]確定,而Index[3..0]最多有16種可選值。輸向TONETABA中的值ToneIndex[3..0]的輸出值與持續(xù)的時(shí)間由模塊NOTETABS決定。
    模塊三NOTETABS為音調(diào)發(fā)生器,在NOTETABS中設(shè)置了一個(gè)8位二進(jìn)制計(jì)數(shù)器(計(jì)數(shù)最大值為138),這個(gè)計(jì)數(shù)器的計(jì)數(shù)頻率選為4Hz,即每一計(jì)數(shù)值的停留時(shí)間為0.25S,恰為當(dāng)全音符設(shè)為1S時(shí),四四拍的4分音符的持續(xù)時(shí)間。例如,NOTETABS在以下的VHDL邏輯描述中,“梁祝”樂曲的第一個(gè)音符為“3”,此音在邏輯中停留了4個(gè)時(shí)鐘節(jié)拍,即為1S時(shí)間,相應(yīng)地所對(duì)應(yīng)的“3”音符分頻預(yù)置值為1036在SPEAKERA的輸入端停留了1S。隨著NOTETABS中的計(jì)數(shù)器按4Hz的時(shí)鐘頻率作加法計(jì)數(shù)時(shí),“梁祝”樂曲就開始連續(xù)自然地演奏起來了。
模塊四fengping是個(gè)分頻器,實(shí)現(xiàn)將50MHZ的時(shí)鐘生成1MHZ和4HZ的時(shí)鐘。
下表為簡(jiǎn)譜中音名與頻率的關(guān)系:
音名
頻率(HZ)
音名
頻率(HZ)
音名
頻率(HZ)
    低音1
261.63
中音1
523.25
高音1
1046.50
低音2
293.67
中音2
587.33
高音2
1174.66
低音3
329.63
中音3
659.25
高音3
1381.51
低音4
349.23
中音4
698.46
高音4
1396.92
低音5
391.99
中音5
783.99
高音5
1567.98
低音6
440
中音6
880
高音6
1760
低音7
439.88
中音7
987.76
高音7
1975.52
[實(shí)驗(yàn)步驟]
啟動(dòng)Quartus11.0軟件,將編寫的設(shè)計(jì)文件編譯后再根據(jù)實(shí)驗(yàn)板的管腳配置表分配好管腳,最后下載相應(yīng)的.sof文件測(cè)試,下載完畢后就開始連續(xù)演奏“梁祝”樂曲,
[實(shí)驗(yàn)報(bào)告]
1、畫出設(shè)計(jì)的頂層設(shè)計(jì)原理圖。
2、寫出原理圖中各功能模塊的VHDL語言源程序并加上注釋。模塊三NOTETABS音調(diào)發(fā)生
器的“梁祝”樂曲音符可以壓縮寫三行即可。
思考題:如何設(shè)計(jì)一個(gè)簡(jiǎn)易電子琴控制器。
實(shí)驗(yàn)八搶答器設(shè)計(jì)
[實(shí)驗(yàn)?zāi)康腯
1. 熟悉四路搶答器的工作原理。
2. 了解原理圖、VHDL語言層次化設(shè)計(jì)方法。
[實(shí)驗(yàn)內(nèi)容]
設(shè)計(jì)一個(gè)四人搶答器電路。
[實(shí)驗(yàn)原理]
(1) 設(shè)計(jì)制作一個(gè)可容納四組參賽者的數(shù)字智力搶答器,每組設(shè)置一個(gè)搶答按鈕供搶答者使用。
(2) 電路具有第一搶答信號(hào)的鑒別和鎖存功能。
(3) 設(shè)置計(jì)分電路。
(4) 設(shè)置犯規(guī)電路。
一般說來,多路智力競(jìng)賽搶答器的的組成框圖為:
圖1  多路智力競(jìng)賽搶答器的的組成框圖
其工作過程是:接通電源下載完畢后,節(jié)目主持人將開關(guān)置于清除位置,搶答器處于禁止工作狀態(tài),編號(hào)顯示器數(shù)碼管熄滅,當(dāng)節(jié)目主持人宣布搶答開始并將開關(guān)置于開始位置,搶答器處于工作狀態(tài),當(dāng)選手按鍵搶答時(shí),優(yōu)先編碼器立即分辨出搶答器的編號(hào),并由鎖存器鎖存,然后由編碼顯示電路顯示編號(hào),同時(shí),控制電路對(duì)輸入編碼進(jìn)行封鎖,避免其他選手再次進(jìn)行搶答。當(dāng)選手將問題回答完畢,主持人操作控制開關(guān),對(duì)選手進(jìn)行加分,再使系統(tǒng)恢復(fù)到禁止工作狀態(tài),以便進(jìn)行下一輪的搶答。
[實(shí)驗(yàn)步驟]
啟動(dòng)Quartus11.0軟件,將編寫的設(shè)計(jì)文件編譯后再根據(jù)實(shí)驗(yàn)板的管腳配置表分配好管腳,最后下載相應(yīng)的.sof文件測(cè)試。
[實(shí)驗(yàn)報(bào)告]
畫出本實(shí)驗(yàn)電路的原理圖和并給出相應(yīng)模塊的VHDL語言源程序。如果設(shè)計(jì)中的某些模塊
在以前的實(shí)驗(yàn)中使用過,該模塊可以不要再寫,例如LED顯示譯碼器,LED位選掃描產(chǎn)生電路等。
實(shí)驗(yàn)九交通燈控制器設(shè)計(jì)課程設(shè)計(jì):題目可自選
[設(shè)計(jì)目的]
掌握VHDL語言的層次化設(shè)計(jì)方法,自己設(shè)計(jì)簡(jiǎn)單的交通燈控制器電路。
[設(shè)計(jì)內(nèi)容]
1、能顯示十字路口東西、南北兩個(gè)方向的紅、黃、綠燈的指示狀態(tài)。
2、用兩組紅、黃、綠三色燈作為兩個(gè)方向的紅、黃、綠燈。能實(shí)現(xiàn)正常的倒計(jì)時(shí)功能以及用兩組數(shù)碼管作為東西和南北方向的倒計(jì)時(shí)顯示。
3、用VHDL語言設(shè)計(jì)符合上述功能要求的交通燈控制器,并用層次化設(shè)計(jì)方法設(shè)計(jì)該電路。
[實(shí)驗(yàn)原理]
以下給出了本設(shè)計(jì)的一個(gè)演示實(shí)例:首先必須了解交通路燈的燃滅規(guī)律。本實(shí)例需要用到實(shí)驗(yàn)箱上交通燈模塊中的發(fā)光二極管,即紅、黃、綠各三個(gè)。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈提醒”。其交通燈的燃滅規(guī)律為:初始態(tài)是兩個(gè)路口的紅燈全亮,之后,東西路口的綠燈亮,南北路口的紅燈亮,東西方向通車,延時(shí)一段時(shí)間后,東西路口綠燈開始閃爍,一段時(shí)間后綠燈滅,黃燈開始閃爍。閃爍若干次后,東西路口紅燈亮,同時(shí)南北路口的綠燈亮,南北方向開始通車,延時(shí)一段時(shí)間后,南北路口的綠燈開始閃爍,一段時(shí)間后綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到東西路口方向,重復(fù)上述過程。該控制器可以采用有限狀態(tài)機(jī)來實(shí)現(xiàn)。
[實(shí)例演示步驟]
1. 啟動(dòng)Quartus11.0軟件,將編寫的設(shè)計(jì)文件編譯后再根據(jù)實(shí)驗(yàn)板的管腳配置表分配好管腳,最后下載相應(yīng)的.sof文件測(cè)試。
實(shí)驗(yàn)現(xiàn)象:程序下載完畢后,首先東西方向通行,當(dāng)數(shù)碼管倒計(jì)時(shí)計(jì)到還剩5秒時(shí)綠燈開始閃爍,當(dāng)計(jì)到1秒時(shí)黃燈開始閃爍,0秒過后轉(zhuǎn)向南北方向通行。其現(xiàn)象與東西向一致,
15秒后又轉(zhuǎn)向東西向通行。以后都重復(fù)上述過程。
[設(shè)計(jì)報(bào)告]
1、課程設(shè)計(jì)題目可以自由選取,按照課程設(shè)計(jì)的規(guī)范要求進(jìn)行設(shè)計(jì)報(bào)告的撰寫。
2、書寫設(shè)計(jì)報(bào)告時(shí)應(yīng)結(jié)構(gòu)合理,層次分明,在分析時(shí)注意語言的流暢。
3、要給出完整的設(shè)計(jì)過程和設(shè)計(jì)源碼,并且要在實(shí)驗(yàn)箱上進(jìn)行實(shí)物驗(yàn)證。

新版EDA實(shí)驗(yàn)指導(dǎo)書.docx

341.28 KB, 下載次數(shù): 53, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:525407 發(fā)表于 2019-5-7 22:59 | 只看該作者
太給力了,我們正在學(xué)!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表