專用集成電路實驗報告
1305 0Z 01
1305 0 242 37 7
劉德文
實驗一
開發平臺軟件安裝與認知實驗
實驗內容 1 1 、
本實驗以三線八線譯碼器 (L S 741 38) ) 為例, ,在 在 Xilinx I S E 9 、2 2 軟件平臺上完成設計電路得 L VHDL 文本輸入、語法檢查、編譯、仿真、管腳分配與編程下載等操作。下載芯片選擇 Xil in n x 公司得 Coo lR unn e r II I 系列 XC2 C 25 6- - 7P P Q8 208 作為目標仿真芯片、
?。病?/p>
用1中所設計得得三線八線譯碼器 (LS 74 4 1 38) 生成一個 LS7 48 138 元件, ,在 在 X X i linx IS E 9。2 2 軟件原理圖設計平臺上完成 8 LS74138 元件得調用, , 用原理圖得方法設計三線八線譯碼器 (LS74138), 實現編譯, , 仿真, , 管腳分配與編程下載等操作。
源程序:
library IEEE; use IEEE。STD_LOGIC_1164.ALL; use IEEE。STD_LOGIC_ARITH。ALL; use IEEE。STD_LOGIC_UNSIGNED、ALL; -—
Unment the following lines to use the declarations that are --
provided for instantiating Xilinx primitive ponents、 --library UNISIM; --use UNISIM.Vponents。all; entity ls74138 is
Port ( g1 : in std_logic;
g2 : in std_logic;
?。閚p : in std_logic_vector(2 downto 0);
y : out std_logic_vector(7 downto 0));
end ls74138; architecture Behavioral of ls74138 is begin process(g1,g2,inp) begin
if((g1 and g2)='1’) then
si pni esac?
when ”000"=>y<="00000001";
;”01000000"=〈y〉=”100" nehw?
when ”010"=>y<=”00000100”;
;"00010000”=<y>=”110” nehw?
;”00001000”=〈y>="001" nehw?
;”00000100”=〈y>=”101" nehw?
when "110”=>y<="01000000";
;"00000001"=<y>="111" nehw?
;""=<y>=srehto nehw? ?
end case;
else
;""=<y??
end if; end process; end Behavioral; 波形文件: :
生成元器件及連接電路
思考: :
有程序可以瞧出, 定義了三個輸入端, 一個輸出端、g1,g2 為使能輸入端, 當全為一時, 開始執行寬度為三得輸入in p, 并聽過程序實現三八譯碼器得功能、通過實驗, 分別用了原理圖與vhdl 語言兩種方式進行調試。兩種方法各有優缺點。對于原理圖而言, 可以清晰直觀得瞧出電路各部分得構造, 但卻只能在原有得基礎上進行鏈接而無法隨意修改元器件功能; vhdl語言則可以按照實際得需求進行編寫程序, 從而可以實現開發者想要實現得功能。
實驗二
組合邏輯電路得 L VHDL 語言實現
實驗內容: 1.用 用 V V HL DL 語言實現優先編碼器得設計并實現功能仿真
2. 用VH H DL L 語言實現四選一選擇器得設計并實現功能仿真。
1 、優先編碼器源程序 LIBRARY IEEE; USE IEEE。STD_LOGIC_1164。ALL; ENTITY priorityencoder IS
PORT (input:IN STD_LOGIC_VECTOR (7 DOWNTO 0);
?。?OUT STD_LOGIC_VECTOR (2 DOWNTO 0)); END priorityencoder; ARCHITECTURE rtl OF priorityencoder IS BEGIN
PROCESS (input)
BEGIN
IF(input(0)=’0") THEN
y<="111";
ELSIF(input(1)=’0") THEN
y<="110";
ELSIF(input(2)=’0") THEN
y<=”101”;
ELSIF(input(3)=’0") THEN
y<="100”;
ELSIF(input(4)='0") THEN
?。?"011";
ELSIF(input(5)=’0’) THEN
y<=”010";
ELSIF(input(6)='0’) THEN
y〈=”001”;
ELSE
y〈="000";
END IF;
END PROCESS;
END rtl; 波形圖
原理圖:
2. 四選一選擇器源程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164、ALL; ENTITY mux4 IS
?。蠴RT (input:IN STD_LOGIC_VECTOR (3 DOWNTO 0);
a,b:IN STD_LOGIC;
y:OUT STD_LOGIC); END mux4; ARCHITECTURE rt1 OF mux4 IS SIGNAL se1:STD_LOGIC_VECTOR (1 DOWNTO 0); BEGIN
se1〈=b&a;
PROCESS (input,se1)
?。翬GIN
IF(se1="00”)THEN
y<=input(0);
ELSIF(se1=”01”)THEN
y〈=input(1);
ELSIF(se1="10")THEN
y〈=input(2);
?。臠SE
y〈=input(3);
?。臢D IF;
END PROCESS; END rt1; 波形圖
原理圖
思考:
1. 優先編碼器: 通過程序定義了一個八位得輸入端與一個三位得輸入端。首先就是通過八位得
輸入端得最低 位開始判斷,是 如果就是 0, 則輸出為:111;是 如果就是 1, 則判斷第
二位, 以此類推, 直到最后一位, 如果都不滿足, 則輸出:00 0。
2 、四選一選擇器: 一共有三個輸入, 其中一個就是寬度為四得可供選擇得輸入端, 將一個四位給 寬度得二進制碼賦值給 input 端, 通過 a 與 與 b 得輸入選擇in put 得輸出。如ab 為 為 00 時,則輸出為:inpu t(0), 以此類推、 實驗三
時序邏輯電路得 L VHDL 語言實驗
實驗內容:( 3選 1) (一)
、 設計一個 0 60 進制得計數器
?。ǘ?/p>
設計一帶使能得同步復位清零得遞增 8 8 位二進制計數器
?。ㄈ?/p>
設計 一帶使能得異步清零復位得遞增 8 8 位二進制計數器
六十進制( 異步清零) 源程序:
library ieee; use ieee。std_logic_1164。all; use ieee、std_logic_unsigned.all; entity ycounter is
port(clk,clear,enable:in std_logic;
--ld:in std_logic;
—-d:in std_logic_vector(7 downto 0);
qk:out std_logic_vector(7 downto 0)); end ycounter; architecture a_ycounter of ycounter is
?。鈋gin
?。蠷OCESS (clk)
VARIABLE cnt :std_logic_vector(7 downto 0);
BEGIN
IF (clk"EVENT AND clk = "1') THEN
IF(clear = "0") THEN
cnt := ”00000000";
--ELSE
—-IF(ld = ’0’) THEN
-- cnt := d;
ELSE
IF(enable = ’1’) THEN
cnt := cnt + "00000001";
if(cnt=”00111100")then
cnt := "00000000";
end if;
END IF;
-—END IF;
END IF;
END IF;
qk 〈= cnt;
END PROCESS; end a_ycounter; 波形圖:
六十進制( 同步置數) 源程序: library ieee; use ieee。std_logic_1164.all; use ieee.std_logic_unsigned、all; entity ycounter is
port(clk,clear,enable:in std_logic;
ld:in std_logic;
d:in std_logic_vector(7 downto 0);
qk:out std_logic_vector(7 downto 0)); end ycounter; architecture a_ycounter of ycounter is begin
PROCESS (clk)
VARIABLE cnt :std_logic_vector(7 downto 0);
BEGIN
IF (clk’EVENT AND clk = "1’) THEN
IF(clear = '0’) THEN
cnt := ”00000000";
ELSE
IF(ld = ’0') THEN
cnt := d;
ELSE
IF(enable = "1’) THEN
cnt := cnt + ”00000001”;
if(cnt=”00111011”)then
Ld :=1;
end if;
?。牛蜠 IF;
END IF;
END IF;
END IF;
?。駅 <= cnt;
END PROCESS; end a_ycounter; 波形圖:
思考: 六十進制計數器得實現,1) 異步清零程序得實現: 通過判斷最后一個狀態, 因為該計數器位六十進制, 所以最后一個狀態為 5 9, 用二進制碼表示為:"0 0111011” ”, 即當計數器得狀態為六十,即"0 011 1100 "狀態時, 計數器清零, 輸出00000 000 。2) 同步置數程序得實現: 當計數器達到狀 態, 當計數器達到狀態”00111011" 時,ld 被賦值為0, 執行置數功能, 將d得值賦值給
y, 計數器從零開始計數、
實驗四
V V HDL L 層次化設計方法實驗
實驗內容:
設計一個 8 8 位移位寄存器。各個 D D 觸發器模塊采用 V V HL DL 語言編寫, , 分別用原理圖、VHD L語言元件例化語句與生成語句得方法實現 8 8 位移位寄存器得設計。
D 觸發器源程序: library IEEE; use IEEE、STD_LOGIC_1164。ALL; use IEEE。STD_LOGIC_ARITH、ALL; use IEEE、STD_LOGIC_UNSIGNED、ALL; —-
Unment the following lines to use the declarations that are -—
provided for instantiating Xilinx primitive components、 --library UNISIM; --use UNISIM.VComponents。all; entity Dchu is
Port ( CLK : in
?。覶D_LOGIC;
?。?: in
STD_LOGIC;
Q : out
STD_LOGIC;
CLEAR : in
STD_LOGIC;
Q_N : out
STD_LOGIC); end Dchu; ARCHITECTURE BEH OF Dchu IS
;CIGOL_DTS:1Q LANGIS?
BEGIN
)1Q,KLC,RAELC( SSECORP?
NIGEB?
IF CLEAR="0’
THEN Q1〈=’0';
ELSIF CLK’EVENT AND CLK=’1' ?;D=〈1Q NEHT?
END IF;
;SSECORP DNE? ? Q〈=Q1;
;1Q ton=〈N_Q??
;HEB DNE?波形圖: D 觸發器:
八位移位寄存器:
八位移位寄存器原理圖:
元件例化: library IEEE; use IEEE.STD_LOGIC_1164。ALL; use IEEE.STD_LOGIC_ARITH、ALL; use IEEE、STD_LOGIC_UNSIGNED.ALL; --
Uncomment the following lines to use the declarations that are --
provided for instantiating Xilinx primitive components. -—library UNISIM; --use UNISIM.Vponents。all; entity shift_reg_8_com is
Port ( a,clk,rst : in
STD_LOGIC;
b: out
?。覶D_LOGIC); end shift_reg_8_com; ARCHITECTURE BEH OF shift_reg_8_ IS
1ffd tnenop?Port ( d,clk,rst : in
STD_LOGIC;
q: out
STD_LOGIC); End ponent; Signal q:STD_LOGIC_VECTOR(8DOWNTO0); BEGIN
?。?0)<=a; d0:dff1 PORT MAP(q(0),clk,rst,q(1)); d1:dff1 PORT MAP(q(1),clk,rst,q(2)); d2:dff1 PORT MAP(q(2),clk,rst,q(3)); d3:dff1 PORT MAP(q(3),clk,rst,q(4)); d4:dff1 PORT MAP(q(4),clk,rst,q(5)); d5:dff1 PORT MAP(q(5),clk,rst,q(6)); d6:dff1 PORT MAP(q(6),clk,rst,q(7)); d7:dff1 PORT MAP(q(7),clk,rst,q(8)); b<=q(4); End str; 生成語句: library IEEE; use IEEE。STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED。ALL; -—
Unment the following lines to use the declarations that are —-
?。餽ovided for instantiating Xilinx primitive components、 ——library UNISIM; ——use UNISIM。VComponents、all;
?。錸tity shift_reg_8_com is
Port ( a,clk,rst : in
STD_LOGIC;
b: out
?。覶D_LOGIC); end shift_reg_8_com; ARCHITECTURE BEH OF shift_reg_8_ IS
1ffd tnenopmoC?Port ( d,clk,rst : in
STD_LOGIC;
q: out
STD_LOGIC); End component; Signal q:STD_LOGIC_VECTOR(8DOWNTO0); BEGIN
;a=<)0(q?g1: FOR I IN 0 TO 7 GENERATE dx:dff1 PORT MAP(q(i),clk,rst,q(i+1)); End generate g1; b〈=q(4); End str; 實驗結果( 仿真結果) 與分析
元件例化語句由兩部分組成, 元件說明語句與元件例化語句。首先要設計被上層電路調用得電路塊,即 即 D 觸發器模塊, 八位移位寄存器就就是通過程序調用八個 個 D 觸發器, 每個D觸發器都相當于一個模塊、生成語句就是將已設計好得D觸發器得邏輯語句進行復制, 從而生成一組結構上完全相同得設計單元得電路結構。從上面得兩個程序可以瞧出, 當所需要得組件比較少時, 兩種語句得大小差不多, 但當所需要得組件比較多時, 生成語句得執行效率明顯得要變高, 而且程序所占內存明顯減少。
推薦訪問: 實驗 報告 VHDL上一篇:多元統計分析實驗報告
下一篇:實驗報告實驗總結范文
同志們:今天這個大會,是市委全面落實黨要管黨、從嚴治黨要求的一項重大舉措,也是對縣市區委書記履行基層黨建工作第一責任人情況的一次集中檢閱,同時是對全市基層黨建工作的一次再部署、再落實的會議。前面,**
***年,我認真履行領班子、帶隊伍、抓黨員、保穩定的基層黨建工作思路,以學習貫徹習近平新時代中國特色社會主義思想和黨的十九大歷次全會精神為主線,以市局基層黨建工作考核細則為落腳點,落實全面從嚴治黨主體
根據會議安排,現將2022年履行抓基層黨建工作職責情況報告如下:一、履職工作特色和亮點1 突出政治建設,著力在思想認識上提高。牢固樹立抓黨建就是抓政績的理念,以“黨建工作抓引領、社區治理求突破,為民服
2022年以來,在**黨委的正確領導下,堅持以習近平新時代中國特色社會主義思想為指導,深入學習宣傳貫徹黨的二十大精神,以黨建工作為統領,扎實開展夯實“三個基本”活動,以“四化四力”行動為抓手,聚力創建
各位領導,同志們:根據會議安排,現就2022年度抓基層黨建工作情況匯報如下:一、主要做法及成效(一)強化政治引領。一是不斷強化理論武裝。堅持通過黨組會、中心組學習會和“三會一課”,第一時間、第一議題學
2022年度抓基層黨建工作述職報告按照黨委工作部署,現將本人2022年度抓基層黨建工作情況報告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發展首要位置,積極開展
2022年,是我在數計系黨總支書記這個新崗位上度過的第一個完整的工作年度?;厥滓荒陙碓谛|h委的正確領導下,與數計系領導班子和全體師生共同走過的日子,艱辛歷歷在目,收獲溫潤心田。作為黨總支書記,我始終牢
按照考核要求,現將本人一年來,作為統戰部長履行職責、廉潔自律等方面情況報告如下:一、著眼增強政治素質,不斷深化理論學習堅持把旗幟鮮明講政治作為履職從政的第一位要求,帶領統戰系統干部堅決擁護“兩個確立”
**年,緊緊圍繞黨工委、管委會的決策部署,全體人員團結協作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開拓進取,認真履職盡責,圓滿完成各項工作任務。一、個人思想政治狀況檸檬文苑www bgzjy
按照縣委關于開展抓基層黨建述職評議會議的有關要求,經請示縣委組織部同意,今天,我們在此召開2022年度基層黨組織書記抓基層黨建述職評議會議。1 首先,請**黨委書記,**同志述職。**黨委能夠主動研究