“報告”使用范圍很廣,按照上級部署或工作計劃,每完成一項任務(wù),一般都要向上級寫報告,反映工作中的基本情況、工作中取得的經(jīng)驗教訓(xùn)、存在的問題以及今后工作設(shè)想等,以取得上級領(lǐng)導(dǎo)部門的指導(dǎo)。那么什么樣的報告才是有效的呢?下面是小編為大家整理的報告范文,僅供參考,大家一起來看看吧。
EDA實驗報告 EDA實驗報告武漢理工大學(xué)篇一
eda技術(shù)實驗
二、教材名稱: 《eda技術(shù)使用教程》,潘松等編著。
三、本課程教學(xué)目的、要求:
介紹eda的基本知識、常用的eda工具的使用方法和目標(biāo)器件的結(jié)構(gòu)原理、vhdl設(shè)計輸入方法(圖形和文本)、vhdl仿真、vhdl的設(shè)計優(yōu)化等。
eda技術(shù)作為重要的專業(yè)課程,其實踐性強。在教學(xué)時要注重理論和實踐的緊密結(jié)合,通過大量上機操作,使學(xué)生掌握vhdl的基本結(jié)構(gòu)和編程思想。實驗1 原理圖輸入方法及8位全加器設(shè)計(4課時)
1)實驗?zāi)康模?/p>
熟悉利用max+plusⅱ的原理圖輸入方法設(shè)計簡單組合電路,掌握層次化設(shè)計的方法,并通過一個8位全加器的設(shè)計把握利用eda軟件進行電子電路設(shè)計的詳細流程。2)實驗報告要求:
詳細敘述8位加法器的設(shè)計流程;給出各層次的原理圖及其對應(yīng)的仿真波形圖;給出加法器的延時情況。
3)實驗步驟:
(1)設(shè)計一個一位半加器。
步驟1:輸入設(shè)計項目和存盤 步驟2:輸入半加器元件: 步驟3:將項目設(shè)置為工程文件 步驟4:選擇目標(biāo)器件并編譯 步驟5:時序仿真 步驟6:包裝元件入庫
選擇菜單“file”→“open”,在“open”對話框中選擇原理圖編輯文件選項“graphic editor files”,,重新打開半加器設(shè)計文件,然后選擇如圖4-5中“file”菜單的“create default symbol”項,將當(dāng)前文件變成了一個包裝好的單一元件(symbol),并被放置在工程路徑指定的目錄中以備后用。
(2)利用半加器組成一個一位全加器,并記錄仿真結(jié)果。(3)利用全加器組成一個八位全加器,并記錄仿真結(jié)果。
實驗二
簡單組合電路和時序電路設(shè)計(4課時)
一、實驗?zāi)康模?/p>
熟悉max+plusⅱ的vhdl文本設(shè)計流程全過程,學(xué)習(xí)簡單組合電路和時序電路的設(shè)計和仿真方法。
二、實驗內(nèi)容
1:首先利用max+plusⅱ完成2選1多路選擇器和一位全加器的文本編輯輸入和仿真測試等步驟,給出仿真波形,驗證本項設(shè)計的功能。
2:設(shè)計觸發(fā)器(j-k),給出程序設(shè)計、軟件編譯、仿真分析、硬件測試及詳細實驗過程。
3:先設(shè)計或門和一位半加器的vhdl描述文件,并進行仿真調(diào)試,再用元件例化的方法實現(xiàn)一位全加器,并仿真調(diào)試。要求記錄vhdl文件內(nèi)容和仿真波形結(jié)果。
4:用一位全加器設(shè)計8為全加器。要求記錄vhdl文件內(nèi)容和仿真波形結(jié)果。(選作)參考程序 entity mux21a is port(a, b : in bit;s : in bit;y : out bit);end entity mux21a;architecture one of mux21a is signal d,e : bit;begin d <= a and(not s);e <= b and s;y <= d or e;end architecture one;
library ieee;use ;entity or2a is port(a, b :in std_logic;c : out std_logic);end entity or2a;
architecture fu1 of or2a is begin c <= a or b;end architecture fu1;
半加器描述(1)library ieee;use ;entity adder is port(a, b : in std_logic;co, so : out std_logic);end entity adder;architecture fh1 of adder is begin so <= not(a xor(not b));co <= a and b;end architecture fh1;
1位二進制全加器頂層設(shè)計描述 library ieee;use ;entity f_adder is port(ain,bin,cin : in std_logic;cout,sum : out std_logic);end entity f_adder;architecture fd1 of f_adder is component h_adder port(a,b : in std_logic;co,so : out std_logic);end component ; component or2a port(a,b : in std_logic;c : out std_logic);end component;
signal d,e,f : std_logic;begin u1 : h_adder port map(a=>ain,b=>bin,co=>d,so=>e);u2 : h_adder port map(a=>e,b=>cin,co=>f,so=>sum);u3 : or2a port map(a=>d,b=>f,c=>cout);end architecture fd1;二選一多路選擇器仿真結(jié)果:
實驗三
含異步清0和同步時鐘使能的4位加法計數(shù)器(4課時)
一、實驗?zāi)康模?/p>
學(xué)習(xí)計數(shù)器的設(shè)計、仿真,進一步熟悉vhdl設(shè)計技術(shù)。
二、實驗內(nèi)容:
設(shè)計一含計數(shù)使能、異步復(fù)位和能進行計數(shù)值并行預(yù)置功能的4位加法計數(shù)器。rst是異步清零信號,高電平有效;clk是時鐘輸入信號;d0、d1、d2、d3是4位數(shù)據(jù)輸入端(數(shù)據(jù)預(yù)置輸入端)。q0、q1、q2、q3為計數(shù)器輸出端。cout為進位輸出端。ena為使能端,為?1?時,計數(shù)器實現(xiàn)對clk時鐘脈沖信號的加1計數(shù),為0時停止計數(shù)。
參考程序:library ieee;use ;use ;entity cnt4b is port(clk : in std_logic;rst : in std_logic;ena : in std_logic;outy : out std_logic_vector(3 downto 0);cout : out std_logic);end cnt4b;architecture behav of cnt4b is signal cqi : std_logic_vector(3 downto 0);begin p_reg: process(clk, rst, ena)begin if rst = '1' then cqi <= “0000”;elsif clk'event and clk = '1' then if ena = '1' then cqi <= cqi + 1;else cqi <= “0000”;end if;end if;outy <= cqi;end process p_reg;cout <= cqi(0)and cqi(1)and cqi(2)and cqi(3);--進位輸出 end behav;
實驗四
7段數(shù)碼顯示譯碼器設(shè)計(2課時)
一、實驗?zāi)康模?/p>
1、學(xué)習(xí)7段數(shù)碼顯示譯碼器設(shè)計;
2、學(xué)習(xí)vhdl的多層次設(shè)計方法。
二、實驗原理:
7段數(shù)碼是純組合電路,通常的小規(guī)模專用ic,如74或4000系列的器件只能作十進制bcd碼譯碼,然而數(shù)字系統(tǒng)中的數(shù)據(jù)處理和運算都是2進制的,所以輸出表達都是16進制的,為了滿足16進制數(shù)的譯碼顯示,最方便的方法就是利用譯碼程序在fpga/cpld中來實現(xiàn)。但為了簡化過程,首先完成7段bcd碼譯碼器的設(shè)計。例如輸出為“1101101”時,數(shù)碼管的7個段:g、f、e、d、c、b、a分別接1、1、0、1、1、0、1;接有高電平的段發(fā)亮,于是數(shù)碼管顯示“5”。
圖6-21 共陰數(shù)碼管及其電路
三、實驗內(nèi)容
1、編程實現(xiàn)7段數(shù)碼顯示譯碼器設(shè)計;
2、對7段數(shù)碼顯示譯碼器設(shè)計進行編輯、仿真,給出其所有信號的時序仿真波形; 參考程序: library ieee;use ;entity decl7s is port(a : in std_logic_vector(3 downto 0);led7s : out std_logic_vector(6 downto 0));end;architecture one of decl7s is begin process(a)begin case a is when “0000” => led7s <= “0111111”;when “0001” => led7s <= “0000110”;when “0010” => led7s <= “1011011”;when “0011” => led7s <= “1001111”;when “0100” => led7s <= “1100110”;when “0101” => led7s <= “1101101”;when “0110” => led7s <= “1111101”;when “0111” => led7s <= “0000111”;when “1000” => led7s <= “1111111”;when “1001” => led7s <= “1101111”;when others => null;end case;end process;end;仿真結(jié)果:
綜合后的計數(shù)器和譯碼器連接電路的頂層文件原理圖:
實驗五
用狀態(tài)機實現(xiàn)序列檢測器的設(shè)計(4課時)
一、實驗?zāi)康模?/p>
1、掌握狀態(tài)機的編程方法和步驟;
2、掌握用狀態(tài)機設(shè)計序列檢測器的方法和步驟;
二、實驗內(nèi)容
用狀態(tài)機編程實現(xiàn)對系列數(shù)“11100101”的檢測,當(dāng)某一系列串(以左移方式)進入檢測器后,若該串與預(yù)置的系列數(shù)相同,則輸出“a”,否則輸出“b”。
三、實驗步驟:
1、編輯系列檢測器的vhdl程序;
2、仿真測試并給出仿真波形,了解控制信號的時序;
3、將上述方案改為系列檢測密碼為可預(yù)置(外部輸入)情況,重新編寫程序、編譯和仿真,并記錄仿真結(jié)果。參考程序:
library ieee;use ;entity schk is port(din,clk,clr : in std_logic;ab : out std_logic_vector(3 downto 0));end schk;architecture behv of schk is signal q:integer range 0 to 8;signal d:std_logic_vector(7 downto 0);begin d<=“11100101”;process(clk,clr)begin if clr= '1' then q <= 0;elsif clk='1' and clk'event then case q is when 0 => if din = d(7)then q<=1;else q<=0;end if;when 1 => if din = d(6)then q<=2;else q<=0;end if;when 2 => if din = d(5)then q<=3;else q<=0;end if;when 3 => if din = d(4)then q<=4;else q<=0;end if;when 4 => if din = d(3)then q<=5;else q<=0;end if;when 5 => if din = d(2)then q<=6;else q<=0;end if;when 6 => if din = d(1)then q<=7;else q<=0;end if;when 7 => if din = d(0)then q<=8;else q<=0;end if;when others=> q<=0;end case;end if;end process;process(q)begin if q=8 then ab<=“1010”;else ab<=“1011”;end if;end process;end behv;仿真結(jié)果:
提高型實驗:
實驗六
用vhdl實現(xiàn)數(shù)字鐘及校園打鈴系統(tǒng)(6課時)
一、實驗?zāi)康募耙螅?/p>
1、掌握vhdl語言的基本結(jié)構(gòu)及編程思想。
2、掌握vhdl語言的進行系統(tǒng)設(shè)計的方法和步驟。
3、提高學(xué)生綜合應(yīng)用能力。
二、實驗內(nèi)容:
1、用vhdl實現(xiàn)數(shù)字鐘及校園打鈴系統(tǒng)的軟件編輯。
2、用vhdl實現(xiàn)數(shù)字鐘及校園打鈴系統(tǒng)的軟件仿真。
三、實驗步驟
1、用vhdl編輯60進制計數(shù)器,并進行軟件仿真。
2、用vhdl編輯24進制計數(shù)器,并進行軟件仿真。
3、用vhdl編輯30進制計數(shù)器,并進行軟件仿真。
4、用元件例化的方法實現(xiàn)數(shù)字鐘的軟件編輯及軟件仿真。
5、實現(xiàn)數(shù)字鐘的校時功能。
6、實現(xiàn)數(shù)字鐘的打鈴功能。
7、完成數(shù)字鐘及校園打鈴系統(tǒng)的實驗報告。
實驗七
a/d采樣控制器設(shè)計
一、實驗?zāi)康募耙螅?/p>
1、掌握vhdl語言的基本結(jié)構(gòu)及編程思想。
2、掌握a/d采樣控制器的工作原理。
3、掌握a/d采樣控制器的vhdl語言編程方法。
二、實驗內(nèi)容:
1、設(shè)計一a/d0809模數(shù)轉(zhuǎn)換器控制器。
2、將轉(zhuǎn)換結(jié)果送數(shù)碼管顯示器顯示(2位)。
3、模擬輸入通道為in0。
三、實驗步驟:
1、adc0809特點介紹
(1)、單極性輸入,8位a/d轉(zhuǎn)換精度。(2)、逐次逼近式,每次采樣時間約為100us(3)、8通道模擬輸入
2、a/d轉(zhuǎn)換器外部引腳功能結(jié)構(gòu)圖
3、a/d轉(zhuǎn)換器時序圖
4、ad轉(zhuǎn)換控制器與ad轉(zhuǎn)換器的接口電路框圖
5、狀態(tài)控制
s0狀態(tài):初始狀態(tài)。addc=‘1’,選擇1通道模擬信號輸入。
ale=start=oe=lock=‘0’;
s1狀態(tài):通道鎖存。ale=‘1’, start=oe=lock=‘0’;
s2狀態(tài):啟動a/d轉(zhuǎn)換。ale=‘1’,start=‘1’,oe=lock=‘0’; s3狀態(tài):a/d轉(zhuǎn)換等待狀態(tài)。
ale=start=‘0’,oe=lock=‘0’;
if eoc=‘0’
保持當(dāng)前狀態(tài)不變,繼續(xù)等待a/d轉(zhuǎn)換。
else
轉(zhuǎn)換結(jié)束,進入下一狀態(tài)。
s4狀態(tài):數(shù)據(jù)輸出允許狀態(tài)。a/d轉(zhuǎn)換完畢,開啟數(shù)據(jù)輸出允許信號。
ale=‘0’,start=‘0’,oe=‘1’,lock=‘0’;
s5狀態(tài):數(shù)據(jù)鎖存狀態(tài)。開啟數(shù)據(jù)鎖存信號,將轉(zhuǎn)換結(jié)果送鎖存器鎖存。
ale=‘0’,start=‘0’,oe=‘1’,lock=‘1’; s6狀態(tài):延時狀態(tài)。為了保證數(shù)據(jù)可靠鎖存,延時一個時鐘狀態(tài)周期。
ale=‘0’,start=‘0’,oe=‘1’,lock=‘1’; 其它狀態(tài):返回到初始狀態(tài)。ale=start=oe=lock=‘0’;
6、參考程序: library ieee;use ;entity ad0809 is
port(d :in std_logic_vector(7 downto 0);
clk0,eoc : in std_logic;
adda,oe : out std_logic;
ale,start : out std_logic;
q : out std_logic_vector(7 downto 0);
qq : out integer range 15 downto 0);end ad0809;architecture behav of ad0809 is
type st_type is(s0, s1, s2, s3,s4,s5,s6,s7);
signal current_state,next_state : st_type;
signal regl:std_logic_vector(7 downto 0);
signal lock :std_logic;
begin
adda<='1';
pro: process(current_state,eoc)
begin
case current_state is
when s0 => qq<=0;ale<='0';start<='0';oe<='0';lock<='0';next_state <= s1;
when s1 => qq<=1;ale<='0';start<='0';oe<='0';lock<='0';next_state <= s2;
when s2 => qq<=2;ale<='1';start<='1';oe<='0';lock<='0';next_state <= s3;
when s3 => qq<=3;ale<='1';start<='1';oe<='0';lock<='0';
if eoc='0' then next_state <= s4;
else next_state <= s3;
end if;
when s4 => qq<=4;ale<='0';start<='0';oe<='0';lock<='0';
if eoc='1' then next_state <= s5;
else next_state <= s4;
end if;
when s5 => qq<=5;ale<='0';start<='1';oe<='1';lock<='0';next_state <= s6;
when s6 => qq<=6;ale<='0';start<='0';oe<='1';lock<='1';next_state <= s7;
when s7 => qq<=7;ale<='0';start<='0';oe<='1';lock<='1';next_state <= s0;
when others => next_state <= s0;
end case;
end process pro;reg:process(clk0)
begin
if clk0'event and clk0='1' then
current_state<=next_state;
end if;
end process reg;
com:process(lock)
begin
if lock'event and lock='1' then
regl<=d;
end if;
end process com;
q<=regl;end behav;
實驗八
數(shù)字頻率計設(shè)計
一、實驗?zāi)康募耙螅?/p>
1、掌握vhdl語言的基本結(jié)構(gòu)及編程思想。
2、掌握數(shù)字頻率計的工作原理。
3、掌握數(shù)字頻率計的vhdl語言編程方法。
二、實驗內(nèi)容:
1、設(shè)計8位十進制數(shù)字頻率計。
2、測量頻率范圍為1hz-50mhz
三、實驗原理: 測頻原理框圖
四、實驗步驟 1、8位十進制計數(shù)器設(shè)計
(1)用vhdl設(shè)計十進制計數(shù)器,并進行軟件和硬件仿真 參考程序如下: library ieee;use ;use ;entity cnt10 is
port(clk,rst,en : in std_logic;
cq : out std_logic_vector(3 downto 0);
cout : out std_logic);
end cnt10;architecture behav of cnt10 is begin
process(clk, rst, en)
variable cqi : std_logic_vector(3 downto 0);
begin
if rst = '1' then
cqi :=(others =>'0');--計數(shù)器復(fù)位
elsif clk'event and clk='1' then
--檢測時鐘上升沿
if en = '1' then
--檢測是否允許計數(shù)
if cqi < “1001” then
cqi := cqi + 1;--允許計數(shù)
else
cqi :=(others =>'0');--大于9,計數(shù)值清零
end if;
end if;
end if;
if cqi = “1001” then cout <= '1';--計數(shù)大于9,輸出進位信號
else
cout <= '0';
end if;
cq <= cqi;
--將計數(shù)值向端口輸出
end process;end behav;(2)8位十進制頻率計電路圖 2、32位鎖存器設(shè)計 參考程序
library ieee;use ;use ;entity reg32b is
port(load : in std_logic;
din: in std_logic_vector(31 downto 0);
dout : out std_logic_vector(31 downto 0));
end reg32b;architecture behav of reg32b is begin
process(load,din)
begin
if load'event and load='1' then
dout<=din;
end process;end behav;3控制器設(shè)計
(1)控制器時序圖
(2)參考程序 library ieee;use ;use ;entity testctl is
port(clk : in std_logic;
tsten:out
std_logic;
clr_cnt: out
std_logic;
load:out
std_logic);
end testctl;architecture behav of testctl is
signal p2clk:std_logic;begin
process(clk)
begin
if clk'event and clk='1' then
p2clk<=not p2clk;
end process;
process(clk,p2clk)
begin
if clk='0' and p2clk='0'
then
clr_cnt<='1';
else clr_cnt<='0';
end if;
end process;
load<=not p2clk;
tsten<=p2clk;end behav;
end if;end if;
實驗九
dac接口電路與波形發(fā)生器設(shè)計
一、實驗?zāi)康募耙螅?/p>
1、掌握vhdl語言的基本結(jié)構(gòu)及編程思想。
2、掌握da轉(zhuǎn)換器接口方法。
3、掌握da轉(zhuǎn)換器的vhdl語言編程方法。
二、實驗內(nèi)容:
1、設(shè)計一dac0832數(shù)模轉(zhuǎn)換器控制器。
2、要求使用dac轉(zhuǎn)換器輸出一正弦波,最大值為5v。(使用單緩沖方式)
3、要求正弦波頻率能步進可調(diào),步進間隔為100hz。(使用2個按鍵控制,一個步進為加,另一個為步進減)
三、實驗原理
1、dac0832特點(1)、8位電流dac轉(zhuǎn)換,輸出為電流信號,因此要轉(zhuǎn)換為電壓輸出,必須外接集成運算放大器。(2)、轉(zhuǎn)換時間約為50---500ns,轉(zhuǎn)換速度比電壓型dac轉(zhuǎn)換器快,電壓型一般為1---10us(3)、20腳雙列直插式封裝的cmos型器件。(4)、內(nèi)部具有兩極數(shù)據(jù)寄存器,可采用單或雙緩沖方式。
2、d/a轉(zhuǎn)換器外部引腳功能及內(nèi)部結(jié)構(gòu)圖
3、工作方式
方式一:直通工作方式(本實驗采用此種方式)
一般用于只有一路輸出信號的情況。
接線情況:ile=1,cs=wr1=wr2
=xfer=0 方式
二、雙緩沖器工作方式
采用兩步操作完成,可使da轉(zhuǎn)換輸出前一數(shù)據(jù)的同時,將采集下一個數(shù)據(jù)送到8位輸入寄存器,以提高轉(zhuǎn)換速度。
一般用于多路da輸出。
4、da轉(zhuǎn)換器與控制器接口電路設(shè)計
5、實驗儀實際接口電路圖
6、da轉(zhuǎn)換器輸出波形步進可調(diào)控制電路設(shè)計 設(shè)計思想:
設(shè)輸入控制器的時鐘頻率為50mhz。
1、da轉(zhuǎn)換一次,需要一個時鐘周期。若采用64點輸出,則需要64個時鐘周期。如果控制器時鐘頻率為64hz,則輸出的正弦波頻率為1hz。
2、因此,只需要控制da轉(zhuǎn)換控制器的時鐘頻率,則就可以控制正弦波頻率,正弦波頻率與時鐘頻率的 關(guān)系為1:64。
3、題目要求正弦波步進頻率為100hz,則時鐘頻率步進應(yīng)為6400hz。按“加”鍵,則時鐘頻率增加6400hz,按“減”減,時鐘頻率減小6400hz。
7、帶按鍵控制da轉(zhuǎn)換器與控制器接口電路設(shè)計
四、實驗程序 參考程序:
library ieee;use ;entity dac0832 is
port(clk :in std_logic;
dd : out integer range 255 downto 0);end dac0832;architecture behav of dac0832 is signal q:integer range 63 downto 0;signal d : integer range 255 downto 0;begin
process(clk)
begin
if clk'event and clk='1' then q<=q+1;
end if;
end process;process(q)
begin
case q
is
when 00=>d<=254;when 01=>d<=252;when 02=>d<=249;when 03=> d<=245;
when 04=>d<=239;when 05=>d<=233;when
06=> d<=225;when
07=> d<=217;
when 08=>d<=207;when 09=>d<=197;when
10=> d<=186;when
11=> d<=174;
when 12=>d<=162;when 13=>d<=150;when 14=> d<=137;when
15=> d<=124;
when 16=>d<=112;when 17=>d<=99;when 18=> d<=87;
when
19=> d<=75;
when 20=>d<=64;when
21=>d<=53;when 22=>d<=43;
when 23=> d<=34;
when 24=>d<=26;when 25=>d<=19;when
26=> d<=13;
when
27=> d<=8;
when 28=>d<=4;
when
29=>d<=1;
when 30=>d<=0;
when
31=> d<=0;
when 32=>d<=1;when 33=>d<=4;
when 34=> d<=8;
when 35=> d<=13;when 36=>d<=19;when 37=>d<=26;
when 38=> d<=34;
when
39=> d<=43;
when 40=>d<=53;when
41=>d<=64;when 42=> d<=75;
when
43=> d<=87;
when 44=>d<=99;when 45=>d<=112;when 46=>d<=124;when
47=> d<=137;
when 48=>d<=150;when 49=>d<=162;when 50=> d<=255;when 51=> d<=174;
when 52=>d<=186;when 53=>d<=197;when 54=>d<=207;when 55=> d<=217;
when 56=>d<=225;when 57=>d<=233;when 58=> d<=239;when
59=> d<=245;
when 60=>d<=249;when 61=> d<=252;when 62=> d<=254;when 63=>d<=255;when others=>null;end case;end process;
dd<=d;
end;
實驗十
七段顯示器動態(tài)掃描電路設(shè)計(提高型)
實驗?zāi)康募耙螅?/p>
1、掌握vhdl語言的基本結(jié)構(gòu)及編程思想。
2、掌握七段顯示器動態(tài)掃描電路設(shè)計方法。設(shè)計要求:
1、設(shè)計一個七段數(shù)碼管動態(tài)掃描電路。
2、數(shù)碼管個數(shù)為8個,共陰極接法。
3、設(shè)計bcd碼--七段字符碼的轉(zhuǎn)換電路;
4、設(shè)計一電路,控制上述電路實現(xiàn)“12345678”八個數(shù)字的顯示,要求顯示方式為:
(1)自左至右逐個點亮數(shù)碼管,最后全亮;再重復(fù)以上動作,每次變化時間間隔為1秒。
(2)自左至右點亮數(shù)碼管,每次只點亮一個,最后全息滅,再重復(fù)以上動作,每次變化時間間隔為1秒。
(3)先中間兩個點亮,再依次向外點亮;全亮后,再依次向中間熄滅;重復(fù)上述步驟,每次變化時間間隔為1秒。一、七段顯示器動態(tài)掃描電路設(shè)計框圖
二、存儲器設(shè)計(8位8字節(jié)靜態(tài)隨機存儲器sram)library ieee;
use ;entity memo_rd_wr is port(wr,rd: in std_logic;
a : in std_logic_vector(2 downto 0);
b : in std_logic_vector(2 downto 0);
d : in std_logic_vector(7 downto 0);
q : out std_logic_vector(7 downto 0));end memo_rd_wr;architecture a of memo_rd_wr is
signal q0,q1,q2,q3: std_logic_vector(7 downto 0);
signal q4,q5,q6,q7: std_logic_vector(7 downto 0);begin process(wr,a)
begin
if wr='1' then
case
a
is
when “000”=>q0<=d;
when “001”=> q1<=d;
when “010”=>q2<=d;
when “011”=> q3<=d;
when “100”=>q4<=d;
when “101”=> q5<=d;
when “110”=>q6<=d;
when “111”=> q7<=d;
when others=>null;
end case;
end if;
end process;process(rd,b)
begin
if rd='1' then
case
b
is
when “000”=>q<=q0;
when “001”=> q<=q1;
when “010”=>q<=q2;
when “011”=> q<=q3;
when “100”=>q<=q4;
when “101”=> q<=q5;
when “110”=>q<=q6;
when “111”=> q<=q7;
when others=>null;
end case;
end if;
end process;end a;
四、循環(huán)取數(shù)電路設(shè)計 library ieee;
use ;entity get_code is port(clk1: in std_logic;
d : in std_logic_vector(7 downto 0);
rd:out std_logic;
a : out std_logic_vector(2 downto 0);
dout:out std_logic_vector(7 downto 0));end get_code;architecture a of get_code
is
signal load: std_logic;
signal qq : std_logic_vector(7 downto 0);
signal num: integer range 7 downto 0;begin
rd<=?1?;
load<=clk1;process(clk1)
begin
if clk1'event and clk1='1' then
if num<=7
then
num<=num+1;
else num<=0;
end if;
end if;end process;process(num)
begin
case num is
when 0 =>a<=“000”;
when 1 =>a<=“001”;
when 2 =>a<=“010”;
when 3 =>a<=“011”;
when 4 =>a<=“100”;
when 5 =>a<=“101”;
when 6 =>a<=“110”;
when 7 =>a<=“111”;
when others =>null;
end case;
end process;process(load)
begin
if load?event and load=?1?
then-------上升沿鎖存
qq<=d;
end if;end process;dout(7 downto 0)<=qq(7 downto 0);end a;
五、掃描控制器設(shè)計 library ieee;
use ;entity scan_8 is port(clk2: in std_logic;
c : out std_logic_vector(7 downto 0));
end scan_8;architecture a of scan_8
is
signal num: integer range 7 downto 0;begin process(clk2)
begin
if clk2'event and clk2=‘1' then
if num<=7
then
num<=num+1;
else num<=0;
end if;
end if;end process;process(num)
begin
case
num
is
when 1=>c<=“11111110”;when 2=> c<=“11111101”;
when 3=>c<=“11111011”;when 4=> c<=“11110111”;
when 5=>c<=“11101111”;when 6=> c<=“11011111”;
when 7=>c<=“10111111”;when 0=> c<=“01111111”;
when
others=>null;
end case;end process;end a;
應(yīng)用實例一:顯示“01234567”八個數(shù)字
library ieee;
use ;entity disp_data is port(clk: in std_logic;
wr:out std_logic;
a:out std_logic_vector(2 downto 0);
q:out std_logic_vector(7 downto 0));end disp_data;architecture a of disp_data
is
--signal qq : std_logic_vector(7 downto 0);
signal num: integer range 7 downto 0;begin
wr<=?1?;process(clk)
begin
if clk'event and clk='1' then
if num<=7
then
num<=num+1;
else num<=0;
end if;
end if;end process;process(num)
begin
case num is
when 0 =>q<=“00111111”;a<=“000”;
when 1 =>q<=“00000110”;a<=“001”;
when 2 =>q<=“01011011”;a<=“010”;
when 3 =>q<=“01001111”;a<=“011”;
when 4 =>q<=“01100110”;a<=“100”;
when 5 =>q<=“01101101”;a<=“101”;
when 6 =>q<=“01111101”;a<=“110”;
when 7 =>q<=“01111111”;a<=“111”;
when others =>null;
end case;end process;end a;實驗十一
彩燈控制器設(shè)計(提高型實驗)
實驗?zāi)康募耙螅?/p>
1、掌握vhdl語言的基本結(jié)構(gòu)及編程思想。
2、掌握vhdl語言的進行系統(tǒng)設(shè)計的方法和步驟。
3、培養(yǎng)學(xué)生綜合應(yīng)用能力。實驗內(nèi)容:
1、了解各類節(jié)日彩燈的顯示方式(主要是動態(tài)方式)(上街觀察);
2、將你所了解的情況,畫出你的設(shè)計思想框圖;
3、根據(jù)框圖畫出電路框圖(用eda技術(shù));
4、用vhdl語言編程實現(xiàn);
5、完成課程設(shè)計報告(約2000字)
實驗
十二、紅綠交通燈控制系統(tǒng)
實驗?zāi)康募耙螅?/p>
1、掌握vhdl語言的基本結(jié)構(gòu)及編程思想。
2、掌握vhdl語言的進行系統(tǒng)設(shè)計的方法和步驟。
3、培養(yǎng)學(xué)生綜合應(yīng)用能力。實驗內(nèi)容:
設(shè)計一個簡易十字路口交通燈控制器。要求:
1、每個路口有紅、綠、黃三個指示燈指示交通運行情況。紅燈亮,禁止車輛通行;綠燈亮,車輛正常通行。
2、利用兩位數(shù)碼管顯示通行到計時時間。
3、用vhdl語言編程實現(xiàn);
4、完成課程設(shè)計報告 實驗步驟:
1、紅綠黃燈秒計數(shù)選擇控制電路(traffic_mux)sing_state:
00
綠燈20秒(橫向路口);
01
黃燈5秒(橫向路口)
綠燈20秒(直向路口)
黃燈5秒(直向路口)
recount:重新計數(shù)信號。=?1?,發(fā)送倒計時時間數(shù)據(jù); =?0?,正常倒計時; library ieee;
use ;use ;
use ;entity traffic_mux is
port(reset,clk_1hz,recount: in std_logic;
sign_state: in std_logic_vector(1 downto 0);
load: out integer range 255 downto 0);end;
begin
process(reset,clk_1s)
begin
if reset='1' then
load<=“00000000”;
elsif(clk_1hz'event and clk_1hz='1')
then
if
recount = '1‘
then
case sign_state is
when “00” => load <= 20;
when “01” => load <= 5;
when “10” => load <= 20;
when “01” => load <= 5;
when others =>null;
end case;
end if;
end if;end process;end behavior;
2、倒計時控制電路(count_down)library ieee;use ;use ;use ;entity count_down is port(reset,clk_1hz: in std_logic;recount:in std_logic;load: in integer range 255 downto 0;seg7:out std_logic_vector(15 downto 0);next_state: out std_logic);end;architecture behavior of count_down is signal cnt_ff: integer range 255 downto 0;begin process(clk_1hz,reset)begin if(reset='1')then cnt_ff<=“00000000”;seg7<=“***0”;elsif(clk_1hz'event and clk_1hz='1')then if recount='1‘ then cnt_ff<=load-1;else cnt_ff<=cnt_ff-1;end if;end if;end process;process(cnt_ff)begin case cnt_ff is when 0=>seg7<=“***1”;when 1=>seg7<=“***0”;when 2=> seg7<=“***1”;when 3=> seg7<=“***1”;when 4=> seg7<=“***0”;when 5=> seg7<=“***1”;when 6=> seg7<=“***1”;when 7=> seg7<=“***1”;when 8=> seg7<=“***1”;when 9=> seg7<=“***1”;when 10=> seg7<=“***1”;when 11=> seg7<=“***0”;when 12=> seg7<=“***1”;when 13=> seg7<=“***1”;when 14=> seg7<=“***0”;when 15=> seg7<=“***1”;when 16=> seg7<=“***1”;when 17=> seg7<=“***1”;when 18=> seg7<=“***1”;when 19=> seg7<=“***1”;when 20=> seg7<=“***1”;when 21=> seg7<=“***0”;when 22=> seg7<=“***1”;when 23=> seg7<=“***1”;when 24=> seg7<=“***0”;when 25=> seg7<=“***1”;when 26=> seg7<=“***1”;when 27=> seg7<=“***1”;when 28=> seg7<=“***1”;when 29=> seg7<=“***1”;when others=> seg7<=“***1”;end case;end process;next_state <= '1' when cnt_ff=1 else '0';end behavior;
3、紅綠燈信號控制電路(traffic_fsm)library ieee;use ;use ;use ;entity traffic_fsm is port(reset,clk,clk_1hz,flash_1hz: in std_logic;a_m:in std_logic;next_state: in std_logic;recount: out std_logic;sign_state: out std_logic_vector(1 downto 0);red: out std_logic_vector(1 downto 0);green: out std_logic_vector(1 downto 0);yellow: out std_logic_vector(1 downto 0));end;architecture behavior of traffic_fsm is type sreg0_type is(r0g1, r0y1, g0r1, y0r1, y0y1, y0g1, g0y1, r0r1);signal state : sreg0_type;signal light: std_logic_vector(5 downto 0);begin if(reset='1')then state<=r0g1;
----設(shè)定當(dāng)前為橫向紅燈亮,豎向綠燈亮 sign_state<=“01”;------選擇20秒倒計時
recount<=‘1’;------裝入計數(shù)初值并啟動倒計時 else if(clk'event and clk='1')then case state is when r0g1 => if(a_m='1' and clk_1hz='1')then if(next_state = ‘1’)then--當(dāng)前計數(shù)完畢,轉(zhuǎn)入下一種計時
recount<='1';state<=r0y1;sign_state <= “01”;else recount<=‘0’;state<=r0g1;----否則,繼續(xù)倒計時 end if;when r0y1 =>--now state: red0 on yellow1 flash if(a_m='1' and clk_1hz='1')then if(next_state = '1')then recount<='1';state<=g0r1;sign_state <= “10”;else recount<='0';state<=r0y1;end if;when g0r1 =>--now state: green0 on red1 on if(a_m='1' and ena_1hz='1')then if(next_state = '1')then recount<='1';state<=y0r1;sign_state <= “11”;else recount<='0';state<=g0r1;end if;when y0r1 =>--now state: green0 on red1 on if(a_m='1' and ena_1hz='1')then if(next_state = '1')then recount<='1';state<=r0g1;sign_state <= “00”;else recount<='0';state<=y0r1;--red=2'b10;green=2'b00;yellow=2'b01;end if;when others => state<=r0g1;recount<='0';sign_state <= “00”;end case;end if;end if;end process;--light: r(10)y(10)g(10)light <= “010010” when(state=r0g1)else “011000” when(state=r0y1)else “100001” when(state=g0r1)else “100100” when(state=y0r1)else “110000”;red <= light(5 downto 4);yellow <= light(3 downto 2)and(flash_1hz & flash_1hz);green <= light(1 downto 0);end behavior;
EDA實驗報告 EDA實驗報告武漢理工大學(xué)篇二
實驗四 計數(shù)器與七段譯碼器及顯示的設(shè)計
一 實驗?zāi)康?/p>
1、掌握七段譯碼器的工作原理;
2、學(xué)會用vhdl硬件描述語言進行數(shù)字系統(tǒng)設(shè)計;
3、學(xué)會運用波形仿真測試檢驗程序的正確性;
4、用quartusii完成基本組合電路的設(shè)計。
二 實驗儀器
pc機、quartus ii 6.0軟件、康芯eda實驗箱
三 實驗內(nèi)容
選gw48系統(tǒng)的實驗電路模式6,用數(shù)碼8顯示譯碼輸出(pio46-pio40),鍵3到鍵8作為控制輸入端。完成計數(shù)器的數(shù)碼管顯示設(shè)計。
四 實驗原理及步驟
7段數(shù)碼是純組合電路,通常的小規(guī)模專用ic,如74或4000系列的器件只能作十進制bcd碼譯碼,然而數(shù)字系統(tǒng)中的數(shù)據(jù)處理和運算都是2進制的,所以輸出表達都是16進制的,為了滿足16進制數(shù)的譯碼顯示,最方便的方法就是利用譯碼程序在fpga/cpld中來實現(xiàn)。例6-18作為7段譯碼器,輸出信號led7s的7位分別接如圖6-2數(shù)碼管的7個段,高位在左,低位在右。例如當(dāng)led7s輸出為“1101101”時,數(shù)碼管的7個段:g、f、e、d、c、b、a分別接1、1、0、1、1、0、1;接有高電平的段發(fā)亮,于是數(shù)碼管顯示“5”。注意,這里沒有考慮表示小數(shù)點的發(fā)光管,如果要考慮,需要增加段h,例6-18中的led7s:out std_logic_vector(6 downto 0)應(yīng)改為...(7 downto 0)。
1、根據(jù)譯碼器真值表寫出原程序。
譯碼器真值表:
數(shù)
輸入
輸出
值 a
b c d a b c d e f g 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 0 1 0 1 1 0 0 0 0 2 0 0 1 0 1 1 0 1 1 0 1 3 0 0 1 1 1 1 1 1 0 0 1 4 0 1 0 0 0 1 1 0 0 1 1 5 0 1 0 1 1 0 1 1 0 1 1 6 0 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 8 1 0 0 0 1 1 1 1 1 1 1 9 1 0 0 1 1 1 1 1 0 1 1 a 0 1 0 1 1 1 0 1 1 1 b 1 0 1 1 0 0 1 1 1 1 1 c 1 1 0 0 1 0 0 1 1 1 0 d 1 1 0 1 0 1 1 1 1 0 1 e 1 1 1 0 1 0 0 1 1 1 1 f 1 1 1 1 1 0 0 0 1 1 1
三、實驗內(nèi)容:
1、說明下列程序中各語句的含義,以及該例的整體功能。在quartus ii 6.0上對以下該例進行編輯、編譯、綜合、適配、仿真,給出其所有信號的時序仿真波形(提示:用輸入總線的方式給出輸入信號仿真數(shù)據(jù))。
library ieee;use ;entity decl7s is port(a : in std_logic_vector(3 downto 0);led7s : out std_logic_vector(6 downto 0));end;architecture one of decl7s is begin process(a)begin case a(3 downto 0)is when “0000” => led7s <= “0111111”;--x“3f”?0 when “0001” => led7s <= “0000110”;--x“06”?1 when “0010” => led7s <= “1011011”;--x“5b”?2 when “0011” => led7s <= “1001111”;--x“4f”?3 when “0100” => led7s <= “1100110”;--x“66”?4 when “0101” => led7s <= “1101101”;--x“6d”?5 when “0110” => led7s <= “1111101”;--x“7d”?6 when “0111” => led7s <= “0000111”;--x“07”?7 when “1000” => led7s <= “1111111”;--x“7f”?8 when “1001” => led7s <= “1101111”;--x“6f”?9 when “1010” => led7s <= “1110111”;--x“77”?10 when “1011” => led7s <= “1111100”;--x“7c”?11 when “1100” => led7s <= “0111001”;--x“39”?12 when “1101” => led7s <= “1011110”;--x“5e”?13 when “1110” => led7s <= “1111001”;--x“79”?14 when “1111” => led7s <= “1110001”;--x“71”?15 when others => null;end case;end process;end;
圖3-1 共陰數(shù)碼管及其電路
2、引腳鎖定以及硬件下載測試。建議選實驗電路模式6,用數(shù)碼8顯示譯碼輸出(pio46--pio40),鍵
8、鍵
7、鍵
6、鍵5四位控制輸入,硬件驗證譯碼器的工作性能。
3、用vhdl完成四位二進制加法計數(shù)器設(shè)計,命名為cnt4b.4、用vhdl例化語句(參考實驗1中的1位全加vhdl文本輸入設(shè)計)按圖3-2 的方式,完成頂層文件設(shè)計,并重復(fù)以上實驗過程。注意圖3-2中的tmp是4位總線,led是7位總線。對于引腳鎖定和實驗,建議仍選實驗電路模式6,用數(shù)碼8顯示譯碼輸出,用鍵3作為時鐘輸入(每按2次鍵為1個時鐘脈沖),或直接時鐘信號clock0。
圖3-2 計數(shù)器和譯碼器連接電路的頂層文件原理圖
(提示:
1、將教材p89頁程序和p154頁程序讀懂,分別建立工程、生成各自原理圖。
2、將上述兩個原理圖按教材p155頁圖6-19連接起來建立新的原理圖設(shè)計文件。
3、將上述原理圖文件編譯、仿真、引腳綁定,下載到實驗箱驗證。)
四、實驗報告要求
1、總結(jié)quartus ii 6.0 vhdl 中case語句應(yīng)用及多層次設(shè)計方法
2、根據(jù)以上的實驗內(nèi)容寫出實驗報告,包括程序設(shè)計、軟件編譯、仿真分析、硬件測試和實驗過程;設(shè)計程序、程序分析報告、仿真波形圖及其分析報告;
3、心得體會――本次實驗中你的感受;你從實驗中獲得了哪些收益;本次實驗?zāi)愕某晒χ帲槐敬螌嶒炛羞€有待改進的地方;下次實驗應(yīng)該從哪些地方進行改進;怎樣提高自的實驗效率和實驗水平等等。
五、問題與思考:
只要求譯出數(shù)字0~9和“-”,怎樣修改程序?
EDA實驗報告 EDA實驗報告武漢理工大學(xué)篇三
數(shù)字eda實驗報告--------------薛蕾0941903207
數(shù)字eda實驗 實驗報告
學(xué)院: 計算機科學(xué)與工程學(xué)院 專業(yè): 通信工程 學(xué)號: 0941903207 姓名: 薛蕾 指導(dǎo)老師: 錢強
數(shù)字eda實驗報告--------------薛蕾0941903207 實驗一 四選一數(shù)據(jù)選擇器的設(shè)計
一、實驗?zāi)康?/p>
1、熟悉quartus ii軟件的使用。
2、了解數(shù)據(jù)選擇器的工作原理。
3、熟悉eda開發(fā)的基本流程。
二、實驗原理及內(nèi)容
實驗原理
數(shù)據(jù)選擇器在實際中得到了廣泛的應(yīng)用,尤其是在通信中為了利用多路信號中的一路,可以采用數(shù)據(jù)選擇器進行選擇再對該路信號加以利用。從多路輸入信號中選擇其中一路進行輸出的電路稱為數(shù)據(jù)選擇器?;颍涸诘刂沸盘柨刂葡?,從多路輸入信息中選擇其中的某一路信息作為輸出的電路稱為數(shù)據(jù)選擇器。數(shù)據(jù)選擇器又叫多路選擇器,簡稱mux。4選1數(shù)據(jù)選擇器:
(1)原理框圖:如右圖。
d0、d1、d2、d3
:輸入數(shù)據(jù) a1、a0
:地址變量
由地址碼決定從4路輸入中選擇哪1路輸出。
(2)真值表如下圖:(3)邏輯圖
數(shù)據(jù)選擇器的原理比較簡單,首先必須設(shè)置一個選擇標(biāo)志信號,目的就是為了從多路信號中選擇所需要的一路信號,選擇標(biāo)志信號的一種狀態(tài)對應(yīng)著一路信號。在應(yīng)用中,設(shè)置一定的選擇標(biāo)志信號狀態(tài)即可得到相應(yīng)的某一路信號。這就是數(shù)據(jù)選擇器的實現(xiàn)原理。
三.實驗內(nèi)容
1、分別采用原理圖和vhdl語言的形式設(shè)計4選1數(shù)據(jù)選擇器
2、對所涉及的電路進行編譯及正確的仿真。電路圖:
四、實驗程序
library ieee;use ;
entity mux4 is
port(a0, a1, a2, a3 :in std_logic;
s :in std_logic_vector(1 downto 0);
y :out std_logic);end mux4;architecture archmux of mux4 is
begin y <= a0 when s = “00” else
--當(dāng)s=00時,y=a0 a1 when s = “01” else
--當(dāng)s=01時,y=a1 a2 when s = “10” else
--當(dāng)s=10時,y=a2 a3;
--當(dāng)s取其它值時,y=a2 end archmux;
五、運行結(jié)果
六.實驗總結(jié)
真值表分析:
當(dāng)js=0時,a1,a0取00,01,10,11時,分別可取d0,d1,d2,d3.實驗二 血型配對器的設(shè)計
一、實驗?zāi)康?/p>
1、進一步熟悉quartus ii軟件的使用。
2、掌握簡單組合邏輯電路的設(shè)計方法與功能仿真技巧。
3、進一步學(xué)習(xí)quartus ii中基于原理圖設(shè)計的流程。
二、實驗原理及內(nèi)容
實驗原理
人類有o、a、b、ab 4種基本血型,輸血者與受血者的血型必須符合圖示原則。設(shè)計一血型配對電路,用以檢測輸血者與受血者之間的血型關(guān)系是否符合,如果符合,輸出為1,否則為0。
已知: ab血型是萬能受血者,o血型是萬能獻血者!如果要輸血給o型血,那么可以的血型是o型!如果要輸血給a型血,那么可以的血型是a,o型!如果要輸血給b型血,那么可以的血型是b,o型!
如果要輸血給ab型血,那么可以的血型是a,b,ab,o型!
輸血者
受血者
o a
o a b ab
b ab
三.實驗內(nèi)容
1、用vhdl語言編寫程序?qū)崿F(xiàn)血型配對器的功能 library ieee;use ;use ;use ;entity vxuexing is port(p,q,r,s:in std_logic;f:out std_logic);end vxuexing;architecture a of vxuexing is begin
f<=((not p)and(not q))or(r and s)or((not p)and s)or((not q)and r);end a;
2、對所編寫的電路進行編譯及正確的仿真。
實驗分析 真值表
pqrsf***************11111
p,q表示輸血者的血型;r,s,表示受血者的血型。當(dāng)兩者符合血型配合原則時,f=1,否則為0.四、運行結(jié)果
五、實驗總結(jié)
本實驗給出了四種不同的血型編碼,pq(1,1),rs(1,1)表示ab型血,p,q(1,0),rs(1,0)表示b型血,pq(0,1),rs(0,1)表示a型血,pq(0,0),rs(0,0)表示o型血。根據(jù)真值表,并根據(jù)實驗的原理圖,畫出電路圖并進行連接。
實驗三 簡單數(shù)字鐘的設(shè)計
一、實驗?zāi)康?/p>
1、了解數(shù)字鐘的工作原理。
2、進一步學(xué)習(xí)quartus ii中基于vhdl設(shè)計的流程。
3、掌握vhdl編寫中的一些小技巧。
4、掌握簡單時序邏輯電路的設(shè)計方法與功能仿真技巧。
二、實驗原理及內(nèi)容
實驗原理
簡單數(shù)字鐘應(yīng)該具有顯示時-分-秒的功能。首先要知道鐘表的工作機理,整個鐘表的工作應(yīng)該是在1hz信號的作用下進行,這樣每來一個時鐘信號,秒增加1秒,當(dāng)秒從59秒跳轉(zhuǎn)到00秒時,分鐘增加1分,同時當(dāng)分鐘從59分跳轉(zhuǎn)
三.實驗內(nèi)容
1、用原理圖的方式編寫一個12/24進制的計數(shù)器,并創(chuàng)建為symbol文件。
2、用vhdl的方式編寫一個60進制的計數(shù)器,并創(chuàng)建為symbol文件。
3、創(chuàng)建頂層文件。調(diào)用已編寫的symbol文件,設(shè)計簡單的數(shù)字鐘電路。
2、對所編寫的電路進行編譯及正確的仿真。
二十四進制vhdl library ieee;use ;use ;use ;entity cnt24 is port(cp, en, rd, ld :in std_logic;
d
:in std_logic_vector(5 downto 0);
co
:out std_logic;q
:out std_logic_vector(5 downto 0));end cnt24;architecture str of cnt24 is
signal qn : std_logic_vector(5 downto 0);
begin co<= '1'when(qn = “010111”and en='1')
else '0';process(cp, rd)
begin if(rd ='0')then
qn<= “000000”;elsif(cp'event and cp='1')then if(ld='0')then qn <= d;
elsif(en='1')then qn <= qn+1;end if;end if;end process;q <= qn;end str;
六十進制vhdl library ieee;use ;use ;use ;entity jsq60 is port(en,rd,cp :in std_logic;
qh:buffer std_logic_vector(3 downto 0);
ql :buffer std_logic_vector(3 downto 0);
co :out std_logic);end jsq60;architecture b of jsq60 is begin co<='1'when(qh=“0101”and ql=“1001” and en='1')else'0';process(cp,rd)
begin if(rd='0')then qh<=“0000”;ql<=“0000”;elsif(cp'event and cp='1')then
if(en='1')then
if(ql=9)then
ql<=“0000”;
if(qh=5)then
qh<=“0000”;
else qh<=qh+1;
end if;
else
ql<=ql+1;
end if;
end if;
end if;end process;end b;
原理圖
四、運行結(jié)果
24進制
60進制
時鐘仿真結(jié)果
五、實驗總結(jié)
此設(shè)計問題可分為主控電路,計數(shù)器模塊和掃描顯示三大部分,計數(shù)器在之前的學(xué)習(xí)中已經(jīng)非常熟悉,只要掌握60,12進制的技術(shù)規(guī)律,用同步或異步計數(shù)器都可以實現(xiàn)。二掃描電路我們學(xué)過兩種驅(qū)動方式:bcd碼驅(qū)動方式和直接驅(qū)動方式。
實驗四 簡單交通燈的設(shè)計
一、實驗?zāi)康?/p>
1、了解交通燈的亮滅規(guī)律。
2、了解交通燈控制器的工作原理。
3、進一步熟悉vhdl語言編程,了解實際設(shè)計中的優(yōu)化方案。
二、實驗原理及內(nèi)容
實驗原理
交通燈的顯示有很多方式,如十字路口、丁字路口等,而對于同一個路口又有很多不同的顯示要求,比如十字路口,車子如果只要東西和南北方向通行就很簡單,而如果車子可以左右轉(zhuǎn)彎的通行就比較復(fù)雜,本實驗僅針對最簡單的南北和東西直行的情況。
要完成本實驗,首先必須了解交通路燈的亮滅規(guī)律。依人們的交通常規(guī),“紅燈停,綠燈行,黃燈提醒”。其交通燈的亮滅規(guī)律為:初始態(tài)是兩個路口的紅燈全亮,之后東西路口的綠燈亮,南北路口的紅燈亮,東西方向通車,延時一段時間后,東西路口綠燈滅,黃燈開始閃爍。閃爍若干次后,東西路口紅燈亮,而同時南北路口的綠燈亮,南北方向開始通車,延時一段時間后,南北路口的綠燈滅,黃燈開始閃爍。閃爍若干次后,再切換到東西路口方向,重復(fù)上述過程。
三.實驗內(nèi)容
1、用vhdl的方式編寫一個簡單的交通控制燈電路
2、對所編寫的電路進行編譯及正確的仿真。
程序: library ieee;use ;use ;
entity traffic is port(clk,enb : in std_logic;
ared,agreen,ayellow,bred,bgreen,byellow : buffer std_logic;
acounth,acountl,bcounth,bcountl : buffer std_logic_vector(3 downto 0));end traffic;
architecture one of traffic is begin process(clk,enb)variable lightstatus : std_logic_vector(5 downto 0);begin
if(clk'event and clk='1')then lightstatus := ared&agreen&ayellow&bred&bgreen&byellowif((acounth=“0000” and acountl=“0000”)or(bcounth=“0000” and bcountl=“0000”))then case lightstatus is when “010100”=> lightstatus:=“001100”;acountl<=“0101”;acounth<=“0000”;bcountl<=“0101”;bcounth<=“0000”;when “001100”=> if(enb='1')then lightstatus:=“100010”;acountl<=“0000”;acounth<=“0011”;bcountl<=“0101”;bcounth<=“0010”;
else lightstatus:=“010100”;acountl<=“0101”;acounth<=“0100”;bcountl<=“0000”;bcounth<=“0101”;end if;
when “100010”=>
lightstatus:=“100001”;acountl<=“0101”;acounth<=“0000”;bcountl<=“0101”;bcounth<=“0000”;
when “100001”=>
lightstatus:=“010100”;acountl<=“0101”;acounth<=“0100”;bcountl<=“0000”;bcounth<=“0101”;
when others=> lightstatus:=“010100”;acountl<=“0101”;acounth<=“0100”;bcountl<=“0000”;bcounth<=“0101”;
end case;else if(acountl=“0000”)then acounth<=acounth-1;acountl<=“1001”;
else acountl<=acountl-1;
end if;
if(bcountl=“0000”)then bcounth<=bcounth-1;bcountl<=“1001”;
else bcountl<=bcountl-1;end if;end if;end if;
ared<=lightstatus(5);agreen<=lightstatus(4);ayellow<=lightstatus(3);
bred<=lightstatus(2);bgreen<=lightstatus(1);byellow<=lightstatus(0);end process;end one;
四、運行結(jié)果
分析:
這里a代表東西方向,b代表南北方向,acounth是表示東西方向五進制計數(shù)acountl是東西方向六進制計數(shù),bcounth則表示南北方向五進制,bounthl則是南北方向六進制計數(shù) 東西方向為0時,東西方向紅燈亮(ared=1)
東西方向在1~4之間,東西方向綠燈亮(即agreen=1)南北方向 的紅燈亮起(即bred=1)
五、實驗總結(jié)
此設(shè)計問題可分為主控電路,譯碼驅(qū)動電路和掃描顯示部分。
但是,這遠遠不能滿足實際生活的需要,還應(yīng)設(shè)置倒計時秒數(shù),因此可在此電路基礎(chǔ)上外加一個定時模塊。
實驗五 流水燈的設(shè)計
一、實驗?zāi)康?/p>
1、了解流水燈的工作原理。
二、實驗原理及內(nèi)容
實驗原理
要完成本實驗,首先必須了解流水燈的原理。所謂的流水燈實際上就是由多個led發(fā)光二極管構(gòu)成的電路,當(dāng)發(fā)光二極管可以依次點亮?xí)r,即能呈現(xiàn)流水的效果。實驗內(nèi)容
1、設(shè)計能帶8個led發(fā)光管發(fā)光,并按照要求輪流發(fā)光,產(chǎn)生流水燈的流動效果。
2、應(yīng)具有兩種以上不同風(fēng)格的流動閃亮效果。比如依次點亮或者依次熄滅。(選作)
3、有起動、停止控制鍵。(選作)
4、有流動閃亮效果選擇設(shè)置鍵。(選作)
5、對所編寫的電路進行編譯及正確的仿真。
三、實驗程序
library ieee;use ;use ;use ;entity yiweijicun1 is port(cp,r,dsr,dsl:in std_logic;
s:std_logic_vector(2 downto 0);
d:std_logic_vector(7 downto 0);
q:out std_logic_vector(7 downto 0));end yiweijicun1;architecture yiweijicun_arch of yiweijicun1 is
signal iq: std_logic_vector(7 downto 0);begin process(cp,r,iq)begin if(r='1')then iq <=(others =>'0');elsif(cp'event and cp ='1')then case conv_integer(s)is when 0=>null;when 1=> iq <= d;when 2=> iq <= dsr & iq(7 downto 1);when 3=> iq <=iq(6 downto 0)& dsl;when 4=> iq <= iq(0)& iq(7 downto 1);when 5=> iq <=iq(6 downto 0)& iq(7);when 6=> iq <= iq(7)& iq(7 downto 1);when 7=> iq <= iq(6 downto 0)& iq(0);when others => null;end case;end if;q <= iq;end process;end yiweijicun_arch;
四、運行結(jié)果
結(jié)果分析:
d[0]~d[7]為八個輸入端,s[0]和s[1]控制流水燈得輸出,s=1保持,s=2實現(xiàn)左移功能,s=3實現(xiàn)右移功能,因為延遲的原因,在s=2時,需要經(jīng)過一段時間才能實現(xiàn)循環(huán)右移的功能,流水燈的實現(xiàn)其實是運用了8位移位寄存器,它只是運用了其中的保持左移與右移的功能,8lo位移位寄存器還有循環(huán)右移,循環(huán)左移,算數(shù)右移,算數(shù)左移等功能。
五、實驗總結(jié)
了解了移位寄存器的功能和原理
通過這次實驗,加深了vhdl語言的運用能力,更進一步了解了8位移位寄存器的功能。
實驗六 乘法器的設(shè)計
一、實驗?zāi)康?/p>
1、了解乘法器的工作原理。
2、了解復(fù)雜時序電路的設(shè)計流程。
二、實驗原理及內(nèi)容
實驗原理
具體設(shè)計原理參見教材188頁。實驗內(nèi)容
1、設(shè)計一個能進行兩個十進制數(shù)相乘的乘法器,乘數(shù)和被乘數(shù)均小于100。(可以參考教材231頁的vhdl代碼來設(shè)計)
2、對所編寫的電路進行編譯及正確的仿真。
三、實驗程序
library ieee;use ;
entity one_bit_adder is port(a: in std_logic;b: in std_logic;c_in: in std_logic;s: out std_logic;c_out: out std_logic);end one_bit_adder;
architecture one_bit_adder of one_bit_adder is begin
s <= a xor b xor c_in;c_out <=(a and b)or(c_in and(a xor b));
end one_bit_adder;library ieee;use ;
entity sichen is port(a: in std_logic_vector(3 downto 0);b: in std_logic_vector(3 downto 0);data_out: out std_logic_vector(6 downto 0));end sichen;
architecture multi_arch of sichen is signal a_mult_b0: std_logic_vector(2 downto 0);signal a_mult_b1: std_logic_vector(2 downto 0);signal a_mult_b2: std_logic_vector(2 downto 0);
signal s_temp1: std_logic_vector(1 downto 0);signal s_temp2: std_logic_vector(1 downto 0);
signal c_temp : std_logic_vector(6 downto 0);
signal c0_out_b0, c1_out_b0, c2_out_b0 : std_logic;signal c0_out_b1, c1_out_b1, c2_out_b1 : std_logic;
signal zero: std_logic;
component one_bit_adder port(a: in std_logic;b: in std_logic;c_in: in std_logic;s: out std_logic;c_out: out std_logic);end component;begin u_0_0 : one_bit_adder port map(a => a_mult_b0(1), b => a_mult_b1(0), c_in => zero, s => c_temp(1), c_out => c0_out_b0);u_0_1 : one_bit_adder port map(a => a_mult_b0(2), b => a_mult_b1(1), c_in => c0_out_b0, s => s_temp1(0), c_out => c1_out_b0);u_0_2 : one_bit_adder port map(a => zero, b => a_mult_b1(2), c_in => c1_out_b0, s => s_temp1(1), c_out => c2_out_b0);
u_1_0 : one_bit_adder port map(a => a_mult_b2(0), b => s_temp1(0), c_in => zero, s => c_temp(2), c_out => c0_out_b1);u_1_1 : one_bit_adder port map(a => a_mult_b2(1), b => s_temp1(1), c_in => c0_out_b1, s => s_temp2(0), c_out => c1_out_b1);u_1_2 : one_bit_adder port map(a => a_mult_b2(2), b => c2_out_b0, c_in => c1_out_b1, s => s_temp2(1), c_out => c2_out_b1);
a_mult_b0(0)<= a(0)and b(0);a_mult_b0(1)<= a(1)and b(0);a_mult_b0(2)<= a(2)and b(0);
a_mult_b1(0)<= a(0)and b(1);a_mult_b1(1)<= a(1)and b(1);a_mult_b1(2)<= a(2)and b(1);
a_mult_b2(0)<= a(0)and b(2);a_mult_b2(1)<= a(1)and b(2);a_mult_b2(2)<= a(2)and b(2);
zero <= '0';c_temp(0)<= a_mult_b0(0);c_temp(4 downto 3)<= s_temp2(1 downto 0);c_temp(5)<= c2_out_b1;
c_temp(6)<= a(3)xor b(3);
data_out <= c_temp;
end multi_arch;
四、運行結(jié)果
乘法器實現(xiàn)a,b兩數(shù)的相乘。a[0]~a[3]以及b[0]~b[3]是實現(xiàn)輸入端的控制。由圖看出,輸出上產(chǎn)生了延遲是因為當(dāng)a[3]輸入1,對應(yīng)了十進制的8,b[0]輸入1,對應(yīng)了十進制的1,兩者相乘得8,即在data_out端應(yīng)輸出8,此處因仍存在競爭冒險。
五、實驗總結(jié)
乘法器的設(shè)計的問題可以分為乘數(shù)和被乘數(shù)控制模塊,寄存模塊,乘法模塊和掃描顯示模塊幾個部分。
兩數(shù)相乘的方法很多,可以用移位相加的方法,也可以將乘法器看成計數(shù)器,乘積的初始值為零,每一個時鐘周期將被乘數(shù)的值加到積上,同時乘數(shù)減一,這樣反復(fù)執(zhí)行,直到乘數(shù)為零。
EDA實驗報告 EDA實驗報告武漢理工大學(xué)篇四
實驗二
數(shù)字秒表設(shè)計
一、實驗?zāi)康?/p>
1、理解計時器的原理與verilog/vhdl 的編程方法;
2、掌握多模塊設(shè)計及層次設(shè)計的方法。
二、實驗原理
秒計時器是由計數(shù)器和譯碼器、顯示器組成,其核心是計數(shù)器與譯碼器。60 秒計時器可由二個計數(shù)器分別完成:個位為十進制計數(shù)器,十位為 6 進 制計數(shù)。個位計數(shù)器的計數(shù)信號由實驗開發(fā)板上主頻20mhz分頻產(chǎn)生的1hz 時鐘信號提供, 十位計數(shù)器的計數(shù)信號由個位的進位信號提供。然后由譯碼器 對計數(shù)結(jié)果進行譯碼,送led 數(shù)碼管進行顯示。clr為清零,se t為開始。
三、實驗框圖
四、實驗任務(wù)
1、采用層次設(shè)計的方法,設(shè)計一個包括頂層及底層模塊的60 秒計時器,底 層模塊用verilog/vhdl 設(shè)計,頂層用原理圖設(shè)計。
2、秒計時器應(yīng)當(dāng)具有系統(tǒng)復(fù)位功能;
3、每十秒發(fā)出提示信號及計滿60 秒時發(fā)出報警信號。(選做)
五、實驗步驟與要求
1、分模塊設(shè)計:首先分別設(shè)計10 進制、6 進制計數(shù)器、譯碼器模塊;
2、頂層原理圖如圖7-1 所示;
3、編譯完成后進行波形仿真;
4、進行引腳鎖定,并下載至開發(fā)系統(tǒng)驗證。
六、分模塊設(shè)計 1.十進制計數(shù)器(1)程序代碼:
module cnt10(clk,rst,en,cout,dout);
input clk,en,rst;
output [3:0]dout;
output cout;
reg[3:0]q1;
reg cout;
assign dout=q1;
always@(posedge clk or negedge rst)
begin
if(!rst)q1<=0;
else if(en)begin
if(q1<9)q1<=q1+1;
else q1<=4'b0000;end
end
always@(q1)
if(q1==4'h9)cout=1'b1;
else cout=1'b0;endmodule
(2)仿真波形
(3)模塊符號
2.六進制計數(shù)器(1)程序代碼:
module cnt6(clk,rst,en,cout,dout);
input clk,en,rst;
output [3:0]dout;
output cout;
reg[3:0]q2;
reg cout;
assign dout=q2;
always@(posedge clk or negedge rst)
begin
if(!rst)q2<=0;
else if(en)begin
if(q2<5)q2<=q2+1;
else q2<=3'b000;end
end
always@(q2)
if(q2==3'h5)cout=1'b1;
else cout=1'b0;endmodule
(2)仿真波形
(3)模塊符號
3.分頻器
(1)程序代碼:
module fpq(clk0,clk1);
input clk0;
output clk1;
reg[26:0] q1;
reg clk1;always@(posedge clk0)
if(q1<10)q1<=q1+1;
else
begin q1<=0;
clk1<=~clk1;
end endmodule(2)模塊符號
七.頂層原理圖:
八.仿真波形
九.結(jié)果分析
當(dāng)輸入端clk,en,rst都不為0時,首先是十進制計數(shù)器開始進行計時,直到dout1輸出端大于9時產(chǎn)生進位,并且自身變?yōu)?,同時使六進制計數(shù)器也開始計時,六進制輸出端dout2大于5時產(chǎn)生進位,使cout輸出為1.
EDA實驗報告 EDA實驗報告武漢理工大學(xué)篇五
《電子設(shè)計自動化實驗》課程設(shè)計
題 目: 十六位硬件乘加器電路 姓 名: 江 璐 學(xué)院班級: 13級電子信息工程2班 學(xué) 號: 1315212017 指導(dǎo)老師: 邱應(yīng)強老師 時 間: 20151122 目 錄 一:摘要……………………………………………………3 二: 正文……………………………………………………3(一)系統(tǒng)設(shè)計………………………………………………3(二)單元電路設(shè)計…………………………………………4(三)仿真結(jié)果………………………………………………9(四)軟件設(shè)計………………………………………………11(五)系統(tǒng)測試………………………………………………11(六)結(jié)論……………………………………………………14 三:參考文獻………………………………………………14 四:附錄……………………………………………………15 六:心得體會………………………………………………16 一:摘要
1.實驗要求:采用并行、串行或流水線方式來實現(xiàn)對8個16位數(shù)據(jù)進行乘法和加法運算(yout=a0?b0+a1?b1+a2?b2+a3?b3),位寬16位。
2.實驗方法:使用乘法器lpm_mult2、16位加法器adder16b、計數(shù)器cnt16以及鎖存器en_dff四個模塊。當(dāng)clock出現(xiàn)上升沿時,對輸入端輸入的兩個數(shù)dataa、datab進行乘法運算。將結(jié)果輸入鎖存器中,鎖存上一階段計算得到的值,16位加法器adder16b將鎖存器鎖存的上一階段的值與進行完乘法計算得到的值dataa*datab加起來,并輸出結(jié)果。計數(shù)器cnt16用于區(qū)分四組乘加所得數(shù),當(dāng)有一個上升沿脈沖送入cnt16時,若計數(shù)不到5,則進行計數(shù)+1,若計數(shù)達到5,cout輸出進位信號到鎖存器en_dff的reset端口,將鎖存器復(fù)位清零,重新進行計數(shù)。
3.實驗結(jié)論:經(jīng)過仿真與硬件測試檢驗后證實可行,但是是對8個8位數(shù)據(jù)進行乘法和加法運算。
二:正文
(一)系統(tǒng)設(shè)計
1.設(shè)計要求
采用并行、串行或流水線方式來實現(xiàn)對8個16位數(shù)據(jù)進行乘法和加法運算(yout=a0*b0+a1*b1+a2*b2+a3*b3),位寬16位。
2.系統(tǒng)設(shè)計方案
(1)系統(tǒng)設(shè)計思路:由十六位加法器構(gòu)成以時序邏輯方式設(shè)計的十六位乘加器,流水線方式,以移位加法為核心器件。(2)總體方案的論證與比較
方案一:采用四個乘法器,以串行方式輸入各數(shù)據(jù)。
方案二:采用一個乘法器,先輸入兩數(shù)據(jù)進行運算,將得到結(jié)果保存,并與下一組乘法運算得到的結(jié)果相加。
方案的選擇:第一種方案浪費大量的資源,考慮到實驗箱條件限制,采用第二種方案。盡管速度較慢,但可省下相當(dāng)多的資源,并且實驗室可以實現(xiàn)。(3)各功能塊的劃分與組成
共有4個設(shè)計模塊,分別是乘法器lpm_mult0、16位加法器adder16b、計數(shù)器cnt16以及鎖存器en_dff。(4)系統(tǒng)的工作原理
以上是電路原理圖。乘數(shù)dataa與被乘數(shù)datab輸入乘法器lpm_mult0中,當(dāng)start有上升沿出現(xiàn)時,乘法器計算出dataa*datab的結(jié)果并有result[15..0]輸出。result[15..0]輸出的結(jié)果送入8位加法器adder8b的a[15..0]輸入端,加法器的b[15..0]輸入端連接到鎖存器en_dff的輸出端q[15..0],這樣鎖存器鎖存的值就可以與加法器所得到的值相加,得到兩對乘法計算后值得和,以此類推,可以得到不斷累加的值。而cin端口接地,這樣可以確保cin端口不影響加法器的計算。加法器計算a[15..0](dataa*datab)和鎖存器鎖存的值b[15..0]的和從輸出端s[15..0]輸出,輸入鎖存器en_dff的輸入端d[15..0],將數(shù)值鎖存起來,同時輸出端s[15..0]接到輸出端yout[15..0],從而從仿真中可以看到每一階段累加的結(jié)果。而計數(shù)器cnt16的作用是區(qū)分四組乘加所得數(shù)與四組乘加所得數(shù)。en接高電平,rst接低電平,保證計數(shù)器可用,clk接到start,每當(dāng)有一個上升沿脈沖送入cnt16時,若計數(shù)不到5,則進行計數(shù)+1,若計數(shù)達到5,cout輸出進位信號到鎖存器en_dff的reset端口,將鎖存器復(fù)位清零,重新進行計數(shù)。
(二)單元電路設(shè)計
總共有四大模塊,分別為乘法器lpm_mult0、16位加法器adder16b、計數(shù)器cnt16以及鎖存器en_dff。
1.乘法器lpm_mult0:當(dāng)clock出現(xiàn)上升沿時,對輸入端輸入的兩個數(shù)dataa、datab進行乘法運算。程序:
--megafunction wizard: %lpm_mult% 4--generation: standard--version: wm1.0--module: lpm_mult--==============--file name: --megafunction name(s):------simulation library files(s):--lpm--==============--************************************************************--this is a wizard-generated not edit this file!----7.2 build 151 09/26/2007 sj full version--************************************************************--copyright(c)1991-2007 altera corporation--your use of altera corporation's design tools, logic functions--and other software and tools, and its ampp partner logic--functions, and any output files from any of the foregoing--(including device programming or simulation files), and any--associated documentation or information are expressly subject--to the terms and conditions of the altera program license--subscription agreement, altera megacore function license--agreement, or other applicable license agreement, including,--without limitation, that your use is for the sole purpose of--programming logic devices manufactured by altera and sold by--altera or its authorized refer to the--applicable agreement for further y ieee;use ;library lpm;use ;entity lpm_mult0 is port();end lpm_mult0;architecture syn of lpm_mult0 is signal sub_wire0 : std_logic_vector(15 downto 0);clock dataa datab result
: in std_logic;
: in std_logic_vector(7 downto 0);: in std_logic_vector(7 downto 0);: out std_logic_vector(15 downto 0)lpm_mult 5 component lpm_mult generic();port();end component;begin result <= sub_wire0(15 downto 0);lpm_mult_component : lpm_mult generic map()port map();end syn;--==============--cnx file retrieval info--==============--retrieval info: private: autosizeresult numeric “1”--retrieval info: private: b_isconstant numeric “0”--retrieval info: private: constantb numeric “0”--retrieval info: private: intended_device_family string “cyclone ii”--retrieval info: private: lpm_pipeline numeric “1” dataa => dataa, datab => datab, clock => clock, result => sub_wire0 lpm_hint => “dedicated_multiplier_circuitry=yes,maximize_speed=5”, lpm_pipeline => 1, lpm_representation => “unsigned”, lpm_type => “l(fā)pm_mult”, lpm_widtha => 8, lpm_widthb => 8, lpm_widthp => 16
dataa datab clock result
: in std_logic_vector(7 downto 0);: in std_logic_vector(7 downto 0);: in std_logic;
: out std_logic_vector(15 downto 0)lpm_hint
: string;
: natural;
: string;lpm_pipeline lpm_type lpm_widtha lpm_widthb lpm_widthp lpm_representation
: string;
: natural;: natural;: natural 6--retrieval info: private: latency numeric “1”--retrieval info: private: optionalsum numeric “0”--retrieval info: private: synth_wrapper_gen_postfix string “1”--retrieval info: private: signedmult numeric “0”--retrieval info: private: use_mult numeric “1”--retrieval info: private: validconstant numeric “0”--retrieval info: private: widtha numeric “8”--retrieval info: private: widthb numeric “8”--retrieval info: private: widthp numeric “16”--retrieval info: private: widths numeric “1”--retrieval info: private: aclr numeric “0”--retrieval info: private: clken numeric “0”--retrieval info: private: optimize numeric “0”--retrieval
info:
constant:
lpm_hint
string “dedicated_multiplier_circuitry=yes,maximize_speed=5”--retrieval info: constant: lpm_pipeline numeric “1”--retrieval info: constant: lpm_representation string “unsigned”--retrieval info: constant: lpm_type string “l(fā)pm_mult”--retrieval info: constant: lpm_widtha numeric “8”--retrieval info: constant: lpm_widthb numeric “8”--retrieval info: constant: lpm_widthp numeric “16”--retrieval info: used_port: clock 0 0 0 0 input nodefval clock--retrieval info: used_port: dataa 0 0 8 0 input nodefval dataa[7..0]--retrieval info: used_port: datab 0 0 8 0 input nodefval datab[7..0]--retrieval info: used_port: result 0 0 16 0 output nodefval result[15..0]--retrieval info: connect: @dataa 0 0 8 0 dataa 0 0 8 0--retrieval info: connect: result 0 0 16 0 @result 0 0 16 0--retrieval info: connect: @datab 0 0 8 0 datab 0 0 8 0--retrieval info: connect: @clock 0 0 0 0 clock 0 0 0 0--retrieval info: library: lpm --retrieval info: gen_file: type_normal true--retrieval info: gen_file: type_normal false--retrieval info: gen_file: type_normal true--retrieval info: gen_file: type_normal true false--retrieval info: gen_file: type_normal false--retrieval info: gen_file: type_normal true--retrieval info: gen_file: type_normal lpm_mult0_wave*.jpg false--retrieval info: gen_file: type_normal lpm_mult0_syn.v true--retrieval info: lib_file: lpm
2.16位加法器adder16b:將鎖存器鎖存的上一階段的值與進行完乘法計算得到的值dataa*datab加起來,并輸出結(jié)果。程序:
library ieee;use ;use ;entity adder16b is port(cin:in std_logic;a,b :in std_logic_vector(15 downto 0);s :out std_logic_vector(15 downto 0);cout:out std_logic);end adder16b;architecture behav of adder16b is signal sint,aa,bb:std_logic_vector(16 downto 0);begin aa <= '0' & a;bb <= '0' & b;sint <= aa+bb+cin;s <= sint(15 downto 0);cout <= sint(4);end behav;
3.計數(shù)器cnt16:區(qū)分每兩組乘加所得數(shù)。clk接到start,每當(dāng)有一個上升沿脈沖送入cnt16時,若計數(shù)不到5,則進行計數(shù)+1,若計數(shù)達到5,cout輸出進位信號到鎖存器en_dff的reset端口,將鎖存器復(fù)位清零,重新進行計數(shù)。程序:
library ieee;use ;use ;entity cnt16 is port(clk,rst,en:in std_logic;cq:out std_logic_vector(3 downto 0);cout:out std_logic);end cnt16;architecture behav of cnt16 is begin process(clk,rst,en)variable cqi:std_logic_vector(3 downto 0);begin if rst='1' then cqi:=(others=>'0');elsif clk'event and clk='1'then if en='1' then if cqi < 5 then cqi:=cqi+1;else cqi:=(others=>'0');end if;end if;end if;if cqi=5 then cout<='1';else cout<='0';end if;cq<=cqi;8 end process;end behav;4.鎖存器en_dff:鎖存上一階段計算得到的值,從而使加法器實現(xiàn)累加功能。程序:
library ieee;use ;entity en_dff is port(d: in std_logic_vector(15 downto 0);reset,en,clk:in std_logic;q: buffer std_logic_vector(15 downto 0));end en_dff;architecture behavior of en_dff is begin process(reset,clk)begin if reset='1' then q<=“***0”;elsif clk'event and clk='1'then if en='1'then q<=d;else q<=q;end if;end if;end process;end behavior;
(三)仿真結(jié)果
(1)乘法器
給clock一個時鐘信號,驗證得當(dāng)clock處于上升沿時result=dataa*datab
(2)16位加法器adder16b 將cin接低電平,隨意設(shè)置a、b的值,s為a、b的和。
(3)計數(shù)器cnt16 給clk一個時鐘信號。首先將rst置低電平,en置高電平,驗證計數(shù)器的計數(shù)功能。再分別將rst置高電平、en置低電平,驗證計數(shù)器的復(fù)位清零以及使能端控制功能。
(4)鎖存器en_dff 給clk一個時鐘信號。當(dāng)reset=1時,鎖存器清零,當(dāng)reset=0時有上升沿且使能端en=1時,d鎖存進鎖存器中;當(dāng)有上升沿但是使能端en=0時,d值不鎖存進鎖存器中,鎖存器的值不改變。
(四)軟件設(shè)計
1.軟件設(shè)計平臺:quartusii 7.2 2.實現(xiàn)方法:通過quartusii 7.2進行vhdl語言編程、方陣、引腳配置,然后燒入 gw48實驗平臺,選擇模式no.1,進行硬件驗證。
3.程序的流程方框圖:
4.實現(xiàn)的功能:位寬16位;能對8個16位數(shù)據(jù)進行乘法和加法運算(yout=a0*b0+a1*b1+a2*b2+a3*b3),并行、串行或流水線方式。
(五)系統(tǒng)測試
1.系統(tǒng)的性能指標(biāo)(1)總圖(2)乘法器lpm_mult0
(3)8位加法器adder8b
(4)計數(shù)器cnt16(5)鎖存器en_dff
2.功能仿真
3.引腳綁定
確定波形仿真成功后,再配置管腳,將程序燒錄進ep2c5t144c8中,進行測試。選擇模式1,管腳配置圖如下(start設(shè)置為鍵8,使得人為可控,更方便調(diào)試)
(六)結(jié)論
根據(jù)硬件驗證:鍵1和鍵2輸入一個十六位數(shù),鍵3和鍵4輸入另一個十六位數(shù),數(shù)碼管1、2顯示第一個數(shù),3、4顯示第二個數(shù),鍵8是運算鍵,每點擊一次運算一次,為一組運算,運算結(jié)果顯示在數(shù)碼管5、6、7、8,將顯示這兩個數(shù)的積,再次輸入兩個十六位數(shù),數(shù)碼管5、6、7、8將顯示這兩個數(shù)的積與前一組數(shù)積的和,依次輸入四組十六位數(shù),完成一次十六位乘加的運算,且結(jié)果顯示在數(shù)碼管5、6、7、8。能夠?qū)崿F(xiàn)對8個16位數(shù)據(jù)進行乘法和加法運算(yout=a0*b0+a1*b1+a2*b2+a3*b3)
三:參考文獻
潘松,技術(shù)與vhdl(第3版)——清華大學(xué)出版社
潘松,技術(shù)實用教程—vhdl版(第4班)——科學(xué)出版社 四:附錄
1.實驗電路結(jié)構(gòu)圖
48系統(tǒng)引腳對照表
五.心得體會
本次的課程設(shè)計選題時間較短,由于不怎么會寫程序,所以乘法器使用quartus ii生成,而其他模塊是在網(wǎng)上找的資料,自己輸入編譯反復(fù)修改而成??傮w來說過程比較順利,但不足之處是不能完全實現(xiàn)設(shè)計要求。
您可能關(guān)注的文檔
- 2023年中信建投投行部面試 中信建投證券公司面試(5篇)
- 最新無保留意見審計報告要素(實用16篇)
- 公安局辦案中心工作總結(jié) 公安局案管中心工作總結(jié)(4篇)
- 企業(yè)所得稅年度納稅申報鑒證報告 企業(yè)所得稅匯算清繳鑒證報告書(五篇)
- 最新幼兒園國旗下講話稿安全教育預(yù)防感冒(優(yōu)秀20篇)
- 職業(yè)規(guī)劃考試題目及答案解析 職業(yè)規(guī)劃與發(fā)展考試題(5篇)
- 企業(yè)會計準(zhǔn)則(模板20篇)
- 2023年職業(yè)規(guī)劃考試題目及答案解析 2023年職業(yè)規(guī)劃答案(5篇)
- 2023年數(shù)據(jù)結(jié)構(gòu)與算法個人總結(jié) 數(shù)據(jù)結(jié)構(gòu)及算法(5篇)
- 2023年團組織的主要任務(wù)(精選9篇)
- 探索平面設(shè)計師工作總結(jié)的重要性(匯總14篇)
- 平面設(shè)計師工作總結(jié)體會與收獲大全(20篇)
- 平面設(shè)計師工作總結(jié)的實用指南(熱門18篇)
- 免費個人簡歷電子版模板(優(yōu)秀12篇)
- 個人簡歷電子版免費模板推薦(通用20篇)
- 免費個人簡歷電子版制作教程(模板17篇)
- 學(xué)校貧困補助申請書(通用23篇)
- 學(xué)校貧困補助申請書的重要性范文(19篇)
- 學(xué)校貧困補助申請書的核心要點(專業(yè)16篇)
- 學(xué)校貧困補助申請書的申請流程(熱門18篇)
- 法制教育講座心得體會大全(17篇)
- 教育工作者的超市工作總結(jié)與計劃(模板18篇)
- 教學(xué)秘書的工作總結(jié)案例(專業(yè)13篇)
- 教師的超市工作總結(jié)與計劃(精選18篇)
- 單位趣味運動會總結(jié)(模板21篇)
- 禮品店創(chuàng)業(yè)計劃書的重要性(實用16篇)
- 消防隊月度工作總結(jié)報告(熱門18篇)
- 工藝技術(shù)員工作總結(jié)(專業(yè)18篇)
- 大學(xué)學(xué)生會秘書處工作總結(jié)(模板22篇)
- 醫(yī)院科秘書工作總結(jié)(專業(yè)14篇)
相關(guān)文檔
-
eda 技術(shù)應(yīng)用心得體會(實 用16篇)48下載數(shù) 790閱讀數(shù) -
煤礦
實 訓(xùn)報告實 用(實 用18篇)10下載數(shù) 279閱讀數(shù) -
最新
eda 技術(shù)應(yīng)用心得體會(實 用19篇)17下載數(shù) 145閱讀數(shù) -
2023年
實 驗心得體會eda 范文(通用8篇)38下載數(shù) 637閱讀數(shù) -
實 驗心得體會eda 范文(通用20篇)13下載數(shù) 965閱讀數(shù) -
2023年
EDA 電子制圖心得體會簡短(大全13篇)39下載數(shù) 897閱讀數(shù)