|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
再請(qǐng) VHDL高手進(jìn)來 (已經(jīng)縮編) |
| 作者:hschina 欄目:技術(shù)交流 |
有一段VHDL程序如下: 編譯后,系統(tǒng)提示這樣一個(gè)警告: Warning: Macrocell buffer inserted after node "CPLDBLOCK:inst|SYSTEM_RD~3360" HELP中是這么說的: CAUSE: You turned on the Auto LOGIC Cell Insertion LOGIC option, or the Insert Additional LOGIC Cell LOGIC option, to add LOGIC cells to the design. As a result, the Quartus II SOFTWARE inserted a DUMMY macrocell buffer after the specified node, or the design has an illegal OE source. ACTION: Turn off one of the LOGIC options. 關(guān)鍵是,最后的這句比較令人擔(dān)憂"or the design has an illegal OE source." 回憶程序剛開始寫的時(shí)候,這種警告大概有5~6個(gè),后來修改了程序后,最終剩下了一個(gè)警告,但怎么也去不掉了。 這是什么意思呢?有熟悉VHDL語言的高手幫忙給分析一下可能的原因么?就這么下載到芯片上有沒有問題呢? 相關(guān)的程序如下: ENTITY CPLDBLOCK IS PORT ( DB :INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); IOR :IN STD_LOGIC; AB_EN :IN STD_LOGIC; …… ); END CPLDBLOCK; ARCHITECTURE MYWORK OF CPLDBLOCK IS SIGNAL cs390 :STD_LOGIC; SIGNAL cs391 :STD_LOGIC; SIGNAL cs39C :STD_LOGIC; SIGNAL pstart :STD_LOGIC; SIGNAL ad1rd :STD_LOGIC; SIGNAL ad2rd :STD_LOGIC; SIGNAL ad3rd :STD_LOGIC; …… BEGIN …… SYSTEM_RD:PROCESS(……) BEGIN IF (IOR='0' AND AB_EN='0' AND pstart='1') THEN IF (cs390='1') THEN DB(7 DOWNTO 0)<=ad0_result( 7 DOWNTO 0); ELSIF (cs391='1') THEN DB(7 DOWNTO 0)<=ad0_result(11 downto 8) & "0000"; ELSIF (cs39C='1') THEN DB(0)<=KEY0; DB(1)<=KEY1; DB(2)<=KEY2; DB(3)<=KEY3; DB(4)<=KEY4; DB(5)<=KEY5; DB(6)<='0'; DB(7)<='0'; ELSIF (ad1rd='0') THEN DB(7 DOWNTO 0)<=ad1_result(7 DOWNTO 0); ELSIF (ad2rd='0') THEN DB(7 DOWNTO 0)<=ad2_result(7 DOWNTO 0); ELSIF (ad3rd='0') THEN DB(7 DOWNTO 0)<=ad3_result(7 DOWNTO 0); ELSE DB<="ZZZZZZZZ"; END IF; ELSE DB<="ZZZZZZZZ"; END IF; END PROCESS; …… END MYWORK; * - 本貼最后修改時(shí)間:2006-6-28 16:41:28 修改者:hschina |
| 2樓: | >>參與討論 |
| 作者: clz918 于 2006/6/27 10:54:00 發(fā)布:
太長(zhǎng)了 |
|
| 3樓: | >>參與討論 |
| 作者: linqing171 于 2006/6/27 12:35:00 發(fā)布:
沒有發(fā)現(xiàn)是哪句錯(cuò)誤的,太長(zhǎng)了。 你看看該加lcell的就加個(gè),多定義一個(gè)變量來緩沖一下,一般就沒有問題了。 你把兩個(gè)DB<="ZZZZZZZZ"; 去掉看看還有沒有問題。 IF (IOR='0' AND AB_EN='0' AND pstart='1') THEN IF (cs390='1') THEN DB(7 DOWNTO 0)<=ad0_result( 7 DOWNTO 0); ELSIF (cs391='1') THEN DB(7 DOWNTO 0)<=ad0_result(11 downto 8) & "0000"; ELSIF (cs39C='1') THEN DB(0)<=KEY0; DB(1)<=KEY1; DB(2)<=KEY2; DB(3)<=KEY3; DB(4)<=KEY4; DB(5)<=KEY5; DB(6)<='0'; DB(7)<='0'; ELSIF (ad1rd='0') THEN DB(7 DOWNTO 0)<=ad1_result(7 DOWNTO 0); ELSIF (ad2rd='0') THEN DB(7 DOWNTO 0)<=ad2_result(7 DOWNTO 0); ELSIF (ad3rd='0') THEN DB(7 DOWNTO 0)<=ad3_result(7 DOWNTO 0); ELSE DB<="ZZZZZZZZ"; END IF; ELSE DB<="ZZZZZZZZ"; END IF; 為什么不修改成: IF not (IOR='0' AND AB_EN='0' AND pstart='1') THEN DB<="ZZZZZZZZ"; elseIF (cs390='1') THEN DB(7 DOWNTO 0)<=ad0_result( 7 DOWNTO 0); ELSIF (cs391='1') THEN DB(7 DOWNTO 0)<=ad0_result(11 downto 8) & "0000"; ELSIF (cs39C='1') THEN DB(0)<=KEY0; DB(1)<=KEY1; DB(2)<=KEY2; DB(3)<=KEY3; DB(4)<=KEY4; DB(5)<=KEY5; DB(6)<='0'; DB(7)<='0'; ELSIF (ad1rd='0') THEN DB(7 DOWNTO 0)<=ad1_result(7 DOWNTO 0); ELSIF (ad2rd='0') THEN DB(7 DOWNTO 0)<=ad2_result(7 DOWNTO 0); ELSIF (ad3rd='0') THEN DB(7 DOWNTO 0)<=ad3_result(7 DOWNTO 0); ELSE DB<="ZZZZZZZZ"; END IF; 這樣感覺邏輯上回好點(diǎn)。不過還是感覺變量少了點(diǎn),把我上面的兩個(gè)ZZZZ和一起,看看是不是編譯之后還一樣? |
|
| 4樓: | >>參與討論 |
| 作者: hschina 于 2006/6/28 16:48:00 發(fā)布:
致樓上: 你推薦的代碼,能完成預(yù)期的功能么?我原來寫的是IF嵌套,你給改成一層IF了? 那么: …… elseIF (cs390='1') THEN DB(7 DOWNTO 0)<=ad0_result( 7 DOWNTO 0); …… 這句,執(zhí)行"DB(7 DOWNTO 0)<=ad0_result(6 DOWNTO 0)"的條件豈不是和IOR,AB_EN,pstart等信號(hào)都沒關(guān)系啦? 能這么改么?? |
|
| 5樓: | >>參與討論 |
| 作者: hschina 于 2006/6/29 15:11:00 發(fā)布:
再給看看啊倒是! 沒人對(duì)這個(gè)感興趣么? |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |