EDA复习11.docx
- 文档编号:24431285
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:23
- 大小:99.11KB
EDA复习11.docx
《EDA复习11.docx》由会员分享,可在线阅读,更多相关《EDA复习11.docx(23页珍藏版)》请在冰豆网上搜索。
EDA复习11
1、HDL主要有两种:
Verilog和VHDL
2、为什么要使用硬件描述语言进行数字系统设计?
电路的逻辑功能容易理解;
便于计算机对逻辑进行分析处理;
把逻辑设计与具体电路的实现分成两个独立的阶段来操作;
逻辑设计与实现的工艺无关;
逻辑设计的资源积累可以重复利用;
可以由多人共同更好更快地设计非常复杂的逻辑电路(几十万门以上的逻辑系统)。
3、硬件描述语言HDL(HardwareDescriptionLanguage)是硬件设计人员和电子设计自动化(EDA)工具之间的接口,其主要目的是用来编写设计文件,建立电子系统行为级的仿真模型。
4、硬件描述语言
具有特殊结构能够对硬件逻辑电路的功能进行描述的一种高级编程语言。
这种特殊结构能够:
描述电路的连接
描述电路的功能
在不同抽象级上描述电路
描述电路的时序
表达具有并行性
5、自顶向下Top-down设计方法:
Top-down设计方法的中心思想是:
系统层是一个包含输入输出的顶层模块,并用系统级、行为描述加以表达,同时完成整个系统的模拟和性能分析;整个系统进一步由各个功能模块组成,每个模块由更细化的行为描述加以表达;由EDA综合工具完成到工艺库的映射。
6、基于FPGA的层次化设计方法
在FPGA设计中往往采用层次化的设计方法,分模块、分层次地进行设计描述。
描述系统总功能的设计为顶层设计,描述系统中较小单元的设计为底层设计。
整个设计过程可理解为从硬件的顶层抽象描述向最底层结构描述的一系列转换过程,直到最后得到可实现的硬件单元描述为止。
7、EDA技术的发展趋势
①使电子设计成果以自主知识产权的方式得以明确表达和确认成为可能
②使仿真和设计两方面支持标准硬件描述语言、功能强大的EDA软件不断推出
③电子技术全方位纳入EDA领域
④EDA使得电子领域各学科的界限更加模糊,更加互为包容
⑤更大规模的FPGA和CPLD(complexprogrammablelogicdevice)器件的不断推出。
⑥基于EDA工具的ASIC设计标准单元已涵盖大规模电子系统及IP核模块。
⑦软件IP核在电子行业的产业领域、技术领域和设计应用领域得到进一步确认
⑧单片电子系统SoC(systemonacircuit)高效、低成本设计技术的成熟
8、EDA技术的特征
采用硬件描述语言HDL(HardwareDescriptionLanguage)作为设计输入,具有系统级仿真和综合能力。
它是一种描述硬件电路的功能、信号连接关系及时序关系的语言。
利用EDA工具,逐层进行仿真验证,把其中的需要变为实际电路的模块组合,经过自动综合转换成门级电路网表,然后,用专用集成电路ASIC或现场可编程门阵列FPGA自动布线工具,把网表转化为要实现的具体电路布线结构。
目前EDA设计非常成熟,设计过程的各个阶段(系统级设计—行为级综合—功能模拟—逻辑综合—时序模拟-版图综合—后仿真等都有很多优秀的软件工具支撑。
9、HDL的综合器需要的三个输入是:
HDL程序、工艺库、约束。
10、HDL综合
自然语言综合:
从自然语言转换到VerilogHDL语言算法表述。
行为综合:
从算法表述转换到寄存器传输级(RegisterTransportLevel,RTL)表述。
逻辑综合:
从RTL级表述转换到逻辑门(包括触发器)的表述。
版图综合或结构综合:
从逻辑门表示转换到版图级表述(ASIC设计),或转换到FPGA的配置网表文件。
11、EDA技术实现目标a.可编程逻辑器件b.半定制或全定制ASICc.混合ASIC.
12、软核、固核和硬核的概念
A、把在某一种现场可编程门阵列(FPGA)器件上实现的,经验证是正确的总门数在5000门以上电路结构编码文件,称之为“固核”
B、把在某一种专用半导体集成电路工艺的(ASIC)器件上实现的经验证是正确的总门数在5000门以上的电路结构掩膜,称之为“硬核”。
C、我们把功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的VerilogHDL模型称之为“软核”(Softcore),而把由软核构成的器件成为虚拟器件。
利用软核和虚拟器件的可重复利用的特性就可大大缩短设计周期,加快了复杂电路的设计。
13、VerilogHDL的设计流程具体模块的设计编译和仿真的过程
模块设计流程主要由两大主要功能部分组成:
1)设计开发:
即从编写设计文件->综合到布局布线->投片生成这样一系列步骤。
2)设计验证:
也就是进行各种仿真的一系列步骤,如果在仿真过程中发现问题就返回设计输入进行修改。
14、Verilog模型可以是实际电路的不同级别的抽象。
这些抽象的级别包括:
系统级(system):
用高级语言结构实现设计模块的外部性能的模型。
算法级(algorithm):
用高级语言结构实现设计算法的模型。
RTL级(RegisterTransferLevel):
描述数据在寄存器之间流动和如何处理、控制这些数据流动的模型。
以上三种都属于行为描述,只有RTL级才与逻辑电路有明确的对应关系。
门级(gate-level):
描述逻辑门以及逻辑门之间的连接的模型。
开关级(switch-level):
描述器件中三极管和储存节点以及它们之间连接的模型。
15、通过上面的例子可以看到:
(1)VerilogHDL程序是由模块构成的。
每个模块的内容都是位于module和endmodule两个语句之间。
每个模块实现特定的功能。
(2)模块是可以进行层次嵌套的。
(3)每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行描述。
(4)VerilogHDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分写多行。
(5)除了endmodule语句外,每个语句和数据定义的最后必须有分号。
(6)可以用/*.....*/和//...对VerilogHDL程序的任何部分作注释。
一个好的,有使用价值的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。
16、模块的结构:
Verilog的基本设计单元是“模块”(block)。
一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能,即定义输入是如何影响输出的。
17、模块的定义的一般格式:
module模块名(端口名1,端口名2,端口名3,…….);
端口类型说明(input,output,inout);
参数定义(可选);
数据类型定义(wire,reg等);
实例化低层模块和基本门级元件;
连续赋值语句(assign);
过程块结构(initial和always)
行为描述语句;
Endmodule
18、Verilog模块的结构由在module和endmodule关键词之间的四个主要部分组成:
端口定义,I/O说明,内部信号声明,功能定义。
19、模块的端口定义
模块的端口声明了模块的输入输出口。
其格式如下:
module模块名(口1,口2,口3,口4,………);
20、模块的内容包括I/O说明、内部信号声明、功能定义。
P27
21、内部信号说明:
在模块内用到的和与端口有关的wire和reg变量的声明。
22、功能定义:
有三种方法可在模块中产生逻辑。
-用assign语句(数据流描述):
assigna=b&c;
-用实例元件(结构化描述):
and2and_inst(q,a,b);
-用“always”块(行为描述):
always@(posedgeclkorposedgeclr)
begin
if(clr)q<=0;elseif(en)q<=d;
23、在VerilogHDL中有两类语句块,即:
1)顺序语句块(begin...end):
语句块中的语句按给定次序顺序执行。
2)并行语句块(fork...join):
语句块中的语句并行执行。
24、顺序块有以下特点:
1)块内的语句是按顺序执行的,即只有上面一条语句执行完后下面的语句才能执行。
2)每条语句的延迟时间是相对于前一条语句的仿真时间而言的。
3)直到最后一条语句执行完,程序流程控制才跳出该语句块。
25、并行块有以下四个特点:
1)块内语句是同时执行的,即程序流程控制一进入到该并行块,
块内语句则开始同时并行地执行。
2)块内每条语句的延迟时间是相对于程序流程控制进入到块内时的仿真时间的。
3)延迟时间是用来给赋值语句提供执行时序的。
4)当按时间时序排序在最后的语句执行完后或一个disable语句执行时,程序流程控制跳出该程序块。
26、块语句——起始时间和结束时间
1)对于顺序块,起始时间就是第一条语句开始被执行的时间,结束时间就是最后一条语句执行完的时间。
2)对于并行块,起始时间对于块内所有的语句是相同的,即程序流程控制进入该块的时间,其结束时间是按时间排序在最后的语句执行完的时间。
3)当一个块嵌入另一个块时,跟在块后面的语句只有在该块的结束时间到了才能开始执行,也就是说,只有该块完全执行完后,后面的语句才可以执行。
XilinxISE的主要功能包括设计输入、综合、仿真、实现和下载
1、试用VerilogHDL描述一个带进位输入、输出的8位全加器。
端口:
A、B为加数,CIN为进位输入,S为和,COUT为进位输出
moduleadd4v(a,b,ci,s,co);
input[3:
0]a;
input[3:
0]b;
inputci;
output[3:
0]s;
outputco;
wire[3:
0]carry;
functionfa_s(inputa,inputb,inputci);
fa_s=a^b^ci;
endfunction
functionfa_c(inputa,inputb,inputci);
fa_c=a&b|a&ci|b&ci;
endfunction
assigns[0]=fa_s(a[0],b[0],ci);
assigncarry[0]=fa_c(a[0],b[0],ci);
assigns[1]=fa_s(a[1],b[1],carry[0]);
assigncarry[1]=fa_c(a[1],b[1],carry[0]);
assigns[2]=fa_s(a[2],b[2],carry[1]);
assigncarry[2]=fa_c(a[2],b[2],carry[1]);
assigns[3]=fa_s(a[3],b[3],carry[2]);
assignco=fa_c(a[3],b[3],carry[2]);
endmodule
2.试用verilog语言产生如下图所示的测试信号
modulesignal_gen9(clk,in1,in2);
outputin1,in2,clk;
regin1,in2,clk;
initial
begin
in1=0;
in2=1;
clk=0;
end
initial
begin
#15in1=1
#10in1=0;
#5in1=1;
#10in1=0;
end
initial
begin
#5in2=0;
#5in2=1;
#25in2=0;
end
always
begin
#5clk=~clk;
end
endmodule
3.p131 例9.1
4.p131 例9.2
5、八路数据通道选择器P147页
6、数据位宽可由用户定义的比较器的模块程序。
(P146)
7.试用verilog语言,利用内置基本门级元件,采用结构描述方式生成如图所示的电路
moduleMUX4x1(Z,D0,D1,D2,D3,S0,S1);
outputZ;
inoutD0,D1,D2,D3,S0,S1;
andu0(T0,D0,S0bar,S1bar),
u1(T1,D1,S0bar,S1),
u2(T2,D2,S0,S1bar),
u3(T3,D3,S0,S1),
notu4(S0bar,S0),
u5(S1bar,S1);
oru6(Z,T0,T1,T2,T3);
endmodule
8、用Verilog语言设计一个输入数据位宽可由用户定义的有符号数的求补码程序,并编写测试代码。
求补码模块程序:
moduleBinary_complement(a,b);//二进制数补码
input[width-1:
0]a;
output[width-1:
0]b;
integeri;
reg[width-1:
0]d;
reg[width-2:
0]c;
parameterwidth=8;
always@(a)
begin
if(a[width-1]==1)
begin
for(i=0;i a[i]; d[width-1: 0]={a[width-1],(c[width-2: 0]+width-1'd1)}; end elsed[width-1: 0]=a[width-1: 0]; end assignb[width-1: 0]=d[width-1: 0]; endmodule 测试程序入如下: `timescale1ns/1ns `include"Binary_complement.v" modulestimulus;//测试模块的名字 reg[7: 0]a; wire[7: 0]b; Binary_complementmycount(a,b);//调用测试对象 initial begin//激励信号定义 a=1; #10a=2; #10a=-8'd8; #10a=127; #10a=255; #10$finish; end //定义结果显示格式 initial$monitor($time,"a=%b,b=%b\n",a,b); endmodule 9.试用verilog语言描述: 图示为一个4位移位寄存器,是由四个D触发器(分别设为U1,U2,U3,U4)构成的。 其中seri_in是这个移位寄存器的串行输入;clk为移位时脉冲输入;clr为清零控制信号输入;Q[1]~Q[3]则为移位寄存器的并行输出。 moduled_flop(q,d,clr,clk); outputq; inputd,clr,clk; regq; always@(clr) if(! clr)assignq=0; elsedeassignq; always@(negedgeclk) q=d; endmodule moduleshifter(seri_in,clk,clrb,Q); inputseri_in,clk,clrb; output[3: 0]Q; d_flopU1(Q[0],seri_in,clrb,clk), U2(Q[1],Q[0],clrb,clk), U3(Q[2],Q[1],clrb,clk), u4(Q[3],Q[2],clrb,clk); endmodule 10.使用case语句设计八功能的算术运算单元(ALU),其输入信号a和b均为4位,还有功能选择信号select为3位,输出信号为out(5位),算术运算单元ALU所执行的操作与select信号有关,具体关系如图1所列(忽略输出结果中的上溢和下溢的位)。 select信号 功能 3`b000 Out=a 3`b001 out=a+b 3`b010 out=a-b 3`b011 out=a/b 3`b100 out=a%b 3`b101 out=a<<1 3`b110 out=a>>1 3`b111 out=a>b moduleALU(a,b,select,out); input[3: 0]a,b; input[2: 0]select; output[4: 0]out; reg[4: 0]out; always@(select) begin case(select) 3'b000: out=a; 3'b001: out=a+b; 3'b010: out=a-b; 3'b011: out=a/b; 3'b100: out=a%b; 3'b101: out=a<<1; 3'b110: out=a>>1; 3'b111: out=a>b; default: out=5'bx; endcase end endmodule 11、请用$random配合求模运算编写: (1)用于测试的跳变沿抖动为周期1/10的时钟波形。 (2)随机出现的脉宽随机的窄脉宽。 modulerandom_pulse(dout); output[9: 0]dout; reg[9: 0]dout; integerdelay; initial begin #10dout=0; for(k=0;k<100;k=k+1) begin delay={$random}%10; #delaydout=1; #delaydout=0; end end endmodule 12、用Verilog语言设计一个格雷码至二进制数的转换器(如表1),并编写测试代码。 提示: 格雷码转换为二进制码算法是: 从左边第二位起,将每一位与左边一位解码后的值“异或”,作为该解码后的值(最左边的一位依然不变)。 表1格雷码与二进制转换 格雷码 二进制 000 000 001 001 011 010 010 011 110 100 111 101 101 110 100 111 modulegry2bin(Gry,Bin); parameterlength=3; output[length-1: 0]Bin; input[length-1: 0]Gry; reg[length-1: 0]Bin; integeri; always@(Gry) begin Bin[length-1]=Gry[length-1]; for(i=length-2;i>=0;i=i-1) Bin[i]=Bin[i+1]^Gry[i]; end endmodule `timescale1ns/1ns `include"gry2bin.v" modulestimulus; reg[2: 0]Gry; wire[2: 0]Bin; gry2binmycount(Gry,Bin); initial begin Gry=3'b000; #10Gry=3'b001; #10Gry=3'b011; #10Gry=3'b010; #10Gry=3'b110; #10Gry=3'b111; #10Gry=3'b101; #10Gry=3'b100; #10$finish; end initial$monitor($time,"Gry=%b,Bin=%b\n",Gry,Bin); endmodule 13、图1所示的是双2选1多路选择器构成的电路MUXK。 对于其中MUX21A,当s=0和s=1时,分别有y=a和y=b。 试在一个模块结构中用两个过程来表达此电路。 图1 图2 moduleMUX21A(inputs,input[1: 0]a,input[1: 0]b,output[1: 0]y); reg[1: 0]y_reg; always@(soraorb) case(s) 0: y_reg=a;//当选择信号为是0时,选择a0 1: y_reg=b;//当选择我信号为1时,选择我a1 default: y_reg=2'b00; endcase assigny=y_reg; endmodule moduleMUXK(a1,a2,a3,s0,s1,outy); inputa1,a2,a3,s0,s1; outputouty; wireouty; wiretmp; mux21au1(.a(a2),.b(a3),.s(s0),.y(tmp)); mux21au2(.a(a1),.b(tmp),.s(s1),.y(outy)); endmodule 14、根据下列给定的仿真输入输出波形图,说明完成此功能的电路是什么功能电路? 并写出对应的VerilogHDL描述程序(图中clk,clr为输入,q,c为输出)。 modulecounter(clk,clr,q,c) inputclk,clr; outputret[1: 0]q; outputc; always@(posedgeclkornegedgeclr) begin if(~clr)q<=2’h0; else begin if(2’h3==q)q<=2’h0; elseq<=q+2’h1; end end assignc=(2’h3==q) endmodule 15.VerilogHDL设计一个4位4输入最大数值检测电路。 (10分) //Verilog设计一个4位4输入最大数值检测电路 moduleMaximum_value_detection(Mostlarge,a,b,c,d);//4位4输入最大数值检测电路 output[3: 0]Mostlarge; input[3: 0]a,b,c,d; wire[3: 0]sum1,sum2,sum3; assignsum1=(a>b)? a: b; assignsum2=(c>d)? c: d; assignMostlarge=(sum1>sum2)? sum1: sum2; endmodule 16.用for循环语句设计一个7人投票表决器,若超过4人赞成,则通过。 modulevoter7(pass,vote); outputpass; input[6: 0]vote; reg[2: 0]sum; integeri; regpass; always@(vote) begin sum=0; for(i=0;i<=6;i=i+1)//for语句 if(vote[i])sum=sum+1; if(sum[2])pass=1;//若超过4人赞成,则pass=1 elsepass=0; end endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 复习 11