文档库 最新最全的文档下载
当前位置:文档库 › FPGA试题

FPGA试题

FPGA试题
FPGA试题

【第一章】

1、FPGA芯片的发展主要体现在哪几个方面?未来的发展趋势是什么?

(1) 大容量、低电压、低功耗

(2) 系统级高密度

(3) FPGA和ASIC出现相互融合。

(4) 动态可重构

2、EDA技术的优势是什么?

缩短开发周期,有各类库的支持,简化逻辑设计,有利于设计文档的管理,能仿真测试,开发者有自主权,将所有开发环节纳入统一的自顶向下的设计中,有效的利用了计算机的自动设计能力。

3、EDA的设计流程包括哪几个环节?

①设计输入(原理图/HDL文本编辑)②综合③FPGA/CPLD 适配④时序仿真与功能仿真⑤FPGA/CPLD编程下载⑥FPGA/CPLD器件电路硬件检测。

4、硬件描述语言的种类有哪些?

VHDL 、Verilog HDL、SystemVerilog、System C 等

5、自顶向下设计方法的优点是什么?

过程大部分由计算机完成,可植性强,便于系统的优化和升级,以及对模型进行及时的修改,以改进系统或子系统的功能,更正设计错误,提高目标系统的工作速度,减小面积耗用,降低功耗和成本等。在EDA

技术应用中,自顶向下的设计方法,就是在整个设计流程中各设计环节逐步求精的过程。高效,高稳定性,省时省力,成本较低。

6、ip核可分为哪几类?

①软IP 、②固IP、③硬IP

7、ip在EDA技术的应用和发展中的意义是什么?

IP就是将某些功能固化,而当EDA设计也需要这些功能的时候,就可以直接将植入了此功能的IP拿过来直接用,而不用再重新设计。这样既可以提高效率又可以减少设计风险。IP核具有规范的接口协议,良好的可移植与可测试性,为系统开发提供了可靠的保证。

8、EDA的概念Electronic Design Automation,电子设计自动化。

简单一点EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言完成设计文件,然后由计算机自动地完成逻辑编译,化简,分割,综合,优化,布局,布线和仿真,直至对于特定目标芯片的适配编译,逻辑映射和编程下载等工作。

9、VHDL与verilog的优缺点的对比

Verilog代码简明扼要,操作灵活方便,使用简单,有效的简化了设计过程。Vhdl语句严谨,有很好的行为级描述能力和系统级描述能力。缺点是代码过于冗长,对数据类型匹配要求过

于严格,对版图级,管子级的描述几乎不支持。

【第二章】

1、可编程逻辑器件经历哪些发展过程?

PLD,PLA,PAL,GAL,EPLD,CPLD/FPGA

2、Altera公司的PLD芯片主要有哪些系列?

按照推出的先后顺序:Classic 、MAX、FLEX、APEX、ACEX、APEX 2、Cyclone/2/3/4、

MAX2、Stratix-1/2/3/4/6.

3、FPGA的配置方式有哪些?

PS(被动串行)、PPS(被动并行同步)、PPA(被动并行异步)、PSA(被动串行异步)、JTAG

模式、AS(主动串行)

【第三章】

1、verilog中标示符的命名规则是什么?

a.标识符

Verilog HDL中的标识符(Identifier)是由任意字母、数字、$符号和_(下划线)符号的组

成的字符序列,但标识符的第一个字符必须是字母或者下划线。此外,标识符是区分大小写

的。

转义表示符(Escaped Identifier)为在标识符中包含任何可打印字符提供了一条途径。转义

标识符\(反斜线)符号开头,以空白结尾(空白可以是空格、制表符或换行符)。在转义标

识符中,反斜线和结束空格并不是转义标识符的一部分。

Verilog HDL语言中定义了一系列保留标识符,叫做关键词,仅用于表示特定的含义。注意

只有小写的关键词才是保留字。

指导原则:不能用大小写混用字符串表示关键词,也不能把转义的关键词作为标识别符。

b.注释

在Verilog HDL中有2种形式的注释:

/*開始,直到*/

//第二种形式:到本行结束为止

c.格式

Verilog HDL是大小写敏感的,也就是说,字符相同而字体(大小写)不同的两个标识符是

不同的。此外,Verilog HDL语句的格式很自由,即语句结构既可以跨越多行编写,也可以

在一行内编写。空白(空白行、制表符和空格)没有特殊含义。

指导原则:行的长度必须小于132个字符。

2、端口模式有哪些?

1、INPUT

2、OUTPUT

3、INOUT双向端口

3、Verilog中有哪些基本的数据类型?

Reg,wire,parameters,integer

4、在时序模块中,同步复位和异步复位有什么区别?

所谓同步复位是指当复位信号发生变化时,并不立刻生效,只有当有效时钟沿采样到已变化的复位信号后,才对所有寄存器复位。同步复位的应用要点如下:指定同步复位时,always的敏感表中仅有时钟沿信号,仅仅当时钟沿采到同步复位的有效电平时,才会在时钟沿到达时刻进行复位操作。

所谓异步复位是指当复位信号有效沿到达时,无论时钟沿是否有效,都会立即对目标(如寄存器、RAM等)复位。异步复位的应用要点如下:指定异步复位时,只需always的敏感表中加入复位信号的有效沿即可,当复位信号有效沿到达时,无论时钟沿是否有效,复位都会立即发挥其功能。

5、verilog中的时钟过程表述的特点和规律

1.某信号被定义成边沿敏感时钟信号,则posedge A或negedge A放敏感表中,always结构块中不能再出现信号A了。

2.若B被定义成对应于时钟的电平敏感异步控制信号,则除posedge B或negedge B放敏感表中,always块中必须给出逻辑描述,即表述上是边沿敏感,性能上是电平敏感。

3.若某信号对于时钟同步,则不能出现在敏感信号表中。

4. 敏感表中边沿敏感信号和电平敏感信号不能同时出现。

【第五章】

1、简述阻塞式赋值和非阻塞式赋值的区别=,立即;<=过程结束

(1)同一个块程序中:阻塞赋值语句是顺序执行的;非阻塞赋值语句是并行执行的。

(2)在组合逻辑建模中应使用阻塞赋值;在时序逻辑建模中应使用非阻塞赋值。

(3)无论是阻塞赋值语句还是非阻塞赋值语句,若在该语句之前对其值进行应用,则

只能引用其上一个时钟周期赋于的旧值。

2、进程的特点是什么?

(1)进程结构内部的所有语句都是顺序执行的。

(2)多进程之间是并行执行的,并可访问结构体或实体中所定义的信号。

(3)进程的启动是由进程标识符always后的信号敏感表所标明的信号来触发的

(4)各进程之间的通信是由信号来传递的。

(5)进程语句的顺序性

(6)进程的启动与执行过程

当进程中定义的任一敏感型号发生更新(变化)时,由顺序语句定义的行为就要重复执行一次。当进程中最后一个语句执行完毕后,执行过程将自动返回到进程的起始端,以等待下一次敏感信号的变化。

3、verilog语言有哪几种描述风格?

RTL描述、行为描述、数据流描述、结构描述

【第六章】

1、列举5个宏功能模块

①算数组件:包括累加器、加法器、乘法器和LPM算数函数等。

②组合电路:包括多路选择器、比较器和LPM门函数等。

③I/O组件:包括时钟数据恢复(CDR)、锁相环(PLL)、双数据速率(DDR)、千兆位收发器块(GXB)、LVDS接收器和发送器、PLL重新配置和远程更新宏功能模块。④存储器编译器件:括FIFO Partitioner、RAM和ROM宏功能模块等。⑤存储组件:存储器、移位寄存器宏模块和LPM存储器函数等。

2、Quartus能够接受的两种RAM或ROM初始化文件的格式是? .mif .hex

3、知实验板上有一个10MHZ的有源晶振,现在要产生1MHZ的正弦波,请提出设计方案

4、宏功能模块和LPM函数的优点是什么?使用LPM功能单元极大地简化了设计输入。LPM函数与任何文本或图形设计输入工具都是兼容的,可以在GDF设计文件和HDL设计文件中任意调用LPM库元件。当编译器分析整个逻辑电路时,它会自动利用已有的宏功能逻辑(Megafunction Logic)删除多余的门和触发器,以确保最优的设计效率。

【第七章】

1、资源优化可以通过哪几种方式实现?资源共享、逻辑优化、串行化

2、速度优化可以通过哪几种方式实现?

流水线设计、寄存器配平、关键路径法、乒乓操作法

【第八章】

1、状态机的优点

①高效的顺序控制模型

②容易利用现成的EDA优化工具③性能稳定

④设计实现效率高⑤高速性能

2、一般的状态机结构包括哪几个部分?各自的功能是什么?①说明部分:说明部分用tpye语句定义新的数据类型,其元素通常用状态机的状态名来定

义。

②主控时序过程:所谓主控时序过程是指负责状态机运转和在时钟驱动下负责状态转换。③主控组合过程:也可称为状态译码过程,其任务是根据外部输入的控制信号,包括来自状态机外部的信号和来自状态机内部其他非主控的组合或时序进程的信号,以确定对外输出或对内部其他组合或时序进程输出信号的内容。

④辅助过程:辅助进程用于配合状态机工作的组合进程或时序进程。

3、状态机的状态编码有哪几种?各自的优缺点是什么?

①直接输出型编码:这种编码最典型的应用就是计数器。直接输出型编码方式就是所谓的用户自定义编码方式,它的优点是输出速度快,不太可能出现毛刺现象。缺点是程序的可读性差,用于状态译码的组合逻辑资源比其他以相同触发器数量触发器构成的状态机多,而且控制非法状态出现的容错技术要求比较高。

②顺序编码:优点是这种编码方式最为简单,在传统设计技术中最为常用,其使用的触发器最少,剩余的非法状态也最少,容错技术较为简

单。缺点也很多,如常常会占用状态转换译码组合逻辑较多的资源,特别是有的相邻状态或不相邻状态的状态转换时涉及多个触发器的同时状态转换,因此将耗费更多的转换时间,而且容易出现毛刺现象。③一位热码状态编码:一位热码状态编码虽然占用了较多的触发器,但其简单的编码方式大为简化了状态译码逻辑,提高了状态转换速度,增强了状态机的工作稳定性,这对于含有较多的时序逻辑资源、相对较少的组合逻辑资源的FPGA器件是最好的解决方案。

4、常用的去除毛刺的方法有哪几种?

①延时方式去毛刺②逻辑方式去毛刺③定时方式去毛刺

【第九章】

1、verilog中两种基本的数据类型net(wire)和reg的区别。

reg相当于存储单元,wire相当于物理连线。reg表示一定要有触发,没有输入的时候可以保持原来的值,但不直接实际的硬件电路对应。wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。

两者的区别是:寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。

在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以

声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。

对组合逻辑输出变量,可以直接用assign。即如果不指定为reg类型,那么就默认为1位wire类型,故无需指定1位wire类型的变量。当然专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以使wire/reg 类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg 型,若在过程块外赋值则为net型。

用关键词inout声明一个双向端口, inout端口不能声明为reg类型,只能是wire类型。默认信号是wire类型,reg类型要申明。这里所说的默认是指输出信号申明成output时为wire。如果是模块内部信号,必须申明成wire或者reg.。

对于always语句而言,赋值要申明成reg。连续赋值assign的时候要用wire。

2、简述任务和函数语句的区别

a.任务可以有input、output和inout,数量不限,函数只有input参数,且至少有一个input;

b.任务可以包含有时序控制(如延时等),函数不能

包含有任何延迟,仿真时间为0; c.任务可以用disable中断,函数不允许disable、wait语句;

d.任务可以通过I/O端口实现值传递,函数名即输出变量名,通过函数返回值;

e.任务可以调用其他任务和函数,函数只能调用其他函数,不能调用任务;

f.任务可以定义自己的仿真时间单位,函数只能与主模块共用一个仿真时间单位;

g.函数通过一个返回一个值来响应输入信号的值,任务却能支持多种目的,能计算多个结果值,结果值只能通过被调用的任务的输出端口输出或总线端口送出; 另外在函数中不能有wire型变量.

任务定义语法:task <任务名>;

<端口及数据类型声明语句> <语句1>...... endtask

函数定义的语法:

function <返回值类型或范围>(函数名) <端口说明语句> <变量类型说明语句> begin

<语句>...... end endfunction

【编程题】1、用VHDL实现某一芯片的功能

2、计数并译码显示

分频模块(以20M晶振为例,分出来1Hz信号)

module fenpin1(clk20M,clk1); input clk20M; output clk1; reg clk1; reg [25:0] q;

always@(posedge clk20M)

if(q>=19999999) begin q=0; clk1=1;endelse begin

q=q+1;clk1=0;end endmodule 计数模块:

module CNT10 (clk1,en,rst,dout,cout);input clk1,en,rst;output [3:0] dout;

output cout;reg[3:0]q;reg cout;

assign dout=q;

always @(posedge clk1 or negedge rst) begin

if(!rst) q=0; else if(en) begin

if(q<9) begin q=q+1;cout=0; endelse begin q=0;cout=1;end endend

endmodule

译码模块:

module decode(dout,din); input [3:0]din;

output reg[7:0]dout; always @(din) begincase(din)

4'b0000:dout=8'b11111101;4'b0001:dout=8'b01100001;4'b00 10:dout=8'b11011011;4'b0011:dout=8'b11110011;4'b0100:dout= 8'b01100111;4'b0101:dout=8'b10110111;4'b0110:dout=8'b10111 111;4'b0111:dout=8'b11100001;4'b1000:dout=8'b11111111;4'b10 01:dout=8'b11110111;default:dout=8'b000000001;endcase end endmodule

3、键盘扫描并显示键盘扫描频率:

module divkey(clk20M,clk1); input clk20M; output reg clk1; reg [17:0]q;

always @(posedge clk20M)begin

if(q==99999) begin q=0;clk1=1;end else begin

q=q+1;clk1=0;end end

endmodule

键盘扫描模块:

module keymo(clk1,hang,lie,result); input clk1; input [0:3]lie;

output reg[3:0]hang,result;

reg [0:1]q;

always@(posedge clk1)begin q=q+1;case(q)

0:hang=4'b0111; 1:hang=4'b1011;

2:hang=4'b1101; 3:hang=4'b1110;

default:hang=4'b1111;endcase

case({hang,lie})

8'b01110111:result=4'b0000;8'b01111011:result=4'b0001;8'b0 1111101:result=4'b0010;8'b01111110:result=4'b0011;8'b10110111 :result=4'b0100;8'b10111011:result=4'b0101;8'b10111101:result= 4'b0110;8'b10111110:result=4'b0111;8'b11010111:result=4'b1000; 8'b11011011:result=4'b1001;8'b11011101:result=4'ha;8'b1101111 0:result=4'hb;8'b11100111:result=4'hc;8'b11101011:result=4'hd;8' b11101101:result=4'he;8'b11101110:result=4'hf;endcase end

endmodule

译码模块(显示):module decode(dout,din); input [3:0]din;

output reg[0:7]dout; always @(din) begincase(din)

4'b0000:dout=8'b11111101;4'b0001:dout=8'b01100001;4'b00 10:dout=8'b11011011;4'b0011:dout=8'b11110011;4'b0100:dout= 8'b01100111;4'b0101:dout=8'b10110111;4'b0110:dout=8'b10111 111;4'b0111:dout=8'b11100001;4'b1000:dout=8'b11111111;4'b10 01:dout=8'b11110111;default:dout=8'b000000001;endcase end endmodule

相关文档