HDL建模技巧低級(jí)建模仿順序操作midd_第1頁
HDL建模技巧低級(jí)建模仿順序操作midd_第2頁
HDL建模技巧低級(jí)建模仿順序操作midd_第3頁
HDL建模技巧低級(jí)建模仿順序操作midd_第4頁
HDL建模技巧低級(jí)建模仿順序操作midd_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

HDL建模技巧低檔建模仿次序操作HDL閱讀:22評(píng)論:0作者:.COM缺氧發(fā)表于-06-0613:38原文鏈接"尚有一種問題,就是編程風(fēng)格的問題。內(nèi)容能夠較好的幫到初學(xué)者,從另一種角度去認(rèn)識(shí)VerilogHDL建模技巧。還記得自己初次接觸HDLHDL每一本筆記的開始都有一種初衷:在早期練習(xí)第1voidvoidFlashing_To_Right(){.}void任務(wù)都非常的簡(jiǎn)樸。幾乎是入門級(jí)的實(shí)驗(yàn),但是將這些實(shí)驗(yàn)帶入到V(二)運(yùn)用VmoduleFlashing(CLK,RSTn,Data_Out);inputCLK,RSTn;output[7:0]Data_Out;reg[7:0]Counter;always@(posedgeCLKornegedgeRSTn)if(~RSTn)Counter=8'd0;elseCounter=Counter+1'b1;reg[7:0]i;always@(posedgeCLKornegedgeRSTn)if(~RSTn)i=8'd0;elseif(Counter==200)i=i+1'b1;elseif(i==8)i=8'd0reg[7:0]rData;always@(posedgeCLKorRSTn)if(~RSTn)rData=8'b0000_0001;elseif(i8)rData={rData[6:0],1'b0};elseif(i==8)rData=8'b0000_0001;assign相比之下,Cinti;for(i=0;i3;i++)Flashing_To_Right();for(i=0;ii30;i++)Flashing_To_Right();給自己5分鐘的思考,想想我究竟要體現(xiàn)什么?第2//獨(dú)立模塊always@(posedgeCLKornegedgecase(cState)"清掃":if(清掃完畢)nState="洗廁所"else"發(fā)號(hào)清掃命令""洗廁所":if(洗廁所完畢)nState="跑腿"else"發(fā)送洗廁所命令""跑腿":./*///效模塊1-清掃工作always@(posedgeCLKornegedgeRSTn).elsecase(cState)IDLE:if(到掃命令)nSate="清掃nState=IDLE;"清掃":"執(zhí)行清掃";"清掃完畢后報(bào)告";"待命低檔功效模塊2-洗廁所工作always@(posedgeCLKornegedgeRSTn).elsecase(cState)IDLE:if(洗廁所命令)nSate="洗廁所nState=IDLE;"洗廁所":"執(zhí)行洗廁所";"洗廁所完畢后報(bào)告";"待命./*///低檔功效模塊3-跑腿工作always@(posedgeCLKornegedgeRSTn).else你嘗試想象一下:如果有多個(gè)打工仔,散落在不同的地方。當(dāng)老板要發(fā)號(hào)的時(shí)然而在"低檔建模"的設(shè)計(jì)中,"模塊化的組織"更有"層次感"。為了使"上一層組織起來。即使感覺上會(huì)有一種"雜亂感",但是實(shí)際運(yùn)用起來,真的非常方便。第3Template(CLK,RSTn,.,//"n個(gè)輸入輸出",Start_Sig,Done_Sig);inputCLK;inputRSTn;inputStart_Sig;inputDone_Sig;.//"n個(gè)輸出輸入聲明"/*/reg[3:0]i;regisDone;always@(posedgeCLKornegedgeRSTn)if(~RSTn)begini=4'd0;isDone=1'b0;.//任何復(fù)位的動(dòng)作endelsen+1,4'bn+2://最后兩個(gè)環(huán)節(jié)用來產(chǎn)生完畢信號(hào)Done;Done;//產(chǎn)生Done信號(hào)if(isDone==1)beginisDone=1'b0;i=4'd0;endelsebeginisDone=1'b1;i=i+1'b1;endendtask/*/assign最后兩個(gè)ii等于0i=i+1;除此之外該模板還引入了reg[3:0]i;regisDone;reg[7:0]rData;always@(posedgeCLKornegedgeRSTn)if(~RSTn)begini=4'd0isDone=1'b0;rData=8'd0;endelsecase(i)4'd0:i=i+1;.endcasereg[3:0]i;regisDone;reg[7:0]rData;always@(posedgeCLKornegedgeRSTn)if(~RSTn)begini=4'd0;isDone=1'b0;rData=8'd0;endelsecase(i)4'd0:Next;.endcase/*/taski=i+1'b1;endtask其實(shí)這個(gè)問題我也考慮了很久,由于是"仿次序操作"的關(guān)系,故人類對(duì)第4建立2moduleflashing_to_right(CLK,RSTn,Start_Sig,Done_Sig,Q);inputCLK;inputRSTn;inputStart_Sig;outputDone_Sig;output[7:0]Q;/*/parameterDELAY=8'd200;/*/reg[7:0]Counter;always@(posedgeCLKornegedgeRSTn)if(~RSTn)Counter=8'd0;elseCounter=8'd0;/*/reg[3:0]i;reg[7:0]rData;regisDone;always@(posedgeCLKornegedgeRSTn)if(~RSTn)begini=4'd0;isDone=1'b0;rData=8'dx;endelseif(Start_Sig)case(i)4'd0:beginrData=8'dx;i=i+1'b1;endrData=(8'h80i-1);4'd9:begini=4'd10;isDone=1'b1;end4'd10:begini=4'd0;isDone=1'b0;endendcase/*/assignDone_Sig=isDone;assignQ=(i0&&i9)?rData:8'dx;/*/endmodulemoduleflashing_to_left(CLK,RSTn,Start_Sig,Done_Sig,Q);inputCLK;inputRSTn;inputStart_Sig;outputDone_Sig;output[7:0]Q;/*/parameterDELAY=8'd200;/*/reg[7:0]Counter;always@(posedgeCLKornegedgeRSTn)if(~RSTn)Counter=8'd0;elseif(Counter==DELAY)Counter=8'd0;elseCounter=8'd0;/*/reg[3:0]i;reg[7:0]rData;regisDone;always@(posedgeCLKornegedgeRSTn)if(~RSTn)begini=4'd0;isDone=1'b0;rData=8'dx;endelseif(Start_Sig)case(i)4'd0:beginrData=8'dx;i=i+1'b1;endrData=(8'h01i-1);4'd9:begini=4'd10;isDone=1'b1;end4'd10:begini=4'd0;isDone=1'b0;endendcase/*/assignDone_Sig=isDone;assignQ=(i0&&i在51行到53行之間,是移位操作,每一次的移位動(dòng)作都需要200個(gè)時(shí)鐘周期。移位操作一共有8個(gè)環(huán)節(jié)。最后該模塊產(chǎn)生一種"高脈沖"以表達(dá)"完畢",然而i復(fù)位為0。如上的示意圖。當(dāng)我們要封裝2會(huì)iinputCLK;inputRSTn;inputRight_Start_Sig;g,Left_Done_Sig,Q);inputLeft_Start_Sig;outputRight_Done_Sig;outputLeft_Done_Sig;U1(.CLK(CLK),//input-fromtop.RSTn(RSTn),//input-fromtop.Done_Sig(Right_Done_Sig),//output-totop.Q(Q_U1)//output-towire);/*/wire[7:0]Q_U2;flashing_to_leftU2(.CLK(CLK),//input-fromtop.RSTn(RSTn),//input-fromtop.Start_Sig(Left_Start_Sig),//input-fromtop.Done_Sig(Left_Done_Sig),//output-totop.Q(Q_U2)//output-toelserQ=3'dx;assignQ=rQ;/*/endmodule為assignQ=Right_Start_Sig?Q_U1:Q_U2;即使如上的寫法和,第45到rQ=Q_U2;default:rQ=3'bxxx;endcaseQ=rQ;即使該寫法的解讀性很高效果也同樣,但是卻很浪費(fèi)資源。生成的RTL:if(Left_Start_Sig)rQ=Q_U2;elserQ=3'dx;assignalways@(*)"always@(*)"這樣的寫法在Verilog中已經(jīng)被支持(仿佛是這個(gè)版本)。在敏感包中的"*",if(Right_Start_Sig)rQ=Q_U1;elseif(Left_Start_Sig)rQ=Q_U2;else4."次,然后自左向右循環(huán)30次_Sig,Right_Done_Sig,Left_Done_Sig);inputCLK;inputRSTn;inputStart_Sig;inputRight_Done_Sig;inputLeft_Done_Sig;outputDone_Sig;outputRight_Start_Sig;outputLeft_Start_Sig;/*/reg[7:0]i;regisDone;regisLeft;regisRight;always@(posedgeCLKornegedgeRSTn)if(~RSTn)beginisDone=1'b0;i=8'd0;isRight=1'b0;isLeft=1'b0;endFlash_Right;if(Right_Done_Sig)begini=i+1'b1;isRight=1'b0;endelseisRight=1'b1;endtask/*/taskFlash_Left;if(Left_Done_Sig)begini=i+1'b1;isLeft=1'b0;endelseisLeft=1'b1;endtask/*/taskDone;if(isDone==1)beginisDone=1'b0;i=8'b0;endelsebeginisDone=1'b1;i=i+1'b1;endendtask/*/assignDone_Sig=isDone;assignflashing_to_right/left在40行,第if(Right_Done_Sig)begini=i+1'b1;isRight=1'b0;endif(isDone==1)beginisDone=1'b0;i=8'b0;endelsebeginmoduledone(CLK,RSTn,Start_Sig,Done_Sig,Q,Right_Done,Left_Done,//用于觀察Right_Start,Left_Start//用于觀察);inputCLK;inputRSTn;inputStart_Sig;outputDone_Sig;outputLeft_Done;outputRight_Done;outputRight_Start;outputLeft_Start;output[7:0]Q;/*/wireRight_Start_Sig;wireLeft_Start_Sig;wireRight_Done_Sig;wireU3(.CLK(CLK),.RSTn(RSTn),.Start_Sig(Start_Sig),//infromtop.Done_Sig(Done_Sig),//outtotop.Right_Start_Sig(Right_Start_Sig),//outtoU2.Left_Start_Sig(Left_Start_Sig),//outtoU2.Right_Done_Sig(Right_Done_Sig),//infromU2.Left_Done_Sig(Left_Done_Sig)//infromU2);/*/flashing_moduleU4(.CLK(CLK),.RSTn(RSTn),.Right_Start_Sig(Right_Start_Sig),//infromU1.Left_Start_Sig(Left_Start_Sig),//infromU1.Right_Done_Sig(Right_Done_Sig),//outtoU1.Left_Done_Sig(Left_Done_Sig),//outtoU1.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論