紅芯fpga參考veriloghdl精粹_第1頁
紅芯fpga參考veriloghdl精粹_第2頁
紅芯fpga參考veriloghdl精粹_第3頁
紅芯fpga參考veriloghdl精粹_第4頁
紅芯fpga參考veriloghdl精粹_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2006-12-1220:01:00|By:0推FPGAI/O也能掌握在FPGA上開發硬件的技能。本文舉例說明了一個使用FPGA存儲器映射I/O接口通過軟件完成對該邏輯塊的控制。入式軟件設計的通用語言。在硬件設計方面,VerilogVHDL的人也很多)。VerilogC設計者無需太多的硬件知識就可以利用FPGA供應商提供的工具輕松地開發出可編程邏輯嵌入式系統。例如,AlteraSOPCBuilder要地描述如何用Verilog設計硬件。清單1給出了PWMC代碼。1:完全用軟件實現的位脈沖PWMpwmTask(uint32_tpulse_width,uint32_t{uint32_ttime_on=pulse_width;uint32_ttime_off=period-pulse_width;while(1){}}輸出變為低電平,并等待time_off寄存器的輸入“in”在時鐘的上升沿被賦值到輸出“out”,直到clr_n號的下降沿到來(此時輸出將被賦值為0)。modulesimple_register(in,out,clr_n,clk,input[7:0]output[7:0]reg[7:0]always@(posedgeclkornegedgeclr_n)if(clr_n==0)//couldalsobewrittenif(!clr_n)assigna=!out[0];是相同的(/*...*/和//都是熟悉的),運算符“==”也用來測試相等性。Verilog的if..then..else語法與CVerilog一個Verilogmodule,緊跟其后的是模塊名稱和端口列表,Verilogreg和wire。它們具被聲明為wirereg動。wirereg程塊(后面會談到)中賦值,而wire器源于alwaysawire(continuousassignment)語句中賦值,而reg類型的out信號只能在always塊中賦值。括號里的表達式組被稱為敏感列表,格式是:(表達式or表達式…)只要敏感列表中的任何一個表達式值為真,always塊中的代碼就會被執行。Verilogposedgenegedge。這二個關信號發生時,always塊內部的語句就會被執行。更常見些)。增加negedgeclr_n會使寄存器在clr_n信號的下降沿復位。但并不是所有的敏感列表都會包含關鍵字posedge或negedge,因此在實際硬件中并alwaysclr_n讀者可能已經注意到,alwaysassign編寫存儲器映射硬件模塊的首要任務是以軟件方式決定寄存器映射圖。在PWMperiod1PWM為了確定輸出信號,硬件可簡單地通過將periodpulse_width了。清單3給出了一個實現例子。modulepwm(clk,write_data,cs,write_n,addr,clr_n,read_data,input[31:0]output[31:0]cs;write_n;addr;clr_n;regregreg[31:0]reg[31:0]counter;off;period_en,pulse_width_en;periodpulse_widthalways@(posedgeclkornegedgeclr_n)if(clr_n==0)period<=32'hpulse_width<=32'h00000000;if(period_en)if(pulse_width_en)//period和pulse_width寄存器的讀訪問always@(addrorperiodorpulse_width)if(addr==0)always@(posedgeclkornegedgeclr_n)if(clr_n==0)if(counter>=period-1)always@(posedgeclkornegedgeclr_n)if(clr_n==0)if(counter>=pulse_width)off<=1;if(counter==0)assignperiod_en=cs&!write_n&!addr;assignpulse_width_en=cs&!write_n&addr;assignpwm_out=!off;增加字節使能信號邏輯。用Verilogalways塊中已賦過值的所有信號都被聲明為reg類型。聲明為wire類型的信號是輯)的信號的行為。這是使代碼具有可讀性并能減少錯誤的Verilog代碼編寫風格。所有的always塊都有復位邏輯,當clr_n信號被證實(設為0)時,復位邏第一個always主寫入使能信號和芯片選擇信號同時被證實時,periodpulse_width的寫入使能信號就被證實,此時periodpulse_width0和1。的基本地址處,pulse_width寄存器在后面32位字地址處。能,它連續計數到period0,然后重新開始計數。第四個alwayspulse_widthpulse_width值時,PWM輸出保持高電平,否則設為低電平。個塊)中,代碼的最后行將off賦于它本身。最初看來好象比較奇怪,但如果沒每次信號會在if語句中賦值,在相應的else語句中也賦值。現在硬件完成了,可以利用寄存器映射圖中的寄存器通過軟件對PWM讀者可以用一個簡單的帶指針的數據結構連接PWM中的寄存器。typedefvolatile{uint32_tperiod;uint32_tpulse_width;}例如,可以將PWM連接到LED。先初始化一個名為pLED、類型為PWM*的變量,將其指向PWM圍電路進行測試的,可以利用前文所述的CAlt

溫馨提示

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

評論

0/150

提交評論