久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

VHDL 編程的一些心得體會(huì)

時(shí)間:2019-05-15 13:19:09下載本文作者:會(huì)員上傳
簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《VHDL 編程的一些心得體會(huì)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《VHDL 編程的一些心得體會(huì)》。

第一篇:VHDL 編程的一些心得體會(huì)

VHDL 編程的一些心得體會(huì)(轉(zhuǎn))

VHDL 是由美國(guó)國(guó)防部為描述電子電路所開(kāi)發(fā)的一種語(yǔ)言,其全稱(chēng)為(Very High Speed Integrated Circuit)Hardware Description Language。與另外一門(mén)硬件描述語(yǔ)言 Verilog HDL 相比,VHDL 更善于描述高層的一些設(shè)計(jì),包括系統(tǒng)級(jí)(算法、數(shù)據(jù)通路、控制)和行為級(jí)(寄存器傳輸級(jí)),而且 VHDL 具有設(shè)計(jì)重用、大型設(shè)計(jì)能力、可讀性強(qiáng)、易于編譯等優(yōu)點(diǎn)逐漸受到硬件設(shè)計(jì)者的青睞。但是,VHDL 是一門(mén)語(yǔ)法相當(dāng)嚴(yán)格的語(yǔ)言,易學(xué)性差,特別是對(duì)于剛開(kāi)始接觸 VHDL 的設(shè)計(jì)者而言,經(jīng)常會(huì)因某些小細(xì)節(jié)處理不當(dāng)導(dǎo)致綜合無(wú)法通過(guò)。為此本文就其中一些比較典型的問(wèn)題展開(kāi)探討,希望對(duì)初學(xué)者有所幫助,提高學(xué)習(xí)進(jìn)度。

一.關(guān)于端口

VHDL 共定義了 5 種類(lèi)型的端口,分別是 In, Out,Inout, Buffer及 Linkage,實(shí)際設(shè)計(jì)時(shí)只會(huì)用到前四種。In 和 Out 端口的使用相對(duì)簡(jiǎn)單。這里,我們主要講述關(guān)于 buffer和inout 使用時(shí)的注意事項(xiàng)。

與 Out 端口比,Buffer 端口具有回讀功能,也即內(nèi)部反饋,但在設(shè)計(jì)時(shí)最好不要使用 buffer,因?yàn)?buffer類(lèi)型的端口不能連接到其他類(lèi)型的端口上,無(wú)法把包含該類(lèi)型端口的設(shè)計(jì)作為子模塊元件例化,不利于大型設(shè)計(jì)和程序的可讀性。若設(shè)計(jì)時(shí)需要實(shí)現(xiàn)某個(gè)輸出的回讀功能,可以通過(guò)增加中間信號(hào)作為緩沖,由該信號(hào)完成回讀功能。

雙向端口 Inout 是四種端口類(lèi)型中最為特殊的一種,最難以學(xué)習(xí)和掌握,為此專(zhuān)門(mén)提供一個(gè)簡(jiǎn)單程序進(jìn)行闡述,部分程序如下:

...?

①DataB<=Din when CE=’1’ and Rd=’0’ else

②(others=>’Z’);

③ Dout<=DataB when CE=’1’ and Rd=’1’ else

④(others=>’1’);

? ?

程序中 DataB 為雙向端口,編程時(shí)應(yīng)注意的是,當(dāng) DataB 作為輸出且空閑時(shí),必須將其設(shè)為高阻態(tài)掛起,即有類(lèi)似第②行的語(yǔ)句,否則實(shí)現(xiàn)后會(huì)造成端口死鎖。而當(dāng) DataB 作為有效輸入時(shí),DataB 輸出必須處于高阻態(tài),對(duì)于該例子中即,當(dāng) CE=’1’ and Rd=’1’時(shí),二.信號(hào)和變量

常數(shù)、信號(hào)和變量是 VHDL 中最主要的對(duì)象,分別代表一定的物理意義。常數(shù)對(duì)應(yīng)于數(shù)字電路中的電源或地;信號(hào)對(duì)應(yīng)某條硬件連線;變量通常指臨時(shí)數(shù)據(jù)的局部存儲(chǔ)。信號(hào)和變量功能相近,用法上卻有很大不同。

表 1信號(hào)與變量主要區(qū)別

號(hào)變量

賦值延遲至少有△延時(shí)無(wú),立即變化

相關(guān)信息有,可以形成波形無(wú),只有當(dāng)前值進(jìn)程敏

感是否全局性具有全局性,可存在于多個(gè)進(jìn)程中只能在某個(gè)進(jìn)程或子程序中有效相互賦值關(guān)系信號(hào)不能給變量賦值變量可以給信號(hào)賦值

對(duì)于變量賦值操作無(wú)延遲,初學(xué)者認(rèn)為這個(gè)特性對(duì) VHDL 設(shè)計(jì)非常有利,但這只是理論上的。基于以下幾點(diǎn)原因,我們建議,編程時(shí)還是應(yīng)以信號(hào)為主,盡量減少變量的使用。

(1)變量賦值無(wú)延時(shí)是針對(duì)進(jìn)程運(yùn)行而言的,只是一個(gè)理想值,對(duì)于變量的操作往往被綜合成為組合邏輯的形式,而硬件上的組合邏輯必然存在輸入到輸出延時(shí)。當(dāng)進(jìn)程內(nèi)關(guān)于變量的操作越多,其組合邏輯就會(huì)變得越大越復(fù)雜。假設(shè)在一個(gè)進(jìn)程內(nèi),有關(guān)于變量的 3 個(gè)級(jí)連操作,其輸出延時(shí)分別為 5ns,6ns,7ns,則其最快的時(shí)鐘只能達(dá)到 18ns。相反,采用信號(hào)編程,在時(shí)鐘控制下,往往綜合成觸發(fā)器的形式,特別是對(duì)于 FPGA 芯片而言,具有豐富的觸發(fā)器結(jié)構(gòu),易形成流水作業(yè),其時(shí)鐘頻率只受控于延時(shí)最大的那一級(jí),而不會(huì)與變量一樣層層累積。假設(shè)某個(gè)設(shè)計(jì)為 3 級(jí)流水作業(yè),其每一級(jí)延時(shí)分別為 10ns,11ns,12ns,則其最快時(shí)鐘可達(dá) 12ns。因此,采用信號(hào)反而更能提高設(shè)計(jì)的速度。

(2)由于變量不具備信息的相關(guān)性,只有當(dāng)前值,因此也無(wú)法在仿真時(shí)觀察其波形和狀態(tài)改變情況,無(wú)法對(duì)設(shè)計(jì)的運(yùn)行情況有效驗(yàn)證,而測(cè)試驗(yàn)證工作量往往會(huì)占到整個(gè)設(shè)計(jì) 70%~80%的工作量,采用信號(hào)則不會(huì)存在這類(lèi)問(wèn)題。

(3)變量有效范圍只能局限在單個(gè)進(jìn)程或子程序中,要想將其值帶出與其余進(jìn)程、子模塊之間相互作用,必須借助信號(hào),這在一定程度上會(huì)造成代碼不夠簡(jiǎn)潔,可讀性下降等缺點(diǎn)。

當(dāng)然,變量也具有其特殊的優(yōu)點(diǎn),特別是用來(lái)描述一些復(fù)雜的算法,如圖像處理,多維數(shù)組變換等。

三.位(矢量)與邏輯(矢量)

bit 或其矢量形式 bit_vector只有’0’和’1’兩種狀態(tài),數(shù)字電路中也只有’0’和’1’兩種邏輯,因此會(huì)給初學(xué)者一個(gè)誤區(qū),認(rèn)為采用位(矢量)則足夠設(shè)計(jì)之用,而不必像std_logic那樣出現(xiàn)’X’,’U’,’W’各種狀態(tài),增加編程難度。但實(shí)際情況卻并非如此,以一個(gè)最簡(jiǎn)單 D型觸發(fā)器設(shè)計(jì)為例

? ?

① process(clk)

② begin

③ if clk’event and clk=’1’ then

④ Q<=D;

⑤ end if;

⑥ end process;

? ?

實(shí)際中 clk 對(duì)數(shù)據(jù)端 D的輸入有一定的時(shí)間限制,即在 clk 上升沿附近(建立時(shí)間和保持時(shí)間之內(nèi)),D必須保持穩(wěn)定,否則 Q輸出會(huì)出現(xiàn)亞穩(wěn)態(tài),如下圖所示。

當(dāng) clk 和 D時(shí)序關(guān)系不滿足時(shí),由于 bit 只有’0’或’1’,系統(tǒng)只能隨機(jī)的從’0’和’1’中給 Q 輸出,這樣的結(jié)果顯然是不可信的;而采用 std_logic 類(lèi)型,則時(shí)序仿真時(shí)會(huì)輸出為一個(gè)’X’,提醒用戶(hù)建立保持時(shí)間存在問(wèn)題,應(yīng)重新安排 D和 clk 之間時(shí)序關(guān)系。

此外,對(duì)于雙向總線設(shè)計(jì)(前面已提及)、FPGA/CPLD上電配置等問(wèn)題,如果沒(méi)有’Z’,’X’等狀態(tài),根本無(wú)法進(jìn)行設(shè)計(jì)和有效驗(yàn)證。

四.關(guān)于進(jìn)程

進(jìn)程(Process)是 VHDL 中最為重要的部分,大部分設(shè)計(jì)都會(huì)用到 Process 結(jié)構(gòu),因此掌握Process 的使用顯得尤為重要。以下是初學(xué)和使用 Process 經(jīng)常會(huì)出錯(cuò)的例子。

1.多余時(shí)鐘的引入

在設(shè)計(jì)時(shí)往往會(huì)遇到這種情況,需要對(duì)外部某個(gè)輸入信號(hào)進(jìn)行判斷,當(dāng)其出現(xiàn)上跳或下跳沿時(shí),執(zhí)行相應(yīng)的操作,而該信號(hào)不像正常時(shí)鐘那樣具有固定占空比和周期,而是很隨機(jī),需要程序設(shè)計(jì)判斷其上跳沿出現(xiàn)與否。這時(shí),很容易寫(xiě)出如下程序:

①process(Ctl_a)--Ctl_a即為該輸入信號(hào)

② begin

③ if Ctl_a’event and Ctl_a=’1’ then

④??;--執(zhí)行相應(yīng)操作

⑤ end if;

⑥ end process;

由于出現(xiàn)第③行這類(lèi)語(yǔ)句,綜合工具自動(dòng)默認(rèn) Ctl_a 為時(shí)鐘,某些 FPGA 更會(huì)強(qiáng)行將該輸入約束到時(shí)鐘引腳上。而設(shè)計(jì)者的初衷只是想將其作為下位機(jī)的狀態(tài)輸入以進(jìn)行判斷。上面的程序容易造成多時(shí)鐘現(xiàn)象,增加設(shè)計(jì)的難度。解決的辦法可以如下,將 Ctl_a 增加一級(jí)狀態(tài)

Ctl_areg 寄存,通過(guò)對(duì) Ctl_a 和Ctl_areg 狀態(tài)判斷上跳與否,改正程序如下:① process(clk)

② begin

③ if clk’event and clk=’1’ then

④ Ctl_areg<=Ctl_a;--產(chǎn)生相鄰狀態(tài)

⑤ if Ctl_areg=’0’ and Ctl_a=’1’ then--上跳判斷

⑥??;--執(zhí)行相應(yīng)操作

⑦ end if;

⑧ end if;

⑨ end process;

程序中第④行用以產(chǎn)生兩個(gè)相鄰狀態(tài),第⑤行對(duì)前后狀態(tài)進(jìn)行判斷是否有上跳現(xiàn)

象發(fā)生。其中,需注意的是 clk 的時(shí)鐘頻率應(yīng)明顯快于 Ctl_a信號(hào)的變化頻率,以保證正確采樣。

2.輸出多驅(qū)動(dòng)

誤用 Process經(jīng)常會(huì)引起輸出多驅(qū)動(dòng)源的發(fā)生,即在兩個(gè)以上的進(jìn)程內(nèi)對(duì)同一信號(hào)賦值操作。

以下程序就出現(xiàn)了這類(lèi)情況:

⑴ Proc_a: process(clk)

⑵ begin

⑶ if clk’event and clk=’1’ then

⑷ Dout<=Din_A;

⑸ end if

⑹ end process;;

⑻ Proc_b:process(sel_en)

⑼ begin

⑽ if sel_en=’1’ then

⑾ Dout<=Din_B;

⑿ end if;

⒀ end process;

進(jìn)程 Proc_a 和 Proc_b 中都出現(xiàn)了對(duì) Dout 的賦值語(yǔ)句,設(shè)計(jì)者原本的想法是,只要合理控制好 clk 和 sel_en 輸入,使其不發(fā)生沖突,即 clk上升沿時(shí) sel_en 不為’1’;sel_en 為’1’時(shí),不出現(xiàn) clk 的上升沿,這樣 Proc_a,Proc_b 兩個(gè)進(jìn)程就不會(huì)發(fā)生沖突。但綜合時(shí),綜合工具會(huì)將所有可能情況全部羅列進(jìn)去,包括第⑶行和第⑽行同時(shí)成立的情況,此時(shí)對(duì)于 Dout就有 Din_A和 Din_B 兩個(gè)輸入驅(qū)動(dòng),Dout 不知接收哪一個(gè),因此該程序無(wú)法綜合,改正的方法是只要將兩個(gè)進(jìn)程合并成一個(gè)即可。

由于進(jìn)程在 VHDL 中的重要性,對(duì)此專(zhuān)門(mén)做了一個(gè)總結(jié)如下:

(1)一個(gè)進(jìn)程中不允許出現(xiàn)兩個(gè)時(shí)鐘沿觸發(fā),(Xilinx 公司 CoolRunner 系列 CPLD 支持單個(gè)時(shí)雙鐘的雙觸發(fā)沿除外)

(2)對(duì)同一信號(hào)賦值的語(yǔ)句應(yīng)出現(xiàn)在單個(gè)進(jìn)程內(nèi),不要在時(shí)鐘沿之后加上 else 語(yǔ)句,如 if clk’event and clk=’1’ then-else?的結(jié)構(gòu),現(xiàn)有綜合工具支持不了這種特殊的觸發(fā)器結(jié)構(gòu)

(3)當(dāng)出現(xiàn)多層 IF語(yǔ)句嵌套時(shí),最好采用 CASE 語(yǔ)句替代,一是減少多層嵌套帶來(lái)的延時(shí),二來(lái)可以增強(qiáng)程序的可讀性

(4)順序語(yǔ)句如 IF語(yǔ)句、CASE 語(yǔ)句、LOOP 語(yǔ)句、變量賦值語(yǔ)句等必須出現(xiàn)在進(jìn)程、函數(shù)或子程序內(nèi)部,而不能單獨(dú)出現(xiàn)在進(jìn)程之外

(5)進(jìn)程內(nèi)部是順序執(zhí)行的,進(jìn)程之間是并行運(yùn)行的;VHDL 中的所有并行語(yǔ)句都可以理解為特殊的進(jìn)程,只是不以 Process結(jié)構(gòu)出現(xiàn),其輸入信號(hào)和判斷信號(hào)就是隱含的敏感表

五.關(guān)于 VHDL 學(xué)習(xí)中的幾點(diǎn)說(shuō)明

與軟件語(yǔ)言相比,VHDL 最重要的特點(diǎn)就在于它的并行運(yùn)行特性,當(dāng)設(shè)計(jì)好的電路上電后,器件內(nèi)部所有信號(hào)將同時(shí)并發(fā)工作,而不會(huì)以軟件方式按照

程序順序執(zhí)行,即使在進(jìn)程內(nèi)部也是趨向并行工作的。例如以下程序:① process(clk)

② begin

③ if clk’event and clk=’1’ then

④ <=;

⑤ <=;

⑥ end if;;

⑦ end process;

綜合的結(jié)果兩個(gè)獨(dú)立的 D 型觸發(fā)器,雖然進(jìn)程內(nèi)部應(yīng)按順序執(zhí)行,但是硬件實(shí)現(xiàn)后,只要采樣到時(shí)鐘上升沿,和 狀態(tài)會(huì)同時(shí)翻轉(zhuǎn),而不會(huì)先執(zhí)行的變化,然后才會(huì)去執(zhí)行的轉(zhuǎn)變。因此,VHDL 學(xué)習(xí)過(guò)程中,應(yīng)加強(qiáng)硬件概念的理解,沒(méi)有硬件概念或是硬件概念不強(qiáng),在設(shè)計(jì)時(shí),往往會(huì)將 VHDL 設(shè)計(jì)以軟件編程的方式來(lái)處理,而得出一些不可思議的結(jié)果。

作為一門(mén)硬件描述語(yǔ)言,VHDL 幾乎可以用來(lái)描述現(xiàn)有的大型系統(tǒng)數(shù)字電路、算法以及其它設(shè)計(jì)。但是,限于目前綜合工具的水平,VHDL 中的許多語(yǔ)法還不能支持,例如:

dout<=din after 5 ns;

綜合時(shí)就無(wú)法達(dá)到如此精度,因此這條語(yǔ)句主要用來(lái)編寫(xiě)測(cè)試激勵(lì),而很少出現(xiàn)在設(shè)計(jì)實(shí)體中。類(lèi)似的情況還有很多,目前 VHDL 設(shè)計(jì)使用的也只是整個(gè)標(biāo)準(zhǔn)中的一部分,這也正是VHDL 的“可綜合子集”性質(zhì),它一定程度上限制了 VHDL 的廣泛應(yīng)用,但是隨著綜合技術(shù)的發(fā)展,這種情況會(huì)逐漸得以改善,VHDL 也將在各個(gè)領(lǐng)域中發(fā)揮出愈來(lái)愈重要的作用

第二篇:VHDL 編程的一些心得體會(huì)

VHDL 編程的一些心得體會(huì)(轉(zhuǎn))http://www.dzjs.net/html/EDAjishu/2007/0131/1504.html

VHDL 是由美國(guó)國(guó)防部為描述電子電路所開(kāi)發(fā)的一種語(yǔ)言,其全稱(chēng)為(Very High Speed Integrated Circuit)Hardware Description Language。與另外一門(mén)硬件描述語(yǔ)言 Verilog HDL 相比,VHDL 更善于描述高層的一些設(shè)計(jì),包括系統(tǒng)級(jí)(算法、數(shù)據(jù)通路、控制)和行為級(jí)(寄存器傳輸級(jí)),而且 VHDL 具有設(shè)計(jì)重用、大型設(shè)計(jì)能力、可讀性強(qiáng)、易于編譯等優(yōu)點(diǎn)逐漸受到硬件設(shè)計(jì)者的青睞。但是,VHDL 是一門(mén)語(yǔ)法相當(dāng)嚴(yán)格的語(yǔ)言,易學(xué)性差,特別是對(duì)于剛開(kāi)始接觸 VHDL 的設(shè)計(jì)者而言,經(jīng)常會(huì)因某些小細(xì)節(jié)處理不當(dāng)導(dǎo)致綜合無(wú)法通過(guò)。為此本文就其中一些比較典型的問(wèn)題展開(kāi)探討,希望對(duì)初學(xué)者有所幫助,提高學(xué)習(xí)進(jìn)度。

一. 關(guān)于端口

VHDL 共定義了 5 種類(lèi)型的端口,分別是 In, Out,Inout, Buffer及 Linkage,實(shí)際設(shè)計(jì)時(shí)只會(huì)用到前四種。In 和 Out 端口的使用相對(duì)簡(jiǎn)單。這里,我們主要講述關(guān)于 buffer和inout 使用時(shí)的注意事項(xiàng)。

與 Out 端口比,Buffer 端口具有回讀功能,也即內(nèi)部反饋,但在設(shè)計(jì)時(shí)最好不要使用 buffer,因?yàn)?buffer類(lèi)型的端口不能連接到其他類(lèi)型的端口上,無(wú)法把包含該類(lèi)型端口的設(shè)計(jì)作為子模塊元件例化,不利于大型設(shè)計(jì)和程序的可讀性。若設(shè)計(jì)時(shí)需要實(shí)現(xiàn)某個(gè)輸出的回讀功能,可以通過(guò)增加中間信號(hào)作為緩沖,由該信號(hào)完成回讀功能。

雙向端口 Inout 是四種端口類(lèi)型中最為特殊的一種,最難以學(xué)習(xí)和掌握,為此專(zhuān)門(mén)提供一個(gè)簡(jiǎn)單程序進(jìn)行闡述,部分程序如下:...?

① DataB<=Din when CE=’1’ and Rd=’0’ else ②(others=>’Z’);

③ Dout<=DataB when CE=’1’ and Rd=’1’ else ④(others=>’1’);? ?

程序中 DataB 為雙向端口,編程時(shí)應(yīng)注意的是,當(dāng) DataB 作為輸出且空閑時(shí),必須將其設(shè)為高阻態(tài)掛起,即有類(lèi)似第②行的語(yǔ)句,否則實(shí)現(xiàn)后會(huì)造成端口死鎖。而當(dāng) DataB 作為有效輸入時(shí),DataB 輸出必須處于高阻態(tài),對(duì)于該例子中即,當(dāng) CE=’1’ and Rd=’1’時(shí),二.信號(hào)和變量

常數(shù)、信號(hào)和變量是 VHDL 中最主要的對(duì)象,分別代表一定的物理意義。常數(shù)對(duì)應(yīng)于數(shù)字電路中的電源或地;信號(hào)對(duì)應(yīng)某條硬件連線;變量通常指臨時(shí)數(shù)據(jù)的局部存儲(chǔ)。信號(hào)和變量功能相近,用法上卻有很大不同。

表 1 信號(hào)與變量主要區(qū)別

信號(hào) 變量

賦值延遲 至少有△延時(shí) 無(wú),立即變化

相關(guān)信息 有,可以形成波形 無(wú),只有當(dāng)前值 進(jìn)程敏感 是 否 全局性 具有全局性,可存在于多個(gè)進(jìn)程中 只能在某個(gè)進(jìn)程或子程序中有效 相互賦值關(guān)系 信號(hào)不能給變量賦值 變量可以給信號(hào)賦值

對(duì)于變量賦值操作無(wú)延遲,初學(xué)者認(rèn)為這個(gè)特性對(duì) VHDL 設(shè)計(jì)非常有利,但這只是理論上的。基于以下幾點(diǎn)原因,我們建議,編程時(shí)還是應(yīng)以信號(hào)為主,盡量減少變量的使用。

(1)變量賦值無(wú)延時(shí)是針對(duì)進(jìn)程運(yùn)行而言的,只是一個(gè)理想值,對(duì)于變量的操作往往被綜合成為組合邏輯的形式,而硬件上的組合邏輯必然存在輸入到輸出延時(shí)。當(dāng)進(jìn)程內(nèi)關(guān)于變量的操作越多,其組合邏輯就會(huì)變得越大越復(fù)雜。假設(shè)在一個(gè)進(jìn)程內(nèi),有關(guān)于變量的 3 個(gè) 級(jí)連操作,其輸出延時(shí) 分別為 5ns,6ns,7ns,則其最快的時(shí)鐘只能達(dá)到 18ns。相反,采用信號(hào)編程,在時(shí)鐘控制下,往往綜合成觸發(fā)器的形式,特別是對(duì)于 FPGA 芯片而言,具有豐富的觸發(fā)器結(jié)構(gòu),易形成流水作業(yè),其時(shí)鐘頻率只受控于延時(shí)最大的那一級(jí),而不會(huì)與變量一樣層層累積。假設(shè)某個(gè)設(shè)計(jì)為 3 級(jí)流水作業(yè),其每一級(jí)延時(shí)分別為 10ns,11ns,12ns,則其最快時(shí)鐘可達(dá) 12ns。因此,采用信號(hào)反而更能提高設(shè)計(jì)的速度。

(2)由于變量不具備信息的相關(guān)性,只有當(dāng)前值,因此也無(wú)法在仿真時(shí)觀察其波形和狀態(tài)改變情況,無(wú)法對(duì)設(shè)計(jì)的運(yùn)行情況有效驗(yàn)證,而測(cè)試驗(yàn)證工作量往往會(huì)占到整個(gè)設(shè)計(jì) 70%~80%的工作量,采用信號(hào)則不會(huì)存在這類(lèi)問(wèn)題。

(3)變量有效范圍只能局限在單個(gè)進(jìn)程或子程序中,要想將其值帶出與其余進(jìn)程、子模塊之間相互作用,必須借助信號(hào),這在一定程度上會(huì)造成代碼不夠簡(jiǎn)潔,可讀性下降等缺點(diǎn)。

當(dāng)然,變量也具有其特殊的優(yōu)點(diǎn),特別是用來(lái)描述一些復(fù)雜的算法,如圖像處理,多維數(shù)組變換等。

三.位(矢量)與邏輯(矢量)

bit 或其矢量形式 bit_vector只有’0’和’1’兩種狀態(tài),數(shù)字電路中也只有’0’和’1’兩種邏輯,因此會(huì)給初學(xué)者一個(gè)誤區(qū),認(rèn)為采用位(矢量)則足夠設(shè)計(jì)之用,而不必像std_logic那樣出現(xiàn)’X’,’U’,’W’各種狀態(tài),增加編程難度。但實(shí)際情況卻并非如此,以一個(gè)最簡(jiǎn)單 D型觸發(fā)器設(shè)計(jì)為例 ? ?

① process(clk)② begin

③ if clk’event and clk=’1’ then ④ Q<=D;⑤ end if;

⑥ end process;? ?

實(shí)際中 clk 對(duì)數(shù)據(jù)端 D的輸入有一定的時(shí)間限制,即在 clk 上升沿附近(建立時(shí)間和保持時(shí)間之內(nèi)),D必須保持穩(wěn)定,否則 Q輸出會(huì)出現(xiàn)亞穩(wěn)態(tài),如下圖所示。

當(dāng) clk 和 D時(shí)序關(guān)系不滿足時(shí),由于 bit 只有’0’或’1’,系統(tǒng)只能隨機(jī)的從’0’和’1’中給 Q 輸出,這樣的結(jié)果顯然是不可信的;而采用 std_logic 類(lèi)型,則時(shí)序仿真時(shí)會(huì)輸出為一個(gè)’X’,提醒用戶(hù)建立保持時(shí)間存在問(wèn)題,應(yīng)重新安排 D和 clk 之間時(shí)序關(guān)系。

此外,對(duì)于雙向總線設(shè)計(jì)(前面已提及)、FPGA/CPLD上電配置等問(wèn)題,如果沒(méi)有’Z’,’X’等狀態(tài),根本無(wú)法進(jìn)行設(shè)計(jì)和有效驗(yàn)證。

四.關(guān)于進(jìn)程

進(jìn)程(Process)是 VHDL 中最為重要的部分,大部分設(shè)計(jì)都會(huì)用到 Process 結(jié)構(gòu),因此掌握Process 的使用顯得尤為重要。以下是初學(xué)和使用 Process 經(jīng)常會(huì)出錯(cuò)的例子。

1.多余時(shí)鐘的引入

在設(shè)計(jì)時(shí)往往會(huì)遇到這種情況,需要對(duì)外部某個(gè)輸入信號(hào)進(jìn)行判斷,當(dāng)其出現(xiàn)上跳或下跳沿時(shí),執(zhí)行相應(yīng)的操作,而該信號(hào)不像正常時(shí)鐘那樣具有固定占空比和周期,而是很隨機(jī),需要程序設(shè)計(jì)判斷其上跳沿出現(xiàn)與否。這時(shí),很容易寫(xiě)出如下程序:

① process(Ctl_a)--Ctl_a即為該輸入信號(hào) ② begin

③ if Ctl_a’event and Ctl_a=’1’ then ④ ? ?;--執(zhí)行相應(yīng)操作 ⑤ end if;⑥ end process;

由于出現(xiàn)第③行這類(lèi)語(yǔ)句,綜合工具自動(dòng)默認(rèn) Ctl_a 為時(shí)鐘,某些 FPGA 更會(huì)強(qiáng)行將該輸入約束到時(shí)鐘引腳上。而設(shè)計(jì)者的初衷只是想將其作為下位機(jī)的狀態(tài)輸入以進(jìn)行判斷。上面的程序容易造成多時(shí)鐘現(xiàn)象,增加設(shè)計(jì)的難度。解決的辦法可以如下,將 Ctl_a 增加一級(jí)狀態(tài) Ctl_areg 寄存,通過(guò)對(duì) Ctl_a 和Ctl_areg 狀態(tài)判斷上跳與否,改正程序如下: ① process(clk)② begin

③ if clk’event and clk=’1’ then ④ Ctl_areg<=Ctl_a;--產(chǎn)生相鄰狀態(tài)

⑤ if Ctl_areg=’0’ and Ctl_a=’1’ then--上跳判斷 ⑥ ? ?;--執(zhí)行相應(yīng)操作 ⑦ end if;⑧ end if;

⑨ end process;

程序中第④行用以產(chǎn)生兩個(gè)相鄰狀態(tài),第⑤行對(duì)前后狀態(tài)進(jìn)行判斷是否有上跳現(xiàn)象發(fā)生。其中,需注意的是 clk 的時(shí)鐘頻率應(yīng)明顯快于 Ctl_a信號(hào)的變化頻率,以保證正確采樣。

2.輸出多驅(qū)動(dòng)

誤用 Process經(jīng)常會(huì)引起輸出多驅(qū)動(dòng)源的發(fā)生,即在兩個(gè)以上的進(jìn)程內(nèi)對(duì)同一信號(hào)賦值操作。

以下程序就出現(xiàn)了這類(lèi)情況: ⑴ Proc_a: process(clk)⑵ begin

⑶ if clk’event and clk=’1’ then ⑷ Dout<=Din_A;⑸ end if

⑹ end process;;⑺

⑻ Proc_b:process(sel_en)⑼ begin

⑽ if sel_en=’1’ then ⑾ Dout<=Din_B;⑿ end if;

⒀ end process;

進(jìn)程 Proc_a 和 Proc_b 中都出現(xiàn)了對(duì) Dout 的賦值語(yǔ)句,設(shè)計(jì)者原本的想法是,只要合理控制好 clk 和 sel_en 輸入,使其不發(fā)生沖突,即 clk上升沿時(shí) sel_en 不為’1’;sel_en 為’1’時(shí),不出現(xiàn) clk 的上升沿,這樣 Proc_a,Proc_b 兩個(gè)進(jìn)程就不會(huì)發(fā)生沖突。但綜合時(shí),綜合工具會(huì)將所有可能情況全部羅列進(jìn)去,包括第⑶行和第⑽行同時(shí)成立的情況,此時(shí)對(duì)于 Dout就有 Din_A和 Din_B 兩個(gè)輸入驅(qū)動(dòng),Dout 不知接收哪一個(gè),因此該程序無(wú)法綜合,改正的方法是只要將兩個(gè)進(jìn)程合并成一個(gè)即可。

由于進(jìn)程在 VHDL 中的重要性,對(duì)此專(zhuān)門(mén)做了一個(gè)總結(jié)如下:(1)一個(gè)進(jìn)程中不允許出現(xiàn)兩個(gè)時(shí)鐘沿觸發(fā),(Xilinx 公司 CoolRunner 系列 CPLD 支持單個(gè)時(shí)雙鐘的雙觸發(fā)沿除外)(2)對(duì)同一信號(hào)賦值的語(yǔ)句應(yīng)出現(xiàn)在單個(gè)進(jìn)程內(nèi),不要在時(shí)鐘沿之后加上 else 語(yǔ)句,如 if clk’event and clk=’1’ then-else ? 的結(jié)構(gòu),現(xiàn)有綜合工具支持不了這種特殊的觸發(fā)器結(jié)構(gòu)

(3)當(dāng)出現(xiàn)多層 IF語(yǔ)句嵌套時(shí),最好采用 CASE 語(yǔ)句替代,一是減少多層嵌套帶來(lái)的延時(shí),二來(lái)可以增強(qiáng)程序的可讀性

(4)順序語(yǔ)句如 IF語(yǔ)句、CASE 語(yǔ)句、LOOP 語(yǔ)句、變量賦值語(yǔ)句等必須出現(xiàn)在進(jìn)程、函數(shù)或子程序內(nèi)部,而不能單獨(dú)出現(xiàn)在進(jìn)程之外

(5)進(jìn)程內(nèi)部是順序執(zhí)行的,進(jìn)程之間是并行運(yùn)行的;VHDL 中的所有并行語(yǔ)句都可以理解為特殊的進(jìn)程,只是不以 Process結(jié)構(gòu)出現(xiàn),其輸入信號(hào)和判斷信號(hào)就是隱含的敏感表

五.關(guān)于 VHDL 學(xué)習(xí)中的幾點(diǎn)說(shuō)明

與軟件語(yǔ)言相比,VHDL 最重要的特點(diǎn)就在于它的并行運(yùn)行特性,當(dāng)設(shè)計(jì)好的電路上電后,器件內(nèi)部所有信號(hào)將同時(shí)并發(fā)工作,而不會(huì)以軟件方式按照程序順序執(zhí)行,即使在進(jìn)程內(nèi)部也是趨向并行工作的。例如以下程序: ① process(clk)② begin

③ if clk’event and clk=’1’ then ④ <=;⑤ <=;

⑥ end if;;

⑦ end process;

綜合的結(jié)果兩個(gè)獨(dú)立的 D 型觸發(fā)器,雖然進(jìn)程內(nèi)部應(yīng)按順序執(zhí)行,但是硬件實(shí)現(xiàn)后,只要采樣到時(shí)鐘上升沿,和 狀態(tài)會(huì)同時(shí)翻轉(zhuǎn),而不會(huì)先執(zhí)行 的變化,然后才會(huì)去執(zhí)行 的轉(zhuǎn)變。因此,VHDL 學(xué)習(xí)過(guò)程中,應(yīng)加強(qiáng)硬件概念的理解,沒(méi)有硬件概念或是硬件概念不強(qiáng),在設(shè)計(jì)時(shí),往往會(huì)將 VHDL 設(shè)計(jì)以軟件編程的方式來(lái)處理,而得出一些不可思議的結(jié)果。

作為一門(mén)硬件描述語(yǔ)言,VHDL 幾乎可以用來(lái)描述現(xiàn)有的大型系統(tǒng)數(shù)字電路、算法以及其它設(shè)計(jì)。但是,限于目前綜合工具的水平,VHDL 中的許多語(yǔ)法還不能支持,例如:

dout<=din after 5 ns;綜合時(shí)就無(wú)法達(dá)到如此精度,因此這條語(yǔ)句主要用來(lái)編寫(xiě)測(cè)試激勵(lì),而很少出現(xiàn)在設(shè)計(jì)實(shí)體中。類(lèi)似的情況還有很多,目前 VHDL 設(shè)計(jì)使用的也只是整個(gè)標(biāo)準(zhǔn)中的一部分,這也正是VHDL 的“可綜合子集”性質(zhì),它一定程度上限制了 VHDL 的廣泛應(yīng)用,但是隨著綜合技術(shù)的發(fā)展,這種情況會(huì)逐漸得以改善,VHDL 也將在各個(gè)領(lǐng)域中發(fā)揮出愈來(lái)愈重要的作用

第三篇:基于VHDL編程FPGA的地鐵自動(dòng)售票機(jī)

地鐵自動(dòng)售票機(jī)

一、設(shè)計(jì)要求

1、功能描述

用于模仿地鐵售票自動(dòng)售票,完成地鐵售票的核心控制功能。

2、功能要求

售票機(jī)有兩個(gè)進(jìn)幣孔,一個(gè)是輸入硬幣,識(shí)別的范圍是一元硬幣;一個(gè)是紙幣,識(shí)別的范圍是一元、兩元、五元、十元、二十元。乘客可以連續(xù)多次投入錢(qián)幣。乘客 一次只能選擇一個(gè)出站口,購(gòu)買(mǎi)車(chē)票時(shí),乘客先選出站口,有六個(gè)出站口可供選擇,再選擇所需的票數(shù),然后投幣,投入的錢(qián)幣達(dá)到或者超過(guò)所需金額時(shí),售票機(jī)自 動(dòng)出票,并找零。本次交易結(jié)束后,等待下一次交易。在選擇出站口、所需票數(shù)以及在投幣期間,乘客可以按取消鍵取消操作,錢(qián)幣自動(dòng)退出。

二、實(shí)驗(yàn)分析

1、買(mǎi)票時(shí),乘客按下開(kāi)始鍵,售票機(jī)進(jìn)入站臺(tái)選擇程序,乘客選擇出站口后,可以按取消鍵重新選擇,否則售票機(jī)自動(dòng)進(jìn)入票數(shù)選擇程序,同樣這時(shí)可以按下取消鍵重新開(kāi)始選擇出站口以及票數(shù)。

2、當(dāng)選擇好出站口以及所需票數(shù)時(shí),乘客可以投硬幣或者用紙幣,當(dāng)所投的錢(qián)幣總額大于或者等于票價(jià)時(shí),售票機(jī)自動(dòng)出票以及找零。期間,可以按下取消鍵重新開(kāi)始選擇,并退出所有的錢(qián)幣。

3、乘客若還沒(méi)選擇出站口或者票數(shù),就投幣或者使用紙幣,售票機(jī)會(huì)自動(dòng)退出所有的錢(qián)幣。

4、有六個(gè)站臺(tái)可供乘客選擇,每個(gè)乘客最多可以買(mǎi)3張票,六個(gè)站臺(tái)編號(hào)為1到6,票價(jià)從2元依次遞增到7。

三、系統(tǒng)流程圖

四、程序源代碼 LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_arith.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY metrosell IS PORT(clk:in std_logic;startselect:in std_logic;sure:in std_logic;save your forward step(s)coin1y:in std_logic;pmoney1y:in std_logic;pmoney2y:in std_logic;pmoney5y:in std_logic;pmoney10y:in std_logic;money pmoney20y:in std_logic;money cancel:in std_logic;number:in std_logic_vector(3 downto 0);the tickets platform:in std_logic_vector(3 downto 0);want to reach moneystorage:out std_logic;acceptmo:out std_logic;stamp:out std_logic;--set the clock signal--start to select the platform--this button is to--1 yuan coin

--1 yuan paper money--2 yuan paper money--5 yuan paper money--10 yuan paper--20 yuan paper--cancel the forward step(s)--choose the number of--choose the platform you--to store the money--accept the money--stamp outgate charge:out std_logic_vector(3 downto 0);--the mount of charge,up to 15 yuan chargegate:out std_logic--charge outgate);END metrosell;ARCHITECTURE sell OF metrosell IS type state_type is(initial_type,selectp_type,selectnum_type,insert_type,stamp_type,charge_type);--define six types signal state:state_type;--define a shared state BEGIN main:process(clk,state,startselect,platform,number,coin1y,pmoney1y,pmoney2y,pmoney5y,pmoney10y,pmoney20y,cancel,sure)variable univalence :integer range 0 to 7;--the univalence of the ticket variable total_money :integer range 0 to 21;--the price of the ticket(s)variable selectp_alr:std_logic;--the flag of select platform type variable selectnum_alr:std_logic;--the flag of select number type variable stamp_alr:std_logic;--the flag of the stamp gate variable charge_alr:std_logic;--the flag of the charge gate variable money_reg:integer range 0 to 21;--the mount of money put in variable coin1y_f:std_logic;--the flag of one yuan coin variable pmoney1y_f:std_logic;--the flag of one yuan paper money variable pmoney2y_f:std_logic;--the flag of two yuan paper money variable pmoney10y_f:std_logic;--the flag of ten yuan paper money variable pmoney20y_f:std_logic;--the flag of twelve yuan paper money variable pmoney5y_f:std_logic;--the flag of five yuan paper money variable charge_reg:integer range 0 to 15;

begin if(rising_edge(clk))then case state is when initial_type => variables univalence:=0;selectp_alr:='0';selectnum_alr:='0';stamp_alr:='0';charge_alr:='0';money_reg:=0;total_money:=0;coin1y_f:='0';pmoney1y_f:='0';pmoney2y_f:='0';pmoney5y_f:='0';

--the register of charge--initialize some pmoney10y_f:='0';pmoney20y_f:='0';moneystorage<='0';stamp<='0';charge_reg:=0;charge<=“0000”;acceptmo<='0';chargegate<='0';if(startselect='1')then state<=selectp_type;end if;when selectp_type => if(selectp_alr='0'and cancel='0')then--choose the platform if(platform=“0001”)then univalence:=2;selectp_alr:='1';elsif(platform=“0010”)then univalence:=3;selectp_alr:='1';elsif(platform=“0011”)then univalence:=4;selectp_alr:='1';elsif(platform=“0100”)then univalence:=5;selectp_alr:='1';elsif(platform=“0101”)then univalence:=6;selectp_alr:='1';elsif(platform=“0110”)then univalence:=7;selectp_alr:='1';elsif(platform=“0000”)then univalence:=0;selectp_alr:='0';else null;end if;elsif(selectp_alr='1'and cancel='1')then state<=initial_type;elsif(selectp_alr='1'and sure='1')then state<=selectnum_type;end if;when selectnum_type =>--you can buy at most 3 tickets if(selectnum_alr='0'and cancel='0')then--choose the number of tickets if(number=“0001”)then if(univalence=2)then total_money:=2;selectnum_alr:='1';elsif(univalence=3)then total_money:=3;selectnum_alr:='1';elsif(univalence=4)then total_money:=4;selectnum_alr:='1';elsif(univalence=5)then total_money:=5;selectnum_alr:='1';elsif(univalence=6)then total_money:=6;selectnum_alr:='1';elsif(univalence=7)then total_money:=7;selectnum_alr:='1';elsif(univalence=0)then total_money:=0;selectnum_alr:='0';else null;end if;end if;

if(number=“0010”)then if(univalence=2)then total_money:=4;selectnum_alr:='1';elsif(univalence=3)then total_money:=6;selectnum_alr:='1';elsif(univalence=4)then total_money:=8;selectnum_alr:='1';elsif(univalence=5)then total_money:=10;selectnum_alr:='1';elsif(univalence=6)then total_money:=12;selectnum_alr:='1';elsif(univalence=7)then total_money:=14;selectnum_alr:='1';elsif(univalence=0)then total_money:=0;selectnum_alr:='0';else null;end if;end if;if(number=“0011”)then if(univalence=2)then total_money:=6;selectnum_alr:='1';elsif(univalence=3)then total_money:=9;selectnum_alr:='1';elsif(univalence=4)then total_money:=12;selectnum_alr:='1';elsif(univalence=5)then total_money:=15;selectnum_alr:='1';elsif(univalence=6)then total_money:=18;selectnum_alr:='1';elsif(univalence=7)then total_money:=21;selectnum_alr:='1';elsif(univalence=0)then total_money:=0;selectnum_alr:='0';else null;end if;end if;elsif(selectnum_alr='1'and cancel='1')then state<=initial_type;elsif(selectnum_alr='1'and sure='1')then state<=insert_type;end if;when insert_type => moneystorage<='1';if(money_reg=total_money)then state<=stamp_type;end if;when stamp_type =>--put out the stamp if(stamp_alr='0')then acceptmo<='1';stamp<='1';stamp_alr:='1';else state<=charge_type;end if;when charge_type =>--put out the charge charge_reg:=money_reg-total_money;case charge_reg is when 0 => charge<=“0000”;when 1 => charge<=“0001”;

when 2 => charge<=“0010”;when 3 => charge<=“0011”;when 4 => charge<=“0100”;when 5 => charge<=“0101”;when 6 => charge<=“0110”;when 7 => charge<=“0111”;when 8 => charge<=“1000”;

end case;end if;

when 9 => charge<=“1001”;when 10 => charge<=“1010”;when 11 => charge<=“1011”;when 12 => charge<=“1100”;when 13 => charge<=“1101”;when 14 => charge<=“1110”;when 15 => charge<=“1111”;when others => charge<=“0000”;end case;if(charge_reg>0 and charge_alr='0')then chargegate<='1';charge_alr:='1';elsif(charge_reg=0 and charge_alr='0')then chargegate<='0';charge_alr:='1';else state<=initial_type;end if;end process main;END sell;

五、波形仿真

1、乘客按下開(kāi)始按鈕,進(jìn)入選站臺(tái)模式,選擇二號(hào)站臺(tái),按下確定鍵,再選擇票數(shù)為2張,按下確定鍵,售票機(jī)錢(qián)箱關(guān)閉,投入一張兩元和五元紙幣(對(duì)順序沒(méi)有要求),此時(shí)錢(qián)幣總額大于票價(jià),出兩張票并找零一元。之后系統(tǒng)進(jìn)入初始化狀態(tài)。具體仿真如圖 1 仿真1

圖 1 仿真1

2、測(cè)試cancel鍵,當(dāng)乘客按正確的操作完成選站臺(tái)時(shí),按下取消鍵,再重新選擇,如圖 2 cancel仿真,仿真波形如下。

圖 2 cancel仿真

3、還是測(cè)試cancel鍵,當(dāng)乘客選擇好票數(shù)時(shí),按下cancel鍵,然后重新選擇兩張單價(jià)為七塊錢(qián)的六號(hào)站臺(tái)票,投入一張20元和5元,找零六元。仿真波形如圖 3 cancel仿真2

圖 3 cancel仿真2

4、乘客選擇五號(hào)站臺(tái),兩張票,然后先后投入一元紙幣,兩元紙幣,一元紙幣,五元紙幣,然后按下取消鍵,售票機(jī)自動(dòng)放出所有的錢(qián)幣。仿真如圖 4 cancel仿真3。

圖 4 cancel仿真3

六、心得體會(huì)

在我的設(shè)計(jì)中,有一個(gè)moneystorage信號(hào)量用于控制儲(chǔ)存錢(qián)幣箱的開(kāi)與關(guān),這個(gè)設(shè)計(jì)主要考慮到當(dāng)乘客要求退幣時(shí),最好不是從售票機(jī)中取出投入的錢(qián)數(shù),然后退還,設(shè)置了這個(gè)開(kāi)關(guān),就可以在按下取消鍵時(shí),直接從儲(chǔ)存錢(qián)幣箱中退出錢(qián)幣。

還有,乘客選擇的站臺(tái)以及票數(shù),在售票機(jī)內(nèi)部會(huì)自動(dòng)將這兩個(gè)信號(hào)傳給出票系統(tǒng),從而自動(dòng)出票,以上寫(xiě)的程序只是讓系統(tǒng)知道怎樣收錢(qián)以及找零。

這次實(shí)驗(yàn)總體上來(lái)說(shuō)比六人搶答器簡(jiǎn)單,但是因?yàn)檫@個(gè)售票機(jī)完全是自己寫(xiě)的,所以也不是想象中的那么簡(jiǎn)單。這也讓我看出,要完全自己去做一件東西不是簡(jiǎn)單的,特別是要考慮很全面,還是要發(fā)一些時(shí)間的。

第四篇:VHDL體會(huì)

學(xué)習(xí)心得

——《eda技術(shù)實(shí)用教程》

本學(xué)期對(duì)《eda技術(shù)實(shí)用教程--vhdl版》的學(xué)習(xí)為我的專(zhuān)業(yè)知識(shí)學(xué)習(xí)打開(kāi)了一個(gè)全新的窗口——微電子技術(shù)領(lǐng)域。對(duì)eda技術(shù),我更是有了全新的認(rèn)識(shí)。

微電子技術(shù)的進(jìn)步主要表現(xiàn)在大規(guī)模集成電路加工技術(shù)即半導(dǎo)體工藝技術(shù)的發(fā)展上,使得表征半導(dǎo)體工藝水平的線寬已經(jīng)達(dá)到了納米級(jí)。所以,集成電路設(shè)計(jì)正在不斷地向超大規(guī)模、極低功耗和超高速的方向發(fā)展。

而現(xiàn)代電子設(shè)計(jì)技術(shù)的核心已日趨轉(zhuǎn)向基于計(jì)算機(jī)的電子設(shè)計(jì)自動(dòng)化技術(shù),即eda技術(shù)。eda技術(shù)就是依賴(lài)功能強(qiáng)大的計(jì)算機(jī),在eda工具軟件平臺(tái)上,對(duì)以硬件描述語(yǔ)言hdl為系統(tǒng)邏輯描述手段完成的設(shè)計(jì)文件,自動(dòng)地完成邏輯編譯、化簡(jiǎn)、分割、綜合、布局布線以及邏輯優(yōu)化和仿真測(cè)試,直至實(shí)現(xiàn)既定的電子線路系統(tǒng)功能。eda技術(shù)使得設(shè)計(jì)者的工作僅限于利用軟件的方式,即利用硬件描述語(yǔ)言和eda軟件來(lái)完成對(duì)系統(tǒng)硬件功能的實(shí)現(xiàn),這是電子設(shè)計(jì)技術(shù)的一個(gè)巨大進(jìn)步。eda技術(shù)在進(jìn)入21世紀(jì)后,得到了更大的發(fā)展。嵌入式處理器軟核的成熟,使得sopc步入大規(guī)模應(yīng)用階段。電子技術(shù)領(lǐng)域全方位融入eda技術(shù),除了日益成熟的數(shù)字技術(shù)外,傳統(tǒng)的電路系統(tǒng)設(shè)計(jì)建模理念發(fā)生了重大的變化。同時(shí),eda使得電子領(lǐng)域各學(xué)科的界限更加模糊,更加互為包容。這些都利于設(shè)計(jì)人員利用eda技術(shù)進(jìn)行電子系統(tǒng)設(shè)計(jì),如全定制或半定制asic設(shè)計(jì),fpga/cpld開(kāi)發(fā)應(yīng)用和印制電路板。

從eda技術(shù)的特點(diǎn)不難看出,相比于傳統(tǒng)的數(shù)字電子系統(tǒng)或ic設(shè)計(jì),eda技術(shù)擁有獨(dú)特的優(yōu)勢(shì)。在傳統(tǒng)的數(shù)字電子系統(tǒng)或ic設(shè)計(jì)中,手工設(shè)計(jì)占了較大的比例。因此,也存在很多缺點(diǎn)。例如:復(fù)雜電路的設(shè)計(jì)、調(diào)試十分困難;由于無(wú)法進(jìn)行硬件系統(tǒng)仿真,如果某一過(guò)程存在錯(cuò)誤,查找和修改十分不便;設(shè)計(jì)過(guò)程中產(chǎn)生大量文檔,不易管理;可移植性差等。相比之下,eda技術(shù)有很大不同。它運(yùn)用hdl對(duì)數(shù)字系統(tǒng)進(jìn)行抽象的行為與功能描述到具體的內(nèi)部線路結(jié)構(gòu)描述,從而可以在電子設(shè)計(jì)的各個(gè)階段、各個(gè)層次進(jìn)行計(jì)算機(jī)模擬驗(yàn)證,保證設(shè)計(jì)過(guò)程的正確性,可以大大降低設(shè)計(jì)成本,縮短設(shè)計(jì)周期。由于有各類(lèi)庫(kù)的支持,能夠完成各種自動(dòng)設(shè)計(jì)過(guò)程。它極大地簡(jiǎn)化了設(shè)計(jì)文檔的管理,邏輯設(shè)計(jì)仿真測(cè)試技術(shù)也日益強(qiáng)大。vhdl在現(xiàn)在的eda設(shè)計(jì)中使用最多,也擁有幾乎所有主流eda工具的支持。vhdl作為一個(gè)規(guī)范語(yǔ)言和建模語(yǔ)言,不僅可以作為系統(tǒng)模擬的建模工具,而且可以作為電路系統(tǒng)的設(shè)計(jì)工具,可以利用軟件工具將vhdl源碼自動(dòng)地轉(zhuǎn)化為文本方式表達(dá)的基本邏輯元件連接圖,即網(wǎng)表文件。這種方法顯然對(duì)于電路自動(dòng)設(shè)計(jì)是一個(gè)極大的推進(jìn)。它具有很強(qiáng)的電路描述和建模能力,能從多個(gè)層次對(duì)數(shù)字系統(tǒng)進(jìn)行建模和描述,從而大大簡(jiǎn)化了硬件設(shè)計(jì)任務(wù),提高了設(shè)計(jì)效率和可靠性。eda技術(shù)良好的可移植性與可測(cè)試性,將所有設(shè)計(jì)環(huán)節(jié)納入統(tǒng)一的自頂向下的設(shè)計(jì)方案中。它不但在整個(gè)設(shè)計(jì)流程上充分利用計(jì)算機(jī)的自動(dòng)設(shè)計(jì)能力、在各個(gè)設(shè)計(jì)層次上利用計(jì)算機(jī)完成不同內(nèi)容的仿真模擬,而且在系統(tǒng)板設(shè)計(jì)結(jié)束后仍可利用計(jì)算機(jī)對(duì)硬件系統(tǒng)進(jìn)行完整的測(cè)試。

書(shū)中通過(guò)大量的圖示對(duì)pld硬件特性與編程技術(shù)進(jìn)行了形象的講解,不僅融合了之前學(xué)習(xí)的關(guān)于電路設(shè)計(jì)的知識(shí)還將eda的技術(shù)加入其中。對(duì)vhdl語(yǔ)言的詳盡講解更是讓我深刻理解了vhdl語(yǔ)言的編程原理。由于本門(mén)課程是一門(mén)硬件學(xué)習(xí)課程,所以實(shí)驗(yàn)必不可少。通過(guò)課程最后實(shí)驗(yàn),我體會(huì)一些vhdl語(yǔ)言相對(duì)于其他編程語(yǔ)言的特點(diǎn)。

相對(duì)于其它計(jì)算機(jī)語(yǔ)言的學(xué)習(xí),如c 或匯編語(yǔ)言,vhdl 具有明顯的特點(diǎn)。這不僅僅是由于vhdl 作為一種硬件描述語(yǔ)言的學(xué)習(xí)需要了解較多的數(shù)字邏輯方面的硬件電路知識(shí),包括目標(biāo)芯片基本結(jié)構(gòu)方面的知識(shí)更重要的是由于vhdl 描述的對(duì)象始終是客觀的電路系統(tǒng)。由于電路系統(tǒng)內(nèi)部的子系統(tǒng)乃至部分元器件的工作狀態(tài)和工作方式可以是相互獨(dú)立、互不相關(guān)的,也可以是互為因果的。這表明,在任一時(shí)刻,電路系統(tǒng)可以有許多相關(guān)和不相關(guān)的事件同時(shí)并行發(fā)生。例如可以在多個(gè)獨(dú)立的模塊中同時(shí)入行不同方式的數(shù)據(jù)交換和控制信號(hào)傳輸,這種并行工作方式是任何一種基于cpu 的軟件程序語(yǔ)言所無(wú)法描繪和實(shí)現(xiàn)的。傳統(tǒng)的軟件編程語(yǔ)言只能根據(jù)cpu 的工作方式,以排隊(duì)式指令的形式來(lái)對(duì)特定的事件和信息進(jìn)行控制或接收。在cpu 工作的任一時(shí)間段內(nèi)只能完成一種操作。因此,任何復(fù)雜的程序在一個(gè)單cpu 的計(jì)算機(jī)中的運(yùn)行,永遠(yuǎn)是單向和一維的。因而程序設(shè)計(jì)者也幾乎只需以一維的思維模式就可以編程和工作了。vhdl 雖然也含有類(lèi)似于軟件編程語(yǔ)言的順序描述語(yǔ)句結(jié)構(gòu),但其工作方式是完全不同的。軟件語(yǔ)言的語(yǔ)句是根據(jù)cpu 的順序控制信號(hào),按時(shí)鐘節(jié)拍對(duì)應(yīng)的指令周期節(jié)拍逐條運(yùn)行的,每運(yùn)行一條指令都有確定的執(zhí)行周期。但 vhdl 則不同,從表面上觀,vhdl 的順序語(yǔ)句與軟件語(yǔ)句有相同的行為描述方式,但在標(biāo)準(zhǔn)的仿真執(zhí)行中有很大的區(qū)別。vhdl 的語(yǔ)言描述只是綜合器賴(lài)以構(gòu)成硬件結(jié)構(gòu)的一種依據(jù),但進(jìn)程語(yǔ)句結(jié)構(gòu)中的順序語(yǔ)句的執(zhí)行方式?jīng)Q非是按時(shí)鐘節(jié)拍運(yùn)行的。實(shí)際情況是其中的每一條語(yǔ)句的執(zhí)行時(shí)間幾乎是0(但該語(yǔ)句的運(yùn)行時(shí)間卻不一定為0),即1000 條順序語(yǔ)句與10 條順序語(yǔ)句的執(zhí)行時(shí)間是相同的。在此,語(yǔ)句的運(yùn)行和執(zhí)行具有不同的概念(在軟件語(yǔ)言中,它們的概念是相同),的執(zhí)行是指啟動(dòng)一條語(yǔ)句,允許它運(yùn)行一次,而運(yùn)行就是指該語(yǔ)句完成其設(shè)定的功能。

通過(guò)實(shí)驗(yàn),我認(rèn)識(shí)到理論要與實(shí)際結(jié)合,培養(yǎng)動(dòng)手動(dòng)腦能力的重要性,做事情要抱著一絲不茍的態(tài)度,這樣才能做好事情。同時(shí)也入一步了解到eda的強(qiáng)大之處,硬件電路的優(yōu)秀的地方,對(duì)硬件方面更感興趣了。這門(mén)課程的學(xué)習(xí),為我以后的專(zhuān)業(yè)知識(shí)的學(xué)習(xí)打下了良好的基礎(chǔ)。篇二:vhdl 編程的一些心得體會(huì) vhdl 編程的一些心得體會(huì)(轉(zhuǎn))vhdl 是由美國(guó)國(guó)防部為描述電子電路所開(kāi)發(fā)的一種語(yǔ)言,其全稱(chēng)為(very high speed integrated circuit)hardware description language。與另外一門(mén)硬件描述語(yǔ)言 verilog hdl 相比,vhdl 更善于描述高層的一些設(shè)計(jì),包括系統(tǒng)級(jí)(算法、數(shù)據(jù)通路、控制)和行為級(jí)(寄存器傳輸級(jí)),而且 vhdl 具有設(shè)計(jì)重用、大型設(shè)計(jì)能力、可讀性強(qiáng)、易于編譯等優(yōu)點(diǎn)逐漸受到硬件設(shè)計(jì)者的青睞。但是,vhdl 是一門(mén)語(yǔ)法相當(dāng)嚴(yán)格的語(yǔ)言,易學(xué)性差,特別是對(duì)于剛開(kāi)始接觸 vhdl 的設(shè)計(jì)者而言,經(jīng)常會(huì)因某些小細(xì)節(jié)處理不當(dāng)導(dǎo)致綜合無(wú)法通過(guò)。為此本文就其中一些比較典型的問(wèn)題展開(kāi)探討,希望對(duì)初學(xué)者有所幫助,提高學(xué)習(xí)進(jìn)度。

一. 關(guān)于端口 vhdl 共定義了 5 種類(lèi)型的端口,分別是 in, out,inout, buffer及 linkage,實(shí)際設(shè)計(jì)時(shí)只會(huì)用到前四種。in 和 out 端口的使用相對(duì)簡(jiǎn)單。這里,我們主要講述關(guān)于 buffer和inout 使用時(shí)的注意事項(xiàng)。

與 out 端口比,buffer 端口具有回讀功能,也即內(nèi)部反饋,但在設(shè)計(jì)時(shí)最好不要使用 buffer,因?yàn)?buffer類(lèi)型的端口不能連接到其他類(lèi)型的端口上,無(wú)法把包含該類(lèi)型端口的設(shè)計(jì)作為子模塊元件例化,不利于大型設(shè)計(jì)和程序的可讀性。若設(shè)計(jì)時(shí)需要實(shí)現(xiàn)某個(gè)輸出的回讀功能,可以通過(guò)增加中間信號(hào)作為緩沖,由該信號(hào)完成回讀功能。

雙向端口 inout 是四種端口類(lèi)型中最為特殊的一種,最難以學(xué)習(xí)和掌握,為此專(zhuān)門(mén)提供一個(gè)簡(jiǎn)單程序進(jìn)行闡述,部分程序如下:...? ① datab<=din when ce=’1’ and rd=’0’ else ②(others=>’z’);③ dout<=datab when ce=’1’ and rd=’1’ else ④(others=>’1’);? ? 程序中 datab 為雙向端口,編程時(shí)應(yīng)注意的是,當(dāng) datab 作為輸出且空閑時(shí),必須將其設(shè)為高阻態(tài)掛起,即有類(lèi)似第②行的語(yǔ)句,否則實(shí)現(xiàn)后會(huì)造成端口死鎖。而當(dāng) datab 作為有效輸入時(shí),datab 輸出必須處于高阻態(tài),對(duì)于該例子中即,當(dāng) ce=’1’ and rd=’1’時(shí),二.信號(hào)和變量

常數(shù)、信號(hào)和變量是 vhdl 中最主要的對(duì)象,分別代表一定的物理意義。常數(shù)對(duì)應(yīng)于數(shù)字電路中的電源或地;信號(hào)對(duì)應(yīng)某條硬件連線;變量通常指臨時(shí)數(shù)據(jù)的局部存儲(chǔ)。信號(hào)和變量功能相近,用法上卻有很大不同。

表 1 信號(hào)與變量主要區(qū)別

號(hào) 變量

賦值延遲 至少有△延時(shí) 無(wú),立即變化 相關(guān)信息 有,可以形成波形 無(wú),只有當(dāng)前值 進(jìn)程敏

感 是 否 全局性 具有全局性,可存在于多個(gè)進(jìn)程中 只能在某個(gè)進(jìn)程或子程序中有效 相互賦值關(guān)系 信號(hào)不能給變量賦值 變量可以給信號(hào)賦值

對(duì)于變量賦值操作無(wú)延遲,初學(xué)者認(rèn)為這個(gè)特性對(duì) vhdl 設(shè)計(jì)非常有利,但這只是理論上的。基于以下幾點(diǎn)原因,我們建議,編程時(shí)還是應(yīng)以信號(hào)為主,盡量減少變量的使用。

(1)變量賦值無(wú)延時(shí)是針對(duì)進(jìn)程運(yùn)行而言的,只是一個(gè)理想值,對(duì)于變量的操作往往被綜合成為組合邏輯的形式,而硬件上的組合邏輯必然存在輸入到輸出延時(shí)。當(dāng)進(jìn)程內(nèi)關(guān)于變量的操作越多,其組合邏輯就會(huì)變得越大越復(fù)雜。假設(shè)在一個(gè)進(jìn)程內(nèi),有關(guān)于變量的 3 個(gè) 級(jí)連操作,其輸出延時(shí) 分別為 5ns,6ns,7ns,則其最快的時(shí)鐘只能達(dá)到 18ns。相反,采用信號(hào)編程,在時(shí)鐘控制下,往往綜合成觸發(fā)器的形式,特別是對(duì)于 fpga 芯片而言,具有豐富的觸發(fā)器結(jié)構(gòu),易形成流水作業(yè),其時(shí)鐘頻率只受控于延時(shí)最大的那一級(jí),而不會(huì)與變量一樣層層累積。假設(shè)某個(gè)設(shè)計(jì)為 3 級(jí)流水作業(yè),其每一級(jí)延時(shí)分別為 10ns,11ns,12ns,則其最快時(shí)鐘可達(dá) 12ns。因此,采用信號(hào)反而更能提高設(shè)計(jì)的速度。(2)由于變量不具備信息的相關(guān)性,只有當(dāng)前值,因此也無(wú)法在仿真時(shí)觀察其波形和狀態(tài)改變情況,無(wú)法對(duì)設(shè)計(jì)的運(yùn)行情況有效驗(yàn)證,而測(cè)試驗(yàn)證工作量往往會(huì)占到整個(gè)設(shè)計(jì)

70%~80%的工作量,采用信號(hào)則不會(huì)存在這類(lèi)問(wèn)題。

(3)變量有效范圍只能局限在單個(gè)進(jìn)程或子程序中,要想將其值帶出與其余進(jìn)程、子模塊之間相互作用,必須借助信號(hào),這在一定程度上會(huì)造成代碼不夠簡(jiǎn)潔,可讀性下降等缺點(diǎn)。

當(dāng)然,變量也具有其特殊的優(yōu)點(diǎn),特別是用來(lái)描述一些復(fù)雜的算法,如圖像處理,多維數(shù)組變換等。

三.位(矢量)與邏輯(矢量)bit 或其矢量形式 bit_vector只有’0’和’1’兩種狀態(tài),數(shù)字電路中也只有’0’和’1’兩種邏輯,因此會(huì)給初學(xué)者一個(gè)誤區(qū),認(rèn)為采用位(矢量)則足夠設(shè)計(jì)之用,而不必像std_logic那樣出現(xiàn)’x’,’u’,’w’各種狀態(tài),增加編程難度。但實(shí)際情況卻并非如此,以一個(gè)最簡(jiǎn)單 d型觸發(fā)器設(shè)計(jì)為例 ? ? ① process(clk)② begin ③ if clk’event and clk=’1’ then ④ q<=d;⑤ end if;⑥ end process;? ? 實(shí)際中 clk 對(duì)數(shù)據(jù)端 d的輸入有一定的時(shí)間限制,即在 clk 上升沿附近(建立時(shí)間和保持時(shí)間之內(nèi)),d必須保持穩(wěn)定,否則 q輸出會(huì)出現(xiàn)亞穩(wěn)態(tài),如下圖所示。

當(dāng) clk 和 d時(shí)序關(guān)系不滿足時(shí),由于 bit 只有’0’或’1’,系統(tǒng)只能隨機(jī)的從’0’和’1’中給 q 輸出,這樣的結(jié)果顯然是不可信的;而采用 std_logic 類(lèi)型,則時(shí)序仿真時(shí)會(huì)輸出為一個(gè)’x’,提醒用戶(hù)建立保持時(shí)間存在問(wèn)題,應(yīng)重新安排 d和 clk 之間時(shí)序關(guān)系。

此外,對(duì)于雙向總線設(shè)計(jì)(前面已提及)、fpga/cpld上電配置等問(wèn)題,如果沒(méi)有’z’,’x’等狀態(tài),根本無(wú)法進(jìn)行設(shè)計(jì)和有效驗(yàn)證。

四.關(guān)于進(jìn)程

進(jìn)程(process)是 vhdl 中最為重要的部分,大部分設(shè)計(jì)都會(huì)用到 process 結(jié)構(gòu),因此掌握process 的使用顯得尤為重要。以下是初學(xué)和使用 process 經(jīng)常會(huì)出錯(cuò)的例子。1.多余時(shí)鐘的引入

在設(shè)計(jì)時(shí)往往會(huì)遇到這種情況,需要對(duì)外部某個(gè)輸入信號(hào)進(jìn)行判斷,當(dāng)其出現(xiàn)上跳或下跳沿時(shí),執(zhí)行相應(yīng)的操作,而該信號(hào)不像正常時(shí)鐘那樣具有固定占空比和周期,而是很隨機(jī),需要程序設(shè)計(jì)判斷其上跳沿出現(xiàn)與否。這時(shí),很容易寫(xiě)出如下程序:

① process(ctl_a)-貪吃蛇

一、課程設(shè)計(jì)目的

1)鞏固和加深所學(xué)電子技術(shù)課程的基本知識(shí),提高綜合運(yùn)用所學(xué)知識(shí)的能力; 2)培養(yǎng)根據(jù)課題需要選用參考書(shū)、查閱手冊(cè)、圖表和文獻(xiàn)資料的能力,提高學(xué)生獨(dú)立解決工程實(shí)際問(wèn)題的能力 3)通過(guò)設(shè)計(jì)方案的分析比較、設(shè)計(jì)計(jì)算、元件選擇及電路安裝調(diào)試等環(huán)節(jié).初步掌握簡(jiǎn)單實(shí)用電路的工程設(shè)計(jì)方法。4)提高動(dòng)手能力.掌握常用儀器設(shè)備的正確使用方法,學(xué)會(huì)對(duì)簡(jiǎn)單實(shí)用電路的實(shí)驗(yàn)調(diào)試和對(duì)整機(jī)指標(biāo)的測(cè)試方法,5)學(xué)習(xí)vhdl和verilog hdl語(yǔ)言,熟悉de0電路板。提高對(duì)軟件與硬件之間關(guān)系的認(rèn)識(shí)與了解

二、設(shè)計(jì)任務(wù)與要求

設(shè)計(jì)任務(wù):設(shè)計(jì)一個(gè)貪吃蛇小游戲

要求和指標(biāo):

1.用ps2鍵盤(pán)作為輸入設(shè)備,用lcd作為顯示器。2.自定義蛇的圖像和老鼠的圖像,用四個(gè)按鍵控制蛇的運(yùn)動(dòng)方向,完成貪食蛇游戲,蛇撞“墻”、邊或者游戲時(shí)間到,游戲結(jié)束。3.老鼠出現(xiàn)的地方是隨機(jī)的,在某個(gè)地點(diǎn)出現(xiàn)的時(shí)間是蛇走15步的時(shí)間,如果15步之內(nèi)沒(méi)有被吃掉,它就會(huì)在其它地方隨機(jī)出現(xiàn)。;4.在旁邊顯示得分情況和游戲的剩余時(shí)間。

三、方案設(shè)計(jì)與論證

1、vga顯示

vga標(biāo)準(zhǔn)是一種計(jì)算機(jī)顯示標(biāo)準(zhǔn),最初是由ibm公司在1987 年提出的一種

視頻傳輸標(biāo)準(zhǔn),在彩色顯示器領(lǐng)域得到了廣泛應(yīng)用。vga管腳中,vga_hs和vga_vs分別是水平掃描信號(hào)和豎直掃描信號(hào),vga_r, vga_g和vga_b是顏色控制信號(hào),控制當(dāng)前顯示的像素色彩。利用水平掃描信號(hào)和豎直掃描信號(hào)實(shí)現(xiàn)二維平面的像素掃描顯示,程序中中我們利用cnt_h與cnt_v信號(hào)來(lái)控制,以確認(rèn)程序正確的將色彩輸出到屏幕上。將屏幕分成30*40的矩陣,每個(gè)矩陣塊根據(jù)不同的值賦予不同的顏色。屏幕是從最左上角的(4,4)坐標(biāo)開(kāi)始掃描更新,可以將屏幕視為x-y平面來(lái)看,根據(jù)矩陣點(diǎn)值賦予不同顏色繪制游戲框架并且實(shí)時(shí)顯示蛇與老鼠

在做vga顯示前先進(jìn)行了彩條顯示,以確保顏色顯示正確,結(jié)果如下:

根據(jù)彩條顯示繪制游戲框架,并定義蛇與老鼠的顏色。

第五篇:VHDL實(shí)驗(yàn)報(bào)告

《創(chuàng)新實(shí)驗(yàn)》實(shí)驗(yàn)報(bào)告

—基于VHDL的編程和硬件實(shí)現(xiàn)

一、實(shí)驗(yàn)?zāi)康?1.2.3.4.熟悉和掌握硬件描述語(yǔ)言VHDL的基本語(yǔ)法及編寫(xiě); 掌握軟件Xilinx ISE 10.1的使用; 熟悉SDZ-6電子技術(shù)實(shí)驗(yàn)箱的使用;

了解節(jié)拍脈沖發(fā)生器等基本電路的實(shí)現(xiàn);

5.了解八位二進(jìn)制計(jì)數(shù)器的功能與設(shè)計(jì); 6.學(xué)習(xí)鍵盤(pán)和七段數(shù)碼管顯示的控制和設(shè)計(jì)。

二、實(shí)驗(yàn)內(nèi)容

1.Xilinx ISE 10.1軟件的使用;

2.節(jié)拍脈沖發(fā)生器等基本電路的實(shí)現(xiàn); 3.八位二進(jìn)制計(jì)數(shù)器的實(shí)現(xiàn) 4.鍵盤(pán)掃描及顯示的實(shí)現(xiàn)

三、實(shí)驗(yàn)器材

1、PC機(jī)

2、SDZ-6電子技術(shù)實(shí)驗(yàn)箱

3、正負(fù)5V電源

4、I/O接口線

四、軟件的使用

在安裝Xilinx10.1軟件時(shí),需要一個(gè)ID號(hào),其實(shí)這個(gè)ID號(hào)是可以重復(fù)使用的,幾個(gè)同學(xué)在官網(wǎng)注冊(cè)后就可以共享ID號(hào)了。

安裝完成之后就可以使用這個(gè)軟件編寫(xiě)相應(yīng)的VHDL的程序。1.新建工程

File—>New Project 彈出下面的對(duì)話框

輸入工程名后單擊Next。然后根據(jù)本實(shí)驗(yàn)的實(shí)驗(yàn)箱進(jìn)行以下設(shè)置。

以后的步驟一般都是單擊Next(有些資料上會(huì)介紹有些這些步驟的具體功能,但對(duì)于本實(shí)驗(yàn)不必用到),最后單擊Finish,完成新建一個(gè)工程。在窗口的左邊會(huì)出現(xiàn)剛剛新建的工程,如下:

2.新建一個(gè)VHDL的源文件。

在上圖中,右擊工程選擇New Source,彈出如下對(duì)話框。

在對(duì)畫(huà)框的左邊選擇VHDL Module,輸入文件的名字(改名字最好是你定義的實(shí)體的名字)。單擊Next。出現(xiàn)下面的對(duì)話框。

該對(duì)話框主要是對(duì)外部端口的編輯。可以直接跳過(guò),即單擊Next,在源文件上編輯端口。然后在接下來(lái)的對(duì)話框中單擊Finish。完成建立一個(gè)源文件。窗口右邊就會(huì)出現(xiàn)剛才編輯的源文件。

3.編寫(xiě)和編譯代碼

將事先編好的代碼復(fù)制到源文件里,然后保存文件。選中左邊的文件名,在窗體的左邊出現(xiàn)如下編輯文檔內(nèi)容。

選擇Synthesize —XST—》Check Syntax,雙擊Check Syntax,開(kāi)始編譯源文件。

4.軟件仿真

其實(shí)仿真這一步可要可不要,很多程序都不需要仿真,有些程序即使仿真出錯(cuò),但是最后結(jié)果卻可以出來(lái)。因此,我們做實(shí)驗(yàn)時(shí)很少仿真,此處也不再贅述了。

5.綜合

首先根據(jù)實(shí)驗(yàn)箱的安排布局,找到程序中外部接口的對(duì)應(yīng)實(shí)驗(yàn)箱上的接口,進(jìn)行接口對(duì)應(yīng),雙擊如下圖所示的選項(xiàng)。

出現(xiàn)接口窗口如下,進(jìn)行設(shè)置(具體參見(jiàn)老師發(fā)的文檔SDZ電子實(shí)驗(yàn)箱的使用說(shuō)明文檔)保存,關(guān)閉即可

然后如下圖從Implement Design開(kāi)始依次雙擊綜合。

6.下載

雙擊Configure Target Device綜合完成之后,就出現(xiàn)下載對(duì)話框。右擊鼠標(biāo)鍵盤(pán)選擇Add Xilinx Device,選擇.bit文件。然后右擊選擇Program,就將程序燒錄到實(shí)驗(yàn)板上了。

五、節(jié)拍脈沖發(fā)生器電路實(shí)現(xiàn)

1、實(shí)驗(yàn)題目:

參照時(shí)標(biāo)系統(tǒng)的設(shè)計(jì)方法,用組合邏輯方法設(shè)計(jì)一個(gè)簡(jiǎn)單的節(jié)拍脈沖發(fā)生器,產(chǎn)生圖1-6所示的節(jié)拍脈沖,并用單脈沖驗(yàn)證設(shè)計(jì)的正確性。在實(shí)驗(yàn)報(bào)告中畫(huà)出完整電路,寫(xiě)出W1、W0和N1的表達(dá)式。

圖1-6 簡(jiǎn)單的節(jié)拍脈沖發(fā)生器一周期的波形

設(shè)計(jì)提示:

1、由波形圖求出節(jié)拍脈沖W1和W0的表達(dá)式,進(jìn)而組合成N1的表達(dá)式。

2、注意節(jié)拍電平T1和T0的翻轉(zhuǎn)時(shí)刻應(yīng)在M0下降沿與M的上升沿同時(shí)出現(xiàn)的時(shí)刻。

3、注意D觸發(fā)器的觸發(fā)翻轉(zhuǎn)要求。

2、實(shí)驗(yàn)步驟:

1.根據(jù)題目確定輸出結(jié)果的邏輯表達(dá)式

W1?M*M0*T1

W0?M*M0*T1*S

N1?W1?W0

2.畫(huà)出電路圖

3.確定輸入輸出的外部端口 輸入端口:M(由時(shí)鐘產(chǎn)生)輸出端口:W1,W0,N1 4.根據(jù)電路圖寫(xiě)代碼 5.編譯,調(diào)試

3、實(shí)驗(yàn)代碼 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;——頭文件

entity clk_div is

Port(clk : in STD_LOGIC;

w0 : out STD_LOGIC;

w1 : out STD_LOGIC;

N1 : out STD_LOGIC);end clk_div;

architecture Behavioral of clk_div is signal count : std_logic_vector(3 downto 0):=“0000”;signal a : std_logic;signal b : std_logic;signal temp : integer range 0 to 50;signal Q : std_logic;begin process(clk,Q)

begin if(clk'event and clk='1')then

——對(duì)clk進(jìn)行分頻

temp <= temp+1;if(temp =49)then

Q <= not Q;

end if;temp <= 0;end if;if(Q'event and Q='1')then

if(count =“1111”)then

count <=(others =>'0');else

count <=count+1;end if;end if;a <=(not clk and count(0))and count(1);

b <=(not clk and count(0))and(not count(1)and count(2));end process;w1 <= a;w0 <= b;N1 <=a or b;end Behavioral;

4、硬件實(shí)現(xiàn)與注意事項(xiàng)

硬件實(shí)現(xiàn)主要說(shuō)的是外部端口和實(shí)驗(yàn)箱的對(duì)應(yīng)問(wèn)題。M:接的是時(shí)鐘脈沖,即P150 W1:接LED燈顯示結(jié)果,即P45 W0:接LED燈顯示結(jié)果,即P44 N1:接LED燈顯示結(jié)果,即P47 注意事項(xiàng):

1.時(shí)鐘脈沖頻率太高,結(jié)果會(huì)顯示的很快,因此首先對(duì)CLK進(jìn)行50倍的分頻。將頻率降低以便觀察結(jié)果。2.由于時(shí)鐘頻率過(guò)高,可能仿真不出來(lái),因此就不必仿真。3.可能有些組編譯通過(guò)但在綜合時(shí)出現(xiàn)錯(cuò)誤(是有關(guān)BUF的),這時(shí)就需要在CLK之前接入一個(gè)緩沖器。具體的加入代碼如下: library UNISIM;

——頭文件 use UNISIM.VComponents.all;entity test is

Port(clk : in STD_LOGIC;end test;

architecture Behavioral of test is signal ck:std_logic;

component IBUF

——定義緩沖器

port(I:in STD_LOGIC;

O:out STD_LOGIC);end component;begin UO:IBUF port map(I=>clk,O=>ck);——以后的ck代替clk 六、八位二進(jìn)制計(jì)數(shù)器的實(shí)現(xiàn) 1. 實(shí)驗(yàn)題目

請(qǐng)用VHDL編寫(xiě)一個(gè)八位二進(jìn)制計(jì)數(shù)器,具有異步清零功能、同步置數(shù)、計(jì)數(shù)功能。實(shí)驗(yàn)驗(yàn)證時(shí),須用單脈沖進(jìn)行驗(yàn)證。計(jì)數(shù)器的輸出顯示在顯示器上。〖顯示器可以是:①七段數(shù)碼顯示器,②LED發(fā)光二極管。〗

2. 實(shí)驗(yàn)代碼

library IEEE;

——頭文件 use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;library UNISIM;use UNISIM.VComponents.all;

entity Counter8 is

Port(set : in STD_LOGIC;

——低電平置數(shù)

reset : in STD_LOGIC;

——低電平異步清零

key : out STD_LOGIC;

——鍵盤(pán)輸出口

clk : in STD_LOGIC;

——鍵盤(pán)的輸入口,當(dāng)成單脈沖使用

co : OUT STD_LOGIC;

——進(jìn)位

architecture example of Counter8 is signal ck: std_logic;signal cc: std_logic;signal down : STD_LOGIC_VECTOR(7 DOWNTO 0):=“00000000”;signal kk : std_logic:='0';put : in STD_LOGIC_VECTOR(7 DOWNTO 0);——置數(shù)

load : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

——LED顯示

end Counter8;

component IBUF

——設(shè)置緩沖器 port(I : in STD_LOGIC;

O : out STD_LOGIC);end component;

begin

key <=kk;load <=down;co <=cc;U0:IBUF port map(I=>clk,O=>ck);p0:PROCESS(ck)begin if(ck' event and ck='0')then

IF(set ='0')THEN

——低電平置數(shù) down <=put;ELSE

down <=down+1;END IF;END IF;

IF(reset ='0')then

——低電平異步清零 down <=“00000000”;END IF;if(down=“11111111”)then

——進(jìn)位設(shè)置 cc <='1';else cc <='0';end if;end process p0;end example;

3. 硬件實(shí)現(xiàn)與注意事項(xiàng) 硬件實(shí)現(xiàn):

clk:接鍵盤(pán)的行或列,即P 29

key :接鍵盤(pán)的行或列與clk相對(duì)應(yīng),即P34 reset :接數(shù)字開(kāi)關(guān),即P62 set:接數(shù)字開(kāi)關(guān),即P61 co :接電平顯示,即P45 put(0-7):全部接數(shù)字開(kāi)關(guān),即P73 P74 P70 P71 P68 P69 P63 P67 load(0-7):全部接電平顯示,即P59 P60 P57 P58 P48 P49 P46 P47

注意事項(xiàng): 1.由于在綜合時(shí)出了問(wèn)題,本實(shí)驗(yàn)在輸入clk之前加入了一個(gè)緩沖器 2.在實(shí)驗(yàn)中發(fā)現(xiàn)數(shù)字開(kāi)關(guān)的抖動(dòng)比鍵盤(pán)大,就選用鍵盤(pán)作為單脈沖。3.本實(shí)驗(yàn)在題目的基礎(chǔ)上,新增了進(jìn)位顯示功能。

七、鍵盤(pán)掃描及顯示的實(shí)現(xiàn) 1.實(shí)驗(yàn)題目

請(qǐng)用VHDL編寫(xiě)一個(gè)鍵盤(pán)掃描程序,對(duì)實(shí)驗(yàn)箱上的4×4鍵盤(pán)(藍(lán)色部分)進(jìn)行掃描。當(dāng)有某個(gè)鍵被按下時(shí),該鍵的鍵值被顯示在顯示器上。〖顯示器可以是:①七段數(shù)碼顯示器,②LED發(fā)光二極管。〗

2.實(shí)驗(yàn)代碼

library IEEE;

——頭文件 use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;library UNISIM;use UNISIM.VComponents.all;

ENTITY KEYDIS IS

PORT(clk

: IN std_logic;

——掃描時(shí)鐘

row

: OUT std_logic_vector(3 DOWNTO 0);

column : IN std_logic_vector(3 DOWNTO 0);

dyp

: OUT std_logic_vector(7 DOWNTO 1));

——數(shù)碼管顯示 END KEYDIS;

ARCHITECTURE arch OF KEYDIS IS SIGNAL div_cnt : std_logic_vector(1 downto 0):=“00”;SIGNAL scan_key : std_logic_vector(3 DOWNTO 0):=“1110”;SIGNAL key_code : std_logic_vector(3 DOWNTO 0):=“0000”;

SIGNAL dyp_tmp : std_logic_vector(7 DOWNTO 1):=“0000001”;SIGNAL COUNT : INTEGER range 0 TO 30;signal ck : std_logic;component IBUF

——緩沖器的聲明

port(I:in STD_LOGIC;

O:out STD_LOGIC);end component;BEGIN U1:IBUF port map(I=>clk,O=>ck);row <= scan_key;dyp <= dyp_tmp;PROCESS(ck)BEGIN

IF(ck' EVENT AND ck = '1')THEN

div_cnt <= div_cnt + 1;

END IF;

IF(ck' EVENT AND ck = '1')THEN

COUNT <= COUNT + 1;

PROCESS(div_cnt(1 downto 0))

——掃描行(out)輸出,和時(shí)鐘頻率一樣

BEGIN

CASE div_cnt(1 downto 0)IS

WHEN “00”=>

scan_key<=“1110”;WHEN “01”=> scan_key<=“1101”;WHEN “10”=> scan_key<=“1011”;WHEN “11”=>

IF COUNT = 30 THEN COUNT <= 0;END IF;END IF;END PROCESS;

scan_key<=“0111”;

WHEN OTHERS =>

NULL;

END CASE;END PROCESS;

PROCESS(ck)BEGIN IF(ck'EVENT AND ck='1')THEN

CASE scan_key IS

WHEN “1110” =>

CASE column IS

WHEN “1110” =>

key_code <= “0000”;

——編碼器輸入

WHEN “1101” =>

key_code <= “0001”;

WHEN “1011” =>

key_code <= “0010”;

WHEN “0111” =>

key_code <= “0011”;

WHEN OTHERS =>

NULL;

END CASE;

WHEN “1101” =>

CASE column IS

WHEN “1110” =>

key_code <= “0100”;

WHEN “1101” =>

key_code <= “0101”;

WHEN “1011” =>

key_code <= “0110”;

WHEN “0111” =>

key_code

WHEN OTHERS =>

NULL;

END CASE;

WHEN “1011” =>

CASE column IS

WHEN “1110” =>

key_code

WHEN “1101” =>

key_code

WHEN “1011” =>

key_code

WHEN “0111” =>

key_code

WHEN OTHERS =>

NULL;

END CASE;

WHEN “0111” =>

CASE column IS

WHEN “1110” =>

key_code

WHEN “1101” =>

key_code

WHEN “1011” =>

key_code

WHEN “0111” =>

key_code

WHEN OTHERS =>

NULL;

END CASE;

WHEN OTHERS =>

key_code <= “1111”;

END CASE;

END IF;

<= “0111”;

<= “1000”;

<= “1001”;

<= “1010”;

<= “1011”;

<= “1100”;

<= “1101”;

<= “1110”;

<= “1111”;

END PROCESS;

--顯示鍵值

PROCESS(key_code)

BEGIN--延時(shí)防抖動(dòng)

IF COUNT = 0 THEN--

IF key_code = NOT “0000” THEN

CASE key_code IS

WHEN “0000” =>

dyp_tmp <= “1111110”;

WHEN “0001” =>

dyp_tmp <= “0110000”;

WHEN “0010” =>

dyp_tmp <= “1101101”;

WHEN “0011” =>

dyp_tmp <= “1111001”;

WHEN “0100” =>

dyp_tmp <= “0110011”;

WHEN “0101” =>

dyp_tmp <= “1011011”;

WHEN “0110” =>

dyp_tmp <= “1011111”;

WHEN “0111” =>

dyp_tmp <= “1110000”;

WHEN “1000” =>

dyp_tmp <= “1111111”;

WHEN “1001” =>

dyp_tmp <= “1111011”;

WHEN “1010” =>

dyp_tmp <= “1110111”;

WHEN “1011” =>

dyp_tmp <= “0011111”;

WHEN “1100” =>

dyp_tmp <= “1001110”;

WHEN “1101” =>

dyp_tmp <= “0111101”;

WHEN “1110” =>

dyp_tmp <= “1001111”;

WHEN “1111” =>

dyp_tmp <= “1000111”;

WHEN OTHERS =>

NULL;

END CASE;

——編碼器輸出并且數(shù)碼管顯示

END IF;--END IF;

END PROCESS;END arch;

3.硬件實(shí)現(xiàn)與注意事項(xiàng) 硬件實(shí)現(xiàn):

clk:接掃描時(shí)鐘,即P150 column(0-3):對(duì)應(yīng)于鍵盤(pán)的列值,即P34 P33 P36 P35 row(0-3): 對(duì)應(yīng)于鍵盤(pán)的行值,即P30 P31 P27 P29 dyp(1-7):對(duì)應(yīng)于數(shù)碼管顯示,即P123 P125 P127 P129 P132 P133 P134 注意事項(xiàng):

1.掃描時(shí)鐘與顯示時(shí)鐘是不對(duì)應(yīng)的,掃描的時(shí)鐘快一些,顯示時(shí)鐘是在掃描時(shí)鐘基礎(chǔ)上的延時(shí),該功能由參數(shù)COUNT實(shí)現(xiàn)。掃描程序和顯示程序是分開(kāi)寫(xiě)的。2.行和列其實(shí)沒(méi)什么區(qū)別,只要按照正確的秩序來(lái)排列column和row結(jié)果就出正確。從另一方面,要得到正確的,希望的掃描數(shù)值,就必須安排好這行和列。以上的硬件實(shí)現(xiàn)的安排,是我們組測(cè)試了幾遍的結(jié)果。3.代碼中有很多語(yǔ)法如When else、With select、Case,其中有很多的技巧值得我們舉一反三的。比如,鍵盤(pán)掃描時(shí)如何顯示1110 1101 1011 0111,我們可以用移位寄存器實(shí)現(xiàn),也可以像程序代碼那樣引入一個(gè)變量div_cnt,讓其跟著掃描脈沖自動(dòng)循環(huán)四位。另外,顯示部分引入了譯碼器的原理實(shí)現(xiàn)數(shù)碼管的16數(shù)值的顯示。

4.本實(shí)驗(yàn)使用靜態(tài)數(shù)碼管進(jìn)行顯示。首先用一個(gè)數(shù)碼管顯示16個(gè)鍵值0~f,然后再用雙數(shù)碼管顯示鍵值,從01~16顯示鍵盤(pán)的鍵值。

5.數(shù)碼管顯示參數(shù)從高位到地位分別對(duì)應(yīng)實(shí)驗(yàn)箱數(shù)碼管的a~f,最后一位是小數(shù)點(diǎn),并且數(shù)碼管是共陰的,即高電平是數(shù)碼管對(duì)應(yīng)的LED才會(huì)發(fā)光。實(shí)驗(yàn)箱上的數(shù)碼管LED對(duì)應(yīng)關(guān)系如下:

八、實(shí)驗(yàn)感想

經(jīng)過(guò)這次的合作,我們深深的體會(huì)到團(tuán)隊(duì)合作的重要性。在本次實(shí)驗(yàn)中,我們組遇到了很多困難。不過(guò),我們互幫互助,互相鼓勵(lì),最終我們組還是能在比較快的時(shí)間內(nèi)把實(shí)驗(yàn)結(jié)果做出來(lái)。

第一次實(shí)驗(yàn)中也就是節(jié)拍脈沖發(fā)生器電路實(shí)現(xiàn),由于實(shí)驗(yàn)箱上最慢的時(shí)鐘頻率是100Hz,結(jié)果顯示的太快,就需要對(duì)時(shí)鐘進(jìn)行分頻,我們組很快在寫(xiě)出了分頻的代碼,然后進(jìn)行編譯和仿真。但是仿真的結(jié)果怎么也出不來(lái)。當(dāng)時(shí)我們組有三個(gè)人就有點(diǎn)不耐煩了,準(zhǔn)備放棄下次再弄。但是另外一個(gè)同學(xué)堅(jiān)持綜合,下載的步驟,結(jié)果就在不經(jīng)意間出來(lái)了。事后我們才知道這個(gè)實(shí)驗(yàn)仿真是出不來(lái)的,也就是不用仿真這一步的。只要編譯,綜合對(duì)了就能下載并且結(jié)果正確。我們當(dāng)時(shí)想辛虧組里有一個(gè)堅(jiān)持不懈的人,否則,我們還得拖一個(gè)星期才能檢查。

第二次做八位二進(jìn)制計(jì)數(shù)器的實(shí)現(xiàn)時(shí),我們吸取上次的教訓(xùn)不做仿真。但是實(shí)驗(yàn)要求需要一個(gè)單脈沖,異步清零端,置數(shù)端,八個(gè)數(shù)值顯示。這一算共需要十一個(gè)數(shù)字開(kāi)關(guān),但實(shí)驗(yàn)箱上卻只有十個(gè)數(shù)字開(kāi)關(guān)。不過(guò)我們首先先用試驗(yàn)箱上的100Hz接口代替單脈沖,并對(duì)他進(jìn)行50倍分頻,結(jié)果顯示的非常好。然后我們將異步清零放在一個(gè)鍵盤(pán)上實(shí)現(xiàn),單脈沖放在數(shù)字開(kāi)關(guān)上實(shí)現(xiàn),結(jié)果抖動(dòng)的非常厲害。在和別的組同學(xué)交流之后,我們組將單脈沖放在鍵盤(pán)上實(shí)現(xiàn),抖動(dòng)現(xiàn)象明顯緩解。另外我們組還在此基礎(chǔ)上增加了一個(gè)進(jìn)位顯示的功能。

在實(shí)驗(yàn)顯示這塊,我們組希望盡可能多用實(shí)驗(yàn)箱上給我們提供的顯示儀器(即LED電平顯示和數(shù)碼管顯示)。我們把LED電平顯示安排在八位二進(jìn)制計(jì)數(shù)器的實(shí)現(xiàn)的實(shí)驗(yàn)上,把數(shù)碼管顯示安排在鍵盤(pán)掃描及顯示的實(shí)現(xiàn)的實(shí)驗(yàn)上。

第三次做鍵盤(pán)掃描及顯示的實(shí)現(xiàn)的實(shí)驗(yàn)是,由于這次程序比較復(fù)雜,我們組采取二種辦法。一個(gè)人根據(jù)自己所學(xué)所看的資料寫(xiě)代碼(前二個(gè)實(shí)驗(yàn)都是我們自己寫(xiě)的代碼),另一個(gè)人在網(wǎng)上收資料。結(jié)果我們自己寫(xiě)的代碼有些不夠嚴(yán)謹(jǐn),結(jié)果循環(huán)顯示,顯然代碼沒(méi)有編好,然后我們組四個(gè)就參考網(wǎng)上收的代碼,先將代碼的含義弄清楚,然后我們?cè)趯?duì)代碼稍作修改,就完成了此次的代碼編寫(xiě)。這次實(shí)驗(yàn)涉及的知識(shí)較前面二個(gè)實(shí)驗(yàn)都多一些。比如,如何掃描鍵盤(pán),如何將結(jié)果顯示在數(shù)碼管上,如何使用數(shù)碼管(是共陰的還是共陽(yáng)的),如何防抖等等。具體看上面的鍵盤(pán)掃描及顯示的實(shí)現(xiàn)的注意事項(xiàng)。

此次實(shí)驗(yàn)我們基本達(dá)到題目的要求,通過(guò)這次實(shí)驗(yàn)我們對(duì)VHDL有了更清晰的認(rèn)識(shí)。雖然實(shí)驗(yàn)過(guò)程中我們成員之間有爭(zhēng)論,綜合、下載、調(diào)試時(shí)感覺(jué)很累,但挺一挺就過(guò)去了,困難過(guò)后才會(huì)感覺(jué)到成功的甘甜。

下載VHDL 編程的一些心得體會(huì)word格式文檔
下載VHDL 編程的一些心得體會(huì).doc
將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
點(diǎn)此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

相關(guān)范文推薦

    JAVA編程心得體會(huì)

    JAVA編程心得計(jì)算機(jī)3班 竇金霞 20104773 最近幾周一直在弄程序,說(shuō)實(shí)話真的很累,但累中也有成功的快樂(lè)。我覺(jué)得學(xué)到了很多東西,這是只看課本知識(shí)所不能學(xué)到的。說(shuō)實(shí)話,以前我一直......

    VHDL簡(jiǎn)答題總結(jié)

    1 數(shù)據(jù)BIT與STD_LOGIC的區(qū)別? Bit只是一個(gè)邏輯型變量,只能存在“0”和“1”,不存在不定狀態(tài)和高阻態(tài) STD_LOGIC存在U初始值,X不定,0,1,Z高阻 W弱信號(hào)不定,L弱信號(hào)1,H弱信號(hào)0,-不可能......

    數(shù)控編程實(shí)習(xí)心得體會(huì)

    數(shù)控編程實(shí)習(xí)心得體會(huì) 數(shù)控編程是數(shù)控加工準(zhǔn)備階段的主要內(nèi)容之一,下面是數(shù)控編程實(shí)習(xí)心得體會(huì),希望可以幫到大家。篇一:數(shù)控編程實(shí)習(xí)心得體會(huì)"天下英雄皆我輩,一入江湖立馬催。......

    socket編程實(shí)驗(yàn)心得體會(huì)

    實(shí)驗(yàn)心得體會(huì) 在本次實(shí)驗(yàn)中,我通過(guò)對(duì)網(wǎng)絡(luò)課上所學(xué)知識(shí)的應(yīng)用,學(xué)到了很多實(shí)踐中的知識(shí)。并且加深了我對(duì)課本知識(shí)的理解和認(rèn)識(shí),在實(shí)驗(yàn)過(guò)程中,更容易記憶和深入理解各種協(xié)議的工作......

    編程心得體會(huì)(共五則)

    篇一:java編程心得體會(huì) java編程心得計(jì)算機(jī)3班 竇金霞 20104773 最近幾周一直在弄程序,說(shuō)實(shí)話真的很累,但累中也有成功的快樂(lè)。我覺(jué)得學(xué)到了很多東西,這是只看課本知識(shí)所不能......

    java編程實(shí)習(xí)心得體會(huì)

    Java編程實(shí)習(xí)心得體會(huì) “紙上得來(lái)終覺(jué)淺,絕知此事要躬行。”在短暫的實(shí)習(xí)過(guò)程中,我深深的感覺(jué)到自己所學(xué)知識(shí)的膚淺和在實(shí)際運(yùn)用中的專(zhuān)業(yè)知識(shí)的匱乏。剛開(kāi)始的一段時(shí)間里,對(duì)一......

    VHDL課程設(shè)計(jì)報(bào)告 頻率計(jì)

    目錄 1. 前言........................................................................................................................... 2 2. 設(shè)計(jì)要求.................

    XX數(shù)控編程實(shí)習(xí)心得體會(huì)

    XX數(shù)控編程實(shí)習(xí)心得體會(huì) 實(shí)習(xí)結(jié)束了,但學(xué)習(xí)卻是永無(wú)止境,通過(guò)我實(shí)習(xí),我學(xué)到許多知識(shí)與技術(shù)。以下是小編收集的《數(shù)控編程實(shí)習(xí)心得體會(huì)》,僅供大家閱讀參考! 數(shù)控編程實(shí)習(xí)心得體......

主站蜘蛛池模板: 免费人成自慰网站| 麻豆婷婷狠狠色18禁久久| 国产av天堂亚洲国产av下载| 中国性少妇内射xxxx狠干| 日韩人妻无码精品一专区二区三区| 国产亚洲人成网站在线观看琪琪秋| 日本巨大的奶头在线观看| 亚洲国产精品尤物yw在线观看| 亚洲综合无码一区二区加勒此| 岛国av无码免费无禁网站麦芽| 在线а√天堂中文官网| 18禁成年无码免费网站无遮挡| 欧美亚洲综合在线一区| 5d肉蒲团之性战奶水欧美| 亚洲精品国产嫩草在线观看东京热| 国产精品永久免费嫩草研究院| 精品午夜国产福利观看| 少妇做爰免费视频网站| 一边啪啪一边呻吟av夜夜嗨| 精品国产拍国产天天人| 中文字幕精品亚洲字幕资源网| 麻豆免费观看高清完整视频| 成 年 人 黄 色 大 片大 全| 欧美日韩国产综合草草| 日韩人妻无码一区二区三区综合| 欧洲精品免费一区二区三区| 日韩成人无码影院| 久久综合伊人中文字幕| 国产精品另类激情久久久免费| 日本伊人色综合网| 海角社区在线视频播放观看| 美女自卫慰黄网站| 国产亚洲成年网址在线观看| 天天躁夜夜躁狠狠综合| 性虎精品无码av导航| 狼狼综合久久久久综合网| 国产精品亚洲专区无码唯爱网| 午夜美女裸体福利视频| 亚洲欧美日韩国产成人精品影院| 国产一乱一伦一情| 国产山东熟女48嗷嗷叫|