• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于VHDL語言的8×8點陣模塊控制器設(shè)計

      2018-09-26 11:34:32楊斌李亞峻喬廣欣李松李毅
      關(guān)鍵詞:現(xiàn)場可編程門陣列

      楊斌 李亞峻 喬廣欣 李松 李毅

      摘要:介紹了LED點陣顯示模塊的硬件連接、MAX7219的初始化與工作時序,用VHDL語言編程實現(xiàn)了時鐘分頻、數(shù)據(jù)的存儲與調(diào)用、MAX7219控制器的設(shè)計。將Basys2開發(fā)板與點陣模塊相連,將程序下載到FPGA上,實現(xiàn)了8×8點陣的顯示,驗證了設(shè)計的正確性,該設(shè)計具有實際應(yīng)用價值。

      關(guān)鍵詞:現(xiàn)場可編程門陣列;VHDL語言;MAX7219芯片;點陣顯示

      中圖分類號:TP273 文獻標(biāo)識碼:A 文章編號:1007-9416(2018)05-0006-03

      LED點陣顯示系統(tǒng)不僅能夠靜態(tài)顯示字符和圖像,而且能夠動態(tài)顯示文字、動畫、視頻等信息,在廣告、信息發(fā)布、體育比賽、工業(yè)等各個領(lǐng)域都有廣泛應(yīng)用。

      LED點陣顯示控制器的種類不少,包括單片機[1]、ARM[2, 3]、FPGA[4],等等。本文采用DIGILENT公司的Basys2便攜式開發(fā)板,它是完整的即用型硬件系統(tǒng),適于從基本邏輯器件到復(fù)雜控制器的電路設(shè)計,其上嵌有Xilinx Spartan-3E系列FPGA器件[5]。

      8×8點陣有16個引腳,如果直接與微處理器相連占用引腳資源太多,實際多用譯碼器、串并轉(zhuǎn)換芯片控制點陣。本文采用的8×8點陣模塊由一片MAX7219驅(qū)動。

      1 基于MAX7219的8×8點陣模塊

      1.1 8×8點陣模塊的硬件連接

      圖1所示為MAX7219芯片的主要引腳。它只有三個輸入端DIN、CS、CLK,可以與所有通用的微處理器相連,所以由MAX7219驅(qū)動的8×8點陣模塊克服了點陣引腳過多的問題。

      MAX7219芯片的輸出端DIG0~DIG7連到8×8點陣H1~H8行,SEG DP、SEG A~G連到8×8點陣L1~L8列,DOUT作為串行輸出可用于級聯(lián)擴展。MAX7219中含有BCD編碼器(本文未用到)、多路掃描回路(對DIG0~DIG7以不低于800Hz的頻率自動輪詢掃描)、段驅(qū)動器(驅(qū)動SEG DP、SEG A~G8段)和8×8 SRAM靜態(tài)隨機存儲器(用于存儲數(shù)據(jù))。

      1.2 MAX7219的初始化與數(shù)據(jù)的存取

      在DIN端輸入串行的16位數(shù)據(jù),數(shù)據(jù)中包含如表1所示的信息。

      MAX7219芯片的寄存器分為控制寄存器和數(shù)據(jù)寄存器兩種。

      控制寄存器有五個,分別是譯碼模式、亮度、掃描限、掉電和顯示檢測,寄存器地址依次為9、A、B、C、F,每個寄存器初始化的所有可能設(shè)置詳見MAX7219說明文檔[6]。本設(shè)計的初始化設(shè)定值如下:0900,譯碼模式設(shè)為不譯碼,數(shù)據(jù)存儲器中的8位數(shù)據(jù)直接輸出給8×8點陣的8列;0A08,設(shè)為中等亮度;0B07,掃描限設(shè)為8個,對8×8點陣的8行輪詢掃描;0C01,設(shè)為正常工作模式,不掉電;0F00,設(shè)為正常工作模式,關(guān)顯示檢測。

      數(shù)據(jù)寄存器由片上的8×8 SRAM 實現(xiàn)。寄存器地址從1到8,對應(yīng)于MAX7219芯片的DIG0~DIG7引腳、對應(yīng)于8×8點陣的H1~H8行。SRAM的數(shù)據(jù)寬度為8,其中存儲的數(shù)據(jù)值對應(yīng)于MAX7219芯片的SEG DP、SEG A~SEG G引腳、對應(yīng)于8×8點陣的L1~L8列。地址nH中存儲的數(shù)據(jù)值就是8×8點陣第n行待顯示的信息。

      在VHDL程序設(shè)計中,將MAX7219的初始化設(shè)定值與8×8點陣中待顯示的信息存儲在ROM IP核(romip模塊)中,數(shù)據(jù)的存儲格式如下:

      memory_initialization_radix=16;

      memory_initialization_vector=

      0900, 0A08, 0B07, 0C01, 0F00,

      0146, 02C9, 0349, 0446, 0549, 0649, 07E6, 0800;

      圖2所示的ctrl_addr模塊用于產(chǎn)生romip模塊所需的地址addr,使addr自加1(如圖3所示),按照地址依次從romip模塊中取出這13個16位并行數(shù)據(jù)dout,輸入到MAX7219控制器模塊。

      2 MAX7219控制器設(shè)計

      2.1 MAX7219的工作時序

      如圖4所示,當(dāng)數(shù)據(jù)鎖存信號CS為低電平時,從DIN串行輸入的數(shù)據(jù)D15~D0在每個時鐘CLK上升沿依次被移入內(nèi)部的16 位移位寄存器。連續(xù)輸入16位數(shù)據(jù)后,在CS上升沿,根據(jù)這16位數(shù)據(jù)的D11~D8位地址將其D7~D0位的值鎖存到相應(yīng)的控制寄存器或數(shù)據(jù)寄存器中。

      2.2 MAX7219控制器的VHDL程序設(shè)計

      為了使MAX7219正常工作,需要按照圖4所示的工作時序用VHDL語言編寫MAX7219的控制程序ctrl_dot.vhd,圖5為其輸入輸出端口信息。

      ctrl_dot模塊實現(xiàn)的是在輸入時鐘clk的每個上升沿,將16位并行數(shù)據(jù)data(15:0)轉(zhuǎn)換為串行數(shù)據(jù)輸出給din,同時產(chǎn)生MAX7219芯片所需的數(shù)據(jù)鎖存信號load_cs和時鐘信號clk_max7219,分別與8×8點陣模塊的DIN、CS、CLK端相連,控制8×8點陣模塊顯示。用if語句編程實現(xiàn)的主要程序段及解讀如下。

      if rising_edge(clk) then

      if (loadcs_tmp='1') then -- ①

      clk_max7219<='0';

      if (data/=data_cmp) then

      data_cmp <= data; --用于判斷數(shù)據(jù)是否更新

      data_tmp <= data; --裝載新數(shù)據(jù)

      loadcs_tmp<='0'; shift_f<='1';

      end if;

      else

      if shift_f='1' then -- ②允許移位

      din<=data_tmp(15); --高位輸出給din

      data_tmp(15 downto 1)<=data_tmp(14 downto 0); --低15位左移一位

      clk_max7219<='0'; shift_f<='0';

      else --③

      clk_max7219<='1'; --產(chǎn)生時鐘clk_max7219的上升沿

      if cnt

      cnt:=cnt+1; shift_f<='1';

      else --16位移完

      cnt:=X"0"; shift_f<='0';

      loadcs_tmp<='1'; --產(chǎn)生load_cs的上升沿,鎖存數(shù)據(jù)

      end if;

      end if;

      end if;

      load_cs<=loadcs_tmp;

      end if;

      ①當(dāng)loadcs_tmp為1時,使clk_max7219為0;當(dāng)檢測到輸入值data與原數(shù)據(jù)data_cmp不同時,用data值更新data_cmp(準(zhǔn)備下一次比較的數(shù)據(jù))和data_tmp(裝載新數(shù)據(jù));使loadcs_tmp為0,移位標(biāo)志位shift_f置1,允許數(shù)據(jù)移位。當(dāng)data與data_cmp相同時,表明數(shù)據(jù)未更新,loadcs_tmp為1,保持在①狀態(tài)繼續(xù)檢測數(shù)據(jù)是否更新。

      ②當(dāng)loadcs_tmp為0、shift_f為1時,將data_tmp的最高位輸出給din,其他位左移一位,實現(xiàn)16位并行數(shù)據(jù)data_tmp的逐位左移串行輸出,先高位后低位;使clk_max7219為0、shift_f為0。

      ③當(dāng)loadcs_tmp為0、shift_f為0時,使clk_max7219由0變?yōu)?,din每移一位產(chǎn)生一個clk_max7219時鐘。當(dāng)cnt<15時,16位數(shù)據(jù)未傳完,cnt自加1,使shift_f為1,在下一個clk時鐘上升沿返回到②繼續(xù)串行輸出。當(dāng)cnt=15時,表明16位數(shù)據(jù)全部串行輸出完畢,使cnt清零,shift_f為0;使 loadcs_tmp由0變?yōu)?,產(chǎn)生數(shù)據(jù)鎖存信號的上升沿,鎖存數(shù)據(jù),在下一個clk時鐘上升沿返回到①檢測數(shù)據(jù)是否更新。

      3 時鐘分頻模塊設(shè)計

      時鐘分頻模塊clkdiv_50M將Basy2開發(fā)板上提供的50MHz時鐘分頻,需保證提供給ctrl_dot的時鐘clk_16data與提供給ROM IP核的時鐘clk_rom匹配,只有當(dāng)ctrl_dot中的16位數(shù)據(jù)全部串行輸出后才允許更新data。通過分析ctrl_dot.vhd程序可知,16位數(shù)據(jù)傳輸至少需要34個clk_16data周期,所以clk_16data的時鐘頻率必須高于34倍的clk_rom時鐘頻率。

      4 基于MAX7219的8×8點陣顯示效果

      將時鐘分頻模塊clkdiv_50M、ROM地址模塊ctrl_addr、ROM IP核romip和MAX7219驅(qū)動模塊ctrl_dot連接起來,添加引腳約束文件后,進行綜合、實現(xiàn)、產(chǎn)生可編程文件,下載到Basys2開發(fā)板上,顯示出如圖7所示的效果。

      5 結(jié)語

      本文著重介紹了MAX7219控制器的VHDL程序設(shè)計。將MAX7219的寄存器地址、初始化設(shè)定值和點陣待顯示信息組成16位數(shù)據(jù)存入ROM IP核中,然后用if嵌套語句編程實現(xiàn)了16位并行數(shù)據(jù)的串行輸出,從而控制MAX7219驅(qū)動LED點陣顯示。

      本文將大量數(shù)據(jù)存入ROM中提高了編程效率。另外,一個8×8點陣模塊只需一片MAX7219芯片,無論從軟件編程還是從硬件實現(xiàn)來看,都比用譯碼器與74HC595的組合驅(qū)動更實用,有更廣泛的應(yīng)用價值。

      參考文獻

      [1]朱海洋,歐陽明星,張俊武.基于Android控制的LED點陣顯示設(shè)計與實現(xiàn)[J].液晶與顯示,2016,31(11):1064-1069.

      [2]趙婷婷,王先全,姜增暉,王培懿.基于ARM的LED點陣自動調(diào)光控制系統(tǒng)的設(shè)計[J].儀表技術(shù)與傳感器,2016,(8):63-66,96.

      [3]文瑾,施連敏.基于KW01-Zigbee MCU無線LED點陣屏控制系統(tǒng)的設(shè)計與實現(xiàn)[J].福州大學(xué)學(xué)報(自然科學(xué)版),2017,45(1):32-36.

      猜你喜歡
      現(xiàn)場可編程門陣列
      基于機器人的溫室大棚環(huán)境智能監(jiān)控系統(tǒng)
      一種PCI接口AFDX端系統(tǒng)模塊的設(shè)計與實現(xiàn)
      D—BLAST基帶系統(tǒng)的FPGA實現(xiàn)研究
      移動通信(2016年20期)2016-12-10 09:33:12
      雙目立體匹配算法的FPGA實現(xiàn)
      任務(wù)間通訊郵箱的硬件實現(xiàn)
      一種千兆以太網(wǎng)SerDes 接口與電接口的轉(zhuǎn)換方法
      卷積神經(jīng)網(wǎng)絡(luò)的FPGA并行結(jié)構(gòu)研究
      基于FPGA的遺傳算法在交通控制中的應(yīng)用
      基于FPGA的顏色識別觸摸屏系統(tǒng)設(shè)計與實現(xiàn)
      基于FPGA的9/7小波變換算法實現(xiàn)
      石河子市| 霍邱县| 务川| 兴城市| 万宁市| 阳春市| 永仁县| 麻江县| 垦利县| 莒南县| 鄄城县| 唐海县| 龙门县| 新蔡县| 香河县| 永济市| 金溪县| 溆浦县| 罗城| 裕民县| 清水河县| 枣强县| 安平县| 化德县| 巢湖市| 固始县| SHOW| 惠州市| 钟祥市| 博爱县| 琼结县| 韶山市| 渑池县| 德令哈市| 奉新县| 和龙市| 铅山县| 龙胜| 徐闻县| 五华县| 易门县|