数电课设 2Word文档格式.docx

上传人:b****5 文档编号:21637658 上传时间:2023-01-31 格式:DOCX 页数:21 大小:352.20KB
下载 相关 举报
数电课设 2Word文档格式.docx_第1页
第1页 / 共21页
数电课设 2Word文档格式.docx_第2页
第2页 / 共21页
数电课设 2Word文档格式.docx_第3页
第3页 / 共21页
数电课设 2Word文档格式.docx_第4页
第4页 / 共21页
数电课设 2Word文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数电课设 2Word文档格式.docx

《数电课设 2Word文档格式.docx》由会员分享,可在线阅读,更多相关《数电课设 2Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

数电课设 2Word文档格式.docx

整理设计资料,撰写报告、准备答辩;

第10天:

验收合格后进行答辩。

指导教师:

201年月日

专业负责人:

201年月日

学院教学副院长:

摘要

在上学期FPGA课程设计中,我完成了全自动洗衣机RTL级的代码设计。

在此过程中,完整地建立了测试平台,完成了功能和时序仿真,从而保证了设计的功能与时序的正确性。

但是功能和时序的正确性并不能说明这是一个符合条件的实际电路。

我们必须针对层次化的组合电路或者时序电路的速度、面积和可布性进行优化。

按照所定义的电路的测量特征所要达到的目标。

我们利用DesignCompile这个综合软件,把RTL级的代码转化为门级网表。

经过转译,优化,映射三个综合过程。

在转译的过程中,软件自动将源代码翻译成每条语句所对应的功能模块以及模块之间的拓扑结构,这一过程不做任何的逻辑重组和优化。

我们通过施加的一定时序和面积的约束条件,综合器按照一定的算法对转译结果作逻辑优化和重组。

在映射过程中,根据所施加的一定的时序和面积的约束条件,综合器从目标工艺库中搜索符合条件的单元来构成实际电路。

查看结果,证明全自动洗衣机设计完全符合设计条件。

关键词:

DesignCompile;

映射;

优化设计;

时序约束

目录

引言1

1总体电路结构设计2

1.1电路功能与性能2

1.2电路接口3

1.3电路功能框图4

1.4验证方案4

2约束策略及脚本5

2.1约束策略5

2.2脚本7

3综合过程9

4结果分析报告11

5总结16

参考文献17

附录A:

设计源代码18

附录B:

设计约束20

引言

FPGA的迅速发展与电子设计自动化的实现是息息相关的,由于其具有用户可重复编程的特点,人们利用FPGA可以设计专门的IC,实现了系统的集成从而大大缩短了产品开发,上市时间,还降低了开发成本,因此FPGA在电子设计领域得到了广泛的发展。

本设计实现的是全自动洗衣机设计,基本流程是这样的:

首先根据设计任务要求进行方案的设计,包括引脚确定、时序关系、功能框图与模块划分、调度与控制方法等;

然后依据模块设计进行模块VerilogHDL代码的输入与功能仿真,进行电路的约束与逻辑综合;

综合结果无误后进行布局与布线,生成配置文件;

在下载前进行时序分析;

最后下载、测试,从而完成设计。

逻辑综合主要是将HDL语言描述的电路转换为工艺库器件构成的网表的过程。

综合工具目前比较主流的是synopsys公司DesignCompiler,我们在设计实践过程中采用这一工具。

随着集成电路技术的发展,集成电路追求更高的发展,采用软件开发模拟,开发成本低,而且在功能设计上有了很大的灵活度。

同时,该设计的精度更高,并且不需要维修。

综上所述,本设计具有设计方便、功能多样、电路简洁、成本低廉等优点。

符合社会发展趋势,前景广阔。

1电路结构

1.1电路功能与性能

全自动洗衣机的功能主要体现在五个方面,洗衣时间的设定,洗衣时间完全可以人为地决定,这是与普通洗衣机的最大不同地方。

按键的消抖,由于我们在按下键盘的时候其实并不只是按下去而是有一个抖动的过程,就连松手的过程也有抖动,然而这个抖动通常被人们所忽略,从而导致输入数据的错误和乱码,因此我们必须对按键进行按键的消抖处理。

时钟的分频,由于使用的FPGA的输入时钟是10Mhz,定时模块自减频率是1hz,因此需要进行分频得到1hz的时钟频率输入给定时模块。

定时器设定和自减模块,定时器设定和自减模块可以设定定时器的工作时间,通过输入1hz的信号使定时器的值每秒自减1,直至为0。

其定时器的值输出给数码管译码模块和时序控制模块。

工作控制中心,时序控制模块由定时器送来的值来控制洗衣机控制器的工作方式,正转、反转、停转和报警。

电路具体的功能细节如下:

1)为了更方便的设定洗衣时间,这个电路设计了两个按键DownKey和UpKey,UpKey则表示增加洗衣时间,每按一次键意味着洗衣时间增加1s,DownKe则表示减少洗衣时间,每按一次键意味着洗衣时间减少1s。

2)为了避免人为地按键不稳的情况,我们对键盘输入进行延时检测,经过一个延时采纳一次,经过多次这个过程,直到确定了键盘输入稳定为止,这样就减少了乱码等情况。

3)洗衣机因为要显示它的洗衣的时间,它是以秒显示的,因此要产生一个一秒的信号,每隔一秒对总的洗衣时间减一秒,具体的电路是用一个计数器实现的,对时钟频率10mhz进行10000000次的计数便可产生一个一秒的信号,它作为定时器自减模块的时钟。

4)洗衣机的洗衣时间起初有一个初值50秒,人们对总的洗衣时间还可通过DownKey键和UpKey键自己调整,在洗衣的过程中洗衣显示时间则是有是有时钟分频产生的时钟作为时钟,对设置好的总时间每一秒减一,送到显示模块显示。

5)显示状态分为目前的工作状态显示和洗衣时间的显示,目前工作状态的显示可以用四种不同颜色的LED灯显示,洗衣时间用两个数码管显示,等到洗衣结束用蜂鸣器提醒。

1.2电路接口

根据电路信号功能将接口分为5部分,分别是时钟信号、复位信号、输入、输出信号。

具体接口如下表1.2所示。

表1.2总电路接口图

名称

IO属性

描述

备注

clk

in

线路输入时钟

频率10MHZ

上升沿有效

rstn

in

系统异步复位信号

低电平有效

start

系统总开关

upkey

控制增加洗衣时间的按键

高电平有效

downkey

控制减少洗衣时间的按键

forward

out

正转的工作状态,接红色LED灯

stop

暂停的工作状态,接绿色LED灯

back

暂停的工作状态,接黄色LED灯

sound

工作结束,接蜂鸣器

1.3电路功能框图

全自动洗衣机的功能主要体现在五个方面,洗衣时间的设定,按键的消抖,时钟的分频定时器设定和自减模块,其定时器的值输出给数码管译码模块,时序控制模块。

根据它的功能模块画出它的功能框图1.1如下;

图1.1电路图

图1.1功能模块

1.4电路综合报告

本电路是一种简单的时序控制和定时设计电路。

是通过依照日常生活中全自动洗衣机的工作方式进行功能设计的过程,并将此电路设计分为五大模块,按键消抖模块,时钟分频模块,定时设定和自减模块,时钟中心控制模块,数码管显示模块。

经过在仿真软件中的仿真,进而下载到FPGA开发板中进行实际的运行。

进而检测电路的正确与否,经过验证后此洗衣机控制器可以按理想值进行工作。

2约束策略及脚本

2.1约束策略

DC约束主要是读入/分析源文件、设定设计的工作条件/环境/设计规则、时序条件、面积约束、综合策略等。

其中最重要的是时序约束,时序约束主要包括周期约束和偏移约束以及静态路径约束等三种。

时序约束的基本作用是提高设计工作的频率,获得正确的时序分析报告。

通过附加约束条件可以使综合布线工具调整映射和布局布线过程,使设计达到时序要求。

例如用offset_in_before约束可以告诉综合器可以告诉综合布线工具输入信号在时钟之前什么时候准备好,综合布线工具可以根据这个约束调整与IPPAD相连逻辑电路的综合实现过程,使结果满足FFS的建立时间要求。

2.1.1时序约束

附加时序约束的一般策略是先附加全局约束,然后对快速和慢速例外路径附加专门约束。

附加全局约束时,首先定义设计的所有时钟,对个时钟域内的同步元件进行分组,对分组附加周期约束,然后对组合逻辑的PADTOPAD路径附加约束。

首先约束分组之间的路径,然后约束快,慢速例外路径和多周期路径,以及其他特殊路径。

周期含义是时序中最简单也是最重要的含义其他时序约束都是建立在周期约束的基础上的。

很多其他的时序公式,可以用周期公式推导,周期约束是一个基本时序约束和综合约束,他分加在时钟网线上,时序分析工具根据周期约束检查时钟域内所有的同步元件的时序是否满足要求。

1)首先是读入源代码,也就是HDL文本描述的设计文件,tcl语句如下:

read_verilog{xiyiji_core.vxiyiji_Top.viopads.v}。

这样约束条件才可有针对性施加:

current_designxiyiji_top。

2)其次设定当前设计后,要完成链接,也就是将设计与库链接起来,用于映射过。

再次检查设计,主要是检查完成转换的设计:

check_design。

3)然后设定输出网表的格式规则,输出未优化的设计:

程中搜寻相应的单元,完成综合。

tcl语句:

link对于时钟约束。

4)最后对设计设定时序约束这是最重要的一项约束,用于设定设计的工作速度。

对于时钟,我们设置了,时钟名“clk”,时钟周期100MHZ,时钟的建立时间0.3ns,时钟最大延时,时钟的上升/下降时间0.5ns,其他的时序约束都是在时钟的基础上进行约束的。

设置完时钟后我们还需要对输入输出引脚之间的时序约束关系进行约束,比如输入输出延时set_input_delay-max12,set_output_delay-max12;

表示输入输出最大延时是12ns。

其目的是告诉综合器,布线器输入数据的到达时间,或者输出稳定的时间,从而保证与下一级时序电路的时序关系。

通过设置外部电路的延时,来用时钟周期相减,计算留给内部要综合电路的做最大延时。

我们应该注意设置的数值是外部的外部数值,这里的最大延时是指内部要综合电路的最大延时,

其次我们也应该注意这种时序约束只适用同步电路而不适用于异步电路。

set_dont_touch_network[get_ports"

clk*rstn"

}表示不对时钟复位信号优化;

set_dont_touch命令设置一个子模块的dont_touch属性。

DesignCompiler在优化时会忽略掉这些设置了这个属性的子模块。

设计者经常在子模块单独优化后使用set_dont_touch。

如果规定的结果在独立的优化中已经得到了,就可以选择避免在后面的有化过程中被修改。

2.1.2驱动约束

完成时序约束后,要对设计的工作环境、设计规则等进行约束。

1)环境约束:

环境约束是指对芯片物理上的参数,比如电压,温度等。

set_operating_conditions-minfast-maxslow-min_libraryfast-max_libraryslow表示芯片可以工作在最佳和最坏情况。

最佳和最坏情况能够满足要求,则整个设计就能保证满足条件

2)驱动负载约束:

set_wire_load_model-nametsmc18_wl10-libraryslow表示设定线载模型的模式;

set_driving_cell-lib_cellPDIDGZ-pinC-librarytpz973gwc[get_ports"

upkeydownkey"

]表示驱动能力的约束;

set_load-min-pin_load1[get_ports"

forwardbackstopstartsounddig_seldig_out"

]表示最小管脚的负载;

set_max_fanout80xiyiji_core表示最大扇出。

到此驱动约束完毕。

2.1.3面积约束

在本设计中我们对面积约束没有严格要求,所以没有面积约束。

如果在其他设计中要对面积进行约束可以应用下列语句:

set_max_area:

设置最大面积约束。

set_min_area:

设置最小面积约束。

2.2约束脚本

#

read_verilog{xiyiji_top.vxiyiji_core.viopads.v}

current_designxiyiji_top

link

check_design

#timeconstraint

#addedyourself,itissamplebelow

create_clock-name"

clk"

-period100[get_ports"

]

set_clock_uncertainty-setup0.3[get_clocks"

set_clock_latency-max0.5[get_clocks"

set_clock_transition-max0.2[get_clocks"

set_input_delay-max12-clockclk[get_ports"

upkeydownkeystart"

set_output_delay-max12-clockclk[get_ports"

forwardbackstopsounddig_sel*dig_out*"

#dontmodifycodebelow

set_dont_touch_network[get_clocks"

set_ideal_network[get_clocks"

reset"

set_ideal_network[get_ports"

check_timing

#pvt

set_operating_conditions-minfast-maxslow-min_libraryfast-max_libraryslow

set_wire_load_model-nametsmc18_wl10-libraryslow

upkeydownkeystart"

set_max_fanout80xiyiji_core

setverilogout_no_tritrue

set_fix_multiple_port_nets-all-buffer_constants

compile-maphigh

compile-inc

rc>

../output/xiyiji_top.log

write-fverilog-hier-o../netlst/xiyiji_top.sv

write-fddc-hier-o../output/xiyiji_top.ddc

write_sdf-version2.1../output/xiyiji_top.sdf

report_timing

3综合过程

3.1综合流程

我们应先做好前提工作,查看DC初始化文件synopsys.dc.setup,该文件是隐藏文件的路径,需要用ls_a。

1)设计编码(Coding):

好的HDL编码可以产生小而快的设计。

2)启动DC 

shell界面 

如果要进入dc_shell-t在系统提示符下键入 

3) 

指定相关库文件及路径。

DC使用了如下一些库:

a)工艺库:

半导体生产厂定义的器件信息,如器件名、器件管脚名、延迟时间以及管脚负载等。

采用link_library及target_library变量指定。

Target_libarary为逻辑综合目标库,由代工厂提供的.db文件。

b)符号库:

定义了DA(Design 

Analyzer)的可视符号。

采用symbol_library变量指定。

Symbol_library为指定的符号库,一般为*.sdb文件,与单元库相对应。

c) 

Link_library是链接库,一般和目标库相同。

需要保留*.db文件,该项指示DC在链接时首先搜索内存中的内容。

4) 

读入设计 

read_verilogxiyiji_core.v/xiyiji_Top.v/iopads.v:

用于读入设计所有的相关代码,并将分析产生的中间文件存于work的目录下。

5) 

定义设计环境 

设计环境指围绕将要进行综合的设计的环境,由一套属性(attribute)和约束(constraint)来模拟。

描述设计工作环境,wireload,load,输入驱动,时钟定义,输入输出延时,扇出数,跳变时间,面积约束等。

6) 

选择编译策略 

对一个层次式设计来说,用户可选择的编译策略包括:

a) 

自顶向下的编译 

b) 

自底向上的编译 

c) 

特征化编译(characterize) 

7) 

设置设计约束 

DC使用两类约束来优化设计:

a) 

DRC:

固有约束

优化约束:

用户定义的约束

8) 

优化 

DC使用目标工艺库、DRC以及优化约束对设计进行综合。

可采用compile命令启动综合过程。

9) 

分析与调试 

DC能生成报告帮助用户分析优化结果,并调试出现的问题。

10) 

保存设计数据 

使用write命令存储设计的数据(如网表、SDF文件等)。

4结果分析报告

4.1结果分析

综合的时序约束报告如图4.1所示:

综合的面积约束报告如图4.2所示:

映射优化报告如图4.3:

端口映射报告如图4.4:

将时序信息写入顶层文件的报告如图4.5:

总结

经过这段时间的课程设计的学习,我们终于熟练掌握了设计综合这部分知识,由于在做课设之前,没有实验课的学习,导致我们开始对设计综合这部分知识不了解,由于我的动手能力差,所以让我做起来很费劲,所以就学的很慢,我都没想到我最终能做出来正确的结果,我总结这很大一部分归于老师的耐心指导和同学的热心帮助,老师好几次来到我的电脑前给我指导,问我们有没有什么不懂的地方,在后来的验收过程中,老师更是负责,给我们挨个进行纠错,把那些我不会难题解决了。

在课设这段期间,我也无数次请教同学,他们都很有耐心,不耐其烦的给我讲解和帮助。

学习理论知识是重要一方面,但是这个过程让我明白了好的引导者和合作伙伴是更重要的。

如果没有他们我不知要走多少弯路,浪费多少时间。

我非常的感谢他们。

总的来说,课程设计是一门很严谨的的课程,给了我很多专业知识,同时在一定程度上提高了我的专业技能,还教给我许多的道理。

通过课程设计,我不仅学到了知识,而且从中学到了解决问题的方法,这也是一个锻炼自己的机会。

只有自己动手做过了,才能更贴切更深刻的掌握所学的知识,使自己进一步的提高。

尽管课程设计是在期末才开始,我们的教材学习完毕,掌握许多知识,但是还有很多地方理解领悟不到位,所以查阅资料使必不可少的,这就养成了我们自己学习的方式。

参考文献

[1]G.DavidRipley.DVI-ADigitalMultimediaTechnology.

[2]杜慧敏基于Verilog的FPGA设计基础西安电子科技大学出版社,2006,2

[3]江国强基于EDA技术与应用电子工业出版社2004,2

[4]杜慧敏基于Verilog的FPGA设计基础西安电子科技大学出版社,2006,2

[5]邹其洪EDA技术实验教程中国电力出版社,2009,2

附录A:

设计顶层代码

modulexiyiji_top(upkey,

downkey,

clk,

reset,

forward,

back,

stop,

start,

sound,

dig_sel,

dig_out

);

//

inputclk;

inputreset;

inputupkey;

inputdownkey;

inputstart;

outputforward;

outputback;

outputstop;

outputsound;

output[7:

0]dig_sel;

0]dig_out;

wirestop;

wireback;

wireforward;

wiredownkey;

wirestart;

wireclk;

wireupkey;

wiresound;

wirereset;

wire[7:

wirestopc;

wirebackc;

wireforwardc;

wiredownkeyc;

wirestartc;

wireclkc;

wireupkeyc;

wiresoundc;

wireresetc;

wire[7:

0]dig_outc;

0]dig_selc;

iopadsiopads(

.clk_pad(clk),

.reset_pad(reset),

.upkey_pad(upkey),

.downkey_pad(downkey),

.start_pad(start),

.forward_pad(forward),

.back_pad(back),

.stop_pad(stop),

.sound_pad(sound),

.dig_sel_pad(dig_sel),

.dig_out_pad(dig_out),

.clk_core(clkc),

.reset_core(resetc),

.upkey_core(upkeyc),

.downk

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

当前位置:首页 > 高等教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1