电子系统仿真与实现结题报告

上传人:飞*** 文档编号:3507435 上传时间:2017-08-06 格式:DOCX 页数:11 大小:697.53KB
返回 下载 相关 举报
电子系统仿真与实现结题报告_第1页
第1页 / 共11页
电子系统仿真与实现结题报告_第2页
第2页 / 共11页
电子系统仿真与实现结题报告_第3页
第3页 / 共11页
电子系统仿真与实现结题报告_第4页
第4页 / 共11页
电子系统仿真与实现结题报告_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《电子系统仿真与实现结题报告》由会员分享,可在线阅读,更多相关《电子系统仿真与实现结题报告(11页珍藏版)》请在金锄头文库上搜索。

1、Harbin Institute of Technology电子系统 方针与实现 结 题报告题 目:基于 FPGA 和 SystemVue 的模拟/数字混合系统设计与实现一 研究内容本设计使用了 HDL 和 IP 核设计技术实现了一个完整的 ISE 设计流程,在系统调试阶段,使用 SystemVue 对系统进行调试和验证。设计的主要研究内容为模拟转数字系统的实现,即通过运算放大器对交流信号进行放大,通过模/数转换器 ADC,将模拟信号转换成数字信号,并在FPGA 内经过运算处理后,得到所测量模拟信号的频率和幅度信息,并将这个信息显示在 7 段数码管上。二 基本原理及框图下图即为基于 FPGA

2、和 SystemVue 的模拟转数字系统的实现原理图。虚线内为 FPGA 内部完成的逻辑,使用 Verilog 语言编写。串 行 ADC串 行 ADC控 制 器( 数 据 串 /并 转 换 ) 频 率 和 幅 度测 量 单 元二 择 一 系 统7段 数 码 管 驱 动显 示 逻 辑7段 数 码 管分 频 器时 钟 片 选 数 据电 动 机 速 度 传 感 器 电 压 信 号10MHz 1MHz 并 行 数 据幅度 频率FPGAFPGA 主要实现的功能包括:(1) 分频器模块将外部提供的 100MHz 晶振时钟进行分频,为下列模块提供时钟驱动:1. 给串行 ADC 控制器提供驱动时钟;2. 给频

3、率和幅度测量单元提供驱动时钟;3. 给 7 段数码管驱动显示逻辑提供驱动时钟。(2) 串行 ADC 控制器模块完成的功能包括:1. 为串行 ADC 提供驱动时钟和片选信号;2. 将 ADC 输出的串行数据转换成并行数据。(3) 频率和幅度测量单元模块主要完成的功能包括:1. 测量输入串行 ADC 的正弦模拟信号的频率值,并且将测量的频率值转换成 BCD 码;2. 测量输入串行 ADC 的正弦模拟信号的幅度值,并且将测量的幅度值转换成 BCD 码。(4) 2 选 1 多路复用器,根据外部提供的选择信号,选择在 7 段数码管上显示幅度值或频率值。(5) 7 段数码管驱动显示逻辑的功能包括:1. 提

4、供 7 段数码管扫描电路2. 控制频率或幅度值正确的显示。从 FPGA 实现的功能可以看出,最重要的部分即串行 ADC 控制器模块,该模块功能是否正确执行关系到整个系统的可靠性,因此需要对该模块进行反复的测试与验证,从而达到设计要求。本设计采用 SystemVue 软件的 HDL 和Modelsim 联合仿真功能对该设计进行仿真验证。具体的实现流程为:在元件库中选择硬件设计(Hardware Design),在硬件设计库中找到 HDL Cosimulation 模块并且将其添加到原理图中,双击该模块,将 Verilog 设计的所有子模块封装起来,这样会创建一个与设计的 Verilog 语言描述

5、的功能完全一样的模块。连接好各模块并放置好信号源、接收器等后,点击 Run Analyses,SystemVue 会自动编译 VHDL 代码并调用 Modelsim,所有在顶层实体的信号也将被添加到的 ModelSim 波形文件中,这样我们就可以观察仿真结果是否正确,从而验证程序的正确性。三 设计流程为保证串行 ADC 控制器模块设计功能的正确性,使用 SystemVue 中 HDL联合 Modelsim 平台对该设计进行功能验证,在波形窗口上分析运行后的结果,对比采样得到的数据和转换后的并行数据是否符合设计要求。根据设计要求,FPGA 内部逻辑采用状态机模式编写,下图为状态转换图:按照上图,

6、完成 Verilog 程序的编写,程序代码如下:module ad (CLK,RST,SDATA1,SDATA2,SCLK,nCS,DATA1,DATA2,START,DONE);input CLK; input RST; input SDATA1; input SDATA2; output SCLK; output nCS; output 11:0 DATA1; output 11:0 DATA2; input START; output DONE; / General usagewire SCLK; / User interface signalsreg nCS; reg 11:0 DAT

7、A1; reg 11:0 DATA2; reg DONE; / TYPE states:parameter states_Idle = 0;parameter states_ShiftIn = 1;parameter states_SyncData = 2;reg 1:0 current_state; reg 1:0 next_state; reg 15:0 temp1; reg 15:0 temp2; wire clk_div; reg 2:0 clk_counter; reg 3:0 shiftCounter; reg enShiftCounter; reg enParalelLoad;

8、/ -always (posedge RST or posedge CLK)begin : clock_divideif (RST = 1b 1)beginclk_counter = 3b 000; endelsebeginclk_counter = clk_counter + 1b 1; endendassign clk_div = clk_counter2; assign SCLK = clk_counter2; / -always (posedge clk_div)begin : counterif (enShiftCounter = 1b 1)begintemp1 = temp114:

9、0, SDATA1; temp2 = temp214:0, SDATA2; shiftCounter = shiftCounter + 1b 1; endelse if (enParalelLoad = 1b 1 )beginshiftCounter = 4b 0000; DATA1 = temp111:0; DATA2 = temp211:0; endend/ - always (posedge clk_div)begin : SYNC_PROC if (RST = 1b 1)begincurrent_state = states_Idle; endelsebegincurrent_stat

10、e = next_state; endendalways (current_state)begin : OUTPUT_DECODEif (current_state = states_Idle)beginenShiftCounter = 1b 0; DONE = 1b 1; nCS = 1b 1; enParalelLoad = 1b 0; endelse if (current_state = states_ShiftIn )beginenShiftCounter = 1b 1; DONE = 1b 0; nCS = 1b 0; enParalelLoad = 1b 0; / if curr

11、ent_state = SyncData thenendelsebeginenShiftCounter = 1b 0; DONE = 1b 0; nCS = 1b 1; enParalelLoad = 1b 1; endendalways (current_state or START or shiftCounter)begin : NEXT_STATE_DECODEnext_state = current_state; / default is to stay in current statecase (current_state)states_Idle:begin if (START =

12、1b 1)beginnext_state = states_ShiftIn; endendstates_ShiftIn:beginif (shiftCounter = 4h F)beginnext_state = states_SyncData; endendstates_SyncData:begin /if (START = 1b 0) /beginnext_state = states_Idle; endend /default:beginnext_state = states_Idle; endendcaseendendmodule / module AD1接下来进行 SystemVue

13、 模拟,在元件库中选择硬件设计( Hardware Design),在硬件设计库中找到 HDL Cosimulation 模块并且将其添加到原理图中,双击该模块,如下图所示将写好的 Verilog 代码添加到模块中并添加引脚。值得注意的是,时钟信号 clk 可以不特意添加,使用 SystemVue 自带时钟会使设计更加简单,添加方法为在 HDL Settings 选项卡下的 Optional Settings 中添加clk 时钟,其周期即为上方 Iteration time 中所添加的时间。设置完成后,点击 OK 选项,即生成了与所编译的 Verilog 语言功能完全一致的 HDL 模块,如下

14、图所示:如下图所示为原理图的 START 输入信号部分,由一个方波信号发生器SquareGen 组成;由于 HDL 模块的输入数据类型必须为 fix,故添加一个数据类型转换器 FloatToFxp,该转换器的功能是将方波信号发生器 SquareGen 发出的方波信号(数据类型为实信号 real)转换为 fix 类型,可以作为 HDL 模块的输入:如下图所示为串行数据 SDATA1 和 SDATA2 的输入端,由一个随机数发生器 RandomBits 和一个数据类型转换器 FloatToFxp 组成;如下图所示为 HDL 模块清零使能 RST 信号的输入端,在本设计中默认为高电平。最后,在输出端口添加接收器 Sink,完成整个电路的设计,如下图所示:四 仿真结果与分析进行串并转换后的仿真结果如下图所示:可以看出该模块将串行输入数据转化为 12 位的并行数据,之后可以再进行各种数据处理,如计算输入数据的幅度值和频率等,这些就较为简单且不再属于 SystemVue 的范畴,故略去。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 调研报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号