《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > EDA與制造 > 解決方案 > EDA簡(jiǎn)介

EDA簡(jiǎn)介

2015-10-14
關(guān)鍵詞: EDA CAM CAT CAD

       EDA是電子設(shè)計(jì)自動(dòng)化(ElectrONic Design AUTOMATION)的縮寫,在20世紀(jì)90年代初從計(jì)算機(jī)輔助設(shè)計(jì)(CAD),、計(jì)算機(jī)輔助制造(CAM),、計(jì)算機(jī)輔助測(cè)試(CAT)和計(jì)算機(jī)輔助工程(CAE)的概念發(fā)展而來(lái)的。EDA技術(shù)就是以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件平臺(tái)上,用硬件描述語(yǔ)言HDL完成設(shè)計(jì)文件,然后由計(jì)算機(jī)自動(dòng)地完成邏輯編譯,、化簡(jiǎn)、分割,、綜合,、優(yōu)化、布局,、布線和仿真,,直至對(duì)于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作,。EDA技術(shù)的出現(xiàn),,極大地提高了電路設(shè)計(jì)的效率和可操作性,減輕了設(shè)計(jì)者的勞動(dòng)強(qiáng)度,。

EDA設(shè)計(jì)方法

前端設(shè)計(jì)(系統(tǒng)建模RTL 級(jí)描述)后端設(shè)計(jì)(FPGAASIC)系統(tǒng)建模

  IP 復(fù)用

  前端設(shè)計(jì)

  系統(tǒng)描述:建立系統(tǒng)的數(shù)學(xué)模型,。

  功能描述:描述系統(tǒng)的行為或各子模塊之間的數(shù)據(jù)流圖。

  邏輯設(shè)計(jì):將系統(tǒng)功能結(jié)構(gòu)化,,通常以文本,、原

  理圖、邏輯圖,、布爾表達(dá)式來(lái)表示設(shè)計(jì)結(jié)果,。

  仿真:包括功能仿真和時(shí)序仿真,,主要驗(yàn)證系統(tǒng)功能的正確性及時(shí)序特性。

EDA常用軟件

EDA工具層出不窮,,目前進(jìn)入我國(guó)并具有廣泛影響的EDA軟件有:multiSIM7(原EWB的最新版本),、PSPICE、OrCAD,、PCAD,、Protel,、Viewlogic,、Mentor、Graphics,、Synopsys,、LSIIogic、Cadence,、MicroSim,,ISE,modelsim等等,。這些工具都有較強(qiáng)的功能,,一般可用于幾個(gè)方面,例如很多軟件都可以進(jìn)行電路設(shè)計(jì)與仿真,,同進(jìn)還可以進(jìn)行PCB自動(dòng)布局布線,,可輸出多種網(wǎng)表文件與第三方軟件接口。

NIOS II常用函數(shù)整理

 

IO操作函數(shù)
函數(shù)原型:IORD(BASE, REGNUM)
輸入?yún)?shù):BASE為寄存器的基地址,,REGNUM為寄存器的偏移量
函數(shù)說(shuō)明:從基地址為BASE的設(shè)備中讀取寄存器中偏移量為REGNUM的單元里面的值,。寄存器的值在地址總線的范圍之內(nèi)。
返回值:  -

函數(shù)原型:IOWR(BASE, REGNUM, DATA)
輸入?yún)?shù):BASE為寄存器的基地址,,REGNUM為寄存器的偏移量,,DATA為要寫入的數(shù)據(jù)
函數(shù)說(shuō)明:往偏移量為REGNUM寄存器中寫入數(shù)據(jù)。寄存器的值在地址總線的范圍之內(nèi),。
返回值:  -

函數(shù)原型:IORD_32DIRECT(BASE, OFFSET)
輸入?yún)?shù):BASE為寄存器的基地址,,OFFSET為寄存器的的偏移量
函數(shù)說(shuō)明:從地址位置為BASE+OFFSET的寄存器中直接讀取32Bit的數(shù)據(jù)
返回值:  -

函數(shù)原型:IORD_16DIRECT(BASE, OFFSET)
輸入?yún)?shù):BASE為寄存器的基地址,OFFSET為寄存器的的偏移量
函數(shù)說(shuō)明:從地址位置為BASE+OFFSET的寄存器中直接讀取16Bit的數(shù)據(jù)
返回值:  -

函數(shù)原型:IORD_8DIRECT(BASE, OFFSET)
輸入?yún)?shù):BASE為寄存器的基地址,,OFFSET為寄存器的的偏移量
函數(shù)說(shuō)明:從地址位置為BASE+OFFSET的寄存器中直接讀取8Bit的數(shù)據(jù)
返回值:  -

函數(shù)原型:IOWR_32DIRECT(BASE, OFFSET, DATA)
輸入?yún)?shù):BASE為寄存器的基地址,,REGNUM為寄存器的偏移量,DATA為要寫入的數(shù)據(jù)
函數(shù)說(shuō)明:往地址位置為BASE+OFFSET的寄存器中直接寫入32Bit的數(shù)據(jù)
返回值: -

函數(shù)原型:IOWR_16DIRECT(BASE, OFFSET, DATA)
輸入?yún)?shù):BASE為寄存器的基地址,,REGNUM為寄存器的偏移量,,DATA為要寫入的數(shù)據(jù)
函數(shù)說(shuō)明:往地址位置為BASE+OFFSET的寄存器中直接寫入16Bit的數(shù)據(jù)
返回值: -

函數(shù)原型:IOWR_8DIRECT(BASE, OFFSET, DATA)
輸入?yún)?shù):BASE為寄存器的基地址,REGNUM為寄存器的偏移量,,DATA為要寫入的數(shù)據(jù)
函數(shù)說(shuō)明:往地址位置為BASE+OFFSET的寄存器中直接寫入8Bit的數(shù)據(jù)
返回值: -

Dma:
函數(shù)原型:int alt_dma_rxchan_close (alt_dma_rxchan rxchan)
輸入?yún)?shù):rxchan為接收信道
函數(shù)說(shuō)明:函數(shù) alt_dma_rxchan_close ()通知系統(tǒng):應(yīng)用程序已經(jīng)完成DMA
接收信道rxchan,,目前執(zhí)行是成功的
返回值: 成功返回為0,,反之為-1

 

函數(shù)原型:alt_dma_rxchan_depth(alt_dma_rxchan dma)
輸入?yún)?shù):dma
函數(shù)說(shuō)明:函數(shù)alt_dma_rxchan_depth ()返回傳送到特別DMA的最大數(shù)量(深度)的接收請(qǐng)求
返回值: DMA的最大數(shù)量

函數(shù)原型:int alt_dma_rxchan_ioctl (alt_dma_rxchan dma, int req, void* arg)
輸入?yún)?shù):dma直接存儲(chǔ)器名, req為請(qǐng)求操作的列舉, arg由請(qǐng)求決定
函數(shù)說(shuō)明:通過(guò)DMA接收信道執(zhí)行設(shè)備的具體I/O操作
返回值: 成功返回請(qǐng)求具體值,反之返回為負(fù)數(shù)
請(qǐng)求類型
請(qǐng)求類型 請(qǐng)求類型說(shuō)明
ALT_DMA_SET_MODE_8 傳輸以8Bit為單位的數(shù)據(jù),,arg值忽略
ALT_DMA_SET_MODE_16 傳輸以16Bit為單位的數(shù)據(jù),,arg值忽略
ALT_DMA_SET_MODE_32 傳輸以32Bit為單位的數(shù)據(jù),arg值忽略
ALT_DMA_SET_MODE_64 傳輸以64Bit為單位的數(shù)據(jù),,arg值忽略
ALT_DMA_SET_MODE_128 傳輸以128Bit為單位的數(shù)據(jù),,arg值忽略
ALT_DMA_TX_ONLY_ON (1) 軟件控制下只能發(fā)送
ALT_DMA_TX_ONLY_OFF (1) 自定義模式,軟件控制下可以接收,,發(fā)送
ALT_DMA_RX_ONLY_ON (1) 軟件控制下只能接收
ALT_DMA_RX_ONLY_OFF (1) 自定義模式,,軟件控制下可以接收,發(fā)送

函數(shù)原型:alt_dma_rxchan alt_dma_rxchan_open (conST char* name)
輸入?yún)?shù):name為常數(shù)字符指針,,如/dev/dma_0
函數(shù)說(shuō)明:為DMA接收信道獲得一個(gè)alt_dma_rxchan描述符
返回值: 成功返回非0,,反之返回為0

函數(shù)原型:int alt_dma_rxchan_prepare (alt_dma_rxchan dma, void* data,
alt_u32 length, alt_rxchan_done * done, void* handle)
輸入?yún)?shù):dma使用的信道;data接收數(shù)據(jù)位置的指針,;length最大的接收數(shù)據(jù)長(zhǎng)度,;done一旦數(shù)據(jù)被接收,調(diào)用返回函數(shù),;handle,,非透明值傳到done
函數(shù)說(shuō)明:發(fā)送一個(gè)接收請(qǐng)求到DMA接收信道,
返回值: 成功返回0,,反之返回為負(fù)數(shù)

函數(shù)原型:int alt_dma_rxchan_reg (alt_dma_rxchan_dev * dev)
輸入?yún)?shù):dev接收信道設(shè)備名
函數(shù)說(shuō)明:給系統(tǒng)寄存DMA接收信道
返回值: 成功返回0,,反之返回為負(fù)數(shù)

函數(shù)原型:int alt_dma_txchan_close (alt_dma_txchan txchan)
輸入?yún)?shù):txchan發(fā)送信道名
函數(shù)說(shuō)明:通知系統(tǒng):應(yīng)用程序已經(jīng)完成DMA發(fā)送信道txchan
返回值: 成功返回0,反之返回為負(fù)數(shù)

函數(shù)原型:int alt_dma_txchan_ioctl (alt_dma_txchan dma, int req, void* arg)
輸入?yún)?shù):dma直接存儲(chǔ)器名,;req為請(qǐng)求操作的列舉,;arg請(qǐng)求的額外參數(shù),由請(qǐng)求決定
函數(shù)說(shuō)明:通過(guò)DMA發(fā)送信道執(zhí)行設(shè)備的具體I/O操作
返回值: 成功返回請(qǐng)求具體值,,反之返回為負(fù)數(shù)

函數(shù)原型:alt_dma_txchan alt_dma_txchan_open (const char* name)
輸入?yún)?shù):name為常數(shù)字符指針,,如/dev/dma_0
函數(shù)說(shuō)明:為DMA發(fā)送信道獲得一個(gè)alt_dma_rxchan描述符
返回值: 成功返回非0,反之返回為0

函數(shù)原型:int alt_dma_txchan_reg (alt_dma_txchan_dev* dev)
輸入?yún)?shù):dev接收信道設(shè)備名
函數(shù)說(shuō)明:給系統(tǒng)寄存DMA發(fā)送信道
返回值: 成功返回0,,反之返回為負(fù)數(shù)

函數(shù)原型:int alt_dma_txchan_send (alt_dma_txchan dma, const void* from,
alt_u32 length, alt_txchan_done* done, void* handle)
輸入?yún)?shù):dma使用的信道,;data接收數(shù)據(jù)位置的指針;length最大的接收數(shù)據(jù)長(zhǎng)度,;done一旦數(shù)據(jù)被接收,,調(diào)用返回函數(shù);handle,,非透明值傳到done
函數(shù)說(shuō)明:發(fā)送一個(gè)發(fā)送請(qǐng)求到DMA發(fā)送信道,,
返回值: 發(fā)送成功返回0,反之返回為負(fù)數(shù)

函數(shù)原型:nt alt_dma_txchan_space (alt_dma_txchan dma)
輸入?yún)?shù):dma 直接存儲(chǔ)器名
函數(shù)說(shuō)明:返回被傳送到具體DMA發(fā)送信道的發(fā)送請(qǐng)求數(shù)目
返回值: 返回發(fā)送請(qǐng)求數(shù)目

Flash
函數(shù)原型:int alt_erase_flash_block(alt_flash_fd* fd, int offset, int length)
輸入?yún)?shù):fd為具體的flash設(shè)備,;offset擦除的flash模塊的偏移量,;length擦除的flash模塊的長(zhǎng)度
函數(shù)說(shuō)明:擦除單獨(dú)的一個(gè)flash模塊
返回值: 發(fā)送成功返回0,,反之返回為負(fù)數(shù)

 

函數(shù)原型:void alt_flash_close_dev(alt_flash_fd * fd)
輸入?yún)?shù):fd為具體的flash設(shè)備
函數(shù)說(shuō)明:關(guān)閉flash設(shè)備
返回值: -

函數(shù)原型:alt_flash_fd * alt_flash_open_dev(const char* name)
輸入?yún)?shù):
函數(shù)說(shuō)明:打開flash設(shè)備。一旦打開,,函數(shù)alt_write_flash()用來(lái)寫入,,函數(shù)alt_read_flash()用來(lái)讀取數(shù)據(jù),或者使用函數(shù)alt_get_flash_info(), alt_erase_flash_block(), alt_write_flash_block(),控制單個(gè)模塊
返回值: 失敗返回0,,成功其他值

函數(shù)原型:int alt_get_flash_info(alt_flash_fd* fd, flash_region ** info,
int* number_of_regions)
輸入?yún)?shù):fd flash設(shè)備,;info指向flash_region結(jié)構(gòu)體的指針;number_of_regions
函數(shù)說(shuō)明:得到擦除flash區(qū)域的細(xì)節(jié)
返回值: 發(fā)送成功返回0,,反之返回為負(fù)數(shù)

函數(shù)原型:int alt_read_flash(alt_flash_fd* fd, int offset, void* dest_addr, int length)
輸入?yún)?shù):dest_addr目標(biāo)地址指針
函數(shù)說(shuō)明:從flash偏移量為offset字節(jié)開始讀取數(shù)據(jù),,寫入到目標(biāo)地址dest_addr中
返回值: 成功返回0,反之為非0

函數(shù)原型:int alt_write_flash(alt_flash_fd* fd, int offset, const void* src_addr,
int length)
輸入?yún)?shù):src_addr源地址,;fd,,flash設(shè)備,;offset 偏移量,;length字節(jié)長(zhǎng)度
函數(shù)說(shuō)明:寫數(shù)據(jù)到flsah中,要寫的數(shù)據(jù)在源地址src_addr中
返回值: 成功返回0,,反之為非0

函數(shù)原型:int alt_write_flash_block(alt_flash_fd* fd, int block_offset, int data_offset,
const void *data, int length)
輸入?yún)?shù):fd,;data_offset起始寫數(shù)據(jù)的偏移量;length為要寫數(shù)據(jù)的長(zhǎng)度
函數(shù)說(shuō)明:寫入到一個(gè)已擦除的flash模塊
返回值: 成功返回0,,反之為非0


函數(shù)原型:alt_irq_context alt_irq_disable_all (void)
輸入?yún)?shù):void
函數(shù)說(shuō)明:禁止所有中斷
返回值: 傳遞的值作為隨后的函數(shù)調(diào)用的輸入?yún)?shù)

 


函數(shù)原型:void alt_irq_enable_all (alt_irq_context context)
輸入?yún)?shù):先前調(diào)用函數(shù)alt_irq_disable_all (void)的返回值,,
函數(shù)說(shuō)明:?jiǎn)?dòng)所有中斷
返回值: -

函數(shù)原型:int alt_irq_enabled (void)
輸入?yún)?shù):void
函數(shù)說(shuō)明:?jiǎn)?dòng)中斷
返回值: 禁止中斷返回0,反之為非0

函數(shù)原型:int alt_irq_register (alt_u32 id, void* context, void (*isr)(void*, alt_u32))
輸入?yún)?shù):id,32位無(wú)符號(hào)數(shù),,中斷使能,;context和id是isr的兩個(gè)輸入?yún)?shù);中斷激活時(shí)調(diào)用isr
函數(shù)說(shuō)明:寄存一個(gè)isr
返回值: 成功返回0,,反之為非0

函數(shù)原型:int alt_write_flash(alt_flash_fd* fd, int offset, const void* src_addr,
int length)
輸入?yún)?shù):src_addr源地址,;fd,flash設(shè)備,;offset 偏移量,;length字節(jié)長(zhǎng)度
函數(shù)說(shuō)明:寫數(shù)據(jù)到flsah中,要寫的數(shù)據(jù)在源地址src_addr中
返回值: 成功返回0,,反之為非0

函數(shù)原型:int alt_write_flash_block(alt_flash_fd* fd, int block_offset, int data_offset,
const void *data, int length)
輸入?yún)?shù):fd,;data_offset起始寫數(shù)據(jù)的偏移量;length為要寫數(shù)據(jù)的長(zhǎng)度
函數(shù)說(shuō)明:寫入到一個(gè)已擦除的flash模塊
返回值: 成功返回0,,反之為非0

函數(shù)原型:int close (int filedes)
輸入?yún)?shù):filedes,,描述符
函數(shù)說(shuō)明:標(biāo)準(zhǔn)的UNIX函數(shù)close(),關(guān)閉文件描述符filedes
返回值: 成功返回0,,反之為-1

函數(shù)原型:int open (const char* pathname, int flags, mode_t mode)
輸入?yún)?shù):pathname, 路徑名,;flags,O_RDONLY或O_WRONLY 或O_RDWR,分別對(duì)應(yīng)著只讀,,只寫,或讀寫操作,;mode,,使用許可說(shuō)明
函數(shù)說(shuō)明:打開文件或設(shè)備,返回一個(gè)文件描述符(讀寫中使用的非負(fù)整數(shù))
返回值: 成功返回文件描述符,,反之返回-1

函數(shù)原型:int read(int file, void *ptr, size_t len)
輸入?yún)?shù):file文件描述符,;ptr為讀數(shù)據(jù)的位置指針,len讀數(shù)據(jù)的長(zhǎng)度,,單位為字節(jié)
函數(shù)說(shuō)明:從文件或設(shè)備中讀取數(shù)據(jù)塊
返回值: 成功返回讀取的字節(jié)數(shù),,反之返回-1

函數(shù)原型:clock_t times (struct tms *buf)
輸入?yún)?shù):buf結(jié)構(gòu)體指針
函數(shù)說(shuō)明:兼容newlib,tms的結(jié)構(gòu)體指針如下:
type struct
{clock_t tms_utime;
clock_t tms_stime;
clock_t tms_cutime;
clock_t tms_sutime;
};
tms_utime: CPU索取用戶指令的執(zhí)行時(shí)間
tms_stime: CPU索取由系統(tǒng)表示的過(guò)程的執(zhí)行時(shí)間
tms_cutime:所有子進(jìn)程tms_utime和tms_cutime的時(shí)間之和
tms_sutime:所有子進(jìn)程tms_stime和tms_sutime的時(shí)間之和
返回值: 返回時(shí)鐘數(shù),,沒(méi)有時(shí)鐘則返回0

函數(shù)原型:int usleep (int us)
輸入?yún)?shù):us,單位為微秒
函數(shù)說(shuō)明:直到us微秒后才解除阻塞,,即其功能相當(dāng)于延時(shí)us微秒
返回值: 成功返回0,反之為-1,,有錯(cuò)誤發(fā)生顯示錯(cuò)誤發(fā)生原因

函數(shù)原型:int wait(int *status)
輸入?yún)?shù): status 進(jìn)程狀態(tài)指針
函數(shù)說(shuō)明:功能是等候所有子進(jìn)程退出,,由于HAL不支持分散子進(jìn)程,函數(shù)立即返回
返回值: status內(nèi)容清0,,表明沒(méi)有子進(jìn)程,;返回值為-1,且errno置為ECHILD,, 表明沒(méi)有子進(jìn)程等候

函數(shù)原型:int write(int file, const void *ptr, size_t len)
輸入?yún)?shù):file文件描述符,;ptr為讀數(shù)據(jù)的位置指針,len讀數(shù)據(jù)的長(zhǎng)度,,單位為字節(jié)
函數(shù)說(shuō)明:往文件或設(shè)備寫入數(shù)據(jù)塊,,
返回值: 成功返回寫入的字節(jié)數(shù),也可能少于請(qǐng)求的長(zhǎng)度,;反之返回-1,,萬(wàn)一有錯(cuò)誤發(fā)生,errno被設(shè)置為發(fā)生的原因


類型 說(shuō)明
alt_8 符號(hào)8位整數(shù)
alt_u8 無(wú)符號(hào)8位整數(shù)
alt_16 符號(hào)16位整數(shù)
alt_u16 無(wú)符號(hào)16位整數(shù)
alt_32 符號(hào)32位整數(shù)
alt_u32 無(wú)符號(hào)32位整數(shù)

 

 

下面為自己整理
函數(shù)原型:int fopen (char * file_name, way_use);
輸入?yún)?shù):file_name文件名,,way_use使用文件方式,,比如r,w分別對(duì)應(yīng)著讀寫
函數(shù)說(shuō)明:打開文件,,對(duì)其進(jìn)行某種文件操作
返回值: 打不開則出錯(cuò),,返回一個(gè)空指針NULL

 

函數(shù)原型:int fclose (fp)
輸入?yún)?shù):fp的定義為:FILE *fp
函數(shù)說(shuō)明:關(guān)閉文件fp
返回值: 成功返回0,反之為-1(EOF)

函數(shù)原型:int fread(void *ptr, int size, int count, FILE * fp);
輸入?yún)?shù):buffer為指針,;是讀入數(shù)據(jù)地存放地址,;size讀字節(jié)數(shù);count讀字節(jié)數(shù)地?cái)?shù)目,;fp文件型指針
函數(shù)說(shuō)明:從一個(gè)流中讀取數(shù)據(jù)
返回值: 成功返回值為count

函數(shù)原型:int fwrite(void *ptr, int size, int count, FILE *fp)
輸入?yún)?shù):buffer為指針,;是讀入數(shù)據(jù)地存放地址,;size讀字節(jié)數(shù);count讀字節(jié)數(shù)地?cái)?shù)目,;fp文件型指針,,
函數(shù)說(shuō)明:寫內(nèi)容到流中
返回值: 成功返回值為count

函數(shù)原型:int fprintf(FILE *fp, char *format[, argument,...]);
輸入?yún)?shù):fp文件型指針;format格式字符串,;[, argument,...]輸出列表,如:
fprintf(fp,“%d,%f”,i,t)
函數(shù)說(shuō)明:傳送格式化輸出到一個(gè)流中
返回值: -

函數(shù)原型:int fscanf(FILE * fp, char *format[,argument...])
輸入?yún)?shù):fp文件型指針,;format格式字符串;[, argument,...]輸入列表,,如:
fscanf(fp,“%d,%f”,i,t)
函數(shù)說(shuō)明:從一個(gè)流中執(zhí)行格式化輸入
返回值: -

函數(shù)原型:int fputc(int ch, FILE *fp)
輸入?yún)?shù):ch字符,;fp:文件型指針
函數(shù)說(shuō)明:送一個(gè)字符到一個(gè)流中
返回值: 成功返回字符,反之返回-1(EOF)

函數(shù)原型:int fgetc(FILE *fp);
輸入?yún)?shù):fp:文件型指針
函數(shù)說(shuō)明:從流中讀取字符
返回值: 遇到文件結(jié)束返回-1(EOF)

函數(shù)原型:int putw(int w, FILE *fp)
輸入?yún)?shù):w: 字符或字; fp:文件型指針
函數(shù)說(shuō)明:把一字符或字送到流中
返回值: -

函數(shù)原型:int getw(FILE *fp)
輸入?yún)?shù):fp:文件型指針
函數(shù)說(shuō)明:從流中取一整數(shù)
返回值: -

函數(shù)原型:int rewind(FILE *fp)
輸入?yún)?shù):fp:文件型指針
函數(shù)說(shuō)明:將文件指針重新指向一個(gè)流的開頭
返回值: -

函數(shù)原型:int fseek(FILE *fp, long offset, int fromwhere);
輸入?yún)?shù):fp:文件型指針,;offset:long型偏移量,;fromwhere:起始點(diǎn)
起始點(diǎn)為0,1,,2分別代表文件開始,,當(dāng)前位置,文件末尾
函數(shù)說(shuō)明:重定位流上的文件指針
返回值: -

函數(shù)原型:int ferror(FILE *fp)
輸入?yún)?shù):fp:文件型指針
函數(shù)說(shuō)明:檢測(cè)流上的錯(cuò)誤
返回值: 未出錯(cuò)返回值為0,,反之為非0

函數(shù)原型:long ftell(FILE *fp)
輸入?yún)?shù):fp:文件型指針
函數(shù)說(shuō)明:返回當(dāng)前文件指針,,得到當(dāng)前位置
返回值: 返回值為-1表示出錯(cuò),反之為非0

函數(shù)原型:void clearerr(FILE *fp)
輸入?yún)?shù):fp:文件型指針
函數(shù)說(shuō)明:復(fù)位錯(cuò)誤標(biāo)志
返回值: 出錯(cuò)為非0,,反之為0

函數(shù)原型:char *fgets(char *string, int n, FILE *fp)
輸入?yún)?shù):string:字符串指針;fp:文件型指針
函數(shù)說(shuō)明:從流中讀取一字符串,,但只從文件輸入n-1個(gè)字符,,后一個(gè)為‘\0’結(jié)束標(biāo)志位
返回值: -

函數(shù)原型:nt fputs(char *string, FILE *fp)
輸入?yún)?shù):string:字符串指針;fp:文件型指針
函數(shù)說(shuō)明:送一個(gè)字符串到一個(gè)流中
返回值: -

函數(shù)原型:int feof(FILE *fp)
輸入?yún)?shù):fp:文件型指針
函數(shù)說(shuō)明:檢測(cè)流上的文件結(jié)束符
返回值: -

 

IRQ

 

IORD_16DIRECT(BASE, OFFSET)
從地址位置為BASE+OFFSET的寄存器中直接讀取16Bit的數(shù)據(jù)
IORD_8DIRECT(BASE, OFFSET)
從地址位置為BASE+OFFSET的寄存器中直接讀取8Bit的數(shù)據(jù)

IOWR_32DIRECT(BASE, OFFSET, DATA)
往地址位置為BASE+OFFSET的寄存器中直接寫入32Bit的數(shù)據(jù)

IOWR_16DIRECT(BASE, OFFSET, DATA)
往地址位置為BASE+OFFSET的寄存器中直接寫入16Bit的數(shù)據(jù)
IOWR_8DIRECT(BASE, OFFSET, DATA)
往地址位置為BASE+OFFSET的寄存器中直接寫入8Bit的數(shù)據(jù)
IORD(BASE, REGNUM)
從基地址為BASE的設(shè)備中讀取偏移量為REGNUM的寄存器里面的值,。寄存器的值在地址總線的范圍之內(nèi),。
IOWR(BASE, REGNUM, DATA)
BASE為基地址,往偏移量為REGNUM寄存器中寫入數(shù)據(jù),。寄存器的值在地址總線的范圍之內(nèi),。
IORD_32DIRECT(BASE, OFFSET)
BASE為寄存器的基地址,OFFSET為寄存器的的偏移量,。
從地址位置為BASE+OFFSET的寄存器中直接讀取32Bit的數(shù)據(jù)
IORD_16DIRECT(BASE, OFFSET)
從地址位置為BASE+OFFSET的寄存器中直接讀取16Bit的數(shù)據(jù)
IORD_8DIRECT(BASE, OFFSET)
從地址位置為BASE+OFFSET的寄存器中直接讀取8Bit的數(shù)據(jù)

IOWR_32DIRECT(BASE, OFFSET, DATA)
往地址位置為BASE+OFFSET的寄存器中直接寫入32Bit的數(shù)據(jù)

IOWR_16DIRECT(BASE, OFFSET, DATA)
往地址位置為BASE+OFFSET的寄存器中直接寫入16Bit的數(shù)據(jù)
IOWR_8DIRECT(BASE, OFFSET, DATA)
往地址位置為BASE+OFFSET的寄存器中直接寫入8Bit的數(shù)據(jù)

Nios II IDE Command Line Tools
Tool Descriptor
nios2-create-system-library 創(chuàng)建一個(gè)新系統(tǒng)庫(kù)工程
nios2-create-application-project 創(chuàng)建一個(gè)C/C++應(yīng)用庫(kù)工程
nios2-build-project 使用Nios II IDE編譯工程,,創(chuàng)建或更新文件編寫來(lái)編譯工程,該操作工程必須是存在當(dāng)前的Nios II IDE工作區(qū)間
nios2-import-project 導(dǎo)入一個(gè)以前創(chuàng)建的Nios II IDE工程到當(dāng)前的工作區(qū)間
nios2-delete-project 從Nios II IDE工作區(qū)間刪除工程

Altera Command-Line Tools
Tool Descriptor
nios2-download 為調(diào)試或運(yùn)行下載代碼到目標(biāo)處理器
nios2-flash-programmer 編程數(shù)據(jù)到目標(biāo)板的flash存儲(chǔ)器上
nios2-gdb-server 通過(guò)TCP,用目標(biāo)Nios II處理器把GNU調(diào)試器遠(yuǎn)程的串口協(xié)議分組翻譯為共同測(cè)試行動(dòng)小組(JTAG)的事務(wù)
nios2-terminal 用JTAG通用異步收發(fā)機(jī)(UART)執(zhí)行終止Nios II系統(tǒng)里面的I/O
validate_zip 核實(shí)指定的zip文件是否兼容Altera只讀zip文件系統(tǒng)

File Conversion Utilities
Utility Descriptor
bin2flash 為下載到flash存儲(chǔ)器上,,將二進(jìn)制文件轉(zhuǎn)換為.flash文件
elf2dat 為適應(yīng)Verilog HDL硬件仿真,,將.elf可執(zhí)行文件格式轉(zhuǎn)換為.dat文件格式
elf2flash 為下載到flash存儲(chǔ)器上,將.elf可執(zhí)行文件格式轉(zhuǎn)換為.flash文件
elf2hex 將.elf可執(zhí)行文件格式轉(zhuǎn)換為Intel.hex文件格式
elf2mem 在指定的Nios II系統(tǒng)中為存儲(chǔ)設(shè)備生成存儲(chǔ)內(nèi)容
elf2mif 將.elf可執(zhí)行文件格式轉(zhuǎn)換為Quartus II內(nèi)存初始化文件(.mif)格式
flash2dat 為適應(yīng)Verilog HDL硬件仿真,,將.flash可執(zhí)行文件格式轉(zhuǎn)換為.dat文件格式
mk-nios2-signaltap-mnemonic-table 獲得一個(gè).elf文件和SOPC Builder 系統(tǒng)文件(.ptf),,創(chuàng)建一個(gè).stp包含Nios II子令集記憶表和Altera’s SignalTap? II logic分析儀符號(hào)的文件
sof2flash 為下載到flash存儲(chǔ)器上,,將FPGA配置文件(.sof)轉(zhuǎn)換為.flash文件

Backward Compatibility Tools
Tool Descriptor
nios2-build 基于傳統(tǒng)SDK庫(kù)的編譯和鏈接軟件工程
nios2-run 下載程序到Nios II處理器,終止I/O的變成
nios2-debug 下載程序到Nios II處理器,,啟動(dòng)洞察力的調(diào)試器
nios2-console 打開FS2命令行接口(CLI),,連接到Nios II處理器,(有選擇地下載代碼)

《淡邏輯設(shè)計(jì)的學(xué)習(xí)》

學(xué)習(xí)邏輯設(shè)計(jì)首先要有項(xiàng)目掛靠,,如果你覺(jué)得未來(lái)一段時(shí)間你都不可能有的話,,接下來(lái)的內(nèi)容你就沒(méi)有必要再看了,花的時(shí)間再多也只能學(xué)到皮毛--很多細(xì)節(jié)的問(wèn)題光寫代碼是發(fā)現(xiàn)不到的,。而且要真正入門,,最好要多做幾個(gè)項(xiàng)目(這三年大大小小的項(xiàng)目我做有七八個(gè)),總線型的和數(shù)字信號(hào)處理型的最好都要接觸一些,,因?yàn)檫@兩個(gè)方向的邏輯設(shè)計(jì)差異比較大:前者主要是控制型的,,會(huì)涉及到狀態(tài)機(jī)等控制邏輯;后者主要是計(jì)算型的,,難點(diǎn)主要在對(duì)符號(hào),、浮點(diǎn)數(shù)轉(zhuǎn)定點(diǎn)數(shù)、位寬等方面的處理上,。
     
     第二要有好的師父,。這里說(shuō)的好的師父并不是指畫原理圖畫了幾十年的老師傅,而是指曾在專業(yè)IC公司做過(guò)一段時(shí)間的人,,好的專業(yè)IC公司可以接觸國(guó)內(nèi)外最新的設(shè)計(jì)思想,,在他們的幫助下,起點(diǎn)就可以比其他人高不少,,更重要的是你可以學(xué)習(xí)邏輯設(shè)計(jì)思想性的東西,!如果你的師傅經(jīng)常跟你說(shuō)畫原理圖的好處,你還是重新找過(guò)師父算了--用原理圖設(shè)計(jì)是一種很落后的方式,,即使他們可能會(huì)說(shuō)可以系統(tǒng)級(jí)設(shè)計(jì)(專業(yè)的IC設(shè)計(jì)公司系統(tǒng)級(jí)設(shè)計(jì)絕對(duì)是由方案保證的,,而不會(huì)靠原理圖這鬼東西)更為清淅。
     
     第三要看一些好的資料,。RTL級(jí)的書中《Verilog 硬件描述語(yǔ)言》,、EDA先鋒寫的那幾本書都還可以,還有不得不提的是cliff的一些paper;驗(yàn)證方面入門可以看下《Writting Testbenches》,, 提高可以看下snug(Synopsys的用戶論壇,,里面的文章基本上反映了業(yè)界的領(lǐng)先水平)的paper;系統(tǒng)級(jí)的可以看看《片上系統(tǒng)-可重用性設(shè)計(jì)方法學(xué)》,。
     
     第四要自己多總結(jié),,多動(dòng)腦筋。邏輯設(shè)計(jì)的東西其實(shí)本質(zhì)上的東西并不多:把RTL級(jí)的常用的D觸發(fā)器、計(jì)數(shù)器,、移位寄存器,、狀態(tài)機(jī)、多路選擇器等基本的電路標(biāo)準(zhǔn)化,、固定化,;先做方案再寫代碼;設(shè)計(jì)時(shí)序,;知道約束原理及怎么加約束,;劃分模塊時(shí)知道怎么做到時(shí)序收斂;做驗(yàn)證的時(shí)候熟悉相應(yīng)語(yǔ)言的行為級(jí)描述(這個(gè)肯定比RTL級(jí)好學(xué)多了)然后就是理解testbench的結(jié)構(gòu)化設(shè)計(jì),。把這些東西的本質(zhì)都搞清楚了做個(gè)合格的邏輯工程師應(yīng)該是綽綽有余了,,呵呵。
     
     在接下來(lái)的部分我主要就第四點(diǎn)隨便說(shuō)點(diǎn)自己的經(jīng)驗(yàn),,說(shuō)的不好還請(qǐng)大家批評(píng)指正,。

入門前
                                            
     剛才開始接觸邏輯設(shè)計(jì)很多人會(huì)覺(jué)得很簡(jiǎn)單:因?yàn)関erilog的語(yǔ)法不多,半天就可以把書看完了,。但是很快許多人就發(fā)現(xiàn)這個(gè)想法是錯(cuò)誤的,,他們經(jīng)常埋怨綜合器怎么和自己的想法差別這么大:它竟然連用for循環(huán)寫的一個(gè)計(jì)數(shù)器都不認(rèn)識(shí)!
     
     相信上一段的經(jīng)歷大部分人都曾有,,原因是做邏輯設(shè)計(jì)的思維和做軟件的很不相同,,我們需要從電路的角度去考慮問(wèn)題。
     
     在這個(gè)過(guò)程中首先要明白的是軟件設(shè)計(jì)和邏輯設(shè)計(jì)的不同,,并理解什么是硬件意識(shí),。
     
     軟件代碼的執(zhí)行是一個(gè)順序的過(guò)程,編繹以后的機(jī)器碼放在存儲(chǔ)器里,,等著CPU一條一條的取指并執(zhí)行,;因此軟件設(shè)計(jì)中經(jīng)常會(huì)帶有順序處理的思維。而邏輯設(shè)計(jì)則不同,,我們?cè)O(shè)計(jì)的是數(shù)字電路,它是由很多很多的與非門及D觸發(fā)器構(gòu)成的,,上電之后所有與非門和D觸發(fā)器都同時(shí)工作,,不會(huì)因?yàn)锳觸發(fā)器的代碼描述在B觸發(fā)器之前A觸發(fā)器就是先工作,事實(shí)上,,RTL級(jí)代碼的代碼先后順序在綜合成網(wǎng)表文件后這種順序就消失了,,取代的是基本邏輯電路之間的互聯(lián)關(guān)系描述;因此邏輯設(shè)計(jì)需要的是一種并發(fā)的思維,,我們也需要用并發(fā)的思維去考慮電路的設(shè)計(jì),。
     
     當(dāng)然,我們?cè)O(shè)計(jì)的電路功能一般都有先后順序的關(guān)系,如果這種順序不能通過(guò)代碼的先后順序來(lái)實(shí)現(xiàn),,那么要怎么完成這一功能呢,?在邏輯設(shè)計(jì)中,我們所說(shuō)的先后順序都是基于時(shí)間軸來(lái)實(shí)現(xiàn):它的承載體就是時(shí)序邏輯,,也就是那些觸發(fā)器,。
     
     硬件意識(shí)的東西網(wǎng)上談?wù)摰囊呀?jīng)很多,這里就不再多說(shuō)了,。
     
     其次就是要熟悉基本電路的設(shè)計(jì),。
     
     基本的電路不是很多,也就是D觸發(fā)器,、計(jì)數(shù)器,、移位寄存器、狀態(tài)機(jī),、多路選擇器,、譯碼器等幾種,所有復(fù)雜的電路都可由這些基本的電路構(gòu)成,。高手水平高的體現(xiàn)并不是他能寫出一些很奇特的電路,,相反,水平高是體現(xiàn)在他們總能將復(fù)雜的電路用這些很樸素的基本電路去描述,。甚至,,你會(huì)發(fā)現(xiàn)他們的代碼基本上是由if...else、case這些語(yǔ)句構(gòu)成的,,樸素的讓你覺(jué)得奇怪,。
     
     我認(rèn)為,初學(xué)者在入門

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。