《电子系统仿真与实现结题报告.docx》由会员分享,可在线阅读,更多相关《电子系统仿真与实现结题报告.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Harbin Institute of Technology电子系统方针与实现结题报告题 目:基于FPGA和SystemVue的模拟/数字混合系统设计与实现一 研究内容本设计使用了HDL和IP核设计技术实现了一个完整的ISE设计流程,在系统调试阶段,使用SystemVue对系统进行调试和验证。设计的主要研究内容为模拟转数字系统的实现,即通过运算放大器对交流信号进行放大,通过模/数转换器ADC,将模拟信号转换成数字信号,并在FPGA内经过运算处理后,得到所测量模拟信号的频率和幅度信息,并将这个信息显示在7段数码管上。二 基本原理及框图下图即为基于FPGA和SystemVue的模拟转数字系统的实现
2、原理图。虚线内为FPGA内部完成的逻辑,使用Verilog语言编写。 FPGA主要实现的功能包括:(1) 分频器模块将外部提供的100MHz晶振时钟进行分频,为下列模块提供时钟驱动:1. 给串行ADC控制器提供驱动时钟;2. 给频率和幅度测量单元提供驱动时钟;3. 给7段数码管驱动显示逻辑提供驱动时钟。(2) 串行ADC控制器模块完成的功能包括:1. 为串行ADC提供驱动时钟和片选信号;2. 将ADC输出的串行数据转换成并行数据。(3) 频率和幅度测量单元模块主要完成的功能包括:1. 测量输入串行ADC的正弦模拟信号的频率值,并且将测量的频率值转换成BCD码;2. 测量输入串行ADC的正弦模拟
3、信号的幅度值,并且将测量的幅度值转换成BCD码。(4) 2选1多路复用器,根据外部提供的选择信号,选择在7段数码管上显示幅度值或频率值。(5) 7段数码管驱动显示逻辑的功能包括:1. 提供7段数码管扫描电路2. 控制频率或幅度值正确的显示。从FPGA实现的功能可以看出,最重要的部分即串行ADC控制器模块,该模块功能是否正确执行关系到整个系统的可靠性,因此需要对该模块进行反复的测试与验证,从而达到设计要求。本设计采用SystemVue软件的HDL和Modelsim联合仿真功能对该设计进行仿真验证。具体的实现流程为:在元件库中选择硬件设计(Hardware Design),在硬件设计库中找到HDL
4、 Cosimulation模块并且将其添加到原理图中,双击该模块,将Verilog设计的所有子模块封装起来,这样会创建一个与设计的Verilog语言描述的功能完全一样的模块。连接好各模块并放置好信号源、接收器等后,点击Run Analyses,SystemVue会自动编译VHDL代码并调用Modelsim,所有在顶层实体的信号也将被添加到的ModelSim波形文件中,这样我们就可以观察仿真结果是否正确,从而验证程序的正确性。三 设计流程为保证串行ADC控制器模块设计功能的正确性,使用SystemVue中HDL联合Modelsim平台对该设计进行功能验证,在波形窗口上分析运行后的结果,对比采样得
5、到的数据和转换后的并行数据是否符合设计要求。根据设计要求,FPGA内部逻辑采用状态机模式编写,下图为状态转换图:按照上图,完成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; /
6、 General usagewire SCLK; / User interface signalsreg nCS; reg 11:0 DATA1; 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_
7、counter; reg 3:0 shiftCounter; reg enShiftCounter; reg enParalelLoad; / -always (posedge RST or posedge CLK) begin : clock_divide if (RST = 1b 1) begin clk_counter = 3b 000; end else begin clk_counter = clk_counter + 1b 1; end endassign clk_div = clk_counter2; assign SCLK = clk_counter2; / -always (
8、posedge clk_div) begin : counter if (enShiftCounter = 1b 1) begin temp1 = temp114:0, SDATA1; temp2 = temp214:0, SDATA2; shiftCounter = shiftCounter + 1b 1; end else if (enParalelLoad = 1b 1 ) begin shiftCounter = 4b 0000; DATA1 = temp111:0; DATA2 = temp211:0; end end/ - always (posedge clk_div) begi
9、n : SYNC_PROC if (RST = 1b 1) begin current_state = states_Idle; end else begin current_state = next_state; end endalways (current_state) begin : OUTPUT_DECODE if (current_state = states_Idle) begin enShiftCounter = 1b 0; DONE = 1b 1; nCS = 1b 1; enParalelLoad = 1b 0; end else if (current_state = st
10、ates_ShiftIn ) begin enShiftCounter = 1b 1; DONE = 1b 0; nCS = 1b 0; enParalelLoad = 1b 0; / if current_state = SyncData then end else begin enShiftCounter = 1b 0; DONE = 1b 0; nCS = 1b 1; enParalelLoad = 1b 1; end endalways (current_state or START or shiftCounter) begin : NEXT_STATE_DECODE next_sta
11、te = current_state; / default is to stay in current state case (current_state) states_Idle: begin if (START = 1b 1) begin next_state = states_ShiftIn; end end states_ShiftIn: begin if (shiftCounter = 4h F) begin next_state = states_SyncData; end end states_SyncData: begin / if (START = 1b 0) / begin
12、 next_state = states_Idle; end end / default: begin next_state = states_Idle; end endcase endendmodule / module AD1接下来进行SystemVue模拟,在元件库中选择硬件设计(Hardware Design),在硬件设计库中找到HDL Cosimulation模块并且将其添加到原理图中,双击该模块,如下图所示将写好的Verilog代码添加到模块中并添加引脚。值得注意的是,时钟信号clk可以不特意添加,使用SystemVue自带时钟会使设计更加简单,添加方法为在HDL Settings
13、选项卡下的Optional Settings中添加clk时钟,其周期即为上方Iteration time中所添加的时间。设置完成后,点击OK选项,即生成了与所编译的Verilog语言功能完全一致的HDL模块,如下图所示:如下图所示为原理图的START输入信号部分,由一个方波信号发生器SquareGen组成;由于HDL模块的输入数据类型必须为fix,故添加一个数据类型转换器FloatToFxp,该转换器的功能是将方波信号发生器SquareGen发出的方波信号(数据类型为实信号real)转换为fix类型,可以作为HDL模块的输入:如下图所示为串行数据SDATA1和SDATA2的输入端,由一个随机数发生器RandomBits和一个数据类型转换器FloatToFxp组成;如下图所示为HDL模块清零使能RST信号的输入端,在本设计中默认为高电平。最后,在输出端口添加接收器Sink,完成整个电路的设计,如下图所示:四 仿真结果与分析进行串并转换后的仿真结果如下图所示:可以看出该模块将串行输入数据转化为12位的并行数据,之后可以再进行各种数据处理,如计算输入数据的幅度值和频率等,这些就较为简单且不再属于SystemVue的范畴,故略去。