当前位置:   article > 正文

基于vivado(语言Verilog)的FPGA学习(4)——FPGA选择题总结(针对华为逻辑岗实习笔试)_华为逻辑岗笔试题

华为逻辑岗笔试题

基于vivado(语言Verilog)的FPGA学习(4)——FPGA选择题总结


1. 消除险象

办法一:修改逻辑表达式避免以上情况【需要逻辑分析能力】

办法二:采样时序逻辑,仅在时钟边沿采样【推荐,事实上也最常用】

办法三:在芯片外部并联电容消除窄脉冲【物理方法】

办法四:由于电容会降低速度,所以在高速电路中,可以利用选通的方式消除险象

2. 建立时间和保持时间

建立时间Tsu:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的时间。
保持时间Th:触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的时间。
在这里插入图片描述
在这里插入图片描述
上图是第一张图的考虑延时的时序图
CLK经过第一个触发器到第二个触发器的延时T_delay1=(第一个时钟延时时间Tlaunch+触发器内部延时Tck2q+第一个触发器到第二个触发器经过的组合逻辑电路的延时Tdp)
CLK直接到达第二个触发器的延时 T_delay2,图中的Tcapture
则时钟周期为T_CLK时,
建立时间=T_delay2+T_CLK-T_delay1
保持时间=T_delay1-T_delay2

在一个FPGA项目中,既有建立时间异常(setup violation),也有保持时间异常(hold violation),应该如何修改设计以使其正常工作?

  1. 对于建立时间异常:
    办法一:T_CLK时钟周期:增加T_CLK,也就是降频:
    这一点比较容易理解,就是增加“脉冲宽度”,增大T_CLK

办法二:T_dp组合逻辑延时(减小T_dp):优化组合逻辑延时,具体包括:
a. 增加一个中间触发器来切割Timing Path,分割组合逻辑延时(流水线结构)
b. 对于有较大负载的节点可以考虑插Buffer、逻辑复制的方法来优化扇出,减少关键路径上的负载(插Buffer,逻辑复制)
c. 小Cell换成大Cell,更换更大驱动的Cell,增强驱动能力
d. 更换SVT/LVT(速度快于HVT的电压阈值的单元库)的Cell

办法三:增大T_delay2,但是相应的会减小保持时间

办法四:缩短触发器内部延时Tck2q:
换成更快的时序逻辑单元,花钱!

  1. 对于保持时间异常:保持时间=T_delay1-T_delay2
    办法一: 增加T_dp组合逻辑延时,(组合逻辑深度的增加会增加芯片的面积、布线资源、功耗,可能产生在慢速工艺库条件下建立时间违例)

办法二: 减小T_delay2,但是相应的会增大建立时间

可以看出,保持时间和建立时间有一些矛盾

3.ISE

ISE的全称为Integrated Software Environment,即“集成软件环境”,是Xilinx公司的硬件设计工具。一般用的都是vivado,看了一下ISE的仿真、综合和实现,感觉和vivado很相似。

4.DMA

DMA(Direct Memory Access,直接存储器访问)是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU对于其他的工作来说就无法使用。
(1) PS通过AXI-lite向AXI DMA发送指令,

(2) AXI DMA通过HP通路和DDR交换数据,

(3) PL通过AXI-S读写DMA的数据。
PS和PL数据交互网站

5.仿真器

根据执行仿真的不同方法,Verilog仿真器可以分为以下3种类型:
(1) 解释型的仿真器。
解释型仿真器读入Verilog代码,在计算机的内存中生成数据结构,然后解释性地运行仿真,每次运行仿真时,进行一次编译,编译通常很快就可以完成。Cadence公司的Verilog-XL仿真器就是一种解释型的仿真器。
(2) 编译型的仿真器。
编译型的仿真器读入Verilog代码,然后把它转换为相应的C代码(或其他编程语言的代码)。接下来,用标准C编译器将该C代码编译成二进制可执行代码。执行这个二进制代码,就可以执行仿真器。编译型的仿真器的编译时间通常比较长,但其执行速度一般来说比解释型的仿真器快。Synopsys公司的VCS仿真器就是一种编译型的仿真器。
(3) 本地编译型的仿真器。
本地编译型的仿真器读入Verilog代码,然后把它直接转换成能在指定的机器平台上运行的二进制代码,机器的平台不同,编译的优化和调整过程也不同。这就是说,能在Sun工作站上运行的本地编译仿真器,不能在HP工作站上运行,反之亦然。Cadence公司的Verilog-NC仿真器就是这种本地编译型的仿真器。

6.标识符

标识符( identifier)用于定义模块名、端口名、信号名等。

Verilog HDL 中的标识符( identifier)可以是任意一组字母、数字、 $符号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。

HDL知识点,WAIT语句有4种格式:WAIT,WAIT ON,WAIT UNTIL,WAIT FOR

在这里插入图片描述

7.可综合电路的语句

时间变量time和实数变量real不能被综合
并行块fork···join不可综合,并行块的语义在电路中不能被转化。

8.缺省值

寄存器未做赋值操作的话,其值是未知,在Verilog中用x表示;
线网类型可以理解为导线,其值是高阻,在Verilog中用z表示。

9.系统设计优化

分为资源优化(面积优化)和速度优化
在这里插入图片描述
1, 资源共享就是一些元器件或者模块可以复用
2, 逻辑优化就是将逻辑简单化,多用parameter,多通过真值表直接写最简式(尽量少用逻辑判断)。
3,串行化牺牲速度,将并行(多器件快速度)变成串行

1,流水线设计就是避免两个触发器之间的逻辑延时过大,在期间穿插一些触发器。使触发器和触发器之间的延时减少。
2,寄存器配平基于流水线设计的改善:
在这里插入图片描述
3,关键路径法中的关键路径是并行运算中延时最大的,所以关键。优化该路径可以总体提高速度
4,乒乓操作法:器件double,切换配合运行,用资源换速度
5,加法数法:A+B+C,首先实现A+B,将其和锁存一个时钟周期再与C相加。

10.带宽计算

参考的题目是:
在这里插入图片描述
理论带宽 = 内存核心频率 × 内存总线位数 × 倍增系数 / 位字转换 = (1066/8) * 32 * 8 / 8
应用端带宽=应用端时钟 × 数据位宽 / 位字转换 = 200 * 128 / 8 = 3200 MB/s

DDR/DDR2/DDR3的区别:

  1. DDR采用时钟脉冲上升、下降沿各传一次数据,1个时钟信号可以传输2倍于SDRAM的数据,所以又称为双倍速率SDRAM。它的倍增系数就是2。
  2. DDR2仍然采用时钟脉冲上升、下降支各传一次数据的技术(不是传2次),但是一次预读4bit数据,是DDR一次预读2bit的2倍,因此,它的倍增系数是2X2=4。
  3. DDR3作为DDR2的升级版,最重要的改变是一次预读8bit,是DDR2的2倍,DDR的4倍,所以,它的倍增系数是2X2X2=8。

内存的频率指标

  1.  核心频率:即为内存Cell阵列(Memory Cell Array)的工作频率,它是内存的真实运行频率;
    
    • 1
  2.  时钟频率:即I/O Buffer(输入/输出缓存)的传输频率;
    
    • 1
  3.  有效数据:传输频率则是指数据传送的频率。
    
    • 1

DDR3-1066蕴含的信息
DDR3代表内存一次从存储单元取8bit数据。
1066指有效数据传输频率,除以8才是核心频率。

DDR在FPGA中如何运用?主要调用了MIG IP核
在这里插入图片描述
在这里插入图片描述

11.状态机

在这里插入图片描述
在这里插入图片描述

12.VHDL

一个完整的VHDL程序包含结构体,实体,配置,程序包,库。
WAIT语句有4种格式:WAIT,WAIT ON,WAIT UNTIL,WAIT FOR

13. 模电知识

  1. 过深的负反馈又可能引起放大器不能正常工作而导致自激。为了消除自激,通常会采用滞后补偿的方法。
  2. 稳压管:二极管一般在正向电压下工作,稳压管则在反向击穿状态下工作。在一定电压以内,无电流通过,达到一定电压,则达到击穿区,有很大的反向电流通过。可用于过压保护电路
  3. 二极管:单向导电性
  4. 三极管:看过一个小红书,写三极管可以看作水龙头,找了一些类比:
    在这里插入图片描述
    在这里插入图片描述
  5. CMOS管:反相器(2个),2输入与非门(4个),3输入与非门(6个)
  6. TTL:5V CMOS:12V

14. FPGA加载方式

题目给的是被动并行,主动串行和JTAG加载,

但有的会说JTAG是被动配置一种。
所以说主动就是以FPGA主动发起配置,被动就是上位机发起配置,FPGA被动接收数据进行重配置

JTAG:标准的JTAG接口是4线:TMS、TCK、TDI、TDO

15. 独热码

独热码值每个码元值只有一位是’1’,其他位都是’0’

独热码适合写条件复杂但状态少的状态机
格雷码适合写条件简单但状态多的状态机

16.逻辑电平

TTL和CMOS是数字电路中两种常见的逻辑电平,LVTTL和LVCMOS是两者低电平版本。
TTL是流控器件,输入电阻小,TTL电平器件速度快,驱动能力大,但功耗大。
CMOS是MOS管逻辑,为压控器件,且输入电阻极大,CMOS电平器件速度慢,驱动能力不足TTL,但功耗小。
常用逻辑电平:12V, 5V, 3.3V

差分逻辑电平:我的理解是用逻辑电平时,想要表达某段信号,电压方差比较大,会导致有许多斜率较大的下降区域和上升区域,于是用差分电平来表示信号大小,可以有效的减小电压起伏。
差分逻辑电平包括LVDS、xECL、CML、HCSL/LPHCSL、TMDS等。

17.行波时钟和使能时钟

每次看到这个都要打开网址
下面自己总结一下:
行波时钟就是一般我会用到的分配方法,到计数到n,新产生的时钟翻转一次,就完成了n分频。

module top( clk,clk_out);
input  clk;
output reg clk_out;

reg [2:0] cnt;
always@(posedge clk)
begin
  if(cnt==3'd4)
    begin
      cnt<=3'd0;
      clk_out<=~clk_out;
    end
  else cnt<=3'd1+cnt;
end  
endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

但是行波时钟的问题就是以此产生的时钟可能衍生出种种延时不同的时钟。
解决方法就是用使能时钟,用计数器进行计数,计数到n1,n2…nx,标记一个使能en(x),这个使能可以产生其他的时钟,这样一来,其他的时钟便都是有这个最原始的clk衍生出来的(理解来看就是大家都是二代传人,没有三代以上,所以延时小)。

module top( clk,dataout);
input clk;
output  reg [3:0]dataout;

wire en;
reg [2:0] cnt;
always@(posedge clk)
begin
  if(cnt==3'd4)
  begin
    cnt<=3'd0;
  end
  else cnt<=3'd1+cnt;
end
assign en=(cnt==3'd4);

always@(posedge clk )
begin
  if(en)
  begin 
  ........
  end
end
endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/441027
推荐阅读
相关标签
  

闽ICP备14008679号