第 九 講 存儲(chǔ)器與狀態(tài)機(jī)設(shè)計(jì)_第1頁(yè)
第 九 講 存儲(chǔ)器與狀態(tài)機(jī)設(shè)計(jì)_第2頁(yè)
第 九 講 存儲(chǔ)器與狀態(tài)機(jī)設(shè)計(jì)_第3頁(yè)
第 九 講 存儲(chǔ)器與狀態(tài)機(jī)設(shè)計(jì)_第4頁(yè)
第 九 講 存儲(chǔ)器與狀態(tài)機(jī)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 E D A 技 術(shù) 課 程 教 學(xué)講授:伍宗富8/14/2022湖南文理學(xué)院電氣與信息工程學(xué)院第 九 講 存儲(chǔ)器與狀態(tài)機(jī)設(shè)計(jì) 教學(xué)目的:使學(xué)生掌握存儲(chǔ)器與狀態(tài)機(jī)的設(shè)計(jì)方法。 教學(xué)重點(diǎn):存儲(chǔ)器與狀態(tài)機(jī)邏輯電路設(shè)計(jì)(SRAM與A/D轉(zhuǎn)換控制) 教學(xué)難點(diǎn): A/D轉(zhuǎn)換控制。 教學(xué)方法:講授法、計(jì)算機(jī)輔助法。 課時(shí)計(jì)劃:2學(xué)時(shí) 使用教材:EDA技術(shù)及應(yīng)用譚會(huì)生等西安:西安電子科技大學(xué)出版社 主要參考文獻(xiàn): 1 徐光輝等CPLD/FPGA的開(kāi)發(fā)和應(yīng)用M北京:電子工業(yè)出版社 2 侯伯亨等.VHDL硬件描述語(yǔ)言與數(shù)字邏輯電路設(shè)計(jì)M.西安:西安電子科技大學(xué)出版社 3 4 周立功等SOPC嵌入式系統(tǒng)基礎(chǔ)教程M

2、北京:北京航空航天大學(xué)出版社課題:存儲(chǔ)器與狀態(tài)機(jī)設(shè)計(jì)一、ROM的VHDL設(shè)計(jì)二、SRAM的VHDL設(shè)計(jì)三、FIFO的VHDL設(shè)計(jì)四、狀態(tài)機(jī)的VHDL設(shè)計(jì)六、作業(yè)五 、課堂小結(jié)一、ROM的VHDL設(shè)計(jì)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ROM4 IS PORT(EN:IN STD_LOGIC; ADDR:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END ENTITY ROM4

3、;ARCHITECTURE ART OF ROM4 IS BEGIN PROCESS(EN,ADDR) BEGIN IF EN=1 THEN CASE ADDR IS WHEN 00000000=DOUTDOUTDOUTDOUTDOUT= 00000000; END CASE; END IF; END PROCESS;END ARCHITECTURE ART;二、SRAM的VHDL設(shè)計(jì)-8x8位雙口RAMLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNE

4、D.ALL;ENTITY SRAM IS GENERIC(WIDTH:INTEGER:=8; DEPTH:INTEGER:=8; ADDER:INTEGER:=3); PORT(DATAIN:IN STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); DATAOUT:OUT STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); CLOCK:IN STD_LOGIC; WE,RE:IN STD_LOGIC; WADD:IN STD_LOGIC_VECTOR(ADDER-1 DOWNTO 0); RADD:IN STD_LOGIC_VECTOR(ADDER-1

5、DOWNTO 0);END ENTITY SRAM;ARCHITECTURE ART OF SRAM IS TYPE MEM IS ARRAY(0 TO DEPTH-1) OF STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); SIGNAL RAMTMP:MEM; BEGIN-寫(xiě)進(jìn)程 PROCESS(CLOCK) BEGIN IF (CLOCKEVENT AND CLOCK=1) THEN IF(WE=1)THEN RAMTMP(CONV_INTEGER(WADD)=DATAIN; END IF; END IF; END PROCESS;-讀進(jìn)程 PROCESS(CLOC

6、K) BEGIN IF(CLOCKEVENT AND CLOCK=1)THEN IF (RE=1) THEN DATAOUT=RAMTMP(CONV_INTEGER(RADD); END IF; END IF; END PROCESS;END ARCHITECTURE ART;二、SRAM的VHDL設(shè)計(jì)三、FIFO的VHDL設(shè)計(jì)- REG_FIFO .VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY REG_FIFO IS

7、 GENERIC(WIDTH:INTEGER:=8; DEPTH:INTEGER:=8; ADDR:INTEGER:=3); PORT(DATAIN:IN STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); DATAOUT:OUT STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); ACLR:IN STD_LOGIC; CLOCK:IN STD_LOGIC; WE:IN STD_LOGIC; RE:IN STD_LOGIC; FF:OUT STD_LOGIC;-滿標(biāo)志 EF:OUT STD_LOGIC);-空標(biāo)志END ENTITY REG_FIFO;三

8、、FIFO的VHDL設(shè)計(jì)ARCHITECTURE ART OF REG_FIFO IS TYPE MEM IS ARRAY(DEPTH-1 DOWNTO 0) OF STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); SIGNAL RAMTMP:MEM; SIGNAL WADD:STD_LOGIC_VECTOR(ADDR-1 DOWNTO 0); SIGNAL RADD:STD_LOGIC_VECTOR(ADDR-1 DOWNTO 0); -SIGNAL WORDS:STD_LOGIC_VECTOR(ADDR-1 DOWNTO 0); SIGNAL W,W1,R,R1:IN

9、TEGER RANGE 0 TO 8; BEGIN三、FIFO的VHDL設(shè)計(jì)WRITE_POINTER:PROCESS(ACLR,CLOCK) ISBEGIN IF (ACLR=0) THEN WADD0); ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (WE=1) THEN -IF (WADD=WORDS) THEN IF (WADD=7) THEN WADD0); ELSE WADD=WADD+1; END IF; END IF; END IF; W=CONV_INTEGER(WADD); W1=W-1;END PROCESS WRITE_POINTER;

10、-寫(xiě)操作進(jìn)程WRITE_RAM:PROCESS(CLOCK) ISBEGIN IF (CLOCKEVENT AND CLOCK=1) THEN IF (WE=1) THEN RAMTMP(CONV_INTEGER(WADD)=DATAIN; END IF; END IF;END PROCESS WRITE_RAM;-寫(xiě)指針修改進(jìn)程三、FIFO的VHDL設(shè)計(jì)-讀指針修改READ_POINIER:PROCESS(ACLR,CLOCK) ISBEGIN IF (ACLR=0) THEN RADD0); ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (RE=1) THE

11、N -IF (RADD=WORDS) THEN IF (RADD=7) THEN RADD0); ELSE RADD=RADD+1; END IF; END IF; END IF; R=CONV_INTEGER(RADD); R1=R-1;END PROCESS READ_POINIER;-讀操作進(jìn)程READ_RAM:PROCESS(CLOCK)BEGIN IF (CLOCKEVENT AND CLOCK=1) THEN IF (RE=1) THEN DATAOUT=RAMTMP(CONV_INTEGER(RADD); END IF; END IF;END PROCESS READ_RAM;三

12、、FIFO的VHDL設(shè)計(jì)-產(chǎn)生滿標(biāo)志進(jìn)程FFLAG:PROCESS(ACLR,CLOCK)BEGIN IF (ACLR=0) THEN FF=0; ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (WE=1 AND RE=0) THEN -IF (WADD=RADD-1) OR (WADD=DEPTH-1) AND (RADD=0) THEN IF(W=R1)OR(WADD=CONV_STD_LOGIC_VECTOR(DEPTH-1,3) AND (RADD=000) THEN FF=1; END IF; ELSE FF=0; END IF; END IF;END

13、 PROCESS FFLAG;三、FIFO的VHDL設(shè)計(jì)-產(chǎn)生空標(biāo)志進(jìn)程EFLAG:PROCESS(ACLR,CLOCK) BEGIN IF (ACLR=0) THEN EF=0; ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (RE=1 AND WE=0) THEN -IF (WADD=RADD+1) OR (RADD=DEPTH-1)AND(WADD=0) THEN IF(R=W1)OR(RADD=CONV_STD_LOGIC_VECTOR(DEPTH-1,3) AND (WADD=000) THEN EF=1; END IF; ELSE EF=0; END

14、 IF; END IF;END PROCESS EFLAG;END ARCHITECTURE ART;三、FIFO的VHDL設(shè)計(jì)仿真結(jié)果:空標(biāo)志滿標(biāo)志四、狀態(tài)機(jī)的VHDL設(shè)計(jì)典型的狀態(tài)機(jī):摩爾(MOORE)狀態(tài)機(jī)和米立(MEALY)狀態(tài)機(jī)。摩爾狀態(tài)機(jī):輸出只是當(dāng)前狀態(tài)值的函數(shù),并且僅在時(shí)鐘 邊沿到來(lái)時(shí)才發(fā)生變化。米立狀態(tài)機(jī):輸出則是當(dāng)前狀態(tài)值、當(dāng)前輸出值和當(dāng)前輸 入值的函數(shù)。注:對(duì)于這兩類狀態(tài)機(jī),控制定序都取決于當(dāng)前狀態(tài)和輸入信號(hào)。大多數(shù)實(shí)用的狀態(tài)機(jī)都是同步的時(shí)序電路,由時(shí)鐘信號(hào)觸發(fā)狀態(tài)的轉(zhuǎn)換。時(shí)鐘信號(hào)同所有的的邊沿觸發(fā)的狀態(tài)寄存器和輸出寄存器相連,這使得狀態(tài)的改變發(fā)生在時(shí)鐘的上升沿。 此外,

15、還利用組合邏輯的傳播延遲實(shí)現(xiàn)狀態(tài)機(jī)存儲(chǔ)功能的異步狀態(tài)機(jī),這樣的狀態(tài)機(jī)難于設(shè)計(jì)并且容易發(fā)生故障,所以一般用同步時(shí)序狀態(tài)機(jī)。四、狀態(tài)機(jī)的VHDL設(shè)計(jì) 【例】 基于狀態(tài)機(jī)的ADC0809與SRAM6264的通信控制器的設(shè)計(jì)。下圖是該控制器ADTOSRAM與ADC0809及SRAM6264接口示意圖。四、狀態(tài)機(jī)的VHDL設(shè)計(jì) 【例】 基于狀態(tài)機(jī)的ADC0809與SRAM6264的通信控制器的設(shè)計(jì)。-VHDL源程序ADTOSRAM.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADTO

16、SRAM IS PORT( -ADC0809接口信號(hào) DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); -0809轉(zhuǎn)換數(shù)據(jù)輸入口 CLK,EOC:IN STD_LOGIC; -CLK:狀態(tài)機(jī)工作時(shí)鐘;EOC:轉(zhuǎn)換結(jié)束狀態(tài)信號(hào) RST:IN STD_LOGIC; -系統(tǒng)復(fù)位信號(hào) ALE:OUT STD_LOGIC; -0809采樣通道選擇地址鎖存信號(hào) START:OUT STD_LOGIC; -0809采樣啟動(dòng)信號(hào),上升沿有效 OE:OUT STD_LOGIC;-轉(zhuǎn)換數(shù)據(jù)輸出使能,接0809的ENABLE(PIN 9) ADDA:OUT STD_LOGIC; -0809采

17、樣通道地址最低位 -SRAM 6264接口信號(hào) CS:OUT STD_LOGIC; -6264片選控制信號(hào),低電平有效 RD,WR:OUT STD_LOGIC;-6264讀/寫(xiě)控制信號(hào),低電平有效 RAM_DIN:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);-6264數(shù)據(jù)寫(xiě)入端口 ADDRESS:OUT STD_LOGIC_VECTOR(12 DOWNTO 0);-地址輸出端口END ENTITY ADTOSRAM;四、狀態(tài)機(jī)的VHDL設(shè)計(jì) 【例】 基于狀態(tài)機(jī)的ADC0809與SRAM6264的通信控制器的設(shè)計(jì)。-VHDL源程序ADTOSRAM.VHDARCHITECTU

18、RE ART OF ADTOSRAM ISTYPE AD_STATES IS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7);-A/D轉(zhuǎn)換狀態(tài)定義TYPE WRIT_STATES IS (START_WRITE,WRITE1,WRITE2,WRITE3,WRITE_END); -SRAM數(shù)據(jù)寫(xiě)入控制狀態(tài)定義SIGNAL RAM_CURRENT_STATE,RAM_NEXT_STATE:WRIT_STATES; SIGNAL ADC_CURRENT_STATE,ADC_NEXT_STATE:AD_STATES;SIGNAL ADC_END:STD_LOGIC; -0809數(shù)據(jù)轉(zhuǎn)

19、換結(jié)束并鎖存標(biāo)志位,高電平有效SIGNAL LOCK:STD_LOGIC; -轉(zhuǎn)換后數(shù)據(jù)輸出鎖存信號(hào)SIGNAL ENABLE:STD_LOGIC; -A/D轉(zhuǎn)換允許信號(hào),高電平有效SIGNAL ADDRES_PLUS:STD_LOGIC;-SRAM地址加1時(shí)鐘信號(hào)SIGNAL ADC_DATA:STD_LOGIC_VECTOR(7 DOWNTO 0);-轉(zhuǎn)換數(shù)據(jù)讀入鎖存器SIGNAL ADDRES_CNT:STD_LOGIC_VECTOR(12 DOWNTO 0);-SRAM地址鎖存器BEGIN ADDA=1;-ADDA=1,ADDB=0,ADDC=0選A/D采樣通道為IN-1 RD=1;

20、四、狀態(tài)機(jī)的VHDL設(shè)計(jì) 【例】 基于狀態(tài)機(jī)的ADC0809與SRAM6264的通信控制器的設(shè)計(jì)。-VHDL源程序ADTOSRAM.VHD-ADC0809采樣控制狀態(tài)機(jī) ADC:PROCESS(ADC_CURRENT_STATE,EOC,ENABLE) -A/D轉(zhuǎn)換狀態(tài)機(jī)組合電路進(jìn)程BEGIN IF (RST=1) THEN ADC_NEXT_STATEALE=0;START=0;OE=0;LOCK=0;ADC_END=0;-A/D轉(zhuǎn)換初始化 IF (ENABLE=1) THEN ADC_NEXT_STATE=ST1;-允許轉(zhuǎn)換,轉(zhuǎn)下一狀態(tài) ELSE ADC_NEXT_STATEALE=1;S

21、TART=0;OE=0;LOCK=0;ADC_END=0; ADC_NEXT_STATEALE=1;START=1;OE=0;LOCK=0;ADC_END=0; ADC_NEXT_STATEALE=1;START=1;OE=0;LOCK=0;ADC_END=0;-延遲一個(gè)脈沖周期 IF (EOC=0) THEN ADC_NEXT_STATE=ST4; ELSE ADC_NEXT_STATEALE=0;START=0;OE=0;LOCK=0;ADC_END=0; IF(EOC=0)THEN ADC_NEXT_STATE=ST5;-轉(zhuǎn)換結(jié)束,轉(zhuǎn)下一狀態(tài) ELSE ADC_NEXT_STATEALE

22、=0;START=0;OE=1;LOCK=1;ADC_END=1; ADC_NEXT_STATEALE=0;START=0;OE=1;LOCK=1;ADC_END=1; ADC_NEXT_STATEALE=0;START=0;OE=1;LOCK=1;ADC_END=1; ADC_NEXT_STATEADC_NEXT_STATE=ST0;-所有閑置狀態(tài)導(dǎo)入初始態(tài) END CASE; END IF;END PROCESS ADC;四、狀態(tài)機(jī)的VHDL設(shè)計(jì) 【例】 基于狀態(tài)機(jī)的ADC0809與SRAM6264的通信控制器的設(shè)計(jì)。-VHDL源程序ADTOSRAM.VHDAD_STATE:PROCESS

23、(CLK) -A/D轉(zhuǎn)換狀態(tài)機(jī)時(shí)序電路進(jìn)程BEGIN IF(CLKEVENT AND CLK=1)THEN ADC_CURRENT_STATE=ADC_NEXT_STATE;-在時(shí)鐘上升沿,轉(zhuǎn)至下一狀態(tài) END IF;END PROCESS AD_STATE;-由信號(hào)CURRENT_STATE將當(dāng)前狀態(tài)值帶出此進(jìn)程DATA_LOCK:PROCESS(LOCK) BEGIN-此進(jìn)程中,在LOCK的上升沿,將轉(zhuǎn)換好的數(shù)據(jù)鎖入鎖存器ADC_DATA中 IF (LOCK=1AND LOCKEVENT) THEN ADC_DATA=DIN; END IF;END PROCESS DATA_LOCK;-SRAM數(shù)據(jù)寫(xiě)入控制狀態(tài)機(jī)WRIT_STATE:PROCESS(CLK,RST)-SRAM寫(xiě)入控制狀態(tài)機(jī)時(shí)序電路進(jìn)程BEGIN IF RST=1 THEN RAM_CURRENT_STATE=START_WRITE;-系統(tǒng)復(fù)位 ELSIF(CLKEVENT AND CLK=1) THEN RAM_CURRENT_STATECS=1;WR=1;ADDRES_PLUS=0; IF (ADDRES_CNT=1111111111111) THEN -數(shù)據(jù)寫(xiě)入初始化 ENABLE=0; -SRAM地址計(jì)數(shù)器已滿,禁止A/D轉(zhuǎn)換 RAM_NEXT_STATE=START_WRITE;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論