『壹』 eda設計正負脈寬數控調制信號發生器
本書以掌握國內外最流行的電子設計自動化(EDA)技術為教學目標,以
培養學生的設計和應用開發能力為主線,系統地介紹EDA應用技術。
全書在取材和編排上,內容新穎、循序漸進,並注重理論聯系實際。全
書共10章,主要內容包括VHDL硬體描述語言、Quartus Ⅱ等EDA工具軟體、
可編程邏輯器件、實驗開發系統、應用實例和綜合設計實例。第4章對大量
常規的數字電路做出了VHDL描述,第7章詳細闡述了9個典型數字系統的設計
方法,第9章選取了16個實驗實例,第10章給出了4個代表性的全國大學生電
子設計競賽賽題設計實例。讀者完全可以通過這些實際操作,很好地掌握:
EDA的開發設計方法。每章後面附有小結和習題,便於讀者學習和教學使用
。為方便教師教學,本書配有電子教案。
本書可作為高職高專及本科院校電子信息、電氣、通信、自動控制、自
動化和計算機類專業的EDA技術教材,也可作為上述學科或相關學科工程技
術人員的參考書。還可作為電子產品製作、科技創新實踐、EDA課程設計和
畢業設計等實踐活動的指導書。
【本書目錄】
第1章 EDA技術概述
1.1 EDA技術及其發展
1.1.1 EDA技術的涵義
1.1.2 EDA技術的發展史
1.2 EDA設計流程
1.3 EDA技術的主要內容及主要的EDA廠商
1.3.1 EDA技術的主要內容
1.3.2 主要EDA廠商概述
1.4 常用的EDA工具
1.5 EDA技術的發展趨勢
1.5.1 可編程器件的發展趨勢
1.5.2 軟體開發工具的發展趨勢
1.5.3 輸入方式的發展趨勢
1.6 EDA技術的應用
1.6.1 EDA技術的應用形式
1.6.2 EDA技術的應用場合
本章小結
思考題和習題
第2章 VHDL硬體描述語言
2.1 VHDL概述
2.1.1 常用硬體描述語言簡介
2.1.2 VHDL及其優點
2.1.3 VHDL程序設計約定
2.1.4 VHDL程序設計舉例
2.2 VHDL程序基本結構
2.2.1 實體
2.2.2 結構體
2.2.3 庫
2.2.4 程序包
2.2.5 配置
2.3 VHDL語言要素
2.3.1 VHDL文字規則
2.3.2 VHDL數據對象
2.3.3 VHDL數據類型
2.3.4 運算操作符
2.3.5 VHDL語言結構體的描述方式
2.4 VHDL順序語句
2.4.1 等待語句和斷言語句
2.4.2 賦值語句
2.4.3 轉向控制語句
2.4.4 子程序調用語句
2.4.5 返回語句
2.5 VHDL並行語句
2.5.1 進程語句
2.5.2 塊語句
2.5.3 並行信號賦值語句
2.5.4 並行過程調用語句
2.5.5 元件例化語句
2.5.6 生成語句
本章小結
思考題和習題
第3章 Quartus Ⅱ軟體及其應用
3.1 Quartus Ⅱ的使用及設計流程
3.1.1 Quartus Ⅱ的圖形編輯輸入法
3.1.2 Quartus Ⅱ的文本編輯輸入法
3.2 Quartus Ⅱ設計正弦信號發生器
3.2.1 創建工程和編輯設計文件
3.2.2 編譯
3.2.3 正弦信號數據ROM定製
3.2.4 模擬
3.2.5 測試
3.2.6 配置器件
3.3 MATLAB/DSP Builder設計可控正弦信號發生器
3.3.1 建立設計模型
3.3.2 Simulink模型模擬
3.3.3 SignalCompiler編譯
3.3.4 使用Quartus Ⅱ實現時序模擬
3.3.5 使用Quartus Ⅱ進行硬體測試
與硬體實現
本章小結
思考題和習題
第4章VHDL應用實例
4.1 組合邏輯電路設計
4.1.1 基本門電路
4.1.2 解碼器
4.1.3 編碼器
4.1.4 數值比較器
4.1.5 數據選擇器
4.1.6 算術運算電路
4.1.7 三態門及匯流排緩沖器
4.2 時序邏輯電路設計
4.2.1 時鍾信號和復位信號
4.2.2 觸發器
4.2.3 寄存器和移位寄存器
4.2.4 計數器
4.2.5 序列信號發生器和檢測器
4.3 存儲器設計
4.3.1 只讀存儲器ROM
4.3.2 隨機存儲器RAM
4.4 狀態機設計
4.4.1 摩爾型狀態機
4.4.2 米立型狀態機
本章小結
思考題和習題
第5章 大規模可編程邏輯器件
5.1 可編程邏輯器件概述
5.2 簡單可編程邏輯器件
5.3 復雜可編程邏輯器件
5.3.1 CPLD的基本結構
5.3.2 Altera公司的器件
5.4 現場可編程門陣列
5.4.1 FPGA的整體結構
5.4.2 Xilinx公司的』FPGA器件
5.4.3 FPGA的配置
5.5 在系統可編程邏輯器件
5.5.1 ispLsI/pLSI的結構
5.5.2 Lattice公司ispLSI系列器件
5.6 FPGA和CPI。D的開發應用選擇
5.6.1 FPGA和CPL|D的性能比較
5.6.2 FPGA和CPLD的開發應用選擇
本章小結
思考題和習題
第6章 常用印A工具軟體
6.1 Altera MAX+plus Ⅱ的使用
6.1.1 MAX+plus Ⅱ功能簡介
6.1.2 MAX+plus Ⅱ設計流程
6.1.3 MAX+plus Ⅱ設計舉例
6.2 Xilinx Foundation的使用
6.2.1 Foundation設計流程
6.2.2.Foundation設計舉例
6.3 ModelSim的使用
6.3.1 ModelSim的使用方法
6.3.2 ModelSim與MAX-+Iplus Ⅱ的介面
6.3.3 ModelSim交互命令方式模擬
6.3.4 ModelSim批處理工作方式。
本章小結
思考題和習題
第7章 EDA技術綜合設計應用
7.1 數字鬧鍾的設計
7.1.1 系統的設計要求
7.1.2 系統的總體設計
7.1.3 鬧鍾控制器的設計
7.1.4 解碼器的設計
7.1.5 鍵盤緩沖器(預置寄存器)的設計
7.1.6 鬧鍾寄存器的設計
7.1.7 時間計數器的設計
7.1.8 顯示驅動器的設計
7.1.9 分頻器的設計
7.1.10 系統的整體組裝
7.1.11 系統的硬體驗證
7.2 多功能信號發生器的設計
7.2.1 設計要求
7.2.2 設計實現
7.2.3 系統模擬
7.3 序列檢測器的設計
7.3.1 設計思路
7.3.2 VHDL程序實現
7.3.3 硬體邏輯驗證
7.4 交通燈信號控制器的設計
7.4.1 設計思路
7.4.2 VHDL程序實現
7.4.3 硬體邏輯驗證
7.5 空調系統有限狀態自動機的設計
7.5.1 設計思路
7.5.2 VHDL程序實現
7.6 電梯控制系統的設計
7.6.1 設計要求
7.6.2 設計實現
7.6.3 系統模擬
7.7 步進電機控制電路的設計
7.7.1 步進電機的工作原理
7.7.2 驅動電路的組成及VHDL實現
7.8 智力競賽搶答器的設計
7.8.1 設計思路
7.8.2 VHDL程序實現
7.9 單片機與FPGA/CPLD匯流排介面的設計
7.9.1 設計思路
7.9.2 VHDL程序實現
本章小結
思考題和習題
第8章 EDA實驗開發系統
8.1 GW48型EDA實驗開發系統原理與使用
8.1.1 系統性能及使用注意事項
8.1.2 系統工作原理
8.1.3 系統主板結構與使用方法
8.2 GW48實驗電路結構圖
8.2.1 實驗電路信號資源符號圖說明
8.2.2各實驗電路結構圖特點與適用范圍簡述
8.3 GW48系統結構圖信號名與晶元引腳對照表
8.4 GWDVP?B電子設計競賽應用板 使用說明
8.5 GW48型EDA實驗開發系統使用實例
本章小結
思考題和習題
第9章 EDA技術實驗
實驗1 8位全加器的設計
實驗2 組合邏輯電路的設計
實驗3 觸發器功能的模擬實現
實驗4 計數器的設計
實驗5 計數解碼顯示電路
實驗6 數字鍾綜合實驗
實驗7 序列檢測器的設計
實驗8 簡易彩燈控制器
實驗9 正負脈寬數控調制信號發生器的設計
實驗10 數字秒錶的設計
實驗11 交通燈信號控制器的設計
實驗12 模擬信號檢測
實驗13 4位十進制頻率計設計
實驗14 VGA顯示器彩條信號發生設計
實驗15 A/D轉換控制器的設計
實驗16 音樂發生器的設計
第10章 EDA技術在全國大學生電子設計競賽中的應用
10.1 等精度頻率計設計
10.1.l 系統設計要求
10.1.2 系統組成
10.1.3 工作原理
10.1.4 FPGA開發的VHDL設計
10.1.5 系統模擬
10.1.6 系統測試與硬體驗證
10.1.7 設計技巧分析及系統擴展思路
10.2 測相儀設計
10.2.1 測相儀工作原理及實現
10.2.2 系統測試
10.3 基於DDS的數字移相正弦信號發生器設計
10.3.1 系統設計要求
10.3.2 系統設計方案
10.3.3 DDS內部主要模塊的VHDL程序實現
10.3.4 系統模擬與硬體驗證
10.3.5 設計技巧分析與系統擴展思路
10.4 邏輯分析儀設計
10.4.1 設計任務
lO.4.2 設計基本要求
10.4.3 設計實現
『貳』 eda實驗怎樣進行功能模擬,需要步驟
我一般使用Quartus II自帶的模擬器模擬,方法如下:
(1)新建一個.vwf文件,並將其設為模擬激勵:菜單Assignments->Settings,在左側選擇Simulation Settings,選擇這里的.vwf文件
(2)設置為功能模擬:菜單Assignments->Settings,在左側選擇Simulation Settings,設置為Functional Simulation
(3)生成功能模擬網表:菜單Processing->Generate Functional Simulation Netlist
(4)開始模擬:菜單Processing->Start Simulation
『叄』 EDA課程設計,用VHDL編程做計程車計費器
課程設計內容與要求
1,用開關按鍵表示脈沖,每個脈沖代表100米,10個脈沖1公里,每公里1.4元,能同步顯示里程和費用;
2,低於2公里5元計費,高於2公里總費用=起步費用+(里程-2公里)*里程單價+
等候時間*等後單價;
3,等候時間大於2分鍾,按每分鍾1.3元計費;
4,可以設定起步價和里程單價。
一、設計原理與技術方法:
包括:電路工作原理分析與原理圖、元器件選擇與參數計算、電路調試方法與結果說明;
軟體設計說明書與流程圖、軟體源程序代碼、軟體調試方法與運行結果說明。
根據設計要求,系統的輸入信號clk,計價開始信號start,等待信號stop,里程脈沖信號fin。系統的輸出信號有:總費用數C0—c3,行駛距離k0—k1,等待時間m0—m1等。系統有兩個脈沖輸入信號clk_750k,fin,其中clk_750k將根據設計要求分頻成14hz,15hz和1hz分別作為公里計費和超時計費的脈沖。兩個控制輸入開關start,stop;控制過程為:start作為計費開始的開關,當start為高電平時,系統開始根據輸入的情況計費。當有乘客上車並開始行駛時,fin脈沖到來,進行行駛計費,此時的stop需要置為0;如需停車等待,就把stop變為高電平,
並去除fin輸入脈沖,進行等待計費;當乘客下車且不等待時,直接將start置為0,系統停止工作;價格開始歸為起步價5.0元。
整個設計由分頻模塊,計量模塊,計費模塊,控制模塊和顯示模塊五個部分組成。
其中計量模塊是整個系統實現里程計數和時間計數的重要部分;控制模塊是實現不同計費方式的選擇部分,根據所設計的使能端選擇是根據里程計費還是根據等待時間計費,同時設計通過分頻模塊產生不同頻率的脈沖信號來實現系統的計費。計量模塊採用1hz的驅動信號,計費模塊採用14hz,13hz的驅動信號;計量模塊每計數一次,計量模塊就實現14次或者13次計數,即為實現計時的1.3元/min,計程時的1.4元/km的收費。組成框圖如下所示:
1.百進制模塊:
實現百米脈沖的驅動信號,元件框圖如圖3所示:
圖3 百進制模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity jin is
port(start,clk2: in std_logic; --秒脈沖
a: out std_logic_vector(3 downto 0));
end jin;
architecture rt1 of jin is
signal count_1:std_logic_vector(3 downto 0);
begin
a<=count_1;
process(start,clk2)
begin
if(start='0')then
count_1<="0000";
elsif(clk2'event and clk2='1')then
if(count_1="0111")then
count_1<="0000";
else
count_1<=count_1+'1';
end if;
end if;
end process;
end rt1
2.計費模塊
; 實現里程和等候時間的計費並輸出到顯示,元件框圖4如下:
圖4 計費模塊框圖
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity jifei is
port(clk2:in std_logic; --計費驅動信號
start:in std_logic; --計費開始信號
c0,c1,c2,c3:buffer std_logic_vector(3 downto 0));
end jifei;
architecture rt1 of jifei is
begin
process(clk2,start)
begin
if start='0'then c3<="0000";c2<="0000";c1<="0101";c0<="0000"; --起步價5元
elsif clk2'event and clk2='1'then
if c0="1001" then c0<="0000";
if c1="1001" then c1<="0000";
if c2="1001" then c2<="0000";
if c3="1001" then c3<="0000";
else c3<=c3+1;
end if;
else c2<=c2+1;
end if;
else c1<=c1+1;
end if;
else c0<=c0+1;
end if;
end if;
end process;
end rt1;
3.公里模塊
實現歷程的計數和輸出計費脈沖,元件框圖5如下:
圖5 公里模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity gongli is
port(clk1,start: in std_logic; --百米脈沖
k1,k2,k3,k4: out std_logic_vector(3 downto 0); --里程顯示
temp2 : out std_logic);
end gongli;
architecture rt1 of gongli is
signal count_1: std_logic_vector(3 downto 0);
signal count_2: std_logic_vector(3 downto 0);
signal count_3: std_logic_vector(3 downto 0);
signal count_4: std_logic_vector(3 downto 0);
begin
k1<=count_1;
k2<=count_2;
k3<=count_3;
k4<=count_4;
process(start,clk1)
begin
if(start='0')then
count_1<="0000";
count_2<="0000";
count_3<="0000";
count_4<="0000"; ---公里清零
elsif(clk1'event and clk1='1')then
if(count_1="1001")then --公里計數器
count_1<="0000";count_2<=count_2+1;temp2<='1';
if(count_2="1001")then
count_2<="0000";count_3<=count_3+'1';
if(count_3="1001")then
count_3<="0000";count_4<=count_4+'1';
end if;
end if;
else
count_1<=count_1+'1';temp2<='0';
end if;
end if;
end process;
end rt1;
4.輸出模塊
實現所有數據的輸出,元件框圖6如下:
圖6 輸出模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity shuchu is
port(y: in std_logic_vector(3 downto 0);
e: out std_logic_vector(6 downto 0));
end shuchu;
architecture rt1of shuchu is
begin
process
begin
case y is
when"0000"=>e<="0111111";
when"0001"=>e<="0000110";
when"0010"=>e<="1011011";
when"0011"=>e<="1001111";
when"0100"=>e<="1100110";
when"0101"=>e<="1101101";
when"0110"=>e<="1111101";
when"0111"=>e<="0000111";
when"1000"=>e<="1111111";
when"1001"=>e<="1100111";
when others=>e<="0000000";
end case;
end process;
end rt1;
5.顯示模塊
實現所有數據的顯示,元件框圖7如下:
圖7 顯示模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity xianshi is
port(start: in std_logic;
a:in std_logic_vector(3 downto 0); --選擇信號
c1,c2,c3,c4,out1,out2,out3,out4:in std_logic_vector(3 downto 0); --里程顯示,時間顯示輸入
y:out std_logic_vector(3 downto 0)); --里程顯示,時間顯示輸出
end xianshi;
architecture rt1 of xianshi is
begin
process
begin
if(start='0')then
y<="0000";
else case a is
when "0000"=> y<=c1 ;
when "0001"=> y<=c2 ;
when "0010"=> y<=c3 ;
when "0011"=> y<=c4 ;
when "0100"=> y<=out1 ;
when "0101"=> y<=out2;
when "0110"=> y<=out3 ;
when "0111"=> y<=out4;
when others =>y<= "0000";
end case;
end if;
end process;
end rt1;
6.dian模塊
圖8 dian模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity dian is
port(a: in std_logic_vector(3 downto 0);
e: out std_logic);
end dian;
architecture rt1 of dian is
begin
process
begin
case a is
when "0001"=>e<='1';
when "0101"=>e<='1';
when others=>e<='0';
end case;
end process;
end rt1;
三、中各個模塊設計分析
系統總體頂層框圖如下:
系統總體頂層框圖
程序最終功能實現波形模擬
1. 分頻模塊
由於實驗箱上沒有14hz和13hz的整數倍時鍾信號,因此採用頻率較大的750khz進行分頻,以近似得到14hz,13hz和1hz的時鍾頻率。通過以上三種不同頻率的脈沖信號實行計程車行駛,等待兩種情況下的不同計費。模塊元件如下:
分頻模塊框圖
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity fenpin is
port(clk_750k:in std_logic; --系統時鍾
clk_14:buffer std_logic; --14分頻
clk_13:buffer std_logic; --13分頻
clk_1 : buffer std_logic); --1分頻
end fenpin ;
architecture rt1 of fenpin is
signal q_14:integer range 0 to 53570; --定義中間信號量
signal q_13:integer range 0 to 57691;
signal q_1:integer range 0 to 749999;
begin
process(clk_750k)
begin
If(clk_750k' event and clk_750k='1')then
If q_14=53570 then q_14<=0;clk_14<=not clk_14;
else q_14<=q_14+1;
end if; --得14hz頻率信號
If q_13=57691 then q_13<=0;clk_13<=not clk_13;
else q_13<=q_13+1;
end if; --得13hz頻率信號
If q_1=749999 then q_1<=0;clk_1<=not clk_1;
else q_1<=q_1+1;
end if; --得1hz頻率信號
end if;
end process;
end rt1;
2. 計量模塊
計量模塊主要完成計時和計程功能。
計時部分:計算乘客的等待累積時間,當等待時間大於2min時,本模塊中en1使能信號變為1;當clk1每來一個上升沿,計時器就自增1,計時器的量程為59min,滿量程後自動歸零。
計程部分:計算乘客所行駛的公里數,當行駛里程大於2km時,本模塊中en0使能信號變為1;當clk每來一個上升沿,計程器就自增1,計程器的量程為99km,滿量程後自動歸零。
元件框圖為:
計量模塊框圖
計量模塊模擬波形為:
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity jiliang is
port(start:in std_logic; --計費開始信號
fin:in std_logic; --里程脈沖信號
stop:in std_logic; --行駛中途等待信號
clk1:in std_logic; --驅動脈沖
en1,en0:buffer std_logic; --計費單價使能信號
k1,k0:buffer std_logic_vector(3 downto 0); --行駛公里計數
m1,m0:buffer std_logic_vector(3 downto 0)); --等待時間計數
end jiliang;
architecture rt2 of jiliang is
signal w:integer range 0 to 59; --計時范圍0~59
begin
process(clk1)
begin
if(clk1'event and clk1='1')then
if start='0' then
w<=0;en1<='0';en0<='0';m1<="0000";
m0<="0000";k1<="0000";k0<="0000";
elsif stop='1' then --計時開始信號
if w=59 then
w<=0;
else w<=w+1;
end if;
if m0="1001" then
m0<="0000";
if m1="0101" then
m1<="0000";
else m1<=m1+1;
end if;
else m0<=m0+1;
end if;
if stop='1' then en0<='0';
if m1&m0>"00000001" then en1<='1'; --若等待時間大於2min則en1置1
else en1<='0';
end if;
end if;
elsif fin='1' then --里程計數開始
if k0="1001" then k0<="0000";
if k1="1001" then k1<="0000"; --計程范圍0~99
else k1<=k1+1;
end if;
else k0<=k0+1;
end if;
if stop='0' then
en1<='0';
if k1&k0>"00000001" then
en0<='1'; --若行使里程大於2km,則en0置1
else en0<='0';
end if;
end if;
end if;
end if;
end process;
end rt2;
3. 控制模塊
本模塊主要是通過計量模塊產生的兩個不同的輸入使能信號en0,en1,對每個分頻模塊輸出的14hz,13hz的脈沖進行選擇輸出的過程;本模塊實現了雙脈沖的二選一;最終目的為了計費模塊中對行駛過程中不同的時段進行計價。
模塊元件如下:
控制模塊框圖
控制模塊模擬波形為:
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity kong is
port(en0,en1:in std_logic; --使能選擇信號
clk_in1:in std_logic; --14分頻輸入信號
clk_in2:in std_logic; --13分頻輸入信號
clk_out:out std_logic); --輸出信號
end kong;
architecture rt3 of kong is
begin
process(en0,en1)
begin
if en0='1' then --實現二選一功能
clk_out<=clk_in1;
elsif en1='1' then
clk_out<=clk_in2;
end if;
end process;
end rt3;
4.計費模塊
當計費信號start一直處於高電平即計費狀態時,本模塊根據控制模塊選擇出的信號從而對不同的單價時段進行計費。即行程在2km內,而且等待累計時間小於2min則為起步價5元;2km外以每公里1.4.元計費,等待累積時間超過2min則按每分鍾1.3元計費。c0,c1,c2,c3分別表示費用的顯示。
模塊元件為:
計費模塊框圖
計費模塊模擬波形為:
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity jifei is
port(clk2:in std_logic; --計費驅動信號
start:in std_logic; --計費開始信號
c0,c1,c2,c3:buffer std_logic_vector(3 downto 0));
end jifei;
architecture rt4 of jifei is
begin
process(clk2,start)
begin
if start='0'then c3<="0000";c2<="0000";c1<="0101";c0<="0000"; --起步價5元
elsif clk2'event and clk2='1'then
if c0="1001" then c0<="0000";
if c1="1001" then c1<="0000";
if c2="1001" then c2<="0000";
if c3="1001" then c3<="0000"; --計價范圍0~999.9
else c3<=c3+1;
end if;
else c2<=c2+1;
end if;
else c1<=c1+1;
end if;
else c0<=c0+1;
end if;
end if;
end process;
end rt4;
5.顯示模塊
顯示模塊完成計價,計時和計程數據顯示。計費數據送入顯示模塊進行解碼,最後送至以百元,十元,元,角為單位對應的數碼管上顯示。計時數據送入顯示模塊進行解碼,最後送至以分為單位對應的數碼管上顯示。計程數據送入顯示模塊進行解碼,最後送至以km為單位的數碼管上顯示。
模塊元件為:
顯示模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; --定義庫包
entity xianshi is --定義實體
port(
clk_scan:in std_logic; --掃描時鍾信號埠設置
c3,c2,c1,c0:in std_logic_vector(3 downto 0); --總費用輸入埠
k0,k1:in std_logic_vector(3 downto 0); --里程輸入埠
m0,m1:in std_logic_vector(3 downto 0); --等待時間輸入埠
sel:out std_logic_vector(2 downto 0); --控制數碼管位選信號的掃描信號輸出埠
led:out std_logic_vector(6 downto 0); --數碼管的控制埠
led_dp:out std_logic --數碼管的小數點輸出埠
);
end xianshi;
architecture rt5 of xianshi is
signal an:std_logic_vector(6 downto 0); --數碼顯示管中間變數
signal shuju:std_logic_vector(3 downto 0); --選擇輸入端的中間變數
signal cnt:std_logic_vector(2 downto 0); --控制數碼管的中間變數
signal xiaodian:std_logic; --小數點的中間變數
begin
process(clk_scan) --開始進程
begin
if clk_scan'event and clk_scan='1' then
cnt<=cnt+1; --每有一個掃描信號上升沿實現加1掃描
end if;
end process; --結束進程
process(cnt) --開始進程(選擇掃描顯示數碼管)
begin
case cnt is --掃描時給每個數碼管賦值
when "000"=>shuju<=c0;
when "001"=>shuju<=c1;
when "010"=>shuju<=c2;
when "011"=>shuju<=c3;
when "100"=>shuju<=k0;
when "101"=>shuju<=k1;
when "110"=>shuju<=m0;
when "111"=>shuju<=m1;
when others=> null;
end case;
if (cnt="001" or cnt="110")
then xiaodian<='1'; --在里程和總費用的個位處顯示小數點
else xiaodian<='0';
end if;
end process; --結束進程
process(shuju) --開始進程(解碼顯示)
begin
case shuju is
when "0000"=>an<="0111111"; --0
when "0001"=>an<="0000110"; --1
when "0010"=>an<="1011011"; --2
when "0011"=>an<="1001111"; --3
when "0100"=>an<="1100110"; --4
when "0101"=>an<="1101101"; --5
when "0110"=>an<="1111101"; --6
when "0111"=>an<="0000111"; --7
when "1000"=>an<="1111111"; --8
when "1001"=>an<="1101111"; --9
when others=>null;
end case;
end process;
sel<=cnt;
led<=an;
led_dp<=xiaodian;
end rt5;
二、課程設計工作記錄:
包括:設計步驟與時間安排、調試步驟與時間安排、課題完成結果說明
2.課題完成結果說明:
此計費器能實現起步價是5元;實現實驗要求的1公里計費一次單價,行駛公里大於2km時每公里按1.4元計費並能顯示里程和總共的費用。當行駛了6公里,等待了4分鍾時,費用顯示為15.8元。與計算公式總費用=起步費用+(里程-2公里)*里程單價+等候時間*等後單價;即15.8=5+(6-2)*1.4+4*1.3。實驗結果與理論結果完全一致,實驗設計成功。
『肆』 EDA心得體會
三.心得體會
1.困難首先出現在Quartus軟體的應用上,一開始把文件夾取名為漢字名「數字秒錶」,出現錯誤,後來知道,文件必須保存在英文文件夾下。還有,一開始沒有注意到程序文件保存時要保存成實體名.VHD的形式,在編譯時出錯。
2.第二個困難出現在控制顯示的時候,一開始選擇直接把數據送到數碼管顯示,中間沒有加掃描控制模塊,結果顯示亂碼和錯碼,後來經過同學幫助和提示知道,必須採用動態掃描的方法顯示,通過ledcom口移位控制數碼管,逐位顯示。
3.第三次困難出現在編制顯示碼表的時候,從h~~~a賦值應該最高位為h,最低位為a,一開始時弄反了,編制的錯誤碼表導致輸出錯碼。後來仔細看實驗指導書,自己發現了錯誤,予以及時糾正。
4.第四次困難出現在分配管腳的時候,會發現某寫管腳被重復分配,導致沖突;另外,在分配數碼管的管腳時應注意低四位和高四位數碼管的管腳分配,由於本次設計使用的開發板上有8個數碼管,最高兩位的數碼管用不到,所以始終不予顯示,在控制埠端,始終給以高電平。
5.在寫程序時會輸錯部分關鍵字或漏掉一些小的標點之類的,導致編譯不通過,需要經過反復查找,所以,覺得在輸程序時就應注意細節,提高一次正確率,避免一些小錯誤的發生,起到事半功倍的效果。
6.這次EDA實踐讓我更深刻的了解了現代數字電路系統設計相對於傳統電子系統設計的模式的優勢,採用模塊法自頂向下設計的原則,一邊設計一邊調試,使系統的開發速度更快。
『伍』 EDA實驗,用quartus軟體編譯一個和:16位二進制數比較器
不知道以下解答是否滿足需要?
mole comp16(da,db,res);
input [15:0] da;
input [15:0] db;
output [1:0] res; //2'b11: 相等;2'b10: da>db;2'01: da<db
reg [1:0] res;
always @*
if(da>db)
res=2'b10;
else if(da==db)
res = 2'b11;
else
res = 2'b01;
endmole
『陸』 什麼是EDA軟體
是電子設計自動化。
電子設計自動化(英語:Electronic design automation,縮寫:EDA)是指利用計算機輔助設計(CAD)軟體,來完成超大規模集成電路(VLSI)晶元的功能設計、綜合、驗證、物理設計(包括布局、布線、版圖、設計規則檢查等)等流程的設計方式。
在電子產業中,由於半導體產業的規模日益擴大,EDA 扮演越來越重要的角色。使用這項技術的廠商多是從事半導體器件製造的代工製造商,以及使用 EDA 模擬軟體以評估生產情況的設計服務公司。EDA 工具也應用在現場可編程邏輯門陣列的程序設計上。
(6)eda編譯器實驗圖片擴展閱讀
eda的歷史發展
在電子設計自動化出現之前,設計人員必須手工完成集成電路的設計、布線等工作,這是因為當時所謂集成電路的復雜程度遠不及現在。工業界開始使用幾何學方法來製造用於電路光繪(photoplotter)的膠帶。
到了1970年代中期,開發人應嘗試將整個設計過程自動化,而不僅僅滿足於自動完成掩膜草圖。第一個電路布局、布線工具研發成功。設計自動化研討會(Design Automation Conference)在這一時期被創立,旨在促進電子設計自動化的發展。
電子設計自動化發展的下一個重要階段以卡弗爾·米德(Carver Mead)和琳·康維於1980年發表的論文《超大規模集成電路系統導論》(Introction to VLSI Systems)為標志。這一篇具有重大意義的論文提出了通過編程語言來進行晶元設計的新思想。
如果這一想法得到實現,晶元設計的復雜程度可以得到顯著提升。這主要得益於用來進行集成電路邏輯模擬、功能驗證的工具的性能得到相當的改善。隨著計算機模擬技術的發展,設計項目可以在構建實際硬體電路之前進行模擬,晶元布局、布線對人工設計的要求降低。
而且軟體錯誤率不斷降低。直至今日,盡管所用的語言和工具仍然不斷在發展,但是通過編程語言來設計、驗證電路預期行為,利用工具軟體綜合得到低抽象級(或稱「後端」)物理設計的這種途徑,仍然是數字集成電路設計的基礎。
『柒』 EDA實驗報告帶PCB圖的
那就隨便在網上找個圖 畫個PCB就好了啊