常見數字IC設計、FPGA工程師面試題

1:什麼是同步邏輯和異步邏輯?(漢王)
同步邏輯是時鐘之間有固定的因果關係。異步邏輯是各時鐘之間沒有固定的因果關係。 答案應該與上面問題一致
〔補充〕:同步時序邏輯電路的特色:各觸發器的時鐘端所有鏈接在一塊兒,並接在系統時鐘端,只有當時鍾脈衝到來時,電路的狀態才能改變。改變後的狀態將一直保持到下一個時鐘脈衝的到來,此時不管外部輸入 x 有無變化,狀態表中的每一個狀態都是穩定的。   
     異步時序邏輯電路的特色:電路中除可使用帶時鐘的觸發器外,還可使用不帶時鐘的觸發器和延遲元件做爲存儲元件,電路中沒有統一的時鐘,電路狀態的改變由外部輸入的變化直接引發。
 
2:同步電路和異步電路的區別:
  同步電路:存儲電路中全部觸發器的時鐘輸入端都接同一個時鐘脈衝源,於是全部觸發器的狀態的變化都與所加的時鐘脈衝信號同步。
異步電路:電路沒有統一的時鐘,有些觸發器的時鐘輸入端與時鐘脈衝源相連,這有這些觸發器的狀態變化與時鐘脈衝同步,而其餘的觸發器的狀態變化不與時鐘脈衝同步。
 
3:時序設計的實質:
       電路設計的難點在時序設計,時序設計的實質就是知足每個觸發器的創建/保持時間的而要求。
 
4:創建時間與保持時間的概念?
       創建時間:觸發器在時鐘上升沿到來以前,其數據輸入端的數據必須保持不變的時間。
       保持時間:觸發器在時鐘上升沿到來以後,其數據輸入端的數據必須保持不變的時間。
 
不考慮時鐘的skew,D2的創建時間不能大於(時鐘週期T - D1數據最遲到達時間T1max+T2max);保持時間不能大於(D1數據最快到達時間T1min+T2min);不然D2的數據將進入亞穩態並向後級電路傳播
 
 
5:爲何觸發器要知足創建時間和保持時間?
因 爲觸發器內部數據的造成是須要必定的時間的,若是不知足創建和保持時間,觸發器將進入亞穩態,進入亞穩態後觸發器的輸出將不穩定,在0和1之間變化,這時 須要通過一個恢復時間,其輸出才能穩定,但穩定後的值並不必定是你的輸入值。這就是爲何要用兩級觸發器來同步異步輸入信號。這樣作能夠防止因爲異步輸入 信號對於本級時鐘可能不知足創建保持時間而使本級觸發器產生的亞穩態傳播到後面邏輯中,致使亞穩態的傳播。
(比較容易理解的方式)換個方式理解:須要創建時間是由於觸發器的D段像一個鎖存器在接受數據,爲了穩定的設置前級門的狀態須要一段穩定時間;須要保持時間是由於在時鐘沿到來以後,觸發器要經過反饋來所存狀態,從後級門傳到前級門須要時間。
 
6:什麼是亞穩態?爲何兩級觸發器能夠防止亞穩態傳播?
       這也是一個異步電路同步化的問題,具體的能夠參考《EDACN技術月刊20050401》。
亞 穩態是指觸發器沒法在某個規定的時間段內到達一個能夠確認的狀態。使用兩級觸發器來使異步電路同步化的電路其實叫作「一步同位器」,他只能用來對一位異步 信號進行同步。兩級觸發器可防止亞穩態傳播的原理:假設第一級觸發器的輸入不知足其創建保持時間,它在第一個脈衝沿到來後輸出的數據就爲亞穩態,那麼在下 一個脈衝沿到來以前,其輸出的亞穩態數據在一段恢復時間後必須穩定下來,並且穩定的數據必須知足第二級觸發器的創建時間,若是都知足了,在下一個脈衝沿到 來時,第二級觸發器將不會出現亞穩態,由於其輸入端的數據知足其創建保持時間。 同步器有效的條件:第一級觸發器進入亞穩態後的恢復時間 + 第二級觸發器的創建時間 < = 時鐘週期
更確切地說,輸入脈衝寬度必須大於同步時鐘週期與第一級觸發器所需的保持時間之和。最保險的脈衝寬度是兩倍同步時鐘週期。 因此,這樣的同步電路對於從較慢的時鐘域來的異步信號進入較快的時鐘域比較有效,對於進入一個較慢的時鐘域,則沒有做用 。
 
7:系統最高速度計算(最快時鐘頻率)和流水線設計思想:
       同步電路的速度是指同步系統時鐘的速度,同步時鐘愈快,電路處理數據的時間間隔越短,電路在單位時間內處理的數據量就愈大。假設Tco是觸發器的輸入數據 被時鐘打入到觸發器到數據到達觸發器輸出端的延時時間;Tdelay是組合邏輯的延時;Tsetup是D觸發器的創建時間。假設數據已被時鐘打入D觸發 器,那麼數據到達第一個觸發器的Q輸出端須要的延時時間是Tco,通過組合邏輯的延時時間爲Tdelay,而後到達第二個觸發器的D端,要但願時鐘能在第 二個觸發器再次被穩定地打入觸發器,則時鐘的延遲必須大於Tco+Tdelay+Tsetup,也就是說最小的時鐘週期Tmin =Tco+Tdelay+Tsetup,即最快的時鐘頻率Fmax =1/Tmin。FPGA開發軟件也是經過這種方法來計算系統最高運行速度Fmax。由於Tco和Tsetup是由具體的器件工藝決定的,故設計電路時只 能改變組合邏輯的延遲時間Tdelay,因此說縮短觸發器間組合邏輯的延時時間是提升同步電路速度的關鍵所在。因爲通常同步電路都大於一級鎖存,而要使電 路穩定工做,時鐘週期必須知足最大延時要求。故只有縮短最長延時路徑,才能提升電路的工做頻率。能夠將較大的組合邏輯分解爲較小的N塊,經過適當的方法平 均分配組合邏輯,而後在中間插入觸發器,並和原觸發器使用相同的時鐘,就能夠避免在兩個觸發器之間出現過大的延時,消除速度瓶頸,這樣能夠提升電路的工做 頻率。這就是所謂"流水線"技術的基本設計思想,即原設計速度受限部分用一個時鐘週期實現,採用流水線技術插入觸發器後,可用N個時鐘週期實現,所以系統 的工做速度能夠加快,吞吐量加大。注意,流水線設計會在原數據通路上加入延時,另外硬件面積也會稍有增長。
 
8:時序約束的概念和基本策略?
時序約束主要包括週期約束,偏移約束,靜態時序路徑約束三種。經過附加時序約束能夠綜合佈線工具調整映射和佈局佈線,是設計達到時序要求。
附 加時序約束的通常策略是先附加全局約束,而後對快速和慢速例外路徑附加專門約束。附加全局約束時,首先定義設計的全部時鐘,對各時鐘域內的同步元件進行分 組,對分組附加週期約束,而後對FPGA/CPLD輸入輸出PAD附加偏移約束、對全組合邏輯的PAD TO PAD路徑附加約束。附加專門約束時,首先約束分組之間的路徑,而後約束快、慢速例外路徑和多週期路徑,以及其餘特殊路徑。
9:附加約束的做用?
    做用:1:提升設計的工做頻率(減小了邏輯和佈線延時);2:得到正確的時序分析報告;(靜態時序分析工具以約束做爲判斷時序是否知足設計要求的標準,因 此要求設計者正確輸入約束,以便靜態時序分析工具能夠正確的輸出時序報告)3:指定FPGA/CPLD的電氣標準和引腳位置。
 
10:FPGA設計工程師努力的方向:
SOPC, 高速串行I/O,低功耗,可靠性,可測試性和設計驗證流程的優化等方面。隨着芯片工藝的提升,芯片容量、集成度都在增長,FPGA設計也朝着高速、高度集 成、低功耗、高可靠性、高可測、可驗證性發展。芯片可測、可驗證,正在成爲複雜設計所必備的條件,儘可能在上板以前查出bug,將發現bug的時間提早,這 也是一些公司花大力氣設計仿真平臺的緣由。另外隨着單板功能的提升、成本的壓力,低功耗也逐漸進入FPGA設計者的考慮範圍,完成相同的功能下,考慮如何 可以使芯片的功耗最低,聽說altera、xilinx都在根據本身的芯片特色整理如何下降功耗的文檔。高速串行IO的應用,也豐富了FPGA的應用範 圍,象xilinx的v2pro中的高速鏈路也逐漸被應用。 總之,學無止境,當掌握必定概念、方法以後,就要開始考慮FPGA其它方面的問題了。
 
11:對於多位的異步信號如何進行同步?
       對以一位的異步信號可使用「一位同步器進行同步」,而對於多位的異步信號,能夠採用以下方法:1:能夠採用保持寄存器加握手信號的方法(多數據,控制, 地址);2:特殊的具體應用電路結構,根據應用的不一樣而不一樣 ;3:異步FIFO。(最經常使用的緩存單元是DPRAM)
 
12:FPGA和CPLD的區別?
FPGA是可編程ASIC。  
ASIC:專用集成電路,它是面向專門用途的電路,專門爲一個用戶設計和製造的。根據一個用戶的特定要求,能以低研製成本,短、交貨週期供貨的全定製,半定製集成電路。與門陣列等其它ASIC(ApplicaTIon Specific IC)相比,它們又具備設計開發週期短、設計制形成本低、開發工具先進、標準產品無需測試、質量穩定以及可實時在線檢驗等優勢。
 
 
CPLD
FPGA
內部結構
Product-term
Look-up Table
程序存儲
內部EEPROM
SRAM,外掛EEPROM
資源類型
組合電路資源豐富
觸發器資源豐富
集成度
使用場合
完成控制邏輯
能完成比較複雜的算法
速度
其餘資源
PLL、RAM和乘法器等
保密性
可加密
通常不能保密
 
 
13:鎖存器(latch)和觸發器(flip-flop)區別?
       電平敏感的存儲期間稱爲鎖存器。可分爲高電平鎖存器和低電平鎖存器,用於不一樣時鐘之間的信號同步。
       有交叉耦合的門構成的雙穩態的存儲原件稱爲觸發器。分爲上升沿觸發和降低沿觸發。能夠認爲是兩個不一樣電平敏感的鎖存器串連而成。前一個鎖存器決定了觸發器的創建時間,後一個鎖存器則決定了保持時間。
 
14:FPGA芯片內有哪兩種存儲器資源?
       FPGA芯片內有兩種存儲器資源:一種叫block ram,另外一種是由LUT配置成的內部存儲器(也就是分佈式ram)。Block ram由必定數量固定大小的存儲塊構成的,使用BLOCK RAM資源不佔用額外的邏輯資源,而且速度快。可是使用的時候消耗的BLOCK RAM資源是其塊大小的整數倍。
 
15:什麼是時鐘抖動?
       時鐘抖動是指芯片的某一個給定點上時鐘週期發生暫時性變化,也就是說時鐘週期在不一樣的週期上可能加長或縮短。它是一個平均值爲0的平均變量。
 
16:FPGA設計中對時鐘的使用?(例如分頻等)
       FPGA芯片有固定的時鐘路由,這些路由能有減小時鐘抖動和誤差。須要對時鐘進行相位移動或變頻的時候,通常不容許對時鐘進行邏輯操做,這樣不只會增長時 鐘的誤差和抖動,還會使時鐘帶上毛刺。通常的處理方法是採用FPGA芯片自帶的時鐘管理器如PLL,DLL或DCM,或者把邏輯轉換到觸發器的D輸入(這 些也是對時鐘邏輯操做的替代方案)。
 
17:FPGA設計中如何實現同步時序電路的延時?
       首先說說異步電路的延時實現:異步電路一半是經過加buffer、兩級與非門等(我還沒用過因此也不是很清楚),但這是不適合同步電路實現延時的。在同步 電路中,對於比較大的和特殊要求的延時,一半經過高速時鐘產生計數器,經過計數器來控制延時;對於比較小的延時,能夠經過觸發器打一拍,不過這樣只能延遲 一個時鐘週期。
 
18:FPGA中能夠綜合實現爲RAM/ROM/CAM的三種資源及其注意事項?
       三種資源:block ram;觸發器(FF),查找表(LUT);
注 意事項:1:在生成RAM等存儲單元時,應該首選block ram 資源;其緣由有二:第一:使用block ram等資源,能夠節約更多的FF和4-LUT等底層可編程單元。使用block ram能夠說是「不用白不用」,是最大程度發揮器件效能,節約成本的一種體現;第二:block ram是一種能夠配置的硬件結構,其可靠性和速度與用LUT和register構建的存儲器更有優點。2:弄清FPGA的硬件結構,合理使用block ram資源;3:分析block ram容量,高效使用block ram資源;4:分佈式ram資源(distribute ram)
 
19:Xilinx中與全局時鐘資源和DLL相關的硬件原語:
       經常使用的與全局時鐘資源相關的Xilinx器件原語包括:IBUFG,IBUFGDS,BUFG,BUFGP,BUFGCE,BUFGMUX,BUFGDLL,DCM等。關於各個器件原語的解釋能夠參考《FPGA設計指導準則》p50部分。
 
20:HDL語言的層次概念?
       HDL語言是分層次的、類型的,最經常使用的層次概念有系統與標準級、功能模塊級,行爲級,寄存器傳輸級和門級。
 
21:查找表的原理與結構?
       查找表(look-up-table)簡稱爲LUT,LUT本質上就是一個RAM。目前FPGA中多使用4輸入的LUT,因此每個LUT能夠當作一個有 4位地址線的16x1的RAM。 當用戶經過原理圖或HDL語言描述了一個邏輯電路之後,PLD/FPGA開發軟件會自動計算邏輯電路的全部可能的結果,並把結果事先寫入RAM,這樣,每 輸入一個信號進行邏輯運算就等於輸入一個地址進行查表,找出地址對應的內容,而後輸出便可
 
22:ic設計前端到後端的流程和eda工具?
       設計前端也稱邏輯設計,後端設計也稱物理設計,二者並無嚴格的界限,通常涉及到與工藝有關的設計就是後端設計。
       1:規格制定:客戶向芯片設計公司提出設計要求。
       2:詳細設計:芯片設計公司(Fabless)根據客戶提出的規格要求,拿出設計解決方案和具體實現架構,劃分模塊功能。目前架構的驗證通常基於 systemC語言,對價後模型的仿真可使用systemC的仿真工具。例如:CoCentric和Visual Elite等。
       3:HDL編碼:設計輸入工具:ultra ,visual VHDL等
       4:仿真驗證:modelsim
       5:邏輯綜合:synplify
       6:靜態時序分析:synopsys的Prime Time
       7:形式驗證:Synopsys的Formality.
 
23:寄生效應在ic設計中怎樣加以克服和利用(這是個人理解,原題好像是說,ic設計過
程中將寄生效應的怎樣反饋影響設計師的設計方案)?
 
24:用filp-flop和logic-gate設計一個1位加法器,輸入carryin和current-stage,輸出
carryout和next-stage?
process(sig_intel)
begin
       case sig_intel is
              when "000" => carryout <= '0';
                                   next_state <= '0';
              when "001" => carryout <= '1';
                                   next_state <= '0';
              when "010" => carryout <= '1';
                                   next_state <= '0';
              when "011" => carryout <= '0';
                                   next_state <= '1';
              when "100" => carryout <= '1';
                                   next_state <= '0';
              when "101" => carryout <= '0';
                                   next_state <= '1';
              when "110" => carryout <= '0';
                                   next_state <= '1';
              when "111" => carryout <= '1';
                                   next_state <= '1';
              when others => carryout <= 'X';
                                   next_state <= 'X';
       end case;
end process;
 
25:設計一個自動飲料售賣機,飲料10分錢,硬幣有5分和10分兩種,並考慮找零,
1.畫出fsm(有限狀態機)
2.用verilog編程,語法要符合fpga設計的要求
3.設計工程中可以使用的工具及設計大體過程?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity drink_auto_sale is
         port(clk: in std_logic;
                   reset:in std_logic;
                   sw101:in std_logic;
                   sw102:in std_logic;
                   buy : out std_logic;
                   back: out std_logic);
end drink_auto_sale;
architecture Behavioral of drink_auto_sale is
type state_type is(st0,st1);
signal cs ,ns : state_type;
begin
process(clk,reset)
begin
         if(reset = '1') then
                   cs <= st0;
         elsif(clk'event and clk = '1') then    
                   cs <= ns;
         end if;
end process;
 
process(reset ,cs)
begin
         case cs is
                   when st0 =>        if( sw101 = '1') then
                                                                 ns <= st1;
                                                                 buy<= '0';
                                                                 back<= '0';
                                                        elsif(sw102 = '1') then
                                                                 ns <= st0;
                                                                 buy<= '1';
                                                                 back <= '0';
                                                        else
                                                                 ns <= st0 ;
                                                                 buy <= '0';
                                                                 back <= '0';
                                                        end if;
                   when st1 => if(sw101 = '1') then
                                                                 ns <= st0;
                                                                 buy <= '1';
                                                                 back <= '0';
                                                        elsif(sw102 = '1') then
                                                                 ns <= st0;
                                                                 buy <= '1';
                                                                 back <= '1';
                                                        end if;
                   when others => ns <= st0;
                                                                 buy<= '0';
                                                                 back <= '0';
         end  case;
end process;
end Behavioral;
設 計過程:設定三個狀態:0分,5分;當狀態爲0分時,接收到5分信號脈衝後轉爲5分;接收到10分信號脈衝時,轉到0分狀態,同時彈出飲料,不找零;狀態 爲5分時,接受到5分信號,彈出飲料,不找零,返回0分狀態;當接受到10分狀態時,彈出飲料,找零,並返回零分狀態。
所用設計工具:ISE7.1,modelsim,synplify
(不知道爲何上面的狀態機設計在synplify的RTL view中沒能看到狀態機流程圖,因此狀態轉移圖就沒畫)。
 
26:什麼是"線與"邏輯,要實現它,在硬件特性上有什麼具體要求?
       線與邏輯是兩個輸出信號相連能夠實現與的功能。在硬件上,要用oc門來實現,因爲不用 oc門可能使灌電流過大,而燒壞邏輯門. 同時在輸出端口應加一個上拉電阻。Oc門就是集電極開路門。
 
27:什麼是競爭與冒險現象?怎樣判斷?如何消除?
       在組合電路中,某一輸入變量通過不一樣途徑傳輸後,到達電路中某一匯合點的時間有先有後,這種現象稱競爭;因爲競爭而使電路輸出發生瞬時錯誤的現象叫作冒 險。(也就是因爲競爭產生的毛刺叫作冒險)。判斷方法:代數法(若是布爾式中有相反的信號則可能產生競爭和冒險現象);卡諾圖:有兩個相切的卡諾圈而且相 切處沒有被其餘卡諾圈包圍,就有可能出現競爭冒險;實驗法:示波器觀測;
解決方法:1:加濾波電路,消除毛刺的影響;2:加選通訊號,避開毛刺;3:增長冗餘項消除邏輯冒險。
28:你知道那些經常使用邏輯電平?TTL與COMS電平能夠直接互連嗎?
經常使用邏輯電平:TTL、CMOS、LVTTL、LVCMOS、ECL(Emitter Coupled Logic)、PECL(Pseudo/Positive Emitter Coupled Logic)、LVDS(Low Voltage Differential Signaling)、GTL(Gunning Transceiver Logic)、BTL(Backplane Transceiver Logic)、ETL(enhanced transceiver logic)、GTLP(Gunning Transceiver Logic Plus);RS23二、RS42二、RS485(12V,5V,3.3V);也有一種答案是:經常使用邏輯電平:12V,5V,3.3V。TTL和CMOS 不能夠直接互連,因爲TTL是在0.3-3.6V之間,而CMOS則是有在12V的有在5V的。CMOS輸出接到TTL是能夠直接互連。TTL接到 CMOS須要在輸出端口加一上拉電阻接到5V或者12V。
cmos的高低電平分別爲:Vih>=0.7VDD,Vil<=0.3VDD;Voh>=0.9VDD,Vol<=0.1VDD.
ttl的爲:Vih>=2.0v,Vil<=0.8v;Voh>=2.4v,Vol<=0.4v.
用cmos可直接驅動ttl;加上拉電阻後,ttl可驅動cmos.
一、當TTL電路驅動COMS電路時,若是TTL電路輸出的高電平低於COMS電路的最低高電平(通常爲3.5V),這時就須要在TTL的輸出端接上拉電阻,以提升輸出高電平的值。
二、OC門電路必須加上拉電阻,以提升輸出的搞電平值。
三、爲加大輸出引腳的驅動能力,有的單片機管腳上也常使用上拉電阻。
四、在COMS芯片上,爲了防止靜電形成損壞,不用的管腳不能懸空,通常接上拉電阻產生下降輸入阻抗,提供泄荷通路。
五、芯片的管腳加上拉電阻來提升輸出電平,從而提升芯片輸入信號的噪聲容限加強抗干擾能力。
六、提升總線的抗電磁干擾能力。管腳懸空就比較容易接受外界的電磁干擾。
七、長線傳輸中電阻不匹配容易引發反射波干擾,加上下拉電阻是電阻匹配,有效的抑制反射波干擾。
上拉電阻阻值的選擇原則包括:
一、從節約功耗及芯片的灌電流能力考慮應當足夠大;電阻大,電流小。
二、從確保足夠的驅動電流考慮應當足夠小;電阻小,電流大。
三、對於高速電路,過大的上拉電阻可能邊沿變平緩。綜合考慮以上三點,一般在1k到10k之間選取。對下拉電阻也有相似道理。
OC門電路必須加上拉電阻,以提升輸出的搞電平值。
OC門電路要輸出「1」時才須要加上拉電阻不加根本就沒有高電平
在有時咱們用OC門做驅動(例如控制一個 LED)灌電流工做時就能夠不加上拉電阻
OC門能夠實現「線與」運算
OC門就是   集電極 開路 輸出
總之加上拉電阻可以提升驅動能力。
 
29:IC設計中同步復位與異步復位的區別?
同步復位在時鐘沿採復位信號,完成復位動做。異步復位無論時鐘,只要復位信號知足條件,就完成復位動做。異步復位對復位信號要求比較高,不能有毛刺,若是其與時鐘關係不肯定,也可能出現亞穩態。
 
30:MOORE 與 MEELEY狀態機的特徵?
       Moore 狀態機的輸出僅與當前狀態值有關, 且只在時鐘邊沿到來時纔會有狀態變化。
       Mealy 狀態機的輸出不只與當前狀態值有關, 並且與當前輸入值有關。
 
31:多時域設計中,如何處理信號跨時域?
       不一樣的時鐘域之間信號通訊時須要進行同步處理,這樣能夠防止新時鐘域中第一級觸發器的亞穩態信號對下級邏輯形成影響。信號跨時鐘域同步:當單個信號跨時鐘 域時,能夠採用兩級觸發器來同步;數據或地址總線跨時鐘域時能夠採用異步fifo來實現時鐘同步;第三種方法就是採用握手信號。
 
32:說說靜態、動態時序模擬的優缺點?
靜態時序分析是採用窮盡分析方法來提取出整個電路存在的全部時序路徑,計算信號在這些路徑上的傳播延時,檢查信號的 創建和保持時間是否知足時序要求,經過對最大路徑延時和最小路徑延時的分析,找出違背時序約束的錯誤。它不須要輸入向量就能窮盡全部的路徑,且運行速度很 快、佔用內存較少,不只能夠對芯片設計進行全面的時序功能檢查,並且還可利用時序分析的結果來優化設計,所以靜態時序分析已經愈來愈多地被用到數字集成電 路設計的驗證中。
動態時序模擬就是一般的仿真,由於不可能產生完備的測試向量,覆蓋門級網表中的每一條路徑。所以在動態時序分析中,沒法暴露一些路徑上可能存在的時序問題;
 
33:一個四級的Mux,其中第二級信號爲關鍵信號 如何改善timing.?
       關鍵:將第二級信號放到最後輸出一級輸出,同時注意修改片選信號,保證其優先級未被修改。(爲何?)
 
34:給出一個門級的圖,又給了各個門的傳輸延時,問關鍵路徑是什麼,還問給出輸入, 使得輸出依賴於關鍵路徑?
 
35:爲何一個標準的倒相器中P管的寬長比要比N管的寬長比大?
       和載流子有關,P管是空穴導電,N管是電子導電,電子的遷移率大於空穴,一樣的電場下,N管的電流大於P管,所以要增大P管的寬長比,使之對稱,這樣才能使得二者上升時間降低時間相等、高低電平的噪聲容限同樣、充電放電的時間相等。
36:用mos管搭出一個二輸入與非門?
       <數字電子技術基礎>49頁
 
37:畫出NOT,NAND,NOR的符號,真值表,還有transistor level的電路?
省略
38:畫出CMOS的圖,畫出tow-to-one mux gate.(威盛VIA 2003.11.06 上海筆試試題) ?
 
39:用一個二選一mux和一個inv實現異或?
其中:B鏈接的是地址輸入端A和A非鏈接的是數據選擇端,F對應的的是輸出端,使能端固定接地置零(沒有畫出來).
 
40:畫出CMOS電路的晶體管級電路圖,實現Y=A*B+C(D+E).(仕蘭微電子)?
 
41:用與非門等設計全加法器?(華爲)
       《數字電子技術基礎》57頁。 ; .
 
42:A,B,C,D,E進行投票,多數服從少數,輸出是F(也就是若是A,B,C,D,E中1的個數比0 多,那麼F輸出爲1,不然F爲0),用與非門實現,輸入數目沒有限制?
  F= ABC + ABD + ABE +ACD + ACE+ ADE + BCD + BCE + CDE + BDE
 
43:畫出一種CMOS的D鎖存器的電路圖和版圖?
 
44:LATCH和DFF的概念和區別?
 
45:latch與register的區別,爲何如今多用register.行爲級描述中latch如何產生的?
       latch是電平觸發,register是邊沿觸發,register在同一時鐘邊沿觸發下動做,符合同步電路的設計思想,而latch則屬於異步電路設計,每每會致使時序分析困難,不適當的應用latch則會大量浪費芯片資源。
 
46:用D觸發器作個二分頻的電路?畫出邏輯電路?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
entity two_de_fre is
         port(clk: in std_logic;
                            reset:in std_logic;
                            clk_out: out std_logic) ;
end two_de_fre;
architecture Behavioral of two_de_fre is
signal sig_clk: std_logic;
begin
process(clk)
begin
         if(reset = '1') then
                   sig_clk <= '0';
         elsif(clk'event and clk = '1') then
                   sig_clk <= not sig_clk;
         end if;
end process;
clk_out <= sig_clk;      
end Behavioral;
顯示工程設計中通常不採用這樣的方式來設計,二分頻通常經過DCM來實現。經過DCM獲得的分頻信號沒有相位差。
 
47:什麼是狀態圖?
       狀態圖是以幾何圖形的方式來描述時序邏輯電路的狀態轉移規律以及輸出與輸入的關係。
 
48:用你熟悉的設計方式設計一個可預置初值的7進制循環計數器,15進制的呢?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity seven_counter is
         port(reset:in std_logic;
                            clk: in std_logic;
                            counter_out std_logic_vector(2 downto 0));
end seven_counter;
architecture Behavioral of seven_counter is
signal sig_counter : std_logic_vector(2 downto 0);
begin
process(reset,clk)
begin
         if(reset = '1') then
                   sig_count <= "101" ;  --初值爲5
         elsif(clk'event and clk = '1') then
                   sig_count <= sig_count + 1;
         end if;
end process;
counter_out <= sig_counter;                                                                                                                
end Behavioral;
 
15進制計數器設計只需將counter_out和sig_counter改成4位就行;
 
49:你所知道的可編程邏輯器件有哪些?
       PAL,PLD,CPLD,FPGA
 
50:用VERILOG或VHDL寫一段代碼,實現消除一個glitch?
將傳輸過來的信號通過兩級觸發器就能夠消除毛刺。(這是我本身採用的方式:這種方式消除毛刺是須要知足必定條件的,並不能保證必定能夠消除)
 
51:sram,falsh memory,及dram的區別?
sram:靜態隨機存儲器,存取速度快,但容量小,掉電後數據會丟失,不像DRAM 須要不停的REFRESH,制形成本較高,一般用來做爲快取(CACHE) 記憶體使用
flash:閃存,存取速度慢,容量大,掉電後數據不會丟失
dram:動態隨機存儲器,必須不斷的從新的增強(REFRESHED) 電位差量,不然電位差將下降至沒法有足夠的能量表現每個記憶單位處於何種狀態。價格比sram便宜,但訪問速度較慢,耗電量較大,經常使用做計算機的內存使用。
 
52:有四種複用方式,頻分多路複用,寫出另外三種?
       四種複用方式:頻分多路複用(FDMA),時分多路複用(TDMA),碼分多路複用(CDMA),波分多路複用(WDM)
 
53:ASIC設計流程中何時修正Setup time violation 和Hold time violation?如何修正?
見前面的創建時間和保持時間
 
54:給出一個組合邏輯電路,要求分析邏輯功能。
       所謂組合邏輯電路的分析,就是找出給定邏輯電路輸出和輸入之間的關係,並指出電路的邏輯功能。
       分析過程通常按下列步驟進行:
1:根據給定的邏輯電路,從輸入端開始,逐級推導出輸出端的邏輯函數表達式。
2:根據輸出函數表達式列出真值表;
3:用文字歸納處電路的邏輯功能;
 
55:如何防止亞穩態?
1 下降系統時鐘頻率
2 用反應更快的FF
3 引入同步機制,防止亞穩態傳播(能夠採用前面說的加兩級觸發器)。
4 改善時鐘質量,用邊沿變化快速的時鐘信號
 
56:基爾霍夫定理的內容
基爾霍夫定律包括電流定律和電壓定律:
電流定律:在集總電路中,任什麼時候刻,對任一節點,全部流出節點的支路電流的代數和恆等於零。
電壓定律:在集總電路中,任什麼時候刻,沿任一回路,全部支路電壓的代數和恆等於零。
 
57:描述反饋電路的概念,列舉他們的應用。
反饋,就是在電路系統中,把輸出迴路中的電量輸入到輸入迴路中去。
反饋的類型有:電壓串聯負反饋、電流串聯負反饋、電壓並聯負反饋、電流並聯負反饋。
負反饋的優勢:下降放大器的增益靈敏度,改變輸入電阻和輸出電阻,改善放大器的線性和非線性失真,有效地擴展放大器的通頻帶,自動調節做用。
電壓負反饋的特色:電路的輸出電壓趨向於維持恆定。
電流負反饋的特色:電路的輸出電流趨向於維持恆定。
58:有源濾波器和無源濾波器的區別
無源濾波器:這種電路主要有無源元件R、L和C組成
有源濾波器:集成運放和R、C組成,具備不用電感、體積小、重量輕等優勢。
集成運放的開環電壓增益和輸入阻抗均很高,輸出電阻小,構成有源濾波電路後還具備必定的電壓放大和緩衝做用。但集成運放帶寬有限,因此目前的有源濾波電路的工做頻率難以作得很高。
 
59什麼叫作OTP片、掩膜片,二者的區別何在?
OTP means one time program,一次性編程
MTP means multi time program,屢次性編程
OTP(One Time Program)是MCU的一種存儲器類型
MCU按其存儲器類型可分爲MASK(掩模)ROM、OTP(一次性可編程)ROM、FLASHROM等類型。
MASKROM的MCU價格便宜,但程序在出廠時已經固化,適合程序固定不變的應用場合;
FALSHROM的MCU程序能夠反覆擦寫,靈活性很強,但價格較高,適合對價格不敏感的應用場合或作開發用途;
OTP ROM的MCU價格介於前二者之間,同時又擁有一次性可編程能力,適合既要求必定靈活性,又要求低成本的應用場合,尤爲是功能不斷翻新、須要迅速量產的電子產品。
60、單片機上電後沒有運轉,首先要檢查什麼?
首先應該確認電源電壓是否正常。用電壓表測量接地引腳跟電源引腳之間的電壓,看是不是電源電壓,例如經常使用的5V。
接下來就是檢查復位引腳電壓是否正常。分別測量按下復位按鈕和放開復位按鈕的電壓值,看是否正確。
而後再檢查晶振是否起振了,通常用示波器來看晶振引腳的波形,注意應該使用示波器探頭的「X10」檔。另外一個辦法是 測量復位狀態下的IO口電平,按住復位鍵不放,而後測量IO口(沒接外部上拉的P0口除外)的電壓,看是不是高電平,若是不是高電平,則多半是由於晶振沒 有起振。
另外還要注意的地方是,若是使用片內ROM的話(大部分狀況下如此,如今已經不多有用外部擴ROM的了),必定要將 EA引腳拉高,不然會出現程序亂跑的狀況。有時用仿真器能夠,而燒入片子不行,每每是由於EA引腳沒拉高的緣故(固然,晶振沒起振也是緣由只一)。通過上 面幾點的檢查,通常便可排除故障了。若是系統不穩定的話,有時是由於電源濾波很差致使的。在單片機的電源引腳跟地引腳之間接上一個0.1uF的電容會有所 改善。若是電源沒有濾波電容的話,則須要再接一個更大濾波電容,例如220uF的。遇到系統不穩定時,就能夠並上電容試試(越靠近芯片越好)。
 
61:給了reg的setup,hold時間,求中間組合邏輯的delay範圍
       Delay < period - setup – hold
 
62:時鐘週期爲T,觸發器D1的寄存器到輸出時間最大爲T1max,最小爲T1min。組合邏輯電路最大延遲爲T2max,最小爲T2min。問,觸發器D2的創建時間T3和保持時間應知足什麼條件
T3setup>T+T2max,T3hold>T1min+T2min
 
63:用傳輸門和倒向器搭一個邊沿觸發器。(揚智電子筆試)
 
64:用邏輯們畫出D觸發器。(威盛VIA 2003.11.06 上海筆試試題)
 
65:16分頻電路中須要多少觸發器?
 
66:阻塞式賦值和非組塞式賦值的區別?
非阻塞賦值:塊內的賦值語句同時賦值,通常用在時序電路描述中。
阻塞賦值:完成該賦值語句後才能作下一句的操做,通常用在組合邏輯描述中。
 
67:7四、用FSM實現101101的序列檢測模塊。(南山之橋)
a爲輸入端,b爲輸出端,若是a連續輸入爲1101則b輸出爲1,不然爲0。
例如a: 0001100110110100100110
b: 0000000000100100000000
請畫出state machine;請用RTL描述其state machine。(未知)
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity detect_stream is
         port(clk: in std_logic;
                            reset: in std_logic;
                            data: in std_logic;
                            result : out std_logic);
end detect_stream;
architecture Behavioral of detect_stream is
type state_type is (idle,st0,st1,st2);
signal cs ,ns : state_type;
signal sig_result :std_logic;
begin
process(clk,reset)
begin
         if(reset = '1') then
                   cs <= idle;
                   result <= '0';
         elsif(clk'event and clk = '1')  then
                   cs  <= ns;
                   result <= sig_result;
         end if;
end process;
process(cs,clk)
begin
                   case cs is
                            when idle => if(data = '1') then
                                                                                    ns <= st0;
                                                                                    sig_result <= '0';
                                                                           else
                                                                                    ns <= idle;
                                                                                    sig_result <= '0';
                                                                           end if;
                            when st0 => if(data = '1') then
                                                                           ns <= st1;
                                                                           sig_result <= '0';
                                                                 else
                                                                           ns <= idle;
                                                                           sig_result <= '0';
                                                                 end if;
                            when st1 => if(data = '0')then
                                                                           ns <= st2;
                                                                           sig_result <= '0';
                                                                 else
                                                                           ns <= idle;
                                                                           sig_result <= '0';
                                                                 end if;
                            when st2 => ns <= idle;
                                                                 if(data = '1') then
                                                                           sig_result <= '1';
                                                                 else
                                                                           sig_result <= '0';
                                                                 end if;
                            end case;
end process;
end Behavioral;
狀態圖:
 
 
68:用verilog/vhdl寫一個fifo控制器(包括空,滿,半滿信號)。(飛利浦-大唐筆試)
reg[N-1:0] memory[0:M-1]; 定義FIFO爲N位字長容量M
八個always模塊實現,兩個用於讀寫FIFO,兩個用於產生頭地址head和尾地址tail,一個產生counter計數,剩下三個根據counter的值產生空,滿,半滿信號產生空,滿,半滿信號。
 
69:現有一用戶須要一種集成電路產品,要求該產品可以實現以下功能:y=lnx,其中,x爲4位二進制整數輸入信號。y爲二進制小數輸出,要求保留兩位小數。電源電壓爲3~5v假設公司接到該項目後,交由咱們來負責該產品的設計,試討論該產品的設計全程。(仕蘭微電子)
 
70:iir,fir濾波器的異同
相關文章
相關標籤/搜索