第一篇:EDA實習報告
貴州師范大學學生
實習報告
科目:EDA實習
專業: 電氣工程及其自動化 班級: 10電氣
姓名: 李啟應
學號: 101401010202
實驗項目名稱:數字電子鐘的設計 實驗項目性質:普通試驗 所屬課程名稱:VHDL程序設計
一、實驗目的 學習VHDL語言的一些基本特點。2 掌握VHDL程序的基本結構。3掌握VHDL程序設計方法。要能夠用vhdl語言讀懂并編寫eda程序,對eda設計的總體框架能有較好的把握,掌握各模塊的調用方式。
二、實驗內容和要求
設計一個數字時鐘,顯示時(2位),分(2位),秒(2位),具體要求是:具有時分秒計數顯示功能,以24小時循環計時;數碼管動態顯示時,分,秒;具有清零功能。
在軟件工具平臺上,進行VHDL語言的各模塊編程輸入、編譯實現和仿真驗證。
三、實驗主要儀器設備和材料
計算機,開發環境MAX-PLUSII,ZY11EDA實驗系統,VHDL語言。
四、實驗方法、步驟及結果測試
1、設計思路:
數字鐘的主體是計數器,它記錄并顯示接收到的秒脈沖個數,其中秒和分位60進制計數器,小時為24進制計數器,分別產生3位BCD碼。BCD碼經譯碼,驅動后接數碼顯示電路。
根據實驗要求,將設計分為5個主要部分,時功能模塊、分功能模塊、秒功能模塊、掃描儀功能模塊和7段LED功能模塊。在時、分、秒模塊中,包括復位和預置數,其主要思路如下:
秒鐘的模塊:設計一個60進制的計數器,以clk為其時鐘信號,每60個clk后產 生一個進位信號CF給分鐘模塊,作為分鐘進程的響應信號。秒鐘模塊VHDL程序見附錄1: 仿真波形如下:
封裝如下圖:
分鐘的模塊:同理于秒鐘的模塊,設計一個60進制的計數器,以CFM為其時鐘信號,每60個CFM后產生一個進位信號CFM給小時模塊,作為小時模塊進程的響應信號。分鐘模塊VHDL程序見附錄二: 仿真波形如下:
封裝如下圖:
小時的模塊:為24進制計數器,在分的進位信號CFM的激發下計數,從0到23的時候產生一個信號CFH,全部清0,重新開始計時。小時模塊VHDL程序見附錄三: 仿真波形如下:
封裝如下圖:
掃描儀模塊:在掃描儀內部,有一個3-8譯碼器的片選信號,當3-8譯碼器的片選信號為000時,片選信號選中7段LED模塊中的秒的個位,當3-8譯碼器的片選信號為001時,片選信號選中7段LED模塊中的秒的十位,當3-8譯碼器的片選信號為010時,片選信號選中7段LED模塊中的分的個位,當3-8譯碼器的片選信號為011時,片選信號選中7段LED模塊中的分的十位,當3-8譯碼器的片選信號為100時,片選信號選中7段LED模塊中的時的個位,當3-8譯碼器的片選信號為101時,片選信號選中7段LED模塊中的時的十位,就這樣動態掃描,當輸入的時鐘信號頻率很高的時候,就形成了我們的時鐘。
掃描儀模塊VHDL程序見附錄四: 仿真波形如下:
封裝如下圖:
7段LED模塊:根據動態掃描儀的片選信號來依次點亮我們所需的時間。7段LED模塊VHDL程序見附錄五: 仿真波形如下:
封裝如下圖: 綜合以上5大模塊,把它們用線連接起來就得到我們的總的電路圖:如下圖所示: 其工作原理為:掃描儀3-8譯碼器的片選信號根據時分秒的輸入選中7段LED模塊,然后再由時分秒中產生的3位BCD碼來輸出秒的個位,十位、時的個位,十位、小時的個位,十位。
4.總結:
在實驗這兩周的時間里,我們做過DC觸發器、DQ觸發器、3-8譯碼器、二選一電路和四選一電路等,最后綜合做了數字時鐘電路,通過這次實習,我對用VHDL來編程有了更深的了解,在要編程的時候,我學會了分模塊進行,因為一開始的時候設計一個時鐘系統比較麻煩,沒有分模塊之前總是會有差錯,而之后思路就會比較清晰,有明確的方案,在對照書本里的編程規則與語句,就完成了這次的設計,總之就是獲益良多。附錄1:秒鐘模塊VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second is port(clk,reset:in std_logic;cf:out std_logic;second1_out:out std_logic_vector(3 downto 0);second10_out:out std_logic_vector(2 downto 0));end entity second;architecture one of second is signal second1n:std_logic_vector(3 downto 0);signal second10n:std_logic_vector(2 downto 0);begin second1_out<=second1n;second10_out<=second10n;process(clk,reset)begin if(reset='1')then second1n<=“0000”;second10n<=“000”;elsif(clk' event and clk='1')then if(second1n=“1001”)then 7 second1n<=“0000”;if(second10n=“101”)then second10n<=“000”;cf<='1';else second10n<=second10n+1;end if;else second1n<=second1n+1;end if;end if;end process;end architecture one;附錄二:分鐘模塊VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute is port(clk,reset:in std_logic;cf:out std_logic;minute1_out:out std_logic_vector(3 downto 0);minute10_out:out std_logic_vector(2 downto 0));end entity minute;architecture one of minute is signal minute1n:std_logic_vector(3 downto 0);signal minute10n:std_logic_vector(2 downto 0);begin minute1_out<=minute1n;minute10_out<=minute10n;process(clk,reset)begin if(reset='1')then minute1n<=“0000”;minute10n<=“000”;elsif(clk' event and clk='1')then if(minute1n=“1001”)then minute1n<=“0000”;if(minute10n=“101”)then minute10n<=“000”;cf<='1';else minute10n<=minute10n+1;end if;else minute1n<=minute1n+1;end if;end if;end process;end architecture one;附錄三:小時模塊VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour is port(clk,reset:in std_logic;hour1_out:out std_logic_vector(3 downto 0);hour10_out:out std_logic_vector(1 downto 0));end entity hour;architecture one of hour is signal hour1n:std_logic_vector(3 downto 0);signal hour10n:std_logic_vector(1 downto 0);begin hour1_out<=hour1n;hour10_out<=hour10n;process(clk,reset)begin if(reset='1')then hour1n<=“0000”;hour10n<=“00”;elsif(clk' event and clk='1')then if(hour1n=“1001”or(hour1n=“0011”and hour10n=“0010”))then hour1n<=“0000”;if(hour10n=“10”)then hour10n<=“00”;else hour10n<=hour10n+1;end if;else hour1n<=hour1n+1;end if;end if;end process;end architecture one;附錄四:掃描儀模塊VHDL程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity saomiaoyi is port(clk:in std_logic;reset:in std_logic;second1,minute1,hour1:in std_logic_vector(3 downto 0);second_10,minute_10:in std_logic_vector(2 downto 0);hour_10:in std_logic_vector(1 downto 0);dataout:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0));end entity saomiaoyi;architecture one of saomiaoyi is signal count:std_logic_vector(2 downto 0);begin sel<=count;process(clk,reset)begin if(reset='1')then dataout<=“0000”;elsif(clk'event and clk='1')then if count>=“101” then count<=“000”;else count<=count+1;end if;end if;case count is when“000”=>dataout<=second1;when“001”=>dataout<='0'& second_10;when“010”=>dataout<=minute1;when“011”=>dataout<='0'& minute_10;when“100”=>dataout<=hour1;when others =>dataout<=“00”& hour_10;end case;end process;end architecture one;
附錄五:7段LED模塊VHDL程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY led_7 IS PORT(A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END entity led_7;ARCHITECTURE one OF led_7 IS BEGIN PROCESS(A)BEGIN CASE A(3 DOWNTO 0)IS WHEN “0000” => LED7S <= “0111111”;--X“3F” 0 WHEN “0001” => LED7S <= “0000110”;--X“06” 1 WHEN “0010” => LED7S <= “1011011”;--X“5B” 2 WHEN “0011” => LED7S <= “1001111”;--X“4F” 3 WHEN “0100” => LED7S <= “1100110”;--X“66” 4 WHEN “0101” => LED7S <= “1101101”;--X“6D” 5 WHEN “0110” => LED7S <= “1111101”;--X“7D” 6 WHEN “0111” => LED7S <= “0000111”;--X“07” 7 WHEN “1000” => LED7S <= “1111111”;--X“7F” 8 WHEN “1001” => LED7S <= “1101111”;--X“6F” 9 WHEN OTHERS => NULL;END CASE;END PROCESS;END ARCHITECTURE one;
第二篇:EDA實習報告
EDA實驗報告
系別:
班級:
姓名:
學號:
目錄
1.EDA介紹
2.Quartus II軟件介紹
3.實習任務
4.封裝引腳圖
5.設計程序
6.結果顯示
7.實習心得
1.EDA介紹
EDA是電子設計自動化(Electronic Design Automation)縮寫。EDA技術是以計算機為工具,根據硬件描述語言HDL(Hardware Description language)完成的設計文件,自動地完成邏輯編譯、化簡、分割、綜合及優化、布局布線、仿真以及對于特定目標芯片的適配編譯和編程下載等工作。硬件描述語言HDL是相對于一般的計算機軟件語言,如:C、PASCAL而言的。HDL語言使用與設計硬件電子系統的計算機語言,它能描述電子系統的邏輯功能、電路結構和連接方式。設計者可利用HDL程序來描述所希望的電路系統,規定器件結構特征和電路的行為方式;然后利用綜合器和適配器將此程序編程能控制FPGA和CPLD內部結構,并實現相應邏輯功能的的門級或更底層的結構網表文件或下載文件。目前,就FPGA/CPLD開發來說,比較常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL[1]。
幾乎所有適于大學生做的數字邏輯電路實驗都可以在計算機上利用EDA(Electronic Design Automatic—電子設計自動化)軟件進行設計、仿真,只有極少量外部配件不能在計算機上進行仿真。因此,在實驗前期階段,即實驗預習階段的主要應用工具是EDA軟件,利用EDA軟件可以設計、仿真實驗課題,進行虛擬實驗。通過虛擬實驗使實驗者在進入真實實驗前就能對預做的實驗有相當的了解,甚至可以預測到實驗的結果。這樣在實際做實驗時,可以把許多設計型實驗的難度降低,同時能有更多的時間讓實驗者動手做實驗,研究問題,提高實驗效率。當前數字電路設計已由計算機輔助設計進入到以計算機為主的設計時代。
2.Quartus II 是Altera公司的綜合性PLD開發軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。
Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設計的復雜性、加快了設計速度。對第三方EDA工具的良好支持也使用戶可以在設計流程的各個階段使用熟悉的第三放EDA工具。
此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結合,可以方便地實現各種DSP應用系統;支持Altera的片上可編程系統(SOPC)開發,集系統級設計、嵌入式軟件開發、可編程邏輯設計于一體,是一種綜合性的開發平臺。
Maxplus II 作為Altera的上一代PLD設計軟件,由于其出色的易用性而得到了廣泛的應用。目前Altera已經停止了對Maxplus II 的更新支持,Quartus II 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。Altera在Quartus II 中包含了許多諸如SignalTap II、Chip Editor和RTL Viewer的設計輔助工具,集成了SOPC和HardCopy設計流程,并且繼承了Maxplus II 友好的圖形界面及簡便的使用方法。
3.1 設計信號發生器使其能在儀器上顯示正弦、三角、方波、鋸齒波(其中的兩種波形)
2設計頻率計使其能測出制定波形的頻率
4.波形發生器封裝引腳圖
5.波形發生器程序(正弦波,方波)
Boxing4
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY boxing4 IS PORT(RIN:in std_logic;
clk: IN std_logic;SINT:in std_logic_VECTOR(1 downto 0);--set:in std_logic;--_vector;--(1 downto 0);rs,rw,en,lcdon,lcdbon : OUT STD_LOGIC;YOUT:out std_logic_vector(7 downto 0);data : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END boxing4;ARCHITECTURE fwm OF boxing4 IS
TYPE states IS(clear_display,set_initial,set_cgram,write_cgram,set_addram1,diaplay_cgram,set_addram2,diaplay_cgrom);--clear_display-清屏;--set_initial-初始化設置;--set_cgram-設置 cgram 地址;--write_cgram-字模寫入 cgram;--set_addram1-設置顯示 cgram 字符的 addram 地址;--diaplay_cgram-顯示 cgram 字符;--set_addram2-設置顯示 cgrom 字符的 addram 地址;--diaplay_cgrom-顯示 cgrom 字符 SIGNAL state:states;TYPE ram_array0 IS ARRAY(0 TO 7)OF STD_LOGIC_VECTOR(7 DOWNTO 0);--定義 ram_array0 為二維數組
TYPE ram_array1 IS ARRAY(0 TO 7)OF ram_array0;--定義 ram_array1 為三維數組 SIGNAL lcd_clk : STD_LOGIC;SIGNAL data1,data2,data3:INTEGER RANGE 0 TO 9;--signal n:std_logic;SIGNAL net1,net2:std_logic_vector(7 downto 0);--signal net3:std_logic;
COMPONENT choice4_1
PORT(s:in std_logic_vector(1 downto 0);
d1,d2: in std_logic_vector(7 downto 0);
y: out std_logic_vector(7 downto 0));END COMPONENT;COMPONENT fangbo PORT(clkf,rf:in std_logic;
qf:out std_logic_vector(7 downto 0));END COMPONENT;COMPONENT sin PORT(clksin,rsin:in std_logic;
da:out std_logic_vector(7 downto 0));END COMPONENT;BEGIN u1: fangbo PORT MAP(clkf=>CLK,rf=>RIN,qf=>net1);u2: sin PORT MAP(clksin=>CLK,rsin=>RIN,da=>net2);u3: choice4_1 PORT MAP(s=>SINT,d1=>net1,d2=>net2,y=>YOUT);en <=lcd_clk;rw<= '0';lcdon<='1';lcdbon<='1';data1<=1;data2<=2;data3<=5;
PROCESS(clk)
CONSTANT m : INTEGER:=50000;--50M 分頻到 1kHz。
VARIABLE cout : INTEGER RANGE 0 TO 50000000:=0;BEGIN
IF clk'EVENT AND clk='0' THEN cout:=cout+1;
IF cout<=m/2 THEN lcd_clk<='1';
ELSIF cout ELSE cout:=0; END IF; END IF; END PROCESS; PROCESS(lcd_clk)CONSTANT cgram : ram_array1:=(--自定義 8 個 5*8 字符的字模(X“00”,X“0E”,X“00”,X“0E”,X“00”,X“1F”,X“00”,X“00”),--SAN(X“04”,X“1F”,X“04”,X“07”,X“05”,X“09”,X“13”,X“01”),--FANG(X“00”,X“1f”,X“04”,X“04”,X“17”,X“14”,X“14”,X“1f”),--ZHENG(X“0E”,X“02”,X“0E”,X“08”,X“08”,X“0e”,X“02”,X“0e”),--ZUO XIAN(X“04”,X“1E”,X“04”,X“08”,X“1e”,X“04”,X“09”,X“1f”),--YOU XIAN(X“00”,X“13”,X“0A”,X“03”,X“1a”,X“02”,X“0a”,X“13”),--ZUO BO(X“08”,X“1F”,X“09”,X“1E”,X“14”,X“08”,X“14”,X“03”),--YOU BO(X“18”,X“18”,X“07”,X“08”,X“08”,X“08”,X“07”,X“00”)--℃字符數據存儲器); VARIABLE datacnt:INTEGER RANGE 0 TO 15; VARIABLE cnt: STD_LOGIC_VECTOR(7 DOWNTO 0); VARIABLE num:INTEGER RANGE 0 TO 7;BEGIN--wait until net3='0';RISING_EDGE(lcd_clk); IF RISING_EDGE(lcd_clk)THEN --if sint=“00”then case sint is when “11”=> CASE state IS WHEN clear_display=> rs<='0';data<=“00000001”;state<=set_Initial;--清屏 WHEN set_initial=> IF datacnt<3 THEN rs<='0';data<=“00111000”;datacnt:=datacnt+1;--設置功能:8 位,兩行,5×8/每字符,重復 3 次 ELSIF datacnt=3 THEN rs<='0';data<=“00000110”;datacnt:=datacnt+1;--顯示模式:完成一個字符碼傳送后,AC 自動加 1;顯 ELSIF datacnt=4 THEN rs<='0';data<=“00001100”;datacnt:=datacnt+1;--顯示控制:顯示開,光標關,光標不閃爍 ELSE rs<='0';datacnt:=0;state <= set_cgram; END IF; WHEN set_cgram=>rs<='0';--設置 CGRAM 字符地址 data<=“01000000”+cnt;state<=write_cgram;--設置 CGRAM 字符地址 000 IF num <8 THEN cnt:=cnt+“00001000”;--設置 CGRAM 字符地址加 1 END IF; WHEN write_cgram=> rs<='1';--在 指 定 的--CGRAM 字符地址寫入對應的 8 個 5*8 字符字模 data <= cgram(num)(datacnt);datacnt:=datacnt+1;state <= write_cgram;--寫入 CGRAM 字符地址 000 的 5*8--字符字模 IF datacnt=8 THEN num:=num+1;datacnt:=0;state <= set_cgram;--寫入下一個自定義--的 5*8 字符字模 IF num =7 THEN num:=0;cnt:=“00000000”;state<=set_addram1;--8 個 5*8 字符字模寫--入完成 END IF; END IF; WHEN set_addram1=>rs<='0';--設置 ADDRAM 地址 1 data<=“10000000”;state<=diaplay_cgram; WHEN diaplay_cgram=>rs<='1';--顯示 ADDRAM 地址對應的 CGRAM 字符 --if sint=“00”then IF datacnt=0 THEN data<=X“02”;datacnt:=datacnt+1; ELSIF datacnt=1 THEN data<=X“03”;datacnt:=datacnt+1; ELSIF datacnt=2 THEN data <= X“04”;datacnt:=datacnt+1; ELSIF datacnt=3 THEN data<=X“05”;datacnt:=datacnt+1; ELSIF datacnt=4 THEN data<=X“06”;datacnt:=datacnt+1; ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=7 THEN data<=X“46”;datacnt:=datacnt+1; ELSIF datacnt=8 THEN data<=X“3a”;datacnt:=datacnt+1; ELSIF datacnt=9 THEN data<=X“31”;datacnt:=datacnt+1; ELSIF datacnt=10 THEN data<=X“30”;datacnt:=datacnt+1; ELSIF datacnt=11 THEN data<=X“4d”;datacnt:=datacnt+1; ELSIF datacnt=12 THEN data<=X“48”;datacnt:=datacnt+1; ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1;--顯示 cgrom 中指定的 ELSIF datacnt=14 THEN data<=X“5a”;datacnt:=datacnt+1; ELSE data<=X“20”;datacnt:=0;state <= set_addram2; END IF; WHEN set_addram2=>rs<='0';--設置 ADDRAM 地址 2 data<=“11000000”;state<=diaplay_cgrom; WHEN diaplay_cgrom=>rs<='1'; IF datacnt=0 THEN data<=X“4A”;datacnt:=datacnt+1; ELSIF datacnt=1 THEN data<=X“41”;datacnt:=datacnt+1; ELSIF datacnt=2 THEN data<=X“43”;datacnt:=datacnt+1; ELSIF datacnt=3 THEN data<=X“4B”;datacnt:=datacnt+1; ELSIF datacnt=4 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=7 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=8 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=9 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=10 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=11 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1; ELSIF datacnt=12 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data2+48,8);datacnt:=datacnt+1; ELSIF datacnt=14 THEN data<=CONV_STD_LOGIC_VECTOR(data1+48,8);datacnt:=datacnt+1; ELSE data<=X“56”;datacnt:=0;state <= set_addram1; END IF; END CASE; --end if; when “01”=> --elsif sint =“01”then CASE state IS WHEN clear_display=> rs<='0';data<=“00000001”;state<=set_Initial;--清屏 WHEN set_initial=> IF datacnt<3 THEN rs<='0';data<=“00111000”;datacnt:=datacnt+1;--設置功能:8 位,兩行,5×8/每字符,重復 3 次 ELSIF datacnt=3 THEN rs<='0';data<=“00000110”;datacnt:=datacnt+1;--顯示模式:完成一個字符碼傳送后,AC 自動加 1;顯 ELSIF datacnt=4 THEN rs<='0';data<=“00001100”;datacnt:=datacnt+1;--顯示控制:顯示開,光標關,光標不閃爍 ELSE rs<='0';datacnt:=0;state <= set_cgram; END IF; WHEN set_cgram=>rs<='0';--設置 CGRAM 字符地址 data<=“01000000”+cnt;state<=write_cgram;--設置 CGRAM 字符地址 000 IF num <8 THEN cnt:=cnt+“00001000”;--設置 CGRAM 字符地址加 1 END IF; WHEN write_cgram=> rs<='1';--在 指 定 的--CGRAM 字符地址寫入對應的 8 個 5*8 字符字模 data <= cgram(num)(datacnt);datacnt:=datacnt+1;state <= write_cgram;--寫入 CGRAM 字符地址 000 的 5*8--字符字模 IF datacnt=8 THEN num:=num+1;datacnt:=0;state <= set_cgram;--寫入下一個自定義--的 5*8 字符字模 IF num =7 THEN num:=0;cnt:=“00000000”;state<=set_addram1;--8 個 5*8 字符字模寫--入完成 END IF; END IF; WHEN set_addram1=>rs<='0';--設置 ADDRAM 地址 1 data<=“10000000”;state<=diaplay_cgram; WHEN diaplay_cgram=>rs<='1';--顯示 ADDRAM 地址對應的 CGRAM 字符 --if sint=“00”then IF datacnt=0 THEN data<=X“01”;datacnt:=datacnt+1; ELSIF datacnt=1 THEN data<=X“05”;datacnt:=datacnt+1; ELSIF datacnt=2 THEN data <= X“06”;datacnt:=datacnt+1; ELSIF datacnt=3 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=4 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=7 THEN data<=X“46”;datacnt:=datacnt+1; ELSIF datacnt=8 THEN data<=X“3a”;datacnt:=datacnt+1; ELSIF datacnt=9 THEN data<=X“31”;datacnt:=datacnt+1; ELSIF datacnt=10 THEN data<=X“30”;datacnt:=datacnt+1; ELSIF datacnt=11 THEN data<=X“4d”;datacnt:=datacnt+1; ELSIF datacnt=12 THEN data<=X“48”;datacnt:=datacnt+1; ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1;--顯示 cgrom 中指定的 ELSIF datacnt=14 THEN data<=X“5a”;datacnt:=datacnt+1; ELSE data<=X“20”;datacnt:=0;state <= set_addram2; END IF; WHEN set_addram2=>rs<='0';--設置 ADDRAM 地址 2 data<=“11000000”;state<=diaplay_cgrom; WHEN diaplay_cgrom=>rs<='1'; IF datacnt=0 THEN data<=X“4A”;datacnt:=datacnt+1; ELSIF datacnt=1 THEN data<=X“41”;datacnt:=datacnt+1; ELSIF datacnt=2 THEN data<=X“43”;datacnt:=datacnt+1; ELSIF datacnt=3 THEN data<=X“4B”;datacnt:=datacnt+1; ELSIF datacnt=4 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=5 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=6 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=7 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=8 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=9 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=10 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=11 THEN data<=CONV_STD_LOGIC_VECTOR(data3+48,8);datacnt:=datacnt+1; ELSIF datacnt=12 THEN data<=X“20”;datacnt:=datacnt+1; ELSIF datacnt=13 THEN data<=CONV_STD_LOGIC_VECTOR(data2+48,8);datacnt:=datacnt+1; ELSIF datacnt=14 THEN data<=CONV_STD_LOGIC_VECTOR(data1+48,8);datacnt:=datacnt+1; ELSE data<=X“56”;datacnt:=0;state <= set_addram1; END IF; END CASE; --end if; when others =>null; end case; END IF;end process;END fwm; Choice4-1 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; --程序包 entity choice4_1 is --定義實體 port(s:in std_logic_vector(1 downto 0); --信號選擇端口s d1,d2: in std_logic_vector(7 downto 0);--d1d2d3d4分別連接四個波形發生模塊 y: out std_logic_vector(7 downto 0));--定義輸出信號端口 end choice4_1;architecture behav of choice4_1 is --結構體 begin process(s) begin case s is --case when語句進行信號位的選擇 when “01”=>y<=d1; when “11”=>y<=d2; when others=>null; end case;end process; --進程結束 end behav; --結構體結束 fangbo library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fangbo is port(clkf,rf:in std_logic;qf:out std_logic_vector(7 downto 0));end entity;architecture behav of fangbo is signal a:bit;begin process(clkf,rf)--計數分頻 variable cnt:integer range 0 to 256;begin if(rf='0')then a<='0';elsif clkf'event and clkf='1' then if cnt<255 then--進行分頻 cnt:=cnt+1;else cnt:=0;a<=not a;end if;end if;end process;process(clkf,a)--信號輸出 begin if clkf'event and clkf='1' then if a='1' then qf<=“11111111”;else qf<=“00000000”;end if;end if;end process;end behav; sin library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity sin is port(clksin,rsin:in std_logic;da:out BIT_vector(7 downto 0));end entity;architecture behav of sin is signal a:bit;begin process(clksin,rsin)--計數分頻 variable cnt:integer range 0 to 256;begin if(rsin='0')then a<='0';elsif clksin'event and clksin='1' then if cnt<4 then--進行分頻 cnt:=cnt+1;else cnt:=0;a<=not a;end if;end if;end process;--process(clksin,a)process(a) variable tmp:std_logic_vector(7 downto 0);variable d:BIT_vector(7 downto 0);begin--if a='0' then--d:=“00000000”;--elsif clksin'event and clksin='1' then if a'event and a='1' then if tmp=“00111111” then tmp:=“00000000”;else tmp:=tmp+1;end if;case tmp is when “00000000”=>d:=“11111111”;when “00000001”=>d:=“11111110”;when “00000010”=>d:=“11111100”;when “00000011”=>d:=“11111001”;when “00000100”=>d:=“11110101”;when “00000101”=>d:=“11101111”;when “00000110”=>d:=“11101001”;when “00000111”=>d:=“11100001”;when “00001000”=>d:=“11011001”;when “00001001”=>d:=“11001111”;when “00001010”=>d:=“11000101”;when “00001011”=>d:=“10111010”;when “00001100”=>d:=“10101110”;when “00001101”=>d:=“10100010”;when “00001110”=>d:=“10010110”;when “00001111”=>d:=“10001010”;when “00010000”=>d:=“01111100”;when “00010001”=>d:=“01100000”;when “00010010”=>d:=“01100011”;when “00010011”=>d:=“01010111”;when “00010100”=>d:=“01001011”;when “00010101”=>d:=“01000000”;when “00010110”=>d:=“00110101”;when “00010111”=>d:=“00101011”;when “00011000”=>d:=“00100010”;when “00011001”=>d:=“00011010”;when “00011010”=>d:=“00010011”;when “00011011”=>d:=“00001101”;when “00011100”=>d:=“00001000”;when “00011101”=>d:=“00000001”;when “00011110”=>d:=“00000001”;when “00011111”=>d:=“00000000”;when “00100000”=>d:=“00000000”;when “00100001”=>d:=“00000001”;when “00100010”=>d:=“00000001”;when “00100011”=>d:=“00001000”;when “00100100”=>d:=“00001101”;when “00100101”=>d:=“00010011”;when “00100110”=>d:=“00011010”;when “00100111”=>d:=“00100010”;when “00101000”=>d:=“00101011”;when “00101001”=>d:=“00110101”;when “00101010”=>d:=“01000000”;when “00101011”=>d:=“01001011”;when “00101100”=>d:=“01010111”;when “00101101”=>d:=“01100011”;when “00101110”=>d:=“01100000”;when “00101111”=>d:=“01111100”;when “00110000”=>d:=“10001001”;when “00110001”=>d:=“10010110”;when “00110010”=>d:=“10100010”;when “00110011”=>d:=“10101110”;when “00110100”=>d:=“10111010”;when “00110101”=>d:=“11000101”;when “00110110”=>d:=“11011001”;when “00110111”=>d:=“11011001”;when “00111000”=>d:=“11100001”;when “00111001”=>d:=“11101001”;when “00111010”=>d:=“11101111”;when “00111011”=>d:=“11110101”;when “00111100”=>d:=“11111001”;when “00111101”=>d:=“11111100”;when “00111110”=>d:=“11111110”;when “00111111”=>d:=“11111111”;when others=>null;end case;end if;da<=d SRL 1;--幅度調整 end process;end behav; 頻率計 1、頻率產生器: library ieee;use ieee.std_logic_1164.all;library lpm;use lpm.lpm_components.all;entity lpm_counter0 is port(clock: in std_logic;q: out std_logic_vector(26 downto 0));end lpm_counter0;architecture syn of lpm_counter0 is signal sub_wire0 : std_logic_vector(26 downto 0);component lpm_counter generic(lpm_direction : string; lpm_port_updown : string;lpm_type : string;lpm_width : natural);port(clock : in std_logic; q : out std_logic_vector(26 downto 0));end component;begin q <= sub_wire0(26 downto 0);lpm_counter_component : lpm_counter generic map(lpm_direction => “up”,lpm_port_updown => “port_unused”,lpm_type => “lpm_counter”,lpm_width => 27)port map(clock => clock,q => sub_wire0);end syn; 2、測頻控制信號發生器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity testpl is port(clk:in std_logic;--1Hz信號 tsten:out std_logic;--計數器使能信號 clr_cnt:out std_logic;--計數器清零信號 load:out std_logic);--鎖存器輸出控制信號 end testpl;architecture art of testpl is signal div2clk:std_logic;begin process(clk)begin if clk'event and clk='1'then div2clk<=not div2clk;--div2clk為0.5Hz end if;end process;process(clk ,div2clk)begin if(clk='0'and div2clk='0')then clr_cnt<='1';--當div2clk與clk同時為零時計數器清零 else clr_cnt<='0';--當div2clk處于的高電平時計數器計數 end if;end process;load<=not div2clk;--鎖存器輸出與計數器使能信號反相 tsten<=div2clk;end art; 3、有時鐘使能的十進制計數器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 is port(clk,clr,en: in std_logic;--clk:計數器時鐘,clr:清零信號,en:計數使能信號 q: out std_logic_vector(3 downto 0);--q:4位計數結果輸出 c10: out std_logic);--計數進位 end cnt10;architecture art of cnt10 is signal cqi: std_logic_vector(3 downto 0);begin process(clk,clr)begin if clr='1' then cqi<=“0000”;--當輸入的clr_cnt為低電平1時清零 elsif clk'event and clk='1' then if en='1' then--當輸入的tesen為高電平1時允許計數 if(cqi<9)then cqi<=cqi+1;else cqi<=“0000”;--等于9則計數器清零 end if;--當輸入的tesen為低電平0時禁止計數,鎖定計數值 end if;end if;end process;--產生進位 process(cqi)begin if cqi=“1001” then c10<='1';--當加的9時產生進位輸出 else c10<='0';end if;end process;q<=cqi;end art;4、16位鎖存器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b is port(load: in std_logic;--輸出鎖存控制信號 din: in std_logic_vector(15 downto 0);dout: out std_logic_vector(15 downto 0));end reg16b;architecture art of reg16b is begin process(load,din)begin if load'event and load='1'then--load為高電平時teten為低電平,計數器禁止 dout<=din;--鎖存輸入的數據 end if;end process;end art; 5、數碼管控制器 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ledcom is port(clk:in std_logic;--數碼管掃描頻率 datain: in std_logic_vector(15 downto 0);--鎖存器輸入的16位信號 dataout: out std_logic_vector(3 downto 0);-輸出至譯碼器的4位信號 com: out std_logic_vector(3 downto 0));--輸出數碼管選擇信號 end ledcom;architecture art of ledcom is signal comclk: std_logic_vector(1 downto 0);begin--comclk同掃描頻率clk循環變化 process(clk)begin if rising_edge(clk)then if comclk>=3 then comclk <=“00”; else comclk<=comclk+1;end if;end if;end process;--數碼管選擇 process(comclk)begin case comclk is when “00” => com<=“1000”;when “01” => com<=“0100”;when “10” => com<=“0010”;when “11” => com<=“0001”;when others =>NULL;end case;end process;--對應數碼管的輸出 process(comclk,datain)begin case comclk is when “11”=> dataout<=datain(3 downto 0);when “10”=> dataout<=datain(7 downto 4);when “01”=> dataout<=datain(11 downto 8);when “00”=> dataout<=datain(15 downto 12);when others =>NULL;end case;end process;end art; 6、七段數碼管的譯碼器 library IEEE;use IEEE.std_logic_1164.all;entity ymq is port(d_in: in std_logic_vector(3 downto 0);--數碼管控制器輸入四位信號 d_out: out std_logic_vector(7 downto 0));--輸出8位信號 end ymq;--第8位d_out[7]為逗號 architecture art of ymq is begin process(d_in)begin case d_in is--第8位為1高電平逗號不顯示 when “0000” => d_out<=“11000000”;--0 when “0001” => d_out<=“11111001”;--1 when “0010” => d_out<=“10100100”;--2 when “0011” => d_out<=“10110000”;--3 when “0100” => d_out<=“10011001”;--4 when “0101” => d_out<=“10010010”;--5 when “0110” => d_out<=“10000010”;--6 when “0111” => d_out<=“11111000”;--7 when “1000” => d_out<=“10000000”;--8 when “1001” => d_out<=“10010000”;--9 when others =>NULL;end case;end process;end art; 7、元件聲明及例化將各個元器件依據設計相連 library ieee;use ieee.std_logic_1164.all;entity lx is port(clk: in std_logic;led: out std_logic_vector(7 downto 0);ledc: out std_logic_vector(3 downto 0));end lx;architecture art of lx is component lpm_counter0--待調用的頻率生成器端口定義 PORT(clock: IN STD_LOGIC;q: OUT STD_LOGIC_VECTOR(26 DOWNTO 0));end component;--十進制計數器 component cnt10--待調用的有時鐘使能的十進制計數器端口定義 port(clk,clr,en: in std_logic;q: out std_logic_vector(3 downto 0);c10: out std_logic);end component;--16位鎖存器 component reg16b--待調用的32位鎖存器端口定義 port(load: in std_logic;din: in std_logic_vector(15 downto 0);dout: out std_logic_vector(15 downto 0));end component;--測頻控制器 component testpl--待調用的測頻控制信號發生器端口定義 port(clk:in std_logic;tsten:out std_logic;clr_cnt:out std_logic;load:out std_logic);end component;--數碼管選擇器 component ledcom--待調用的數碼管選擇器端口定義 port(clk:in std_logic;datain: in std_logic_vector(15 downto 0);dataout: out std_logic_vector(3 downto 0);com: out std_logic_vector(3 downto 0));end component;--譯碼器 component ymq--待調用的譯碼器端口定義 port(d_in: in std_logic_vector(3 downto 0);d_out: out std_logic_vector(7 downto 0));end component;signal clk1,clk2,clk3: std_logic;--clk1為1Hz信號,clk2為被測信號,clk3為數碼管掃描信號 signal tsten,clr,load: std_logic;signal c1,c2,c3,c4: std_logic;signal qout,rout: std_logic_vector(15 downto 0);signal datao: std_logic_vector(3 downto 0);begin u0:testpl port map(clk1,tsten,clr,load);u1:cnt10 port map(clk2,clr,tsten,qout(3 downto 0),c1);u2:cnt10 port map(c1,clr,tsten,qout(7 downto 4),c2);u3:cnt10 port map(c2,clr,tsten,qout(11 downto 8),c3);u4:cnt10 port map(c3,clr,tsten,qout(15 downto 12),c4);u5:reg16b port map(load,qout(15 downto 0),rout);u6:ledcom port map(clk3,rout,datao,ledc);u8:ymq port map(datao,led);u9:lpm_counter0 port map(clk,q(25)=>clk1,q(15)=>clk2,q(17)=>clk3);end art; 6.結果顯示 7.實習心得 電子設計自動化技術EDA實習報告 目錄 引 言 (1)EDA簡介 (2)EDA的設計流程 第一章 實訓目的 第二章 實訓內容 一、EDA 開發軟件Max+plus II 或Quartus II 1.1基本原理 1.2條件要求 1.3主要內容 1.4實踐步驟與結果分析 (一)設計原理圖或VHDL源程序 1)原理圖 2)VHDL源程序 (二)器件及管腳邏分配圖 1)調試編譯與仿真波形 2)時序分析圖 1.5項目一的結論 二、4位全加器設計 2.1基本原理 2.2條件要求 2.3主要內容 2.4方案及實現方法 2.5實踐步驟與結果分析 (一)設計1 位全加器 1)1 位全加器原理圖 2)1位全加器仿真波形 (二)四位全加器設計 1)四位全加器原理圖 2)器件及管腳邏分配圖 3)調試編譯與仿真波形 4)時序分析圖 (三)項目二的結論 三、8 線-3 線優先編碼器 3.1基本原理 1、管腳 2、真值表 3.2條件要求 3.3主要內容 3.4方案及實現方法 3.5實踐步驟與結果分析 (一)原理圖和VHDL程序 203130705岳慧慧 電子設計自動化技術EDA實習報告 1)3-8譯碼器的原理圖 2)VHDL程序 (二)器件及管腳邏分配圖 (三)調試編譯與仿真波形 1、調試編譯 2、仿真波形 (四)時序分析圖 (五)項目三的結論 四、10 進制計數器設計 4.1基本原理 1、管腳 2、真值表 4.2條件要求 4.3主要內容 4.4方案及實現方法 4.5實踐步驟與結果分析 (一)原理圖和VHDL程序 1)10 進制計數器 2)VHDL程序 (二)器件及管腳邏分配圖 (三)調試編譯與仿真波形 1、調試編譯 2、仿真波形 (四)時序分析圖 (五)項目四的結論 五、8 位循環移位寄存器 5.1基本原理 1、管腳 2、真值表 5.2條件要求 5.3主要內容 5.4方案及實現方法 5.5實踐步驟與結果分析 (一)原理圖和VHDL程序 1)8 位循環移位寄存器 2)VHDL程序 (二)器件及管腳邏分配圖 (三)調試編譯與仿真波形 1、調試編譯 2、仿真波形 (四)時序分析圖 (五)項目三的結論 第三章 結 論 203130705岳慧慧 電子設計自動化技術EDA實習報告 引 言 (1)EDA簡介 電子技術的迅猛發展,高新技術日新月異。傳統的電子技術設計方法,以不能幫助我們更好的、高效的完成設計任務。所以我們需要更好的工具來幫助我們完成設計任務。 EDA技術是指以計算機為工作平臺,融合應用電子技術、計算機技術、信息處理及智能化技術,進行電子產品自動化設計的一門新技術。 EDA技術作為現代電子設計技術的核心,依賴于計算機,在EDA工具軟件平臺上,對以硬件描述語言為邏輯描述手段完成設計文件,自動地完成邏輯編譯、邏輯化簡、邏輯綜合、布局布線,以及邏輯優化和仿真測試,直至實現既定的電子電路的功能。 在硬件方面,EDA技術融合了大規模集成電路制造技術、集成電路板圖設計技術、可編程器件編程技術、自動測試技術等;在計算機輔助工程方面融合了計算機輔助設計、計算機輔助制造、計算機輔助測試、計算機輔助分析、計算機輔助工程技術以及多種計算機語言的設計概念;在現代電子學方面容納了諸如計算機設計技術、電子線路設計理論、數字信息處理技術、數字系統建模和優化技術以及基于微波技術的長線技術理論。 可以說,EDA技術打破了軟件設計和硬件設計間的壁壘,是一門綜合性學科,一種多方位技能技術。它將設計效率和產品性能合二為一,代表了電子設計技術和電子應用技術的發展方向。 (2)EDA的設計流程 ? 編輯輸入 1)文本輸入。在EDA工具軟件的文本編輯見面上,輸入用某種硬件語言表 述的電路設計文本。 2)原理圖輸入。在EDA工具軟件的圖形編輯界面上,繪制能完成預定功能的電路原理圖。 3)狀態圖輸入。依據電路的控制條件和狀態轉換的因果關系,在EDA工具軟件的狀態圖編輯界面上繪制時序電路的狀態流程圖。 ? 波形圖輸入 在EDA工具軟件的波形圖編輯界面上,繪制電路輸入輸出信號間的波形關系,然后由EDA編譯器據此完成電路設計。 ? 綜合 綜合是將由硬件描述語言表述的電路行為表述轉換為低級的、與可編程邏輯器件基本結構相映射的網表文件或電路連接圖。 ? 適配 適配是為了將綜合器產生的網表文件裝配于指定的目標器中,而產生最終的編程文件。 ? 功能仿真與時序仿真 1)功能仿真是指針對文本設計、原理圖設計及其它設計方法的邏輯功能進 2)行測試模擬,以便了解所設計電路實現的功能是否符合要求。 3)時序仿真的結果接近真實器件的運行特性。 ? 編程下載 把適配后生成的編程文件通過編程器或編程電纜載入目標可編程邏輯器件,以便進行硬件驗證。 ? 硬件測試 對含有載入了編程文件的可編程邏輯器件的硬件系統進行統一的測試。 203130705岳慧慧 電子設計自動化技術EDA實習報告 第一章 實訓目的 1)掌握MAX+PLUSⅡ或Quartus II 的安裝與使用方法,EDA 的開發流程及相關分析綜合方法。2)復習加法器的原理,掌握加法器的設計實現方法,設計實現數字系統設計中常用的4位全加器,在此基礎上進一步熟悉MAX+PLUSⅡ或Quartus II 軟件的使用方法,熟練掌握EDA的圖形編程方法、開發流程、以及組合邏輯電路的設計、分析、綜合、仿真方法。 3)復習編碼器的原理,掌握編碼器的設計實現方法,設計實現數字系統設計中常用的8線-3 線優先編碼器,逐步學會熟練運用MAX+PLUSⅡ或Quartus II 軟件,熟悉EDA 的VHDL程序設計方法、學習掌握組合邏輯電路的VHDL 描述方法,進一步掌握應用EDA 常用工具進行組合邏輯電路的設計、分析、綜合、仿真等的技巧。 4)復習計數器的原理,掌握計數器的設計實現方法,設計實現數字系統設計中常用的10進制計數器,逐步學會熟練運用MAX+PLUSⅡ或Quartus II 軟件,熟悉EDA 的VHDL 程序設計方法、學會使用信號升沿、降沿、VHDL 的敏感量表等內容,掌握時序邏輯電路的VHDL描述方法,步掌握應用EDA 常用工具軟件進行時序邏輯電路的設計、分析、綜合、仿真等的方法與技巧。 5)復習循環移位寄存器的原理與功能,學習掌握循環移位寄存器的設計實現方法,設計實現數字系統設計中常用的8 位循環移位寄存器,逐步學會熟練運用MAX+PLUSⅡ或QuartusII 軟件,熟悉EDA 的VHDL 程序設計方法、學會使用信號升沿、降沿、VHDL 的敏感量表等內容,掌握時序邏輯電路的VHDL 描述方法,掌握應用EDA 常用工具軟件進行時序邏輯電路的設計、分析、綜合、仿真等的方法與技巧。 6)初步掌握VHDL語言和原理圖的設計輸入,編譯,仿真和調試過程,理解VHDL語言的基本特點包括結構、語法、數據類型等。 第二章 實訓內容 一、EDA 開發軟件Max+plus II 或Quartus II 1.1基本原理 根據EDA 的設計流程:設計輸入→編譯→器件選擇→管腳分配→設計仿真→時序分析→編程下載,在熟悉EDA 開發軟件Max+plus II 或Quartus II 界面操作基礎上,使用軟件提供的編輯、編譯、仿真等工具,分析所設計的系統。 1.2條件要求 1)計算機及操作系統 2)MAX+Plus II 或Quartus II 軟件 3)編程電纜(可選) 1.3主要內容 1.設計輸入方法,包括圖形輸入、文本輸入等 2.設計編譯 3.器件選擇及管腳分配 4.設計仿真 5.時序分析 6.編程下載 1.4實踐步驟與結果分析 (一)設計原理圖或VHDL源程序 203130705岳慧慧 電子設計自動化技術EDA實習報告 1)原理圖 我設計了一個半加器,A和B是輸入端,C是進位輸出,D是加法輸出 以上為采用圖形輸入法完成的一個二輸入半加器電路 2)VHDL源程序 O<=A XOR B;//A與B異或 C<=A AND B;//A與B相與 (二)器件及管腳邏分配圖203130705岳慧慧 5 電子設計自動化技術EDA實習報告 與門的兩個輸入A 和B 分配給管腳3 與2,輸出C分配給管腳44,輸出O分配給管腳43,所選器件為EPM3032ALC44-4。 (三)調試編譯與仿真波形 1)調試編譯 203130705岳慧慧 6 電子設計自動化技術EDA實習報告 編譯結果正確,無錯誤,但是有一個警告。 2)仿真波形 此處,我設計A輸入信號為100ns/每格的時鐘脈沖,B輸入信號為300ns/每格的時鐘脈沖。 仿真波形如下圖所示: 從仿真波形可以看出,輸入輸出結果滿足表達式O=A XOR B、C=A AND B,亦即所設203130705岳慧慧 電子設計自動化技術EDA實習報告 計電路功能達到設計要求。 (四)時序分析圖 此處,我進行Classic Timing Analyzer 時序分析,可以得到A、B、C、D四個波形的信號到達時間都是3.5ns,所以仿真波形圖上不存在毛刺,很完美。 1.5項目一的結論 我掌握了MAX+PLUSⅡ或Quartus II 的安裝與使用方法,EDA 的開發流程及相關分析綜合方法,在此基礎上進一步熟悉MAX+PLUSⅡ或Quartus II 軟件的使用方法,熟練掌握EDA的圖形編程方法、開發流程、以及組合邏輯電路的設計、分析、綜合、仿真方法。同時復習加法器的原理,掌握加法器的設計實現方法,我完成的主要工作是設計了數字系統設計中常用的一個半加器。A和B是半加器輸入,C是半加器的進位輸出,D是A加B的結果輸出,并且利用波形仿真驗證VHDL程序和原理圖的正確性。得出的結論是根據波形圖結果,波形符合邏輯關系,無毛刺,十分完美地實現二輸入半加器。 二、4位全加器設計 2.1基本原理 位全加器的管腳如下圖所示: 其中CIN 表示輸入進位位,COUT 表示輸出進位位,輸入A 和B 分別表示加數和被加數。輸出SUM=A+B+CIN,當SUM 大于255 時,COUT 置‘1’。 4位全加器可以看做四個1位全加器級聯而成,首先采用基本邏輯門設計一位全加器,而后通過多個1位全加器級聯實現4位全加器。其中,其中C1表示輸入進位位,C0表示輸出進位位,輸入A和B分別表示加數和被加數。S為輸出和,其功能可用布爾代數式表示為: S=A+B+C1 203130705岳慧慧 電子設計自動化技術EDA實習報告 首先根據一位全加器的布爾代數式應用基本邏輯門設計一位全加器,而后仿真驗證一位全加器設計,準確無誤后生成元件,供4位全加器設計用。將4個1位全加器級聯構成四位全加器。 2.2條件要求 1.計算機及操作系統 2.MAX+Plus II 或Quartus II 軟件 3.編程電纜(可選) 2.3主要內容 根據所學相關知識,運用MAX+PLUS II 或Quartus II 軟件的圖形輸入方法,實現4位全加器設計。首先給出設計原理并提出實現方案,經指導教師同意后,通過設計輸入、編譯綜合、仿真驗證等過程完成并驗證設計。 1.設計輸入方法,包括圖形輸入、文本輸入等 2.設計編譯 3.器件選擇及管腳分配 4.設計仿真 5.時序分析 6.編程下載 2.4方案及實現方法 設計過程中可以首先采用基本邏輯門設計1 位全加器,而后通過多個1 位全加器級聯實現4 位全加器,也可以根據輸出與輸入的邏輯關系寫出其布爾代數式,根據布爾代數式用基本邏輯門實現全加器。 2.5實踐步驟與結果分析 (一)設計1 位全加器 1)1 位全加器原理圖 我設計了一位全加器,A和B是輸入端,C1是進位輸入端,C0是進位輸出端,S是全加器輸出端。 203130705岳慧慧 電子設計自動化技術EDA實習報告 以上為采用圖形輸入法完成的一個一位全加器電路。 2)1位全加器仿真波形 仿真結果如圖,1位全加器設計成功。 (二)四位全加器設計 與門的兩個輸入A 和B 分配給管腳3 與2,輸出C分配給管腳44,輸出O分配給管腳43,所選器件為EPM3032ALC44-4。 1)四位全加器原理圖 203130705岳慧慧 電子設計自動化技術EDA實習報告 2)器件及管腳邏分配圖 203130705岳慧慧 電子設計自動化技術EDA實習報告 管腳分配情況如圖,所選器件為EPM3032ALC44-4。 3)調試編譯與仿真波形 1.調試編譯 編譯結果正確,無錯誤,但是有一個警告。 分析可得,通過二輸入與門,非門,或門,輸出的S為兩者之和,C0為輸出進位。仿真結果與全加器真值表相同,四位全加器設計成功。 2.仿真波形 仿真波形如下圖所示: 203130705岳慧慧 電子設計自動化技術EDA實習報告 當A3A2A1A0=0000,B3B2B1B0=0000時,S3S2S1S0=0000 ;當A3A2A1A0=0101,B3B2B1B0=1100時,S3S2S1S0=0001,其他時刻波形也與全加器功能相符,全加器設計成功。 從仿真波形可以看出,輸入輸出結果滿足表達式O=A XOR B、C=A AND B,亦即所設計電路功能達到設計要求。 4)時序分析圖 203130705岳慧慧 電子設計自動化技術EDA實習報告 此處,我進行Classic Timing Analyzer 時序分析,可以得到A、B、C1、C0、S五個端口的信號到達時間,同步邏輯性能分析后可知仿真波形圖上不存在毛刺,滿足四位全加器的設計要求。 (三)項目二的結論 我掌握了EDA 的開發流程及相關分析綜合方法,在此基礎上進一步熟悉MAX+PLUSⅡ或Quartus II 軟件的使用方法,熟練掌握EDA的圖形編程方法、開發流程、以及組合邏輯電路的設計、分析、綜合、仿真方法。同時復習加法器的原理,掌握加法器的設計實現方法,我完成的主要工作是設計了數字系統設計中常用的一個半加器。A和B是全加器加數和被加數,C1是全加器的進位輸入,C0是全加器的進位輸出,S是A加B的結果輸出,并且利用波形仿真驗證原理圖的正確性。得出的結論是根據波形圖結果,波形符合邏輯關系,無毛刺,十分完美地實現一位全加器。 三、8 線-3 線優先編碼器 3.1基本原理 1、管腳 線-3 線優先編碼器的管腳如圖: 其中IN 表示輸入編碼位,Sel 為片選信號,Y 表示輸出編碼值,YS 與YEX 表示器件狀態,“11”表示器件未選中,“01”表示無鍵按下,“10”表示器件工作態。 2、真值表 8-3 編碼器的真值表如下: 3.2條件要求 1.計算機及操作系統 2.MAX+Plus II 或Quartus II 軟件 3.編程電纜(可選) 203130705岳慧慧 電子設計自動化技術EDA實習報告 3.3主要內容 1.根據所學相關知識,運用MAX+PLUS II 或Quartus II 軟件的文本文件輸入方法,編寫VHDL 程序,實現8-3 優先編碼器的設計。首先給出設計原理并提出實現方案論證,經指導教師同意后,通過設計輸入、編譯綜合、仿真驗證等過程完成并驗證設計。設計輸入方法,包括圖形輸入、文本輸入等 2.設計編譯 3.器件選擇及管腳分配 4.設計仿真 5.時序分析 6.編程下載 3.4方案及實現方法 8-3 優先編碼器的VHDL 描述有多種方法,設計過程中可以根據真值表采用case?when語句、with?select 語句、if?then 結構等多種手段實現,也可以根據真值表分析輸入輸出間的邏輯關系,根據邏輯關系寫出其布爾表達式,根據布爾代數式調用基本邏輯門元件實現8-3 優先編碼器,詳細方案與方法略。 3.5實踐步驟與結果分析 (一)原理圖和VHDL程序 1)3-8譯碼器的原理圖 203130705岳慧慧 電子設計自動化技術EDA實習報告 以上為采用圖形輸入法完成的一個3-8優先譯碼器。 2)VHDL程序 8-3優先編碼器的VHDL描述有多種方法,設計過程中可以根據真值表采用case?when語句、with?select語句、if?then結構等多種手段實現,也可以根據真值表分析輸入輸出間的邏輯關系,根據邏輯關系寫出其布爾表達式,根據布爾代數式調用基本邏輯門元件實現8-3優先編碼器。本實驗中,我根據真值表用if-then結構實現8-3優先編碼器。 203130705岳慧慧 電子設計自動化技術EDA實習報告 (二)器件及管腳邏分配圖 管腳分配情況如圖,所選器件為EPM3032ALC44-4。 (三)調試編譯與仿真波形 1、調試編譯 編譯結果正確,無錯誤,但是有兩個警告。 203130705岳慧慧 電子設計自動化技術EDA實習報告 2、仿真波形 8線-3線優先編碼器的仿真波形如下圖所示: 當3-8譯碼器的片選信號為000時,片選信號選中輸出的個位,當3-8譯碼器的片選信號為001時,片選信號選中輸出的十位,當3-8譯碼器的片選信號為010時,片選信號選中輸出的個位,當3-8譯碼器的片選信號為011時,片選信號選中輸出的十位,當3-8譯碼器的片選信號為100時,片選信號選中輸出的個位,當3-8譯碼器的片選信號為101時,片選信號選中輸出的十位,就這樣動態掃描,當輸入的時鐘信號頻率很高的時候,就形成了我們的時鐘。 從仿真波形可以看出,輸入輸出結果滿足所設計電路功能,符合前文真值表,3-8優先編碼器達到設計要求。 (四)時序分析圖 203130705岳慧慧 18 電子設計自動化技術EDA實習報告 此處,我進行Classic Timing Analyzer 時序分析,可以得到輸入輸出端口的信號到達時間都是4.5ns,同步邏輯性能分析后可知仿真波形圖上不存在毛刺,滿足3-8優先編碼器的設計要求。 (五)項目三的結論 我掌握了EDA 的開發流程及相關分析綜合方法,在此基礎上進一步熟悉MAX+PLUSⅡ或Quartus II 軟件的使用方法,熟練掌握EDA的圖形編程方法、開發流程、以及組合邏輯電路的設計、分析、綜合、仿真方法。同時復習加法器的原理,掌握加法器的設計實現方法,我完成的主要工作是設計了數字系統設計中常用的一個3-8優先編碼器,并且利用波形仿真驗證VHDL程序和原理圖的正確性。得出的結論是根據波形圖結果,波形符合邏輯關系,無毛刺,十分完美地實現3-8優先編碼器的功能。 我發現用VHDL硬件描述語言的形式來進行數字系統的設計方便靈活,利用EDA軟件進行編譯優化仿真極大地減少了電路設計時間和可能發生的錯誤,降低了開發成本,這種設計方法必將在未來的數字系統設計中發揮越來越重要的作用。 附:參考程序 LIBRARY IEEE;ENTITY ENCODER IS USE IEEE.STD_LOGIC_1164.ALL;PORT(I:IN STD_LOGIC_VECTOR(7 USE IEEE.STD_LOGIC_UNSIGNED.ALL;DOWNTO 0);203130705岳慧慧 電子設計自動化技術EDA實習報告 SEL: IN STD_LOGIC;Y : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);YS,YEX : INOUT STD_LOGIC);END ENCODER;ARCHITECTURE sample OF ENCODER IS BEGIN P1:PROCESS(I,SEL)BEGIN if SEL='1' then Y <=“111”;YS <='1';YEX<='1';elsif I(7)='0' then Y <=“000”;YS <='1';YEX<='0';elsif I(6)='0' then Y<=“001”;YS <='1';YEX<='0';elsif I(5)='0' then Y<=“010”;YS <='1';YEX<='0';elsif I(4)='0' then Y<=“011”; YS <='1';YEX<='0'; elsif I(3)='0' then Y<=“100”;YS <='1';YEX<='0'; elsif I(2)='0' then Y<=“101”;YS <='1';YEX<='0'; elsif I(1)='0' then Y<=“110”;YS <='1';YEX<='0'; elsif I(0)='0' then Y<=“111”;YS <='1';YEX<='0'; elsif I=“11111111” then Y<=“111”;YS <='0';YEX<='1';else Y<=“ZZZ”;end if; END PROCESS P1;END sample; 四、10 進制計數器設計 4.1基本原理 1、管腳 進制計數器的管腳如圖: 其中IN 表示輸入編碼位,Sel 為片選信號,Y 表示輸出編碼值,YS 與YEX 表示器件狀態,“11”表示器件未選中,“01”表示無鍵按下,“10”表示器件工作態。 2、真值表 203130705岳慧慧 電子設計自動化技術EDA實習報告 進制計數器的真值表如下: 計數開始,計數器從計數初值開始做加計數或減計數。加計數時,計數到‘9’后,再來一個計數脈沖,計數器從‘0’開始。重新啟動加計數;減計數時,計數到‘0’后,再來一個計數脈沖,計數器從‘10’開始,重新啟動減計數。 4.2條件要求 1.計算機及操作系統 2.MAX+Plus II 或Quartus II 軟件 3.編程電纜(可選) 4.3主要內容 ① 根據所學相關知識,運用MAX+PLUS II 或Quartus II 軟件的文本文件輸入方法,編寫VHDL 程序,實現10 進制計數器的設計。首先給出設計原理并提出實現方案論證,經指導教師同意后,通過設計輸入、編譯綜合、仿真驗證等過程完成并驗證設計。設計編譯 ② 器件選擇及管腳分配 ③ 設計仿真 ④ 時序分析 ⑤ 編程下載 4.4方案及實現方法 進制計數器的VHDL 描述有多種方法,設計過程中可以采用計數脈沖CP 作為敏感量,CP 的每個上升沿,計數值Q 加‘1’或減‘1’,加到‘9’后回‘0’或減到‘0’后回‘9’,語句可采用case?when、with?select、if?then 以及加減運算等多種結構實現。也可以首先設計基本的觸發器、鎖存器等元件,而后通過元件的互聯實現,詳細方案與方法略。 4.5實踐步驟與結果分析 (一)原理圖和VHDL程序 1)10 進制計數器 203130705岳慧慧 電子設計自動化技術EDA實習報告 以上為采用圖形輸入法完成的一個3-8優先譯碼器。 2)VHDL程序 8-3優先編碼器的VHDL描述有多種方法,設計過程中可以根據真值表采用case?when語句、with?select語句、if?then結構等多種手段實現,也可以根據真值表分析輸入輸出間的邏輯關系,根據邏輯關系寫出其布爾表達式,根據布爾代數式調用基本邏輯門元件實現8-3優先編碼器。本實驗中,我根據真值表用if-then結構實現8-3優先編碼器。 203130705岳慧慧 電子設計自動化技術EDA實習報告 (二)器件及管腳邏分配圖 管腳分配情況如圖,所選器件為EPM3032ALC44-4。 (三)調試編譯與仿真波形 1、調試編譯 203130705岳慧慧 電子設計自動化技術EDA實習報告 編譯結果正確,無錯誤,但是有一個警告。 2、仿真波形 進制計數器的仿真波形如下圖所示: 從仿真波形可以看出,輸入輸出結果滿足所設計電路功能,符合前文真值表,10 進制計數器達到設計要求。 (四)時序分析圖 203130705岳慧慧 電子設計自動化技術EDA實習報告 203130705岳慧慧 電子設計自動化技術EDA實習報告 此處,我進行Classic Timing Analyzer 時序分析,可以得到輸入輸出端口的信號到達時間都是3.0ns,同步邏輯性能分析后可知仿真波形圖上不存在毛刺,滿足10 進制計數器的設計要求。 (五)項目四的結論 我熟練掌握了EDA的圖形編程方法、開發流程、以及組合邏輯電路的設計、分析、綜合、仿真方法。我完成的主要工作是設計了數字系統設計中常用的一個10 進制計數器,并且利用波形仿真驗證VHDL程序和原理圖的正確性。得出的結論是根據波形圖結果,波形符合邏輯關系,無毛刺,十分完美地實現10 進制計數器的功能。 我發現用VHDL硬件描述語言的形式來進行數字系統的設計方便靈活,利用EDA軟件進行編譯優化仿真極大地減少了電路設計時間和可能發生的錯誤,降低了開發成本,這種設計方法必將在未來的數字系統設計中發揮越來越重要的作用。 附:參考程序 LIBRARY IEEE;if UD='0' then USE IEEE.STD_LOGIC_1164.ALL;if TMP=“1001” then USE IEEE.STD_LOGIC_UNSIGNED.ALL;TMP<=“0000”;ENTITY counter IS c<='1';PORT(D : IN STD_LOGIC_VECTOR(3 else DOWNTO 0);TMP<=TMP+1;UD : IN STD_LOGIC;c<='0';LD : IN STD_LOGIC;end if;CP : IN STD_LOGIC;elsif UD='1' then STA: IN STD_LOGIC;if TMP=“0000” then C : OUT STD_LOGIC;TMP<=“1001”;Q : OUT STD_LOGIC_VECTOR(3 DOWNTO c<='1';0));else END counter;TMP<=TMP-1;ARCHITECTURE sample OF counter IS c<='0';SIGNAL TMP:STD_LOGIC_VECTOR(3 end if;DOWNTO 0);end if;BEGIN elsif STA='1' then P1:PROCESS(CP,STA,LD,UD)TMP<=TMP;BEGIN end if;if LD='0' then end if;TMP<=D;END PROCESS P1;elsif CP'EVENT AND CP='0' then Q<=TMP;if STA='0' then END sample; 五、8 位循環移位寄存器 5.1基本原理 1、管腳 位循環移位寄存器的管腳如圖: 203130705岳慧慧 電子設計自動化技術EDA實習報告 其中D 表示輸入的初始值,Sta 為開始移位信號,DOUT 表示當前數值;LD 表示預設計數值,LD 為“1”,初始計數值打入器件;LR 表示移位方向,LR 為‘0’,循環右移位,LR 為‘1’,循環左移位;CP 為移位脈沖。 2、真值表 位循環移位寄存器的真值表如下: 移位開始,循環左移時,CP 上每來一個脈沖升沿,寄存器從輸出從低位開始依次左移一位,同時最高位給最低位。相反,循環右移時,從高位開始依次右移一位,同時最低位給最高位。 5.2條件要求 1.計算機及操作系統 2.MAX+Plus II 或Quartus II 軟件 3.編程電纜(可選) 5.3主要內容 ① 根據所學相關知識,運用MAX+PLUS II 或Quartus II 軟件的文本文件輸入方法,編寫VHDL 程序,實現8 位循環移位寄存器的設計。首先給出設計原理并提出實現方案論證,經指導教師同意后,通過設計輸入、編譯綜合、仿真驗證等過程完成并驗證設計。 ② 器件選擇及管腳分配 ③ 設計仿真 ④ 時序分析 ⑤ 編程下載 5.4方案及實現方法 位循環移位寄存器的VHDL 描述有多種方法,設計過程中可以首先設計D 觸發器,而后通過D 觸發器的互聯實現8 位循環移位寄存器;也可采用計數脈沖CP 作為敏感量,CP 的每個上升沿,輸出量Q 的每一位賦給左邊一位或右邊一位。同時循環左移時,最高位賦給最低位,循環右移時,最低位賦給最高位,語句可采用case?when、with?select、if?then以及加減運算等多種結構實現,詳細方案與方法略。 5.5實踐步驟與結果分析 203130705岳慧慧 電子設計自動化技術EDA實習報告 (一)原理圖和VHDL程序 1)8 位循環移位寄存器 以上為采用圖形輸入法完成的一個8 位循環移位寄存器 2)VHDL程序 位循環移位寄存器的VHDL描述有多種方法,設計過程中可以根據真值表采用case?when、with?select、if?then以及加減運算等多種結構實現,也可以根據真值表分析輸入輸出間的邏輯關系,根據邏輯關系寫出其布爾表達式,根據布爾代數式調用基本邏輯門元件實現8 位循環移位寄存器。 本實驗中根據真值表,通過VHDL語言的if-then結構實現8位循環移位寄存器。首先根據前文所述,對照真值表203130705岳慧慧 電子設計自動化技術EDA實習報告 的列出的不同輸入邏輯狀態,分情況依次輸出于輸入的對應關系,而后編譯綜合,由開發系統自行實現電路功能。 (二)器件及管腳邏分配圖 管腳分配情況如圖,所選器件為EPM3032ALC44-4。 203130705岳慧慧 電子設計自動化技術EDA實習報告 (三)調試編譯與仿真波形 1、調試編譯 編譯結果正確,無錯誤,但是有一個警告。 2、仿真波形 位循環移位寄存器的仿真波形如下圖所示: 203130705岳慧慧 30 電子設計自動化技術EDA實習報告 從仿真波形可以看出,輸入輸出結果滿足所設計電路功能,符合前文真值表,8 位循環移位寄存器達到設計要求。 (四)時序分析圖 203130705岳慧慧 電子設計自動化技術EDA實習報告 上述時間分析可以得到,輸出信號存在的時間延遲,它主要與器件速度、表達邏輯的合理性有關,選用速度更高器件、優化設計可以使該值降低。 此處,我進行Classic Timing Analyzer 時序分析,可以得到輸入輸出端口的信號到達時間都是3.0ns,同步邏輯性能分析后可知仿真波形圖上不存在毛刺,滿足8 位循環移位寄存器的設計要求。 (五)項目五的結論 本次實驗我收獲到了很多移位寄存器的相關知識,雖然期間我遇到了很多無法解決的問題,但最終都通過查閱資料,詢問同學,一一得到了解決。實驗中我們完成了1個器件的編寫:我使用了VHDL代碼的方法。通過資料我知道了74HC164是8位移位寄存器,當其中一個(或二個)選通串行輸入端的低電平禁止進入新數據,并把第一個觸發器在下一個時鐘脈沖來后復位到低電平時,門控串行輸入端(A 和B)可完全控制輸入數據。一個高電平輸入后就使另一個輸入端賦能,這個輸入就決定了第一個觸發器的狀態。雖然不管時鐘處于高電平或低電平時,串行輸入端的數據都可以被改變,但只有滿足建立條件203130705岳慧慧 電子設計自動化技術EDA實習報告 的信息才能被輸入。時鐘控制發生在時鐘輸入由低電平到高電平的躍變上。為了減小傳輸線效應,所有輸入端均采用二極管鉗位。每組實驗我們都編寫了他們的源代碼,并且通過時序仿真和功能仿真不同的仿真方式讓我對加法器這個邏輯學電子元件有了更深層次的了解。很多問題最終在老師同學和自己的不懈努力中得以解決。其中我遇到了一些代碼上的書寫錯誤問題,編譯無法運行問題,以及時序仿真時出現的問題。不過最后在查閱相關資料后明白了自己是少了一些過程。 我發現用VHDL硬件描述語言的形式來進行數字系統的設計方便靈活,利用EDA軟件進行編譯優化仿真極大地減少了電路設計時間和可能發生的錯誤,降低了開發成本,這種設計方法必將在未來的數字系統設計中發揮越來越重要的作用。 我采用圖形編程法實現了8位循環移位寄存器的設計,并完成了電路的設計編譯、綜合、邏輯仿真、時間分析,結果表明采用ALTRA的CPLD器件設計的8位循環移位寄存器,時間延遲為3ns。 附:參考程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY cyreg IS PORT(D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);LD : IN STD_LOGIC;LR : IN STD_LOGIC;CP : IN STD_LOGIC;DOUT: BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0));END cyreg;ARCHITECTURE sample OF cyreg IS BEGIN P1:PROCESS(CP,LD)BEGIN if LD='0' then DOUT<=D;elsif CP'EVENT AND CP='0' then if LR='1' then DOUT<=DOUT(6 DOWNTO 0)&DOUT(7);elsif LR='0' then DOUT<=DOUT(0)&DOUT(7 DOWNTO 1);end if;end if;END PROCESS P1;END sample; 203130705岳慧慧 電子設計自動化技術EDA實習報告 第三章 結 論 首先,通過對這門課程相關理論的學習,我掌握EDA的一些基本的的知識,現代電子產品的性能越來越高,復雜度越來越大,更新步伐也越來越快。實現這種進步的主要原因就是微電子技術和電子技術的發展。前者以微細加工技術為代表,目前已進入超深亞微米階段,可以在幾平方厘米的芯片上集成幾千萬個晶體管;后者的核心就是電子設計自動化EDA(lectronic Design Automatic)技術。EDA是指以計算機為工作平臺,融合了應用電子技術、計算機技術、智能化技術的最新成果而開發出的電子CAD通用軟件包,它根據硬件描述語言HDL完成的設計文件,自動完成邏輯編譯、化簡、分割、綜合、優化、布局布線及仿真,直至完成對于特定目標芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術的出現,極大地提高了電路設計的效率和可操作性,減輕了設計者的勞動強度。 其次,通過對課程的實驗的學習,讓我感覺收獲頗多,我對EDA的學習和理解有了更深刻的認識和體會,對數字邏輯與數字電路有初步的了解,而EDA是在數字電路發展到一定階段的產物,因此學習起來也很費力。在這一周的實訓中我們不僅鞏固了以前學過的知識,而且還學到了怎樣運用EDA設計VHDL程序、電路、波形的整個過程和思路,更加強了我們動手能力,同時也提高了我們的思考能力的鍛煉,我們在寫程序的同時還要學會要改程序,根據錯誤的地方去修改程序。 在此次實訓的過程中,我了解到,我們需要加強培養動手能力,要明白理論與實踐結合的重要性,只有理論知識也是不夠的,只有把所學的理論知識和實踐相結合,才能真正提高我們的實際動手能力與獨立思考的能力。 我雖然碰到了很多困難和問題,到最后還是靠自己的努力與堅持獨立的完成了任務。當遇到了自己無法解決的困難與問題的時候,要有耐心,要學會一步步的去找問題的根源,才能解決問題,還請教老師給予指導和幫助。這次實訓給我最深的印象就是擴大自己的知識面,知道要培養哪些技能對我們的專業很重要。最終我成功地完成了這次的實踐課程,包括時序仿真和 硬件測試仿真,都取得了較好地效果。還要在今后的課本理論知識學習過程中要一步一個腳印的扎實學習,靈活的掌握和運用專業理論知識這樣才能在以后工作的實踐過程中有所成果。 通過這次課程設計,我進一步熟悉了verilog hdl語言的結構,語言規則和語言類型。對編程軟件的界面及操作有了更好的熟悉。在編程過程中,我們雖然碰到了很多困難和問題,到最后還是靠自己的努力與堅持獨立的完成了任務。當遇到了自己無法解決的困難與問題的時候,要有耐心,要學會一步步的去找問題的根源,才能解決問題,還請教老師給予指導和幫助。這次實訓給我最深的印象就是擴大自己的知識面,知道要培養哪些技能對我們的專業很重要。通過這次課程設計,培養了我們共同合作的能力。但是此次設計中參考了其他程序段實際思想,顯示出我們在程序設計方面還有不足之處。 在此次實訓的過程中,我了解到了要加強培養動手能力,要明白理論與實踐結合的重要性,只有理論知識也是不夠的,只有把理論知識和實踐相結合,才能真正提高我們的實際動手能力與獨立思考的能力。通過用VHDL語言設計,統領整個教學內容,讓我們在學習過程中得到反復性的思維訓練,加深了對教學內容的理解和運用,增強了我們對EDA技術應用性的熟悉和理解。 致 謝 非常感謝張老師這一學期來的指導與教誨,感謝老師在學習上給予的指導,老師平常的工作也很忙,但是在我們學習的過程中,從來沒有耽擱過,我們遇到問題問他,他重來都是很有耐心,不管問的學生有多少,他都細心的為每個學生講解,學生們遇到的不能解決的,他都配合同學極力解決。 感謝學院給我們提供這次實訓的機會,感謝張老師對我們的指導,他是為了教會我們如何運用所學的知識去解決實際的問題,此外,還得出一個結論:知識必須通過應用才能實現其價值!有些東西以為學會了,但真正到用的時候才發現是兩回事,所以我認為只有到真正會用的時候才是真的學會了。 本次設計過程中得到我們老師們的悉心指導。屈老師多次詢問設計進程,并為我們指點迷津,幫助我們理順設計思路,精心點撥、熱忱鼓勵。老師一絲不茍的作風,嚴謹求實的態度,踏踏實實的精神,不僅授我以文,并將積極影響我今后的學習和工作。在此誠摯地向老師們致謝,祝愿們老師身體健康,203130705岳慧慧 電子設計自動化技術EDA實習報告 全家幸福。 參考文獻 [1]黃正瑾.CPLD系統設計技術入門與應用.北京:電子工業出版社,2003 [2]宋萬杰,羅豐等.CPLD技術及其應用.西安:西安電子科技大學出版社,1999 [3]新編數字邏輯電路.北京郵電大學出版社.江國強.2006.12 [4]EDA技術與應用.電子工業出版社.江國強.2010.4 [5]數字電路EDA入門---VHDL程序實例集.北京郵電大學出版社.張亦華 [6]譚會生,張昌凡.EDA技術及應用[M].西安:西安電子科技大學出版社,2012.6 [7]潘松,黃繼業.EDA技術實用教程[M].北京:科學出版社,2008.8 203130705岳慧慧 35 青島農業大學 電子設計自動化課程設計報告 2013——2014學年 第1學期 實習題目:數字式競賽搶答器 姓名 : 學號 : 專業班級: 指導老師: 2013年8月26日 EDA技術及應用實習報告 自動售賣機 信息13-2班06號 GMH 北華大學電氣信息工程學院 目 錄 一、設計任務功能簡介............................................................................2 1、設計任務......................................................................................2 2、主要功能......................................................................................2 二、原理、方案、框圖及任務分解........................................................2 1、原理...............................................................................................2 2、方案...............................................................................................2 3、框圖...............................................................................................3 4、任務分解......................................................................................3 三、關鍵任務的設計代碼及注釋............................................................4 四、調試中出現的問題及解決方案........................................................8 1、問題一...........................................................................................8 2、問題二...........................................................................................8 五、產業化市場分析及預測....................................................................8 六、測試及運行結果................................................................................9 七、參考文獻...........................................................................................1 一、設計任務功能簡介 1、設計任務 自動售貨機設計。利用軟件QuartusII軟件,使用VHDL語言結合硬件要求對本題目設計功能進行編程,并在完成整個硬件程序設計后,在軟件平臺上進行編譯和電路仿真,最后生成的目標文件下載到DE2-70實驗板上實現上述所有功能并驗證程序的可行性。 2、主要功能 本設計主要實現的功能為:貨物信息存儲功能、商品選擇功能、輸入錢數處理功能、貨架商品更換功能、語音提示功能、信息顯示等功能。 二、原理、方案、框圖及任務分解 1、原理 自動售貨機(Vending Machine,VEM)是能根據投入的錢幣自動付貨的機器。自動售貨機是商業自動化的常用設備,它不受時間、地點的限制,能節省人力、方便交易。是一種全新的商業零售形式,又被稱為24小時營業的微型超市。能分為三種:飲料自動售貨機、食品自動售貨機、綜合自動售貨機。自動售貨機是臺機電一體化的自動化裝置,在接受到貨幣已輸入的前提下,靠觸摸控制按 扭輸入信號使控制器啟動相關位置的機械裝置完成規定動作,將貨物輸出。 2、方案 根據題目要求機器設有2個投幣孔,機器可以接受1元和5元的紙幣,分別有八種商品,價格分別為1元,4元,2元,3元,6元,7元,5元,8元,機器采用撥碼開關模擬機器的復位鍵、確認購買鍵和商品選擇,并且通過開發板上的LED等分別顯示購買的不同情況,數碼管實時顯示購買金額,包括投入的價錢,找零的價錢。此設計按照EDA課程設計 的流程進行源代碼的編寫、仿真。本設計主要利用QuartusⅡ等設計軟件進行設計。 3、框圖 依題目要求設計流程框圖如下所示: 圖2-1 程序流程圖 4、任務分解 本設計主要包括按鍵模塊、顯示模塊、語音提示模塊。設計程序任務如下圖: 圖2-2 程序任務圖 任務一:存儲商品信息。商品名稱及商品價格等信息。 任務二:響應用戶選擇商品的操作。用戶用過按鍵選擇商品,售賣機要實時顯示商品名稱及價格信息。任務三:貨幣處理。待用戶選擇商品結束,售賣機要接收用戶投幣,包括判斷紙幣的面額、總金額、是否投幣結束等信息。 任務四:人性化設計。售賣機要有良好的人性化交互界面,以及必要的文字、語音等提示信息。 三、關鍵任務的設計代碼及注釋 10000“; elsif item =”100“ then item_dis <=”10011001“;money_dis<=”11111001“; elsif item =”101“ then item_dis <=”10010010“;money_dis<=”10011001“; elsif item =”110“ then item_dis <=”10000010“;money_dis<=”10110000“; elsif item =”111“ then item_dis <=”11111000“;money_dis<=”10000000“;end if;end if;else item_dis<=”11111111“;money_dis 商品選擇進程設計: data:process(START,sel_add)begin if START='1' then f sel_add'event and sel_add='1' then item<=item+1;if item =”000“ then item_dis <=”11000000“;money_dis<=”10011001“;elsif item =”001“ then item_dis <=”11111001“;money_dis<=”11111000“;elsif item =”010“ then item_dis <=”10100100“;money_dis<=”10100100“;elsif item =”011“ then item_dis <=”10110000“;money_dis<=”101<=“11111111”;price <=“0000”;end if;end process data;-------------------------付錢進程設計: pay:process(finish ,one,five)begin if finish='1' then if one'event and one ='1' then pay_money_one<=pay_money_one+1; if five'event and five ='1' then pay_money_five<=pay_money_five+5;end if;pay_money <= when “0001” => <= pay_money_dis_g “11111001”;pay_money_dis_s <= “11000000”;when “0010” => <= pay_money_dis_g “10100100”;pay_money_dis_s <= “11000000”;when “0011” => <= pay_money_dis_g “10110000”;pay_money_dis_s <= “11000000”;when “0100” => <= pay_money_dis_g “10011001”;pay_money_dis_s <= “11000000”;when “0101” => <= pay_money_five+pay_money_one;case pay_money is when “0000” => <= pay_money_dis_g “10010010”;pay_money_dis_s <= “11000000”;when “0110” => <= pay_money_dis_g “11000000”;pay_money_dis_s <= “11000000”; pay_money_dis_g “10000010”;pay_money_dis_s <= “11000000”;when “0111” => <= when “1100” => <= pay_money_dis_g “10100100”;pay_money_dis_s <= “11111001”;when “1101” => <= pay_money_dis_g “11111000”;pay_money_dis_s <= “11000000”;when “1000” => <= pay_money_dis_g “10110000”;pay_money_dis_s <= “11111001”;when “1110” => <= pay_money_dis_g “10000000”;pay_money_dis_s <= “11000000”;when “1001” => <= pay_money_dis_g “10011001”;pay_money_dis_s <= “11111001”;when “1111” => <= pay_money_dis_g “10010000”;pay_money_dis_s <= “11000000”;when “1010” => <= pay_money_dis_g “10010010”;pay_money_dis_s <= “11111001”; when others => pay_money_dis_g <=“11000000”;pay_money_dis_g “11000000”;pay_money_dis_s <= “11111001”;when “1011” => <= pay_money_dis_s <= pay_money_dis_g “11000000”;end case; if pay_money >= price then “11111001”;pay_money_dis_s <= “11111001”;back <= pay_money-price;case back is when “0000” => money_back_dis <= “11000000”;when “0001” => money_back_dis <= “11111001”;when “0010” => money_back_dis <= “10100100”;when “0011” => money_back_dis <= “10110000”;when “0100” => money_back_dis <= “10011001”;when “0101” => money_back_dis <= “10010010”;when “0110” => money_back_dis <= “10000010”;when “0111” => money_back_dis <= “11111000”;when “1000” => money_back_dis <= “10000000”; when “1001” => money_back_dis <= “10010000”; when others => money_back_dis <=“11000000”; ----------------------聲音提示進程設計: int:process(START,finish) begin if START ='1' and finish = '0' then sound<=“01”; elsif START ='1' and finish = '1' then sound<=“10”; elsif START ='0' and finish = '0' then sound<=“11”; end if; end process int; ----------------------end architecture behav; 四、調試中出現的問題及解決方案 1、問題一 問題描述:本設計語音芯片采用LJ600,選擇揚聲器輸出模式,可存儲6段語音片段,對應6個引腳下降沿觸發且低電平至少維持1ms,語音觸發之后必須處于高電平狀態,否則影響其他語音輸出。綜上描述,觸發信號應為一個門信號。由于系統未引入時鐘,且在同一進程中不可對輸出信號重復賦值,產生問題。 解決辦法:代碼如下圖,在if語句中實現狀態跳轉。 2、問題二 變量初始化狀態必須明確定義高低電平。即狀態輸出時,必須考慮高低電平兩種狀態,不可以出現不確定狀態。完全按照語法要求。 五、產業化市場分析及預測 隨著信息技術的發展及人們生活水平的不斷提高,人們的消費觀念及消費需求都在不斷地改變和提高。自動售賣機正是為了滿足人們的這種需求而在多年前被引入國內的。但早期的自動售賣機在國內并未獲得預期的市場反應及消費者的廣泛使用。現階段大多數的自動售 賣機只投放在國內一線城市,銷售的貨品也只停留在零食、飲料、飲用水、計生用品等有限的幾樣品種。在零售業市場競爭日趨白熱化的今天,壓縮經營成本是增強企業市場競爭力的一個主要手段。然而無論是連鎖超市還是便利店,日益高漲的店面租金及人力成本,已經成為他們無法忽視也無法回避的沉重負擔。而自動售賣機卻完全沒有上述所說的麻煩,它24小時營業、售貨便利、方便找零,占地面積小(一般僅需1平方米)、移動性強,無須常駐人員盯守、省人工成本,時尚新穎、個性獨特、集高科技于一體,有利于樹立品牌形象,養護費用低,日常免維護……這些優勢勢必引領潮流,使得自動售賣機日發成為市場新寵,在零售業市場占領一席之地。 六、測試及運行結果 售賣機整體結構如下圖所示: 圖6-1 整體結構 商品0的價格為4元。 商品1價格為7元。 商品7價格為8元,輸入11元,找零3元。 商品選擇按鈕及確定按鍵。 七、參考文獻 [1]潘松,黃繼業.EDA技術與VHDL.第4版.北京:清華大學出版社,2013.4 [2]潘松,王國棟.VHDL實用教程(修訂版).成都:成都電子科技大學出版社,2001 [3]曾繁泰,陳美金.VHDL程序設計.北京:清華大學出版社,2001.1第三篇:EDA實習報告
第四篇:eda實習報告封皮
第五篇:EDA實習報告(自動售賣機)