【正文】
end rs232。 rxd: in std_logic。use 。:如何真正的實(shí)現(xiàn)發(fā)送和接受同步,并且發(fā)送的和接收的完全一樣?發(fā)送和接收波特率怎么弄?答:接收和顯示的已經(jīng)做出來(lái)了,但是發(fā)送的:參考文獻(xiàn)[1] :華中科技大學(xué)武昌分校.[2] :清華大學(xué)出版社,2009.[3] (第二版).北京:電子工業(yè)出版社,2007.[4] :西安電子科技大學(xué)出版社,2009.[5] (EDA).北京:中國(guó)電力出版社,2009. 附錄 程序清單:程序1:library ieee。分析:程序led是完成段顯,將輸入的數(shù)值015翻譯成對(duì)應(yīng)的數(shù)碼管編碼。 end process。 when others=dout=0000000。 when 1110=dout=1111001。 when 1100=dout=0111001。 when 1010=dout=1110111。 when 1000=dout=1111111。 when 0110=dout=1111101。 when 0100=dout=1100110。 when 0010=dout=1011011。architecture behv of led isbegin process(din) begin case din is when 0000=dout=0111111。 dout:out std_logic_vector(6 downto 0))。use 。程序2.library ieee。end behv。 end process。 end if。 then if temp=111 then temp=000。event and clk=39。architecture behv of t8 issignal temp:std_logic_vector(2 downto 0)。 q:out std_logic_vector(2 downto 0))。use 。程序1.library ieee。rxd中的信號(hào)分為兩組輸入,分別進(jìn)入muxer 的第0組和第1 組。 而display的作用是來(lái)實(shí)現(xiàn)片選,將RS232輸出的并行信號(hào)的兩部分(每部分4位組成一個(gè) 16進(jìn)制數(shù))進(jìn)行處理來(lái)實(shí)現(xiàn)段選。(14)模塊四分析:分析:顯示模塊由兩部分組成,74138的表面作用是譯碼將輸入的sel信號(hào)翻譯出來(lái)并選中制定的數(shù) 碼管。 end behv。 freq125k=temp(2)。 freq7812=temp(6)。 freq488=temp(10)。end process。 end if。 then if temp=11110100001000111111 then temp=00000000000000000000。event and clk=39。architecture behv of t is signal temp:std_logic_vector(19 downto 0)。 freq500k:out std_logic)。 freq31250:out std_logic。 freq1953:out std_logic。 freq1:out std_logic。use 。程序2:library ieee。當(dāng)取值大于或 等于50時(shí)復(fù)位為0。END A。 END IF。 CNTTEMP:=CNTTEMP+1。039。139。EVENT THEN IF CNTTEMP=49 THEN CNTTEMP:=0。139。ARCHITECTURE A OF PIN1MHZ ISBEGINPROCESS(CLKIN)VARIABLE CNTTEMP:INTEGER RANGE 0 TO 49。 CLKOUT:OUT STD_LOGIC)。 USE 。程序1:PIN1hzLIBRARY IEEE。分析:s6的段碼的作用是用于判斷起始位,gt做為標(biāo)志位,當(dāng)已經(jīng)確定為開(kāi)始時(shí),將 gt的值置‘1’。 end process。139。139。 elsif frxd39。 then gt=39。s6:process(frxd,gtclr)begin if gtclr=39。end process。 將b的后9位并上rxd 的第一位組合成新的信號(hào)b。 then b(9 downto 0)=rxdamp。event and gate=39。分析:s3,s4段碼的作用是計(jì)數(shù)從010,即計(jì)數(shù)輸入數(shù)據(jù)段的10位,0起始位,18數(shù)據(jù)位,9 終止位。 end if。 else gtclr=39。end process。 then r=r+1。event and gate=39。 then r=0000。s3:process(gate,gtclr)begin if gtclr=39。分析:s2的段碼作用是當(dāng)j計(jì)數(shù)到一定數(shù)值的時(shí)候產(chǎn)生一個(gè)脈沖,從而實(shí)現(xiàn)分頻的作用。 end if。 else cclk=39。s2:process(j)begin if j=111001 then cclk=39。分析:s1的段碼作用是用來(lái)計(jì)數(shù),所記數(shù)為RS232的分頻系數(shù),上述代碼中的10011100010為40000, 通過(guò)計(jì)算12M/1250=9600,故可以得知波特率為9600b/s。 end if。 else j=j+1。039。139。 elsif sysclk39。039。039。R,j分別作為后 續(xù)程序的計(jì)數(shù)單元,其中需要注意的是j的位數(shù)控制,因?yàn)楫?dāng)需要控制波特率的時(shí)候,由于 輸入的sysclk是固定的12MHz的系統(tǒng)時(shí)鐘信號(hào)無(wú)法改變,故能改變的只有RS232中的分頻系 數(shù),但由于分頻的系數(shù)的改變,于是j作為計(jì)數(shù)信號(hào)其值也將隨之改變。先定義可信號(hào)b,r,j。 frxd=not rxd。 disp(7 downto 0)=b(8 downto 1)。 signal frxd,gt,gtclr,cclk,gate: std_logic。 signal r: std_logic_vector(3 downto 0)。輸入信號(hào),輸入時(shí)鐘信號(hào)為邏輯信號(hào),輸出信號(hào)disp為8位矢量信號(hào),低位為0 高位為7。end rs232。 rxd: in std_logic。use 。程序1:library ieee。(12)模塊二分析: 上圖所示的為RS232集成模塊,經(jīng)VHDL編譯生成的模塊文件。(4)顯示模塊;作用是將輸入的并行信號(hào)(8位)分成4位一組,即兩組進(jìn)行處理后在試驗(yàn)箱的數(shù)碼管上顯示。作用是將計(jì)算機(jī)輸入的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)便于給后方的顯示模塊處理。(1) Quartus頂層設(shè)計(jì) 如上圖所示,整個(gè)頂層設(shè)計(jì)可以分為4個(gè)部分,(1)鎖相環(huán);作用是將輸入的系統(tǒng)時(shí)鐘信號(hào)(系統(tǒng)時(shí)鐘50MHZ)轉(zhuǎn)換為12MHZ的sysclk時(shí)鐘,在進(jìn)入RS232前先進(jìn)行第一次分頻彌補(bǔ)RS232自身分頻不足的特點(diǎn)。 VII:本幀信息全部接收完把線路上出現(xiàn)的高電平作為空閑位。若 沒(méi)有錯(cuò)誤,對(duì)全部數(shù)據(jù)位進(jìn)行奇偶校驗(yàn),無(wú)校驗(yàn)錯(cuò)時(shí),把數(shù)據(jù)位從移位寄存器 中送數(shù)據(jù)輸入寄存器。 V:檢測(cè)校驗(yàn)位