版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
2023/10/22計算機接口技術1第13章基于FPGA的接口電路設計本章主要內(nèi)容
接口電路實現(xiàn)的技術趨勢
FPGA設計基礎
用VerilogHDL進行電路設計
并行接口8255A的FPGA設計13.1接口電路實現(xiàn)的技術趨勢
●傳統(tǒng)接口設計:專用接口芯片(8251,8255,
USB,PCI等)●現(xiàn)在接口設計:FPGA●基于FPGA接口設計的優(yōu)點2023/10/22計算機接口技術2靈活性大通用性強功耗低、速度快、集成度高13.2FPGA設計基礎
13.2.1FPGA的工作原理●FPGA利用一種稱為查找表(LUT)的結(jié)構實現(xiàn)反復燒寫●用戶通過原理圖或HDL語言描述邏輯電路,F(xiàn)PGA會自動計算邏輯電路的結(jié)果,把結(jié)果存入LUT中?!褫斎脒壿嬓盘枙r就相當于輸入一個地址在LUT中查找,找出結(jié)果。2023/10/22計算機接口技術34輸入“與”門的實例2023/10/22計算機接口技術4圖13.1輸入“與”門實例對圖13.1的幾點說明
●LUT的值存入SRAM中或Flash中?!窭玫刂纷鳛樗饕贚UT中查找值。●完成的功能與實際電路等價,具有更快的執(zhí)行速度、更大的規(guī)模。●Xilinx和Altera公司的FPGA是基于SRAM的,掉電后內(nèi)部邏輯消失,用戶需要添加一個外存儲器來存儲程序。2023/10/22計算機接口技術513.2.2FPGA的設計流程FPGA的設計流程如圖13.2所示。
2023/10/22計算機接口技術6電路功能設計設計輸入功能仿真綜合優(yōu)化綜合后仿真實現(xiàn)與布線時序仿真板級仿真芯片編程與調(diào)試圖13.2FPGA的設計流程13.2.3FPGA的開發(fā)工具●Xilinx的ISE:ISE是Xilinx公司的FPGA/CPLD綜合集成設計平臺,界面友好,操作簡單。ISE提供了包括代碼編寫、庫管理、HDL綜合、仿真、下載等幾乎所有FPGA開發(fā)所需的工具。
●Xilinx的Vivado:Vivado是全新的另一個XilinxFPGA開發(fā)工具,是為高端FPGA專門開發(fā)的一款開發(fā)工具。
2023/10/22計算機接口技術7ViVado相比ISE,有著顯著的進步,主要表現(xiàn)在以下幾方面。
2023/10/22計算機接口技術8強調(diào)以IP為中心的系統(tǒng)設計思想。允許設計者在多個方案中探索最優(yōu)的實現(xiàn)方法。提供了更高效的時序收斂能力。提供設計者對FPGA時序、布局布線的高效控制能力。提供了高級綜合工具VivadoHIS,用戶可以用高級語言對FPGA建模。13.3采用VerilogHDL進行電路設計13.1HDL簡介HDL語言用文本形式來描述電子系統(tǒng)硬件電路的行為、結(jié)構、數(shù)據(jù)流,數(shù)字電路的設計者可以從頂層到底層描述自己的設計思想。主要特征:
2023/10/22計算機接口技術9兼具一些高級語言的結(jié)構形式和硬件線路的具體結(jié)構。HDL語言是并行處理的。使用結(jié)構級行為描述,可以在不同的抽象層次描述設計。具有時序的概念。學習HDL時需要注意的地方
2023/10/22計算機接口技術10了解HDL的可綜合性問題。用硬件電路設計思想來編寫HDL。語法掌握貴在精,不在多。13.3.2VHDL與VerilogHDL的比較●相同點
2023/10/22計算機接口技術11都能形式化的抽象表示電路的行為和結(jié)構。支持邏輯設計中層次與范圍的描述。可以簡化電路行為的描述。具有電路仿真與驗證機制。便于管理和設計重用。2023/10/22計算機接口技術12與VHDL相比,VerilogHDL最大的優(yōu)勢在于它非常容易掌握,只要有C語言的編程基礎,就很快能夠掌握;VHDL不是很直觀,需要有Ada的編程基礎,一般需要半年以上的專業(yè)培訓才能掌握。一般認為VerilogHDL在系統(tǒng)級抽象方面比VHDL略差些;在門級開關電路描述方面VerilogHDL要強的多。
VHDL適合特大型的系統(tǒng)設計;VerilogHDL較為適合系統(tǒng)級、算法級、寄存器傳輸級、邏輯級、門級和開關級的電路設計。●不同點13.3.3基于HDL的電路設計方法●傳統(tǒng)上使用自底向上的設計方法,即:器件選擇
模塊設計
模塊間綜合
系統(tǒng)仿真。這樣只有在后期才能發(fā)現(xiàn)系統(tǒng)設計的問題,導致修改麻煩?!窭肏DL進行電路設計采用自頂向下的設計方法,對系統(tǒng)不斷劃分成小模塊,直到可用EDA元件實現(xiàn)為止。利用硬件描述語言對設計的模塊進行描述和定義,結(jié)合多層仿真技術,在確保設計可行性的條件下完成系統(tǒng)的設計。這種設計方法的好處是在每一層都進行仿真,能夠及時發(fā)現(xiàn)設計錯誤,減輕設計成本。
2023/10/22計算機接口技術1313.3.4VerilogHDL的模塊結(jié)構例13.1二路選擇器的Verilog實現(xiàn),如圖13.3所示。
2023/10/22計算機接口技術14as1bout圖13.3二路選擇器13.3.4VerilogHDL的模塊結(jié)構模塊和說明
2023/10/22計算機接口技術15modulemux21(out,a,b,s1)inputa,b,s1;outputout;regout;always@(s1oraorb)if(!s1)out=a;elseout=b;endmodule●輸入端口:a,b,s1,默認1位,wire數(shù)據(jù)類型;●輸出端口:out,默認1位,reg數(shù)據(jù)類型;●模塊定義包括:端口定義、IO說明、內(nèi)部信號說明和功能定義。
13.3.5Verilog
HDL語言的描述方法●結(jié)構化描述是通過元件實例進行描述的方法,就像在電路圖輸入方式下調(diào)入庫元件一樣,鍵入元件的名稱和相連的引腳即可?!窭Z句:使得一個模塊能夠在另外一個模塊中被引用。其格式是:
模塊名實例名(端口關聯(lián));●端口關聯(lián):指明了模塊和外部端口信號,模塊和模塊之間的連接。其格式是:連接信號名 //通過位置
.端口名(連接信號名)//通過名稱
2023/10/22計算機接口技術16例13.2
三路選擇器的例化設計三路選擇器如圖13.4所示。
2023/10/22計算機接口技術17abs1outabs1outU1U2ya2a3s0s1a1tmp圖13.4三路選擇器模塊定義和說明
2023/10/22計算機接口技術18modulemux31(y,a1,a2,a3,s0,s1)inputa1,a2,a3,s0,s1;outputy;
regy;wiretmp;mux21U1(tmp,a2,a3,s0);mux21U2(.out(y),.a(a1),.b(tmp),.s1(s1) );endmodule●實例化U1采用的是位置關聯(lián)?!駥嵗疷2采用的是名稱關聯(lián)。
13.3.5Verilog
HDL語言的描述方法數(shù)據(jù)流描述形式就是用assign連續(xù)賦值語句描述電路或系統(tǒng)中信號的傳遞關系。assign語句是并行語句。連續(xù)賦值語句將值賦給線網(wǎng)。格式:assignLHS_target=RHS_expression
右邊的值受監(jiān)控,一有變化就重新計算,結(jié)果值有變化,就賦給左邊。例如:wire[3:0]Z,Preset,Clear; assignZ=Preset&Clear,
在沒有定義時延的情況下右邊的值立即賦給左邊。
2023/10/22計算機接口技術19數(shù)據(jù)流描述形式顯式定義時延的例子例如:assign#6Ask=Quiet||Late;表示計算結(jié)果后經(jīng)過6個時間單位之后進行賦值。如圖13.5所示,時刻5Late發(fā)生變化,時刻11賦值給Ask。2023/10/22計算機接口技術20圖13.5連續(xù)賦值語句中的時延●定義時延的語法可以定義三類時延值:上升時延,下降時延,關閉時延。語法如下:●如何靈活利用時延
2023/10/22計算機接口技術21assign#(rise,fall,turn-off)LHS_target=RHS_expression;assign#4Ask=Quiet||Late;assign#(4,8)Ask=Quick;assign#(4,8,6)Arb=&DataBus;assignBus=MemAddr[7:4];例13.33-8譯碼器的電路設計3-8譯碼器的代碼模塊如下:
2023/10/22計算機接口技術22moduledecoder3x8(a,b,c,en,z);inputa,b,c,en;output[0:7]z;wirenota,notb,notc;
assign#1nota=~a;assign#1notb=~b;assign#1notc=~c;assign#2z[0]=nota¬b¬c&en;assign#2z[1]=a¬b¬c&en;assign#2z[2]=nota&b¬c&en;assign#2z[3]=a&b¬c&en;assign#2z[4]=nota¬b&c&en;assign#2z[5]=a¬b&c&en;assign#2z[6]=nota&b&c&en;assign#2z[7]=a&b&c&en;endmodule
行為描述形式●行為描述形式就是使用initial和always語句來設計行為建模?!駃nitial語句:只執(zhí)行一次,在時刻0開始執(zhí)行,若有兩個initial語句,則在時刻0并行執(zhí)行?!駃nitial語句的格式:
2023/10/22計算機接口技術23initialbegin/fork
塊內(nèi)變量說明
時序控制1行為語句1;時序控制2行為語句2;……時序控制n行為語句n;//可以是時延控制或事件控制end/join例13.4
帶有順序過程的initial語句例子程序和運行時port_A值的變化情況如圖13.6所示。
2023/10/22計算機接口技術24parameterAPPLY_DELAY=5;reg[0:7]port_A;...initialbeginPort_A='h20;#APPLY_DELAYPort_A='hF2;#APPLY_DELAYPort_A='h41;#APPLY_DELAYPort_A='h0A;end圖13.6使用initial語句產(chǎn)生的波形always語句(可以循環(huán)執(zhí)行)●格式●幾點說明
2023/10/22計算機接口技術25always@(敏感事件列表)
begin/fork
塊內(nèi)變量說明
時序控制1行為語句1;時序控制2行為語句2;……時序控制n行為語句n;end/join1.敏感事件是可選項,目的是為了觸發(fā)always語句的執(zhí)行。2.敏感事件表由一個或多個事件表達式構成。3.過程語句、時延控制與initial語句大致相同。4.always過程塊主要對硬件功能行為進行描述,可實現(xiàn)鎖存器和觸發(fā)器,也可用來實現(xiàn)組合邏輯。例13.5initial和always語句的綜合使用
2023/10/22計算機接口技術26moduleTestXorBehavior;regSa,Sb,Zeus;initialbeginSa=0;Sb=0;#5Sb=1;#5Sa=1;#5Sb=0;endalways@(SaorSb)Zeus=Sa^Sb;always@(Zeus)$display("Attime%t,Sa=%d,Sb=%d,Zeus=%b",$time,Sa,Sb,Zeus)endmodule
時序控制●延遲控制:通過表達式定義開始遇到這條語句
和真正執(zhí)行這條語句之間的延遲時間。
●事件控制:通過表達式定義開始遇到這條語句和真正執(zhí)行這條語句之間的延遲時間?!襁呇赜|發(fā)事件控制:指信號的邊沿跳變時發(fā)生指定的行為。有上升沿控制(posedge描述)和下降沿控制(negedge描述)。
2023/10/22計算機接口技術27語句間時延:Sum=(A^B)^Cin;#4T1=A&Cin;//即第一條語句執(zhí)行后四個時間單位執(zhí)行第二條語句。語句內(nèi)時延:Sum=#3(A^B)^Cin;//計算好右邊值得等3個時間單位后賦值給左邊。例13.6邊沿觸發(fā)事件計數(shù)器如果clk信號上有上升沿,那么cnt信號就會加1,實現(xiàn)計數(shù)功能。
邊沿觸發(fā)事件控制,指信號的電平發(fā)生變化使發(fā)生指定的行為。2023/10/22計算機接口技術28reg[4:0]cnt;always@(posedgeclk)beginif(reset)cnt=0;elsecnt=cnt+1;end例13.7電平觸發(fā)計數(shù)器只要a、b、c信號的電平有變化,cnt的值就會加1?!?/p>
2023/10/22計算機接口技術29reg[4:0]cnt;always@(aorborc)beginif(reset)cnt=0;elsecnt=cnt+1;end13.4并行接口8255A的FPGA設計13.4.1模塊劃分用自頂向下的設計方法,從芯片結(jié)構入手,將要設計的芯片分成幾個子模塊,逐一設計調(diào)試。各個模塊相互獨立,利于錯誤定位和修改。2023/10/22計算機接口技術30外圍邏輯8位數(shù)據(jù)傳輸控制模塊(IOB)1位數(shù)據(jù)傳輸控制模塊(IOB1)8255內(nèi)核8255A芯片2023/10/22計算機接口技術318255A的FPGA總體設計框圖,如圖13.7
所示。圖13.78255AFPGA總體設計框圖2023/10/22計算機接口技術32//實例化語句,信號端口通過位置關聯(lián)T8255AT(reset,nCS,nRD,nWR,A,Din,PAin,PBin,PCin,DEn,PAEn,PBEn,PCEn,Dout,PAout,PBout,PCout);//內(nèi)核模塊
IOBBD(Dout,Din,Den,D);//內(nèi)部數(shù)據(jù)總線的傳輸方向控制模塊
IOBBA(PAout,PAin,PAEn,PA);//A口的傳輸方向控制模塊
IOBBB(PBout,PBin,PBEn,PB);//B口的傳輸方向控制模塊
IOB1BC(PCout,PCin,PCEn,PC);//C口的傳輸方向控制模塊13.4.2頂層主模塊設計●主模塊定義了芯片的外部接口,同時還定義了若干內(nèi)部連線,用于連接內(nèi)核模塊和其他外圍模塊?!癫捎迷Z句,將8255A內(nèi)核設計和外圍邏輯設計組裝起來,形成完整的8255A功能。主要代碼如下:2023/10/22計算機接口技術33
moduleIOB(Din,Dout,InEn,Dbus);input[7:0]Din;inputInEn;//InEn等于0時輸入,等于1時輸出
output[7:0]Dout;
inout[7:0]Dbus;
assignDbus=(InEn)?Din:8'hzz;
assignDout=(InEn)?Dout:Dbus;endmodule13.4.3IOB模塊和IOB1模塊設計●IOB模塊將內(nèi)核的單向數(shù)據(jù)總線綜合設計成雙向的數(shù)據(jù)總線,該模塊8位數(shù)據(jù)一起輸入/出;●IOB1模塊將內(nèi)核口C的單向數(shù)據(jù)總線設計成雙向的數(shù)據(jù)總線,該模塊是按位控制的。IOB模塊代碼如下:2023/10/22計算機接口技術3413.4.48255A內(nèi)核模塊設計●控制模塊●多路數(shù)據(jù)模塊●A口模塊●B口模塊●C口模塊2023/10/22計算機接口技術35●控制模塊●作用:管理內(nèi)部、外部數(shù)據(jù)信息、控制字、狀態(tài)字的傳送過程;解析CPU送來的控制信號?!褫斎耄簭臀恍盘杛eset,片選nCS,端口選擇A[1-0],寫nWR,讀nRD,輸入數(shù)據(jù)Din,Pcin。●輸出:選路信號DoutSelect。
鎖存允許信號PAInLd,PAOutLd,PBInLd,PBOutLd和PCOutLd控制?!窀鱾€口是否接受輸入或輸出:輸入輸出選擇信號Den,PAEn,PBEn和PCEn,輸出給外圍邏輯模塊?!窨刂菩盘朇trlData。2023/10/22計算機接口技術36
●多路數(shù)據(jù)選擇模塊
本質(zhì)上是一個多路選擇器,接受來自控制模塊的選路信號后將選中的數(shù)據(jù)輸出,包括PAin,PAInBuf,PBInBuf,PCin和PC_Status等。
●口A口B輸入/輸出模塊
口A和口B都有一個輸入和輸出模塊、8位的輸入數(shù)據(jù)鎖存器/緩沖器、8位輸出數(shù)據(jù)鎖存器/緩沖。
●C口輸出和控制模塊
可作為普通的數(shù)據(jù)通道,又可作為控制和狀態(tài)信息的通道,負責C口的數(shù)據(jù)輸入輸出以及準確的產(chǎn)生接收和聯(lián)絡信號,在不同的工作方式、IO方向下產(chǎn)生相應的邏輯一位一位控制PCout,PCStatus。
2023/10/22計算機接口技術37各個模塊間的數(shù)據(jù)流,如圖13.8所示。圖13.8內(nèi)核模塊間數(shù)據(jù)流圖2023/10/22計算機接口技術38
assignreset=(nCS)?1'b1:rst;//實例化
CtrlLogicU1(reset,nCS,nRD,nWR,A,Din,PCin[4],PCin[2],PCin[6],PCin[2],DEn,PAEn,PBEn,PCEn,PAInLd,PBInLd,PAOutLd,PBOutLd,PCOutLd,CtrlData,DoutSelect);DoutMuxU2(PAin,PAInBuf,PBin,PBInBuf,PCStatus,DoutSelect,Dout);PCIOU3(reset,nRD,nWR,A,Din,PCin,CtrlData,PCOutLd,PCStatus,Pcout);PAInU4(reset,PAin,PAInLd,PAInBuf);PAOutU5(reset,Din,PAOutLd,PAout);PBInU6(reset,PBin,PBInLd,PBInBuf);PBOutU7(reset,Din,PBOutLd,PBout);內(nèi)核模塊代碼設計兩條內(nèi)部數(shù)據(jù)總線Din和Dout,用于內(nèi)核內(nèi)部8位數(shù)據(jù)的輸入輸出;定義若干內(nèi)部連線用于內(nèi)核各模塊的連接,采用元件例化語句,將圖13.6中各模塊組裝起來形成8255A內(nèi)核完整功能。主要代碼如下:2023/10/22計算機接口技術39always@(resetornCSorAornWRorDin)//控制字寄存器賦值
If(reset)//復位,寄存器全部清零
……
elseif(nCS==1'b0&&A==2'b11&&nWR==1'b0&&Din[7]==1'b1)//寫入方式選擇控制字
begin
ControlFlag=1'b1; ModeA=(Din[6])?2'b10:{Din[6:5]};PAIO=~Din[4];PCUpIO=~Din[3];ModeB=Din[2];PBIO=~Din[1];PCLowIO=~Din[0];endelseif(nCS==1'b0&&A==2'b11&&nWR==1'b0&&Din[7]==1'b0)//按位置位/復位控制字
begin
ControlFlag=1'b0;BitSelect=Din[3:1];PCRS=Din[0];end控制字的判斷:判斷控制字是工作方式選擇字還是對口C的按位置位/復位控制字,以此為根據(jù),決定控制字的分解方式。實現(xiàn)該功能的always語句如下:2023/10/22計算機接口技術4013.4.5控制模塊設計
●C口控制信號CtrlData的產(chǎn)生:將解析出的相關控制字寄存器的值合成賦值給寄存器CtrlData,輸出控制C口模塊。實現(xiàn)該功能的always語句如下:always@(resetorControlFlagorModeAorModeBorPAIOorPBIO)//CtrlData輸出給C口模塊
if(reset)CtrlData=7'b0000000;elseCtrlData={PCRS,ControlFlag,ModeA,ModeB,PAIO,PBIO};2023/10/22計算機接口技術41
●輸入/輸出選擇信號的產(chǎn)生
外圍邏輯輸入/輸出選擇信號DEn:由寫、讀信號決定。相關代碼如下:always@(resetornRDornWR)//DEnif(reset)DEn=1'b0;elseif(!nWR)DEn=1'b0;elseif(!nRD)DEn=1'b1;elseDEn=1'b0;2023/10/22計算機接口技術42●PAEn與PBEn選擇信號的產(chǎn)生PAEn方式0和1時等于控制字中的PAIO方式2時取決于nACK信號PBEn:只取決于控制字中的PBIO2023/10/22計算機接口技術43●PAEn與PBEn選擇信號的產(chǎn)生always@(resetorModeAorPAIOornSTBAornACKA)//PAEnif(reset)PAEn=1'b0;//復位清0
elseif(ModeA!=2'b10)PAEn=PAIO; //A口工作于方式0/1,由輸入輸出方向決定
else //A口工作于方式2,,由nACK等信號決定
begin
if(nSTBA==1'b0)PAEn=1'b0;elseif(nACKA==1'b0)PAEn=1'b1;elsePAEn=PAIO;endalways@(resetorModeBorPBIO)//PBEnif(reset)PBEn=1'b0;//復位清0;
elsePBEn=PBIO;//由輸入輸出方向決定;2023/10/22計算機接口技術44PCEnPCEn是逐位控制的,各位的值與A/B口的工作方式和傳輸方向有關。A/B口工作在方式0:PC作為數(shù)據(jù)口使用,PCEn=PCIOA口為方式1或2時,PC部分引腳作專用的聯(lián)絡信號使用,PCEn的高5位與A口的方式和傳輸方向有關。B口為方式1時,PCEn的低三位與B口的方式和傳輸方向有關。2023/10/22計算機接口技術45●PCEnalways@(resetorModeBorPCLowIO)//PCEn[2-0],低三位由B口決定
if(reset)PCEn[2:0]=3'b000;elseif(ModeB==1'b1)PCEn[2:0]={1'b0,1'b1,1'b1};//B口方式1,固定
elsePCEn[2:0]={3{PCLowIO}};//B口方式0,由輸入輸出方向決定always@(resetorModeAorPCUpIOorPCLowIOorPAIO) //PCEn[7-3],高5位,由A口決定
if(reset)PCEn[7:3]=5'b00000;elseif(ModeA==2'b10)PCEn[7:3]=5'b10101; //A口方式2,固定
elseif(ModeA==2'b01) //A口方式1,與方向有關;
begin
if(PAIO==1'b0)PCEn[7:3]={{2{PCUpIO}},1'b1,1'b0,1'b1}; //A口方式1輸入
elsePCEn[7:3]={1'b1,1'b0,{2{PCUpIO}},1'b1};//A口方式1輸出
end
elsePCEn[7:3]={{4{PCUpIO}},PCLowIO};//A口方式02023/10/22計算機接口技術46always@(resetorAornRD)//PAInLdif(reset)PAInLd=1'b0;//復位清0;
elseif(nCS==1'b0&&A==2'b00&&nRD==1'b0)PAInLd=1'b0;//A口選中,讀
elsePAInLd=1'b1;//其它情況always@(resetorAornRD)//PBInLdif(reset)PBInLd=1'b0;//復位清0
elseif(nCS==1'b0&&A==2'b01&&nRD==1'b0)PBInLd=1'b0;//B口選中,讀
elsePBInLd=1'b1;//其它情況;
●A口和B口的鎖存允許信號產(chǎn)生A/B模塊的鎖存允許信號由地址信號和讀寫信號給出。相關代碼如下:2023/10/22計算機接口技術47
ModeA=0時PC[7-5]用于輸入/輸出數(shù)據(jù)ModeB=0時PC[2-0]用于輸入/輸出數(shù)據(jù)ModeA=0且A口輸入時,PC7和PC6位用于輸入/輸出數(shù)據(jù)ModeA=0且A口輸出時,PC5和PC4位用于輸入/輸出數(shù)據(jù)
●C口的鎖存允許信號產(chǎn)生在方式選擇字控制下,當C口的某些位作為數(shù)據(jù)口時,相應位的PCOutLd=0;做聯(lián)絡口使用時,相應的PCOutLd=1。PC口做數(shù)據(jù)口使用時共有以下四種情況。2023/10/22計算機接口技術48always@(resetorControlFlagorModeAorModeBorDin[3:0]orPAIO)//PCOutLdif(reset)PCOutLd=8'b00000_000;elseif(ControlFlag==0)//置位復位控制字,PC在按位操作中,PCOutLd為0的位被選中
begin
case(Din[3:1])
3'b000:PCOutLd=8'b11111110; 3'b001:PCOutLd=8'b11111101; 3'b010:PCOutLd=8'b11111011; 3'b011:PCOutLd=8'b11110111; 3'b100:PCOutLd=8'b11101111; 3'b101:PCOutLd=8'b11011111; 3'b110:PCOutLd=8'b10111111; 3'b111:PCOutLd=8'b01111111; default:PCOutLd=8'b11111111;endcaseend
相關代碼如下:2023/10/22計算機接口技術49相關代碼如下:else//方式選擇控制字,作數(shù)據(jù)I/O的相應位為0;
if(ModeA==2'b00&&ModeB==1'b0)PCOutLd=8'b00000000;//A口方式0,B口方式0;
elseif(ModeA==2'b00&&ModeB==1'b1)PCOutLd=8'b00000111;//A口方式0,B口方式1;
elseif(ModeA==2‘b01&&PAIO==1’b0&&ModeB==1‘b0)PCOutLd=8’b00111000;
//A方式1輸入,B方式0
elseif(ModeA==2'b01&&PAIO==1'b0&&ModeB==1'b1)PCOutLd=8'b00111111; //A方式1輸入,B方式1
elseif(ModeA==2'b01&&PAIO==1'b1&&ModeB==1'b0)PCOutLd=8'b11001000; //A方式1輸出,B方式0
elseif(ModeA==2'b01&&PAIO==1'b1&&ModeB==1'b1)PCOutLd=8'b11001111; //A方式1輸出,B方式1
elseif(ModeA==2'b10&&ModeB==1'b0)PCOutLd=8'b11111000; //A口方式2,B口方式0
elseif(ModeA==2'b10&&ModeB==1'b1)PCOutLd=8'b11111111; //A口方式2,B口方式1
elsePCOutLd=8'b00000000; //其它情況;2023/10/22計算機接口技術50
always@(resetorAornRDorModeAorModeB)//輸出給Dout_Mux的選路信號
if(reset)Dout_Select=3'b000;elseif(nRD==1'b0)case(A)2'b00://數(shù)據(jù)端口A
if(ModeA==2'b00)Dout_Select=3'b000;//工作于方式0,口A輸入數(shù)據(jù)不鎖存
elseDout_Select=3'b001;//口A輸入數(shù)據(jù)鎖存
2'b01://數(shù)據(jù)端口B
if(ModeB==1'b0)Dout_Select=3'b010;//口B輸入數(shù)據(jù)不鎖存
elseDout_Select=3'b011;//口B輸入數(shù)據(jù)鎖存
2'b10:Dout_Select=3'b100;//數(shù)據(jù)端口C,口C輸入數(shù)據(jù)不鎖存
2'b11:Dout_Select=3'b110;endcaseelseDout_Select=Dout_Select;endmodule
●選路信號DoutSelect的產(chǎn)生多路數(shù)據(jù)選擇模塊的選路信號由地址信號和被選中的端口的當前工作方式有關。相關代碼如下:2023/10/22計算機接口技術5113.4.6C口輸出及控制模塊設計●解析控制信號CtrlData
CtrlData內(nèi)含有置位/復位位、命令字的標志位、A口方式、A口IO、B口方式、B口IO等信息。assignPCRS=CtrlData[6];assignFlag=CtrlData[5];assignModeA=CtrlData[4:3];assignModeB=CtrlData[2];assignPAIO=CtrlData[1];assignPBIO=CtrlData[0];2023/10/22計算機接口技術52A口輸入時,外設通過引腳PC4發(fā)送數(shù)據(jù)選通信號STBB口輸入時,外設通過引腳PC2發(fā)送數(shù)據(jù)選通信號STBA口輸出時,外設通過引腳PC6發(fā)送響應信號ACKB口輸出時,外設通過引腳PC2發(fā)送響應信號ACK●方式1/2的選通和響應信號assignnSTBA=PCIn[4];assignnSTBB=PCIn[2];assignnACKA=PCIn[6];assignnACKB=PCIn[2];2023/10/22計算機接口技術53口C是數(shù)據(jù)口還是控制口口C作聯(lián)絡口時A/B的模式和IO例:
PCout[1]的處理描述如下:if(PC1是數(shù)據(jù)口)
PCout[1]為輸出口,將內(nèi)部總線數(shù)據(jù)Din[1]輸出elseif(B為輸入口)
PCout[1]為B口的輸入緩沖器滿信號IBFBelse PCout[1]為B口的輸出緩沖器滿信nOBFB
●C口的輸出數(shù)據(jù)PCOut2023/10/22計算機接口技術54always@(resetorFlagorPCOutLdorPCOutD)//PCOutif(reset)PCOut=8'b00000000;//復位清0;
elseif(Flag==1'b0)//置位/復位操作;
case(PCOutLd)8'b11111110:PCOut={PCOut[7:1],PCRS};8'b11111101:PCOut={PCOut[7:2],PCRS,PCOut[0]};8'b11111011:PCOut={PCOut[7:3],PCRS,PCOut[1:0]};8'b11110111:PCOut={PCOut[7:4],PCRS,PCOut[2:0]};8'b11101111:PCOut={PCOut[7:5],PCRS,PCOut[3:0]};8'b11011111:PCOut={PCOut[7:6],PCRS,PCOut[4:0]};8'b10111111:PCOut={PCOut[7],PCRS,PCOut[5:0]};8'b01111111:PCOut={PCRS,PCOut[6:0]};default:PCOut=8'b11111111;endcaseelsePCOut=PCOutD; //高位到低位依次處理C口輸出數(shù)據(jù)
always@(resetorPCOutLd[7]ornOBFAorDin[7])//PCOutD[7]if(PCOutLd[7]==1'b0)PCOutD[7]=Din[7];elsePCOutD[7]=nOBFA;always@(resetorPCOutLd[6]orDin[6])//PCOutD[6]if(PCOutLd[6]==1'b0)PCOutD[6]=Din[6];elsePCOutD[6]=PCOut[6];相關代碼如下:(PCOut需要按位處理,下面給出
6、7位的代碼)2023/10/22計算機接口技術55口C是數(shù)據(jù)口還是控制口口C作聯(lián)絡口時A/B的模式和IO例:
PCStatus[4]的處理描述如下:●C口的輸出數(shù)據(jù)PCOutCif(PC4是數(shù)據(jù)口)
PCStatus[4]為輸入口,將PCIn[4]讀入elseif(A口為方式1輸出)
PCStatus[4]為I/O,將PCIn[4]讀入elseif(A口為方式1輸入或為方式2)
PCStatus[4]為A口輸入中斷允許信號INTEAInelse鎖存原值;2023/10/22計算機接口技術56always@(resetorPCStatusBuf)//PCStatusif(reset)PCStatus=8'b00000000;elsePCStatus=PCStatusBuf; //從高位到低位依次處理口C狀態(tài)字PCStatusalways@(PCOutLd[7]orPCIn[7]orModeAorPAIOorPCOut[7]) //PCStatusBuf[7];if(PCOutLd[7]==1'b0)PCStatusBuf[7]=PCIn[7]elseif(ModeA==2'b01&&PAIO==1'b0)PCStatusBuf[7]=PCIn[7];elseif((ModeA==2'b01&&PAIO==1'b1)||ModeA==2'b10)PCStatusBuf[7]=PCOut[7];elsePCStatusBuf[7]=PCStatus[7];●C口的輸出數(shù)據(jù)PCOutC相關代碼如下:(PCStatus需要按位處理,下面給出第7位的代碼)2023/10/22計算機接口技術57
圖13.9A口方式1輸入時序狀態(tài)機●產(chǎn)生方式1/2的聯(lián)絡信號當口A或口B工作于方式1或2時,8255還需要
產(chǎn)生一些聯(lián)絡信號。下面以口A工作于方式1輸入時產(chǎn)生的緩沖器滿信號IBFA為例說明,圖13.9是方式1輸入時序圖。2023/10/22計算機接口技術58always@(resetorModeAorPAIOornSTBAornRD)//IBFA:由nSTBA信號置位,由nRD上升沿復位;
if(reset)IBFAstate=2'd0;elsecase(IBFAstate)2'd0:if(ModeA!=2'b00&&PAIO==1'b0&&nSTBA==1'b0)IBFAstate=2'd1;elseIBFAstate=2'd0;2'd1:if(nRD==1'b0&&A==2'b00)IBFAstate=2'd2;elseIBFAstate=2'd1;2'd2:if(nRD==1'b1)IBFAstate=2'd0;elseIBFAstate=2'd2;default:IBFAstate=2'd0;endcasealways@(IBFAstate)if(IBFAstate==2'd1||IBFAstate==2'd2)IBFA=1'b1;elseIBFA=1'b0;●產(chǎn)生方式1/2的聯(lián)絡信號IBFA信號的產(chǎn)生用了2個always塊,一個完成狀態(tài)轉(zhuǎn)移寄存,另一個完成狀態(tài)譯碼和輸出,代碼如下2023/10/22計算機接口技術59
modulePAIn(reset,PAIn,PAInLd,PAInBuf);inputreset;input[7:0]PAIn;//口A輸入信號
inputPAInLd;//口A輸入使能信號
output[7:0]PAInBuf;//口A
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學班主任2022年度個人工作計劃(5篇)
- 叉車出租行業(yè)供需趨勢及投資風險研究報告
- 中國汽車半導體行業(yè)市場前瞻與投資戰(zhàn)略規(guī)劃分析報告
- 《魯濱遜漂流記》學生讀后感
- 寫給女朋友的道歉信(匯編15篇)
- 關于試用期工作總結(jié)模板匯編七篇
- 環(huán)境演講稿范文集合6篇
- 高中教師個人工作計劃3篇集錦
- 房屋中介買賣合同
- 高中語文教學反思15篇
- 湖南2025年湖南機電職業(yè)技術學院合同制教師招聘31人歷年參考題庫(頻考版)含答案解析
- 黑龍江省哈爾濱市第六中學2025屆高考數(shù)學三模試卷含解析
- 【MOOC】數(shù)字邏輯設計及應用-電子科技大學 中國大學慕課MOOC答案
- 傷口治療師進修匯報
- 研學活動協(xié)議書合同范本
- ISBAR輔助工具在交班中應用
- AIGC行業(yè)報告:國內(nèi)外大模型和AI應用梳理
- 湖北省十堰市2023-2024學年高二上學期期末調(diào)研考試 地理 含答案
- 寒假假前安全教育課件
- 專題03 一次函數(shù)圖像和性質(zhì)(十大類型)(題型專練)(原卷版)-A4
- 焊工(高級)職業(yè)技能鑒定考試題及答案(新版)
評論
0/150
提交評論