您的当前位置:首页正文

武汉理工大学EDA实验原理图输入法输入的4位全加器和Verilog HDL语言输入的16进制频率计

来源:画鸵萌宠网
序号(学号): 0121009310106

学生实验报告书

实验类别 EDA实验

学 院 信息工程学院 专 业 班 级

通信工程 信息SY1001班

姓 名 龙涛 指导教师 聂明新

2012 年

12

30

实验课程名称:EDA技术与应用

实验项目名称 实 验 者 同 组 者 原理图输入法设计4位全加器实验 实验成绩 组 别 实验日期 04 2012.12.30 龙涛 专业班级 信息sy1001 一、实验目的 1.进一步加深理解全加器的工作原理及电路组成,加深对EDA技术的掌握。 2.熟悉利用Quartus Ⅱ的原理图输入方法设计简单组合电路,掌握层次化设计的方法,并通过一个四位全加器的设计把握利用EDA软件进行原理图输入方式设计的详细流程。 二、实验内容 实验内容1:完成半加器和1位全加器的设计,包括用原理图输入,编译,综合,适配,仿真,实验板上的硬件测试,并将此全加器电路设置成一个元件符号入库。 实验内容2:建立一个更高层次的原理图,利用以上获得的1位全加器构成4位全加器,并完成编译,综合,适配,仿真和硬件测试。 三、实验仪器 1.计算器及操作系统 2.Quartus II软件 四、实验原理 1、半加器描述 半加器真值表如表一所示: a 0 0 1 1 b 0 1 0 1 so 0 1 1 0 Co 0 0 0 1 表1半加器h_adder真值表 co表示输出进位位,输入a和b分别表示加数和被加数。so为输出和,其功能可用布尔代数式表示为: soabcoa&b 因此1个半加器可以由一个与门,一个非门和一个同或门构成,然后用Quartus II软件画出电路图如图1所示 图1 半加器h_adder电路图 2、1位全加器描述 一位全加器可以由两个半加器和一个或门连接而成,因而可以调用半加器元件来设计1位全加器。 图2 1位全加器电路图 3、4位全加器设计描述 一个4位全加器可以由4个1位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout与相邻的高位加法器的最低进位输入信号cin相接。 首先根据半加器的布尔代数式应用基本逻辑门设计半全加器,而后仿真验证半加器设计,准确无误后生成元件,供一位全加器设计用。再调用半加器元件设计一位全加器,而后仿真验证一位全加器设计,准确无误后生成元件,供4位全加器设计用。将4个1位全加器级联构成四位全加器。 五、实验步骤 1、为本项工程设计建立文件夹 :文件夹取名为adder,路径为d:\\adder。 2、建立原理图文件工程和仿真 原理图编辑输入流程如下: 1) 打开原理图编辑窗。打开QuartusⅡ,选菜单File→new,选择原理图文件编辑输入项Block Diagram/Schematic File,按OK键。 2) 建立一个初始化原理图。在编辑窗口点击右键,在弹出菜单中选择输入元件项Insert→Symbol,将元件调入原理图编辑窗口中 3) 原理图文件存盘。选择菜单File→Save As,将此原理图存于刚才建立的目录d:\\adder中,取名为h_adder.bdf。 4) 建立原理图文件为顶层设计工程。然后将此文件h_adder.bdf设定为工程。 5) 绘制半加器原理图。将元件放入原理图编辑窗口,按图1接好电路。 6) 仿真测试半加器。全程编译后,打开波形编辑器。选择File→new命令,在New窗口中选择Vector Waveform File选项。设置仿真时间区域,编辑输入波形,仿真器参数设置,启动仿真器,观察仿真结果。 3、将设计项目(一位半加器)设置成可调用的元件 为了构成全加器的顶层设计,必须将以上设计的半加器h_adder.bdf设置成课调用的底层元件。在半加器原理图文件处于打开的情况下,选择菜单File→Create/Update→Create Symbol Files for Current File,即可将当前电路图变成一个元件符号存盘,以便在高层次设计中调用。 图3 半加器示意图 4、设计全加器顶层文件 为了建立全加器顶层文件,必须打开一个原理图编辑窗口,方法同前。 1) 选择菜单File→new→Block Diagram/Schematic File,将其设置成新的工程,命名为f_adder.bdf。 2) 在打开的原理图编辑窗口中,双击鼠标,选择Project下先前生成的元件h_adder和若干元器件,按图2连接好一位全加器电路图。 3) 仿真测试全加器。全程编译后,打开波形编辑器。选择File→new命令,在New窗口中选择Vector Waveform File选项。设置仿真时间区域,编辑输入波形,仿真器参数设置,启动仿真器,观察仿真结果。 5、将设计项目(一位全加器)设置成可调用的元件 为了构成4位全加器的顶层设计,必须将以上设计的全加器f_adder.bdf设置成课调用的底层元件。在全加器原理图文件处于打开的情况下,选择菜单File→Create/Update→Create Symbol Files for Current File,即可将当前电路图变成一个元件符号存盘,以便在高层次设计中调用。 图4 一位全加器示意图 6、四位全加器设计 为了建立4位全加器顶层文件,必须再打开一个原理图编辑窗口,方法同前。 1) 选择菜单File→new→Block Diagram/Schematic File,将其设置成新的工程,命名为adder4b.bdf。 2) 在打开的原理图编辑窗口中,双击鼠标,选择Project下先前生成的元件f_adder和若干元器件,连接好4位全加器电路图。 3)仿真测试全加器。全程编译后,打开波形编辑器。选择File→new命令,在New窗口中选择Vector Waveform File选项。设置仿真时间区域,编辑输入波形, 仿真器参数设置,启动仿真器,观察仿真结果。 六、实验结果与分析 1.半加器仿真波形 图5 半加器仿真波形 由仿真波形分析可得,当a,b输入全0时,co=0,so=0;当a=0,b=1时,co=0,so=1;当a=1,b=0时,co=0,s0=1;当a,b全1时,co=1,so=0。仿真结果与半加器真值表表1相同,半加器设计成功。 2. 一位全加器的仿真波形图 图6 一位全加器的RTL图 图7 一位全加器的仿真波形图 由仿真波形分析可得,当ain,bin,cin为全0时,cout=0,sum=0;当ain=0,bin=0,cin=1时,cout=0;sum=1; 当ain=0,bin=1,cin=0时,cout=0;sum=1; 当ain=0,bin=1,cin=1时,cout=1;sum=0; 当ain=1,bin=0,cin=0时,cout=0;sum=1; 当ain=1,bin=0,cin=1时,cout=1;sum=0; 当ain=1,bin=1,cin=0时,cout=1;sum=0; 当ain,bin,cin为全1时,cout=1,sum=1。 由此可得仿真波形与实际一位全加器输出一致。 3.四位全加器仿真波形 图8四位全加器RTL 图9 四位全加器仿真波形 由仿真波形分析可得,当A0,A1,A2,A3,B0,B1,B2,B3,C0为全0时,COUT=0,D0=0,D1=0,D2=0,D3=0;当A0=0,A1=0,A2=0,A3=0,B0=0,B1=0,B2=0,B3=0,C0=1时,COUT=0,D0=1,D1=0,D2=0,D3=0; 当A0=0,A1=0,A2=0,A3=0,B0=0,B1=1,B2=0,B3=0,C0=1时,COUT=0,D0=0,D1=1,D2=0,D3=0; 当A0=0,A1=0,A2=0,A3=0,B0=1,B1=0,B2=1,B3=0,C0=1时,COUT=0,D0=0,D1=1,D2=1,D3=0;其他输入分析同理,只分析前4组。可得,仿真波形结果与实际四位全加器输出结果相同。 附录 四位全加器原理图: 设计四位全加器流程图: 开始 设计半加器 设计一位全加器 设计四位全加器 结束 实验课程名称:EDA技术与应用

实验项目名称 实 验 者 同 组 者 16进制频率计实验 龙涛 实验成绩 04 专业班级 信息sy1001 组 别 实验日期 2012.12.30 一、实验目的 1.掌握计数器的基本原理,进一步加深对频率计数器工作原理及电路组成的理解与掌握。 2.熟悉Verilog HDL文本输入法的使用方法,掌握更复杂的EDA设计技术流程和数字系统设计方法,完成8位十六进制频率计的设计。 二、实验仪器 1.计算机及操作系统 2.Quartus II软件 三、实验原理 1.根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1s的输入信号脉冲计数允许的信号;一秒结束后,计数器被锁入锁存器,计数器清零,为下一测频计数周期做好准备。测频控制信号可以由一个独立的发生器来产生。 2. 测频电路的使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计中的32位二进制计数器的ENABL使能进行同步控制。 当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前一秒钟的计数值锁存进各锁存器中。设置锁存器的好处是数据显示稳定,不会由于周期性的清零信号而不断闪烁。锁存信号后,必须有清零信号RST_CNT对计数器进行清零,为下一秒的计数操作准备。 四、实验内容 1.测频控制电路: 设计频率计的关键是设计一个测频率控制信号发生器,产生测量频率的控制时序。控制时钟信号clk周期取为2ms,经过1000分频后便可以产生周期为2s的时钟CNT_EN,此作为计数闸门信号。当CNT_EN为高电平时,允许计数;当CNT_EN由高电平变为低电平(下降沿到来)时,应产生一个锁存信号,将计数值保存起来;锁存数据后,还要在下次CNT_EN上升沿到来之前产生清零信号RST_CNT,将计数器清零,为下次计数作准备。 2 .32位锁存器: 设置锁存器的作用是显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存器的位数应跟计数器完全一样。 3.计数器: 计数器以待测信号作为时钟,清零信号CLR到来时,异步清零; CNT_EN为高电平时开始计数。 五、实验步骤 1.建立工作库文件夹和编辑设计文件 1)新建一个文件夹。首先利用Windows资源管理器,新建一个文件夹。 2)输入源程序。打开QuartusⅡ,选择File→new命令,在New窗口中的Design File栏选择编辑文件的语言类型,这里选择Verilog HDL File选项。然后在Verilog HDL文本编译窗口中输入以下Verilog HDL程序。 3)文件存盘。 2.创建工程 选择File→new Project Wizard命令建立工程,将设计文件加入工程中。 3.编译前设置 在对工程进行编译处理前必须给予必要的设置和约束。 4.全程编译 选择Processing→Start Compilation命令,启动全程编译。 5.时序仿真 打开波形编辑器,选择File→new命令,在New窗口中选择Vector Waveform File选项。设置仿真时间区域,编辑输入波形,仿真器参数设置,启动仿真器,观察仿真结果。 ①测频控制电路程序如下: module div(CNT_EN,CLK,LOAD,RST_CNT); input CLK; output CNT_EN, LOAD,RST_CNT; reg CNT_EN, LOAD,RST_CNT; integer i,j; always @(posedge CLK) begin if(i==499) begin CNT_EN=~CNT_EN;LOAD=~LOAD;RST_CNT=~RST_CNT; i=0;end else i=i+1; end endmodule 图1 测频控制电路的RTL图 图2测频控制电路元件图 ②32位锁存器程序如下: module locker(LOCK,DIN,QOUT); input LOCK; //锁存脉冲,下降沿有效。 input[31:0] DIN; //锁存值输入。 output[31:0] QOUT; //锁存值。 reg[31:0] QOUT; always @(negedge LOCK) begin if(!LOCK) QOUT =DIN; else QOUT = QOUT; end endmodule 图3 32位锁存器的RTL图 图4 32位锁存器元器件图 ③计数器程序如下: module counter(CLR,F_IN,q,ENABL); input CLR,F_IN, ENABL; output [31:0]q; reg [31:0]q; always @(posedge F_IN ) begin if(!CLR) q[31:0]=0; else if(ENABL) begin if(q[31:0]==32'Hffffffff) q[31:0]=0; else q[31:0]=q[31:0]+1; end else q=0; end endmodule 图5 32位计数器的元器件图 4 频率计顶层文件设计 频率计顶层设计用原理图的输入方式,前面已经创建了div,counter,locker三个底层文件,调用它们创建频率计顶层文件的原理图。 图6 8位十六进制频率计RTL图 六. 实验结果及分析 1.测频控制电路仿真波形: 图7测控控制电路时序仿真图 由仿真波形分可得,当系统时钟CLK设定为2ms,经过1000分频后便可以产生周期为2s的闸门信号CNT_EN,锁存信号LOAD,清零信号CLR。仿真波形输出与实际要求相符合。 2 .32位锁存器仿真波形: 图8 32位锁存器的时序仿真图 由仿真波形分析可得,采用周期为2s的LOCK信号的下降沿对计数模块的计数结果进行锁存,在仿真中LOCK信号第一个高电平期间,DIN=277FEDD4,在LOCK信号下降沿到来时,QOUT输出为277FEDD4,可见DIN信号锁存到了QOUT端。LOCK信号的第二个高电平期间分析同理。可见,在锁存模块中,采用DIN信号的下降沿对计数模块的计数结果进行锁存,锁存时间由LOCK的周期确定,在仿真中将输入值DIN设定为随机值,LOCK设定为周期为2s的方波,QOUT为锁存结果输出端,输出端结果在LOCK下降沿到来时刻改变,其余时刻保持为锁存状态满足实际要求。 3.计数器仿真波形: 图9 32位计数器的时序仿真图 由仿真波形分析可得,F_IN输入周期为40ms的方波,当CLR信号和ENABL信号都为持续时间为1s的高电平期间,计数器开始计数,q的输出为十进制的25。可见,1s/40ms=25,符合实际要求。 4 频率计顶层文件仿真波形: 图10 8位十六进制频率计时序仿真波形 由仿真波形分析可得,当CLK输入周期为2ms的方波,F_IN输入周期为40ms的方波时,QOUT输出为25,这与前面设计计数器时所得到的值一致,并通过锁存器带有锁存功能,直接显示25,这与实际要求相符合。 附录 8位16进制电路原理图: 设计8位16进制流程图: 开始 设计测频电路 设计32位计数器 设计32位锁存器 设计频率计顶层结束

思考题 1.简述Quartus的设计流程。 答:1.新建文件夹;2.新建源程序(Verilog HDL File)或原理图(Schematic File); 3.保存文件;4.创建工程并添加源程序或原理图;5.选择目标芯片;6.设置EDA工具;7.结束设置;8.修改,编译工程;9.时序仿真。 2.功能仿真与时序仿真有什么不同? 答:功能仿真就是在代码写完后,测试要实现的功能是否能正常工作。并不考虑底层硬件的实现和延时等影响。通过功能仿真,可以验证整个系统的逻辑功能是否正确。 时序仿真是在将设计适配到芯片后的仿真验证方式。时序仿真在严格的仿真时序模型下,模拟芯片的实际运作。仿真时间模型将最基本的门级延时计算在内,从而可有效的分析出设计中得竞争和冒险。经过时序仿真验证后的设计基本上与实际电路是一致的。 3.还有什么其他方法实现频率计功能? 答:方案一:可以用LPM模块取代以上模块程序段,完成同样的设计任务。 方案二:基于单片机实现八位十进制频率计字功能,利用AT89C51的内部定时计数器来对外部输入信号进行计数,从而达到测频的目的。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top