www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > EDA > 電子設(shè)計(jì)自動(dòng)化
[導(dǎo)讀]我們使用VHDL語(yǔ)言,根據(jù)FPGA管腳與數(shù)碼管和按鍵管腳的連接,通過(guò)一系列的語(yǔ)句控制管腳電平的高低,從而讓FPGA實(shí)現(xiàn)數(shù)碼管顯示功能??梢?jiàn),對(duì)于比較簡(jiǎn)單的功能實(shí)現(xiàn),可以像這個(gè)例子中那樣,直接控制最底層資源,甚至對(duì)

我們使用VHDL語(yǔ)言,根據(jù)FPGA管腳與數(shù)碼管和按鍵管腳的連接,通過(guò)一系列的語(yǔ)句控制管腳電平的高低,從而讓FPGA實(shí)現(xiàn)數(shù)碼管顯示功能??梢?jiàn),對(duì)于比較簡(jiǎn)單的功能實(shí)現(xiàn),可以像這個(gè)例子中那樣,直接控制最底層資源,甚至對(duì)每個(gè)管腳在每個(gè)時(shí)刻的電平輸出了如指掌。
    但是,如果設(shè)計(jì)稍顯復(fù)雜,那么對(duì)底層細(xì)節(jié)的過(guò)多關(guān)注就會(huì)成為一種累贅。
    試想我們平時(shí)在電腦上編寫(xiě)C程序,比如在顯示器上輸出一行字,我們只用一句printf()即可完成,至于打印命令怎么傳到顯示芯片上,哪個(gè)芯片管腳怎么 變化,又怎么傳到顯示器上輸出,諸如此類(lèi)涉及底層硬件的問(wèn)題,我們沒(méi)必要關(guān)注太多。于是,我們把用printf()這類(lèi)高級(jí)語(yǔ)言描述設(shè)計(jì)邏輯的工作稱(chēng)為軟 件設(shè)計(jì)。顯然,軟件只是一種抽象的看不見(jiàn)摸不著的東西,它的結(jié)構(gòu)接近于人類(lèi)思維邏輯。無(wú)論軟件再怎樣構(gòu)思精妙,只有在硬件上才能體現(xiàn)出實(shí)際效果。
    做計(jì)算機(jī)開(kāi)發(fā)應(yīng)用程序的時(shí)候,硬件是現(xiàn)成的,軟硬件之間的橋梁早就由操作系統(tǒng)給你搭好了,我們只需專(zhuān)心完成軟件的構(gòu)思和設(shè)計(jì)就OK。
    顯而易見(jiàn),軟硬件的分工會(huì)給電子設(shè)計(jì)帶來(lái)極大的方便,自然有人把這種分工方式引進(jìn)FPGA設(shè)計(jì)領(lǐng)域,琢磨著怎么在小小的FPGA上也搞個(gè)軟硬件協(xié)同設(shè)計(jì),負(fù)責(zé)硬件設(shè)計(jì)的和負(fù)責(zé)軟件的各司其職,最后pia一整合,效率倍增。
    來(lái)看看nios是怎么做的。拿出DE2開(kāi)發(fā)板,上面很多外設(shè)接口和與之連接的芯片,那是硬件,中間有一塊大的CycloneII芯片,里面是空的,等著我 們編寫(xiě)程序下載到里面運(yùn)行,前篇文章我們用最原始的方法寫(xiě)了個(gè)數(shù)碼管控制器,這次我們換種方法,同樣是數(shù)碼管控制器,用軟硬件協(xié)同設(shè)計(jì)來(lái)完成。
    跟計(jì)算機(jī)對(duì)比,硬件我們有了,軟件就用C語(yǔ)言來(lái)寫(xiě),但是nios系統(tǒng)可沒(méi)提供WinXP,也就是說(shuō)軟件和硬件之間的那座橋還得自己解決。
  
    看上圖,這座橋分為3個(gè)層次:硬件控制層,設(shè)備驅(qū)動(dòng)層,硬件抽象層(簡(jiǎn)稱(chēng)HAL)。既然是軟硬件的過(guò)渡部分,那么這3層的設(shè)計(jì)需要對(duì)硬件和軟件都有一定程度的了解,姑且稱(chēng)之為“軟硬件混雜設(shè)計(jì)”吧。
    每一層所要完成的任務(wù),就是整合和簡(jiǎn)化硬件操作細(xì)節(jié),整合,再整合,使其一目了然。
 
 
<1> 硬件控制層
    與硬件直接打交道的是硬件控制層。
    上面提到,搭“橋”的目的是讓軟件設(shè)計(jì)人員可以完全忽略硬件操作細(xì)節(jié),因此,我們希望所有的硬件細(xì)節(jié)都能在這層解決,并向設(shè)備驅(qū)動(dòng)層提供整齊的“接口”。之前的例子可看作硬件控制器的雛形,但還缺少與設(shè)備驅(qū)動(dòng)層的接口。
    何為“整齊”呢?比如說(shuō),設(shè)計(jì)數(shù)碼管控制器,我想讓它顯示數(shù)字“5”,最好的方法是,我將數(shù)據(jù)“5”和表示“顯示”的命令從設(shè)備驅(qū)動(dòng)層傳給硬件控制層,直 接告訴它:我要“數(shù)碼管”“顯示”“5”。至于要控制哪個(gè)管腳電平高低才能顯示“5”,全由硬件控制層負(fù)責(zé)。
    類(lèi)似這樣分工合作的例子在日常生活中屢見(jiàn)不鮮。比如說(shuō),郵局要將一封信送給家住A小區(qū)的張三,郵遞員把信放入A小區(qū)的信箱,小區(qū)物業(yè)再去確認(rèn)張三的具體住處,把信最終送到張三手中。
    類(lèi)比可見(jiàn),郵局相當(dāng)于設(shè)備驅(qū)動(dòng),物業(yè)相當(dāng)于硬件管理器,張三則是具體的硬件,郵局和物業(yè)之間的接口是物業(yè)提供的信箱,設(shè)備驅(qū)動(dòng)和硬件管理層之間的接口,我們稱(chēng)之為“寄存器”,同樣由硬件管理層提供,“寄存器”是兩層之間得以明確分工和相互聯(lián)系的關(guān)鍵。
    設(shè)備驅(qū)動(dòng)開(kāi)發(fā)人員眼中的硬件就是一組寄存器的抽象,通過(guò)讀寫(xiě)寄存器間接控制硬件行為。
    那么,在數(shù)碼管控制器里加入一個(gè)數(shù)據(jù)寄存器和一個(gè)命令寄存器:
  
       data_reg存儲(chǔ)待顯示的數(shù)據(jù),cmd_reg為‘1’時(shí)顯示,為‘0’時(shí)清空。
 
 
<2> Avalon總線(xiàn)
       你可能會(huì)說(shuō),這有什么?在每個(gè)硬件管理器和設(shè)備驅(qū)動(dòng)之間都建立一個(gè)通道唄。這是最直接的辦法,但顯然不是最好的辦法。試想,城市為什么要建高速公路呢?多 修幾十根羊腸小道不也一樣能跑車(chē)嗎?有人回答:為了收養(yǎng)路費(fèi)唄。$%@&&! 小路上開(kāi)車(chē),速度慢且不說(shuō),管理協(xié)調(diào)是個(gè)大問(wèn)題,是一條大公路容易管理,還是幾十根羊腸容易理順?
     好了,回到正題,nios系統(tǒng)需要一條“高速公路”,稱(chēng)為“總線(xiàn)”,“總線(xiàn)仲裁器”則行使“交通管理局”的角色,控制數(shù)據(jù)的進(jìn)出,并為每個(gè)硬件提供一個(gè)進(jìn) 出“高速公路”的接口,用“地址”來(lái)標(biāo)識(shí)這個(gè)接口的位置。nios采用的是Avalon總線(xiàn),它有著一套接口規(guī)范:
       同步時(shí)鐘 clk
       片選信號(hào) chipselect
       地址 address
       讀請(qǐng)求 read
       讀傳輸 readdata
       寫(xiě)請(qǐng)求 write
       寫(xiě)傳輸 writedata
       這些是比較重要的接口信號(hào),其它的不一一列舉了。硬件控制器要接入總線(xiàn),必須遵循接口規(guī)范,就像高速公路出口必須擺個(gè)收費(fèi)站一樣。
  
       那么在數(shù)碼管控制器里加入Avalon總線(xiàn)信號(hào):
  
    既然加入了兩個(gè)寄存器和avalon信號(hào),就需要對(duì)硬件邏輯進(jìn)行必要改動(dòng),大致過(guò)程是,當(dāng)chipselect和write有效時(shí),將 write_data賦給address對(duì)應(yīng)的寄存器;當(dāng)chipselect和write有效時(shí),將address對(duì)應(yīng)寄存器的值賦給 read_data。另外,根據(jù)這兩個(gè)寄存器的內(nèi)容決定數(shù)碼管輸出信號(hào)oSEG0。代碼不貼出來(lái)了,具體見(jiàn)工程壓縮包。

 <3> 設(shè)備驅(qū)動(dòng)程序
    其實(shí),“總線(xiàn)仲裁器”也可看作一種硬件控制器,只不過(guò)它管的不是具體的硬件,而是負(fù)責(zé)數(shù)據(jù)的傳輸。那么它也有自己的設(shè)備驅(qū)動(dòng),封裝了總線(xiàn)操作的細(xì)節(jié)。既然總線(xiàn)是現(xiàn)成的,我們秉承“拿來(lái)主義”的原則,甭管它怎么實(shí)現(xiàn)的,會(huì)用就行。
    例如,數(shù)碼管設(shè)備驅(qū)動(dòng)要把數(shù)據(jù)“5”和“顯示”命令傳給數(shù)碼管控制器,設(shè)計(jì)兩個(gè)函數(shù),由于數(shù)據(jù)和命令的傳遞必須經(jīng)過(guò)總線(xiàn),那么需調(diào)用總線(xiàn)驅(qū)動(dòng)函數(shù)IOWR(基地址, 偏移量, 數(shù)據(jù)),另外,讀取寄存器用到IORD(基地址, 偏移量),這兩個(gè)函數(shù)在<io.h>里。
       <io.h>的路徑是"..alterakits ios2_60componentsaltera_nios2HALinc"。
       至此,“橋”搭完。
  
    函數(shù)功能從字面上很好理解。剛才定義兩個(gè)寄存器時(shí),data_reg在前面,所以偏移量是0,cmd_reg在后面,偏移量是1?!痢羅REG_MSK稱(chēng) 為掩碼,avalon總線(xiàn)數(shù)據(jù)接口共32位,但我們?cè)O(shè)計(jì)的data_reg位寬是3,cmd_reg位寬為1,掩碼的作用在于告知寄存器寬度,知道就行, 實(shí)際上用不著?!痢羅REG_OFST是寄存器內(nèi)的偏移量,這里同樣用不著,先寫(xiě)上吧。
    OK,我們的數(shù)碼管設(shè)備驅(qū)動(dòng)文件正式出爐了,看看是不是簡(jiǎn)潔明了很多?。?/p>

 <4> 硬件抽象層(HAL)
    設(shè)備驅(qū)動(dòng)程序封裝的僅僅是對(duì)某個(gè)寄存器的一次讀寫(xiě)操作,功能單一,需要在硬件抽象層再做一次封裝。
    直接將這些函數(shù)列出來(lái),一目了然,不作多余的解釋了。
  
    至此,“橋”搭完。
  接下來(lái)在把我們的“數(shù)碼管控制器”加入sopc builder系統(tǒng)中。
    現(xiàn)在幾乎所有講nios的書(shū)都會(huì)提及自定義用戶(hù)外設(shè),而且用的都是altera官方提供的例子PWM,本文的“數(shù)碼管控制器”就是照著它依葫蘆畫(huà)瓢改過(guò)來(lái) 的,呵呵,慚愧慚愧,之所以想改它,一是因?yàn)樗玫氖莢erilog而不是VHDL,而大多數(shù)人先接觸卻是VHDL;二來(lái)PWM的顯示效果似乎不太明顯, 改成數(shù)碼管顯示相對(duì)比較有成就感;第三,PWM的邏輯稍微有一點(diǎn)點(diǎn)復(fù)雜,我們的重點(diǎn)在于說(shuō)明怎樣自定義外設(shè),當(dāng)然例子越簡(jiǎn)單越好。
    既然是照著PWM原樣改的,所以本文工程的結(jié)構(gòu)與之保持高度一致,將其加入sopc builder的步驟也差不多,這里我就不再碼字了,各位照著書(shū)上做吧:
    《SOPC嵌入式系統(tǒng)基礎(chǔ)教程(周立功等著)》第8章……
    再接下來(lái),建立一個(gè)包含“數(shù)碼管控制器”的nios系統(tǒng),并編寫(xiě)應(yīng)用程序,實(shí)現(xiàn)從0到9計(jì)數(shù)。
    貼張官方的nios設(shè)計(jì)流程圖,看起來(lái)很漂亮是吧,不愧是altera的東西,大而全而不亂。
  
       先說(shuō)最中間的"SOPC Builder",它的任務(wù)是建立一個(gè)“以Nios CPU為核心,以Avalon總線(xiàn)為紐帶,將各種硬件設(shè)備連接起來(lái)”的nios系統(tǒng);這個(gè)系統(tǒng)要在FPGA中運(yùn)行,所以必須掛靠一個(gè)Quartus II工程,用左邊的Quartus II進(jìn)行分配引腳等等工作,生成硬件系統(tǒng);接著,右邊的Nios II IDE就可以在這個(gè)硬件系統(tǒng)上設(shè)計(jì)應(yīng)用程序了;最后將硬件系統(tǒng)和軟件程序分別下載到FPGA芯片上,大功告成。
       下面step by step
       <1> Quartus II 新建一個(gè)工程名,工程名"DE2_SEG7"。
       <2> "Tool" → "SOPC Builder" 打開(kāi)SOPC Builder。
       <3> "System Name": nios2_system   選VHDL。
       一個(gè)包含“數(shù)碼管控制器”的最小系統(tǒng)至少由3部分組成:CPU必不可少,RAM存儲(chǔ)代碼,還有剛才設(shè)計(jì)的"seg7_avalon"。
       <4> 加入"Nios II Processor",選"Nios II/e",精簡(jiǎn)型夠用了。
       <5> 加入"On-Chip Memory",類(lèi)型選"RAM",位寬默認(rèn)"32 bits","Total Memory"選"48Kbytes",等會(huì)兒軟件要占用四十多K空間。
       <6> 加入"seg7_avalon"。
       <7> 將這三個(gè)組件的名稱(chēng)改好看點(diǎn),然后設(shè)定RAM的基地址為"0x00000000",再右鍵鎖定基地址,如圖:
  
       為什么要鎖定RAM的基地址為0呢?點(diǎn)選第二個(gè)選項(xiàng)卡,可以看到"Reset Address"對(duì)應(yīng)著RAM,系統(tǒng)的復(fù)位肯定要從地址0開(kāi)始。
  
       <8> 由于剛才人為改動(dòng)了地址分配,弄亂了,讓系統(tǒng)自動(dòng)再分配一次,當(dāng)然被鎖定的RAM基地址是不會(huì)變的。"System" →"Auto-Assign Base Addresses"。最終系統(tǒng)組件列表如下:
  
    注意,seg7的地址范圍是"0x00010800"→"0x00010807",占8個(gè)地址,nios系統(tǒng)的地址按字節(jié)分配,也就是說(shuō),每個(gè)字節(jié)占用一 個(gè)地址,數(shù)碼管控制器中定義了兩個(gè)寄存器,avalon總線(xiàn)規(guī)定每個(gè)寄存器占32位(實(shí)際上是不是32位它就不管了,反正按最大32位分配),這樣兩個(gè)寄 存器共占去8個(gè)字節(jié),自然需要8個(gè)地址。
       <9> 點(diǎn)擊"Generate"生成nios系統(tǒng),回到Quartus II。
       <10> 新建一個(gè)頂層文件"File"→"New"→"Block Diagram/Schematic File",引入nios II系統(tǒng),增加輸入輸出引腳。然后,"Assignment"→"Import Assignment",添加引腳分配文件(在DE2光盤(pán)目錄下的DE2_tutorialsdesign_files DE2_pin_assignments.csv),改動(dòng)頂層文件的引腳名稱(chēng)使其與.csv文件中保持一致。
  
       <11> 編譯,查看編譯報(bào)告,可見(jiàn),48K的RAM占用了芯片83%的memory bits,差不多耗光了。
  
       <12> 硬件部分已經(jīng)搞定,關(guān)掉Quartus II,打開(kāi)Nios II IDE,切換到工作目錄下。
       <13> "File"→"New"→"C/C++ Application","SOPC Builder System"選擇"nios2_system.ptf"(就是剛才Generate Nios II系統(tǒng)生成的東東),再選模板"Hello World"(純屬偷懶 ),頂上的"name"改成"seg_example","Finish"。
       <14> 改動(dòng)hello_world.c,代碼的功能為:先初始化數(shù)碼管,等待2秒鐘,再進(jìn)行0-9的循環(huán),循環(huán)過(guò)程中穿插2秒鐘的清屏。SEG7_BASE的宏 定義在system.h中,實(shí)際上就是在SOPC Builder中的seg7_avalon的基地址0x00010800。
  
       <15> "Project"→"Build Project",得到編譯報(bào)告,軟件占用了7K空間……
  
       <16> 下載到DE2板上,運(yùn)行,數(shù)碼管不停地閃啊閃。
       OK,從硬件到軟件的一條龍講完了。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

美國(guó)紐約州阿蒙克2022年10月20日 /美通社/ -- IBM(NYSE: IBM)發(fā)布 2022 年第三季度業(yè)績(jī)報(bào)告。 IBM 董事長(zhǎng)兼首席執(zhí)行官 Arvind Kri...

關(guān)鍵字: IBM 軟件 BSP 云平臺(tái)

成都2022年10月19日 /美通社/ -- 近期,平安養(yǎng)老險(xiǎn)積極籌備個(gè)人養(yǎng)老金的產(chǎn)品設(shè)計(jì)和系統(tǒng)開(kāi)發(fā)工作,發(fā)展多樣化的養(yǎng)老金融產(chǎn)品,推動(dòng)商業(yè)養(yǎng)老保險(xiǎn)、個(gè)人養(yǎng)老金、專(zhuān)屬商業(yè)養(yǎng)老保險(xiǎn)等產(chǎn)品供給。 搭養(yǎng)老政策東風(fēng) ...

關(guān)鍵字: 溫度 BSP 東風(fēng) 大眾

廣東佛山2022年10月19日 /美通社/ -- 空間是人居生活的基礎(chǔ)單元,承載著生存與活動(dòng)的最基本功能。而對(duì)于理想空間的解構(gòu)意義卻在物理性容器之外,體現(xiàn)出人們對(duì)于空間和生活深層關(guān)系的思考,同時(shí)也塑造著人與空間的新型連接...

關(guān)鍵字: 溫度 BSP 智能化 進(jìn)程

上海2022年10月19日 /美通社/ -- 10月17日晚間,安集科技披露業(yè)績(jī)預(yù)告。今年前三季度,公司預(yù)計(jì)實(shí)現(xiàn)營(yíng)業(yè)收入7.54億元至8.33億元,同比增長(zhǎng)60.24%至77.03%;歸母凈利潤(rùn)預(yù)計(jì)為1.73億...

關(guān)鍵字: 電子 安集科技 BSP EPS

北京2022年10月19日 /美通社/ -- 10月18日,北京市經(jīng)濟(jì)和信息化局發(fā)布2022年度第一批北京市市級(jí)企業(yè)技術(shù)中心創(chuàng)建名單的通知,諾誠(chéng)健華正式獲得"北京市企業(yè)技術(shù)中心"認(rèn)定。 北京市企業(yè)技...

關(guān)鍵字: BSP ARMA COM 代碼

北京2022年10月18日 /美通社/ -- 10月14日,國(guó)際數(shù)據(jù)公司(IDC)發(fā)布《2022Q2中國(guó)軟件定義存儲(chǔ)及超融合市場(chǎng)研究報(bào)告》,報(bào)告顯示:2022年上半年浪潮超融合銷(xiāo)售額同比增長(zhǎng)59.4%,近5倍于...

關(guān)鍵字: IDC BSP 數(shù)字化 數(shù)據(jù)中心

上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都銀行集團(tuán)成立60周年的紀(jì)念日。趁著首都銀行集團(tuán)成立60周年與首都銀行(中國(guó))在華深耕經(jīng)營(yíng)12年的“大日子”,圍繞作為外資金融機(jī)構(gòu)對(duì)在華戰(zhàn)略的構(gòu)想和業(yè)...

關(guān)鍵字: 數(shù)字化 BSP 供應(yīng)鏈 控制

東京2022年10月18日  /美通社/ -- NIPPON EXPRESS HOLDINGS株式會(huì)社(NIPPON EXPRESS HOLDINGS, INC.)旗下集團(tuán)公司上海通運(yùn)國(guó)際物流有限公司(Nipp...

關(guān)鍵字: 溫控 精密儀器 半導(dǎo)體制造 BSP

廣州2022年10月18日 /美通社/ -- 10月15日,第 132 屆中國(guó)進(jìn)出口商品交易會(huì)("廣交會(huì)")于"云端"開(kāi)幕。本屆廣交會(huì)上高新技術(shù)企業(yè)云集,展出的智能產(chǎn)品超過(guò)140,...

關(guān)鍵字: 中國(guó)智造 BSP 手機(jī) CAN

要問(wèn)機(jī)器人公司哪家強(qiáng),波士頓動(dòng)力絕對(duì)是其中的佼佼者。近來(lái)年該公司在機(jī)器人研發(fā)方面獲得的一些成果令人印象深刻,比如其開(kāi)發(fā)的機(jī)器人會(huì)后空翻,自主爬樓梯等。這不,波士頓動(dòng)力又發(fā)布了其機(jī)器人組團(tuán)跳男團(tuán)舞的新視頻,表演的機(jī)器人包括...

關(guān)鍵字: 機(jī)器人 BSP 工業(yè)機(jī)器人 現(xiàn)代汽車(chē)

電子設(shè)計(jì)自動(dòng)化

21191 篇文章

關(guān)注

發(fā)布文章

編輯精選

技術(shù)子站

關(guān)閉