本(běn)文(wén)为(wèi)明(míng)德揚原創及(jí)录(lù)用(yòng)文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!
1.1.1 概述
計(jì)算器是(shì)近(jìn)代(dài)人(rén)發(fà)明(míng)的(de)可(kě)以(yǐ)進(jìn)行數字(zì)運算的(de)機(jī)器。現(xiàn)代(dài)的(de)電(diàn)子計(jì)算器能(néng)進(jìn)行數学運算的(de)手(shǒu)持(chí)電(diàn)子機(jī)器,擁有(yǒu)集成(chéng)電(diàn)路(lù)芯片(piàn),但結構比電(diàn)腦簡單得多(duō),可(kě)以(yǐ)说(shuō)是(shì)第(dì)一(yī)代(dài)的(de)電(diàn)子計(jì)算機(jī),且功能(néng)也(yě)較弱(ruò),但較为(wèi)方(fāng)便與(yǔ)廉價,可(kě)廣泛運用(yòng)于(yú)商業交易中(zhōng),是(shì)必備的(de)辦(bàn)公用(yòng)品之一(yī)。除顯示計(jì)算結果(guǒ)外(wài),還(huán)常有(yǒu)溢出(chū)指示、錯誤指示等。計(jì)算器電(diàn)源采用(yòng)交流轉(zhuǎn)換器或(huò)電(diàn)池。为(wèi)了(le)节(jié)省(shěng)電(diàn)能(néng),計(jì)算器都采用(yòng)CMOS工藝制作的(de)大規模集成(chéng)電(diàn)路(lù)。
計(jì)算器一(yī)般由(yóu)運算器、控制器、存儲器、鍵盤、顯示器、電(diàn)源和(hé)一(yī)些可(kě)選外(wài)圍設備及(jí)電(diàn)子配件(jiàn),通(tòng)过(guò)人(rén)工或(huò)機(jī)器設備組成(chéng),抵挡計(jì)算器的(de)運算器、控制器由(yóu)數字(zì)邏輯電(diàn)路(lù)实現(xiàn)簡單的(de)串行運算
計(jì)算器是(shì)最(zuì)早(zǎo)的(de)計(jì)算工具,例如(rú):古代(dài)印(yìn)加人(rén)利用(yòng)许多(duō)顔色(sè)的(de)绳(shéng)結来(lái)計(jì)數或(huò)者(zhě)記(jì)录(lù)曆史,還(huán)有(yǒu)古希臘人(rén)的(de)安(ān)提(tí)凯希拉裝(zhuāng)置,中(zhōng)國(guó)的(de)算盤等。中(zhōng)國(guó)古代(dài)最(zuì)早(zǎo)采用(yòng)的(de)一(yī)種(zhǒng)計(jì)算工具叫籌策,又被(bèi)叫做算籌。
簡易計(jì)算器支持(chí)簡單的(de)四(sì)則運算(支持(chí)負數),在(zài)此(cǐ)基礎上(shàng),添加了(le)連(lián)續運算功能(néng)。計(jì)算器面(miàn)板如(rú)下(xià):

1、 計(jì)算器通(tòng)过(guò)矩阵(zhèn)鍵盤模拟按鍵輸入(rù),并通(tòng)过(guò)數碼管(guǎn)顯示。
2、 計(jì)算器有(yǒu)“0、1、2、3、4、5、6、7、8、9、+、-、*、/、C、=”共(gòng)16个(gè)按鍵。
3、 計(jì)算器不(bù)支持(chí)輸入(rù)負數,運算結果(guǒ)支持(chí)負數但不(bù)支持(chí)小數。
4、 運算數1、運算數2以(yǐ)及(jí)運算結果(guǒ)最(zuì)大支持(chí)8位。其中(zhōng),運算數1和(hé)運算結果(guǒ)的(de)位數包(bāo)括符号(hào)位“-”。
5、 運算數1和(hé)運算數2的(de)默認值为(wèi)0.
6、 計(jì)算器支持(chí)連(lián)續運算,允许在(zài)輸入(rù)運算數2後(hòu)按下(xià)運算符,或(huò)者(zhě)得出(chū)運算結果(guǒ)後(hòu)按下(xià)運算符。
7、 當運算結果(guǒ)溢出(chū)时(shí),數碼管(guǎn)顯示8个(gè)F。
8、 當操作數1或(huò)者(zhě)操作數2的(de)长度(dù)溢出(chū)时(shí),蜂鳴器会(huì)響。
1.1.3 系(xì)統結構框图(tú)
系(xì)統結構框图(tú)如(rú)下(xià)所(suǒ)示:

图(tú)一(yī)
1.1.4模块(kuài)功能(néng)鍵盤掃描模块(kuài)实現(xiàn)功能(néng)
1、将外(wài)来(lái)异(yì)步信(xìn)号(hào)打(dǎ)两(liǎng)拍处理,将异(yì)步信(xìn)号(hào)同(tóng)步化(huà)。
2、实現(xiàn)20ms按鍵消抖功能(néng)。
3、实現(xiàn)矩阵(zhèn)鍵盤的(de)按鍵檢测功能(néng),并輸出(chū)有(yǒu)效按鍵信(xìn)号(hào)。
工作狀态選擇模块(kuài)实現(xiàn)功能(néng)
1、 根(gēn)據(jù)接收(shōu)的(de)不(bù)同(tóng)的(de)按鍵信(xìn)号(hào),判斷和(hé)決定(dìng)計(jì)算器的(de)工作狀态。共(gòng)有(yǒu)5種(zhǒng)狀态,輸入(rù)運算數1(OP_1)、運算符(OPER)、輸入(rù)運算數2(OP_2)、輸出(chū)結果(guǒ)(RESULT)、結果(guǒ)錯誤(ERROR)
Ø 運算數1模块(kuài)实現(xiàn)功能(néng)
1、 當計(jì)算器处于(yú)運算數1狀态下(xià),任何連(lián)續輸入(rù)的(de)數字(zì)(不(bù)超过(guò)8位)都将存放(fàng)在(zài)該模块(kuài)中(zhōng),作为(wèi)運算數1.
2、 當運算數已經(jīng)到(dào)达(dá)8位时(shí),此(cǐ)时(shí)无論輸入(rù)任何數字(zì),運算數1不(bù)變(biàn)。
3、 當計(jì)算器經(jīng)过(guò)一(yī)次(cì)運算後(hòu)(按下(xià)等号(hào)或(huò)者(zhě)在(zài)運算數2狀态下(xià)按下(xià)運算符),運算數去(qù)存放(fàng)結果(guǒ)result。
Ø 運算符模块(kuài)实現(xiàn)功能(néng)
1、 保存最(zuì)新按下(xià)的(de)運算符。
Ø 運算數2模块(kuài)实現(xiàn)功能(néng)
1、 當計(jì)算器处于(yú)運算數2狀态下(xià),任何連(lián)續輸入(rù)的(de)數字(zì)(不(bù)超过(guò)8位)都将存放(fàng)在(zài)該模块(kuài)中(zhōng),作为(wèi)運算數2,默認值为(wèi)0。
2、 當運算數2已經(jīng)到(dào)达(dá)8(包(bāo)括符号(hào)位“-”),此(cǐ)时(shí)无論輸入(rù)任何數字(zì),運算數2不(bù)變(biàn)。
Ø 運算單元(yuán)模块(kuài)实現(xiàn)功能(néng)
1、 當計(jì)算器处于(yú)運算數2狀态下(xià)按下(xià)運算符或(huò)者(zhě)在(zài)任何狀态下(xià)按下(xià)等号(hào)时(shí),該模块(kuài)根(gēn)據(jù)此(cǐ)时(shí)運算數1、運算數2以(yǐ)及(jí)運算符的(de)值,進(jìn)行運算。
2、 若運算結果(guǒ)溢出(chū),或(huò)者(zhě)长度(dù)大于(yú)8位(包(bāo)括符号(hào)位“-”)或(huò)者(zhě)除數为(wèi)0时(shí),輸出(chū)8个(gè)F。
3、 最(zuì)多(duō)保留運算結果(guǒ)整數部(bù)分(fēn)的(de)8个(gè)有(yǒu)效數字(zì),不(bù)保留任何小數。
Ø 顯示对(duì)象(xiàng)選則模块(kuài)实現(xiàn)功能(néng)
1、 該模块(kuài)的(de)作用(yòng)是(shì)根(gēn)據(jù)當前(qián)計(jì)算器的(de)工作狀态来(lái)選擇數碼管(guǎn)的(de)顯示內(nèi)容。
Ø 數碼管(guǎn)顯示模块(kuài)实現(xiàn)功能(néng)
1、 該模块(kuài)的(de)作用(yòng)是(shì)对(duì)顯示对(duì)象(xiàng)選擇模块(kuài)的(de)顯示數據(jù)輸出(chū)信(xìn)号(hào)進(jìn)行數碼管(guǎn)顯示。
Ø 蜂鳴器模块(kuài)实現(xiàn)功能(néng)
1、 該模块(kuài)的(de)作用(yòng)是(shì)对(duì)各(gè)種(zhǒng)錯誤輸入(rù)或(huò)輸出(chū)進(jìn)行響鈴警告。
1.1.5頂层信(xìn)号(hào)
1.1.6參考代(dài)碼
1.2 鍵盤掃描模块(kuài)設計(jì)1.2.1接口(kǒu)信(xìn)号(hào)
1.2.2 設計(jì)思(sī)路(lù)
在(zài)前(qián)面(miàn)的(de)案(àn)例中(zhōng)已經(jīng)有(yǒu)矩阵(zhèn)鍵盤的(de)介紹,所(suǒ)以(yǐ)这(zhè)里(lǐ)不(bù)在(zài)过(guò)多(duō)介紹,詳细(xì)介紹請看(kàn)下(xià)方(fāng)鍊(liàn)接:
1.2.3參考代(dài)碼
1.3 工作狀态選擇模块(kuài)設計(jì)1.3.1接口(kǒu)信(xìn)号(hào)
1.3.2設計(jì)思(sī)路(lù)
該模块(kuài)的(de)主(zhǔ)要(yào)功能(néng)是(shì)根(gēn)據(jù)按下(xià)的(de)按鍵進(jìn)行不(bù)同(tóng)来(lái)判斷和(hé)決定(dìng)計(jì)算器的(de)工作狀态。一(yī)条(tiáo)等式可(kě)以(yǐ)写成(chéng):運算數1+操作符+運算數2+等号(hào)+結果(guǒ)的(de)形式。考慮到(dào)結果(guǒ)錯誤的(de)情(qíng)況,我(wǒ)将本(běn)模块(kuài)的(de)狀态劃(huà)分(fēn)为(wèi)5个(gè),分(fēn)别是(shì):輸入(rù)運算數1(OP_1)、運算符(OPER)、輸入(rù)運算數2(OP_2)、輸出(chū)結果(guǒ)(RESULT)、結果(guǒ)錯誤(ERROR)。
下(xià)图(tú)为(wèi)本(běn)模块(kuài)的(de)狀态跳轉(zhuǎn)图(tú):

複位後(hòu),狀态機(jī)進(jìn)入(rù)OP_1狀态,即初始狀态为(wèi)OP_1;
在(zài)OP_1狀态下(xià):
A. 按下(xià)等号(hào),跳到(dào)RESULT狀态;
B. 按下(xià)運算符,跳到(dào)OPER狀态;
在(zài)OPER狀态下(xià):
A. 按下(xià)數字(zì),跳到(dào)OP_2狀态;
B. 按下(xià)等号(hào),跳到(dào)RESULT狀态;
在(zài)OP_2狀态下(xià):
A. 按下(xià)等号(hào),跳到(dào)RESULT狀态;
B. 按下(xià)運算符,跳到(dào)OPER狀态;
在(zài)RESULT狀态下(xià):
A. 按下(xià)數字(zì),跳到(dào)OP_1狀态;
B. 按下(xià)運算符,跳到(dào)OPER狀态;
C. 按下(xià)等号(hào),停留在(zài)RESULT狀态;
在(zài)ERROR狀态下(xià):
A. 按下(xià)數字(zì),跳到(dào)OP_1狀态;
B. 按下(xià)其他(tā)按鍵,停留在(zài)ERROR狀态;
无論當前(qián)处于(yú)什麼(me)狀态,只(zhī)要(yào)檢测到(dào)運算結果(guǒ)錯誤指示信(xìn)号(hào)有(yǒu)效,即刻跳轉(zhuǎn)到(dào)ERROR狀态。
使用(yòng)GVIM,在(zài)命令模式下(xià)輸入(rù)如(rú)下(xià)內(nèi)容,即可(kě)生(shēng)成(chéng)本(běn)模块(kuài)所(suǒ)需要(yào)的(de)狀态機(jī)代(dài)碼。

使用(yòng)明(míng)德揚的(de)狀态機(jī)模板,可(kě)以(yǐ)很快(kuài)速的(de)写出(chū)此(cǐ)模块(kuài)代(dài)碼。
1.4 運算數1模块(kuài)設計(jì)1.4.1接口(kǒu)信(xìn)号(hào)
1.4.2設計(jì)思(sī)路(lù)
該模块(kuài)主(zhǔ)要(yào)的(de)作用(yòng)是(shì)根(gēn)據(jù)當前(qián)狀态和(hé)輸入(rù)的(de)按鍵,来(lái)決定(dìng)運算數1要(yào)輸出(chū)的(de)結果(guǒ)。由(yóu)于(yú)本(běn)工程需要(yào)实現(xiàn)連(lián)續運算的(de)功能(néng),所(suǒ)以(yǐ)在(zài)这(zhè)个(gè)模块(kuài)中(zhōng)要(yào)區(qū)分(fēn)是(shì)否已經(jīng)得出(chū)了(le)運算結果(guǒ)。
下(xià)面(miàn)是(shì)計(jì)算完成(chéng)指示信(xìn)号(hào)flag_calc的(de)設計(jì)思(sī)路(lù):
1、 該信(xìn)号(hào)为(wèi)高(gāo)时(shí),表(biǎo)示完成(chéng)一(yī)次(cì)計(jì)算过(guò)程得到(dào)了(le)結果(guǒ)。初始狀态为(wèi)低電(diàn)平;
2、 當輸入(rù)操作數2後(hòu)又按下(xià)了(le)等号(hào)或(huò)者(zhě)其他(tā)操作符的(de)时(shí)候,變(biàn)为(wèi)高(gāo)電(diàn)平,所(suǒ)以(yǐ)變(biàn)高(gāo)的(de)条(tiáo)件(jiàn)为(wèi)(state_c_ff==OP_2 && state_c==OPER) || state_c==RESULT;
3、 當处在(zài)操作數1狀态时(shí),为(wèi)低電(diàn)平,所(suǒ)以(yǐ)變(biàn)低的(de)条(tiáo)件(jiàn)为(wèi)state_c==OP_1。其他(tā)情(qíng)況保持(chí)不(bù)變(biàn)。
下(xià)面(miàn)是(shì)運算數1輸出(chū)信(xìn)号(hào)op_1的(de)設計(jì)思(sī)路(lù):
1、 該信(xìn)号(hào)表(biǎo)示運算數1要(yào)輸出(chū)的(de)值。初始狀态为(wèi)0;
2、 在(zài)結果(guǒ)錯誤狀态的(de)时(shí)候,給(gěi)一(yī)个(gè)不(bù)超过(guò)範圍的(de)任意(yì)值,此(cǐ)代(dài)碼中(zhōng)給(gěi)的(de)10;
3、 在(zài)得到(dào)計(jì)算結果(guǒ)或(huò)者(zhě)計(jì)算結果(guǒ)錯誤的(de)时(shí)候,輸入(rù)數字(zì),輸出(chū)为(wèi)按下(xià)按鍵的(de)对(duì)應(yìng)值(key_num_out);
4、 在(zài)輸入(rù)操作數1之後(hòu),按下(xià)退(tuì)格鍵,op_1輸出(chū)的(de)值除以(yǐ)10進(jìn)行取(qǔ)整;
5、 在(zài)輸入(rù)操作數1狀态下(xià)通(tòng)过(guò)鍵盤輸入(rù)數字(zì),需要(yào)判斷是(shì)否超过(guò)顯示範圍,如(rú)果(guǒ)沒(méi)有(yǒu)超过(guò)的(de)話(huà)就(jiù)需要(yào)将當前(qián)op_1的(de)值乘以(yǐ)10,然後(hòu)加上(shàng)按下(xià)的(de)數字(zì)的(de)值,進(jìn)行輸出(chū);
6、 當計(jì)算完成(chéng)时(shí),即flag_calc==1,操作數1輸出(chū)計(jì)算的(de)結果(guǒ)result;
7、 其他(tā)时(shí)侯操作數1保持(chí)不(bù)變(biàn)。
下(xià)面(miàn)是(shì)運算數1溢出(chū)信(xìn)号(hào)op_1_err的(de)設計(jì)思(sī)路(lù):
1、 初始狀态为(wèi)0,表(biǎo)示沒(méi)有(yǒu)溢出(chū)。
2、 當一(yī)直(zhí)处于(yú)操作數1狀态,按下(xià)鍵盤輸入(rù)數字(zì)之後(hòu),操作數1的(de)值溢出(chū)了(le),則将運算數1溢出(chū)信(xìn)号(hào)拉高(gāo)。
3、 其他(tā)时(shí)刻保持(chí)为(wèi)低電(diàn)平。
1.5 運算符模块(kuài)設計(jì)1.5.1接口(kǒu)信(xìn)号(hào)
1.5.2設計(jì)思(sī)路(lù)
本(běn)模块(kuài)的(de)設計(jì)思(sī)路(lù)比較簡單,只(zhī)需要(yào)判斷哪些按鍵是(shì)運算符,然後(hòu)再这(zhè)些運算符被(bèi)按下(xià)的(de)时(shí)候,将他(tā)们(men)对(duì)應(yìng)的(de)值輸出(chū)就(jiù)可(kě)以(yǐ)了(le)。
下(xià)面(miàn)是(shì)運算符指示信(xìn)号(hào)設計(jì)思(sī)路(lù):
1、 當“加”“減”“乘”“除”四(sì)个(gè)按鍵的(de)任意(yì)一(yī)个(gè)被(bèi)按下(xià)之後(hòu),該信(xìn)号(hào)置为(wèi)高(gāo)電(diàn)平;
2、 當“加”“減”“乘”“除”四(sì)个(gè)按鍵沒(méi)有(yǒu)一(yī)个(gè)被(bèi)按下(xià)的(de)时(shí)候,該信(xìn)号(hào)置为(wèi)低電(diàn)平。
下(xià)面(miàn)是(shì)運算符輸出(chū)信(xìn)号(hào)oper設計(jì)思(sī)路(lù):
初始狀态,該信(xìn)号(hào)輸出(chū)0;
1、 當处于(yú)操作數1狀态时(shí),輸出(chū)0;
2、 當“加”“減”“乘”“除”任意(yì)按鍵被(bèi)按下(xià)之後(hòu),輸出(chū)該按鍵对(duì)應(yìng)的(de)值;
3、 其他(tā)时(shí)候保持(chí)不(bù)變(biàn);
1.5.3參考代(dài)碼
1.6 運算數2模块(kuài)設計(jì)1.6.1接口(kǒu)信(xìn)号(hào)
1.6.2設計(jì)思(sī)路(lù)
該模块(kuài)主(zhǔ)要(yào)的(de)作用(yòng)是(shì)根(gēn)據(jù)當前(qián)狀态和(hé)輸入(rù)的(de)按鍵,来(lái)決定(dìng)運算數2要(yào)輸出(chū)的(de)結果(guǒ)。
下(xià)面(miàn)是(shì)運算數2輸出(chū)信(xìn)号(hào)op_2的(de)設計(jì)思(sī)路(lù):
1、 該信(xìn)号(hào)表(biǎo)示運算數2要(yào)輸出(chū)的(de)值。初始狀态为(wèi)0;
2、 在(zài)運算符狀态下(xià),此(cǐ)时(shí)數碼管(guǎn)不(bù)顯示運算數2的(de)值,讓它(tā)輸出(chū)0;
3、 輸入(rù)運算符之後(hòu),之後(hòu)再輸入(rù)的(de)就(jiù)是(shì)運算數2的(de)值,此(cǐ)时(shí)運算數2就(jiù)等于(yú)按下(xià)按鍵所(suǒ)对(duì)應(yìng)的(de)數值。
4、 在(zài)輸入(rù)運算數2之後(hòu),按下(xià)退(tuì)格鍵,運算數2的(de)值除以(yǐ)10進(jìn)行取(qǔ)整;
5、 在(zài)輸入(rù)運算數2狀态下(xià)通(tòng)过(guò)鍵盤輸入(rù)數字(zì),需要(yào)判斷是(shì)否超过(guò)顯示範圍,如(rú)果(guǒ)沒(méi)有(yǒu)超过(guò)的(de)話(huà)就(jiù)需要(yào)将當前(qián)運算數2的(de)值乘以(yǐ)10,然後(hòu)加上(shàng)按下(xià)的(de)數字(zì)的(de)值,進(jìn)行輸出(chū);
6、 其他(tā)时(shí)侯運算數2保持(chí)不(bù)變(biàn)。
下(xià)面(miàn)是(shì)運算數2溢出(chū)信(xìn)号(hào)op_2_err的(de)設計(jì)思(sī)路(lù):
1、 初始狀态为(wèi)0,表(biǎo)示沒(méi)有(yǒu)溢出(chū)。
2、 當一(yī)直(zhí)处于(yú)運算數2狀态,按下(xià)鍵盤輸入(rù)數字(zì)之後(hòu),運算數2的(de)值溢出(chū)了(le),則将運算數2溢出(chū)信(xìn)号(hào)拉高(gāo)。
3、 其他(tā)时(shí)刻保持(chí)为(wèi)低電(diàn)平。
1.6.3參考代(dài)碼
1.7.2設計(jì)思(sī)路(lù)
本(běn)模块(kuài)的(de)作用(yòng)是(shì)根(gēn)據(jù)運算符,对(duì)運算數1和(hé)運算數2進(jìn)行操作得出(chū)結果(guǒ)。
由(yóu)于(yú)再進(jìn)行計(jì)算的(de)时(shí)候考慮小數減去(qù)大數的(de)情(qíng)況,所(suǒ)以(yǐ)運算結果(guǒ)允许为(wèi)負數,因(yīn)此(cǐ)需要(yào)有(yǒu)符号(hào)位指示信(xìn)号(hào),下(xià)面(miàn)是(shì)運算結果(guǒ)符号(hào)位指示信(xìn)号(hào)result_neg的(de)設計(jì)思(sī)路(lù):
1、 只(zhī)有(yǒu)當運算結果(guǒ)为(wèi)負數的(de)时(shí)候,才顯示“負号(hào)”,因(yīn)此(cǐ)初始狀态为(wèi)低電(diàn)平;
2、 當算式輸入(rù)完成(chéng)按下(xià)等号(hào)之後(hòu),如(rú)果(guǒ)運算符是(shì)“減”,并且運算數1小于(yú)運算數2,則運算結果(guǒ)为(wèi)負數,将result_neg信(xìn)号(hào)拉高(gāo)。
3、 由(yóu)于(yú)該計(jì)算器支持(chí)連(lián)續輸入(rù),如(rú)果(guǒ)當前(qián)計(jì)算的(de)結果(guǒ)为(wèi)負數,接着輸入(rù)的(de)運算符为(wèi)“加”,下(xià)一(yī)次(cì)進(jìn)行加法運算,并且運算數1(此(cǐ)时(shí)比較不(bù)考慮符号(hào)位)小于(yú)或(huò)等于(yú)運算數2,則表(biǎo)示運算結果(guǒ)为(wèi)正(zhèng)數,此(cǐ)时(shí)将result_neg信(xìn)号(hào)拉低。
4、 在(zài)進(jìn)行連(lián)續計(jì)算的(de)时(shí)候,如(rú)果(guǒ)得到(dào)的(de)結果(guǒ)超过(guò)顯示上(shàng)限,要(yào)進(jìn)入(rù)錯誤狀态,这(zhè)个(gè)时(shí)候符号(hào)位指示信(xìn)号(hào)應(yìng)該为(wèi)低電(diàn)平。
5、 无論在(zài)計(jì)算中(zhōng)得到(dào)的(de)結果(guǒ)是(shì)正(zhèng)還(huán)是(shì)負,如(rú)果(guǒ)下(xià)次(cì)輸入(rù)的(de)为(wèi)運算數1,都需要(yào)result_neg信(xìn)号(hào)为(wèi)低電(diàn)平。
6、 由(yóu)于(yú)除法不(bù)支持(chí)小數顯示,只(zhī)取(qǔ)整數部(bù)分(fēn),所(suǒ)以(yǐ)當運算結果(guǒ)为(wèi)負數,并進(jìn)行除法運算的(de)时(shí)候,如(rú)果(guǒ)得到(dào)的(de)結果(guǒ)为(wèi)0,不(bù)應(yìng)該顯示为(wèi)“負0”,應(yìng)當将符号(hào)位指示信(xìn)号(hào)置为(wèi)低電(diàn)平。
本(běn)模块(kuài)主(zhǔ)要(yào)的(de)功能(néng)是(shì)实現(xiàn)加減乘除運算,下(xià)面(miàn)是(shì)对(duì)運算結果(guǒ)輸出(chū)信(xìn)号(hào)result的(de)設計(jì)思(sī)路(lù):
1、 初始狀态沒(méi)有(yǒu)經(jīng)过(guò)計(jì)算,自(zì)然輸出(chū)为(wèi)0。
2、 在(zài)進(jìn)行加法的(de)时(shí)候,由(yóu)于(yú)存在(zài)連(lián)續計(jì)算的(de)情(qíng)況,需要(yào)考慮符号(hào)位。當符号(hào)位指示信(xìn)号(hào)为(wèi)0,直(zhí)接将運算數1和(hé)運算數2相加即可(kě);當符号(hào)位指示信(xìn)号(hào)为(wèi)1,則需要(yào)判斷運算數1和(hé)運算數2的(de)大小,确保是(shì)大的(de)減去(qù)小的(de)。
3、 在(zài)進(jìn)行減法的(de)时(shí)候,同(tóng)樣(yàng)需要(yào)考慮符号(hào)位。當符号(hào)位指示信(xìn)号(hào)为(wèi)0的(de)时(shí)候,需要(yào)判斷運算數1和(hé)運算數2的(de)大小,保證大的(de)減去(qù)小的(de);當符号(hào)位指示信(xìn)号(hào)位1的(de)时(shí)候,直(zhí)接将運算數1和(hé)運算數2相加即可(kě)。
4、 乘法運算直(zhí)接将運算數1和(hé)運算數2相乘即可(kě)。
5、 在(zài)進(jìn)行除法運算时(shí),由(yóu)于(yú)无法表(biǎo)示小數,因(yīn)此(cǐ)这(zhè)里(lǐ)需要(yào)采用(yòng)運算數1除以(yǐ)運算數2取(qǔ)整的(de)方(fāng)法,即op_1/op_2。
在(zài)計(jì)算过(guò)程中(zhōng),如(rú)果(guǒ)得到(dào)的(de)結果(guǒ)超过(guò)顯示上(shàng)限或(huò)者(zhě)錯誤的(de)計(jì)算方(fāng)法,需要(yào)做出(chū)錯誤提(tí)示,下(xià)面(miàn)是(shì)对(duì)于(yú)運算結果(guǒ)錯誤信(xìn)号(hào)result_err的(de)設計(jì)思(sī)路(lù):
1、 初始狀态下(xià),該信(xìn)号(hào)为(wèi)0,表(biǎo)示沒(méi)有(yǒu)錯誤。
2、 得到(dào)運算結果(guǒ)後(hòu),若繼續輸入(rù)數字(zì),則会(huì)進(jìn)入(rù)到(dào)運算數1狀态,这(zhè)个(gè)时(shí)候不(bù)進(jìn)行錯誤提(tí)示。
3、 在(zài)運算數2狀态下(xià)輸入(rù)運算符,或(huò)者(zhě)在(zài)結果(guǒ)不(bù)是(shì)錯誤的(de)狀态下(xià)輸出(chū)“等号(hào)”(表(biǎo)示進(jìn)行連(lián)續計(jì)算)。根(gēn)據(jù)輸入(rù)的(de)運算符進(jìn)行相應(yìng)的(de)判斷:
加:如(rú)果(guǒ)運算結果(guǒ)为(wèi)正(zhèng)數,則判斷運算數1加上(shàng)運算數2之後(hòu)会(huì)不(bù)会(huì)溢出(chū),若溢出(chū)則做出(chū)錯誤提(tí)示;如(rú)果(guǒ)運算結果(guǒ)为(wèi)負數,則不(bù)進(jìn)行錯誤提(tí)示。
減:如(rú)果(guǒ)運算結果(guǒ)为(wèi)負數,則判斷運算數1加上(shàng)運算數2之後(hòu)会(huì)不(bù)会(huì)溢出(chū),若溢出(chū)則做出(chū)錯誤提(tí)示;如(rú)果(guǒ)運算結果(guǒ)为(wèi)正(zhèng)數,則判斷两(liǎng)个(gè)數相減之後(hòu)的(de)結果(guǒ)是(shì)否会(huì)溢出(chū)。
乘:无論運算結果(guǒ)为(wèi)何值,都只(zhī)需要(yào)判斷两(liǎng)數相乘之後(hòu)的(de)的(de)結果(guǒ)会(huì)不(bù)会(huì)溢出(chū)就(jiù)可(kě)以(yǐ)了(le)。
除:在(zài)進(jìn)行除法運算的(de)时(shí)候,需要(yào)避免出(chū)現(xiàn)除數为(wèi)0的(de)情(qíng)況,如(rú)果(guǒ)出(chū)現(xiàn)此(cǐ)情(qíng)況,則進(jìn)行錯誤指示。
1.7.3參考代(dài)碼
1.8 顯示对(duì)象(xiàng)選擇模块(kuài)設計(jì)1.8.1接口(kǒu)信(xìn)号(hào)
1.8.2設計(jì)思(sī)路(lù)
該模块(kuài)的(de)作用(yòng)是(shì)根(gēn)據(jù)當前(qián)計(jì)算器的(de)工作狀态来(lái)選擇數碼管(guǎn)的(de)顯示內(nèi)容。
1、 複位後(hòu),該模块(kuài)輸出(chū)0;
2、 當計(jì)算器处于(yú)OP_1狀态下(xià),該模块(kuài)選擇輸出(chū)運算數1。
3、 當計(jì)算器处于(yú)OPER狀态下(xià),該模块(kuài)選擇輸出(chū)運算數1。
4、 當計(jì)算器处于(yú)OP_2狀态下(xià),該模块(kuài)選擇輸出(chū)運算數2。
5、 當計(jì)算器处于(yú)RESULT狀态下(xià),該模块(kuài)選擇輸出(chū)運算數1。
6、 當計(jì)算器处于(yú)ERROR狀态下(xià),該模块(kuài)選擇輸出(chū)8个(gè)F。
要(yào)将數據(jù)送到(dào)數碼管(guǎn)顯示,需要(yào)将收(shōu)到(dào)的(de)數據(jù)進(jìn)行拆分(fēn),比如(rú)輸入(rù)進(jìn)来(lái)的(de)是(shì)“12”,需要(yào)拆成(chéng)一(yī)个(gè)4bit的(de)“1”和(hé)一(yī)个(gè)4bit的(de)“2”送給(gěi)數碼管(guǎn)顯示模块(kuài)。因(yīn)此(cǐ)設計(jì)一(yī)个(gè)計(jì)數器的(de)架構,如(rú)下(xià)图(tú)所(suǒ)示:

架構中(zhōng)使用(yòng)到(dào)了(le)一(yī)个(gè)时(shí)鐘(zhōng)計(jì)數器dis_cnt、一(yī)个(gè)采集狀态指示信(xìn)号(hào)flag_add、dis_sel为(wèi)輸入(rù)要(yào)顯示的(de)數據(jù)、dis_sel_tmp为(wèi)輸入(rù)數據(jù)打(dǎ)一(yī)拍之後(hòu)的(de)數據(jù)、result_neg为(wèi)運算結果(guǒ)符号(hào)位指示信(xìn)号(hào)、result_neg_tmp为(wèi)運算結果(guǒ)符号(hào)位指示信(xìn)号(hào)打(dǎ)一(yī)拍之後(hòu)的(de)信(xìn)号(hào)。下(xià)面(miàn)分(fēn)别介紹一(yī)下(xià)这(zhè)些信(xìn)号(hào)的(de)設計(jì)思(sī)路(lù):
采集狀态指示信(xìn)号(hào)flag_add:初始狀态为(wèi)0,表(biǎo)示不(bù)对(duì)數據(jù)進(jìn)行采集顯示。如(rú)果(guǒ)檢测到(dào)輸入(rù)的(de)數據(jù)或(huò)者(zhě)符号(hào)位發(fà)生(shēng)變(biàn)化(huà),表(biǎo)示要(yào)在(zài)數碼管(guǎn)上(shàng)顯示的(de)數據(jù)有(yǒu)變(biàn)化(huà),該信(xìn)号(hào)拉高(gāo),計(jì)數器可(kě)以(yǐ)進(jìn)行計(jì)數,所(suǒ)以(yǐ)由(yóu)0變(biàn)1的(de)条(tiáo)件(jiàn)为(wèi)dis_sel!=dis_sel_tmp || result_neg!=result_neg_tmp。當計(jì)數器數完之後(hòu),表(biǎo)示要(yào)顯示的(de)數據(jù)已經(jīng)全(quán)部(bù)顯示,則将此(cǐ)信(xìn)号(hào)拉低,所(suǒ)以(yǐ)由(yóu)1變(biàn)0的(de)条(tiáo)件(jiàn)是(shì)end_dis_cnt。
顯示數據(jù)dis_sel:該信(xìn)号(hào)根(gēn)據(jù)工作狀态進(jìn)行選擇,當目前(qián)处于(yú)OP_2狀态时(shí),選擇運算數2輸入(rù)數據(jù),其他(tā)情(qíng)況都選擇運算數1輸入(rù)數據(jù)。
顯示數據(jù)打(dǎ)一(yī)拍之後(hòu)的(de)信(xìn)号(hào)dis_sel_tmp:該信(xìn)号(hào)存在(zài)的(de)目的(de)就(jiù)是(shì)为(wèi)了(le)檢测顯示數據(jù)是(shì)否發(fà)生(shēng)變(biàn)化(huà)。
運算結果(guǒ)符号(hào)位指示信(xìn)号(hào)result_neg:輸入(rù)信(xìn)号(hào)。
符号(hào)位指示信(xìn)号(hào)打(dǎ)一(yī)拍之後(hòu)的(de)信(xìn)号(hào)result_neg_tmp:該信(xìn)号(hào)存在(zài)的(de)意(yì)義就(jiù)是(shì)为(wèi)了(le)檢测符号(hào)位是(shì)否發(fà)生(shēng)變(biàn)化(huà)。
时(shí)鐘(zhōng)計(jì)數器dis_cnt:該計(jì)數器的(de)作用(yòng)有(yǒu)两(liǎng)个(gè),延时(shí)和(hé)控制輸入(rù)數據(jù)賦值給(gěi)顯示數據(jù)輸出(chū)信(xìn)号(hào)的(de)对(duì)應(yìng)位。加一(yī)条(tiáo)件(jiàn)为(wèi)flag_add && (dis_sel==dis_sel_tmp &&result_neg==result_neg_tmp),表(biǎo)示处在(zài)采集狀态时(shí),如(rú)果(guǒ)顯示數據(jù)和(hé)符号(hào)位指示信(xìn)号(hào)稳定(dìng),則開(kāi)始計(jì)數。結束(shù)条(tiáo)件(jiàn)为(wèi)數10个(gè),由(yóu)于(yú)計(jì)數器刚開(kāi)始計(jì)數的(de)时(shí)候,顯示數據(jù)存在(zài)變(biàn)化(huà)的(de)可(kě)能(néng),因(yīn)此(cǐ)这(zhè)里(lǐ)選擇延遲两(liǎng)个(gè)时(shí)鐘(zhōng)在(zài)对(duì)顯示數據(jù)輸出(chū)信(xìn)号(hào)進(jìn)行賦值(由(yóu)于(yú)後(hòu)面(miàn)數據(jù)都是(shì)保持(chí)不(bù)變(biàn)的(de),因(yīn)此(cǐ)这(zhè)个(gè)延时(shí)时(shí)間(jiān)不(bù)是(shì)固定(dìng)的(de),可(kě)以(yǐ)多(duō)延时(shí)一(yī)些),共(gòng)有(yǒu)8个(gè)數碼管(guǎn),因(yīn)此(cǐ)要(yào)賦值8次(cì),所(suǒ)以(yǐ)計(jì)數器共(gòng)需要(yào)數10个(gè)。
前(qián)面(miàn)提(tí)到(dào)过(guò),需要(yào)将顯示數據(jù)顯示到(dào)數碼管(guǎn)上(shàng)的(de)話(huà),需要(yào)将每一(yī)个(gè)數字(zì)進(jìn)行拆分(fēn),一(yī)般采用(yòng)除以(yǐ)10取(qǔ)餘和(hé)取(qǔ)整的(de)方(fāng)法,本(běn)工程使用(yòng)除法器的(de)IP核,該IP核的(de)作用(yòng)就(jiù)是(shì)将輸入(rù)的(de)數據(jù)除以(yǐ)10,得到(dào)商和(hé)餘數。生(shēng)成(chéng)过(guò)程如(rú)下(xià):
第(dì)一(yī)步、使用(yòng)软(ruǎn)件(jiàn)为(wèi)Quartus Prime LiteEdition 18.1版本(běn)。首先(xiān)打(dǎ)開(kāi)软(ruǎn)件(jiàn)之後(hòu),在(zài)主(zhǔ)页(yè)面(miàn)的(de)右(yòu)邊(biān)找(zhǎo)到(dào)“IP Catalog”窗(chuāng)口(kǒu),在(zài)搜索欄中(zhōng)輸入(rù)“div”進(jìn)行搜索,然後(hòu)双(shuāng)擊“LPM_DIVIDE”。如(rú)果(guǒ)沒(méi)有(yǒu)找(zhǎo)到(dào)“IP Catalog”窗(chuāng)口(kǒu),可(kě)在(zài)上(shàng)方(fāng)工具欄“Tools”中(zhōng)選擇“IP Catalog”調出(chū)。

第(dì)二(èr)步、選擇IP核生(shēng)成(chéng)的(de)路(lù)徑,并将其命名为(wèi)“div”,注意(yì)这(zhè)里(lǐ)的(de)名字(zì)不(bù)能(néng)有(yǒu)中(zhōng)文(wén)字(zì)符或(huò)者(zhě)全(quán)數字(zì)。在(zài)下(xià)方(fāng)文(wén)件(jiàn)類(lèi)型中(zhōng)選擇“Verilog”,然後(hòu)點(diǎn)擊OK。

第(dì)三(sān)步、在(zài)之後(hòu)出(chū)現(xiàn)的(de)IP核設置界面(miàn)中(zhōng),“How wide should the numerator input”表(biǎo)示需要(yào)設置的(de)分(fēn)子的(de)位宽(kuān),这(zhè)里(lǐ)設置为(wèi)27。“How wide should thedenominator input”表(biǎo)示需要(yào)設置的(de)分(fēn)母的(de)位宽(kuān)这(zhè)里(lǐ)設置为(wèi)4。在(zài)下(xià)方(fāng)分(fēn)子和(hé)分(fēn)母的(de)表(biǎo)示都選用(yòng)“Unsigned”无符号(hào)類(lèi)型。然後(hòu)點(diǎn)擊Next

第(dì)四(sì)步、下(xià)图(tú)中(zhōng)的(de)1处表(biǎo)示是(shì)否需要(yào)对(duì)輸出(chū)進(jìn)行打(dǎ)拍,这(zhè)里(lǐ)選擇打(dǎ)一(yī)拍之後(hòu)輸出(chū)。2处表(biǎo)示要(yào)進(jìn)行的(de)优化(huà),这(zhè)里(lǐ)選擇默認优化(huà)。3处表(biǎo)示是(shì)否總(zǒng)是(shì)返回(huí)正(zhèng)餘數,選擇是(shì)。然後(hòu)點(diǎn)擊Next。

第(dì)五(wǔ)步、方(fāng)框出(chū)表(biǎo)示該IP核在(zài)仿真(zhēn)的(de)时(shí)候需要(yào)調用(yòng)的(de)庫,直(zhí)接點(diǎn)擊Next即可(kě)。

第(dì)六(liù)步、这(zhè)一(yī)界面(miàn)是(shì)設置需要(yào)生(shēng)成(chéng)的(de)文(wén)件(jiàn),本(běn)工程只(zhī)需要(yào)生(shēng)成(chéng)默認的(de)即可(kě),所(suǒ)以(yǐ)不(bù)用(yòng)勾選。點(diǎn)擊Finish。

1.8.3參考代(dài)碼
1.9 數碼管(guǎn)顯示模块(kuài)設計(jì)1.9.1接口(kǒu)信(xìn)号(hào)
1.9.2設計(jì)思(sī)路(lù)
本(běn)模块(kuài)主(zhǔ)要(yào)实現(xiàn)的(de)功能(néng)是(shì)对(duì)顯示对(duì)象(xiàng)選擇模块(kuài)的(de)顯示數據(jù)輸出(chū)信(xìn)号(hào)(display)進(jìn)行數碼管(guǎn)顯示。
1、 複位後(hòu),數碼管(guǎn)默認顯示運算數1;
2、 當result_err有(yǒu)效时(shí),數碼管(guǎn)顯示8个(gè)F;
3、 當result_neg有(yǒu)效时(shí),第(dì)8个(gè)數碼管(guǎn)顯示“—”;
4、 數碼管(guǎn)顯示display;
由(yóu)于(yú)數碼管(guǎn)顯示在(zài)前(qián)面(miàn)已有(yǒu)案(àn)例介紹,所(suǒ)以(yǐ)这(zhè)个(gè)就(jiù)不(bù)做介紹。感(gǎn)興趣的(de)同(tóng)学可(kě)以(yǐ)看(kàn)一(yī)下(xià)往期(qī)的(de)文(wén)章(zhāng):【每周FPGA案(àn)例】至(zhì)簡設計(jì)系(xì)列_7段(duàn)數碼管(guǎn)顯示
1.9.3參考代(dài)碼
1.10 蜂鳴器模块(kuài)設計(jì)1.10.1接口(kǒu)信(xìn)号(hào)
1.10.2設計(jì)思(sī)路(lù)
該模块(kuài)的(de)主(zhǔ)要(yào)功能(néng)是(shì)根(gēn)據(jù)接收(shōu)到(dào)的(de)各(gè)个(gè)錯誤指示信(xìn)号(hào),進(jìn)行報警提(tí)示。當接收(shōu)到(dào)錯誤信(xìn)号(hào)有(yǒu)效的(de)时(shí)候,蜂鳴器報警,持(chí)續1秒(miǎo)的(de)时(shí)間(jiān),因(yīn)此(cǐ)提(tí)出(chū)一(yī)个(gè)計(jì)數器的(de)架構,如(rú)下(xià)图(tú)所(suǒ)示:

主(zhǔ)要(yào)由(yóu)时(shí)鐘(zhōng)計(jì)數器cnt_1s和(hé)蜂鳴器輸出(chū)組成(chéng),下(xià)面(miàn)时(shí)两(liǎng)个(gè)信(xìn)号(hào)的(de)設計(jì)思(sī)路(lù):
时(shí)鐘(zhōng)計(jì)數器cnt_1s:該計(jì)數器的(de)作用(yòng)是(shì)計(jì)时(shí)1秒(miǎo)的(de)时(shí)間(jiān)。加一(yī)条(tiáo)件(jiàn)为(wèi)flag_add,表(biǎo)示進(jìn)入(rù)報警狀态的(de)时(shí)候便開(kāi)始計(jì)數。結束(shù)条(tiáo)件(jiàn)为(wèi)數5000_0000个(gè),系(xì)統时(shí)鐘(zhōng)为(wèi)50M,一(yī)个(gè)时(shí)鐘(zhōng)周期(qī)为(wèi)20ns,5000_0000个(gè)时(shí)鐘(zhōng)周期(qī)就(jiù)是(shì)1秒(miǎo)。
蜂鳴器輸出(chū)信(xìn)号(hào)beep:初始狀态为(wèi)1,表(biǎo)示不(bù)報警。從1變(biàn)0的(de)条(tiáo)件(jiàn)为(wèi)op_1_err || op_2_err ||result_err,表(biǎo)示接收(shōu)到(dào)这(zhè)些錯誤指示信(xìn)号(hào)之後(hòu),開(kāi)始報警。從0變(biàn)1的(de)条(tiáo)件(jiàn)为(wèi)end_cnt_1s,表(biǎo)示報警时(shí)間(jiān)持(chí)續1秒(miǎo),之後(hòu)結束(shù)。
1.11 效果(guǒ)和(hé)總(zǒng)結
1.11.1db603開(kāi)發(fà)板
由(yóu)于(yú)計(jì)算器的(de)演示是(shì)一(yī)个(gè)動(dòng)态的(de)过(guò)程,所(suǒ)以(yǐ)從下(xià)面(miàn)图(tú)片(piàn)中(zhōng)看(kàn)不(bù)出(chū)具體(tǐ)实現(xiàn)的(de)效果(guǒ),想(xiǎng)要(yào)看(kàn)上(shàng)板效果(guǒ)的(de)話(huà)可(kě)以(yǐ)看(kàn)一(yī)下(xià)工程上(shàng)板的(de)視頻。

1.11.2ms980試验(yàn)箱
由(yóu)于(yú)計(jì)算器的(de)演示是(shì)一(yī)个(gè)動(dòng)态的(de)过(guò)程,所(suǒ)以(yǐ)從下(xià)面(miàn)图(tú)片(piàn)中(zhōng)看(kàn)不(bù)出(chū)具體(tǐ)实現(xiàn)的(de)效果(guǒ),想(xiǎng)要(yào)看(kàn)上(shàng)板效果(guǒ)的(de)話(huà)可(kě)以(yǐ)看(kàn)一(yī)下(xià)工程上(shàng)板的(de)視頻。

詳细(xì)的(de)設計(jì)視頻教程和(hé)工程源碼請到(dào)明(míng)德揚論壇学習!
感(gǎn)興趣的(de)朋友也(yě)可(kě)以(yǐ)訪問(wèn)明(míng)德揚論壇(http://www.FPGAbbs.cn/)進(jìn)行FPGA相關(guān)工程設計(jì)学習,也(yě)可(kě)以(yǐ)看(kàn)一(yī)下(xià)我(wǒ)们(men)往期(qī)的(de)文(wén)章(zhāng):
《參數例化(huà)时(shí)自(zì)動(dòng)計(jì)算位宽(kuān)的(de)解(jiě)決辦(bàn)法》
明(míng)德揚是(shì)一(yī)家(jiā)專注于(yú)FPGA領域的(de)專業性(xìng)公司,公司主(zhǔ)要(yào)業务包(bāo)括開(kāi)發(fà)板、教育培訓、項目承接、人(rén)才服(fú)务等多(duō)个(gè)方(fāng)向(xiàng)。點(diǎn)撥開(kāi)發(fà)板——学習FPGA的(de)入(rù)門(mén)之選。
MP801開(kāi)發(fà)板——千(qiān)兆(zhào)网(wǎng)、ADDA、大容量(liàng)SDRAM等,学習和(hé)項目需求一(yī)步到(dào)位。网(wǎng)絡培訓班——不(bù)管(guǎn)时(shí)間(jiān)和(hé)空間(jiān),明(míng)德揚随时(shí)在(zài)你身(shēn)邊(biān),助你快(kuài)速学習FPGA。周末(mò)培訓班——明(míng)天(tiān)的(de)你会(huì)感(gǎn)激現(xiàn)在(zài)的(de)努力進(jìn)取(qǔ),升(shēng)職加薪明(míng)德揚来(lái)助你。就(jiù)業培訓班——七(qī)大企業級項目实訓,獲得豐富的(de)項目經(jīng)验(yàn),高(gāo)薪就(jiù)業。專題(tí)課程——高(gāo)手(shǒu)修煉課:提(tí)升(shēng)設計(jì)能(néng)力;实用(yòng)調試技巧課:提(tí)升(shēng)定(dìng)位和(hé)解(jiě)決問(wèn)題(tí)能(néng)力;FIFO架構設計(jì)課:助你快(kuài)速成(chéng)为(wèi)架構設計(jì)师(shī);时(shí)序約束(shù)、數字(zì)信(xìn)号(hào)处理、PCIE、綜合項目实踐課等你来(lái)選。項目承接——承接企業FPGA研發(fà)項目。人(rén)才服(fú)务——提(tí)供人(rén)才推薦、人(rén)才代(dài)培、人(rén)才派遣等服(fú)务。
MP801開(kāi)發(fà)板——千(qiān)兆(zhào)网(wǎng)、ADDA、大容量(liàng)SDRAM等,学習和(hé)項目需求一(yī)步到(dào)位。网(wǎng)絡培訓班——不(bù)管(guǎn)时(shí)間(jiān)和(hé)空間(jiān),明(míng)德揚随时(shí)在(zài)你身(shēn)邊(biān),助你快(kuài)速学習FPGA。周末(mò)培訓班——明(míng)天(tiān)的(de)你会(huì)感(gǎn)激現(xiàn)在(zài)的(de)努力進(jìn)取(qǔ),升(shēng)職加薪明(míng)德揚来(lái)助你。就(jiù)業培訓班——七(qī)大企業級項目实訓,獲得豐富的(de)項目經(jīng)验(yàn),高(gāo)薪就(jiù)業。專題(tí)課程——高(gāo)手(shǒu)修煉課:提(tí)升(shēng)設計(jì)能(néng)力;实用(yòng)調試技巧課:提(tí)升(shēng)定(dìng)位和(hé)解(jiě)決問(wèn)題(tí)能(néng)力;FIFO架構設計(jì)課:助你快(kuài)速成(chéng)为(wèi)架構設計(jì)师(shī);时(shí)序約束(shù)、數字(zì)信(xìn)号(hào)处理、PCIE、綜合項目实踐課等你来(lái)選。項目承接——承接企業FPGA研發(fà)項目。人(rén)才服(fú)务——提(tí)供人(rén)才推薦、人(rén)才代(dài)培、人(rén)才派遣等服(fú)务。








