vhdl實驗報告_第1頁
vhdl實驗報告_第2頁
vhdl實驗報告_第3頁
vhdl實驗報告_第4頁
vhdl實驗報告_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

4、nals4) 設(shè)定運行時間,按旁邊的run命令按鈕,波形就出現(xiàn)了。按住ctrl滾動鼠標(biāo)滾輪可以放大縮小波形。5. 停止仿真在仿真進(jìn)行時,修改程序、編譯等都是無效的,也不能強(qiáng)行關(guān)閉軟件此時需要停止仿真,選擇菜單欄中的simulateend simulation四、 實驗代碼主程序: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ù)位信號無效時,時鐘上升沿到來,D觸發(fā)器d的值賦給q,當(dāng)復(fù)位信號為“1”有效時,輸出為“0”,結(jié)果正確。六、 實驗心得本次實驗主要是熟悉modelsim仿真軟件,學(xué)會軟件操作和仿

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

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

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

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

12、個狀態(tài)。狀態(tài)變化按順序依次變化。三、 實驗操作建立工程文件、寫代碼、編譯、仿真四、 實驗代碼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計數(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;五、 實驗結(jié)果模4狀態(tài)機(jī)當(dāng)復(fù)位信號有效時,輸出被鎖定在0001。在復(fù)位信號無效情況下,當(dāng)方向選擇信號di=1時,狀態(tài)轉(zhuǎn)換方向為

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

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

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

28、要構(gòu)建傳播信號p(3:0)和進(jìn)位產(chǎn)生信號g(3:0)。算法如下所示:p <= a xor b;g <= a and b;各級進(jìn)位信號的產(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位運算結(jié)果和進(jìn)位信號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è)計16位加法器需要調(diào)用4位加法器。因此需要先寫4位加法器程序。然后通過元件調(diào)用調(diào)用4位加法器。元件的聲明可以放在主代碼的結(jié)構(gòu)體中,也可以放在包集中。為了增強(qiáng)代碼的通用性,可以將聲明放在包集中。本實驗為了簡化程序,將定義放在了主代碼的結(jié)構(gòu)體中。三、 實驗操作建立工程文件、寫代碼、編譯、仿真四、 實驗代碼主程序: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;五、 實驗結(jié)果老師最后讓測試十六進(jìn)制ffff與ffff相加和0000與0000相加結(jié)果,由上圖可以看出當(dāng)進(jìn)位為1的時候,ffff加ffff結(jié)果為ffff,當(dāng)進(jìn)位為0的時候,ffff加ffff結(jié)果為fffe結(jié)果正確,進(jìn)位也正確。六、 實驗感想首先,這次實驗使我加深了對超前進(jìn)位加法器的認(rèn)識。通過這次實驗,使我進(jìn)一步掌握VHDL硬件描述語言。其次,程序設(shè)計需要有模塊化的思想,通過包集和元件的調(diào)用,可以使用以前設(shè)計好的程序設(shè)計新的結(jié)構(gòu)體。大大簡化了程序設(shè)計的復(fù)雜程

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

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

40、;如果A=B則輸出為0。使用CASE語句即可實現(xiàn)。2)乘法器設(shè)計原理本實驗采用并行乘法器的結(jié)構(gòu),結(jié)構(gòu)圖如下:程序分為top_row,mid_row,lower_row三個模塊,實現(xiàn)并行乘法3)加法器設(shè)計原理本實驗使用包集和元件調(diào)用的方式來實現(xiàn)加法器。因此,先要構(gòu)建4位加法器的基本原件,然后在8位加法器中調(diào)用2次使用。4位加法器的設(shè)計采用上次所用的超前進(jìn)位加法器,8位加法器的設(shè)計需要調(diào)用4位加法器。三、 實驗操作建立工程文件、寫代碼、編譯、仿真四、 實驗代碼選擇器: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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論