暑期实训报告_第1页
暑期实训报告_第2页
暑期实训报告_第3页
暑期实训报告_第4页
暑期实训报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西北工业大学2014年暑期实践报告学 院: 软件与微电子学院 学号: 姓名: 专 业: 微电子学 实验时间: 2014.7 实验地点: 指导教师: 西北工业大学2014 年 7 月实验一 FPGA设计实训一、实验目的及要求1. 了解 FPGA 内部结构及其资源;2. 掌握 FPGA 设计的流程;3. 掌握 FPGA 设计工具的使用技巧;4. 掌握 FPGA 嵌入式系统设计流程及其开发工具的使用;5. 掌握 FPGA 嵌入式系统设计的软件开发及其调试;6. 掌握 FPGA 嵌入式设计的 IP 核的创建、添加和总线功能仿真;7. 了解处理器基础。二 、实验内容1、FPGA 设计基础使用 ISE软件

2、工具实现设计,并深入了解 Xilinx FPGA 架构并获得最佳设计实践经验并了解 Xilinx 设计流程的细节。本课程讲述了 ISE 工具特性,例如结构向导、 管脚规划和约束编辑器。其它主题还包括 FPGA 结构、同步设计技术、理解报告内容和全局时序约束等。2、嵌入式系统设计通过 MicroBlaze 软处理器、PowerPC® 硬处理器、AXI 互连和为芯片优化的架构资源提供了新的系统设计能力水平。本课程可以加快经验丰富的 FPGA设计者利用嵌入式开发套件(EDK)进行嵌入式系统开发的步伐。本演讲和实验还包含 Xilinx MicroBlaze 软处理器与 PowerPC 440

3、 处理器的特性及功能。动手实验提供了进行嵌入式系统开发、调试和仿真操作的经验。3、项目案例以FPGA 数字逻辑设计教程-Verilog参考书为主,介绍一些常用的数字电路和接口的原理,如交通灯、PS2、LCD、RS232 串口等,并在开发板上做实际应用开发,组合多个模块,最终形成一个系统级设计。三、具体内容1)了解基本的FPGA架构,熟悉使用Xilinx ISE工具来进行设计的流程。实验1:在ISE Project Navigator中创建新工程并使用ISE仿真器来做行为仿真,并使用默认的软件选项来执行设计。案例:二位比较器、毛刺、利用Verilog任务的4位比较器。2)结构向导和IO规划。使用

4、结构向导例化DCM和PLL;了解I/O Planner的特性及如何获得高质量的IO管脚分配。实验 2:结构向导和管脚分配。使用时钟向导来生成 DCM 并例化到设计中;使用 PlanAhead工具来分配管脚。执行设计并做下载。通过读取设计产生的各种报告来评估设计是否符合面积目标和性能目标。实验 3:预先分配管脚。使用 PlanAhead 工具实现优化的管脚分配,并进行 WASSO 分析避免地反弹和进行DRC检测以确认设计遵循 I/O banking规则。案例:3-8译码器,8-3编码器,4位加法器,4位加/减法器。3)通过添加全局时序约束来简化同步设计及使用约束编辑器来制定全局时序约束。通过复制

5、寄存器、添加流水线等手段来提高设计性能;通过使用 I/O 寄存器来提高接口性能;如何建立稳定的同步电路。实验 4:用 Xilinx 约束编辑器来编辑全程时序约束, 回顾映设后静态时序报告来验证时序约束能否实现, 使用布局布线后静态时序报告来确定每个时序约束的最长约束路径延迟。案例:4位乘法器、用task实现8位除法器、4位ALU。4)同步设计技术:有效利用层次化设计和同步设计技术来提高系统的稳定性和性能。案例:4 位环形计数器、防抖按钮、脉冲宽度调制器、Fibonacci 数列。5)Chipscope 工具介绍:描述 Chipscope 工具的特性和使用。实验6:利用 Chipscope 工具

6、来抓取设计内部信号:Core Insert 和 Core Instantiation。案例:序列检测器、门锁代码。6)EDK 概述:介绍 Xilinx 嵌入式处理器的组成和嵌入式设计流程,描述 XPS 硬件平台管理和 SDK 软件平台管理。基本系统创建器(BSB):详细描述如何使用 BSB 创建一个硬件平台。使用 SDK 进行软件开发:熟悉SDK 开发工具的使用环境,使用 SDK 创建一个应用工程并进行编译纠错。实验 7:简单硬件设计。利用 Xilinx Platform Studio(XPS)创建一个简单的处理器系统。实验 8:写基本的软件应用程序。添加一个 XPS Bram 控制器并修改链

7、接脚本以在 Bram 中放置文本信息。生成 bit文件并下载,验证是否正确。案例:交通灯、RS232串口实验。7)总线介绍:了解不同总线的结构及在 MircoBlaze 处理器中的可用的不同总线。AXI介绍:了解AXI的概念、读写操作及AXI与PLB v46的不同,以及AXI的一些使用案例。中断:了解硬件中断和 MicroBlaze 处理器的中断,以及中断的组成。案例:GCD 算法分析8)添加硬件到嵌入式系统中:介绍EDK里包含的IP,如何添加硬件到嵌入式系统中并修改MHS 文件,也将介绍 PlatGen的功能及其使用。处理器基础:介绍 MicroBlaze 处理器系统的基本组成模块,存储空间

8、的使用,如何添加复位模块和时钟生成器,并如何添加 JTAG 接口来做配置。处理器系统接口:介绍 MicroBlaze 处理器的接口, 主要详细描述了 GPIO 和 AXI 接口。实验 9:添加 IP 到硬件设计中。使用 XPS 添加 GPIO 外设到已经存在的嵌入式系统,生成 bit 文件并验证。案例:整数平方根算法分析9)使用 IPIC 接口创建自己的外设:了解IPIC系统的基本架构及其组成,IPIC的不同信号及其使用,如何生成 IPIC 及其设计技术。使用 IPIC 接口安装自己的外设:如何将自己的 IP 集成到 XPS 上并修改其MPD、PAO、BBD 等文件。添加自己的 IP:介绍如何

9、利用ISE的Project Navigator和EDK的XPS来集成处理器系统。实验 10:添加自己的 IP。使用创建和导入外设向导来添加自己的外设到嵌入式系统中,生成 bit 文件并下载验证。10)系统调试:学习使用 EDK 的调试工具,如何在 SDK 软件调试和 HW/SW 协同调试实验 11: 使用 SDK 进行高级软件编程和软件调试。使用 XPS 添加定时器和中断控制器,利用 SDK 开发中断处理程序并调试。实验 12:硬件/软件系统调试。利用 SDK 调试器和 ChipScope Pro工具进行硬件/软件调试。案例:EDK 综合性实验案例四、实验代码(因为23个案例中,大部分实验的代

10、码老师已经给出,只有RS232串口通信实验的代码是我们自己编写的。为节省篇幅,这里只贴出RS232串口通信实验的代码)1、top模块module my_uart_top(clk,rst_n,rs232_rx,rs232_tx);input clk;/ 50MHz主时钟input rst_n;/低电平复位信号input rs232_rx;/ RS232接收数据信号output rs232_tx;/RS232发送数据信号wire bps_start;/接收到数据后,波特率时钟启动信号置位wire clk_bps;/ clk_bps的高电平为接收或者发送数据位的中间采样点 wire7:0 rx_da

11、ta;/接收数据寄存器,保存直至下一个数据来到wire rx_int;/接收数据中断信号,接收到数据期间始终为高电平/-speed_selectspeed_select(.clk(clk),/波特率选择模块,接收和发送模块复用,不支持全双工通信.rst_n(rst_n),.bps_start(bps_start),.clk_bps(clk_bps);my_uart_rxmy_uart_rx(.clk(clk),/接收数据模块.rst_n(rst_n),.rs232_rx(rs232_rx),.clk_bps(clk_bps),.bps_start(bps_start),.rx_data(rx_

12、data),.rx_int(rx_int);my_uart_txmy_uart_tx(.clk(clk),/发送数据模块.rst_n(rst_n),.clk_bps(clk_bps),.rx_data(rx_data),.rx_int(rx_int),.rs232_tx(rs232_tx),.bps_start(bps_start);endmodule2、发送数据模块module my_uart_tx(clk,rst_n,clk_bps,rx_data,rx_int,rs232_tx,bps_start);input clk;/ 50MHz主时钟input rst_n;/低电平复位信号inpu

13、t clk_bps;/ clk_bps的高电平为接收或者发送数据位的中间采样点input7:0 rx_data;/接收数据寄存器input rx_int;/接收数据中断信号,接收到数据期间始终为高电平,在次利用它的下降沿来启动发送数据output rs232_tx;/ RS232发送数据信号output bps_start;/接收或者要发送数据,波特率时钟启动信号置位/-reg rx_int0,rx_int1,rx_int2;/rx_int信号寄存器,捕捉下降沿滤波用wire neg_rx_int;/ rx_int下降沿标志位always (posedge clk or negedge rst

14、_n) beginif(!rst_n) beginrx_int0 <= 1'b0;rx_int1 <= 1'b0;rx_int2 <= 1'b0;endelse beginrx_int0 <= rx_int;rx_int1 <= rx_int0;rx_int2 <= rx_int1;endendassign neg_rx_int = rx_int1 & rx_int2;/捕捉到下降沿后,neg_rx_int拉地保持一个主时钟周期/-reg7:0 tx_data;/待发送数据的寄存器/-reg bps_start_r;reg t

15、x_en;/发送数据使能信号,高有效reg3:0 num;always (posedge clk or negedge rst_n) beginif(!rst_n) beginbps_start_r <= 1'bz;tx_en <= 1'b0;tx_data <= 8'd0;endelse if(neg_rx_int) begin/接收数据完毕,准备把接收到的数据发回去bps_start_r <= 1'b1;tx_data <= rx_data;/把接收到的数据存入发送数据寄存器tx_en <= 1'b1;/进入发送数

16、据状态中endelse if(num=4'd11) begin/数据发送完成,复位bps_start_r <= 1'bz;tx_en <= 1'b0;endendassign bps_start = bps_start_r;/-reg rs232_tx_r;always (posedge clk or negedge rst_n) beginif(!rst_n) beginnum <= 4'd0;rs232_tx_r <= 1'b1;endelse if(tx_en) beginif(clk_bps)beginnum <=

17、num+1'b1;case (num)4'd0:rs232_tx_r <= 1'b0; /发送起始位4'd1:rs232_tx_r <= tx_data0;/发送bit04'd2:rs232_tx_r <= tx_data1;/发送bit14'd3: rs232_tx_r <= tx_data2;/发送bit24'd4: rs232_tx_r <= tx_data3;/发送bit34'd5: rs232_tx_r <= tx_data4;/发送bit44'd6: rs232_tx_r &

18、lt;= tx_data5;/发送bit54'd7:rs232_tx_r <= tx_data6;/发送bit64'd8: rs232_tx_r <= tx_data7;/发送bit74'd9: rs232_tx_r <= 1'b0;/发送结束位 default: rs232_tx_r <= 1'b1;endcaseendelse if(num=4'd11) num <= 4'd0;/复位endendassign rs232_tx = rs232_tx_r;endmodule3、接收数据模块module my

19、_uart_rx(clk,rst_n,rs232_rx,clk_bps,bps_start,rx_data,rx_int);input clk;/ 50MHz主时钟input rst_n;/低电平复位信号input rs232_rx;/ RS232接收数据信号input clk_bps;/ clk_bps的高电平为接收或者发送数据位的中间采样点output bps_start;/接收到数据后,波特率时钟启动信号置位output7:0 rx_data;/接收数据寄存器,保存直至下一个数据来到 output rx_int;/接收数据中断信号,接收到数据期间始终为高电平/-reg rs232_rx0

20、,rs232_rx1,rs232_rx2;/接收数据寄存器,滤波用wire neg_rs232_rx;/表示数据线接收到下降沿always (posedge clk or negedge rst_n) beginif(!rst_n) beginrs232_rx0 <= 1'b1;rs232_rx1 <= 1'b1;rs232_rx2 <= 1'b1;endelse beginrs232_rx0 <= rs232_rx;rs232_rx1 <= rs232_rx0;rs232_rx2 <= rs232_rx1;endendassign

21、neg_rs232_rx = rs232_rx2 & rs232_rx1;/接收到下降沿后neg_rs232_rx置高一个时钟周期/-reg bps_start_r;reg3:0num;/移位次数reg rx_int;/接收数据中断信号,接收到数据期间始终为高电平always (posedge clk or negedge rst_n) beginif(!rst_n) beginbps_start_r <= 1'bz;rx_int <= 1'b0;endelse if(neg_rs232_rx) beginbps_start_r <= 1'b1

22、;/启动接收数据 rx_int <= 1'b1;/接收数据中断信号使能endelse if(num=4'd12) beginbps_start_r <= 1'bz;/数据接收完毕rx_int <= 1'b0;/接收数据中断信号关闭endend assign bps_start = bps_start_r;/-reg7:0 rx_data_r;/接收数据寄存器,保存直至下一个数据来到/-reg7:0rx_temp_data;/但前接收数据寄存器reg rx_data_shift;/数据移位标志always (posedge clk or nege

23、dge rst_n) beginif(!rst_n) beginrx_data_shift <= 1'b0;rx_temp_data <= 8'd0;num <= 4'd0;rx_data_r <= 8'd0;endelse if(rx_int) begin/接收数据处理if(clk_bps) begin/读取并保存数据,接收数据为一个起始位,8bit数据,一个结束位rx_data_shift <= 1'b1;num <= num+1'b1;if(num<=4'd8) rx_temp_data7

24、<= rs232_rx;/锁存9bit(1bit起始位,8bit数据)endelse if(rx_data_shift) begin/数据移位处理rx_data_shift <= 1'b0;if(num<=4'd8) rx_temp_data <= rx_temp_data >> 1'b1;/移位8次,第1bit起始位移除,剩下8bit正好时接收数据else if(num=4'd12) beginnum <= 4'd0;/接收到STOP位后结束,num清零rx_data_r <= rx_temp_data;

25、/把数据锁存到数据寄存器rx_data中endend endendassign rx_data = rx_data_r;endmodule4、波特率选择模块module speed_select(clk,rst_n,bps_start,clk_bps);input clk;/ 50MHz主时钟input rst_n;/低电平复位信号input bps_start;/接收到数据后,波特率时钟启动信号置位output clk_bps;/ clk_bps的高电平为接收或者发送数据位的中间采样点 parameter bps9600 = 5207,/波特率为9600bps bps19200 = 2603

26、,/波特率为19200bpsbps38400 = 1301,/波特率为38400bpsbps57600 = 867,/波特率为57600bpsbps115200= 433;/波特率为115200bpsparameter bps9600_2 = 2603,bps19200_2= 1301,bps38400_2= 650,bps57600_2= 433,bps115200_2 = 216; reg12:0 bps_para;/分频计数最大值reg12:0 bps_para_2;/分频计数的一半reg12:0 cnt;/分频计数reg clk_bps_r;/波特率时钟寄存器/-reg2:0 uart

27、_ctrl;/ uart波特率选择寄存器/-always (posedge clk or negedge rst_n) beginif(!rst_n) begin uart_ctrl <= 3'd0;/默认波特率为9600bpsendelse begincase (uart_ctrl)/波特率设置3'd0:beginbps_para <= bps9600;bps_para_2 <= bps9600_2;end3'd1:beginbps_para <= bps19200;bps_para_2 <= bps19200_2;end3'd2

28、:beginbps_para <= bps38400;bps_para_2 <= bps38400_2;end3'd3:beginbps_para <= bps57600;bps_para_2 <= bps57600_2;end3'd4:beginbps_para <= bps115200;bps_para_2 <= bps115200_2;enddefault: ;endcaseendendalways (posedge clk or negedge rst_n)if(!rst_n) cnt <= 13'd0;else if(

29、cnt<bps_para && bps_start) cnt <= cnt+1'b1;/波特率时钟计数启动else cnt <= 13'd0;always (posedge clk or negedge rst_n)if(!rst_n) clk_bps_r <= 1'b0;else if(cnt=bps_para_2 && bps_start) clk_bps_r <= 1'b1;/ clk_bps_r高电平为接收或者发送数据位的中间采样点 else clk_bps_r <= 1'b0;

30、assign clk_bps = clk_bps_r;endmodule5、test文件module test;/ Inputsreg clk;reg rst_n;reg rs232_rx; reg 7:0 tx_data;wire 7:0 rx_data; reg bps_start;/ Outputswire rs232_tx;/ Instantiate the Unit Under Test (UUT)my_uart_top uut (.clk(clk), .rst_n(rst_n), .rs232_rx(rs232_rx), .rs232_tx(rs232_tx);initial be

31、gin/ Initialize Inputsclk = 0;rst_n = 1;tx_data=0; bps_start=0;#54 rst_n = 0; #70 rst_n = 1; #40 bps_start = 1'b1; #10 tx_data = 8'b11011001; #100 bps_start = 1'b0;end always begin #30 clk=clk;#10 clk=clk;endendmodule五、个人感悟在为期10天的FPGA设计实训中,我学到了有关FPGA设计的更深层次的知识,熟悉了其设计流程,并逐步掌握了使用Xilinx ISE

32、工具来进行设计的过程。在老师进行讲解的过程中,我深深的体会到之前学习的知识的单薄,必须要有实践与其结合,才能对其真正的理解并达到灵活运用的层次。在大三上学期的FPGA设计课程中,我们就曾经接触过类似的实验课,但是当时只是觉得很抽象,而且仅仅只是停留在编写代码,完成实验,仿真得到波形图而已,并没有真正领悟到什么是真正可行的,可综合的设计。而在这次实训中,我逐步认识到FPGA设计的内涵和实践意义,它并不仅仅只是停留在实验室里的仿真模型,它更是广泛应用于各个领域的一门实用性的开发技术。它要求我们不仅要熟练掌握Verilog语言编程的技巧,还要深刻体会什么样的代码风格是适于综合的,是最优化的方案。并且

33、,要使其成为可用的设计,还必须完成一系列复杂设计。而通过使用ISE 工具,我们可方便的使用结构向导例化各种模块、使用PlanAhead工具进行管脚规划和用约束编辑器来添加约束等等。这些都使我们朝着灵活应用所学知识又进了一步。六、教师评语签名:日期:成绩实验二 版图提取一、实验目的及要求本实验要求学生独立对给定的CMOS数字集成电路单元版图,完成电路的反向提取、绘制整理和功能分析等工作。通过对CMOS数字集成电路单元版图的反向提取实验,锻炼和提高了学生对半导体器件和数字集成电路版图的认知能力和对电路整理与结构优化技能,培养学生对数字集成电路反向设计思想的理解,加强了学生灵活运用所学“半导体物理”

34、、“场效应器件物理”、“数字集成电路设计”和“集成电路制造技术”等理论知识的能力。二、背景知识与资料搜集逆向设计传统上被称为“自底向上”的设计方法,也称为反向设计。“反向设计”的提法似乎让人很容易与侵犯别人知识产权产生联系,实际上逆向设计与正向设计一样,只是IC设计的一种技术手段,通过逆向设计获取别人先进的设计思想用于自己的芯片设计中,并不能说侵犯知识产权。特别是对于初学IC设计的人员,通过学习和研究比较成熟的电路版图,可以迅速增加相关电路设计经验,更快熟悉整个IC设计流程和完善IC设计知识体系。       目前中国的IC

35、设计业还处在学习模仿国外的阶段,早在几年前中国的IC设计企业往往是完全复制国外的芯片。最近几年,随着人们对知识产权意识的提高,都能够采取正确的方式来对待逆向设计,即利用逆向设计来设计自己的芯片。逆向设计流程与正向设计正好相反,从流程上来讲,首先要去掉芯片的封装,然后对芯片进行层层剥离,对剥离出来的芯片进行拍照和分析。随着芯片复杂度的提高,简单的拍照已经不能对芯片进行有效的分析,芯愿景公司推出了Chiplogic软件,其它逆向设计公司也推出了自己的逆向软件,利用软件方来实现对芯片的分析,大大提高了分析的效率。       &#

36、160;逆向设计非常适合模拟芯片设计,如ADC、DAC、锁相环等模拟电路,因为模拟电路的设计往往靠经验。此外,对于10万门以下的数字电路也适合,对于混合信号电路来讲,可以适合模拟部分的反向设计服务。在时间方面,普通的逆向设计往往需要3-5个月,而小于10万门的数字电路逆向设计一般需要2-3个月。三 、逆向设计流程 1、 腐蚀 塑料封装外壳的腐蚀,可看到第一层金属层。一般采用98%的硫酸加热蒸煮,根据不同塑封料可能会用到浓硝酸。金属铝层的腐蚀,采用热磷酸,可看到多晶和有源区。有多层金属时,去除一层金属后需要用氢氟酸去二氧化硅。去多晶硅,染色看显现P阱和N阱。其它细节处理,纵向结构解剖(SEM扫描电镜/TEM透射电镜或掺杂浓度曲线测试,一般需要IC解剖不作,都是标准工艺,分立器件一般需要做)。2、照

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论