分享

FPGA 面试 笔试 (二)

 zhangquanling 2011-11-06

16FPGA设计中对时钟的使用?(例如分频等)

       FPGA芯片有固定的时钟路由,这些路由能有减少时钟抖动和偏差。需要对时钟进行相位移动或变频的时候,一般不允许对时钟进行逻辑操作,这样不仅会增加时钟的偏差和抖动,还会使时钟带上毛刺。一般的处理方法是采用FPGA芯片自带的时钟管理器如PLL,DLLDCM,或者把逻辑转换到触发器的D输入(这些也是对时钟逻辑操作的替代方案)。

 

17FPGA设计中如何实现同步时序电路的延时?

       首先说说异步电路的延时实现:异步电路一半是通过加buffer、两级与非门等(我还没用过所以也不是很清楚),但这是不适合同步电路实现延时的。在同步电路中,对于比较大的和特殊要求的延时,一半通过高速时钟产生计数器,通过计数器来控制延时;对于比较小的延时,可以通过触发器打一拍,不过这样只能延迟一个时钟周期。

 

18FPGA中可以综合实现为RAM/ROM/CAM的三种资源及其注意事项?

       三种资源:block ram;触发器(FF),查找表(LUT);

注意事项:1:在生成RAM等存储单元时,应该首选block ram 资源;其原因有二:第一:使用block ram等资源,可以节约更多的FF4-LUT等底层可编程单元。使用block ram可以说是不用白不用,是最大程度发挥器件效能,节约成本的一种体现;第二:block ram是一种可以配置的硬件结构,其可靠性和速度与用LUTregister构建的存储器更有优势。2:弄清FPGA的硬件结构,合理使用block ram资源;3:分析block ram容量,高效使用block ram资源;4:分布式ram资源(distribute ram

 

19Xilinx中与全局时钟资源和DLL相关的硬件原语:

       常用的与全局时钟资源相关的Xilinx器件原语包括:IBUFG,IBUFGDS,BUFG,BUFGP,BUFGCE,BUFGMUX,BUFGDLL,DCM等。关于各个器件原语的解释可以参考《FPGA设计指导准则》p50部分。

 

20HDL语言的层次概念?

       HDL语言是分层次的、类型的,最常用的层次概念有系统与标准级、功能模块级,行为级,寄存器传输级和门级。

 

21:查找表的原理与结构?

       查找表(look-up-table)简称为LUTLUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1RAM。 当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可

 

22ic设计前端到后端的流程和eda工具?

       设计前端也称逻辑设计,后端设计也称物理设计,两者并没有严格的界限,一般涉及到与工艺有关的设计就是后端设计。

       1:规格制定:客户向芯片设计公司提出设计要求。

       2:详细设计:芯片设计公司(Fabless)根据客户提出的规格要求,拿出设计解决方案和具体实现架构,划分模块功能。目前架构的验证一般基于systemC语言,对价后模型的仿真可以使用systemC的仿真工具。例如:CoCentricVisual Elite等。

       3HDL编码:设计输入工具:ultra visual VHDL

       4:仿真验证:modelsim

       5:逻辑综合:synplify

       6:静态时序分析:synopsysPrime Time

       7:形式验证:SynopsysFormality.

 

23:寄生效应在ic设计中怎样加以克服和利用(这是我的理解,原题好像是说,ic设计过

程中将寄生效应的怎样反馈影响设计师的设计方案)?

 

24:用filp-floplogic-gate设计一个1位加法器,输入carryincurrent-stage,输出

carryoutnext-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.1modelsim,synplify

(不知道为什么上面的状态机设计在synplifyRTL view中没能看到状态机流程图,所以状态转移图就没画)。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多