vhdl實(shí)驗(yàn)報(bào)告_第1頁(yè)
vhdl實(shí)驗(yàn)報(bào)告_第2頁(yè)
vhdl實(shí)驗(yàn)報(bào)告_第3頁(yè)
vhdl實(shí)驗(yàn)報(bào)告_第4頁(yè)
vhdl實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 本科實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱: 異步復(fù)位D觸發(fā)器 課程名稱:Vhdl上機(jī)實(shí)驗(yàn)實(shí)驗(yàn)時(shí)間:2014年5月8任課教師:桂小琰實(shí)驗(yàn)地點(diǎn):4#427實(shí)驗(yàn)教師:任仕偉實(shí)驗(yàn)類型: 原理驗(yàn)證 綜合設(shè)計(jì) 自主創(chuàng)新學(xué)生姓名:學(xué)號(hào)/班級(jí):組 號(hào):20學(xué) 院:信息與電子學(xué)院同組搭檔:專 業(yè):電子科學(xué)與技術(shù)成 績(jī):一、 實(shí)驗(yàn)?zāi)康氖煜odelsim仿真軟件,學(xué)會(huì)軟件操作和仿真流程;學(xué)會(huì)激勵(lì)文件的編寫和設(shè)置;完成一個(gè)簡(jiǎn)單題目,熟練掌握以上內(nèi)容。二、 設(shè)計(jì)內(nèi)容設(shè)計(jì)帶有異步復(fù)位的D觸發(fā)器:D觸發(fā)器的電路符號(hào)如下圖所示,它是一個(gè)上升沿觸發(fā)的觸發(fā)器,又一個(gè)數(shù)據(jù)輸入端d、一個(gè)時(shí)鐘輸入端clk、一個(gè)異步復(fù)位端rst和數(shù)據(jù)輸出端q。真值表如

2、下圖所示,當(dāng)只有復(fù)位端無(wú)效,并且上升沿過(guò)后,輸入端的數(shù)據(jù)才傳遞到輸出端q。 dclk qrst D觸發(fā)器真值表數(shù)據(jù)輸入時(shí)鐘輸入復(fù)位輸入數(shù)據(jù)輸出dclkrstqx00不變x10不變000101xx10輸入引腳有3根,分別為時(shí)鐘clk:STD_LOGIC類型,提供整個(gè)系統(tǒng)的時(shí)鐘信號(hào);輸入信號(hào)d:STD_LOGIC類型,提供觸發(fā)器的輸入;復(fù)位信號(hào)rst:STD_LOGIC類型,提供系統(tǒng)復(fù)位; 輸出引腳有1組,為d: STD_LOGIC類型,輸出對(duì)應(yīng)狀態(tài)的結(jié)果。三、 實(shí)驗(yàn)操作1. 建立工程文件在建立工程(project)前,先建立一個(gè)工作庫(kù)(library),命名為work,尤其是第一次運(yùn)行軟件時(shí),是

3、沒(méi)有work的,但一般project是在work下工作的,所以有必要先建立work。2. 寫代碼1) 寫主程序:雙擊剛剛建立的.vhd文件,會(huì)出現(xiàn)程序編輯區(qū),寫完代碼注意保存,然后在編譯,否則編譯無(wú)效。2) 寫測(cè)試文件:testbench文件3. 編譯1) 程序文件.vhd點(diǎn)右鍵,選擇compile2) 編譯有問(wèn)題雙擊最下方命令窗口,出現(xiàn)錯(cuò)誤提示。根據(jù)提示修改程序,直到成功為止。4. 仿真1) 點(diǎn)擊屏幕左下角library切換鍵,點(diǎn)擊work前的+,出現(xiàn)主文件和測(cè)試文件,右鍵選擇仿真測(cè)試文件。2) 出現(xiàn)object框:3) 同時(shí)選中輸入輸出端口的信號(hào),右鍵addtowaveselect sig

4、nals4) 設(shè)定運(yùn)行時(shí)間,按旁邊的run命令按鈕,波形就出現(xiàn)了。按住ctrl滾動(dòng)鼠標(biāo)滾輪可以放大縮小波形。5. 停止仿真在仿真進(jìn)行時(shí),修改程序、編譯等都是無(wú)效的,也不能強(qiáng)行關(guān)閉軟件此時(shí)需要停止仿真,選擇菜單欄中的simulateend simulation四、 實(shí)驗(yàn)代碼主程序:LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY dff is PORT(d,clk,rst:IN STD_LOGIC; q:OUT STD_LOGIC);END ENTITY dff;ARCHITECTURE behavior OF dff isBEGIN PROCESS

5、(rst,clk) BEGIN IF(rst='1')THEN q<='0' ELSIF(clk'EVENT AND clk='1') THEN q<=d; END IF; END PROCESS;END ARCHITECTURE behavior;Testbench文件:library ieee;use ieee.std_logic_1164.all;entity test_bench is end test_bench;architecture tb_behavior of test_bench iscomponent d

6、ff port( d,clk,rst:in std_logic; q:out std_logic );end component;signal q,d,clk,rst:std_logic;begin dut:dff port map( d,clk,rst,q ); clk_gen:process begin clk<='0' wait for 50 ns; clk<='1' wait for 50 ns; end process; d_gen:process begin wait for 100 ns; d<='1' wait

7、for 100 ns; d<='0' end process; ret_gen:process begin rst<='1' wait for 150 ns; rst<='0' wait for 300 ns; rst<='1' wait; end process;end tb_behavior;五、 仿真結(jié)果由仿真結(jié)果可以看出,當(dāng)復(fù)位信號(hào)無(wú)效時(shí),時(shí)鐘上升沿到來(lái),D觸發(fā)器d的值賦給q,當(dāng)復(fù)位信號(hào)為“1”有效時(shí),輸出為“0”,結(jié)果正確。六、 實(shí)驗(yàn)心得本次實(shí)驗(yàn)主要是熟悉modelsim仿真軟件,學(xué)會(huì)軟件操作和仿

8、真流程,學(xué)會(huì)激勵(lì)文件的編寫和設(shè)置。在練習(xí)D觸發(fā)器之后,我對(duì)整個(gè)實(shí)驗(yàn)的操作流程有了一個(gè)全面的熟悉。D觸發(fā)器的程序比較簡(jiǎn)單,并且老師上課也講過(guò)。不太熟悉的是Testbench文件的編寫,仿照老師給的文件結(jié)構(gòu),以及按照錯(cuò)誤提示修改程序,最后也編譯成功了,雖然用的時(shí)間比較多,但是學(xué)會(huì)了元件例化以及端口映射的知識(shí)。 本科實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱: 步進(jìn)電機(jī)控制器 課程名稱:Vhdl上機(jī)實(shí)驗(yàn)實(shí)驗(yàn)時(shí)間:2014年5月15任課教師:桂小琰實(shí)驗(yàn)地點(diǎn):4#427實(shí)驗(yàn)教師:任仕偉實(shí)驗(yàn)類型: 原理驗(yàn)證 綜合設(shè)計(jì) 自主創(chuàng)新學(xué)生姓名:學(xué)號(hào)/班級(jí):組 號(hào):20學(xué) 院:信息與電子學(xué)院同組搭檔:專 業(yè):電子科學(xué)與技術(shù)成 績(jī):一、 實(shí)驗(yàn)

9、目的通過(guò)設(shè)計(jì)狀態(tài)機(jī)以進(jìn)一步掌握VHDL硬件描述語(yǔ)言;熟悉狀態(tài)機(jī)的編程思想,掌握模塊化的狀態(tài)機(jī)編程過(guò)程。二、 設(shè)計(jì)內(nèi)容1. 模4狀態(tài)機(jī)1)由于實(shí)驗(yàn)電路主要由時(shí)序電路組成,因此整體代碼采用順序描述語(yǔ)句實(shí)現(xiàn)。狀態(tài)轉(zhuǎn)換圖如下: 步狀態(tài)輸出狀態(tài)phase(3,0)S0S1S2S30001001001001000S0S1S2S310101010狀態(tài)機(jī)與輸出信號(hào)對(duì)應(yīng)關(guān)系狀態(tài)轉(zhuǎn)換圖2)輸入輸出引腳信號(hào)輸入引腳有3根,分別為時(shí)鐘clk:STD_LOGIC類型,提供整個(gè)系統(tǒng)的時(shí)鐘信號(hào);方向選擇信號(hào)din:STD_LOGIC類型,選擇狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換方向;輸出引腳有1組,為:phase(3:0): STD_LOGI

10、C_VECTOR類型,輸出對(duì)應(yīng)狀態(tài)的結(jié)果。 3)設(shè)計(jì)原理狀態(tài)機(jī)分為時(shí)序部分和邏輯部分。時(shí)序部分完成狀態(tài)轉(zhuǎn)換的功能;邏輯部分決定輸出信號(hào)和次態(tài)。時(shí)序部分有四個(gè)狀態(tài),由固定的時(shí)鐘信號(hào)驅(qū)動(dòng)。當(dāng)時(shí)鐘上升沿到來(lái)時(shí),自動(dòng)跳轉(zhuǎn)到次態(tài)。4個(gè)狀態(tài)循環(huán)跳轉(zhuǎn)。邏輯部分由現(xiàn)態(tài)驅(qū)動(dòng),依據(jù)現(xiàn)態(tài)選擇輸出信號(hào)和次態(tài)。當(dāng)方向轉(zhuǎn)換信號(hào)din為1時(shí),次態(tài)按照轉(zhuǎn)換圖中順時(shí)針轉(zhuǎn)換;當(dāng)方向轉(zhuǎn)換信號(hào)din為0時(shí),次態(tài)按照轉(zhuǎn)換圖中逆時(shí)針轉(zhuǎn)換。時(shí)序部分使用PROCESS實(shí)現(xiàn),其中的判斷與選擇使用IF條件語(yǔ)句;邏輯部分也使用PROCESS實(shí)現(xiàn),次態(tài)和輸出的確定可以使用CASE分支選擇語(yǔ)句。在實(shí)驗(yàn)中,我加入了復(fù)位語(yǔ)句res,當(dāng)復(fù)位信號(hào)有效時(shí),狀態(tài)

11、停留在s0,當(dāng)無(wú)效的時(shí)候按照規(guī)定狀態(tài)執(zhí)行。2. BCD計(jì)數(shù)器1)轉(zhuǎn)換圖狀態(tài)轉(zhuǎn)換圖狀態(tài)機(jī)與輸出信號(hào)對(duì)應(yīng)關(guān)系狀態(tài)輸出狀態(tài)phase(3,0)zeroonetwothreefourfivesixseveneightnine00000001001000110100010101100111100010012)輸入輸出引腳信號(hào)輸入引腳有3根,分別為時(shí)鐘clk:STD_LOGIC類型,提供整個(gè)系統(tǒng)的時(shí)鐘信號(hào);復(fù)位信號(hào)rst:STD_LOGIC類型,提供復(fù)位信息;輸出引腳有1組,為:cout(3:0): STD_LOGIC_VECTOR類型,輸出對(duì)應(yīng)狀態(tài)的結(jié)果。 3)設(shè)計(jì)原理 原理與模4狀態(tài)機(jī)相同,只是多了幾

12、個(gè)狀態(tài)。狀態(tài)變化按順序依次變化。三、 實(shí)驗(yàn)操作建立工程文件、寫代碼、編譯、仿真四、 實(shí)驗(yàn)代碼1.模4狀態(tài)機(jī)library ieee;use ieee.std_logic_1164.all;entity stepmotor isport(clk,res,di:in std_logic; phase:out std_logic_vector(3 downto 0); end entity; architecture step of stepmotor is type state is (s0,s1,s2,s3); signal pr_state,nx_state:state; begin proc

13、ess(clk) begin if(clk'event and clk='1')then if (res='1')then pr_state<=s0; else pr_state<=nx_state; end if; end if; end process; process(pr_state,di) begin if(di='1')then case pr_state is when s0=>nx_state<=s1;phase<="0001" when s1=>nx_state&l

14、t;=s2;phase<="0010" when s2=>nx_state<=s3;phase<="0100" when s3=>nx_state<=s0;phase<="1000" when others=>nx_state<=s0;phase<="0001" end case; elsif (di='0')then case pr_state is when s0=>nx_state<=s3;phase<="

15、0001" when s3=>nx_state<=s2;phase<="0010" when s2=>nx_state<=s1;phase<="0100" when s1=>nx_state<=s0;phase<="1000" when others=>nx_state<=s0;phase<="0001" end case; end if; end process;end architecture step;tb文件:library

16、ieee;use ieee.std_logic_1164.all;entity test_bench1 isend test_bench1;architecture tb_behavior of test_bench1 iscomponent stepmotor port(clk,res,di:in std_logic; phase:out std_logic_vector(3 downto 0);end component;type state is (s0,s1,s2,s3); signal pr_state,nx_state:state;signal clk,res,di:std_log

17、ic;signal phase:std_logic_vector(3 downto 0);begin dut:stepmotor port map( clk,res,di,phase ); clk_gen:process begin clk<='0' wait for 50 ns; clk<='1' wait for 50 ns; end process; ret_gen:process begin res<='1' wait for 1500 ns; res<='0' wait; end process;

18、 di_gen:process begin di<='1' wait for 8000 ns; di<='0' wait; end process; end tb_behavior;3. BCD計(jì)數(shù)器library ieee;use ieee.std_logic_1164.all;entity counter is port (clk,rst:in std_logic; count:out std_logic_vector(3 downto 0);end counter;architecture state_machine of counter is

19、 type state is (zero,one,two,three,four,five,six,seven,eight,nine); signal pr_state,nx_state:state; beginprocess(rst,clk) begin if(rst='0')then pr_state<=nx_state; end if;end process;process(pr_state)begin case pr_state is when zero=> count<="0000" nx_state<=one; when o

20、ne=> count<="0001" nx_state<=two; when two=> count<="0010" nx_state<=three; when three=> count<="0011" nx_state<=four; when four=> count<="0100" nx_state<=five; when five=> count<="0101" nx_state<=six; whe

21、n six=> count<="0110" nx_state<=seven; when seven=> count<="0111" nx_state<=eight; when eight=> count<="1000" nx_state<=nine; when nine=> count<="1001" nx_state<=zero; end case; end process; end state_machine;tb文件library iee

22、e;use ieee.std_logic_1164.all;entity test_bench isend test_bench;architecture tb_behavior of test_bench iscomponent counter port (clk,rst:in std_logic; count:out std_logic_vector(3 downto 0);end component;signal clk,rst:std_logic;signal count:std_logic_vector(3 downto 0);begin dut:counter port map(

23、clk,rst,count ); clk_gen:process begin clk<='0' wait for 50 ns; clk<='1' wait for 50 ns; end process; ret_gen:process begin rst<='1' wait for 500 ns; rst<='0' wait; end process;end tb_behavior;五、 實(shí)驗(yàn)結(jié)果模4狀態(tài)機(jī)當(dāng)復(fù)位信號(hào)有效時(shí),輸出被鎖定在0001。在復(fù)位信號(hào)無(wú)效情況下,當(dāng)方向選擇信號(hào)di=1時(shí),狀態(tài)轉(zhuǎn)換方向?yàn)?/p>

24、00010010010010000001;當(dāng)方向選擇信號(hào)di=0時(shí),狀態(tài)轉(zhuǎn)換方向?yàn)?0011000010000100001。由實(shí)驗(yàn)仿真結(jié)果可知,程序可以實(shí)現(xiàn)所要求的狀態(tài)轉(zhuǎn)換功能,實(shí)驗(yàn)成功。當(dāng)復(fù)位信號(hào)有效時(shí),輸出被鎖定在0000。在復(fù)位信號(hào)無(wú)效情況下,狀態(tài)轉(zhuǎn)換位 0000000100100011010001010110011110001001。由實(shí)驗(yàn)仿真結(jié)果可知,程序可以實(shí)現(xiàn)所要求的狀態(tài)轉(zhuǎn)換功能,實(shí)驗(yàn)成功。六、 實(shí)驗(yàn)心得通過(guò)這次實(shí)驗(yàn),進(jìn)一步熟悉了軟件的操作,狀態(tài)機(jī)使用了兩個(gè)process,用了模塊化思想。兩個(gè)process是并發(fā)執(zhí)行的,兩個(gè)process里的語(yǔ)句又是順序執(zhí)行的。有了第一次的實(shí)驗(yàn)經(jīng)

25、驗(yàn),tb文件的編寫也變得容易起來(lái),課上老師也講過(guò)了狀態(tài)機(jī)的例題,總的來(lái)說(shuō)沒(méi)有遇到太大的問(wèn)題。這次實(shí)驗(yàn)使我更加了解了“硬件描述語(yǔ)言”的設(shè)計(jì)思想,模塊化以及層次化設(shè)計(jì)更具有描述能力。 本科實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱: 16位加法器的設(shè)計(jì) 課程名稱:Vhdl上機(jī)實(shí)驗(yàn)實(shí)驗(yàn)時(shí)間:2014年5月22任課教師:桂小琰實(shí)驗(yàn)地點(diǎn):4#427實(shí)驗(yàn)教師:任仕偉實(shí)驗(yàn)類型: 原理驗(yàn)證 綜合設(shè)計(jì) 自主創(chuàng)新學(xué)生姓名:學(xué)號(hào)/班級(jí):組 號(hào):20學(xué) 院:信息與電子學(xué)院同組搭檔:專 業(yè):電子科學(xué)與技術(shù)成 績(jī):一、 實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)加法器以進(jìn)一步掌握VHDL硬件描述語(yǔ)言;熟悉逐位進(jìn)位加法器的原理與設(shè)計(jì)風(fēng)格;熟悉包集和元件的使用。二、 設(shè)計(jì)內(nèi)容1.

26、16位加法器的整體結(jié)構(gòu)圖:4_bit_adder4_bit_adder4_bit_adder4_bit_addercincoutS(3:0)S(7:4)S(11:8)S(15:12)A(15:12)A(11:8)A(7:4)A(3:0)B(15:12)B(11:8)B(7:4)B(3:0)16位加法器的整體結(jié)構(gòu)圖全加器真值表輸入A輸入B輸入進(jìn)位C輸出S輸出進(jìn)位C000000011001010011011001010101110011111116位加法器是由4個(gè)4位加法器級(jí)聯(lián)組成的,下級(jí)的輸出送給上級(jí),最后的結(jié)果為4個(gè)4位加法器的組合數(shù)。2.輸入輸出引腳信號(hào)輸入引腳兩個(gè)16位的加數(shù)以及1個(gè)1位的

27、進(jìn)位信號(hào),分別為a(15:0), b(15:0): STD_LOGIC_VECTOR類型,兩個(gè)加數(shù);cin: STD_LOGIC類型,初始進(jìn)位信號(hào)。 輸出引腳為1個(gè)16位的運(yùn)算結(jié)果和1個(gè)1位的進(jìn)位信號(hào),分別為:s(15:0): STD_LOGIC_VECTOR類型,加法運(yùn)算結(jié)果;cout: STD_LOGIC類型,進(jìn)位信號(hào)。3.設(shè)計(jì)原理本實(shí)驗(yàn)要求使用包集和元件調(diào)用的方式來(lái)實(shí)現(xiàn)系統(tǒng)。因此,先要構(gòu)建4位加法器,然后在16位加法器中調(diào)用4位加法器。1)4位加法器的設(shè)計(jì)4位逐位進(jìn)位加法器的結(jié)構(gòu)圖本實(shí)驗(yàn)的4位加法器采用超前進(jìn)位加法器。對(duì)于輸入的兩個(gè)4位加數(shù)a(3:0)、b(3:0)和進(jìn)位信號(hào)cin,首先

28、要構(gòu)建傳播信號(hào)p(3:0)和進(jìn)位產(chǎn)生信號(hào)g(3:0)。算法如下所示:p <= a xor b;g <= a and b;各級(jí)進(jìn)位信號(hào)的產(chǎn)生算法如下所示:g1(0)<=cin; p1: for i in 0 to 3 generate g(i)<=a(i) and b(i); p(i)<=a(i) xor b(i); p2: if(i/=3) generate g1(i+1)<=g(i) xor (p(i) and g1(i);end generate;c(i)<=p(i) xor g1(i);end generate;輸出的4位運(yùn)算結(jié)果和進(jìn)位信號(hào)cou

29、t的產(chǎn)生算法如下所示:c(4)<=g(3) or (p(3) and g1(3);cout<=c(4);s<=c(3 downto 0);2)16位加法器的設(shè)計(jì)16位加法器需要調(diào)用4位加法器。因此需要先寫4位加法器程序。然后通過(guò)元件調(diào)用調(diào)用4位加法器。元件的聲明可以放在主代碼的結(jié)構(gòu)體中,也可以放在包集中。為了增強(qiáng)代碼的通用性,可以將聲明放在包集中。本實(shí)驗(yàn)為了簡(jiǎn)化程序,將定義放在了主代碼的結(jié)構(gòu)體中。三、 實(shí)驗(yàn)操作建立工程文件、寫代碼、編譯、仿真四、 實(shí)驗(yàn)代碼主程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_log

30、ic_arith.all;entity adder is port(a,b:in std_logic_vector(15 downto 0); cin:in std_logic; cout:out std_logic; s:out std_logic_vector(15 downto 0);end entity adder;architecture behavior of adder iscomponent adder4 isport (a,b:in std_logic_vector(3 downto 0); cin:in std_logic; cout:out std_logic; s:ou

31、t std_logic_vector(3 downto 0); end component; signal c:std_logic_vector(4 downto 0); begin c(0)<=cin; p0:adder4 port map (a(3 downto 0),b(3 downto 0),c(0),c(1),s(3 downto 0); p1:adder4 port map (a(7 downto 4),b(7 downto 4),c(1),c(2),s(7 downto 4); p2:adder4 port map (a(11 downto 8),b(11 downto 8

32、),c(2),c(3),s(11 downto 8); p3:adder4 port map (a(15 downto 12),b(15 downto 12),c(3),c(4),s(15 downto 12); cout<=c(4); end architecture behavior;4位加法器:library ieee;use ieee.std_logic_1164.all;entity adder4 is port(a,b:in std_logic_vector(3 downto 0); cin:in std_logic; cout:out std_logic; s:out st

33、d_logic_vector(3 downto 0);end entity;architecture behavior of adder4 issignal g,p,g1:std_logic_vector(3 downto 0);signal c:std_logic_vector(4 downto 0);begin g1(0)<=cin; p1: for i in 0 to 3 generate g(i)<=a(i) and b(i); p(i)<=a(i) xor b(i); p2: if(i/=3) generate g1(i+1)<=g(i) xor (p(i)

34、and g1(i);end generate;c(i)<=p(i) xor g1(i);end generate;c(4)<=g(3) or (p(3) and g1(3);cout<=c(4);s<=c(3 downto 0);end architecture;tb文件:library ieee;use ieee.std_logic_1164.all;entity tb_adder isend tb_adder;architecture tb_behavior of tb_adder iscomponent adder port(a,b:in std_logic_ve

35、ctor(15 downto 0); cin:in std_logic; cout:out std_logic; s:out std_logic_vector(15 downto 0);end component; signal a,b: std_logic_vector(15 downto 0); signal cin: std_logic; signal cout: std_logic; signal s: std_logic_vector(15 downto 0);begin dut:adder port map( a,b,cin,cout,s ); a_gen:process begi

36、n a<="1111111111111111" wait for 200 ns; a<="0000000000000000" wait for 200 ns; end process; b_gen:process begin b<="1111111111111111" wait for 200 ns; b<="0000000000000000" wait for 200 ns; end process; cin_gen:process begin cin<='1' wa

37、it for 200 ns; cin<='0' wait; end process; end tb_behavior;五、 實(shí)驗(yàn)結(jié)果老師最后讓測(cè)試十六進(jìn)制ffff與ffff相加和0000與0000相加結(jié)果,由上圖可以看出當(dāng)進(jìn)位為1的時(shí)候,ffff加ffff結(jié)果為ffff,當(dāng)進(jìn)位為0的時(shí)候,ffff加ffff結(jié)果為fffe結(jié)果正確,進(jìn)位也正確。六、 實(shí)驗(yàn)感想首先,這次實(shí)驗(yàn)使我加深了對(duì)超前進(jìn)位加法器的認(rèn)識(shí)。通過(guò)這次實(shí)驗(yàn),使我進(jìn)一步掌握VHDL硬件描述語(yǔ)言。其次,程序設(shè)計(jì)需要有模塊化的思想,通過(guò)包集和元件的調(diào)用,可以使用以前設(shè)計(jì)好的程序設(shè)計(jì)新的結(jié)構(gòu)體。大大簡(jiǎn)化了程序設(shè)計(jì)的復(fù)雜程

38、度。這次實(shí)驗(yàn)中比較成功之處在于對(duì)實(shí)驗(yàn)原理理解較為透徹,參考書上講的加法器,編程工作比較輕松。實(shí)驗(yàn)中運(yùn)用循環(huán)語(yǔ)句,可以減少程序的語(yǔ)句的繁重編寫。 本科實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱: 選擇運(yùn)算器 課程名稱:Vhdl上機(jī)實(shí)驗(yàn)實(shí)驗(yàn)時(shí)間:2014年5月29任課教師:桂小琰實(shí)驗(yàn)地點(diǎn):4#427實(shí)驗(yàn)教師:任仕偉實(shí)驗(yàn)類型: 原理驗(yàn)證 綜合設(shè)計(jì) 自主創(chuàng)新學(xué)生姓名:學(xué)號(hào)/班級(jí):組 號(hào):20學(xué) 院:信息與電子學(xué)院同組搭檔:專 業(yè):電子科學(xué)與技術(shù)成 績(jī):一、 實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)設(shè)計(jì)選擇運(yùn)算器以進(jìn)一步掌握VHDL硬件描述語(yǔ)言;熟悉比較器、乘法器的原理與設(shè)計(jì)風(fēng)格;熟悉包集和元件的使用。二、 設(shè)計(jì)內(nèi)容1選擇運(yùn)算器選擇運(yùn)算器由加法器、乘法器和

39、比較器三部分組成。首先判斷A與B的關(guān)系,當(dāng)A>B時(shí),A與B相乘,當(dāng)A<B時(shí),A與B相加,當(dāng)A=B時(shí),輸出0.A>BA<BA=B比較器×+0A(7:0)B(7:0)cout圖1 選擇運(yùn)算器的整體結(jié)構(gòu)圖 2輸入輸出信號(hào)輸入為兩個(gè)8位的二進(jìn)制數(shù),分別為a(7:0), b(7:0): STD_LOGIC_VECTOR類型。輸出引腳為1個(gè)16位的運(yùn)算結(jié)果,為:cout(15:0): STD_LOGIC_VECTOR類型。3.設(shè)計(jì)原理1)比較器設(shè)計(jì)原理比較器是個(gè)比較簡(jiǎn)單的模塊。將輸入A與B進(jìn)行比較,如果A>B則實(shí)現(xiàn)A與B的乘運(yùn)算;如果A<B則實(shí)現(xiàn)A與B的加運(yùn)算

40、;如果A=B則輸出為0。使用CASE語(yǔ)句即可實(shí)現(xiàn)。2)乘法器設(shè)計(jì)原理本實(shí)驗(yàn)采用并行乘法器的結(jié)構(gòu),結(jié)構(gòu)圖如下:程序分為top_row,mid_row,lower_row三個(gè)模塊,實(shí)現(xiàn)并行乘法3)加法器設(shè)計(jì)原理本實(shí)驗(yàn)使用包集和元件調(diào)用的方式來(lái)實(shí)現(xiàn)加法器。因此,先要構(gòu)建4位加法器的基本原件,然后在8位加法器中調(diào)用2次使用。4位加法器的設(shè)計(jì)采用上次所用的超前進(jìn)位加法器,8位加法器的設(shè)計(jì)需要調(diào)用4位加法器。三、 實(shí)驗(yàn)操作建立工程文件、寫代碼、編譯、仿真四、 實(shí)驗(yàn)代碼選擇器:library ieee;use ieee.std_logic_1164.all;use work.my_file.all;enti

41、ty operation is port (a,b:in std_logic_vector(7 downto 0); cout:out std_logic_vector(15 downto 0); end operation; architecture xuanze of operation is signal temp1:std_logic_vector(15 downto 0); signal temp2:std_logic_vector(7 downto 0):="00000000" signal temp3:std_logic:='0' signal

42、 flag:integer range 1 to 3:=3; begin u1:component multiplier port map(a,b,temp1); u2:component adder port map(a,b,temp2,'0',temp3); process(a,b) begin if(a>b)then flag<=1; elsif(a<b)then flag<=2; else flag<=3; end if; end process; with flag select cout<= temp1 when 1, "

43、;0000000"&temp3&temp2 when 2, (others=>'0')when others; end xuanze;-library ieee;use ieee.std_logic_1164.all;package my_file is component multiplier is port( a,b:in std_logic_vector(7 downto 0); p:out std_logic_vector(15 downto 0); end component; component adder is port( a,b:

44、in std_logic_vector(7 downto 0); s:out std_logic_vector(7 downto 0); cin:in std_logic; cout:out std_logic); end component; end my_file;元件例化:library ieee;use ieee.std_logic_1164.all;package my_component is component and_2 is port( a,b:in std_logic; y:out std_logic); end component; component fau is po

45、rt( a,b,cin:in std_logic; s,cout:out std_logic); end component; component top_row is port( a:in std_logic; b:in std_logic_vector(7 downto 0); sout,cout:out std_logic_vector(6 downto 0); p:out std_logic); end component; component min_row is port( a:in std_logic; b:in std_logic_vector(7 downto 0); sin

46、,cin:in std_logic_vector(6 downto 0); sout,cout:out std_logic_vector(6 downto 0); p:out std_logic); end component; component lower_row is port( sin,cin:in std_logic_vector(6 downto 0); p:out std_logic_vector(7 downto 0); end component; end my_component;乘法器:library ieee;use ieee.std_logic_1164.all;us

47、e work.my_component.all;entity multiplier is port( a,b:in std_logic_vector(7 downto 0); p:out std_logic_vector(15 downto 0);end entity;architecture xuanze of multiplier istype m is array (0 to 7)of std_logic_vector(6 downto 0);signal s,c:m;begin u1:component top_row port map(a(0),b,s(0),c(0),p(0); u

48、2:component min_row port map(a(1),b,s(0),c(0),s(1),c(1),p(1); u3:component min_row port map(a(2),b,s(1),c(0),s(2),c(2),p(2); u4:component min_row port map(a(3),b,s(2),c(0),s(3),c(3),p(3); u5:component min_row port map(a(4),b,s(3),c(0),s(4),c(4),p(4); u6:component min_row port map(a(5),b,s(4),c(0),s(

49、5),c(5),p(5); u7:component min_row port map(a(6),b,s(5),c(0),s(6),c(6),p(6); u8:component min_row port map(a(7),b,s(6),c(0),s(7),c(7),p(7); u9:component lower_row port map(s(7),c(7),p(15 downto 8);end architecture xuanze;-library ieee;use ieee.std_logic_1164.all;use work.my_component.all;entity top_

50、row is port( a:in std_logic; b:in std_logic_vector(7 downto 0); sout,cout:out std_logic_vector(6 downto 0); p:out std_logic) ; end top_row; architecture xuanze of top_row is begin u1:component and_2 port map(a,b(7),sout(6); u2:component and_2 port map(a,b(6),sout(5); u3:component and_2 port map(a,b(5),sout(4); u4:component and_2 port map(a,b(4),sout(3); u5:component and_2 port map(a,b(3),sout(2); u6:co

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論