久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3887|回復: 2
打印 上一主題 下一主題
收起左側(cè)

基于FPGA的洗衣機控制器設計 VHDL程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:816987 發(fā)表于 2020-11-30 08:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

設計環(huán)境語言

2.1.1 Max+plusII
如圖2.1所示,MAX+PLUS II是Altera公司的全集成化可編程邏輯設計環(huán)境。MAX+plus II 界面友好,使用便捷,被譽為業(yè)界最易用易學的EDA軟件。MAX+plus II支持原理圖、VHDL和Verilog語言文本文件,以及波形與EDIF等格式的文件作為設計輸入,并支持這些文件的任意混合設計。MAX+plusII具有門級仿真器,可以進行功能仿真和時序仿真,能夠產(chǎn)生精確的仿真結果。在適配之后,MAX+plusII生成供時序仿真用的EDIF、VHDL和Verilog三種不同格式的網(wǎng)表文件。
MAX+plusII支持主流的第三方EDA工具,如Synopsys、Cadence、Synplicity、Mentor、Viewlogic、Exemplar和Model Technology等。MAX+plusII支持除APEX20K系列之外的所有Altera FPGA/CPLD大規(guī)模邏輯器件。
MAX+plusII的HDL文本編輯器是很有彈性的工具,提供多種硬件描述語言的文字編輯與合成的環(huán)境。其中包括有:
1.Altera Hardware Description Language (AHDL)
2.Very High Integrated Circuit Hardware Description Language (VHDL)
3.Verilog Hardware Description Language (Verilig HDL)
以AHDL語法編寫的文件格式為*.tdf,以VHDL語法編寫的文件格式則為*.vhd,而以Verilog HDL語法編寫的文件格式則為*.v。可以設計程序創(chuàng)建一個符號文件供圖形編輯器使用。

圖2.1


2.1.2 VHDL
VHDL 的英文全名是VHSIC Hardware Description Language(VHSIC硬件描述語言)。VHSIC是Very High Speed Integrated Circuit的縮寫,是20世紀80年代在美國國防部的資助下始創(chuàng)的,并最終導致了VHDL語言的出現(xiàn)。1987年底,VHDL被 IEEE 和美國國防部確認為標準硬件描述語言。VHDL主要用于描述數(shù)字系統(tǒng)的結構,行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風格與句法是十分類似于一般的計算機高級語言。VHDL的程序結構特點是將一項工程設計,或稱設計實體(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可視部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實體的內(nèi)部功能和算法完成部分。在對一個設計實體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設計就可以直接調(diào)用這個實體。這種將設計實體分成內(nèi)外部分的概念是VHDL系統(tǒng)設計的基本點。
描述 在這個語言首次開發(fā)出來時,其目標僅是一個使電路文本化的一種標準,為了使人們采用文本方式描述的設計能夠被其他人沒有二意性地所理解。因為用自然語言描述電路會產(chǎn)生二意性。 這個模型是讓人來閱讀的。 模擬的模型 作為模型語言,用于采用模擬軟件進行模擬。這個模型是讓仿真軟件來閱讀的。 綜合的模型 在自動設計系統(tǒng)中,作為設計輸入。這個模型是讓綜合軟件來閱讀的。
VHDL 語言能夠成為標準化的硬件描述語言并獲得廣泛應用,它自身必然具有很多其他硬件描述語言所不具備的優(yōu)點。歸納起來,VHDL語言主要具有以下優(yōu)點:
(1)VHDL 語言功能強大,設計方式多樣
(2)VHDL 語言具有強大的硬件描述能力
(3)VHDL 語言具有很強的移植能力
(4)VHDL 語言的設計描述與器件無關
(5)VHDL 語言程序易于共享和復用
2.2 設計要求
1、設計一個電子定時器,控制洗衣機作如下運轉(zhuǎn):定時啟動?正轉(zhuǎn)?暫停?反轉(zhuǎn)?暫停?定時未到回到“正轉(zhuǎn)?暫停?……”,定時到則停止;
2、用兩個數(shù)碼管顯示洗滌的預置時間(分鐘數(shù)),按倒計時方式對洗滌過程作計時顯示,直到時間到停機;洗滌過程由“開始”信號開始;
3、三只LED燈表示“正轉(zhuǎn)”、“反轉(zhuǎn)”、“暫停”三個狀態(tài)。
2.3 設計流程

3 設計程序
3.1減數(shù)計時模塊
由于洗衣機有工作時間,必須要一模塊來控制它的工作時間范圍,當洗衣機開
始工作后,減法計數(shù)器即會實現(xiàn)減數(shù)功能,直到時間減到零,洗衣機便停止工作。
(1)程序
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.std_logic_unsigned.all;
  4. entity count is
  5.   port(clk,tla,start,enter:in std_logic;  
  6. ini:in std_logic_vector(7 downto 0);

  7. show:out std_logic_vector(7 downto 0);
  8.        finish:out std_logic);
  9. end count;
  10. architecture one of count is
  11. signal fini:std_logic;
  12. signal show1:std_logic_vector(7 downto 0);
  13. begin
  14.   process(tla,clk,start)
  15.    variable num:std_logic_vector(7 downto 0);
  16.   begin
  17.    if enter='1' then num:=ini;
  18.    elsif(tla'event and tla='1')then
  19.      if start='1'and num/=0 then
  20.      num:=num-1;
  21.      end if;
  22.    end if;
  23.    if enter='0'and num=0 then
  24.    fini<='1';num:="00000000";
  25.    else fini<='0';
  26.    show1<=num;
  27.    end if;
  28.   end process;
  29.   process(clk)
  30.   begin
  31.    if  clk'event and clk='1'then finish<=fini;
  32.    show<=show1;
  33.    end if;
  34.   end process;
  35. end;
復制代碼
(2)仿真波形
減數(shù)計時模塊仿真如圖3.1所示,start為電源開關,enter反應時間設置情況,當洗衣機開始工作,時由脈沖信號tla進行控制完成倒計時,并通過show進行顯示。

圖3.1

3.2 預置時間模塊設計與仿真
此模塊由一個累加器和一個命令控制器組成,用來實現(xiàn)預置時間的功能,洗滌時間數(shù)以分鐘為單位,用戶可以根據(jù)自己的需求來設置洗滌時間的長短。

  • 累加器程序
通過累加預置具體洗衣時間。
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.std_logic_unsigned.all;
  4. entity adder is
  5. port(in1:in std_logic;
  6.       q:out std_logic_vector(2 downto 0));
  7. end adder;
  8. architecture one of adder is
  9. signal add:std_logic_vector(2 downto 0);
  10. begin
  11. q<=add;
  12.   process(in1)
  13. begin
  14. if in1'event and in1='1' then
  15. add<=add+1;
  16. end if;
  17. end process;
  18. end;
復制代碼
累加器模塊仿真波形如圖3.2.1所示,通過累加的方式完成時間設置。

圖3.2.1


  • 命令控制器程序
將輸入的三位二進制時間信號編碼成十進制數(shù)輸出到減法計數(shù)器電路。
  1. LIBRARY IEEE;
  2. USE IEEE.STD_LOGIC_1164.ALL;
  3. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  4. ENTITY ORDER IS
  5.     PORT(CLK:IN STD_LOGIC;     
  6.        ORDER:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
  7.         TIME:OUT INTEGER RANGE 128 DOWNTO 0);
  8. END ORDER;
  9. ARCHITECTURE ONE OF ORDER IS
  10. BEGIN
  11.       PROCESS(CLK)
  12.       BEGIN
  13.       CASE ORDER IS
  14.       WHEN "000" =>TIME<=1;
  15.       WHEN "001" =>TIME<=2;
  16.       WHEN "010" =>TIME<=3;
  17.       WHEN "011" =>TIME<=4;
  18.       WHEN "100" =>TIME<=5;
  19.       WHEN "101" =>TIME<=6;
  20.       WHEN "110" =>TIME<=7;
  21.       WHEN "111" =>TIME<=8;
  22.       WHEN OTHERS =>TIME<=0;
  23.       END CASE;
  24. END PROCESS;
  25. END;
復制代碼
命令控制器模塊仿真波形如圖3.2.2所示,將輸入的二進制信號轉(zhuǎn)化為十進制信號。

圖3.2.2


3.3數(shù)碼管顯示模塊:
根據(jù)設計要求,必須將洗衣機的工作狀態(tài)及工作時間在數(shù)碼管和指示燈上顯示出來,此模塊是用來控制洗衣機的工作狀態(tài)及工作的頻率,并把工作狀態(tài)及工作時間顯示出來。a,b,c,d,e,f,g分別對應數(shù)碼管的七段,minute和second分別位選兩個數(shù)碼管,顯示十位和個位。
  • 程序
  1. LIBRARY IEEE;
  2. USE IEEE.STD_LOGIC_1164.ALL;
  3. USE IEEE.STD_LOGIC_UNSIGNED.ALL;
  4. ENTITY SHOWTIME IS
  5. PORT (TIME_REMAIN:IN STD_LOGIC_VECTOR (7 DOWNTO 0);
  6.               CLK:IN STD_LOGIC;
  7.     MINUTE,SECOND:OUT STD_LOGIC;
  8.     A,B,C,D,E,F,G:OUT STD_LOGIC);
  9. END SHOWTIME;
  10. ARCHITECTURE ONE OF SHOWTIME IS
  11. SIGNAL TEMP:STD_LOGIC_VECTOR(6 DOWNTO 0);
  12. SIGNAL BCD:STD_LOGIC_VECTOR(3 DOWNTO 0);
  13. SIGNAL CHOOSE:STD_LOGIC;
  14. BEGIN
  15. PROCESS (CLK)
  16. BEGIN
  17.     IF(CLK'EVENT AND CLK='1')THEN
  18.          CHOOSE<=NOT CHOOSE;
  19.           IF(CHOOSE='1')THEN
  20.           MINUTE<='0';SECOND<='1';
  21.           BCD<=TIME_REMAIN(7 DOWNTO 4);
  22.           ELSE
  23.           MINUTE<='1';SECOND<='0';
  24.           BCD<=TIME_REMAIN(3 DOWNTO 0);
  25.           END IF;
  26.     END IF;
  27.   END PROCESS;
  28.     PROCESS(BCD)
  29.     BEGIN
  30.      CASE BCD IS
  31.      WHEN "0000" =>TEMP<="1111110";--0
  32.      WHEN "0001" =>TEMP<="0110000";--1
  33.      WHEN "0010" =>TEMP<="1101101";--2
  34.      WHEN "0011" =>TEMP<="1111001";--3
  35.      WHEN "0100" =>TEMP<="0110011";--4
  36.      WHEN "0101" =>TEMP<="1011011";--5
  37.      WHEN "0110" =>TEMP<="1011111";--6
  38.      WHEN "0111" =>TEMP<="0001111";--7
  39.      WHEN "1000" =>TEMP<="1111111";--8
  40.      WHEN "1001" =>TEMP<="1111011";--9
  41.      WHEN others =>TEMP<="0000000";
  42.      END CASE;
  43.      A<=TEMP(6);B<=TEMP(5);C<=TEMP(4);D<=TEMP(3);E<=TEMP(2);F<=TEMP(1);G<=TEMP(0);
  44.    END PROCESS;
  45. END;
復制代碼
  • 仿真波形
數(shù)碼顯示模塊如圖3.3所示,通過數(shù)碼管MINUTE和SECOND顯示十位和個位的數(shù)。

圖3.3


3.4狀態(tài)機模塊:
接收電機運行狀態(tài)信號,譯碼后實時控制電機的正傳、反轉(zhuǎn)和暫停。
  • 程序
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. entity move is
  4. port(out_1,out_2:in std_logic;
  5. REV,RUN,PAUSE:buffer std_logic);
  6. end move;
  7. architecture move of move is
  8. signal choose:std_logic_vector(1 downto 0);
  9. begin
  10. choose(1)<=out_1;
  11. choose(0)<=out_2;
  12. process(choose)
  13. begin
  14. case choose is
  15. when "00"=>REV<='0';RUN<='0';PAUSE<='1';
  16. when "10"=>REV<='0';RUN<='1';PAUSE<='0';
  17. when "01"=>REV<='1';RUN<='0';PAUSE<='0';
  18. when others=>REV<='0';RUN<='0';PAUSE<='0';
  19. end case;
  20. REV<=out_2;RUN<=out_1;PAUSE<=not(out_1 or out_2);
  21. end process;
  22. end move;
復制代碼

  • 仿真波形
狀態(tài)機模塊如圖3.4所示,接受電機狀態(tài)信號,完成電機正轉(zhuǎn)RUN、反轉(zhuǎn)REV和暫停PAUSE的控制

圖3.4

采用的是模塊化層次化的設計方法,通過這樣分模塊化的思考方式,設計顯得相對容易了很多,思路也相對簡單了很多。洗衣機控制器主要有三個狀態(tài),要實現(xiàn)幾種狀態(tài)的多次循環(huán)改變,預置時間,還有計時和數(shù)碼管動態(tài)顯示的功能。因此電路可主要分為以下幾個模塊:預置時間和減法計數(shù)器模塊、數(shù)碼管動態(tài)顯示模塊、狀態(tài)控制模塊。通過每個模塊的設計,最后運用VHDL語言的進程語句進行模塊間的組合,從而完成程序的設計。
通過這次設計,我對VHDL語言有了基本的掌握,對其設計方法也有了一些技巧性的了解,為將來的硬件設計打下了一定的基礎。對于FPGA編程、定時器和計數(shù)器的設計都熟悉起來了,加深了對時序組合電路印象。同時學會了自頂向下的數(shù)字系統(tǒng)設計思路,在設計一個系統(tǒng)時,首先要對一個系統(tǒng)的功能做充分的了解,然后模塊劃分也應該進行合理的安排,模塊與模塊之間又應該如何連接,同時應該適當考慮電路實驗問題。
通過洗衣機設計,還可以使我們對于FPGA的工作原理,有了較之前更清楚明白的理解。FPGA可以應用到許多方面,通過搭載不同的內(nèi)核,可以應用到不同系統(tǒng)中,完成多種任務設計。由此可見,對于相關專業(yè)的學習與工作來說,學好FPGA,學會運用它豐富的功能,是十分有必要的。在學習一門技術之前我們往往從它的編程語言開始,如同學習單片機一樣,我們從c語言開始入門,當掌握了c語言之后,開發(fā)單片機應用程序也就不是什么難事了。學習fpga也是如此,fpga的編程語言有兩種:vhdl和verilog,這兩種語言都適合用于fpga的編程。
總的來講,在對FPGA的設計中,讓我對于可編程邏輯器件的相關理論有了更深刻的理解與掌握,且鍛煉了自己熟悉新軟件能力,并且對VHDL語言有了一定的了解,對程序的設計有了直觀的體驗,從而得到許多收獲。


以上的Word格式文檔51黑下載地址:
洗衣機控制器.doc (199.28 KB, 下載次數(shù): 30)

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:943023 發(fā)表于 2021-11-27 12:06 | 只看該作者
請問樓主這五個模塊該怎么用EDA連在一起
回復

使用道具 舉報

板凳
ID:1059369 發(fā)表于 2022-12-27 16:49 | 只看該作者
學習洗衣機控制器
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩一区在线播放 | 国产精品久久久久久久久久久久久久 | 亚洲国产精品一区二区久久 | 免费高潮视频95在线观看网站 | 中国一级特黄真人毛片 | 成人国产免费观看 | 国产成人在线免费 | 天天艹天天干天天 | 一级毛片免费看 | 国产一级免费视频 | 久久亚洲欧美日韩精品专区 | 午夜视频在线观看一区二区 | 欧美日韩1区2区3区 欧美久久一区 | 免费在线观看成人 | 欧美a区| 国产精品久久影院 | 成年免费大片黄在线观看一级 | 日本福利片 | 国产精品视频一区二区三区不卡 | 日韩欧美在线精品 | 成人日韩精品 | 中文字幕不卡在线观看 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 亚洲视频在线观看 | 日韩成人一区二区 | 国产精品18久久久久久久 | 国产有码 | 亚洲精品黄 | 粉色午夜视频 | 免费视频一区二区三区在线观看 | 中文字幕国产一区 | 夜夜av| 激情五月激情综合网 | 三级特黄特色视频 | 九九热这里 | 欧美日韩一区二区三区四区五区 | 在线亚洲电影 | 911网站大全在线观看 | 中文字幕精品一区二区三区精品 | 99一级毛片 | 亚洲色欧美另类 |