freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于vhdl的uart控制器設(shè)計(jì)(參考版)

2024-12-05 21:55本頁面
  

【正文】 UART 內(nèi)核進(jìn)入接收完成狀態(tài)的同時(shí),會檢。進(jìn)入接收狀態(tài)后,波特率發(fā)生器開始工作,其輸出波特率時(shí)鐘驅(qū)動(dòng)移位寄存器同步的存儲 RS232 接收端口的數(shù)據(jù),并且其提示信號驅(qū)動(dòng)計(jì)數(shù)器進(jìn)行計(jì)數(shù)。如果信號監(jiān)測器監(jiān)測到數(shù)據(jù)到數(shù)據(jù)傳輸,會給 UART 內(nèi)核發(fā)送一個(gè)提示信號, UART 內(nèi)核監(jiān)測到此信號就會進(jìn)入接收 35 狀態(tài)。 ( 1)數(shù)據(jù)接收過程 數(shù)據(jù)接收過程的流程圖如圖 6所示,可以定義 3個(gè)狀態(tài) 空閑、接收和接收完成,其狀態(tài)變換圖如圖 所示。 UART內(nèi)核模 塊的狀態(tài)機(jī)設(shè)計(jì) UART 內(nèi)核模塊的功能是控制數(shù)據(jù)接收、數(shù)據(jù)加載和數(shù)據(jù)發(fā)送的過程,這可以用狀態(tài)機(jī)來實(shí)現(xiàn)。 圖 RS232串行發(fā)送端接口連接示意圖 圖 中的二選一的輸入信號分別是最高電平 VCC(即邏輯 ” 1” )和移位寄存器輸出 dout ,選擇信號連接到 UART 內(nèi)核的一個(gè)端口 set_out ,輸出連接到 RS232 串行發(fā)送端口 TxD 上。 34 圖 UART 內(nèi)核與信號監(jiān)測器連接示意圖 UART 內(nèi)核與信號監(jiān)測器得端口定義如表 512所示。所以, UART 內(nèi)核和信號監(jiān)測器之間有兩個(gè)接口,第一個(gè)是監(jiān)測到數(shù)據(jù)傳輸?shù)奶崾拘盘柦涌?new_data ,另一個(gè)是用于復(fù)位信號監(jiān)測器的 reset_dt 信號。 圖 UART 內(nèi)核與波特率發(fā)生器連接示意圖 波特率發(fā)生器的復(fù)位、使能信號與計(jì)數(shù)器的相同,其端口定義如表 411 所示。 表 510 UART內(nèi)核和移位寄存器之間的端口定義表 名稱 類型 寬度 說明 Send_si 輸出 1 數(shù)據(jù)加載時(shí)所加載數(shù)據(jù)的串行信號,由 UART 內(nèi)核產(chǎn)生,和系統(tǒng)時(shí)鐘同步 Sel_se 輸出 1 移位寄存器輸入數(shù)據(jù)選擇信號 regs 輸入 TOTAL_BIT 移位寄存器數(shù)據(jù) Sel_clk 輸出 1 移位寄存器時(shí)鐘選擇信號 除 了表 510所列的端口, UART 內(nèi)核的 reset_parts 端口還和移位寄存器的 33 撫慰端口相連,作為它的復(fù)位信號。 移位寄存器內(nèi)部寄存器的數(shù)據(jù)是通過一個(gè) regs 端口發(fā) 送給 UART 內(nèi)核的,regs 端口多位信號,其寬度就是 RS232 串行通信的總位數(shù)(起始位,數(shù)據(jù)位,奇偶寄存器和停止位)。 UART 內(nèi)核對移位寄存器式輸入時(shí)鐘的控制方式和對計(jì)數(shù)器的控制方一樣,也是利用了一個(gè)二選一選擇器,再通過選擇信號控制。圖 21 二選一選擇器的作用即是串行數(shù)據(jù)選擇,它的輸入端分別接到 UART 內(nèi)核的串行數(shù)據(jù)發(fā)送端口 send_si 和 RS232 的數(shù)據(jù)接收端口 RxD,信號選擇端口則和 UART 內(nèi)核的 sel_si 端口相連,輸出端口連接到移位寄存器的數(shù)據(jù)輸入端。圖 是 UART 內(nèi)核和移位寄存器之間的連接示意圖。另一方面,要正確的使用計(jì)數(shù)器需要對其進(jìn)行復(fù)位和使能,所以UART 內(nèi)核還提供了兩個(gè)端口 reset_parts 和 ce_parts,作為子模塊復(fù)位信號和使能信號的端口。要選擇計(jì)數(shù)器時(shí)鐘信號,可以通過一個(gè)二選一選擇器實(shí)現(xiàn)。 表 58 奇偶校驗(yàn)端口定義表 名稱 類型 寬度 說明 sel_pv 輸 出 1 總線選擇信號,選擇奇偶校驗(yàn)的輸入信號 parity 輸入 1 奇偶校驗(yàn)結(jié)果 ( 3)計(jì)數(shù)器模塊 計(jì)數(shù)器模塊的功能是在輸入時(shí)鐘的驅(qū)動(dòng)下進(jìn)行計(jì)數(shù),當(dāng)?shù)竭_(dá)計(jì)數(shù)上闕時(shí)給UART 內(nèi)核一個(gè)提示信號,他們兩者之間的連接方法如圖 所示。 由上述內(nèi)容可知, UART 使用的端口除了已經(jīng)介紹的數(shù)據(jù)發(fā)送總線和數(shù)據(jù)接收總線外,就是總線選擇信號 sel_pv 和奇偶校驗(yàn)信號 parity 了。 30 圖 奇偶校驗(yàn)相關(guān)模塊連接示意圖 總線選擇器的兩個(gè)輸入端分別接到數(shù)據(jù)發(fā)送總線 send_bus 和數(shù)據(jù)接收總線recv_bus 上,它的輸出連接到奇偶校驗(yàn)器的 輸入端,最后奇偶校驗(yàn)器的校驗(yàn)結(jié)果輸出連接到 UART 的一個(gè)端口 parity 上。 表 57 CPU接口的端口定義 名稱 類型 寬度 說明 Send 輸入 1 發(fā)送控制信號 Send_bus 輸入 DATA_BIT 發(fā)送數(shù)據(jù)總線 Send_over 輸出 1 發(fā)送完成信號 Recv 輸出 1 新數(shù)據(jù)接收信號 Recv_bus 輸出 DATA_BIT 接收數(shù)據(jù)總線 error 輸出 1 接收錯(cuò)誤信號 圖 UART內(nèi)核模塊 其中, DATA_BIT 是 UART 內(nèi)核模塊實(shí)體聲明中定義的類屬參數(shù),表示數(shù)據(jù)位的長度。 這些端口又可以分為兩組:第一組是與發(fā)送信號相關(guān)的,包括 send,send_bus 和 send_over,其中 send 是 發(fā)送控制信號, send_bus 時(shí)待發(fā)送的總線,send_over 是發(fā)送完成的提示信號;第二組是與接收相關(guān)的,包括 recv, recv_bus 29 和 error,其中 recv 表示有新的數(shù)據(jù)被接收, recv_bus 時(shí)接收數(shù)據(jù)的總線, error信號表示數(shù)據(jù)接收產(chǎn)生錯(cuò)誤。由于 UART 內(nèi)核模塊的整體結(jié)構(gòu)比較復(fù)雜,下面的內(nèi)容將從模塊的接口、狀態(tài)機(jī)設(shè)計(jì)和實(shí)現(xiàn)代碼 3 方面介紹 UART 內(nèi)核的實(shí)現(xiàn)方法。 計(jì)數(shù)器得端口定義如表 56 所示。 end counter。 ce : in std_logic。 port ( clk : in std_logic。代碼中的 MAX_COUNT類屬參數(shù)就是計(jì)數(shù)上闕。除了數(shù)據(jù)加載,另外兩個(gè)需要計(jì)數(shù)器兩個(gè)計(jì)數(shù)器 28 模塊的過程是數(shù)據(jù)的接收和數(shù)據(jù)發(fā)送,由于這兩個(gè)過程中移位寄存器是工作在波特率時(shí)鐘下的,所以計(jì)數(shù)器模塊的時(shí)鐘就是和波特率時(shí)鐘同步的波特率發(fā)生器提示信號 indicator,這樣每輸出一個(gè)完整的波特率時(shí)鐘周期計(jì)數(shù)器就能增加一。計(jì)數(shù)器模塊的輸入時(shí)鐘是不同的。 表 55 總線控制器的端口定義 名稱 類型 寬度 說明 Din1 輸入 BUS_WIDTH 輸入總線 Din2 輸入 BUS_WIDTH 輸入總線 Sel 輸入 1 選擇信號 Dout 輸出 BUS_WIDTH 輸出總線 計(jì)數(shù)器模塊的實(shí)現(xiàn) 計(jì)數(shù)器模塊的功能是可控制地在輸入時(shí)鐘驅(qū)動(dòng)下進(jìn)行計(jì)數(shù),當(dāng)?shù)竭_(dá)計(jì)數(shù)上闕時(shí)給 UART 內(nèi)核一個(gè)提示信號。 總線選擇器結(jié)構(gòu)體的實(shí)現(xiàn)代碼如附錄。 選擇信號 dout : out std_logic_vector(BUS_WIDTH1 downto 0) )。 輸入總線一 din2 : in std_logic_vector(BUS_WIDTH1 downto 0)。 圖 總線選擇器框圖 為了能使總線選擇器適應(yīng)不同寬度的總線,在聲明其實(shí)體的時(shí)候可以添加一個(gè) BUS_WIDTH 的類屬參數(shù),這表示總線的寬度,代碼如下: entity switch_bus is 類屬參數(shù) generic ( BUS_WIDTH : integer := 8 )。 總線選擇模塊的實(shí)現(xiàn) 總線選擇模塊的共識通過一個(gè)選擇信號控制兩個(gè)輸入信號,將其輸出,也 就是一個(gè)二選一的選擇器。 return check。HIGH) loop check := check xor din(i)。LOW)。 MultiXOR 函數(shù)實(shí)現(xiàn)代碼如下: function MultiXOR( din : in std_logic_vector ) return std_logic is variable check : std_logic。 上述及偶校驗(yàn)器實(shí)現(xiàn)代碼中的 MultiXOR 函數(shù)也是在 UART_PACKAGE 庫中定的,其功能是對輸入序列進(jìn)行異或操作。 when others。 奇偶校驗(yàn)的端口定義如表 54所示 26 表 54 奇偶校驗(yàn)端口定義表 名稱 類型 寬度 說明 source 輸入 DATA_LENGTH 輸入的代校驗(yàn)數(shù)據(jù) parity 輸出 1 奇偶校驗(yàn)器結(jié)構(gòu)體的實(shí)現(xiàn)代碼如下: architecture parity_verifier of parity_verifier is begin 按照校驗(yàn)規(guī)則計(jì)算校驗(yàn)位 with PARITY_RULE select parity = MultiXOR(source) when ODD, 奇校驗(yàn) ( not MultiXOR(source) ) when EVEN, 偶校驗(yàn) 39。 end parity_verifier。 端口 port ( source : in std_logic_vector(DATA_LENGTH1 downto 0)。 表 53 移位寄存器得端口定義 名稱 類型 寬度 說明 clk 輸入 1 時(shí)間信號 Reset_n 輸入 1 復(fù)位信號 din 輸入 1 輸入信號 regs 輸出 TOTAL_BIT 內(nèi)部寄存器輸出 dout 輸出 1 輸出信號 奇偶校驗(yàn)器模塊實(shí)現(xiàn) 奇偶校驗(yàn)器根據(jù)奇偶校驗(yàn)的設(shè)置和輸入數(shù)據(jù)計(jì)算出奇偶校驗(yàn)位,所以在定義其實(shí)體時(shí)需要添加兩個(gè)類屬參數(shù) entity parity_verifier is 類屬參數(shù) generic ( DATA_LENGTH : integer := 8。 end shift_register。 25 regs : out std_logic_vector(TOTAL_BIT1 downto 0)。 reset_n : in std_logic。 由于在 RS232 通信在不同的傳輸設(shè)置下(比如奇偶校驗(yàn),停止位)總的數(shù)據(jù)位數(shù)不同,所以為了能夠靈活的配置移位寄存器,可以在聲明移位寄存器實(shí)體的時(shí)候添加一個(gè)表示寄存器序列總長度的類屬參數(shù),代碼如下: entity shift_register is generic ( TOTAL_BIT : integer := 10 )。 移位寄存器模塊的實(shí)現(xiàn) 移位寄存器模塊在整個(gè)設(shè)計(jì)中非常關(guān)鍵,無論是數(shù)據(jù)接收還是數(shù)據(jù)的 發(fā)送都需要用到移位寄存器。 constant BDTEST_HPC : BD_COUNT := 5。由于 9600 波特率對應(yīng)的參數(shù)樹枝比較大,所以為了觀察仿真的波形,可以首先選擇輸出較小的測試數(shù)據(jù)。 constant BD9600_HPC : BD_COUNT := 2604。 以上代碼中的 BD_COUNT 是在 UART_PACKAGE 庫中定義的,它代表范圍從0— 65535 的整數(shù)(即 16位整數(shù)); BD9600_FPC 代表波特率時(shí)鐘完整周期對應(yīng)的計(jì)數(shù),而 BD9600_HPC 代表的是波特率時(shí)鐘半周其對應(yīng)的計(jì)數(shù),它們也在UART_PACKAGE 庫中定義的,如下所示: 計(jì)數(shù)器計(jì)數(shù)范圍 type BD_COUNT is range 65535 downto 0。 indicator : out std_logic )。 ce : in std_logic。 port ( clk : in std_logic。 entity baudrate_generator is generic ( FULL_PULSE_COUNT : BD_COUNT := BD9600_FPC。 use 。 波特率發(fā)生器的實(shí)體聲明代碼如下,其中在實(shí)體聲明中聲明了兩個(gè)類屬參數(shù), FULL_PULSE_COUNT 表示一個(gè)波特率時(shí)鐘完整的周期所對應(yīng)的計(jì)數(shù)器計(jì)數(shù),RISE_PULSE_COUNT 表示波特率時(shí)鐘信號上升時(shí)刻對應(yīng)的計(jì)數(shù)器計(jì)數(shù),這樣波特率 時(shí) 鐘 的 占 空 比可 以 表 示 為( FULL_PULSE_COUNTRISE_PULSE_COUNT ) / FULL_PULSE_COUNT。當(dāng)輸出一個(gè)完整的波特率時(shí)鐘信號后,波特率發(fā)生器會自動(dòng)將內(nèi)部計(jì)數(shù)器置為零,同時(shí)開始下一個(gè)脈沖的計(jì)數(shù)。波特率發(fā)生器得端口定義如下表 52所示。 圖 波特率時(shí)鐘實(shí)現(xiàn)原理 假設(shè) FPGA 的系統(tǒng)時(shí)鐘為 50MHz, RS232 同心的波特率為 9600,則波特率時(shí)鐘的每個(gè)周期相當(dāng)于 (1/9600)/( 1/50*e6) =5208 各系統(tǒng)時(shí)鐘的周期。圖 表示了波特率時(shí)鐘和 RS232 接收端信號的時(shí)序關(guān)系,波特率時(shí)鐘的頻率就是波特率。 end detector。 RxD : in std_logic。 實(shí)體聲明 entity detector is port ( clk : in std_logic。 use 。 表 51 信號監(jiān)測器端口定義表 名稱 類型 寬度 說明 Clk 輸入 1 時(shí)鐘信號 Reset_n 輸入 1 復(fù)位信號 RxD 輸入 1 RS232 輸入信號 New_data 輸出 1 指示信號,當(dāng)監(jiān)測到新數(shù)據(jù)時(shí)置高 在監(jiān)測到傳輸?shù)钠鹗嘉缓螅盘柋O(jiān)測器需要將自己鎖定,即不對輸入信號進(jìn)行監(jiān)測,直到 UART 內(nèi)核將其復(fù)位。完成加載步驟后 , UART 內(nèi)核會重置波特率發(fā)生器,并且設(shè)置移位寄存器工作在波特率模式下,于是移位寄存器便
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1