課程設計報告
課程:EDA技術基礎 題目:頻率計的設計學生
姓名:李*學號:201556110210
班級:1502班
專業:電子信息科學與技術
指導教師:賀*
長沙理工大學課程設計任務書 物理與電子科學 學院 電子信息科學與技術 專業 1502 班 姓名 李* 課程名稱 EDA技術基礎 題 目 頻率計的設計 | 用FPGA設計一個頻率計,測量TTL電平方波信號的頻率。具體要求如下: (1)測量頻率范圍: 10Hz~100kHz (2)數字顯示,全測量范圍精度:2 % (3)測量速度不低于每秒8次 (4)量程選擇:撥碼開關或鍵控 (5)自行設計簡易方波信號發生器,測試驗證頻率計性能 發揮部分: (1)自動量程(2)提高精度(3)拓寬量程(4)等精度方案(5)周期測量(6)上電自檢或鍵控自檢。
工作計劃 (1)時間 本課程設計安排2周時間: 2017.12.18 ~2017.12.29 (2)進度安排 第1周周一周二:查閱資料,拿出整體設計方案,劃分模塊; 第1周周三至周五:各模塊的設計、調試、驗證。 第2周周三前完成項目整體調試和測試。 第2周周三周四文檔寫作整理 第2周周五:答辯討論
| 指導教師:
賀慧勇 鐘海麗 唐立軍 文勇軍 周曉萍
2017年11月8 日 | |
|
長沙理工大學課程設計成績評定表
學生姓名: 李* 學號: 201556110210 專業班級: 電子信息科學與技術 1502班 課程設計題目: 頻率計設計
| | | | | | | |
| | | |
| | | |
| | 完全符合撰寫規范要求,結構嚴謹,邏輯性強,層次清晰,表述準確,文字流暢。 | |
| | | |
| |
| |
摘要 所謂頻率就是某信號在時間T內的變化次數N,公式:F=N/T。本次頻率計的設計的基本原理是:用一個頻率穩定度高的頻率源作為基準時鐘,對比測量待測信號的頻率。通常情況下計算每秒內待測信號的脈沖個數,即閘門時間為1秒。閘門時間可以根據需要取值,閘門時間越長,的得到的頻率值就越準確,但時間間隔會相對較長,閘門時間越短,頻率值顯示速度就會越快,但精度會因此受到影響,所以一般情況下設計頻率計以1s作為閘門時間。基本的測量原理是,首先讓被測信號與標準信號一起通過一個閘門,然后用計數器計數信號脈沖的個數,把標準時間內的計數結果用鎖存器鎖存起來,最后用顯示譯碼器,把鎖存的結果用LED數碼顯示管顯示出來。 目錄 一、綜合概述 5 1、EDA技術及頻率計概述 5 2、使用設計軟件及工具 6 二、模塊設計 8 1、信號產生及六選一選擇器 9 2、測頻控制模塊 9 3、進制轉換模塊 10 2、譯碼顯示模塊 10 2、頂層設計模塊 11 2、本人負責模塊 13 三、設計要求的實現及問題的發現 14 四、總結 16 參考文獻及附錄 1、EDA及頻率計概述 (1)、EDA技術概述:在計算機技術的推動下,20世紀末,電子技術獲得了飛速的發展,現代電子產品滲透于社會的各個領域,有力的推動了社會生產力的發展和社會信息化程度的提高,同時有促使現代電子產品性能的進一步提高,產品更新換代的節奏也越開越快。EDA(electronic design automation)技術作為現代電子技術設計的核心,它依賴功能強大的計算機,在EDA工具軟件平臺上,對以硬件描述語言HDL(hardware description language)為系統邏輯描述手段完成設計文件,自動地完成邏輯簡化,邏輯分割,邏輯綜合,結構綜合(布局布線),以及邏輯優化和仿真測試等功能,直至實現既定性能的電子系統功能。EDA技術使得設計者的工作幾乎僅限于利用軟件的方式,即利用硬件描述語言HDL和EDA軟件來完成對系統硬件功能的實現。 (2)、頻率計研究與應用:頻率計已經廣泛應用于高科技產品行業的生產之中,到今天頻率計已開始向智能、精細方向發展,因此系統對電路的要求越來越高,傳統的集成電路設計技術已經無法滿足性能日益提高的系統要求。在信息技術高度發展的今天,電子系統數字化已成為有目共睹的趨勢。從傳統應用中小規模芯片構成系統到廣泛應用單片機,直到今天FPGA/CPLD在系統設計中的應用,電子技術已邁入一個全新的階段。而在電子技術中,頻率是最基本的參數之一,而信號的頻率往往與測量方案的制定、測量結果都有著十分密切的關系,所以測頻率方法的研究越來越受到重視。 (3)、基本設計原理及測量方法:用一個頻率穩定度高的頻率源作為基準時鐘,對比測量待測信號的頻率。通常情況下計算每秒內待測信號的脈沖個數,即閘門時間為1秒。閘門時間可以根據需要取值,閘門時間越長,的得到的頻率值就越準確,但時間間隔會相對較長,閘門時間越短,頻率值顯示速度就會越快,但精度會因此受到影響,所以一般情況下設計頻率計以1s作為閘門時間。基本的測量原理是,首先讓被測信號與標準信號一起通過一個閘門,然后用計數器計數信號脈沖的個數,把標準時間內的計數結果用鎖存器鎖存起來,最后用顯示譯碼器,把鎖存的結果用LED數碼顯示管顯示出來。 對于quaturs Ⅱ軟件的基本描述:QuartusII是Altera公司的綜合性PLD/FPGA開發軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多種設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程.Quartus II提供了完全集成且與電路結構無關的開發包環境,具有數字邏輯設計的全部特性,包括:可利用原理圖、結構框圖、VerilogHDL、AHDL和VHDL完成電路描述,并將其保存為設計實體文件;芯片(電路)平面布局連線編輯;LogicLock增量設計方法,用戶可建立并優化系統,然后添加對原始系統的性能影響較小或無影響的后續模塊;功能強大的邏輯綜合工具;完備的電路功能仿真與時序邏輯仿真工具;定時/時序分析與關鍵路徑延時分析;可使用SignalTap II邏輯分析工具進行嵌入式的邏輯分析;支持 軟件 源文件的添加和創建,并將它們鏈接起來生成編程文件;使用組合 編譯方式可一次完成整體設計流程;自動定位編譯錯誤;高效的期間編程與驗證工具;可讀入標準的EDIF網表文件、VHDL網表文件和Verilog網表文件;能生成第三方EDA 軟件使用的VHDL網表文件和Verilog網表文件。 二、模塊設計 根據前一章的敘述,頻率計的工作流程基本是:由信號源發出周期信號——待測信號,通過由測頻控制電路提供的基準測頻信號即閘門信號,然后在單位時間內由計數器來計經由閘門的信號脈沖個數,計數器將所計個數交由鎖存器進行存儲,經過測頻控制電路提供的使能信號,鎖存器再將信號轉送給譯碼器進行進制轉換,最后在經過數碼顯示管將所測得頻率值顯示出來。所以,在設計頻率計的工作中大概可以將設計模塊分為五個模塊即(設計原理圖如下)1、信號發生模塊;2、測頻控制模塊;3、計數器模塊;4、鎖存模塊;5、譯碼及顯示模塊,各個模塊完成后再經過頂層設計將其連接,最后再做整體調試、運行、改正。
0.png (19.94 KB, 下載次數: 79)
下載附件
2018-1-4 03:47 上傳
該模塊的設計是獨立于頻率計設計的,為得是從外部產生被測信號以檢測頻率計的測量精度,同時也證明所設計的頻率計可以測量任何從外部 (1)信號發生器設計的過程是利用分頻器將50mHz的時鐘信號分為6個頻率不同的信號分別是10Hz、100Hz、1000Hz、500Hz、10kHz、100kHz如下程序所示,分頻器的是基于計數原理所設計的,當計數小于250時繼續累加,直至下一個上升沿500時輸出一個分頻信號作為第一個被測信號其頻率為100kHz,余下的五個信號也由此程序產生。 variable cnt1,cnt2,cnt3,cnt4,cnt5,cnt6 :INTEGER RANGE 0 TO 5000000; begin if clk'event and clk='1' then if cnt1<250 then cnt1:=cnt1+1; else a<=not a; cnt1:=0; end if; - 為方便測試,上述產生的六個信號需要控制著每次只輸出一個給頻率計測量,因此需要設計一個簡單的選擇,通過撥碼開關控制每次輸出的信號。部分程序如下
xuanze:process(key) ----選擇方波 begin case(key) is when "10000" => tclk0<=e; when "01000" => tclk0<=d; tclk0是輸出信號,e、d為輸入信號,當撥碼開關所示數值為“10000”時,輸出信號為e,以此類推,完成對六個信號的選擇。 測頻控制模塊是頻率計的核心模塊,其功能是計數所測信號在一秒鐘內的脈沖數;計算測量速度;量程的自動切換控制等。部分程序如下: port(clk:in std_logic; --輸入時鐘50mHz tclk:in std_logic; rst : in std_logic; x : out integer range 0 to 500000000; j,lc1,lc1k: out std_logic); end z; architecture hav of z is signal a :std_logic ; SIGNAL cnt0:INTEGER RANGE 0 TO 5000000; begin cepin:process(clk,tclk) begin if rst='0' then cnt0<=0;x<=0;j<='0'; else j<=tclk; if clk'event and clk='1' then if tclk='1' then cnt0<=cnt0+1; else if cnt0>24999 then x<=(250000000/cnt0*10);lc1<='1';lc1k<='0'; cnt0<=0; elsif cnt0/=0 and cnt0<25000 then x<=2500000/cnt0;lc1<='0';lc1k<='1'; cnt0<=0; 其中,x為所測信號的計數值,rst為復位信號,j為測量速度,lc1、lc1k為兩個檔位的量程。設計過程中,將j信號的輸出用LED燈顯示,以其閃爍速度作為每次測量時的測量速度;在量程選擇中,共有兩個單位的量程,當被測信號的頻率值小于1000Hz時,單位為Hz,當被測信號頻率高于1000Hz時,量程自動切換,單位變為kHz。 進制轉換模塊的任務是將十進制脈沖數,轉換為四進制BCD碼。算法如下: variable b1,b2,b3,b4,b5:INTEGER RANGE 0 TO 500000000; begin b1:=X rem 10; b2:=((X-b1) rem 100)/10; b3:=((X-b1-10*b2) rem 1000)/100; ----------------------------------------------- A1<=CONV_STD_LOGIC_VECTOR(b1,4); A2<=CONV_STD_LOGIC_VECTOR(b2,4); X作為輸入信號,A1、A2為輸出信號。 將BCD碼用七位數碼管顯示出來。部分程序如下: case (A1) is WHEN"0000" => BCD0(6 DOWNTO 0)<="1000000"; --0 WHEN"0001" => BCD0(6 DOWNTO 0)<="1111001"; --1 WHEN"0010" => BCD0(6 DOWNTO 0)<="0100100"; --2 WHEN"0011" => BCD0(6 DOWNTO 0)<="0110000"; --3 WHEN"0100" => BCD0(6 DOWNTO 0)<="0011001"; --4 WHEN"0101" => BCD0(6 DOWNTO 0)<="0010010"; --5 WHEN"0110" => BCD0(6 DOWNTO 0)<="0000010"; --6 WHEN"0111" => BCD0(6 DOWNTO 0)<="1111000"; --7 WHEN"1000" => BCD0(6 DOWNTO 0)<="0000000"; --8 WHEN"1001" => BCD0(6 DOWNTO 0)<="0010000"; --9 WHEN OTHERS => BCD0(6 DOWNTO 0)<="1111111"; bcd2(6 downto 0)<="1111111"; end case; 其中輸出信號為bcd0,輸入信號為A1. 頂層設計是個模塊的綜合,首先先將各模塊的文件放在頂層設計的文件中方便調用,然后用例化語句將個模塊的端口定義并連接。部分程序如下: component cepin port(clk,tclk,rst:in std_logic; x : out integer range 0 to 500000000; j,lc1,lc1k: out std_logic); end component; component yima port (x : in integer range 0 to 500000000; bcd0,bcd1,bcd2,bcd3,bcd4,bcd5:out std_logic_vector(6 downto 0)); end component; ---------------------------------------------------------------------------------------------------------- u1:cepin port map(clk=>clk,x=>f,tclk=>tclk,j=>j,rst=>rst,lc1=>lc1,lc1k=>lc1k); u2:yima port map(x=>f,bcd0=>bcd0,bcd1=>bcd1,bcd2=>bcd2,bcd3=>bcd3,bcd4=>bcd4,bcd5=>bcd5); end hav; 上述程序是頂層設計中對測評控制和譯碼顯示模塊的調用及兩個模塊的端口連接。頂層設計的仿真圖如下:
0.png (125.1 KB, 下載次數: 74)
下載附件
2018-1-4 03:48 上傳
由仿真結果可以看出,當撥碼開關撥至“010000”時,頻率計所測量的得輸出信號如“lc1k”所示,隨后由譯碼顯示模塊,將其轉換為bcd碼,其中bcd2所表示的是小數點的位置,bcd0,bcd1分別表示所保留的兩位小數點。Lc1,lc1k分別表示單位為Hz和kHz兩個單位的量程,從圖中可以看出撥碼開關撥至“010000”時所用量程的單位是kHz。
6、本人負責模塊。
此次設計,我負責的是頂層設計,在組內的任務相對來說是最輕松的。頂層設計就是將組員設計的各個模塊通過COMPONENT語句實現調用,再用端口映射語句PORT MAP語句將各個模塊連接起來形成一個完整的電路。設計過程參照《EDA技術實用教程》中全加器頂層設計的過程來完成。原理圖如下:
0.jpg (30.14 KB, 下載次數: 80)
下載附件
2018-1-4 03:48 上傳
在該模塊的設計中,要注意的問題就是各個模塊可能會用到的重復的端口名稱,其次就是要有一個明確的引腳分配思路,之后在開發板上運行時,集中可辨的按鍵可以減少操作難度,更加方便演示。
三、設計要求的實現及問題的發現
1、 由上一節中頂層設計的原理圖可以看到,信號的發生和選擇是完全獨立的,所以該頻率計還可以測量任何外部接入信號的頻率。
2、 精度的計算:
0.jpg (16.59 KB, 下載次數: 72)
下載附件
2018-1-4 03:49 上傳
3、本次設計的問題在于量程的選擇問題上,在被測信號低于1000Hz時量程的單位為Hz,大于1000時單位為kHz,因此無法確認1000Hz時的量程應該怎樣劃分。
四、總結
短短兩周的課程設計,讓大家都獲益良多。從一開始的被迫學習到后來慢慢主動的去查閱資料,整理思路,討論問題,到最后大家一起主動解決問題,這一過程不僅是知識的增長更多的認識到團隊合作的重要性。
像EDA,單片機這樣的課程對于我來說仿佛是天書一樣。在做實驗的時候也是盡可能的去網上復制粘貼程序,沒有投入一點點自己的思考在里面。上課的時候,盡管老師在講臺上講的生龍活虎,但我整堂課就是左耳進右耳出,雖然有時候覺得應該積累一些知識,以免最后什么也沒有學到,但當靜心開始聽課時,總會有那么一些專業術語卡在腦子,就像是編譯過程中遇到了錯誤而怎么也找不到解決方法一般。
這兩周的課程設計對我來說并不輕松,在與組員的討論討論過程中更是暴露自己在這門課程上的無知。模塊劃分的事情也是討論一遍又一遍,第一個星期過后,看得出大家都有了些倦怠,但當第一次大家都做好各個模塊時,我確實是長舒了一口氣,殊不知,問題的出現才是從這會開始,在做整合的時候,我們發現各個人做的模塊在很大程度上互相不匹配,但是討論解決方案時又無從下手,最后大家都變得有些心煩意亂。
當今時代是信息技術高速發展的時代,各種信息產業及電子產品充斥著整個世界,推動著信息時代的前進,作為學習信息學科的學生來說,更是承擔著未來信息技術發展的重任,《EDA技術基礎》作為信息技術的主要學科,對于信息類學生來說更是重要。既然作為重要學科,所以學習難度也不會很輕松,雖然是基礎知識但涵蓋的知識也是相當全面,在一學期的學習過程中,覺得很多的知識都沒有辦法了解和運用,在課程設計之前大家都戰戰兢兢,不知道會抽到什么課題,也不知道最后能不能做出來,但兩個星期的設計過程中,隨著一個個問題的出現,大家的情緒也跟著起起伏伏,但經過組員的討論和建議,一個個的問題又慢慢的被解決,直到最后在大家的一起努力之下完成設計。整個過程中,體現出了團隊合作的重要性。
在學習了EDA技術的基礎便開始做設計對于我們大多數普通學生來說都是不容易的,在討論設計方案的時候都盡量的挑選最簡單的過程進行設計,而最后設計出來的成果又存在很多的問題。在我們本次的設計中,我們直接將發揮部分的一個選項加入了設計過程,在量程選擇問題上我們直接設計成了自動量程,在測頻控制模塊的設計中也存在不恰當的程序表達。但總體來說,我們本次設計的頻率計雖然在很大程度上存在“偷工減料”所導致的問題,但在最后運行時,還是可以達到預期額效果,并且對我們的組員來說,只存在問題才會讓大家投入更多的思考,解決問題的過程也是一個提高的過程。
本次模塊的分配中,由于組員人數比較多,所以我所負責的模塊是最為簡單的頂層設計模塊,但在第一個星期的設計過程,也有參與其他模塊的設計和討論,所以雖然最后的任務相對容易,但在整個過程中也學到了很多東西。
參考文獻:
《EDA技術實用教程》——VHDL版/潘松,黃繼業編著.——5版.——北京:科學出版社,2013.
附錄:
所用程序:
1、方波信號發生及選擇:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity fangbo is
port(clk:in std_logic; --輸入時鐘50Mhz
key:in std_logic_vector(4 downto 0);
tclk: out std_logic);
end fangbo;
architecture hav of fangbo is
signal a,b,c,d,e :std_logic;
begin
fangbo:process(clk) --產生五種方波
variable cnt1,cnt2,cnt3,cnt4,cnt5 :INTEGER RANGE 0 TO 5000000;
begin
if clk'event and clk='1' then
if cnt1<250 then cnt1:=cnt1+1;
else a<=not a; cnt1:=0;
end if;
if cnt2<2500 then cnt2:=cnt2+1;
else b<=not b; cnt2:=0;
end if;
if cnt3<25000 then cnt3:=cnt3+1;
else c<=not c; cnt3:=0;
end if;
if cnt4<250000 then cnt4:=cnt4+1;
else d<=not d; cnt4:=0;
end if;
if cnt5<2500000 then cnt5:=cnt5+1;
else e<=not e; cnt5:=0;
end if;
end if;
end process;
xuanze:process(key) ----選擇方波
begin
case(key) is
when "10000" => tclk<=e;
when "01000" => tclk<=d;
when "00100" => tclk<=c;
when "00010" => tclk<=b;
when "00001" => tclk<=a;
when others => NULL;
end case;
2、測頻控制:library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
USE IEEE.STD_LOGIC_ARITH.ALL;
entity cepin is
port(clk:in std_logic; --輸入時鐘50Mhz
tclk:in std_logic;
rst : in std_logic;
x : out integer range 0 to 500000000;
j,lc1,lc1k: out std_logic);
end cepin;
architecture hav of cepin is
signal a :std_logic ;
SIGNAL cnt0:INTEGER RANGE 0 TO 5000000;
begin
cepin:process(clk,tclk)
begin
if rst='0' then cnt0<=0;x<=0;j<='0';
else
j<=tclk;
if clk'event and clk='1' then
if tclk='1' then cnt0<=cnt0+1;
else
if cnt0>24999 then
x<=(250000000/cnt0*10);lc1<='1';lc1k<='0'; cnt0<=0;
elsif cnt0/=0 and cnt0<25000 then
x<=2500000/cnt0;lc1<='0';lc1k<='1'; cnt0<=0;
end if;
end if;
end if;
end if;
end process;
end hav;
3、譯碼及顯示:library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity yima is
port ( A1,A2,A3,A4,A5 : in STD_LOGIC_VECTOR(3 DOWNTO 0);
bcd0,bcd1,bcd2,bcd3,bcd4,bcd5:out std_logic_vector(6 downto 0));
end yima;
architecture hav of yima is
begin
yima:process(A1,A2,A3,A4,A5)
BEGIN
bcd2(6 downto 0)<="1110111"; -- _
case (A1) is
WHEN"0000" => BCD0(6 DOWNTO 0)<="1000000"; --0
WHEN"0001" => BCD0(6 DOWNTO 0)<="1111001"; --1
WHEN"0010" => BCD0(6 DOWNTO 0)<="0100100"; --2
WHEN"0011" => BCD0(6 DOWNTO 0)<="0110000"; --3
WHEN"0100" => BCD0(6 DOWNTO 0)<="0011001"; --4
WHEN"0101" => BCD0(6 DOWNTO 0)<="0010010"; --5
WHEN"0110" => BCD0(6 DOWNTO 0)<="0000010"; --6
WHEN"0111" => BCD0(6 DOWNTO 0)<="1111000"; --7
WHEN"1000" => BCD0(6 DOWNTO 0)<="0000000"; --8
WHEN"1001" => BCD0(6 DOWNTO 0)<="0010000"; --9
WHEN OTHERS => BCD0(6 DOWNTO 0)<="1111111";bcd2(6 downto 0)<="1111111";
end case;
case (A2) is
WHEN"0000" => BCD1(6 DOWNTO 0)<="1000000"; --0
WHEN"0001" => BCD1(6 DOWNTO 0)<="1111001"; --1
WHEN"0010" => BCD1(6 DOWNTO 0)<="0100100"; --2
WHEN"0011" => BCD1(6 DOWNTO 0)<="0110000"; --3
WHEN"0100" => BCD1(6 DOWNTO 0)<="0011001"; --4
WHEN"0101" => BCD1(6 DOWNTO 0)<="0010010"; --5
WHEN"0110" => BCD1(6 DOWNTO 0)<="0000010"; --6
WHEN"0111" => BCD1(6 DOWNTO 0)<="1111000"; --7
WHEN"1000" => BCD1(6 DOWNTO 0)<="0000000"; --8
WHEN"1001" => BCD1(6 DOWNTO 0)<="0010000"; --9
WHEN OTHERS => BCD1(6 DOWNTO 0)<="1111111";bcd2(6 downto 0)<="1111111";
end case;
case (A3) is
WHEN"0000" => BCD3(6 DOWNTO 0)<="1000000"; --0
WHEN"0001" => BCD3(6 DOWNTO 0)<="1111001"; --1
WHEN"0010" => BCD3(6 DOWNTO 0)<="0100100"; --2
WHEN"0011" => BCD3(6 DOWNTO 0)<="0110000"; --3
WHEN"0100" => BCD3(6 DOWNTO 0)<="0011001"; --4
WHEN"0101" => BCD3(6 DOWNTO 0)<="0010010"; --5
WHEN"0110" => BCD3(6 DOWNTO 0)<="0000010"; --6
WHEN"0111" => BCD3(6 DOWNTO 0)<="1111000"; --7
WHEN"1000" => BCD3(6 DOWNTO 0)<="0000000"; --8
WHEN"1001" => BCD3(6 DOWNTO 0)<="0010000"; --9
WHEN OTHERS => BCD3(6 DOWNTO 0)<="1111111";bcd2(6 downto 0)<="1111111";
end case;
case (A4) is
WHEN"0000" => BCD4(6 DOWNTO 0)<="1000000"; --0
WHEN"0001" => BCD4(6 DOWNTO 0)<="1111001"; --1
WHEN"0010" => BCD4(6 DOWNTO 0)<="0100100"; --2
WHEN"0011" => BCD4(6 DOWNTO 0)<="0110000"; --3
WHEN"0100" => BCD4(6 DOWNTO 0)<="0011001"; --4
WHEN"0101" => BCD4(6 DOWNTO 0)<="0010010"; --5
WHEN"0110" => BCD4(6 DOWNTO 0)<="0000010"; --6
WHEN"0111" => BCD4(6 DOWNTO 0)<="1111000"; --7
…………
…………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
完整的Word格式文檔51黑下載地址:
EDA課程設計報告 頻率計設計.docx
(300.47 KB, 下載次數: 70)
2018-1-3 11:07 上傳
點擊文件名下載附件
EDA課程設計 簡易信號頻率計 下載積分: 黑幣 -5
|