SOPC系统设计与实践知识点范文.docx
《SOPC系统设计与实践知识点范文.docx》由会员分享,可在线阅读,更多相关《SOPC系统设计与实践知识点范文.docx(14页珍藏版)》请在冰豆网上搜索。
SOPC系统设计与实践知识点范文
SOPC系统设计与实践知识点
一课程概述
1.FPGA:
FieldProgrammableGateArray
现场可编程门阵列,一类超大规模集成电路芯片,硬件范畴
2.SOC:
3.SOPC:
(P2)
SystemOnProgrammableChip
可编程片上系统,系统层级概念,既包括硬件系统也包括软件系统
4.HDL:
5.VHDL:
(P3)
VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage),意为超高速集成电路硬件描述语言。
6.简要论述这门课程的目的。
(P3)
掌握数字逻辑的基本理论、基本分析和设计方法,具备使用VHDL(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage)或VerilogHDL(HardwareDescriptionLanguage)语言进行数字逻辑设计的能力,熟悉在FPGA上构建嵌入式SOPC硬件系统的方法。
7.写出本课程所讲述的两部分主要内容。
(P5)
一个部分是基础的FPGA系统设计,另外一个部分是基于FPGA的嵌入式SOPC系统设计。
8.写出本课程主要讲解的两个软件和一个硬件开发系统的名称(P5)
QuartusII,NiosII和DE2硬件开发系统
9.论述本课程内容的三个层次(P6~7)
⏹基于FPGA芯片的数字逻辑设计
掌握现代EDA技术及其基本概念,熟悉基本设计方法和设计语言,能够实现简单的数字逻辑电路,掌握FPGA芯片的基本结构和功能。
⏹基于FPGA芯片的数字综合系统设计
在第一层次的基础上,利用专有开发软件搭建较为复杂的FPGA数字综合系统,掌握
FPGA芯片更为复杂的功能
⏹基于FPGA的嵌入式SOPC系统设计
在前两个层次基础上,搭建基于FPGA芯片的嵌入式SOPC系统,涉及到使用专有软件的系统原理设计、系统仿真和调试、程序下载、硬件调试等环节;该部分是本课程的学习重点。
二专业动态
1.论述下国家大力发展集成电路的原因?
(P5)
•社会发展的需要:
集成电路是最能体现知识经济特征的典型产品之一。
•经济发展的需要:
现代经济发展的数据表明,GDP每增长100元,需要10元左右电子工业产值和1~2元集成电路产值的支持。
2010年,我国集成电路产业销售额1424亿元,同比增长28.4%,设计业销售384亿,同比增长41.9%。
2010年集成电路市场增速达29.5%,实现销售额7349.5亿元。
目前发达国家信息产业产值已占国民经济总产值的40%~60%,国民经济总产值增长部分的65%与集成电路有关。
•国家安全的需要:
集成电路是信息化的基础,芯片的供应和芯片的安全性问题。
2.列出7个国家级集成电路设计产业化基地。
(P9)
北京、上海、杭州、无锡、西安、成都、深圳
3.我国集成电路目前发展遇到的障碍。
(P14)
资金、技术、人才
4.集成电路技术演进路线。
(P20)
一是芯片集成度不断提高。
集成电路技术未来一段时间仍将按摩尔定律继续前进,以CPU为代表的芯片集成度和处理能力仍会继续增长,半导体存储器存储容量持续加大。
目前32纳米工艺已量产,2012年导入22纳米,2014年导入18纳米。
二是功能多样化趋势明显。
集成电路产品以价值优先和功能多样化为目标,更加注重集成运算和存储之外的新功能,集成了射频通信、功率控制、无源元件和传感器等功能的产品越来越多,系统级封装(SIP)等先进封装技术应用更加广泛。
5.写出系统集成芯片技术的三个方面的技术。
(P39)
6.写出SOC的三种嵌入式核并指出灵活性最高的是哪类核。
(P43~44)
•软核是用可综合的RTL描述或者通用库元件的网表形式表示的可复用模块。
用户须负责实际的实现和版图。
(最灵敏)
•固核是指在结构和拓扑针对性能和面积通过版图规划,甚至可用某种工艺技术进行优化的可复用模块。
它们以综合好的代码或通过库元件的网表形式存在。
•硬核是指在性能、功率和面积上经过优化并映射到特定工艺技术的可复用模块。
它们以完整的布局布线的网表和诸如GDSII(一种版图数据文件格式)格式的固定版图形式存在。
7.列出四种代表性的HDL语言。
(P65~68)
1.VHDL
2.VerilogHDL
3.Superlog
4.SystemC
三VHDL语言
1.论述VHDL的特点。
(P4)
1).支持从系统级(特大型)至门级电路的多层次描述;支持结构描述、行为描述、数据流描述及混合描述。
2).支持自底向上(bottom-up)及自顶向下(top-down)的设计;支持模块化、层次化设计;支持函数、过程及自定义程序包和库,可设计共享。
3). 支持组合逻辑电路和时序电路;支持延迟功能。
4). 使用类属语句进行参数化设计。
5). 支持断言语句,报告系统信息和错误信息。
6). 数据类型丰富、安全性好,既有预定义数据类型,又可自定义数据类型。
2.写出利用VHDL描述电路系统的5个定义区及其相应的功能,并且列出第4个定义区中详细定义部分。
(P5)
1.USE定义区定义元件库
2.PACKAGE定义区定义使用哪些自定义库
3.ENTITY定义区定义电路实体的外观:
I/O接口规格
4.ARCHITECTURE定义区描述电路的内部功能,说明电路执行什么动作或功能Component定义区信号定义BehaviorProcess描述DataFlow描述Structure描述
5.CONFIGURATION定义区决定哪一个architecture被使用
(Project)
3.利用VHDL设计两位二进制数比较器。
a和b分别代表两个二进制数;equ是比较器的输出端口。
比较器的逻辑功能是:
若a=b则输出equ为1,否则equ为0。
(P8)
4.在entity的定义中,如果定义成端口表(ports),端口的四种模式分别是什么?
(P12)
实体说明中的每一个I/O信号称为端口。
有四种端口模式:
1)输入(in)用于时钟输入及各种控制输入,如置位,复位,使能及置数等。
2)输出(out)通常用作终端输出。
3)缓冲(buffer)允许数据流出端口及内部反馈。
允许内部引用该端口的信号。
4)双向(inout)允许数据流入或流出实体,也用于内部反馈。
5.VHDL语言的三种构成要素分别是什么?
命名的规则是怎样的?
(P16)
英文字母、数字和下划线
1)首字符必须是英文字母;
2)末字符不能是下划线;并且不允许出现两个连续的下划线;
3)大、小写英文字母等效,可混合输入;
4)VHDL语言的关键字不能作标识符。
6.说明下面几个非法标示符的错误出在哪里?
(P17)
(1)signal,
(2)old_state_,(3)New#type,(4)8home
signal--保留字不能用作基本标识符
old_state_--最后字符不能是下划线;
New#type--有非法字符#
8home--不能用数字开头
7.定义一个实数型的常数量Us并赋值12.0。
(P18)
constantUs:
real:
=12.0;
8.定义一个整数型的变量j并赋值2.(P20)
variablej:
integer:
=2;
9.论述信号和变量的不同。
(P21)
10.定义一个四位二进制矢量信号量bus。
(P22)
signalwidth:
integer;
signalbus:
bit_vector(3to0);
signalz:
bit;
z<=‘1’;
width<=12;
bus<=“1010”;
11.列出信号和变量的赋值符号。
(P22)
信号赋值号<=
常量、变量赋值号:
=
12.在数据类型中,标量类型包括哪几种?
复合类型包括哪几种?
(P23)
标量类型的数据对象在某一时刻只对应一个值。
整数类型、浮点类型、物理类型和枚举类型
复合类型的数据对象在某时刻可持多个值。
是单值类型元素的集合。
复合类型包括数组类型和记录类型
13.列出VHDL中预定义的物理时间类型的几种时间等级,并指出其中最小的时间单位和最常用的时间单位。
(P27)
fs;--飞秒,相当于10-15秒,VHDL中最小的时间单位
ps=1000fs;--皮秒,相当于10-12秒
ns=1000ps;--纳秒,相当于10-9秒
us=1000ns;--微秒,相当于10-6秒
ms=1000us;--毫秒,相当于10-3秒
sec=1000ms;--秒最长用?
min=60sec;--分
hr=60min;--时
endunits;
14.给出VHDL中数组类型的定义,它包括哪两种类型?
(P28)
typebusisarray(3downto0)ofstd_logic;
typesetisarray(0to7)ofinteger
15.利用信号类属性中的’event属性分别定义“检测时钟在上升沿有效”和“检测时钟在下降沿有效”。
(P34)
信号类属性有多种类型,其中最为常用的是’event属性。
例如:
信号clk(std_logic类型)的’event属性列写如下:
clk’eventandclk=’1’--1检测时钟在上升沿有效
clk’eventandclk=’0’--2检测时钟在下降沿有效
16.列出VHDL中的几种并行语句类型。
(P36)
进程语句
并行信号赋值语句
元件例化语句
块语句
断言语句
17.利用带敏感表的结构体进程实现两位二进制等值比较器。
(P38)
architecturebehave_processofecomp2is
begin
eqcome:
process(a,b)--以敏感表(a,b)代替显式wait语句
begin
if(a=b)thenequ<=’1’;
elseequ<=‘0’;
endif;
endprocesseqcome;
endbehave_process;
18.利用带wait语句的结构体进程实现两位二进制等值比较器。
(P39)
与其等效的使用显式wait语句的进程如下:
architecturebehave_processofecomp2is
begin
process--无敏感信号表
begin
if(a=b)thenequ<=’1’;
elseequ<=‘0’;
endif;
waitona,b;--本进程无敏感表则必须有显式wait语句
endprocess;
endbehave_process;
19.按照下图结构,利用元件例化语句设计两位二进制等值比较器。
(P43~46)
libraryieee;
useieee.std_logic_1164.all;
entityecomp2is--两位等值比较器,第一层实体
port(a,b:
instd_logic_vector(1downto0);
equ:
outstd_logic);
endecomp2;
architecturestructofecomp2is
signalx:
std_logic_vector(1downto0);
componentxnor2--对元件xnor2进行元件说明
port(i1,i2:
instd_logic_vector(1downto0);
o1:
outstd_logic);
endcomponent;
componentand2--对元件and2进行元件说明
port(i1,i2:
instd_logic_vector(1downto0);
o1:
outstd_logic);
endcomponent;
begin--结构体描述使用元件例化语句
u0:
xnor2portmap(a(0),b(0),x(0));--位置关联方式
u1:
xnor2portmap(i1=>a
(1),i2=>b
(1),o1=>x
(1));--名称关联方式
u2:
and2portmap(x(0),x
(1),equ);
endstruct;
useieee.std_logic_1164.all;--须再次打开std_logic_1164
entityxnor2is--二端同或门模块,第二层实体
port(i1,i2:
instd_logic_vector(1downto0);
o1:
outstd_logic);
endxnor2;
architecturexnor2ofxnor2is
begin
o1<=i1xnori2;
endxnor2;
useieee.std_logic_1164.all;--须再次打开std_logic_1164
entityand2is--二端与门模块,第二层实体
port(i1,i2:
instd_logic_vector(1downto0);
o1:
outstd_logic);
endand2;
architectureand2ofand2is
begin
o1<=i1andi2;
endand2;
20.列出VHDL中的几种顺序语句类型。
(P49)
变量赋值语句
信号赋值语句
if语句case语句loop语句
next语句exit语句null语句
wait语句report语句
21.利用变量赋值语句的性质判断下面两个进程最终的a和b的值。
(P50~51)
--第一个进程
signala:
integer:
=5;
signalb:
integer:
=10;
process(a,b)
begin
a<=b;
b<=a;
endprocess;
--进程执行后a=10,b=5
--第二个进程
process
variablea:
integer:
=5;
variableb:
integer:
=10;
begin
a:
=b;
b:
=a;
endprocess;
--进程执行后a=10,b=10
22.利用case语句实现4选1多路选择器进程。
(P55)
mux_1:
process(a,b,c,d,s)
begin
casesis
when“00”=>x<=a;
when“01”=>x<=b;
when“10”=>x<=c;
whenothers=>x<=d;
endcase;
endprocessmux_1;
23.写出architecture的四种常用描述方式。
(P64)
行为描述
描述中采用进程语句。
数据流描述
描述中采用除进程外的其他并发语句。
结构化描述
用来调用低层次设计模块,支持大型设计逻辑分解。
混合描述
大型设计中,常采用行为描述与结构描述相结合的混合描述。
24.程序包由哪两个部分构成?
两个部分的对外特性区别是怎样的?
在程序中如何使用程序包?
(P65)
程序包说明和程序包体
只有在程序包说明部分说明的标识符在程序包之外可见,在包体部分中说明的标识符对其他设计不可见;使用之前必须先用use语句将程序包打开再进行调用。
25.设计4—2线优先编码器.(P75~76)
libraryieee;
useieee.std_logic_1164.all;
entityencoderis
port(in0,in1,in2,in3:
instd_logic;
out0,out1:
outstd_logic);
end;
architecturebehaveofencoderis
signalou:
std_logic_vector(1downto0);
begin
ou<="11"whenin3='1'else
"10"whenin2='1'else
"01"whenin1='1'else
"00"whenin0='1'else
"00";
out1<=ou
(1);out0<=ou(0);
endbehave;
26.设计一位十进制编码器。
(P77~78)
libraryieee;
useieee.std_logic_1164.all;
entitydecodeis
port(in0,in1,in2,in3,in4,in5,in6,in7,in8,in9:
in
std_logic;
out_decode:
outstd_logic_vector(3downto0));
enddecode;
architecturebehaveofdecodeis
signals_vec:
std_logic_vector(9downto0);
begin
s_vec<=(in9,in8,in7,in6,in5,in4,in3,in2,in1,in0);
withs_vecselect
out_decode<="1001"when"",--数字9
"1000"when"",--数字8
"0111"when"",--数字7
"0110"when"",--数字6
"0101"when"",--数字5
"0100"when"",--数字4
"0011"when"",--数字3
"0010"when"",--数字2
"0001"when"",--数字1
"0000"whenothers;--数字0
endbehave;
27.设计JK触发器。
(P81~82)
libraryieee;
useieee.std_logic_1164.all;
entityjkffis
port(clk,j,k:
instd_logic;
q,notq:
outstd_logic);
endjkff;
architecturebehaveofjkffis
signalq_temp:
std_logic;
signaljk:
std_logic_vector(1downto0);
begin
jk<=j&k;--注意此处连接符的使用
process(clk,jk)
begin
if(clk'eventandclk='1')then
if(jk="01")thenq_temp<='0';
elsif(jk="10")thenq_temp<='1';
elsif(jk="11")thenq_temp<=notq_temp;
endif;
endif;
q<=q_temp;notq<=notq_temp;
endprocess;
endbehave;
28.设计四位双向移位寄存器。
(P83~84)
libraryieee;
useieee.std_logic_1164.all;
entityshiftis
port(clk,rst,load,left_right:
instd_logic;
--时钟、复位、置数、移位控制信号
din:
instd_logic_vector(3downto0);
--预置数输入信号
dout:
inoutstd_logic_vector(3downto0));
--输出信号
endshift;
architecturebehaveofshiftis
constantlen:
integer:
=3;
begin
process(clk,rst,load,left_right,din)
begin
ifrst=’1’thendout<=”0000”;--异步复位
elsifrising_edge(clk)then
if(load='1')thendout<=din;--同步置数
elsif(left_right='0')then--循环右移
dout<=dout(0)&dout(lendownto1);
elsif(left_right='1')then--循环左移
dout<=dout(len-1downto0)&dout(3);
endif;
endif;
endprocess;
endbehave;