Q16:FPGA設計中對時鐘的使用?(例如分頻等)
FPGA芯片有固定的時鐘路由,這些路由能有減少時鐘抖動和偏差。需要對時鐘進行相位移動或變頻的時候,一般不允許對時鐘進行邏輯操作,這樣不僅會增加時鐘的偏差和抖動,還會使時鐘帶上毛刺。一般的處理方法是采用FPGA芯片自帶的時鐘管理器如PLL,DLL或DCM,或者把邏輯轉換到觸發器的D輸入(這些也是對時鐘邏輯操作的替代方案)。
Q17:FPGA設計中如何實現同步時序電路的延時?
首先說說異步電路的延時實現:異步電路一半是通過加buffer、兩級與非門等(我還沒用過所以也不是很清楚),但這是不適合同步電路實現延時的。在同步電路中,對于比較大的和特殊要求的延時,一半通過高速時鐘產生計數器,通過計數器來控制延時;對于比較小的延時,可以通過觸發器打一拍,不過這樣只能延遲一個時鐘周期。
Q18: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)
Q19:Xilinx中與全局時鐘資源和DLL相關的硬件原語:
常用的與全局時鐘資源相關的Xilinx器件原語包括:IBUFG,IBUFGDS,BUFG,BUFGP,BUFGCE,BUFGMUX,BUFGDLL,DCM等。關于各個器件原語的解釋可以參考《FPGA設計指導準則》p50部分。
Q20:HDL語言的層次概念?
HDL語言是分層次的、類型的,最常用的層次概念有系統與標準級、功能模塊級,行為級,寄存器傳輸級和門級。
Q21:查找表的原理與結構?
查找表(look-up-table)簡稱為LUT,LUT本質上就是一個RAM。目前FPGA中多使用4輸入的LUT,所以每一個LUT可以看成一個有4位地址線的16x1的RAM。 當用戶通過原理圖或HDL語言描述了一個邏輯電路以后,PLD/FPGA開發軟件會自動計算邏輯電路的所有可能的結果,并把結果事先寫入RAM,這樣,每輸入一個信號進行邏輯運算就等于輸入一個地址進行查表,找出地址對應的內容,然后輸出即可
Q22:ic設計前端到后端的流程和eda工具?
設計前端也稱邏輯設計,后端設計也稱物理設計,兩者并沒有嚴格的界限,一般涉及到與工藝有關的設計就是后端設計。
2:詳細設計:芯片設計公司(Fabless)根據客戶提出的規格要求,拿出設計解決方案和具體實現架構,劃分模塊功能。目前架構的驗證一般基于systemC語言,對價后模型的仿真可以使用systemC的仿真工具。例如:CoCentric和Visual Elite等。
3:HDL編碼:設計輸入工具:ultra ,visual VHDL等
4:仿真驗證:modelsim
5:邏輯綜合:synplify
6:靜態時序分析:synopsys的Prime Time
7:形式驗證:Synopsys的Formality.
Q23:寄生效應在ic設計中怎樣加以克服和利用(這是我的理解,ic設計過程中將寄生效應的怎樣反饋影響設計師的設計方案)?
IC中各元件均制作于同一襯底,注定了元件與元件之間,元件與襯底之間存在寄生效應。某些寄生效應是分立電路所沒有的,因此研究IC就必須了解這些寄生效應,產生寄生效應的原因減弱或消除寄生效應的方法,避免影響電路的性能,在可能的情況下,可以利用某些寄生效應構成電路所需的元件,簡化設計線路。
比如采用的措施有:
增加n+埋層
①加大了寄生PNP晶體管的基區寬度
②形成了寄生PNP晶體管基區減速場
Q24:用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中沒能看到狀態機流程圖,所以狀態轉移圖就沒畫)。
Q26:什么是"線與"邏輯,要實現它,在硬件特性上有什么具體要求?
線與邏輯是兩個輸出信號相連可以實現與的功能。在硬件上,要用oc門來實現,由于不用 oc門可能使灌電流過大,而燒壞邏輯門. 同時在輸出端口應加一個上拉電阻。Oc門就是集電極開路門。
Q27:什么是競爭與冒險現象?怎樣判斷?如何消除?
在組合電路中,某一輸入變量經過不同途徑傳輸后,到達電路中某一匯合點的時間有先有后,這種現象稱競爭;由于競爭而使電路輸出發生瞬時錯誤的現象叫做冒險。(也就是由于競爭產生的毛刺叫做冒險)。判斷方法:代數法(如果布爾式中有相反的信號則可能產生競爭和冒險現象);卡諾圖:有兩個相切的卡諾圈并且相切處沒有被其他卡諾圈包圍,就有可能出現競爭冒險;實驗法:示波器觀測;
解決方法:1:加濾波電路,消除毛刺的影響;2:加選通信號,避開毛刺;3:增加冗余項消除邏輯冒險。
評論