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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1394|回復: 0
打印 上一主題 下一主題
收起左側

交通燈的FPGA程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:530516 發表于 2019-5-9 18:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
以前做的,以前調試出來了,現在不知道合適沒有
摘要:
可編程邏輯器件,不僅速度快、集成度高,并且能隨心所欲地完成用戶定義的邏輯功能,還可以加密和重新編程,其編程次數最大可達1萬次以上。使用可編程邏輯器件可以大大簡化硬件系統、降低成本、提高系統的可靠性、靈活性和保密性交通燈控制電路自動控制十字路口兩組紅、黃、綠交通燈的狀態轉換,指揮各種車輛和行人安全通行,實現十字路口交通管理的自動化。交通信號燈的出現,使交通得以有效管制,對于疏導交通流量、提高道路通行能力、減少交通事故有明顯效果。本設計主要以74190芯片為核心實現交通燈控制。這個電路采用兩個74190芯片連成一個從25到00的計數器,用JK觸發器實現信號燈的轉換,倒計時顯示采用七段數碼管作為顯示,非常簡單地實現了交通信號燈的控制。使用電腦仿真技術對系統進行仿真。

目錄
1.EDA技術概述17
2.設計思路17
2.1設計思路18
2.2所實現功能說明19
3.各模塊的編程實現20
3.1  時基脈沖發生模塊20
3.2  計數及紅綠燈控制模塊22
3.3  譯碼模塊23
3.4  主程序25
3.5  仿真時序圖29
4.心得體會30
5.參考文獻30

1.EDA技術概述
FPGA(現場可編程門陣列)和CPLD(復雜可編程邏輯器件)都是可編程邏輯器件,他們是在PAL,GAL等邏輯器件的基礎上發展起來的。同以往的PAL,GAL相比較,FPGA/CPLD的規模比較大,它可以替代幾十甚至幾千塊通用IC芯片。這樣的FPGA/CPLD實際上就是一個子系統部件。這種芯片受到世界范圍內電子工程設計人員的廣泛關注和普遍歡迎。比較典型的就是Altera公司和Xilinx公司的CPLD器件系列和FPGA器件系列,他們開發較早,占用了較大的PLD市場。
對用戶而言,雖然FPGA/CPLD的內部結構稍有不同,但其用法都一樣,所以大多數情況下,不加以區分。FPGA/CPLD芯片都是特殊的ASIC芯片,除了具有ASIC的特點外,還具有以下幾個優點:
(1) 隨著VLSI(Very LargeScale IC,超大集成電路)工藝的不斷提高單一芯片內部可以容納上百萬個晶體管,FPGA/CPLD芯片的規模也越來越大,其單片邏輯門數已達到上百萬門,它所實現的功能也越來越強,同時也可以實現系統集成,即片上系統SOC.
(2) FPGA/CPLD芯片在出廠之前都做過百分之百的測試,不需要設計人員承擔芯片風險和費用,設計人員只需在自己的實驗室就可以通過相關的軟硬件環境來完成芯片的最終功能設計。所以,FPGA/CPLD的資金投入就小,減少了潛在的花費。
(3) 用戶可以反復地編程、擦除、使用或者在外圍電路不動的情況下用不同軟件就可實現不同的功能。FPGA/CPLD軟件包中有各種輸入工具和仿真工具,及版圖設計工具和編程器等全線產品,電路設計人員在很短的時間內就可完成電路的輸入、編譯、優化。仿真,直至最后芯片的制作。當電路有少量的改動,更能顯示FPGA/CPLD的優勢。電路設計人員在使用FPGA/CPLD進行電路設計時,不需要具有專門的IC(集成電路)深層次的知識,FPGA/CPLD軟件易學易用,能使設計人員更能集中精力進行電路設計,快速將產品推向市場。
(4) 在線可編程技術(ISP)使得使用FPGA/CPLD的產品可以做到遠程升級。
2.設計思路
2.1設計思路
所設計的交通信號燈控制電路,主要適用于在兩條干道匯合點形成的十字交叉路口,路口設計兩組紅綠燈分別對兩個方向上的交通運行狀態進行管理。
東西方向和南北方向各使用3個LED顯示,紅黃綠各代表紅黃綠燈,綠燈亮同時是人行燈。
東西方向和南北方向計時均為2位數,共需要4個LED七段數碼管顯示。Time信號輸出顯示的內容。采用EPF10K10LC84-4 實現
2.2 所實現功能說明
南北和東西方向各有一組綠,人行,紅,黃燈,各自的持續時間分別為20s,20s,25s,5s;用兩組數碼管,以倒計時方式顯示兩個方向允許通行或禁止通行的剩余時間;綠燈也可看做人行燈;
3.各模塊的編程實現
3.1時基脈沖發生模塊
在紅綠燈交通信號系統中,大多數的情況是通過自動控制的方式指揮交通的。因此,為了避免意外事件的發生,電路必須給出一個穩定的時鐘才能讓系統正常的工作。因此時鐘發生模塊最主要的功能就是產生一些穩定的輸出信號,并將其用做后面幾個電路的使能控制與同步信號。通過編程實現1Hz脈沖的產生,程序如下所示。
  1. Library IEEE ;      
  2. use IEEE.std_logic_1164.all ;
  3. ENTITY CLKGEN IS
  4.      PORT(    CLK1:IN STD_LOGIC;
  5.                CLK:OUT STD_LOGIC);
  6. END CLKGEN;
  7. ARCHITECTURE behav OF CLKGEN IS
  8.   SIGNAL CNTER:INTEGER RANGE 0 TO 25000000;
  9. BEGIN
  10.    PROCESS(CLK)            BEGIN
  11.      IF CLK'EVENT AND CLK='1' THEN
  12.       IF CNTER=25000000 THEN CNTER<=0;
  13.        ELSE CNTER<=CNTER+1;  
  14.       END IF;
  15.      END IF;
  16.    END PROCESS;
  17.    PROCESS(CNTER)      
  18.     BEGIN
  19.      IF CNTER=12500000 THEN CLK<='1';
  20.        END IF;
  21.      IF CNTER=25000000 THEN CLK<='0';
  22.        END IF;
  23.    END PROCESS;
  24. END behav;
復制代碼
3.2計數及紅綠燈控制模塊

南北向和東西向各有一組紅黃綠燈,各自持續的時間為分別為25s、5s、20s。通過編程可以實現控制各通道的計數控制且輸出為二進制數,并且可以控制各燈的亮滅情況,高電平為亮,低電平為滅。

東西向模塊程序為:
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.std_logic_unsigned.all;
  4. entity daolu1 is
  5.         port(
  6.         clk:in std_logic;               
  7. timel:out std_logic_vector(4 downto 0);        
  8. r,g,t:out std_logic                );
  9. end daolu1;
  10. architecture daodu of daolu1 is
  11. type color is(green,yellow,red);
  12. begin
  13.         process(clk)
  14.         variable reset:std_logic:='0';
  15.         variable tempr,tempg,tempt:std_logic;
  16.         variable temp_l:std_logic_vector(4 downto 0);
  17.     variable temp_color:color:=green;
  18.         begin
  19.                 if(clk'event and clk='1')then        
  20.                         case temp_color is
  21.                         when yellow=>               
  22.                                         tempr:='1';
  23.                                         tempg:='0';
  24.                     tempt:='0';
  25.                                         case reset is               
  26.                                         when '0' =>               
  27.                                                 temp_l:="00100";
  28.                                                 reset:='1';
  29.                                         when others =>        
  30.                                                 case temp_l is
  31.                                                                 when "00000"=>
  32.                                                                 temp_l:="11000";
  33.                                                                 temp_color:=red;
  34.                                                         when others=>
  35.                                                                 temp_l:=temp_l-1;
  36.                                                          end case;
  37.                                                 end case;
  38.                                         when green=>        
  39.                                                 tempr:='0';
  40.                                                 tempg:='0';
  41.                         tempt:='1';
  42.                                                 case reset is               
  43.                                                 when '0' =>               
  44.                                                 temp_l:="10011";
  45.                                                         reset:='1';
  46.                                                 when others =>        
  47.                                                 case temp_l is                                       
  48.                         when "00000"=>
  49.                                                         temp_l:="00100";
  50.                                                         temp_color:=yellow;
  51.                                                 when others=>
  52.                                                         temp_l:=temp_l-1;
  53.                                                  end case;
  54.                                         end case;
  55.                                 when red=>                        
  56.                                         tempr:='0';
  57.                                         tempg:='1';
  58.                        tempt:='0';                        
  59.                                         case reset is               
  60.                                         when '0' =>        
  61.                                                 temp_l:="11000";
  62.                                                 reset:='1';
  63.                                         when others =>        
  64.                                                 case temp_l is
  65.                                                                 when "00000"=>
  66.                                                                 temp_l:="10011";
  67.                                                                 temp_color:=green;
  68.                                                         when others=>
  69.                                                                 temp_l:=temp_l-1;
  70.                                                          end case;
  71.                                                 end case;
  72.                  end case;        
  73.                                 
  74.         end if;
  75.         timel<=temp_l;
  76.         r<=tempr;
  77.         g<=tempg;
  78.     t<=tempt;
  79. end process;
  80. end;

  81. 南北向模塊程序為:
  82. library ieee;
  83. use ieee.std_logic_1164.all;
  84. use ieee.std_logic_unsigned.all;
  85. entity daolu2 is
  86.         port(
  87.                 clk:in std_logic;               
  88.                         time2:out std_logic_vector(4 downto 0);        
  89.                 r1,g1,t1:out std_logic               
  90.                 );
  91. end daolu2;
  92. architecture daolu of daolu2 is
  93. type color is(red,green,yellow);
  94. begin
  95.         process(clk)
  96.         variable reset:std_logic:='0';
  97.         variable tempr,tempg,tempt:std_logic;
  98.         variable temp_l:std_logic_vector(4 downto 0);
  99.     variable temp_color:color:=red;
  100.         begin
  101.                 if(clk'event and clk='1')then
  102.                         
  103.                         case temp_color is
  104.                         when yellow=>               
  105.                                         tempr:='1';
  106.                                         tempg:='0';
  107.                     tempt:='0';
  108.                                         case reset is               
  109.                                         when '0' =>               
  110.                                                 temp_l:="00100";
  111.                                                 reset:='1';
  112.                                         when others =>        
  113.                                                 case temp_l is
  114.                                                                 when "00000"=>
  115.                                                                 temp_l:="11000";
  116.                                                                 temp_color:=red;
  117.                                                         when others=>
  118.                                                                 temp_l:=temp_l-1;
  119.                                                          end case;
  120.                                                 end case;
  121.                                         when green=>        
  122.                                                 tempr:='0';
  123.                                                 tempg:='0';
  124.                         tempt:='1';
  125.                                                 case reset is               
  126.                                                 when '0' =>               
  127.                                                         temp_l:="10011";
  128.                                                         reset:='1';
  129.                                                 when others =>        
  130.                                                 case temp_l is
  131.                                                                 when "00000"=>
  132.                                                                 temp_l:="00100";
  133.                                                                 temp_color:=yellow;
  134.                                                         when others=>
  135.                                                                 temp_l:=temp_l-1;
  136.                                                          end case;
  137.                                                 end case;
  138.                                         when red=>                        
  139.                                                 tempr:='0';
  140.                                                 tempg:='1';                                       
  141.                                                 tempt:='0';
  142.                         case reset is               
  143.                                                 when '0' =>        
  144.                                                         temp_l:="11000";
  145.                                                         reset:='1';
  146.                                                 when others =>        
  147.                                                 case temp_l is
  148.                                                                 when "00000"=>
  149.                                                                 temp_l:="10011";
  150.                                                                 temp_color:=green;
  151.                                                         when others=>
  152.                                                                 temp_l:=temp_l-1;
  153.                                                          end case;
  154.                                                 end case;
  155.                        end case;        
  156.                                         end if;
  157.                 time2<=temp_l;
  158.         r1<=tempr;
  159.         g1<=tempg;
  160.      t1<=tempt;
  161. end process;
  162. end;
復制代碼

3.3 譯碼模塊

計數控制電路輸出為二進制碼,要想用數碼管顯示計數需要把二進制碼變為七段碼。通過編程先把二進制碼轉換為BCD碼再把BCD碼轉換為七段碼實現程序如下:

將二進制碼轉化為BCD碼
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. entity yima is
  4. port (time : in std_logic_vector(4 downto 0);
  5.       tim  : out std_logic_vector(7 downto 0));
  6. end yima;
  7. architecture one of yima is
  8. begin
  9. process(time)
  10. begin
  11. case time is
  12. when "00000" => tim <= "00000000";
  13. when "00001" => tim <= "00000001";
  14. when "00010" => tim <= "00000010";
  15. when "00011" => tim <= "00000011";
  16. when "00100" => tim <= "00000100";
  17. when "00101" => tim <= "00000101";
  18. when "00110" => tim <= "00000110";
  19. when "00111" => tim <= "00000111";
  20. when "01000" => tim <= "00001000";
  21. when "01001" => tim <= "00001001";
  22. when "01010" => tim <= "00010000";
  23. when "01011" => tim <= "00010001";
  24. when "01100" => tim <= "00010010";
  25. when "01101" => tim <= "00010011";
  26. when "01110" => tim <= "00010100";
  27. when "01111" => tim <= "00010101";
  28. when "10000" => tim <= "00010110";
  29. when "10001" => tim <= "00010111";
  30. when "10010" => tim <= "00011000";
  31. when "10011" => tim <= "00011001";
  32. when "10100" => tim <= "00100000";
  33. when "10101" => tim <= "00100001";
  34. when "10110" => tim <= "00100010";
  35. when "10111" => tim <= "00100011";
  36. when "11000" => tim <= "00100100";
  37. when others => NULL;
  38. end case;
  39. end process;
  40. end;

  41. 將BCD碼轉化為七段碼
  42. library ieee;
  43. use ieee.std_logic_1164.all;
  44. use ieee.std_logic_unsigned.all;
  45. entity yima1 is
  46. port (jin : in std_logic_vector(3 downto 0);
  47.       chu  : out std_logic_vector(6 downto 0));
  48. end yima1;
  49. architecture art of yima1 is
  50. begin
  51. process (jin) is
  52. begin
  53. case jin is
  54. when "0000"=>chu<="0111111";
  55. when "0001"=>chu<="0000110";
  56. when "0010"=>chu<="1011011";
  57. when "0011"=>chu<="1001111";
  58. when "0100"=>chu<="1100110";
  59. when "0101"=>chu<="1101101";
  60. when "0110"=>chu<="1111101";
  61. when "0111"=>chu<="0000111";
  62. when "1000"=>chu<="1111111";
  63. when "1001"=>chu<="1101111";
  64. when others=>chu<="0000000";
  65. end case;
  66. end process;
  67. end architecture art;
  68. 3.4 主程序
  69. library ieee;
  70. use ieee.std_logic_1164.all;
  71. use ieee.std_logic_unsigned.all;
  72. entity jtd is
  73.         port(clk:in std_logic;        
  74.     r,g,t,r1,g1,t1:out std_logic;
  75. dout1,dout2,dout3,dout4:out std_logic_vector(6 downto 0));        
  76. end entity jtd;
  77. architecture art of jtd is
  78. component daolu1 is
  79. port(
  80.         clk:in std_logic;               
  81.         timel:out std_logic_vector(4 downto 0);        
  82.     r,g,t:out std_logic);
  83. end component daolu1;
  84. component daolu2 is
  85. port(
  86.         clk:in std_logic;               
  87.         time2:out std_logic_vector(4 downto 0);        
  88.     r1,g1,t1:out std_logic);
  89. end component daolu2;
  90. component yima is
  91. port (time : in std_logic_vector(4 downto 0);
  92.       tim  : out std_logic_vector(7 downto 0));
  93. end component yima;
  94. component yima1 is
  95. port (shr : in std_logic_vector(4 downto 0);
  96.       chu  : out std_logic_vector(7 downto 0));
  97. end component yima1;
  98. signal ad1,ad2:std_logic_vector(4 downto 0);
  99. signal ac1,ac2:std_logic_vector(7 downto 0);
  100. begin
  101. u1:daolu1 port map(clk=>clk,g=>g,t=>t,r=>r,timel=>ad1);
  102. u2:daolu2 port map(clk=>clk,g1=>g1,t1=>t1,r1=>r1,time2=>ad2);
  103. u3:yima  port map(time=>ad1,tim=>ac1);
  104. u4:yima  port map(time=>ad2,tim=>ac2);
  105. u5:yima1 port map(shr=>ac1(3 downto 0),chu=>dout1);
  106. u6:yima1 port map(shr=>ac1(7 downto 4),chu=>dout2);
  107. u7:yima1 port map(shr=>ac2(3 downto 0),chu=>dout3);
  108. u8:yima1 port map(shr=>ac2(7 downto 4),chu=>dout4);
  109. end architecture art;
復制代碼
3.5 仿真時序圖

4. 心得體會
在拿到題目后,首先進行了單元模塊的設計,將每一個單元模塊設計完成后再經行仿真,仿真成功后就可以進行頂層文件的編寫了,在頂層文件的編寫過程中遇到了一些問題,特別是各模塊之間的連接,以及信號的定義,總是有錯誤。有的時候信號的定義容易出現混淆,在反復的修改過后,頂層文件終于能夠編譯成功了。
在波形仿真的過程中,同樣遇到了困難,有的時候,由于END TIME的時間修改的太大,會出現仿真時間過長的問題,這個時候應該要把END TIME的時間相應的改小,或是修改系統時鐘的頻率。
在設計的過程中還應該多聯系下實際情況,要了解實際情況下交通信號燈的工作情況,才能更好的完成此次的課程設計。在今后的工作和學習中,我們不能僅僅把目光停留在課本上,要多理論聯系實際。有的時候,理論上是正確的東西放到現實中去,可能由于種種因素的制約,并不能達到實際的效果,還需要我們進行相應的修改才能完成要求。這次的課程設計使我鞏固了以前學習到的知識,還使我掌握了以前沒有掌握的知識,同時鍛煉了自己的能力。





評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国外成人在线视频 | 国产精品久久久久久久粉嫩 | 精品国产一区一区二区三亚瑟 | 亚洲高清视频在线观看 | 国产一区二区精品在线观看 | 综合另类 | 欧美日韩91 | 性欧美hd| 成人午夜激情 | 久久精品91久久久久久再现 | 国产一区二区视频在线 | 国产中文字幕网 | 精品久久99| 巨大黑人极品videos精品 | 亚洲视频三区 | 欧美激情五月 | 99re在线视频 | 国产精品一区二区三区久久久 | av在线播放国产 | 成人在线免费网站 | 波多野结衣av中文字幕 | 精一区二区 | 午夜视频在线观看视频 | 午夜久久久久久久久久一区二区 | 天堂综合网 | 一区二区三区久久久 | 精久久久 | 亚洲免费视频在线观看 | 国产精品久久久一区二区三区 | 高清成人免费视频 | 99久久精品国产一区二区三区 | 久久久www成人免费精品张筱雨 | 天天曰天天曰 | 蜜桃视频在线观看www社区 | 成人欧美一区二区三区色青冈 | 国产精品中文字幕在线 | 91社区在线观看播放 | 91欧美激情一区二区三区成人 | 四虎影院免费在线 | 欧美一级二级三级 | 亚洲视频 欧美视频 |