用 HLS 實(shí)現(xiàn) UART
介紹
UART 是一種舊的串行通信機(jī)制,但仍在很多平臺(tái)中使用。它在 HDL 語(yǔ)言中的實(shí)現(xiàn)并不棘手,可以被視為本科生的作業(yè)。在這里,我將通過這個(gè)例子來展示在 HLS 中實(shí)現(xiàn)它是多么容易和有趣。
因此,從概念上講,這是一個(gè)微不足道的項(xiàng)目;然而,它對(duì)于對(duì) HLS 感興趣的人來說是有啟發(fā)性的。
現(xiàn)在項(xiàng)目定義: 下圖顯示了項(xiàng)目的簡(jiǎn)單結(jié)構(gòu)。
我們?cè)?FPGA 中的設(shè)計(jì)UART發(fā)送,每當(dāng)按下按鈕時(shí)就會(huì)將其發(fā)送到計(jì)算機(jī)上的串口調(diào)試助手。
FPGA 板上的八個(gè)滑動(dòng)開關(guān)用于輸入數(shù)據(jù)字節(jié)(例如字母或符號(hào)的 ASCII 代碼)。此外,UP 按鈕用作發(fā)送控制鍵。
設(shè)計(jì)很簡(jiǎn)單,程序本身能接受開發(fā)板上撥碼開關(guān)的數(shù)據(jù),然后添加一個(gè)“0”起始位和一個(gè)“1”停止位,最后以9600 bit/s的波特率發(fā)送出去。
首先需要根據(jù)開發(fā)板上的時(shí)鐘(本例是100MHz),進(jìn)行分頻,生成串口發(fā)送所需的時(shí)鐘。
booldelay(longlongintn){ staticbooldummy=0; for(longlongintj=0;j
生成速率時(shí)鐘后,簡(jiǎn)單的狀態(tài)機(jī)可以將數(shù)據(jù)發(fā)送出去。
voiduart_data_transfer(bool&uart_tx,ap_uint<8>data,boolbaud_rate_clock,boolstart){ staticboolsend_bit=1; staticboolstart_state=0; staticbooltransfer=0; staticunsignedintcount=0; staticintstate=0; ap_uint<10>d=((bool)0b1,(ap_int<8>)data,(bool)0b0); if(start==1&&start_state==0){ transfer=1; start_state=1; count=0; } if(start==0&&start_state==1){ start_state=0; } if(baud_rate_clock==1&&state==0&&transfer==1){ send_bit=d[count++]; if(count==10){ transfer=0; } state=1; } if(baud_rate_clock==0&&state==1){ state=0; } uart_tx=send_bit; }
將這些代碼綜合到 RTL 模塊后,我們可以創(chuàng)建 Vivado 項(xiàng)目并生成 FPGA 比特流,并驗(yàn)證。
總結(jié)
很簡(jiǎn)單的一個(gè)實(shí)例,大家可以自行和HDL實(shí)現(xiàn)的方式進(jìn)行對(duì)比。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603375 -
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7494瀏覽量
87953 -
uart
+關(guān)注
關(guān)注
22文章
1235瀏覽量
101392 -
串行通信
+關(guān)注
關(guān)注
4文章
572瀏覽量
35398 -
HLS
+關(guān)注
關(guān)注
1文章
129瀏覽量
24113
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論