⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)
您的(de)當前(qián)位置:主(zhǔ)页(yè)-old > 教程中(zhōng)心(xīn) > 認識FPGA >

在(zài)低成(chéng)本(běn)FPGA開(kāi)發(fà)板上(shàng)实現(xiàn)Oberon系(xì)統

發(fà)布(bù)时(shí)間(jiān):2023-06-30   作者(zhě):FPGA大神 浏覽量(liàng):
 1988年(nián),Jürg Gutknecht和(hé)我(wǒ)一(yī)起完成(chéng)并出(chū)版了(le)Oberon編程語(yǔ)言[1,2],其为(wèi)我(wǒ)職業生(shēng)涯早(zǎo)期(qī)開(kāi)發(fà)的(de)另(lìng)外(wài)两(liǎng)種(zhǒng)編程語(yǔ)言Pascal和(hé)Modula-2的(de)後(hòu)續版本(běn)。與(yǔ)Modula-2相比,我(wǒ)们(men)最(zuì)初設計(jì)Oberon編程語(yǔ)言力求更(gèng)加精簡和(hé)高(gāo)效,以(yǐ)便能(néng)够更(gèng)好(hǎo)地(dì)幫助教学人(rén)員为(wèi)計(jì)算機(jī)科学專業的(de)学生(shēng)教授系(xì)統編程。我(wǒ)们(men)再接再勵,于(yú)1990年(nián)針(zhēn)对(duì)可(kě)采用(yòng)windows系(xì)統和(hé)具有(yǒu)字(zì)处理能(néng)力的(de)工作站開(kāi)發(fà)了(le)Oberon操作系(xì)統(OS),以(yǐ)此(cǐ)作为(wèi)工作站的(de)現(xiàn)代(dài)实現(xiàn)方(fāng)式。接着,我(wǒ)们(men)出(chū)版了(le)一(yī)本(běn)書(shū),名为(wèi)《Project Oberon》,詳细(xì)講解(jiě)了(le)Oberon編譯器以(yǐ)及(jí)與(yǔ)之同(tóng)名的(de)操作系(xì)統。此(cǐ)外(wài),書(shū)中(zhōng)還(huán)包(bāo)括詳细(xì)的(de)指令和(hé)源代(dài)碼。
  幾(jǐ)年(nián)前(qián),我(wǒ)的(de)朋友Paul Reed建議我(wǒ)重(zhòng)新修訂并再次(cì)出(chū)版这(zhè)本(běn)書(shū),不(bù)僅因(yīn)为(wèi)这(zhè)本(běn)書(shū)对(duì)系(xì)統設計(jì)教学具有(yǒu)重(zhòng)要(yào)價值,同(tóng)时(shí)還(huán)因(yīn)为(wèi)这(zhè)本(běn)書(shū)可(kě)以(yǐ)作为(wèi)良好(hǎo)的(de)切(qiè)入(rù)點(diǎn),幫助那(nà)些想(xiǎng)要(yào)成(chéng)为(wèi)創新者(zhě)的(de)人(rén)们(men)從零(líng)基礎構建可(kě)靠的(de)系(xì)統。
  然而(ér),我(wǒ)當时(shí)实際上(shàng)是(shì)遇到(dào)了(le)很大的(de)困難。我(wǒ)最(zuì)初開(kāi)發(fà)的(de)編譯器是(shì)将已基本(běn)消失了(le)的(de)处理器作为(wèi)目标(biāo)。因(yīn)此(cǐ),我(wǒ)的(de)解(jiě)決辦(bàn)法就(jiù)是(shì)为(wèi)現(xiàn)代(dài)处理器重(zhòng)新編写編譯器。但在(zài)做了(le)不(bù)少(shǎo)研究之後(hòu),我(wǒ)无法找(zhǎo)到(dào)一(yī)款能(néng)够在(zài)清(qīng)晰度(dù)、規律性(xìng)和(hé)簡潔性(xìng)上(shàng)符合我(wǒ)标(biāo)準的(de)处理器。因(yīn)此(cǐ),我(wǒ)自(zì)己設計(jì)了(le)这(zhè)款編譯器。而(ér)我(wǒ)之所(suǒ)以(yǐ)能(néng)够将該想(xiǎng)法付诸实現(xiàn),都是(shì)因(yīn)为(wèi)現(xiàn)代(dài)FPGA能(néng)够幫助我(wǒ)設計(jì)硬(yìng)件(jiàn)以(yǐ)及(jí)系(xì)統软(ruǎn)件(jiàn)。
  選擇赛靈思(sī) FPGA能(néng)幫助我(wǒ)更(gèng)新系(xì)統,同(tóng)时(shí)讓設計(jì)盡可(kě)能(néng)接近(jìn)自(zì)1990年(nián)以(yǐ)来(lái)的(de)原始版本(běn)。更(gèng)重(zhòng)要(yào)的(de)是(shì),選擇赛靈思(sī)FPGA 能(néng)幫助我(wǒ)更(gèng)新系(xì)統,同(tóng)时(shí)讓設計(jì)盡可(kě)能(néng)接近(jìn)自(zì)1990年(nián)以(yǐ)来(lái)的(de)原始版本(běn)。
  实現(xiàn)在(zài)低成(chéng)本(běn)Digilent Spartan-3開(kāi)發(fà)板上(shàng)的(de)新型处理器RISC負責托管(guǎn)1MB静(jìng)态RAM (SRAM)內(nèi)存。我(wǒ)唯一(yī)添加的(de)系(xì)統硬(yìng)件(jiàn)就(jiù)是(shì)一(yī)个(gè)鼠标(biāo)接口(kǒu)和(hé)一(yī)个(gè)用(yòng)来(lái)替換旧(jiù)系(xì)統中(zhōng)硬(yìng)盤驅動(dòng)器的(de)SD卡(kǎ)。

  这(zhè)本(běn)書(shū)和(hé)面(miàn)向(xiàng)整个(gè)系(xì)統的(de)源代(dài)碼可(kě)在(zài)projectoberon.com[3,4,5]中(zhōng)查閱,也(yě)可(kě)在(zài)該网(wǎng)站上(shàng)名为(wèi) S3RISCinstall.zip.的(de)單个(gè)文(wén)件(jiàn)中(zhōng)進(jìn)行查閱。該文(wén)件(jiàn)包(bāo)含指令、SD卡(kǎ)文(wén)件(jiàn)系(xì)統图(tú)像和(hé)FPGA配置比特(tè)文(wén)件(jiàn)(对(duì)于(yú)Spartan-3開(kāi)發(fà)板的(de) Platform Flash,此(cǐ)为(wèi)PROM文(wén)件(jiàn)形式),以(yǐ)及(jí)SD卡(kǎ)/鼠标(biāo)接口(kǒu)硬(yìng)件(jiàn)的(de)構造詳图(tú)。 


RISC处理器

  該处理器由(yóu)算術(shù)邏輯單元(yuán)、由(yóu)16个(gè)32位寄存器組成(chéng)的(de)阵(zhèn)列和(hé)带(dài)指令寄存器、IR及(jí)程序計(jì)數器PC的(de)控制單元(yuán)組成(chéng)。Verilog模块(kuài)RISC5就(jiù)是(shì)該处理器的(de)典型代(dài)表(biǎo)。

  該处理器具有(yǒu)20種(zhǒng)指令:4種(zhǒng)用(yòng)于(yú)移動(dòng)、偏移和(hé)旋轉(zhuǎn);4種(zhǒng)用(yòng)于(yú)邏輯運算;4種(zhǒng)用(yòng)于(yú)整數運算;4種(zhǒng)用(yòng)于(yú)浮點(diǎn)運算;2種(zhǒng)用(yòng)于(yú)存儲器訪問(wèn);2種(zhǒng)用(yòng)于(yú)分(fēn)支。

  RISC5通(tòng)过(guò)運行环(huán)境RISC5Top導入(rù)。該運行环(huán)境包(bāo)括到(dào)各(gè)種(zhǒng)(內(nèi)存映射)器件(jiàn)和(hé)SRAM(256M×32 位)的(de)接口(kǒu)。

  整个(gè)系(xì)統(图(tú)1)包(bāo)括以(yǐ)下(xià)Verilog模块(kuài)(見(jiàn)行統計(jì))

RISC5Top

運行环(huán)境

194

RISC5

处理器

201

乘法器

整數運算

47

除法器


24

FP加法器

浮點(diǎn)運算

98

FP乘法器


33

FP除法器


35

SPI

SD卡(kǎ)和(hé)發(fà)送器/接收(shōu)器

25

VID

1024×768 視頻控制器

73

PS2

鍵盤

25

鼠标(biāo)

鼠标(biāo)

95

RS232T

RS232 發(fà)送器

23

RS232R

RS232 接收(shōu)器

25



图(tú)1 – 該系(xì)統及(jí)其所(suǒ)含Verilog模块(kuài)的(de)方(fāng)框图(tú)


我(wǒ)将內(nèi)存映射到(dào)黑(hēi)白VGA顯示器中(zhōng),这(zhè)樣(yàng)它(tā)只(zhī)占用(yòng)1024×768×1 位/像素=98304字(zì)节(jié),基本(běn)上(shàng)
占 1 MB可(kě)用(yòng)主(zhǔ)內(nèi)存的(de)10%。該SD卡(kǎ)将取(qǔ)代(dài)初始系(xì)統中(zhōng)80MB的(de)硬(yìng)盤驅動(dòng)器,其可(kě)通(tòng)过(guò)能(néng)够接受并序列化(huà)字(zì)节(jié)或(huò)32位字(zì)的(de)标(biāo)準SPI接口(kǒu)進(jìn)行存取(qǔ)。鍵盤和(hé)鼠标(biāo)通(tòng)过(guò)标(biāo)準PS-2串行接口(kǒu)連(lián)接。此(cǐ)外(wài),還(huán)提(tí)供一(yī)根(gēn)串行异(yì)步的(de)RS-232線(xiàn)和(hé)一(yī)个(gè)通(tòng)用(yòng)8位并行的(de)I/O接口(kǒu)。模块(kuài)RISC5Top還(huán)带(dài)有(yǒu)一(yī)个(gè)每毫(háo)秒(miǎo)采用(yòng)增量(liàng)式計(jì)數的(de)計(jì)數器。

OBERON操作系(xì)統

  該操作系(xì)統软(ruǎn)件(jiàn)由(yóu)包(bāo)括內(nèi)存分(fēn)配器(带(dài)垃圾回(huí)收(shōu)器)的(de)內(nèi)核、文(wén)件(jiàn)系(xì)統以(yǐ)及(jí)引導载入(rù)程序、文(wén)本(běn)系(xì)統、浏覽器系(xì)統和(hé)文(wén)本(běn)編輯器組成(chéng)。

  名为(wèi)“Oberon”的(de)模块(kuài)是(shì)中(zhōng)心(xīn)任务調度(dù)程序,而(ér)“System”是(shì)基礎命令模块(kuài)。通(tòng)过(guò)點(diǎn)擊顯示器上(shàng)任何浏覽器文(wén)本(běn)“M.P”上(shàng)的(de)中(zhōng)間(jiān)按鈕即可(kě)觸發(fà)動(dòng)作,其中(zhōng)P是(shì)模块(kuài)M聲明(míng)的(de)程序名。如(rú)果(guǒ)M不(bù)存在(zài),則会(huì)自(zì)動(dòng)加载。但是(shì),大多(duō)數文(wén)本(běn)編輯命令是(shì)通(tòng)过(guò)簡單的(de)鼠标(biāo)點(diǎn)擊觸發(fà)的(de)。

  其中(zhōng),左(zuǒ)邊(biān)一(yī)欄按鈕用(yòng)来(lái)設置"脫字(zì)"符,标(biāo)記(jì)文(wén)本(běn)位置,右(yòu)邊(biān)一(yī)欄按鈕用(yòng)来(lái)選擇文(wén)本(běn)字(zì)段(duàn)(text stretch)。

  “Kernel”模块(kuài)包(bāo)括磁盤存儲管(guǎn)理和(hé)垃圾回(huí)收(shōu)器。我(wǒ)保證观察浏覽器是(shì)平鋪的(de),不(bù)重(zhòng)疊。标(biāo)準布(bù)局(jú)顯示了(le)多(duō)个(gè)浏覽器的(de)两(liǎng)条(tiáo)垂直(zhí)軌迹。只(zhī)需拖動(dòng)标(biāo)題(tí)欄,就(jiù)可(kě)以(yǐ)放(fàng)大、縮小或(huò)移動(dòng)它(tā)们(men)。图(tú)2顯示了(le)在(zài)顯示器上(shàng)運行的(de)用(yòng)戶界面(miàn)以(yǐ)及(jí)Spartan-3開(kāi)發(fà)板、鍵盤及(jí)鼠标(biāo)。


图(tú)2 - 顯示用(yòng)戶界面(miàn)的(de)顯示器(Spartan-3開(kāi)發(fà)板在(zài)右(yòu)側)

加载时(shí)系(xì)統占用(yòng)模块(kuài)空間(jiān)112640字(zì)节(jié)(21%),占堆(duī)(heap)的(de)16128字(zì)节(jié)(3%)。系(xì)統包(bāo)括所(suǒ)以(yǐ)下(xià)幾(jǐ)个(gè)模块(kuài)(見(jiàn)行統計(jì)),如(rú)图(tú)3所(suǒ)示:

內(nèi)核

271

(內(nèi)核)

文(wén)件(jiàn)目录(lù)

352


文(wén)件(jiàn)

505


模块(kuài)(引導载入(rù)程序)

226


浏覽器

216

(外(wài)核)

文(wén)本(běn)

532


Oberon

411


菜單浏覽器

208


文(wén)本(běn)幀

874


系(xì)統

420


編輯

233



图(tú)3 - 系(xì)統及(jí)其模块(kuài)

  值得注意(yì)的(de)是(shì),該系(xì)統在(zài)加電(diàn)或(huò)重(zhòng)置时(shí),完成(chéng)初始化(huà)僅需两(liǎng)秒(miǎo)鐘(zhōng)。这(zhè)包(bāo)括文(wén)件(jiàn)目录(lù)中(zhōng)垃圾回(huí)收(shōu)掃描。

OBERON編譯器

  系(xì)統自(zì)带(dài)的(de)編譯器采用(yòng)簡單的(de)自(zì)上(shàng)而(ér)下(xià)遞歸下(xià)降分(fēn)析法。用(yòng)戶使用(yòng)ORP.Compile @命令即可(kě)激活模块(kuài)選定(dìng)的(de)源文(wén)本(běn)上(shàng)的(de)編譯器。

  包(bāo)解(jiě)析器通(tòng)过(guò)掃描儀輸入(rù)各(gè)種(zhǒng)符号(hào),包(bāo)括識别符、數字(zì)和(hé)特(tè)殊符号(hào)(如(rú)BEGIN、END、+等)。該方(fāng)案(àn)已被(bèi)證明(míng)在(zài)许多(duō)應(yìng)用(yòng)中(zhōng)有(yǒu)效且均表(biǎo)現(xiàn)不(bù)凡。这(zhè)點(diǎn)在(zài)我(wǒ)著的(de)書(shū)《編譯器結構》[6,7]中(zhōng)有(yǒu)詳细(xì)说(shuō)明(míng)。

  該包(bāo)解(jiě)析器調用(yòng)代(dài)碼生(shēng)成(chéng)程序模块(kuài)中(zhōng)的(de)程序。这(zhè)些程序直(zhí)接将指令添加在(zài)代(dài)碼阵(zhèn)列上(shàng)。如(rú)果(guǒ)已知所(suǒ)有(yǒu)分(fēn)支目的(de)地(dì),向(xiàng)前(qián)跳轉(zhuǎn)指令(forward-branch instructions)在(zài)模块(kuài)編譯結束(shù)时(shí)則会(huì)提(tí)供跳轉(zhuǎn)地(dì)址(修正(zhèng))。

  所(suǒ)有(yǒu)可(kě)變(biàn)地(dì)址都與(yǔ)基址寄存器關(guān)聯。这(zhè)就(jiù)是(shì)用(yòng)于(yú)局(jú)部(bù)變(biàn)量(liàng)(運行时(shí)設置在(zài)程序輸入(rù))的(de)R14(堆(duī)棧指示器)或(huò)用(yòng)于(yú)全(quán)局(jú)和(hé)輸入(rù)變(biàn)量(liàng)的(de)R13。

  基址地(dì)址按要(yào)求通(tòng)过(guò)地(dì)址保存在(zài)寄存器R12內(nèi)的(de)系(xì)統全(quán)局(jú)模块(kuài)表(biǎo)载入(rù)。R15用(yòng)于(yú)RISC架構确定(dìng)的(de)返回(huí)地(dì)址(鍊(liàn)接)。因(yīn)此(cǐ),R0-R11可(kě)用(yòng)于(yú)表(biǎo)达(dá)式評估和(hé)傳遞过(guò)程參數。

  整个(gè)編譯器由(yóu)4个(gè)相对(duì)較小的(de)有(yǒu)效模块(kuài)組成(chéng)(見(jiàn)行統計(jì)):

ORP
包(bāo)解(jiě)析器
968
ORG
代(dài)碼生(shēng)成(chéng)器
1120
ORB
base def
435
ORS
掃描儀
311



編譯器占用(yòng)115912字(zì)节(jié)(22%)的(de)模块(kuài)空間(jiān)和(hé)17508字(zì)节(jié)(4%)的(de)堆(duī)空間(jiān)(編譯之前(qián))。其源代(dài)碼长約65KB。編譯器自(zì)身(shēn)的(de)編譯在(zài)25 MHz RISC处理器上(shàng)只(zhī)需幾(jǐ)秒(miǎo)鐘(zhōng)[8]。

 Lola HDL及(jí)Verilog翻譯

  名为(wèi)Lola的(de)硬(yìng)件(jiàn)描述語(yǔ)言(HDL)于(yú)1990年(nián)作为(wèi)硬(yìng)件(jiàn)設計(jì)基礎教学的(de)一(yī)種(zhǒng)方(fāng)式開(kāi)發(fà)。这(zhè)一(yī)时(shí)期(qī),文(wén)本(běn)定(dìng)義開(kāi)始替代(dài)電(diàn)路(lù)图(tú),首个(gè)FPGA開(kāi)始應(yìng)用(yòng),盡管(guǎn)尚未达(dá)到(dào)主(zhǔ)流設計(jì)。Lola由(yóu)生(shēng)成(chéng)位流文(wén)件(jiàn)(被(bèi)加载到(dào)FPGA)的(de)編譯器執行。位流文(wén)件(jiàn)格式由(yóu)Algotronix公司和(hé) Concurrent Logic 公司共(gòng)同(tóng)開(kāi)發(fà)。这(zhè)两(liǎng)家(jiā)公司提(tí)供的(de)存儲單元(yuán)結構都比較簡單,看(kàn)起来(lái)好(hǎo)像是(shì)自(zì)動(dòng)布(bù)局(jú)布(bù)線(xiàn)的(de)最(zuì)佳選擇。

  在(zài)我(wǒ)的(de)項目之後(hòu),緊接着是(shì)在(zài)FPGA上(shàng)重(zhòng)新实現(xiàn)Oberon系(xì)統,現(xiàn)在(zài)突然出(chū)現(xiàn)这(zhè)種(zhǒng)想(xiǎng)法以(yǐ)喚醒Lola。由(yóu)于(yú)赛靈思(sī) FPGA存儲單元(yuán)結構相當簡單,所(suǒ)以(yǐ)我(wǒ)们(men)沒(méi)有(yǒu)冒险实現(xiàn)布(bù)局(jú)布(bù)線(xiàn),更(gèng)何況赛靈思(sī)因(yīn)專利原因(yīn)而(ér)拒絕透露(lù)其位流文(wén)件(jiàn)格式这(zhè)一(yī)事(shì)实。

  很明(míng)顯,要(yào)建立不(bù)生(shēng)成(chéng)專有(yǒu)位流文(wén)件(jiàn)但翻譯成(chéng)赛靈思(sī)能(néng)为(wèi)其提(tí)供綜合工具的(de)語(yǔ)言的(de)Lola編譯器。我(wǒ)们(men)選擇了(le)Verilog。这(zhè)種(zhǒng)解(jiě)決方(fāng)法意(yì)味着迂回(huí)繞路(lù)相當浪費:首先(xiān),Lola模块(kuài)已經(jīng)經(jīng)过(guò)包(bāo)解(jiě)析,然後(hòu)翻譯,然後(hòu)再次(cì)包(bāo)解(jiě)析。通(tòng)过(guò)所(suǒ)有(yǒu)这(zhè)些措施,我(wǒ)们(men)确信(xìn)Lola編譯器具有(yǒu)适當的(de)錯誤報告和(hé)類(lèi)型一(yī)致(zhì)性(xìng)檢查功能(néng)。

  为(wèi)促進(jìn)Lola-2的(de)開(kāi)發(fà),我(wǒ)们(men)決心(xīn)用(yòng)Lola重(zhòng)新定(dìng)義所(suǒ)有(yǒu)RISC5处理器模块(kuài)。現(xiàn)在(zài),这(zhè)已經(jīng)实現(xiàn)了(le)。

LOLA語(yǔ)言

  Lola是(shì)一(yī)種(zhǒng)Oberon风格的(de)短(duǎn)小而(ér)精煉的(de)程序語(yǔ)言(見(jiàn)http://www.inf.ethz.ch/personal/wirth/Lola/Lola2.pdf)。为(wèi)簡單起見(jiàn),我(wǒ)们(men)在(zài)这(zhè)里(lǐ)只(zhī)展(zhǎn)示一(yī)个(gè)簡單的(de)Lola文(wén)本(běn)实例。源文(wén)本(běn)單元(yuán)被(bèi)稱为(wèi)模块(kuài)。其報头(tóu)規定(dìng)了(le)名稱及(jí)其輸入(rù)和(hé)輸出(chū)參數,以(yǐ)及(jí)各(gè)參數的(de)名稱和(hé)類(lèi)型。

  MODULE Counter0 (IN CLK50M, rstIn: BIT;

  IN swi: BYTE; OUT leds: BYTE);

  TYPE IBUFG: = MODULE (IN I: BIT; OUT O: BIT)^; VAR clk, tick0, tick1: BIT;

  clkInBuf: IBUFG; REG (clk) rst: BIT;

  cnt0: [16] BIT; (*半毫(háo)秒(miǎo)*)

  cnt1: [10] BIT; (*半秒(miǎo)*)

  cnt2: BYTE;

  BEGIN leds:= swi.7 ->swi : swi.0 -> cnt1[9:2]:cnt2;

  tick0:= (cnt0 = 49999);

  tick1:= tick0 & (cnt1 =499); rst:= ~rstIn;

  cnt0:= ~rst -> 0: tick0 ->0 : cnt0 + 1; cnt1 := ~rst -> 0 : tick1 -> 0 : cnt1 +tick0; cnt2 := ~rst -> 0 : cnt2 + tick1;

  clkInBuf (CLK50M,clk) END Counter0.

  編譯器通(tòng)常使用(yòng)值为(wèi)NIL的(de)指示檢查數組索引和(hé)基準值。如(rú)果(guǒ)違反(fǎn)規定(dìng),这(zhè)会(huì)造成(chéng)陷阱。这(zhè)種(zhǒng)技術(shù)具有(yǒu)高(gāo)度(dù)的(de)安(ān)全(quán)性(xìng),防止錯誤和(hé)崩潰。事(shì)实上(shàng),只(zhī)能(néng)通(tòng)过(guò)采用(yòng)僞模块(kuài)SYSTEM中(zhōng)的(de)操作,即PUT和(hé)COPY,才能(néng)防礙系(xì)統的(de)完整性(xìng)。

  这(zhè)些操作必須局(jú)限于(yú)接入(rù)器件(jiàn)接口(kǒu)的(de)驅動(dòng)模块(kuài)。在(zài)輸入(rù)列表(biǎo)中(zhōng),通(tòng)过(guò)SYSTEM很容易識别它(tā)们(men)。整个(gè)系(xì)統采用(yòng)Oberon編程,无需使用(yòng)彙編碼。

  我(wǒ)選擇Digilent Spartan-3 開(kāi)發(fà)板是(shì)由(yóu)于(yú)其成(chéng)本(běn)低、操作簡便,这(zhè)使其适于(yú)教育機(jī)構,以(yǐ)獲得整套(tào)課堂教学套(tào)件(jiàn)。

  一(yī)个(gè)重(zhòng)大优勢就(jiù)是(shì)該開(kāi)發(fà)板上(shàng)有(yǒu)静(jìng)态RAM,使得接口(kǒu)連(lián)接非(fēi)常簡單直(zhí)观(甚至(zhì)用(yòng)于(yú)字(zì)节(jié)選擇)。遺憾的(de)是(shì),所(suǒ)有(yǒu)新開(kāi)發(fà)板均采用(yòng)動(dòng)态RAM,虽然存儲空間(jiān)更(gèng)大,但接口(kǒu)連(lián)接複雜得多(duō),因(yīn)此(cǐ)刷新和(hé)初始化(huà)(校(xiào)準)需要(yào)電(diàn)路(lù)。这(zhè)一(yī)電(diàn)路(lù)與(yǔ)带(dài)静(jìng)态RAM的(de)整个(gè)处理器一(yī)樣(yàng)複雜。即使控制器以(yǐ)單片(piàn)式提(tí)供,这(zhè)有(yǒu)悖于(yú)我(wǒ)们(men)的(de)開(kāi)放(fàng)檢查原則。

  報头(tóu)之後(hòu)是(shì)一(yī)段(duàn)包(bāo)含本(běn)地(dì)对(duì)象(xiàng)(如(rú)變(biàn)量(liàng)和(hé)寄存器)的(de)聲明(míng)。之後(hòu)一(yī)段(duàn)通(tòng)过(guò)賦值規定(dìng)變(biàn)量(liàng)和(hé)寄存器數值。BYTE表(biǎo)示一(yī)个(gè)8位阵(zhèn)列。
  每一(yī)个(gè)變(biàn)量(liàng)和(hé)寄存器通(tòng)过(guò)唯一(yī)一(yī)種(zhǒng)表(biǎo)达(dá)式(組合電(diàn)路(lù))進(jìn)行定(dìng)義。多(duō)重(zhòng)賦值沒(méi)有(yǒu)任何意(yì)義。可(kě)以(yǐ)想(xiǎng)象(xiàng),每个(gè)HDL程序包(bāo)含在(zài)一(yī)个(gè)大的(de)永遠(yuǎn)重(zhòng)複子句(jù)中(zhōng),因(yīn)为(wèi)寄存器和(hé)變(biàn)量(liàng)賦值会(huì)在(zài)每一(yī)个(gè)同(tóng)步时(shí)鐘(zhōng)脈沖周期(qī)內(nèi)重(zhòng)複。

LOLA編譯器

  編譯器采用(yòng)簡單的(de)自(zì)上(shàng)而(ér)下(xià)遞歸下(xià)降分(fēn)析法。通(tòng)过(guò)LSC.Compile @命令在(zài)所(suǒ)選Lola源文(wén)本(běn)上(shàng)激活該編譯器。包(bāo)分(fēn)析器包(bāo)解(jiě)析器通(tòng)过(guò)掃描儀輸入(rù)各(gè)種(zhǒng)符号(hào),包(bāo)括識别符、數字(zì)和(hé)特(tè)殊符号(hào)(如(rú)BEGIN、END、+等)。該方(fāng)案(àn)已被(bèi)證明(míng)在(zài)许多(duō)應(yìng)用(yòng)中(zhōng)有(yǒu)效且表(biǎo)現(xiàn)不(bù)凡。这(zhè)在(zài)我(wǒ)著的(de)書(shū)《編譯器結構》 (第(dì)1部(bù)分(fēn)和(hé)第(dì)2部(bù)分(fēn))中(zhōng)有(yǒu)詳细(xì)说(shuō)明(míng)。

  而(ér)不(bù)是(shì)直(zhí)接即时(shí)生(shēng)成(chéng)Verilog文(wén)本(běn),作为(wèi)語(yǔ)法分(fēn)析的(de)一(yī)種(zhǒng)意(yì)外(wài)結果(guǒ),包(bāo)分(fēn)析器中(zhōng)会(huì)出(chū)現(xiàn)語(yǔ)句(jù),從而(ér)生(shēng)成(chéng)樹(shù)形結構,以(yǐ)适當方(fāng)式表(biǎo)示輸入(rù)文(wén)本(běn),以(yǐ)便進(jìn)一(yī)步处理。这(zhè)種(zhǒng)結構具有(yǒu)一(yī)个(gè)优點(diǎn),即通(tòng)过(guò)調用(yòng)不(bù)同(tóng)翻譯程序很容易生(shēng)成(chéng)各(gè)種(zhǒng)不(bù)同(tóng)的(de)輸出(chū)。其中(zhōng)一(yī)个(gè)就(jiù)是(shì)Verilog翻譯程序。命令为(wèi) LSV. List outputfile.v。另(lìng)一(yī)个(gè)命令可(kě)能(néng)翻譯至(zhì)VHDL或(huò)簡單地(dì)列出(chū)樹(shù)形結構。但也(yě)有(yǒu)可(kě)能(néng)生(shēng)成(chéng)网(wǎng)表(biǎo),以(yǐ)便通(tòng)过(guò)布(bù)局(jú)器和(hé)布(bù)線(xiàn)器進(jìn)行進(jìn)一(yī)步处理。

  因(yīn)此(cǐ),整个(gè)編譯器至(zhì)少(shǎo)包(bāo)括4个(gè)相对(duì)較小的(de)高(gāo)效模块(kuài)組成(chéng)(線(xiàn)數顯示):

LSS

掃描儀

159



LSB

基址

52



LSC

編譯器/包(bāo)解(jiě)析器

503



LSV

Verilog 生(shēng)成(chéng)器

215








  可(kě)在(zài)http://www.inf.ethz.ch/personal/wirth/Lola/Lola-Compiler.pdf查閱從Lola翻譯至(zhì)Verilog的(de)指令。

  软(ruǎn)件(jiàn)與(yǔ)硬(yìng)件(jiàn)‘程序’之間(jiān)的(de)差异(yì)

  在(zài)过(guò)去(qù),已進(jìn)行许多(duō)努力使HDL看(kàn)起来(lái)像“普通(tòng)”編程語(yǔ)言(PL)。我(wǒ)们(men)還(huán)注意(yì)到(dào),HDL在(zài)編程語(yǔ)言集中(zhōng)通(tòng)常有(yǒu)一(yī)个(gè)对(duì)應(yìng)程序,各(gè)自(zì)采用(yòng)不(bù)同(tóng)风格。因(yīn)此(cǐ),Verilog在(zài)C、VHDL在(zài)Ada,以(yǐ)及(jí)Lola在(zài) Oberon中(zhōng)都有(yǒu)其各(gè)自(zì)的(de)原型。我(wǒ)们(men)認为(wèi),認識到(dào)两(liǎng)个(gè)類(lèi)别之間(jiān)的(de)根(gēn)本(běn)差异(yì)是(shì)非(fēi)常重(zhòng)要(yào)的(de),特(tè)别是(shì)存在(zài)句(jù)法相似或(huò)幾(jǐ)乎相同(tóng)的(de)时(shí)候。这(zhè)些根(gēn)本(běn)差异(yì)是(shì)什麼(me)?

  为(wèi)了(le)簡化(huà)说(shuō)明(míng),我(wǒ)们(men)僅分(fēn)析同(tóng)步電(diàn)路(lù) - 即,所(suǒ)有(yǒu)寄存器與(yǔ)时(shí)鐘(zhōng)同(tóng)樣(yàng)發(fà)出(chū)滴(dī)答(dá)聲的(de)電(diàn)路(lù)。總(zǒng)體(tǐ)来(lái)说(shuō),这(zhè)确实是(shì)一(yī)種(zhǒng)良好(hǎo)的(de)設計(jì)模式,如(rú)果(guǒ)可(kě)能(néng)的(de)話(huà),附在(zài)同(tóng)步電(diàn)路(lù)上(shàng)。那(nà)麼(me),很明(míng)顯,一(yī)个(gè)電(diàn)路(lù)的(de)所(suǒ)有(yǒu)元(yuán)件(jiàn)同(tóng)时(shí)(或(huò)幾(jǐ)乎同(tóng)时(shí))工作。

  这(zhè)是(shì)John von Neumann 提(tí)出(chū)带(dài)定(dìng)序器的(de)处理器體(tǐ)系(xì)結構的(de)巧妙構思(sī)。定(dìng)序器含有(yǒu)指令寄存器,據(jù)此(cǐ),(各(gè)个(gè)周期(qī)中(zhōng))某些電(diàn)路(lù)会(huì)被(bèi)選用(yòng)而(ér)其他(tā)電(diàn)路(lù)会(huì)被(bèi)忽略,從而(ér)巧妙地(dì)重(zhòng)新利用(yòng)(ALU)不(bù)同(tóng)部(bù)件(jiàn)。現(xiàn)在(zài),周期(qī)或(huò)步驟已成(chéng)为(wèi)固有(yǒu)順序,并有(yǒu)可(kě)能(néng)将數值重(zhòng)新分(fēn)配到(dào)同(tóng)一(yī)个(gè)變(biàn)量(liàng),因(yīn)为(wèi)程序計(jì)數器将它(tā)们(men)與(yǔ)程序中(zhōng)和(hé)指令序列中(zhōng)的(de)某些次(cì)序關(guān)聯起来(lái)。真(zhēn)是(shì)这(zhè)種(zhǒng)定(dìng)序器構思(sī)使得通(tòng)过(guò)相对(duì)簡單電(diàn)路(lù)執行龐大程序成(chéng)为(wèi)可(kě)能(néng)。

  總(zǒng)之,Lola-2是(shì)PL Oberon风格下(xià)的(de)HDL。这(zhè)里(lǐ)所(suǒ)述編譯器将Lola模块(kuài)翻譯为(wèi)Verilog模块(kuài)。Lola的(de)优點(diǎn)在(zài)于(yú)語(yǔ)言的(de)簡單、規則結構以(yǐ)及(jí)編譯器对(duì)類(lèi)型檢查和(hé)改進(jìn)錯誤診斷的(de)突出(chū)。整个(gè)RISC处理器模块(kuài)已通(tòng)过(guò)Lola表(biǎo)示 (見(jiàn)http://www.inf.ethz.ch/personal/wirth/Lola/index.html)。

  — Niklaus Wirth

最(zuì)後(hòu)的(de)想(xiǎng)法

  40多(duō)年(nián)前(qián),C.A.R. Hoare说(shuō),在(zài)科学技術(shù)的(de)所(suǒ)有(yǒu)分(fēn)支学科中(zhōng),学生(shēng)在(zài)被(bèi)要(yào)求用(yòng)实验(yàn)嘗試自(zì)己的(de)想(xiǎng)法之前(qián),容易受到(dào)许多(duō)示範性(xìng)設計(jì)实例的(de)影響。編程和(hé)软(ruǎn)件(jiàn)設計(jì)與(yǔ)这(zhè)種(zhǒng)明(míng)智模式形成(chéng)了(le)鮮明(míng)对(duì)比。这(zhè)里(lǐ),在(zài)閱读(dú)任何实例之前(qián),要(yào)求学生(shēng)從一(yī)開(kāi)始就(jiù)編写程序。

  这(zhè)種(zhǒng)可(kě)怕事(shì)实的(de)原因(yīn)就(jiù)是(shì):幾(jǐ)乎不(bù)存在(zài)大小合适的(de)示範实例。因(yīn)此(cǐ),我(wǒ)決定(dìng)稍微修正(zhèng)这(zhè)種(zhǒng)情(qíng)形,我(wǒ)在(zài)1975年(nián)編写了(le)《算法與(yǔ)數據(jù)結構》一(yī)書(shū)。随後(hòu)(與(yǔ)J. Gut-knecht)負責操作系(xì)統教学任务,我(wǒ)設計(jì)了(le)Oberon系(xì)統(1986-88)。

  此(cǐ)後(hòu),編程教学并沒(méi)有(yǒu)明(míng)顯提(tí)高(gāo),而(ér)系(xì)統的(de)規模和(hé)複雜性(xìng)顯著增加。虽然開(kāi)源的(de)努力頗受欢迎,但它(tā)并沒(méi)有(yǒu)真(zhēn)正(zhèng)改變(biàn)这(zhè)種(zhǒng)形勢,因(yīn)为(wèi)大多(duō)數程序已經(jīng)建成(chéng)“運行”,但卻沒(méi)有(yǒu)真(zhēn)正(zhèng)投入(rù)使用(yòng)。

  我(wǒ)繼續大膽(dǎn)提(tí)議,應(yìng)重(zhòng)新設計(jì)所(suǒ)有(yǒu)程序,不(bù)光(guāng)是(shì)計(jì)算機(jī),還(huán)有(yǒu)读(dú)取(qǔ)方(fāng)式。这(zhè)些程序應(yìng)是(shì)可(kě)發(fà)行的(de)。即便这(zhè)種(zhǒng)方(fāng)法正(zhèng)确而(ér)有(yǒu)效,但这(zhè)是(shì)一(yī)項比創建可(kě)執行程序更(gèng)为(wèi)艱難的(de)任务。这(zhè)意(yì)味着,沒(méi)有(yǒu)任何部(bù)分(fēn)必須用(yòng)彙編碼指定(dìng)。

  忽略在(zài)这(zhè)種(zhǒng)“人(rén)为(wèi)因(yīn)素”的(de)結果(guǒ)就(jiù)是(shì),在(zài)许多(duō)地(dì)方(fāng),新的(de)應(yìng)用(yòng)沒(méi)有(yǒu)得到(dào)精心(xīn)設計(jì),而(ér)是(shì)通(tòng)过(guò)消除程序中(zhōng)錯誤来(lái)实現(xiàn),其結果(guǒ)有(yǒu)时(shí)是(shì)令人(rén)担憂的(de)。要(yào)做到(dào)“易懂”的(de)關(guān)鍵就(jiù)是(shì)堅持(chí)簡單性(xìng)和(hé)規律性(xìng),放(fàng)棄不(bù)必要(yào)的(de)修飾,避免花里(lǐ)胡哨,正(zhèng)确區(qū)分(fēn)傳統與(yǔ)便捷。

  該系(xì)統所(suǒ)占空間(jiān)小,是(shì)小資源实現(xiàn)大作为(wèi)的(de)見(jiàn)證。虽然Oberon系(xì)統包(bāo)含一(yī)个(gè)文(wén)件(jiàn)系(xì)統、文(wén)本(běn)編輯器和(hé)浏覽器(Windows)管(guǎn)理程序,但相比多(duō)數現(xiàn)代(dài)操作系(xì)統而(ér)言,其占用(yòng)的(de)空間(jiān)少(shǎo)得可(kě)憐。意(yì)外(wài)的(de)是(shì)它(tā)僅僅依靠一(yī)些簡單規則,因(yīn)此(cǐ)便于(yú)学習如(rú)何使用(yòng)。

  最(zuì)後(hòu),这(zhè)種(zhǒng)簡單的(de)系(xì)統的(de)另(lìng)一(yī)大优勢就(jiù)是(shì),用(yòng)戶可(kě)以(yǐ)在(zài)該基礎系(xì)統上(shàng)安(ān)全(quán)構建所(suǒ)需程序,而(ér)不(bù)必担心(xīn)是(shì)否存在(zài)未知特(tè)征與(yǔ)功能(néng),如(rú)後(hòu)門(mén)程式(back door)。從系(xì)統完整性(xìng)易受到(dào)攻擊的(de)角(jiǎo)度(dù)看(kàn),这(zhè)是(shì)一(yī)个(gè)基本(běn)屬性(xìng),是(shì)關(guān)鍵安(ān)全(quán)型應(yìng)用(yòng)不(bù)可(kě)或(huò)缺的(de)。值得注意(yì)的(de)是(shì),我(wǒ)们(men)的(de)系(xì)統硬(yìng)件(jiàn)沒(méi)有(yǒu)这(zhè)種(zhǒng)隐藏元(yuán)件(jiàn)。畢竟,在(zài)如(rú)此(cǐ)之大而(ér)又沒(méi)人(rén)能(néng)够完全(quán)了(le)解(jiě)的(de)基礎上(shàng)構建的(de)任何系(xì)統也(yě)不(bù)能(néng)予以(yǐ)保證。


温(wēn)馨提(tí)示:明(míng)德揚除了(le)培訓学習還(huán)有(yǒu)項目承接業务,擅长的(de)項目主(zhǔ)要(yào)包(bāo)括的(de)方(fāng)向(xiàng)有(yǒu)以(yǐ)下(xià)幾(jǐ)个(gè)方(fāng)面(miàn):

1. MIPI視頻拼接
2. SLVS-EC轉(zhuǎn)MIPI接口(kǒu)(IMX472 IMX492)
3. PCIE采集系(xì)統
4. 图(tú)像項目
5. 高(gāo)速多(duō)通(tòng)道(dào)ADDA系(xì)統
6. 基于(yú)FPGA板卡(kǎ)研發(fà)
7. 多(duō)通(tòng)道(dào)高(gāo)靈敏電(diàn)荷放(fàng)大器
8.射頻前(qián)端

http://old.mdy-edu.com/xmucjie/2023/0201/1865.html

點(diǎn)擊→了(le)解(jiě)項目承接業务詳情(qíng)


需要(yào)了(le)解(jiě)相關(guān)信(xìn)息可(kě)以(yǐ)聯系(xì):吴老(lǎo)师(shī)18022857217(微信(xìn)同(tóng)号(hào))

   拓展(zhǎn)閱读(dú)
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨