




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第十章PS/2鼠標(biāo)接口控制器
10.1PS/2鼠標(biāo)接口電路10.2PS/2傳輸子系統(tǒng)設(shè)計(jì)10.3PS/2鼠標(biāo)數(shù)據(jù)傳輸系統(tǒng)10.4PS/2鼠標(biāo)數(shù)據(jù)接口電路本章小結(jié) 10.1PS/2鼠標(biāo)接口電路
10.1.1關(guān)于鼠標(biāo)
計(jì)算機(jī)上的鼠標(biāo)是用來檢測在平面二維空間中的移動(dòng)狀態(tài)和坐標(biāo)的。其內(nèi)部電路用來測量移動(dòng)的相對距離以及按鍵狀態(tài)。對于PS/2接口的鼠標(biāo),鼠標(biāo)的傳輸信息打包成三個(gè)數(shù)據(jù)包通過PS/2口發(fā)送出去;在傳輸過程中,數(shù)據(jù)以串行方式發(fā)送并且按照預(yù)先設(shè)定的采樣率持續(xù)傳輸。
PS/2端口的通信是雙向的。主設(shè)備可以發(fā)送命令參數(shù)給鍵盤和鼠標(biāo)。對于鍵盤來說,不需要主設(shè)備向鍵盤發(fā)送參數(shù),因?yàn)檫@樣會(huì)對鍵盤提出更高的要求。而鼠標(biāo)不一樣,上電之后不發(fā)送任何信息給主設(shè)備,反而主設(shè)備需要首先發(fā)送命令初始化鼠標(biāo),使鼠標(biāo)處于連續(xù)發(fā)送信息狀態(tài)。所以PS/2鼠標(biāo)接口是需要支持雙向通信接口的。下面介紹PS/2的鼠標(biāo)接口協(xié)議,并設(shè)計(jì)一個(gè)簡單的雙向鼠標(biāo)數(shù)據(jù)傳輸接口電路。10.1.2鼠標(biāo)PS/2通信協(xié)議
標(biāo)準(zhǔn)的PS/2鼠標(biāo)接口數(shù)據(jù)不僅反映鼠標(biāo)在X軸和Y軸的移動(dòng)情況,而且還包括鼠標(biāo)左鍵、中鍵、右鍵的狀態(tài)信息。鼠標(biāo)電路包含一個(gè)內(nèi)部計(jì)數(shù)器,其用來計(jì)算鼠標(biāo)的每次移動(dòng)量。當(dāng)數(shù)據(jù)傳輸給主機(jī)時(shí),計(jì)數(shù)器清零后重新開始計(jì)數(shù)。該計(jì)數(shù)器的值為一個(gè)9bit寬的帶符號整數(shù),其正值代表向右或向上運(yùn)動(dòng),其負(fù)值代表向左或向下運(yùn)動(dòng)。計(jì)數(shù)器與實(shí)際物理距離之間的關(guān)系由鼠標(biāo)特性參數(shù)來決定。默認(rèn)為每計(jì)數(shù)4次代表1mm。當(dāng)鼠標(biāo)持續(xù)移動(dòng)時(shí),數(shù)據(jù)以固定速率傳輸,這個(gè)速率由鼠標(biāo)采樣率決定。默認(rèn)采樣率為100次每秒。如果鼠標(biāo)移動(dòng)速率過快,采樣期間移動(dòng)量計(jì)數(shù)值則有可能超過計(jì)數(shù)器的最大值。計(jì)數(shù)器在適當(dāng)?shù)姆较蛟O(shè)置有最大幅度,并用兩位溢出位來指示這種情況。
反映鼠標(biāo)的移動(dòng)及點(diǎn)擊活動(dòng)需要三個(gè)字節(jié),它們被封裝在PS/2協(xié)議中。3個(gè)字節(jié)數(shù)據(jù)的具體格式以及含義如表10-1所示。包含有如下的信息:
(1)?X8,…,X0:在2秒完全模式下的X軸移動(dòng)量;
(2)?Xv:X軸移動(dòng)溢出;
(3)?Y8,…,Y0:在2秒完全模式下的Y軸移動(dòng)量;
(4)?Yv;Y軸溢出;
(5)?l:左鍵狀態(tài),當(dāng)左鍵按下時(shí)為1;
(6)?r:右鍵狀態(tài),當(dāng)右鍵按下時(shí)為1;
(7)?m:可選擇中鍵,當(dāng)鍵按下時(shí)為1。
傳輸過程中,字節(jié)1首先被發(fā)送,字節(jié)3最后被發(fā)送。10.1.3初始化過程
鼠標(biāo)的操作相對于鍵盤的操作要復(fù)雜的多。它有各種不同的模式,通常用的最多的是串行流模式,即鼠標(biāo)檢測有移動(dòng)或者有鍵按下時(shí),不斷將數(shù)據(jù)發(fā)送給主機(jī),如果運(yùn)動(dòng)是持續(xù)的,數(shù)據(jù)按照設(shè)計(jì)的采樣率發(fā)送。
操作過程中,主機(jī)可以給鼠標(biāo)發(fā)送命令,修改默認(rèn)值或其他參數(shù),來設(shè)置不同的操作模式,然后鼠標(biāo)發(fā)送狀態(tài)信號進(jìn)行響應(yīng)。在設(shè)計(jì)中要求所有設(shè)置為默認(rèn)值,不做變化,唯一任務(wù)是設(shè)置鼠標(biāo)為持續(xù)數(shù)據(jù)流模式。這時(shí)PS/2和FPGA開發(fā)板之間的初始化步驟如下:
(1)上電時(shí)鼠標(biāo)首先進(jìn)行上電自檢,如果鼠標(biāo)發(fā)送一個(gè)字節(jié)AA,則表示自檢通過;然后發(fā)送一個(gè)字節(jié)數(shù)據(jù)00,為標(biāo)準(zhǔn)鼠標(biāo)的ID號。
(2)?FPGA主機(jī)端發(fā)送命令F4,使能數(shù)據(jù)流模式,鼠標(biāo)返回FE來響應(yīng)命令。
(3)鼠標(biāo)進(jìn)入數(shù)據(jù)流模式,然后發(fā)送正常的數(shù)據(jù)包。
如果在FPGA板上電之前鼠標(biāo)已經(jīng)插在了FPGA驗(yàn)證板上,則當(dāng)板子上電時(shí),鼠標(biāo)立即發(fā)送“AA00”,由于FPGA芯片當(dāng)時(shí)還沒有被配置,那么將不能接收到鼠標(biāo)發(fā)送的數(shù)據(jù)。所以通常會(huì)忽略上述步驟(1),將鼠標(biāo)接口時(shí)序電路做簡化,僅需要發(fā)送F4命令來檢測鼠標(biāo)FE響應(yīng),然后直接進(jìn)入正常工作狀態(tài)來傳輸鼠標(biāo)數(shù)據(jù)包。也可以通過發(fā)送復(fù)位命令來強(qiáng)制鼠標(biāo)返回到初始狀態(tài)。
(1)?FPGA主機(jī)端發(fā)送命令FE復(fù)位鼠標(biāo),鼠標(biāo)將返回FE來響應(yīng)。
(2)鼠標(biāo)執(zhí)行上電自測,然后發(fā)送“AA00”,在這個(gè)過程中,數(shù)據(jù)流模式將被禁止。
新型鼠標(biāo)增加了很多功能,比如鼠標(biāo)帶有滾輪或者另外增加新的按鈕,這樣就需要發(fā)送更多的信息,這些多出來的字節(jié)將和原始的三字節(jié)數(shù)據(jù)打包一起發(fā)送。
10.2PS/2傳輸子系統(tǒng)設(shè)計(jì)
10.2.1主系統(tǒng)對PS/2設(shè)備的通信協(xié)議
主系統(tǒng)對PS/2設(shè)備的通信協(xié)議包含雙向數(shù)據(jù)交換。鼠標(biāo)數(shù)據(jù)和時(shí)鐘為開漏極電路,可以認(rèn)為它們?yōu)槿龖B(tài)門。基本時(shí)序傳輸協(xié)議如圖10-1所示,其中,數(shù)據(jù)和時(shí)鐘信號線標(biāo)為ps2d和ps2c??梢郧宄匕l(fā)現(xiàn),時(shí)序圖被分成兩部分,一部分反映主系統(tǒng)(host)的活動(dòng),而另一部分反映設(shè)備(mouse)的活動(dòng)?;静僮鲿r(shí)序如下:
(1)主設(shè)備強(qiáng)行置低ps2c至少100μs來禁止任何鼠標(biāo)活動(dòng),可以認(rèn)為是主系統(tǒng)請求發(fā)送數(shù)據(jù)包。
(2)主設(shè)備強(qiáng)行置低ps2d,禁止ps2c,可以認(rèn)為是主機(jī)發(fā)送一個(gè)開始信號。
(3)此時(shí)PS/2從設(shè)備開始控制ps2c,負(fù)責(zé)PS/2時(shí)鐘信號的產(chǎn)生;當(dāng)檢測到開始信號時(shí),PS/2設(shè)備產(chǎn)生1到0的信號傳輸。
(4)一旦檢測到傳輸開始,主系統(tǒng)串行移位最低位數(shù)據(jù)在ps2d線上,并一直保持原值直到PS/2設(shè)備在ps2c線上產(chǎn)生1到0的跳變,也稱數(shù)據(jù)響應(yīng)位。
(5)重復(fù)步驟(4),直到剩余的7位數(shù)據(jù)和1位奇偶校校驗(yàn)位發(fā)送結(jié)束。
(6)發(fā)送完奇偶校驗(yàn)位之后,主機(jī)禁止ps2d(設(shè)為高阻態(tài)),PS/2從設(shè)備接管ps2d數(shù)據(jù)線并通過置ps2d為0來響應(yīng)傳輸完成。根據(jù)需要,主設(shè)備可以通過在ps2c從1到0跳變時(shí)刻檢查ps2d上面的值來驗(yàn)證是否成功傳輸。圖10-1PS/2接口主從設(shè)備之間的時(shí)序圖10.2.2設(shè)計(jì)與編碼
與前面講述的接收子系統(tǒng)不同之處在于ps2c與ps2d信號為雙向傳輸。每個(gè)信號都需要三態(tài)緩沖器,三態(tài)緩沖器的接口如圖10-2所示。tri_c與tri_d信號為三態(tài)緩沖器的使能信號,當(dāng)置為1時(shí),ps2c_out與ps2d_out信號傳輸?shù)捷敵龆丝冢駝tps2c_out與ps2d_out信號為高阻狀態(tài)。圖10-2PS/2傳輸子系統(tǒng)三態(tài)緩沖器 為了更加明確設(shè)計(jì)傳輸子系統(tǒng)的流程,根據(jù)鼠標(biāo)數(shù)據(jù)傳輸控制協(xié)議來畫出ASMD狀態(tài)圖,如圖10-3所示。狀態(tài)機(jī)起始狀態(tài)為空狀態(tài)(idle狀態(tài))。當(dāng)主機(jī)置位wr_ps2信號并將數(shù)據(jù)放在din上時(shí),狀態(tài)機(jī)啟動(dòng)并裝載din信號和校驗(yàn)位par,并一同送到移位寄存器shift_reg中,然后置c_reg寄存器為全1,c_reg寄存器由一個(gè)13位計(jì)數(shù)器組成,用來產(chǎn)生164μs的延遲。緊接著狀態(tài)機(jī)進(jìn)入請求發(fā)送狀態(tài)(rts狀態(tài))。在rts狀態(tài),狀態(tài)機(jī)置位ps2c_out為0,并將相對應(yīng)三態(tài)緩沖器的使能位tri_c置位,判斷c_reg還沒有清零,狀態(tài)機(jī)進(jìn)入開始狀態(tài)(start狀態(tài))。這時(shí),ps2時(shí)鐘信號被禁止,數(shù)據(jù)線被置為0,PS/2設(shè)備接管并生成時(shí)鐘信號在ps2c信號線上。當(dāng)通過fall_edge信號檢測到ps2c信號下降沿時(shí),狀態(tài)機(jī)進(jìn)入數(shù)據(jù)傳輸狀態(tài)(data狀態(tài)),開始移位8位數(shù)據(jù)和1位檢驗(yàn)位,而寄存器n用來保持追蹤移位數(shù)目。當(dāng)寄存器n為0,即數(shù)據(jù)移位傳輸結(jié)束時(shí),狀態(tài)機(jī)進(jìn)入停止位(stopstate);此時(shí),數(shù)據(jù)線被停止,當(dāng)檢測到最后一個(gè)下降沿時(shí)返回到idle狀態(tài)。另外,狀態(tài)機(jī)還包含tx_idle信號來指示傳輸是否正在進(jìn)行,此信號可以被用來作為與發(fā)送和接收接口模塊的狀態(tài)指示信號,具體細(xì)節(jié)如程序10-1所示。fall_edge信號也是通過與前面所述的濾波電路產(chǎn)生的。圖10-3PS/2發(fā)送子系統(tǒng)FSM流程圖
【程序10-1】PS/2發(fā)送子系統(tǒng)。
moduleps2_tx
(
input
wireclk,reset,
input
wirewr_ps2,
input
wire[7:0]din,
inout
wireps2d,ps2c,
output
regtx_idle,tx_done_tick
);
//狀態(tài)機(jī)狀態(tài)信號定義
localparam[2:0]
idle=3'b000,
rts=3'b001,
start??=3'b010,
data=3'b011,
stop=3'b100;
//信號聲明
reg[2:0]state_reg,state_next;
reg[7:0]filter_reg;
wire[7:0]filter_next;
regf_ps2c_reg;
wiref_ps2c_next;
reg[3:0]n_reg,n_next;
reg[8:0]b_reg,b_next;
reg[12:0]c_reg,c_next;
wirepar,fall_edge;
regps2c_out,ps2d_out;
regtri_c,tri_d;
//=================================================
//濾波和ps2c的下降沿檢測電路
//=================================================
always@(posedgeclk,posedgereset)
if(reset)
begin
filter_reg<=0;
f_ps2c_reg<=0;
end
else
begin
filter_reg<=filter_next;
f_ps2c_reg<=f_ps2c_next;
end
assignfilter_next={ps2c,filter_reg[7:1]};
assignf_ps2c_next=(filter_reg==8'b11111111)?1'b1:
(filter_reg==8'b00000000)?1'b0:
f_ps2c_reg;
assignfall_edge=f_ps2c_reg&~f_ps2c_next;
//=============================================
//FSMD
//=============================================
//FSMD狀態(tài)和數(shù)據(jù)寄存器
always@(posedgeclk,posedgereset)
if(reset)
begin
state_reg<=idle;
c_reg<=0;
n_reg<=0;
b_reg<=0;
end
else
begin
state_reg<=state_next;
c_reg<=c_next;
n_reg<=n_next;
b_reg<=b_next;
end
//偶校驗(yàn)位
assignpar=~(^din);
//FSMD下一狀態(tài)邏輯
always@*
begin
state_next=state_reg;
c_next=c_reg;
n_next=n_reg;
b_next=b_reg;
tx_done_tick=1'b0;
ps2c_out=1'b1;
ps2d_out=1'b1;
tri_c=1'b0;
tri_d=1'b0;
tx_idle=1'b0;
case(state_reg)
idle:
begin
tx_idle=1'b1;
if(wr_ps2)
begin
b_next={par,din};
c_next=13'h1fff; //213-1
state_next=rts;
end
end
rts: //發(fā)送請求
begin
ps2c_out=1'b0;
tri_c=1'b1;
c_next=c_reg-1;
if(c_reg==0)
state_next=start;
end
start: //置位start
begin
ps2d_out=1'b0;
tri_d=1'b1;
if(fall_edge)
begin
n_next=4'h8;
state_next=data;
end
end
data: //8位數(shù)據(jù)+1位校驗(yàn)
begin
ps2d_out=b_reg[0];
tri_d=1'b1;
if(fall_edge)
begin
b_next={1'b0,b_reg[8:1]};
if(n_reg==0)
state_next=stop;
else
n_next=n_reg-1;
end
end
stop://ps2d置位為高
if(fall_edge)
begin
state_next=idle;
tx_done_tick=1'b1;
end
endcase
end
//三態(tài)緩沖器
assignps2c=(tri_c)?ps2c_out:1'bz;
assignps2d=(tri_d)?ps2d_out:1'bz;
endmodule
本代碼中沒有錯(cuò)誤檢查電路。更健壯的設(shè)計(jì)要求檢查校驗(yàn)位的正確性,并且包含一個(gè)看門狗計(jì)數(shù)器來防止鼠標(biāo)在錯(cuò)誤的狀態(tài)下抖動(dòng)。
10.3PS/2鼠標(biāo)數(shù)據(jù)傳輸系統(tǒng)
10.3.1雙向傳輸PS/2接口電路設(shè)計(jì)
綜合接收和發(fā)送系統(tǒng)來設(shè)計(jì)雙向傳輸PS/2接口電路。圖10-4為設(shè)計(jì)模塊框圖,用tx_idle和rx_en作為狀態(tài)信號來調(diào)整傳輸和接收操作。傳輸操作優(yōu)先級略高,當(dāng)系統(tǒng)正在進(jìn)行傳輸時(shí),tx_idle信號無效;否則,禁止接收操作。接收系統(tǒng)只有在傳輸系統(tǒng)為空的情況下才允許輸入,兩者輪流工作,具體細(xì)節(jié)如程序10-2所示。圖10-4雙向PS/2接口的頂層模塊圖
【程序10-2】雙向傳播PS/2接口電路。
moduleps2_rxtx
(
input
wireclk,reset,
input
wirewr_ps2,
inout
wireps2d,ps2c,
input
wire[7:0]din,
output
wirerx_done_tick,tx_done_tick,
output
wire[7:0]dout
);
//信號聲明
wiretx_idle;
//例化PS/2接收器
ps2_rxps2_rx_unit
(.clk(clk),.reset(reset),.rx_en(tx_idle),
.ps2d(ps2d),.ps2c(ps2c),
.rx_done_tick(rx_done_tick),.dout(dout));
//例化PS/2發(fā)送器
ps2_txps2_tx_unit
(.clk(clk),.reset(reset),.wr_ps2(wr_ps2),
.din(din),.ps2d(ps2d),.ps2c(ps2c),
.tx_idle(tx_idle),.tx_done_tick(tx_done_tick));
endmodule10.3.2雙向傳輸PS/2驗(yàn)證電路
設(shè)計(jì)一個(gè)測試電路來驗(yàn)證雙向傳輸PS/2接口電路,整體框圖如10-5所示。人工發(fā)送傳輸命令,用8位撥碼開關(guān)設(shè)置數(shù)據(jù),然后用按鍵產(chǎn)生一個(gè)時(shí)鐘脈寬的脈沖來發(fā)送數(shù)據(jù)包,接收數(shù)據(jù)包首先需要通過byte-to-ascii電路,將數(shù)據(jù)轉(zhuǎn)接成ASCII碼外加空格的形式,然后用UART發(fā)送到PC的超級終端上。具體細(xì)節(jié)如程序10-3所示。圖10-5PS/2雙向接口驗(yàn)證電路【程序10-3】雙向傳輸PS/2驗(yàn)證電路。
moduleps2_monitor
(
input
wireclk,reset,
input
wire[7:0]sw,
input
wire[2:0]btn,
inout
wireps2d,ps2c,
output
wiretx
);
//常數(shù)定義
localparamSP=8'h20; //spaceinASCII
//狀態(tài)聲明
localparam[1:0]
idle=2'b00,
send1=2'b01,
send0=2'b10,
sendb=2'b11;
//信號聲明
reg[1:0]state_reg,state_next;
wire[7:0]rx_data;
reg[7:0]w_data,ascii_code;
wirepsrx_done_tick,wr_ps2;
regwr_uart;
wire[3:0]hex_in;
//==============================================
//例化
//==============================================
//例化PS/2傳輸接收
ps2_rxtxps2_rxtx_unit
(.clk(clk),.reset(reset),.wr_ps2(wr_ps2),
.din(sw),.dout(rx_data),.ps2d(ps2d),.ps2c(ps2c),
.rx_done_tick(psrx_done_tick),.tx_done_tick());
//例化UART發(fā)送模塊
uartuart_unit
(.clk(clk),.reset(reset),.rd_uart(1'b0),
.wr_uart(wr_uart),.rx(1'b1),.w_data(w_data),
.tx_full(),.rx_empty(),.r_data(),.tx(tx));
//例化按鍵防反彈電路
debouncebtn_db_unit
(.clk(clk),.reset(reset),.sw(btn[0]),
.db_level(),.db_tick(wr_ps2));
//============================================
//發(fā)送ASCII字符狀態(tài)機(jī)模塊
//============================================
//狀態(tài)寄存器
always@(posedgeclk,posedgereset)
if(reset)
state_reg<=idle;
else
state_reg<=state_next;
//下一狀態(tài)邏輯
always
@*
begin
wr_uart=1'b0;
w_data=SP;
state_next=state_reg;
case(state_reg)
idle:
if(psrx_done_tick) //接收掃描碼
state_next=send1;
send1: //發(fā)送十六進(jìn)制字符高字節(jié)
begin
w_data=ascii_code;
wr_uart=1'b1;
state_next=send0;
end
send0: //發(fā)送十六進(jìn)制字符低字節(jié)
begin
w_data=ascii_code;
wr_uart=1'b1;
state_next=sendb;
end
sendb: //發(fā)送空格字符
begin
w_data=SP;
wr_uart=1'b1;
state_next=idle;
end
endcase
end
//===========================================
//顯示掃描碼
//===========================================
//將掃描碼分離成兩個(gè)4bit十六進(jìn)制數(shù)
assignhex_in=(state_reg==send1)?rx_data[7:4]:
rx_data[3:0];
//十六進(jìn)制數(shù)到ASCII碼轉(zhuǎn)換電路
always@*
case(hex_in)
4'h0:ascii_code=8'h30;
4'h1:ascii_code=8'h31;
4'h2:ascii_code=8'h32;
4'h3:ascii_code=8'h33;
4'h4:ascii_code=8'h34;
4'h5:ascii_code=8'h35;
4'h6:ascii_code=8'h36;
4'h7:ascii_code=8'h37;
4'h8:ascii_code=8'h38;
4'h9:ascii_code=8'h39;
4'ha:ascii_code=8'h41;
4'hb:ascii_code=8'h42;
4'hc:ascii_code=8'h43;
4'hd:ascii_code=8'h44;
4'he:ascii_code=8'h45;
default:ascii_code=8'h46;
endcase
endmodule 10.4PS/2鼠標(biāo)數(shù)據(jù)接口電路
10.4.1傳輸PS/2接口電路設(shè)計(jì)
PS/2接口電路是在PS/2雙向傳輸電路外面再包一層電路。其主要功能是使能串行流模式和處理三個(gè)傳輸數(shù)據(jù)字節(jié)。電路的輸出包括兩個(gè)9位信號:xm和ym,分別代表鼠標(biāo)在X軸和Y軸的移動(dòng)信號;btm為3位按鍵狀態(tài)信號;信號m_done_tick為一位時(shí)鐘脈寬長度的狀態(tài)信號,當(dāng)傳輸數(shù)據(jù)有效時(shí)置位。
具體細(xì)節(jié)如程序10-4所示。程序主體狀態(tài)機(jī)由7個(gè)狀態(tài)組成。int1、int2和int3三個(gè)狀態(tài)為在reset有效之后執(zhí)行。在這三個(gè)狀態(tài)中,狀態(tài)機(jī)處理F4命令,等待數(shù)據(jù)傳輸后數(shù)據(jù)包開始響應(yīng),這時(shí)鼠標(biāo)進(jìn)入串行數(shù)據(jù)流模式。之后,狀態(tài)機(jī)在pack1、pack2和pack3三個(gè)狀態(tài)獲取和處理下一個(gè)三字節(jié)數(shù)據(jù)包,然后在done狀態(tài)激活m_done_tick信號,狀態(tài)機(jī)不斷循環(huán)后面四個(gè)狀態(tài)。
【程序10-4】基本鼠標(biāo)接口電路。
modulemouse
(
input
wireclk,reset,
inout
wireps2d,ps2c,
output
wire[8:0]xm,ym,
output
wire[2:0]btnm,
output
regm_done_tick
);
//常數(shù)聲明
localparamSTRM=8'hf4; //數(shù)據(jù)流發(fā)送命令F4
//狀態(tài)聲明
localparam[2:0]
init1=3'b000,
init2=3'b001,
init3=3'b010,
pack1=3'b011,
pack2=3'b100,
pack3=3'b101,
done=3'b110;
//信號聲明
reg[2:0]state_reg,state_next;
wire[7:0]rx_data;
regwr_ps2;
wirerx_done_tick,tx_done_tick;
reg[8:0]x_reg,y_reg,x_next,y_next;
reg[2:0]btn_reg,btn_next;
//例化
ps2_rxtxps2_unit
(.clk(clk),.reset(reset),.wr_ps2(wr_ps2),
.din(STRM),.dout(rx_data),.ps2d(ps2d),.ps2c(ps2c),
.rx_done_tick(rx_done_tick),
.tx_done_tick(tx_done_tick));
//FSMD狀態(tài)和數(shù)據(jù)寄存器
always@(posedgeclk,posedgereset)
if(reset)
begin
state_reg<=init1;
x_reg<=0;
y_reg<=0;
btn_reg<=0;
end
else
begin
state_reg<=state_next;
x_reg<=x_next;
y_reg<=y_next;
btn_reg<=btn_next;
end
//FSMD下一狀態(tài)邏輯
always
@*
begin
state_next=state_reg;
wr_ps2=1'b0;
m_done_tick=1'b0;
x_next=x_reg;
y_next=y_reg;
btn_next=btn_reg;
case(state_reg)
init1:
begin
wr_ps2=1'b1;
state_next=init2;
end
init2: //等待發(fā)送完畢
if(tx_done_tick)
state_next=init3;
init3: //等待數(shù)據(jù)包返回標(biāo)志
if(rx_done_tick)
state_next=pack1;
pack1: //等待第一個(gè)數(shù)據(jù)包
if(rx_done_tick)
begin
state_next=pack2;
y_next[8]=rx_data[5];
x_next[8]=rx_data[4];
btn_next=rx_data[2:0];
end
pack2: //等待第二個(gè)數(shù)據(jù)包
if(rx_done_tick)
begin
state_next=pack3;
x_next[7:0]=rx_data;
end
pack3: //等待第三個(gè)數(shù)據(jù)包
if(rx_done_tick)
begin
state_next=done;
y_next[7:0]=rx_data;
end
done:
begin
m_done_tick=1'b1;
state_next=pack1;
end
endcase
end
//輸出邏輯
assignxm=x_reg;
assignym=y_reg;
assignbtnm=btn_reg;
endmodule
10.4.2傳輸PS/2接口電路測試
我們設(shè)計(jì)一個(gè)簡單的測試電
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 奉賢區(qū)羽毛球球場施工方案
- 水庫牧道及庫區(qū)清施工方案
- 長沙設(shè)備內(nèi)襯防腐施工方案
- 2025年中國搬運(yùn)機(jī)器人產(chǎn)業(yè)深度分析、投資前景及發(fā)展趨勢預(yù)測報(bào)告
- 生態(tài)補(bǔ)償機(jī)制的建設(shè)與完善策略及實(shí)施路徑
- 中西通俗小說賞析知到課后答案智慧樹章節(jié)測試答案2025年春溫州理工學(xué)院
- 2025年電子金融相關(guān)設(shè)備項(xiàng)目建議書
- 數(shù)學(xué)高考備考講義第三章不等式35
- 燈條施工方案模板
- 2025年高三二輪專題復(fù)習(xí)學(xué)案地理(藝體生專用)第26講地區(qū)產(chǎn)業(yè)結(jié)構(gòu)變化與產(chǎn)業(yè)轉(zhuǎn)移
- 高中體育與健康人教版高中必修全一冊(新課標(biāo))第十章體操類運(yùn)動(dòng)-技巧模塊計(jì)劃
- 云南省主要礦產(chǎn)資源
- 臨床試驗(yàn)疑難問題解答
- 磁共振基礎(chǔ)知識及3.0T磁共振1
- 酒店概論教案
- 傳統(tǒng)體育養(yǎng)生概論
- 電力建設(shè)工程預(yù)算定額2006版
- 地鐵活塞風(fēng)相關(guān)計(jì)算
- DLT5216-2005 35kV~220kV城市地下變電站設(shè)計(jì)規(guī)定
- 華彩中國舞教案第四級分享
- SMT鋼網(wǎng)管理規(guī)范
評論
0/150
提交評論