基于EDA的组合电路设计第5章 56.docx

上传人:b****2 文档编号:2897707 上传时间:2023-05-05 格式:DOCX 页数:26 大小:701.92KB
下载 相关 举报
基于EDA的组合电路设计第5章 56.docx_第1页
第1页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第2页
第2页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第3页
第3页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第4页
第4页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第5页
第5页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第6页
第6页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第7页
第7页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第8页
第8页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第9页
第9页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第10页
第10页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第11页
第11页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第12页
第12页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第13页
第13页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第14页
第14页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第15页
第15页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第16页
第16页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第17页
第17页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第18页
第18页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第19页
第19页 / 共26页
基于EDA的组合电路设计第5章 56.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于EDA的组合电路设计第5章 56.docx

《基于EDA的组合电路设计第5章 56.docx》由会员分享,可在线阅读,更多相关《基于EDA的组合电路设计第5章 56.docx(26页珍藏版)》请在冰点文库上搜索。

基于EDA的组合电路设计第5章 56.docx

基于EDA的组合电路设计第5章56

5.6EDA开发综合实例2:

LiberoIDE完整设计流程

如果需要仿真并最终写入到FPGA中,则需要综合使用多个不同的EDA工具。

本综合实例以开发2-4译码器为例子,使用Libero集成开发环境(本书配套实验环境为LiberoIDE9.0),让读者了解简单的VerilogHDL编程和FPGA设计的完整流程。

5.6.1真值表

2-4译码器真值表如表5-1所示。

理解时应注意y作了反相处理。

表5-12-4译码器真值表

输入

输出

en

a

b

y[0]

y[1]

y[2]

y[3]

0

x

x

1

1

1

1

1

0

0

0

1

1

1

1

0

1

1

0

1

1

1

1

0

1

1

0

1

1

1

1

1

1

1

0

5.6.2逻辑表达式

根据真值表可得出以下逻辑表达式(为避免混淆,表5-1中的en,在逻辑表达式中记为“en”):

y[0]=

y[1]=

y[2]=

y[3]=

5.6.3用Verilog描述2-4译码器

以下用三种不同风格的Verilog语句来描述2-4译码器,在本例中可任选其中一种来实现。

1.行为风格的描述

moduledecoder2x4(a,b,en,y);

inputa,b,en;

outputreg[0:

3]y;

regaf,bf;

always

@(aorboren)//当a、b、en发生变化时执行后面的代码

begin

af=~a;//a取反后赋值给af

bf=~b;

//非阻塞赋值,以下4句同时执行。

y[0]<=~(af&bf&en);//根据逻辑表达式写出

y[1]<=~(af&b&en);

y[2]<=~(a&bf&en);

y[3]<=~(a&b&en);

end

endmodule

2.数据流风格的描述

moduledecoder2x4(a,b,en,y);

inputa,b,en;

output[0:

3]y;

wireaf,bf;

//assign连续赋值,以下各语句并发执行

assignaf=~a;

assignbf=~b;

assigny[0]=~(af&bf&en);

assigny[1]=~(af&b&en);

assigny[2]=~(a&bf&en);

assigny[3]=~(a&b&en);

endmodule

3.门级风格的描述

moduledecoder2x4(a,b,en,y);

inputa,b,en;

output[0:

3]y;

wireaf,bf;

not

u0not(af,a),

u1not(bf,b);

nand

u0nand(y[0],en,af,bf),

u1nand(y[1],en,af,b),

u2nand(y[2],en,a,bf),

u3nand(y[3],en,a,b);

endmodule

行为风格和数据流风格均可根据逻辑表达式写出,不需自行画出逻辑结构图;门级风格建模直接描述门结构,故应先画出逻辑图。

5.6.4编写测试平台

测试平台编写如下:

`timescale1ns/1ns//单位时间为1纳秒

moduletestdecoder2x4;

regpa,pb,pen;

wire[0:

3]py;

decoder2x4u1(pa,pb,pen,py);//调用decoder2x4模块,按端口顺序对应方式连接

initial

begin

pa=0;pb=0;pen=0;//赋予初值

#5pen=1;//5个单位时间延迟后进行赋值

#10pa=1;

#5pb=1;

#5pa=0;

#10pb=0;

end

initial

$monitor("time=%t,a=%b,b=%b,en=%b,y=%b",$time,pa,pb,pen,py);

//调用系统任务monitor,使得pa、pb、pen、py当中任一个发生变化时就输出显示

endmodule

5.6.5FPGA开发完整流程

1.新建工程

打开LiberoIDE,选择“Project”菜单的“NewProject”命令,输入项目名称、选择项目存放路径,选择语言Verilog(如图5-18所示)。

每一个项目使用一个目录进行存放,项目中各操作的结果将存放于项目文件夹下不同子目录下。

选择实际使用的设备型号、系列和封装,点击“finish”。

本书配套实验环境为ProASIC3型号A3P030系列100引脚的FPGA芯片(如图5-19所示)。

如果不需要烧录到FPGA,选择随意一个也没问题。

2.输入设计代码

“ProjectManager”被打开,界面中间显示了基本项目流程,可以看到综合及仿真都是未可用状态。

如图5-20所示:

点击“HDLEditor”按钮,在弹出的对话框中选择“VerilogSourceFile”,输入源程序文件名(扩展名为.v)。

如图5-21所示。

输入2-4译码器的功能描述代码(在此采用前述的行为风格代码),保存(如图5-22所示)。

该文件将保存于项目文件夹的“\hdl”子目录下。

3.输入测试平台代码

点击“ProjectFlow”切换回项目流程,再次点击“HDLEditor”按钮,在打开的对话框中选择“HDLStimulusFile”,输入激励程序的文件名(后缀也为.v)。

如图5-23所示:

在打开的编辑器中输入激励程序代码,保存(如图5-24所示),该文件将保存于项目文件夹的“\stimulus”子目录下。

4.代码检查及修改

在代码编辑器中右键,选择“CheckHDLfile”,可检查程序是否有语法错误。

如图5-25所示。

在LogWindow中可看到是否有错误信息(如图5-26所示),如有错误,则程序将无法通过编译,在代码编辑窗口进行修改。

以上操作可检查语法错误,但非语法错误就需要自行检查发现,如在此应检查功能模块的名称(“decoder2x4”)与测试平台中调用的名称是否相同。

5.Options设置

点击“ProjectFlow”切换回项目流程,有一个重要参数应首先设置:

对着“Simulation”按钮按右键,在弹出的菜单中选择“Options”(如图5-27所示)。

在弹出的对话框中,“Testbenchmodulename”值修改为激励模块的名称,“Toplevelinstancenameinthetestbench”值修改为所使用的实例名,如图5-28所示:

6.仿真(综合前)

在“ProjectFlow”中,点击“Simulation”按钮,进行综合前的仿真。

弹出消息框提示没有关联激励程序(如图5-29所示),点击“是”,在弹出的对话框中把激励程序“testbench.v”加入到关联文件中,如图5-30所示。

ModelSim软件被打开,正常情况下(无程序错误,没有打开多个ModelSim程序等),ModelSim会自动执行刚才关联的激励程序,通过激励程序调用2x4译码器程序,并显示仿真结果。

如图5-31所示。

“Wave”窗口显示的波形,波形显示可能会太宽或太窄影响查看,可通过工具栏

进行缩放显示,如图5-32所示。

在Transcript小窗口显示执行情况及执行结果:

#Loadingpresynth.testdecoder2x4

#Loadingpresynth.decoder2x4

#**Warning:

(vsim-3009)[TSCALE]-Module'decoder2x4'doesnothavea`timescaledirectiveineffect,butpreviousmodulesdo.

#Region:

/testdecoder2x4/u1

#time=0,a=0,b=0,en=0,y=1111

#time=5000,a=0,b=0,en=1,y=0111

#time=15000,a=1,b=0,en=1,y=1101

#time=20000,a=1,b=1,en=1,y=1110

#time=25000,a=0,b=1,en=1,y=1011

#time=35000,a=0,b=0,en=1,y=0111

验证输出结果和波形是否正确,验证后关闭ModelSim。

其它说明:

(1)激励程序(testbench.v)中的延迟设置为1纳秒(ns),而2-4译码器的程序(dec2x4.v)中没有指定(如图5-33所示)。

“Transcript”窗口中也有相应提示信息“Module'decoder2x4'doesnothavea`timescaledirectiveineffect,butpreviousmodulesdo.”。

(2)当前显示的单位时间为1皮秒(1ns=1000ps),所以在结果中显示的时间为“0、5000、15000……35000”,而不是激励程序中的“0、5……”。

(3)某些情况下进入ModelSim后未必能正常显示仿真结果,如程序错误、参数设置错误等,可以点击工具栏

图标执行“Restart”操作,清除之前的显示(不清除的话可能影响后面的显示),然后点击

重新执行(Run–All)。

(4)如运行不正常又觉得代码没问题,可尝试对程序进行重编译(选择源代码文件,右键,选择“Recompile”)。

代码如有变动,也需对程序进行重编译。

7.综合

回到LiberoProjectManager,在“ProjectFlow”中,点击“Synthesis”按钮(如图5-34所示),调用软件“SynplifyPro”进行综合。

在打开的“SynplifyPro”软件中,单击“Run”按钮,进行综合操作。

综合器进行编译、制图等操作,并显示完成结果。

如图5-35所示。

可点击“ViewLog”按钮,查看log信息,包括元件使用情况统计等。

如图5-36所示。

点击工具栏

按钮,可查看RTL视图,该图由系统自动生成。

如图5-37所示。

点击工具栏

按钮,可查看TechnonogyView(工艺视图),这是针对ActelFPGA芯片实现的电路图。

如图5-38所示。

8.仿真(综合后)

综合后,按钮颜色会发生改变(变为绿色,如下图所示),此时可再一次进行仿真,验证综合后是否也能得到正确的结果。

对着“Simulation”按钮右键选择“RunPost-SynthesisSimulation”(或者直接点击“Simulation”按钮即可)。

如图5-39所示:

正常情况下,系统自动进行仿真,并显示仿真结果。

如图5-40所示。

从逻辑上描述各种设计时,很多时候是假设程序运行是零延迟的,但在实际电路中,任何一个逻辑门和线路都是有延迟的。

可看到“Transcript”窗口中得到如下输出,发现比综合前仿真多了一些输出结果,这是加上器件延迟等因素后输出的结果。

#time=0,a=0,b=0,en=0,y=xxxx

#time=0,a=0,b=0,en=0,y=1111

#time=5000,a=0,b=0,en=1,y=1111

#time=5000,a=0,b=0,en=1,y=0111

#time=15000,a=1,b=0,en=1,y=0111

#time=15000,a=1,b=0,en=1,y=1101

#time=20000,a=1,b=1,en=1,y=1101

#time=20000,a=1,b=1,en=1,y=1110

#time=25000,a=0,b=1,en=1,y=1110

#time=25000,a=0,b=1,en=1,y=1011

#time=35000,a=0,b=0,en=1,y=1011

#time=35000,a=0,b=0,en=1,y=0111

在“Wave”窗口可看到如图5-41所示的波形,波形达到预期运行结果。

说明:

(1)注意这里说法是“波形达到预期结果”,而非“与前面的仿真结果一致”:

对波形进行局部放大仔细查看(如图5-42所示),可看到综合后仿真与综合前仿真稍有不同,多出了300ps的输出延迟,这是由于综合后考虑了元器件本身工作的延迟(电路越复杂,延迟越明显)。

(2)如果把激励程序中的单位时间设置语句“`timescale1ns/1ns”去掉,在综合前仿真中也能得到同样的运行效果,但到了综合后仿真中,会发现得不到正确的波形,其结果及其原因请读者自行验证和思考。

9.布局布线

(1)调用Designer

回到LiberoProjectManager,在“ProjectFlow”中,点击“Place&Route”按钮(如图5-43所示),调用软件“Designer”进行布局布线处理。

接着弹出如图5-44所示的界面,是对约束文件的配置,在此按默认配置,点击“OK”。

在弹出的向导中可修改所使用器件(如图5-45所示),但只能选择同一型号(新建工程时所选择的)的其它器件,其它选项按默认配置。

(2)编译(Compile)

打开了Designer软件,点击“Compile”按钮进行编译,在弹出的窗口中使用默认配置。

编译后“Compile”变成绿色,“LogWindow”中显示编译过程和编译结果。

如图5-46所示:

(3)布局布线(Layout)

点击“Layout”按钮进行布局布线,接受默认配置,完成后“Layout”按钮变成绿色,“LogWindow”中会显示布局布线结果,如图5-47所示。

(4)引脚设定

引脚设定并非是必须进行的操作步骤,Designer软件会自动分配好引脚和端口的对应关系,但如果想手工设定引脚配置,可点击“I/OAttributeEditor”按钮(如图5-48)进行编辑。

一块FPGA芯片上有多个引脚(本例使用的“A3P030”芯片有100个引脚),而本例设计的2-4译码器只需要7个引脚(a,b,en,y[0],y[1],y[2],y[3]),可以在“PinNumber”列修改端口所使用的引脚(如图5-49所示)。

如果修改了引脚配置,则需要点击

按钮,或选择“File”菜单的“CommitandCheck”按钮。

如果检查没有错误,则配置成功。

如果修改了引脚配置,则需要再次点击“Layout”按钮,重新进行布局布线操作。

另外,通过点击“PinEditor”和“ChipPlanner”按钮,也可通过可视化方式配置端口和引脚的对应关系。

(5)反标(Back-Annotate)

在Designer中点击“Back-Annotate”按钮进行“反标”操作,该操作将生成连线延时参数文件。

在弹出的窗口中选择默认配置,完成后按钮变成绿色(如图5-50所示),“LogWindow”中会显示结果“TheBack-Annotatecommandsucceeded”。

(6)生成编程文件

如果需要生成编程文件并烧录到FPGA里,则可进行以下操作,如果只是仿真,则可不用进行该操作。

在Designer中点击“ProgrammingFile”按钮,如图5-51所示:

弹出如图5-52所示的对话框,在此直接点击“finish”按钮:

在弹出的对话框中选择输出格式,点击“Generate”按钮,如图5-53所示。

程序文件生成成功,则可在项目文件夹的“\designer\impl1”子文件夹下找到刚生成的“decoder2x4.pdb”文件。

10.仿真(布局布线后)

回到LiberoProjectManager,在“ProjectFlow”中,可看到完成布局布线后,“Place&Route”按钮颜色会变为绿色,“Post-LayoutFiles”也变为有效,如图5-54所示:

对着“Simulation”按钮点击右键,选择“RunPost-LayoutSimulation”(或者直接点击“Simulation”按钮)。

如图5-55所示:

此时将再一次进入“ModelSim”软件,仿真结果如图5-56所示。

在“Transcript”窗口中得出如下输出,可发现该结果与综合后仿真的输出结果又有了不同,这是加上线路延迟等具体因素后输出的结果。

#time=0,a=0,b=0,en=0,y=xxxx

#time=3000,a=0,b=0,en=0,y=xx1x

#time=3000,a=0,b=0,en=0,y=xx11

#time=4000,a=0,b=0,en=0,y=1x11

#time=4000,a=0,b=0,en=0,y=1111

#time=5000,a=0,b=0,en=1,y=1111

#time=10000,a=0,b=0,en=1,y=0111

#time=15000,a=1,b=0,en=1,y=0111

#time=19000,a=1,b=0,en=1,y=0101

#time=19000,a=1,b=0,en=1,y=1101

#time=20000,a=1,b=1,en=1,y=1101

#time=24000,a=1,b=1,en=1,y=1100

#time=25000,a=0,b=1,en=1,y=1100

#time=25000,a=0,b=1,en=1,y=1110

#time=29000,a=0,b=1,en=1,y=1011

#time=35000,a=0,b=0,en=1,y=1011

#time=39000,a=0,b=0,en=1,y=0011

#time=39000,a=0,b=0,en=1,y=0111

在“Wave”窗口可看到如图5-57所示的波形。

可看到波形与综合前、综合后的仿真结果差别很大,延迟非常明显(如5000ps时pen输入的变化,到了9500ps时输出py才发生改变),并且有毛刺的产生(竞争冒险)。

对波形进行局部放大仔细查看(如图5-58),可看到py的各位先后发生变化(py[2]、py[3]、py[0]、py[1]),导致了py的值发生多次变化,形成了毛刺。

延迟和毛刺的产生和加剧,都是因为考虑了布局布线后,具体器件的延迟和线路的延迟而产生,属于正常和需要关注的现象。

11.烧录程序

如需往FPGA芯片中写入程序文件,需要烧录器设备(通过USB接口连接计算机)和FPGA芯片,使用FlashPro软件进行烧录操作。

回到LiberoProjectManager,在“ProjectFlow”中点击“Programming”按钮(如图5-59所示),可调用FlashPro软件。

FlashPro软件运行界面如图5-60所示,如果烧录设备正常连接,则“ProgrammerListWindow”中会显示检测到的烧录设备及其参数。

点击“PROGRAM”按钮,可开始进行烧录操作,在“ProgrammerStatus”项和“LogWindow”窗口中可看到烧录进展情况,如图5-61所示为烧录成功完成。

12.实际测试

程序烧录到FPGA芯片上后,就可按照定义好的引脚编号及对应功能,连接输入输出设备并进行现场测试了。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2