EDA实验Verilog版

合集下载

eda电子设计使用verilog语言电子琴实验报告

eda电子设计使用verilog语言电子琴实验报告

电子设计自动化课程设计报告院系:信息工程学院专业:电子信息工程学号:姓名:指导教师:2013 年月日目录1设计目的 (3)2题目描述与要求 (3)3课程设计报告内容 (3)3.1设计原理与思路 (3)3.2操作过程 (4)3.3设计和调试过程中出现的问题及解决方法 (7)4设计总结和心得体会 (8)一、课程设计目的使用VerilogHDL语言进行前端设计,并使用Quaruts软件在实验箱上实现仿真,实现硬件电子琴。

电子琴要求有8个音阶,使用外部时钟信号32MHz,能同步显示音阶。

二、课程设计题目描述和要求题目:简易电子琴的设计主要功能:(1)设计一个八音电子琴。

(2)由键盘输入控制音响,同时可自动演奏乐曲。

(3)用户可以将自己编制的乐曲存入电子琴,演奏时可选择键盘输入乐曲或者已存入的乐曲。

三、课程设计报告内容3.1设计原理与思路系统由数控分频器、乐曲存储模块以及发声模块组成。

数控分频器对FPGA的基准频率进行分频,得到与各个音阶对应的频率输出。

乐曲存储模块产生节拍控制和音阶选择信号,即在此模块中可存放一个乐曲曲谱真值表,由一个计数器来控制此真值表的输出,而由计数器的计数时钟信号作为乐曲节拍控制信号。

由发声模块产生音符对应的频率的信号来使扬声器发音。

(1)模块automusic模块automsic由auto信号来选择发声的方式,auto=0时系统自动播放内置的音乐,auto=1时由键盘来手动演奏音乐。

(2)模块TONE模块Tone是音阶发生器,当8位发声控制输入Index中某一位为高电平时,则对应某一音阶的数值将从端口Tone输出,作为获得该音阶的分频预置值;同时由Code输出对应该音阶简谱的显示数码,如‘5’,并由High输出指示音阶高8度显示。

(3)模块Speaker模块Speaker中的主要电路是一个数控分频器,它由一个初值可预置的加法计数器构成,当模块Speaker由端口Tone获得一个2进制数后,将以此值为计数器的预置数,对端口Clk12MHZ输入的频率进行分频,之后由Spkout向扬声器输出发声。

EDA verilog JK触发器实验

EDA verilog JK触发器实验
述JK触发器
1. case 语句描述JK触发器(带有异步清0,异步置1功能) module jk_ff(clk,j,k,Q,rs,set); input clk,j,k,set,rs; output Q; reg Q; always@(posedge clk or negedge rs or negedge set) begin if(!rs) Q<=1'b0; else if(!set) Q<=1'b1; else case({j,k}) 2'b00:Q<=Q; 2'b01:Q<=1'b0; 2'b10:Q<=1'b1; 2'b11:Q<=~Q; default:Q<=1'bx; endcase end endmodule
4.1.3赋值语句
使用阻塞和非阻塞赋值应遵循的原则: (1)当用“always”块来描述组合逻辑时,既可以用阻塞赋值,也 可以用非阻塞赋值,建议尽量使用阻塞赋值。 (2)对时序逻辑描述和建模,使用非阻塞赋值方式。 (3)为锁存器建模,应尽量使用非阻塞赋值。 (4)若在同一个“always”过程块中既为组合逻辑建模,又为时序 逻辑建模,最好使用非阻塞赋值方式。 (5)在同一个“always”过程块中,最好不要混合使用阻塞赋值和 非阻塞赋值。虽然同时使用这两种赋值方式在综合时不一定出错, 但对同一个变量不能既进行阻塞赋值又进行非阻塞赋值,在综合 时会产生错误。 (6)不能在2个或2个以上的“always”过程块中对同一个变量赋值, 这样会引发冲突,综合时出错。
实验五 用VerilogHDL描述JK触发器
else if({j,k}==2'b01) Q<=0; else if({j,k}==2'b10) Q<=1; else Q<=~Q; end end endmodule

EDA技术实用教程-VerilogHDL版第四版课程设计

EDA技术实用教程-VerilogHDL版第四版课程设计

EDA技术实用教程-VerilogHDL版第四版课程设计一、背景介绍EDA技术(Electronic Design Automation)是指电子设计自动化技术,它是电子设计工程师在工作中必不可少的技术。

EDA技术让电子设计工程师能够更快、更准确和更高效地创建电子原型和系统级设计。

EDA技术的应用包括了芯片设计、数字信号处理、嵌入式系统和PCB设计等。

在EDA技术的发展历程中,Verilog HDL成为了实际应用中最为普及、最为有效的HDL语言。

二、课程设计目标本次课程设计的目标是通过实际案例,帮助学生掌握Verilog HDL设计方法、EDA设计流程以及EDA工具的应用,最终形成独立设计能力和技术素养。

同时,通过课程设计,提高学生综合能力,包括解决问题的能力、分析问题的能力等。

三、课程设计内容和步骤1.课程设计第一阶段:确定设计目标及功能需求在这一阶段,学生需要做的是梳理出设计要求及功能需求,包括指定设计的模块、所完成的功能、输入输出的端口要求,以及需要达到的功能性能等。

2.课程设计第二阶段:Verilog HDL设计在这一阶段,学生需要学习Verilog HDL语言,包括基础语法、模块框架、变量、运算符、组合逻辑和时序逻辑、宏定义以及模块连接等。

学生需要根据课程设计要求,选择合适的Verilog HDL代码实现方式,进行模块组件的设计。

3.课程设计第三阶段:仿真验证在这一阶段,学生需要学习EDA工具,包括ModelSim等较为流行的仿真工具的使用,运用所学工具对设计的模块组件进行仿真和测试,以验证和调试设计的正确性。

4.课程设计第四阶段:芯片布局设计、综合与验证在这一阶段,学生需要学习EDA工具,如Synopsys等较为流行的工具的应用,进行芯片综合、硬件描述语言优化、延时优化以及布局等操作,以完成设计的验证。

四、设计案例以下为一个简单的数字电路设计案例,学生可以根据这个案例进行课程设计实践。

《EDA技术及应用—Verilog HDL版》课件第5章

《EDA技术及应用—Verilog HDL版》课件第5章

(3) 在BL6的监控程序中安排了多达11种形式各异的信 息矢量分布,即“电路重构软配置”。由此可见,虽然 GW48系统从硬件结构上看,是一个完全固定下来的实验系 统,但其功能结构却等同于11套接口迥异的实验系统。
(4) BL3:此模块主要是由一目标芯片适配座以及上面 的CPLD/FPGA目标芯片和编程下载电路构成。通过更换插 有不同型号目标器件的目标板,就能对多种目标芯片进行实 验。
通用EDA实验开发系统能满足使用不同厂家芯片进行 各种EDA实验和开发的需要,其实现原理为:运用“电路 重构软配置”的设计思想,实现CPLD/FPGA目标芯片I/O口 与实验输入/输出资源可以各种不同方式连接来构造形式各 异的实验电路的目的,而在不同的运行模式下,目标芯片 I/O口与实验输入/输出资源对应的连接关系则通过实验电路 结构图来表示。通过使用万能通用插座而建立不同厂家不同 芯片管脚号与通用万能插座的插座号的对照表,建立变化的 I/O资源与特定的芯片管脚编号的联系。其实现步骤为:变 化的I/O资源→电路结构图→插座号→管脚对照表→特定的 芯片管脚号,其中万能插座的插座号是二者联系的桥梁。
(3) 进入EDA设计中的编程下载步骤时,首先在EDA实 验开发系统断电的情况下,将EDA实验开发系统的编程下 载接口,通过实验开发系统提供的编程下载线(比如并行下 载接口扁平电缆线、USB下载线)与计算机的有关接口(比如 打印机并行接口、USB接口)连接好,并将有关选择开关置 于所要求的位置,然后接通EDA实验开发系统的输入电源, 打开EDA实验开发系统上的电源开关,这时即可进行编程 下载的有关操作。
例如,对于一块插有ispLSI1032E的目标板,在实验中, 此芯片的I/O57(2号引脚)将与系统板定义的CLOCK9相连, CLOCK9又恰好与系统板右下方(见图5.1)的高频组时钟信号 相接。于是,对于不同的适配座上目标芯片的引脚号将与主 系统板上的适配引脚PIOx和CLOCKx有不同的对应关系。表 5.3和表5.4列出了10种芯片对系统板引脚的对应关系,以便 在实验时经常查用。

EDA技术与Verilog HDL 实验报告

EDA技术与Verilog HDL 实验报告

EDA技术与Verilog HDL实验报告学生姓名:樊奇峰学生学号:20102533所在班级:10级电科(2)班实验老师:陈亮亮实验地点地点:理工楼实验一 EDA实验箱使用一.实验目的1.GW48教学实验系统原理与使用介绍2.熟悉QuartusII两种输入方式下编译、仿真简单的组合电路。

二.实验内容首先了解GW48系统使用注意事项以及GW48系统主板结构与使用方法,接着对各实验电路结构图特点与适用范围简述。

最后在QuartusII界面下,用文本输入和图形输入分别验证七选一多路选择器的功能。

三.程序清单文本输入如下所示:module mux71(a,b,c,d,e,f,g,s,y);input a,b,c,d,e,f,g;output y;input [2:0] s;reg y ;always @(a,b,c,d,e,f,g,s)case (s)0: y<=a;1: y<=b;2: y<=c;3: y<=d;4: y<=e;5: y<=f;6: y<=g;default: y<=a;endcaseendmodule图形输入如下所示:四、实验步骤1、新建一个名称为MUX71a的工程,并在该文件夹中新建一个MUX71a.v的文件。

2、编译代码,编译成功后进行第三步,若不成功则查改代码中的错误。

3、在工程文件夹中新建一个MUX71a.vwf的波形文件,导入工程端口,设置输入波形,仿真得出输出端口波形。

4、验证输出端口波形是否达到七选一多路选择器的功能。

五、实验数据仿真波形如下图所示。

六、实验小结通过对EDA实验箱使用,了解了GW48教学实验系统原理与使用介绍;熟悉QuartusII两种输入方式下编译、仿真简单的组合电路。

实验二用原理图和VerilogHDL语言设计一位全加器一.实验目的熟悉在QuartusII下用原理图和VerilogHDL语言设计一位全加器。

EDA实验06—Verilog HDL中使用函数和任务

EDA实验06—Verilog HDL中使用函数和任务

电子信息工程学系实验报告课程名称:EDA技术与实验在实验项目名称:Verilog HDL中使用函数和任务实验时间:班级:通信091 姓名:Jxairy 学号:实验目的:1.了解函数的定义和在模块设计中的使用。

2.了解函数的可综合性问题。

3.了解许多综合器不能综合复杂的算术运算。

4.掌握任务在Verilog模块设计中的应用。

5.学会在电平敏感列表的always中使用拼接操作、任务和阻塞赋值等语句,并生成复杂组合逻辑的高级方法。

实验环境:Windows 7、MAX+PlusⅡ10、QuartusⅡ等。

实验内容:1.用函数定义8—3编码器的文本设计及仿真。

2.用任务模块进行alutask的文本设计及仿真。

实验过程:一、用函数定义8—3编码器的文本设计及仿真:(试验环境:MAX+PlusⅡ10)(1)新建文本:选择菜单File下的New,出现如图5.1所示的对话框,在框中选中“Text Editor file”,按“OK”按钮,即选中了文本编辑方式。

图6.1 新建文本(2)另存为Verilog编辑文件,命名为“code_83.v”如图5.2所示。

(3)在编辑窗口中输入程序,如图6.3所示。

图6.2 另存为.V编辑文件图6.3 8—3编码器的源程序(4)设置当前文本:在MAX+PLUS II中,在编译一个项目前,必须确定一个设计文件作为当前项目。

按下列步骤确定项目名:在File菜单中选择Project 中的Name选项,将出现Project Name 对话框:在Files 框内,选择当前的设计文件。

选择“OK”。

如图6.4所示。

(5)打开编译器窗口:在MAX—plusⅡ菜单内选择Compiler 项,即出现如图6.5的编译器窗口。

图6.4 设置当前仿真的文本设计图6.5 编译器窗口选择Start即可开始编译,MAX+PLUS II编译器将检查项目是否有错,并对项目进行逻辑综合,然后配置到一个Altera 器件中,同时将产生报告文件、编程文件和用于时间仿真用的输出文件。

EDA实验指导书Verilog版

EDA实验指导书Verilog版

实验一QUARTUSH的设计流程[输入方式:文本输入、图形输入、波形输入等]一、实验目的:1掌握QUARTU1S安装过程;2、熟悉QUARTU1S设计环境;3、掌握QUARTU1的设计过程。

二、实验内容:用文本输入法设计一个半加器。

三、实验步骤:一、安装QUARTUS II。

注:第一次安装QUARTU要安装license。

二、Q UARTU1设计开发步骤(一)、创建工作文件夹在windows中建立一个文件夹(又称工作库或WORK LIBRARY ),用于保存设计工程项目的有关文件。

注:设计工程项目的有关文件不能保存在根目录下,必须保存在一个文件夹之下。

例如建立的文件夹:E: \HADD(二)、启动Quartus II点击QUARTUS 9.0图标打开QUARTUS 9.0设计窗口。

(三)、设计文件输入1打开输入文件编辑器点击菜单File\new…新建立一个文本设计文件。

用文本输入法输入程序。

程序见附录。

2、保存文件,文件名名同实体名。

后缀.v(四)、全编译(逻辑综合)1创建工程点击菜单File'New Project Wizard ............... •进行工程设置。

完成工作文件夹的选定、工程名、顶层设计文件名、编程器件的确定等工程。

2、编译前的相关设置设置⑴选择PLD芯片:Assignmenmts'Settings'Device 弹出的窗口中选择选择芯片。

⑵选择配置芯片的工作方式:Assignmenmts'Settings\Device\Device&Pin Options 弹出的窗口中首选General 项,在Options 栏中选择Auto-restart-configuration after error.⑶选择配置芯片和编程方式:Assignmenmts\Settings\Device\Device&Pin Options弹出的窗口中选择Configuration 栏,在窗口中设置配置方式,配置芯片和是否生成压缩的配置文件。

数电EDA简易电子琴Verilog设计

数电EDA简易电子琴Verilog设计

数电EDA简易电子琴Verilog设计数字电子技术课程设计--简易电子琴设计专业班级:电子姓名:学号:一、日期:设计任务用Verilog HDL语言设计简易电子琴。

(1)单独从左至右按下S1-S7每个按键后能够各自对应发出“哆来咪发唆啦西”的音乐声;(2)按下最右边按键(S8),同时再配合按下S1-S7键后,发高八度的对应音;(3)按键需要进行“消抖”处理;(4)外部输入脉冲信号频率为1mhz;(5)扩展要求:自主设计(增加低8度功能)。

二、实验目的1、学习verilogHDL语言的基本运用,能够利用其进行简单编程;2、学习使用QuartusⅡ的基本操作,能够利用其进行简单的设计;3、结合实践加深对理论知识的理解。

三、设计原理1)喇叭的振动频率不同,导致产生不同的声音;振动频率越低,声音越低沉,振动频率越高,声音越尖锐。

题目中音乐基本音的“哆”对应频率为523Hz 、“来”对应频率为587Hz 、“咪”对应频率为659Hz 、“发”对应频率为698Hz 、“唆”对应频率为784Hz 、“啦”对应频率为880Hz 、“西”对应频率为998Hz。

低8度音:基本音频率/2,例如低音1的频率为523/2=。

高8度音:基本音频率×2,例如高音1的频率为523×2=1046Hz.。

不同的频率产生利用给定的时钟脉冲来进行分频实现。

(2)消抖的原理:按键默认输入逻辑‘1’,当有按键按下时对应的输入为逻辑‘0’(但会存在抖动),当FPGA开始检测到该引脚从‘1’变为‘0’后开始定时(按键抖动时间大约10ms),定时时间结束后若该引脚仍然为‘0’则表示确实发生按键按下,否则视为抖动而不予以理会;按键松开过程的消抖处理和按下时原理一样。

(3)原理框图四、程序设计消抖模块module xiaodou(key_in,key_out,clk);input key_in;input clk;output key_out;reg key_out;reg [2:0]presta;integer q;parameter s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100,s5=3'b101,s6=3'b110,s7=3'b111;always@(posedge clk)begincase(presta)s0:beginkey_out<=0;q<=0;if(key_in==1)presta<=s0; elsepresta<=s1; ends1:beginkey_out<=0; if(q>9999) presta<=s2; elseq<=q+1; ends2:beginkey_out<=0; q<=0;if(key_in==1) presta<=s0; elsepresta<=s3; ends3:beginkey_out<=1; q<=0;if(key_in==0) presta<=s3; elsepresta<=s4; ends4:beginkey_out<=1;if(q>44444)presta<=s5;elseq<=q+1;ends5:beginq<=0;if(key_in==1)presta<=s0;elsepresta<=s3;ends6:beginpresta<=s0;ends7:beginpresta<=s0;endendcaseendend module按键模块module anjian(a,b,c,d,e,f,g,h,i,qout); input a,b,c,d,e,f,g,h,i;output [10:0] qout;reg [8:0] q;reg [10:0] qout;always@(a or b or c or d or e or f or g or h or i) begin q[0]=i;q[1]=h;q[2]=g;q[3]=f;q[4]=e;q[5]=d;q[6]=c;q[7]=b;q[8]=a;endalways@(q)begincase(q)9'b000000011:qout<=11'b00000000000;9'b000000001:qout<=11'b00000000000;9'b000000000:qout<=11'b00000000000;9'b000000010:qout<=11'b00000000000;default:qout<=qout;endcaseendendmodule分频模块module fenpin(clk_1M,yuzhi,pl_out);input clk_1M;input [10:0]yuzhi;reg [10:0]q;output pl_out;reg pl_out;always@(posedge clk_1M)beginif(yuzhi>0)beginif(q<yuzhi)< p="">beginq<=q+1;pl_out<=0;endelsebeginq<=11'b00000000000;pl_out<=1;endendelsebeginq<=11'b00000000000;pl_out<=1;endendendmodule五、原理图及仿真波形图六、心得体会由于之前对本次设计所需知识了解较少,所以在实验过程中遇到了很多的困难,真的很难,但是同样在解决各种困难的过程中也有所收获。

EDA技术与Verilog HDL技术实验报告

EDA技术与Verilog HDL技术实验报告

EDA技术与Verilog HDL技术实验报告班级:09电信实验班姓名:虞鸿鸣组别:Q09610137实验:交通灯控制一、实验目的:1、运用Verilog HDL综合编辑软件实现相应功能;2、进一步使用EDA技术解决实际问题;3、进一步使用EDA工具箱,提高对硬件电路的认识。

二、实验仪器PC计算机、EDA实验工具箱三、简要原理1. 能显示十字路口东西、南北两个方向的红、黄、绿的指示状态用两组红、黄、绿三色灯作为两个方向的红、黄、绿灯。

变化规律为:东西绿灯,南北红灯→东西黄灯,南北红灯→东西红灯,南北绿灯→东西红灯,南北黄灯→东西绿灯,南北红灯……依次循环。

2. 能实现正常的倒计时功能用两组数码管作为东西和南北方向的允许或通行时间的倒计时显示,显示时间为红灯45秒、绿灯40秒、黄灯5秒。

3. 能实现紧急状态处理的功能(1) 出现紧急状态(例如消防车,警车执行特殊任务时要优先通行)时,两路上所有车禁止通行,红灯全亮;(2) 显示到计时的两组数码管闪烁;(3) 计数器停止计数并保持在原来的状态;(4) 特殊状态解除后能返回原来状态继续运行。

4. 能实现系统复位功能系统复位后,东西绿灯,南北红灯,东西计时器显示40秒,南北显示45秒。

5. 用VHDL语言设计符合上述功能要求的交通灯控制器,并用层次化设计方法设计该电路。

6. 控制器、置数器的功能用功能仿真的方法验证,可通过有关波形确认电路设计是否正确。

7. 完成电路全部设计后,通过系统实验箱下载验证设计课题的正确性。

四、设计思路EN、CLK、RST、URGEN分别为使能信号、时钟信号、复位信号和紧急情况信号;num1,num2分别为东西方向的倒计时和南北方向的倒计时,两个八位数码管,硬件接有译码芯片;light1,light2分别为东西方向的交通灯和南北方向的交通灯中红、黄、绿三色位置;tim1,tim2分别为东西和南北方向的交通的灯控制信号,高电平时有效;pb1,pb2分别为寄存紧急情况前交通灯状态变量的标志信号,高电平有效;state1,state2分别为东西、南北方向的交通灯状态信号,每个方向有三种状态,即00、01、11;五、源代码及注析module TRAFFIC_LI(EN,CLK,RST,URGEN,num1,num2,light1,light2);input EN,CLK,RST,URGEN;//EN、CLK、RST、URGEN分别为使能信号、时钟信号、复位信号和紧急情况信号output[7:0] num1,num2;//num1,num2分别为东西方向的倒计时和南北方向的倒计时,两个八位数码管,硬件接有译码芯片output[2:0] light1,light2;//light1,light2分别为东西方向的交通灯和南北方向的交通灯中红、黄、绿三色位置reg tim1,tim2,pb1,pb2;//tim1,tim2分别为东西和南北方向的交通的灯控制信号,高电平时有效//pb1,pb2分别为寄存紧急情况前交通灯状态变量的标志信号,高电平有效reg[1:0]state1,state2;//state1,state2分别为东西、南北方向的交通灯状态信号,每个方向有三种状态,即00、01、11reg[2:0]light1,light2,light3,light4;//light3,light4用以寄存紧急情况前交通灯状态reg[7:0] num1,num2;//现实时间寄存reg[7:0] red1,red2,green1,green2,yellow1,yellow2;//东西南北方向三种颜色的交通灯亮的时间always @(EN)if(!EN)begin //设置计数初值green1<=8'b01000000;//绿灯40Sred1<=8'b01000000;//红灯40Syellow1<=8'b00000101;//黄灯5Sgreen2<=8'b01000000;red2<=8'b01000000;yellow2<=8'b00000101;endalways @(posedge CLK )beginif(!URGEN)beginlight3<=light1;endif(RST)//东西方向复位控制beginlight1<=3'b001; //亮绿灯num1<=green1;//时间为40Sendelse if(URGEN) //东西方向紧急情况控制beginlight1<=3'b100; //亮红灯//计数暂停pb1<=1;endelse if(pb1)beginlight1<=light3;pb1<=0;endelse if(EN)begin //使能有效开始控制计数if(!tim1) //开始控制begin //东西方向交通灯点亮控制tim1<=1;case(state1)2'b00:beginnum1<=green1;light1<=3'b001;state1<=2'b01;end//绿灯亮40S,跳转至下一状态2'b01:beginnum1<=yellow1-1;light1<=3'b010;state1<=2'b10;end//黄灯亮5秒,跳转至下一状态2'b10:beginnum1<=red1+5;light1<=3'b100;state1<=2'b00;end//红灯亮45S,跳转至初状态default:light1<=3'b100;//其他情况亮红灯endcaseendelsebegin //倒数计时if(num1>0)if(num1[3:0]==0)beginnum1[3:0]<=4'b1001;num1[7:4]<=num1[7:4]-1;endelse num1[3:0]<=num1[3:0]-1;if(num1==1) tim1<=0;endendelsebeginlight1<=3'b010;num1=2'b00;tim1<=0;endendalways @(posedge CLK )beginif(!URGEN)beginlight4<=light2;endif(RST) //南北方向复位控制beginlight2<=3'b100;//亮红灯num2<=red2+5;//时间为45Sendelse if(URGEN)//南北方向特殊情况控制beginlight2<=3'b100;//亮红灯//计数暂停pb2<=1;endelse if(pb2)beginlight2<=light4;pb2<=0;endelse if(EN)beginif(!tim2)begin //南北方向交通灯控制tim2<=1;case(state2)2'b00:beginnum2<=red2+5;light2<=3'b100;state2<=2'b01;end2'b01:beginnum2<=green2;light2<=3'b001;state2<=2'b10;end2'b10:beginnum2<=yellow2-1;light2<=3'b010;state2<=2'b00;enddefault:light2<=3'b100;endcaseendelsebegin //倒数计时if(num2>0)if(num2[3:0]==0)beginnum2[3:0]<=4'b1001;num2[7:4]<=num2[7:4]-1;endelse num2[3:0]<=num2[3:0]-1;if(num2==1) tim2<=0;endendelsebegintim2<=0;state2<=2'b00;light2<=3'b010;endendendmodule六、实验结果及分析初始状态时,东西方向绿灯,计时40秒,南北方向红灯,计时45秒。

EDA实验代码Verilog

EDA实验代码Verilog

实验一、五人表决器(1)vote5.v①方案一`timescale 1ns / 1psmodule vote5(input a,b,c,d,e,output f);assign f=a&b&c||a&b&d||a&b&e||a&c&d||a&c&e|| a&d&e||b&c&d||b&c&e||b&d&e||c&d&e; endmodule②方案二module vote5(a,b,c,d,e,f);input a,b,c,d,e;output f;reg f;reg[2:0] count1;initial count1=0;always@(a,b,c,d,e)begincount1<=a+b+c+d+e;f=count1<3?0:1;endendmodule(2)test.vmodule test;reg a;reg b;reg c;reg d;reg e;wire f;vote5 uut (.a(a),.b(b),.c(c),.d(d),.e(e),.f(f));initial begina = 0;b = 0;c = 0;d = 0;e = 0;#100 a = 1;b = 0;c = 0;d = 0;e = 0;#100 a = 1;b = 1;c = 0;d = 0;e = 0;#100 a = 1;b = 1;c = 1;d = 0;e = 0;#100 a = 1;b = 1;c = 1;d = 1;e = 0;#100 a = 1;b = 1;c = 1;d = 1;e = 1;end endmodule(3)vote5.ucfNET "a" LOC="P11";NET "b" LOC="L3";NET "c" LOC="K3";NET "d" LOC="B4";NET "e" LOC="G3";NET "f" LOC="M5";实验二、加法器、乘法器、比较器一、加法器(1)adder.vmodule adder(a,b,sum,co); parameter n=4;input [n:0] a,b;output [n:0] sum;output co;assign {co,sum}=a+b; endmodule(2)test.vmodule test;reg [4:0] a;reg [4:0] b;wire [4:0] sum;wire co;adder uut (.a(a),.b(b),.sum(sum),.co(co));initial begina = 0;b = 0;#100 a = 3;b = 2;#100 a = 10;b = 8;endendmodule(3) adder.ucfNET "a<3>" LOC="N3";NET "a<2>" LOC="E2";NET "a<1>" LOC="F3";NET "a<0>" LOC="G3";NET "b<3>" LOC="B4";NET "b<2>" LOC="K3";NET "b<1>" LOC="L3";NET "b<0>" LOC="P11";NET "co" LOC="N5";NET "sum<3>" LOC="P6";NET "sum<2>" LOC="P7";NET "sum<1>" LOC="M11";NET "sum<0>" LOC="M5";二、乘法器(1)multiplier.v`timescale 1ns / 1psmodule multiplier(a,b,product); parameter n=4;input [n-1:0] a,b;output [(2*n-1):0] product; assign product=a*b;endmodule(2)test.vmodule test;reg [3:0] a;reg [3:0] b;wire [7:0] product;multiplier uut (.a(a),.b(b),.product(product));initial begina = 0;b = 0;#10 a = 2;b = 3;#10 a = 8;b = 6;endendmodule(3) multiplier.ucfNET "a<3>" LOC="N3";NET "a<2>" LOC="E2";NET "a<1>" LOC="F3";NET "a<0>" LOC="G3";NET "b<3>" LOC="B4";NET "b<2>" LOC="K3";NET "b<1>" LOC="L3";NET "b<0>" LOC="P11";NET "product<7>" LOC="G1";NET "product<6>" LOC="P4";NET "product<5>" LOC="N4";NET "product<4>" LOC="N5";NET "product<3>" LOC="P6";NET "product<2>" LOC="P7";NET "product<1>" LOC="M11";NET "product<0>" LOC="M5";三、比较器(1)comparator.vmodule comparator(a,b,agb,aeb,asb); parameter n=4;input [n-1:0] a,b;output agb,aeb,asb;reg agb,aeb,asb;always@(a or b)beginif (a==b)aeb=1;elseaeb=0;if (a>b)agb=1;elseagb=0;if (a<b)asb=1;elseasb=0;endendmodule(2)test.vmodule test;reg [3:0] a;reg [3:0] b;wire agb;wire aeb;wire asb;comparator uut (.a(a),.b(b),.agb(agb),.aeb(aeb),.asb(asb));initial begina = 0;b = 0;#10 a = 3;b = 1;#10 a = 2;b = 4;end endmodule(3)comparator. ucf NET "a<3>" LOC="N3"; NET "a<2>" LOC="E2"; NET "a<1>" LOC="F3"; NET "a<0>" LOC="G3"; NET "b<3>" LOC="B4"; NET "b<2>" LOC="K3";NET "b<1>" LOC="L3"; NET "b<0>" LOC="P11";NET "agb" LOC="P7";NET "aeb" LOC="M11"; NET "asb" LOC="M5";实验三、流水灯(1)ledflash.vmodule ledflash(output [7:0] ld,input clk,input [4:0] sw);reg clk1s;reg[7:0] tmp;reg[7:0] tmp1;reg[7:0] tmp2;reg[3:0] tmp3;reg[3:0] tmp4;reg[7:0] tmp5;reg[31:0] count;assign ld=tmp;initialbeginclk1s=0;tmp1=8'b00000001;tmp2=8'b10000000;tmp3=4'b1000;tmp4=4'b0001;tmp5=8'b00000000;count=0;endalways@(posedge clk)begincount<=count+1;if (count==25000000) begincount<=0;clk1s<=~clk1s;endendalways@(posedge clk1s)beginif (sw==5'b10000)begintmp1={tmp1[6:0],tmp1[7]};tmp=tmp1;endelse if (sw==5'b01000)begintmp2={tmp2[0],tmp2[7:1]};tmp=tmp2;endelse if (sw==5'b00100)begintmp3={tmp3[0],tmp3[3:1]};tmp={tmp3[0],tmp3[1],tmp3[2],tmp3[3],tmp3};endelse if (sw==5'b00010)begintmp4={tmp4[2:0],tmp4[3]};tmp={tmp4[0],tmp4[1],tmp4[2],tmp4[3],tmp4};endelse if (sw==5'b00001)begintmp5=~tmp5;tmp=tmp5;endendendmodule(2)test.vmodule test;reg clk;wire [7:0] ld;ledflash uut (.ld(ld),.clk(clk));alwaysbegin#100 clk = 0;#100 clk = 1;endendmodule(3)ledflash.ucfNET "ld<7>" LOC="G1";NET "ld<6>" LOC="P4";NET "ld<5>" LOC="N4";NET "ld<4>" LOC="N5";NET "ld<3>" LOC="P6";NET "ld<2>" LOC="P7";NET "ld<1>" LOC="M11";NET "ld<0>" LOC="M5";NET "sw<4>" LOC="G3";NET "sw<3>" LOC="B4";NET "sw<2>" LOC="K3";NET "sw<1>" LOC="L3";NET "sw<0>" LOC="P11";NET "clk" LOC="B8";NET "clk" CLOCK_DEDICATED_ROUTE=FALSE;实验四、计数器(1)counter.vmodule counter(input bn,output reg[7:0] segcode,output [3:0] an);reg[3:0] count;assign an=4'b0111;initialbegincount=0;endalways @(posedge bn)count<=count+1;always @(count)case(count)0:segcode=8'b11000000;//01:segcode=8'b11111001;//12:segcode=8'b10100100;//23:segcode=8'b10110000;//34:segcode=8'b10011001;//45:segcode=8'b10010010;//56:segcode=8'b10000010;//67:segcode=8'b11111000;//78:segcode=8'b10000000;//89:segcode=8'b10010000;//9'ha:segcode=8'b10001000;//a 'hb:segcode=8'b10000011;//b 'hc:segcode=8'b11000110;//c 'hd:segcode=8'b10100001;//d 'he:segcode=8'b10000110;//e 'hf:segcode=8'b10001110;//f default:segcode=8'b11111111; endcaseendmodule(2)test.vmodule test;reg bn;wire [7:0] segcode;wire [3:0] an;counter uut (.bn(bn),.segcode(segcode),.an(an));initial beginbn = 1;repeat(16)begin#10 bn = 0;#10 bn = 1;endendendmodule(3) counter.ucfNET "bn" LOC="G12";NET "an<0>" LOC="F12";NET "an<1>" LOC="J12";NET "an<2>" LOC="M13";NET "an<3>" LOC="K14";NET "segcode<7>" LOC="N13";NET "segcode<6>" LOC="M12";NET "segcode<5>" LOC="L13";NET "segcode<4>" LOC="P12";NET "segcode<3>" LOC="N11";NET "segcode<2>" LOC="N14";NET "segcode<1>" LOC="H12";NET "segcode<0>" LOC="L14";NET "bn" CLOCK_DEDICATED_ROUTE=FALSE;实验五、交通灯(1)trafficlights.vmodule trafficlights(clock,red1,yellow1,green1,red2,yellow2,green2); input clock;output red1,yellow1,green1,red2,yellow2,green2;reg clock1s,red1,yellow1,green1,red2,yellow2,green2;reg[31:0] count;reg[2:0] state;reg[7:0] cnt1s;parameter red_tics=25,yellow_tics=5,green_tics=20;initialbeginclock1s=0;count=0;state=3'b000;cnt1s=8'b00000000;endalways@(posedge clock)begincount<=count+1;if (count==25000000)begincount<=0;clock1s<=~clock1s;endendalways@(state,clock1s)begincase(state)3'b000:beginred1=0;yellow1=0;green1=1;red2=1;yellow2=0;green2=0;end3'b001:beginred1=0;yellow1=0;green1=clock1s;red2=1;yellow2=0;green2=0;end3'b010:beginred1=0;yellow1=1;green1=0;red2=1;yellow2=0;green2=0;end3'b011:beginred1=1;yellow1=0;green1=0;red2=0;yellow2=0;green2=1;end3'b100:beginred1=1;yellow1=0;green1=0;red2=0;yellow2=0;green2=clock1s;end3'b101:beginred1=1;yellow1=0;green1=0;red2=0;yellow2=1;green2=0;endendcaseendalways@(posedge clock1s)beginif(cnt1s<green_tics-5)state=3'b000;else if(cnt1s<green_tics)state=3'b001;else if(cnt1s<green_tics+yellow_tics)state=3'b010;else if(cnt1s<green_tics+yellow_tics+green_tics-5)state=3'b011;else if(cnt1s<green_tics+yellow_tics+green_tics)state=3'b100;else if(cnt1s<green_tics+yellow_tics+green_tics+yellow_tics) state=3'b101;if (cnt1s>=green_tics+yellow_tics+green_tics+yellow_tics-1)cnt1s<=0;elsecnt1s<=cnt1s+1;endendmodule(2)test.vmodule test;reg clock;wire red1;wire yellow1;wire green1;wire red2;wire yellow2;wire green2;trafficlights uut (.clock(clock),.red1(red1),.yellow1(yellow1),.green1(green1),.red2(red2),.yellow2(yellow2),.green2(green2));alwaysbegin#100 clock = 0;#100 clock = 1;endendmodule(3)trafficlights.vNET "red1" LOC="G1";NET "yellow1" LOC="P4"; NET "green1" LOC="N4"; NET "red2" LOC="P7";NET "yellow2" LOC="M11"; NET "green2" LOC="M5";NET "clock" LOC="B8";NET "clock" CLOCK_DEDICATED_ROUTE=FALSE;实验六、数字跑表(1)timer.vmodule timer(clk,clr,pause,segcode,an,ld); input clk,clr,pause;output [7:0] segcode;output [3:0] an;output [7:0] ld;wire[3:0] msh,msl,sh,sl,mh,ml;wire clk10ms,clkscan;assign ld[7:4]=msh;assign ld[3:0]=msl;div inst1 (.clk(clk),.clk10ms(clk10ms),.clkscan(clkscan));counter inst2 (.clk10ms(clk10ms),.clr(clr),.pause(pause),.msh(msh),.msl(msl),.sh(sh),.sl(sl),.mh(mh),.ml(ml));display inst3 (.clkscan(clkscan),.an(an),.segcode(segcode),.msh(msh),.msl(msl),.sh(sh),.sl(sl),.mh(mh),.ml(ml));endmodule(2)div.vmodule div(clk,clk10ms,clkscan);input clk;output clk10ms;output clkscan;reg clk10ms;reg clkscan;reg[31:0] count10ms,countscan;always@(posedge clk)//10ms plusebegincount10ms<=count10ms+1;if (count10ms==250000)begincount10ms<=0;clk10ms<=~clk10ms;endendalways@(posedge clk)//100ns plusebegincountscan<=countscan+1;if (countscan==250)begincountscan<=0;clkscan<=~clkscan;endendendmodule(3)counter.vmodule counter(clk10ms,clr,pause,msh,msl,sh,sl,mh,ml); input clk10ms,clr,pause;output [3:0] msh,msl,sh,sl,mh,ml;reg[3:0] msh,msl,sh,sl,mh,ml;reg cn1,cn2,clkscan,pausecn;initial pausecn=0;always@(posedge pause)pausecn=pausecn+1;always@(posedge clk10ms or posedge clr)beginif(clr)begin{msh,msl}<=8'h00;cn1<=0;endelseif (!pausecn)beginif (msl==9)beginmsl<=0;if (msh==9)beginmsh<=0;cn1<=1;endelsemsh<=msh+1;endelsebeginmsl<=msl+1;cn1<=0;endendendalways@(posedge cn1 or posedge clr) beginif(clr)begin{sh,sl}<=8'h00;cn2<=0;endelseif (sl==9)beginsl<=0;if (sh==5)beginsh<=0;cn2<=1;endelsesh<=sh+1;endelsebeginsl<=sl+1;cn2<=0;endendalways@(posedge cn2 or posedge clr)beginif(clr)begin{mh,ml}<=8'h00;endelseif (ml==9)beginml<=0;if (mh==5)mh<=0;elsemh<=mh+1;endelseml<=ml+1;endendmodule(4)display.vmodule display(clkscan,an,segcode,msh,msl,sh,sl,mh,ml); input clkscan;output [3:0] an;output [7:0] segcode;input [3:0] msh,msl,sh,sl,mh,ml;reg[3:0] count,an;reg[1:0] segnum;reg[7:0] segcode;always @(posedge clkscan)segnum<=segnum+1;always @(segnum)case(segnum)0:begin an=4'b0111;count=mh; end//01:begin an=4'b1011;count=ml; end//12:begin an=4'b1101;count=sh; end//23:begin an=4'b1110;count=sl; end//3default:an=4'b1111;endcasealways @(count)case(count)0:segcode=8'b11000000;//01:segcode=8'b11111001;//12:segcode=8'b10100100;//23:segcode=8'b10110000;//34:segcode=8'b10011001;//45:segcode=8'b10010010;//56:segcode=8'b10000010;//67:segcode=8'b11111000;//78:segcode=8'b10000000;//89:segcode=8'b10010000;//9'ha:segcode=8'b10001000;//a 'hb:segcode=8'b10000011;//b 'hc:segcode=8'b11000110;//c 'hd:segcode=8'b10100001;//d 'he:segcode=8'b10000110;//e 'hf:segcode=8'b10001110;//f default:segcode=8'b11111111; endcaseendmodule(4)timer.ucfNET "clk" LOC="B8";NET "clr" LOC="C11";NET "pause" LOC="G12";NET "an<0>" LOC="F12";NET "an<1>" LOC="J12";NET "an<2>" LOC="M13";NET "an<3>" LOC="K14";NET "ld<7>" LOC="G1";NET "ld<6>" LOC="P4";NET "ld<5>" LOC="N4";NET "ld<4>" LOC="N5";NET "ld<3>" LOC="P6";NET "ld<2>" LOC="P7";NET "ld<1>" LOC="M11";NET "ld<0>" LOC="M5";NET "segcode<7>" LOC="N13"; NET "segcode<6>" LOC="M12"; NET "segcode<5>" LOC="L13"; NET "segcode<4>" LOC="P12"; NET "segcode<3>" LOC="N11";NET "segcode<2>" LOC="N14";NET "segcode<1>" LOC="H12";NET "segcode<0>" LOC="L14";NET "clk" CLOCK_DEDICATED_ROUTE=FALSE; NET "pause" CLOCK_DEDICATED_ROUTE = FALSE;。

EDA实验指导(基于verilog)

EDA实验指导(基于verilog)
图1-18 Node Finder对话框
图1-19管脚分配
在图1-19中以锁定端口A的管脚为例,其它端口的管脚锁定与其基本一致。选择端口A的对应Assignment Name待其变为蓝色,双击之,出现下拉菜单选取如图1-19所示的Location(Accepts wildcards/groups)选项。选择端口A的对应Value栏,待其变为蓝色,依照表1-2和表1-3所示的硬件与FPGA的管脚连接表(或附录),输入对应的管脚名AH12,按回车键,软件将自动将其改为PIN_AH12,同时蓝色选择条会自动跳转到Value栏的下一行,这表明软件已经将输入端口A分配到FPGA的AH12引脚上,如图1-20所示。
LED9display
LED[9]
Pin_F22
JP2_96
LED10display
LED[10]
Pin_E22
JP2_97
LED11display
LED[11]
Pin_F21
JP2_98
LED12display
表1-3 LED灯与FPGA管脚连接表
四、实验步骤
下面将通过这个实验,向读者介绍QUARTUSII的项目文件的生成、编译、管脚分配以及时序仿真等的操作过程。
图1-12设计文件的输入
图1-13保存设计文件对话框
3、对设计文件进行编译
QUARTUSII编译器窗口包含了对设计文件处理的全过程。在QUARTUSII软件中选择Processing>Compiler Tool菜单项,则出现QUARTUSII的编译器窗口,如图1-14所示,图中标明了全编译过程各个模块的功能。
在QUARTUSII图形编辑器窗口(图1-10)中,根据个人爱好,可以随时改变Block Editor的显示选项,如导向线和网格间距、橡皮筋功能、颜色以及基本单元和块的属性等。

EDA综合实验_VerilogHDL部分

EDA综合实验_VerilogHDL部分
模块中最重要的部分是逻辑功能定义部分。 用“assign”声明语句
如: assign a = b & c;
用实例元件
如: and and_inst( q, a, b );
用“always”块 如:always @(posedge clk ) begin q <= d; end
2 过程语句
模块定义的一般语法结构如下:
module 模块名(端口名1, 端口名2, 端口名3,…); 端口类型说明(input, outout, inout); 说明部分 参数定义(可选); 数据类型定义(wire, reg等); 实例化低层模块和基本门级元件; 连续赋值语句(assign); 过程块结构(initial和always) 行为描述语句; endmodule
default语句的用法
Default语句的含义? 除非所有条件语句中的选择值能完整覆盖case 语句中表达式的取值,否则最后一个条件语句 中的选择必须加上default语句。 建议加上default语句,因为在Verilog中,任何 变量都有4种不同的逻辑状态取值——0、1、z 和x,因此{S1、S0}的取值? 综合器会加上不必要的时序模块。
则{B,C}=4‟b1000 {A,B[1],C[0]}=3‟b110 {A,B,C,3‟b101}=8‟b11000101。 对同一个操作数的重复拼接还可以使用双重大括号构 成的运算符{{}} 例如{4{A}}=4‟b1111,{2{A},2{B},C}=8‟b11101000。
7 Verilog中的数字表达
1.3 Verilog HDL结构组成
I/O说明的格式如下:
输入口:
input 端口名1,端口名2,………,端口名i;

EDA综合设计与实践课程设计用VerilogHDL设计电子钟

EDA综合设计与实践课程设计用VerilogHDL设计电子钟

EDA综合设计与实践课程设计用VerilogHDL设计电子钟广东工业大学实验报告信息工程学院通信工程专业 04 班成绩评定_______学号姓名张凤珠教师签名_______实验题目用Verilog HDL设计电子钟第 17 周至第 17 周一、课程设计目的和要求目的:1. 学会使用quantusⅡ软件(编译、仿真等),并利用它进行设计一些简单的数字电路;2. 利用实验室提供的GW48 SOPC系统主板,结合quantusⅡ软件实现电子钟的功能显示。

要求:电子钟应实现如下功能:1.时钟显示功能:,该电子钟正常显示小时、分钟、秒,各用2位数码管(共6位数码管)显示范围为0—23时59分59秒,分辨率为1秒,包括启动与停止。

2.校时功能:包括小时校准和分钟校准。

3.跑表:包括跑表清零、启动计时、停止及继续计时功能。

二、实验器件实验室提供的GW48 SOPC系统主板实验箱三、设计方案和源程序代码首先分析电子钟要实现的三个功能,然后确定它的基本结构,因为设计时电子钟的三个基本功能都要用到数码管显示,考虑到三者为了避免竞争数码管资源的问题,因此设计时电子钟有3个主要输入按键K1、K2、K3,分别为时间显示、校时功能、跑表的启动,而且是当任一个按键按下,其余两个键都无效,即此时只有按下的键才有效,执行该键所控制功能的启动。

其次,各个功能模块的设计。

A 、对于时间显示模块中,涉及到的是时分秒各个计数器的设计,“秒计数器”采用60进制计数器,每累计60秒,发出一个“分脉冲”信号,该信号将被送到“分计数器”。

“分计数器”采用60进制计数器,每累计60分,发出一个“分脉冲”信号,该信号被送到“时计数器”。

“时计数器”采用24进制计数器,可实现24小时的累计计数。

B 、对于校时模块,同样用到了上述的时分计数器,不过只是能实现校时分钟和小时功能,分别用K4、K5键控制,做法是每按下一次键,对应的计数器加一。

C、最后是跑表模块,这相对于前面两个模块较为复杂,它有计时复位、启动和计时停止三个功能,分别用K6、K8、K7按键控制,这里用到了毫秒、秒、分钟计数器,其中“毫秒计数器”采用100进制计数器,每累计100毫秒产生一个“秒脉冲”信号,该信号将作为“秒计数器”的时钟脉冲,其余同A所述。

EDA技术实用教程——Verilog-HDL版学习报告

EDA技术实用教程——Verilog-HDL版学习报告

可编程逻辑器件与EDA技术学习报告院系:自动化工程学院电子学系专业:电子信息科学与技术班级: 2009级2班姓名:何伍健2011年7月2日一、EDA技术概述1.1EDA技术及其发展20世纪70年代,在集成电路整理方面,双极工艺,MOS工艺已得到广泛的应用;20世纪80年代,集成电路设计进入了CMOS(互补场效应管)时代;20世纪90年代,集成电路设计工艺进入了超深亚微米阶段;21世纪,全方面进入了EDA时代。

1.2EDA技术实现目标1.可编程逻辑器件2.半定制或全定制ASIC(1)门阵列ASIC(2)标准单元ASIC3.混合ASIC1.3 硬件描述语言Verilog HDL1.VHDL2.Verilog HDL3.SystemVerilog和System C1.4 其他常用HDLVHDL与Verilog相比,有下列优势:1.语法比Verilog严谨,通过EDA工具自动语法检查,易排除许多设计中的疏忽;2.有很好的行为级描述能力和一定的系统级描述能力,而Verilog建模时,行为与系统级抽象及相关描述能力不及VHDL。

与Verilog相比,有下列不足:1.VHDL代码较冗长,在相同逻辑功能描述时,Verilog的代码比VHDL少许多;2.VHDL对数据类型匹配要求过于严格,初学时会感到不是很方便,编程耗时也较多;而Verilog支持自动类型转换,初学者容易入门;3.VHDL对版图级,管子级这些较为低层的描述级别,几乎不支持,无法直接用于集成电路低层建模。

SystemVerilog主要定位于集成电路的实现和验证流程,并为系统级设计流程提供了强大的链接能力。

System C是C++语言的硬件描述扩展,主要用于ESL(电子系统级)建模与验证。

1.5HDL综合1.从自然语言转换到Verilog HDL语言算法表述,即自然语言综合;2.从算法表述转换到寄存器输出级表述,即行为综合;3.从RTL级表述转换到逻辑门的表述,即逻辑综合;4.从逻辑门表述转换到版图级表述,或转换到FPGA的配置网标文件,可称为版图综合或结构综合。

EDA技术实用教程VerilogHDL版第五版教学设计

EDA技术实用教程VerilogHDL版第五版教学设计

EDA技术实用教程VerilogHDL版第五版教学设计简介EDA(Electronic Design Automation),即电子设计自动化,是指利用计算机与专用软件来进行电路设计与验证、电子系统的设计、制造和测试的技术。

Verilog HDL是一种用于数字电路设计的硬件描述语言。

本教程将介绍EDA技术的实用应用和Verilog HDL的基本语法,以及实战案例的讲解。

教学目标本教学设计旨在让学生掌握以下技能:•理解EDA技术的基本原理和应用;•掌握Verilog HDL的基本语法和使用方法;•能够使用EDA工具进行数字电路设计和模拟;•了解数字电路设计的实际应用。

教学内容第一部分:EDA技术基础与实战本部分将首先介绍EDA技术的基本原理和应用,包括电路设计流程、EDA工具的选择和应用、仿真和验证技术等。

接着,将通过实例对EDA技术进行实战演练,让学生了解如何使用EDA工具进行数字电路设计和模拟。

第二部分:Verilog HDL语言基础本部分将介绍Verilog HDL的基本语法和使用方法,包括模块和端口的定义、数据类型、运算符、条件语句、循环语句等。

通过实例演示,让学生掌握Verilog HDL的编写和调试技能。

第三部分:数字电路设计实践本部分将引导学生进行数字电路设计实践,包括组合逻辑和时序逻辑的设计与实现。

通过实际案例让学生了解数字电路设计的实际应用。

教学方法本教学采用以下方法:讲授法通过教师讲解,结合实例演示,让学生了解EDA技术的基本原理、VerilogHDL的基本语法和数字电路设计实践。

分组编程实践组织学生分组进行数字电路设计实践。

每个小组负责完成一个实例,组内成员协作设计实现数字电路。

实验演示通过实验演示,让学生了解数字电路设计的实际应用,增强实际操作能力。

教材及参考资料教材:•《数字电路设计与Verilog HDL》(美)Samir Palnitkar 著,王青杨林华译,电子工业出版社,2014年版。

中南大学EDA技术与Veriloghdl实验指导书

中南大学EDA技术与Veriloghdl实验指导书

实验1:Q u a r t u s I I基本设计流程体验实验实验步骤:1.启动QuartusII。

2.创建工程。

(1)选择File->NewProjectWizard命令(2)输入工程库文件夹(注意:不要使用Quartus安装目录,不要使用路径中包含中文的目录,例如桌面等)。

输入工程名:MUX41a(3)跳过“添加文件”步骤。

(4)选择目标芯片(EP3C55F484C8)(5)跳过“工具设置”步骤,点击“Finish”。

3.输入设计文件。

(1)选择“File->New”命令,选择VerilogHDLFile选项。

(2)在文本编辑器中输入4选一选择器的代码(使用Case语句)。

(3)选择File->SaveAs命令保存文件。

3.进行全程编译。

编译过程中注意Processing窗口的编译信息。

4.查看编译报告。

扩展实验与思考:1.将代码中Case语句修改为if-else语句,比较两者的编译结果(硬件资源使用情况)。

2.将if-else语句改为不完整条件语句,再次编译后查看编译结果(1.查看综合报告中的警告信息;2.利用Tools>NetlistViewers>RTLViewer查看结构图)。

实验2:ModelSim仿真实验1实验步骤:(1)启动Modelsim;(2)选择File->New->Project建立新工程,工程目录指定为实验1所用目录,加入验证对象文件MUX41a.v;(3)在Project窗口中选中设计文件,单击鼠标右键,选择Compile->CompileAll 编译源代码;如有编译错误,修改源代码;(4)选择Simulate->StartSimulation或点击Simulate按键,选Library窗口中work->MUX41a,点击OK。

(5)在Object窗口中选择需要观察的信号,单击鼠标右键,选择Add->ToWave->SelectedSingals,添加待观察信号至波形窗口;(6)在Transcript窗口中使用force输入激励信号;例如:forceA0(7)在Transcript窗口输入run命令或点击run按键执行仿真,查看结果. (8)改变激励信号,执行仿真并查看结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 QUARTUS Ⅱ的设计流程[输入方式:文本输入、图形输入、波形输入等]一、实验目的:1、掌握QUARTUSⅡ安装过程;2、熟悉QUARTUSⅡ设计环境;3、掌握QUARTUSⅡ的设计过程。

二、实验内容:用文本输入法设计一个半加器。

三、实验步骤:一、安装QUARTUS II。

注:第一次安装QUARTUS要安装license。

二、QUARTUSⅡ设计开发步骤(一)、创建工作文件夹在windows中建立一个文件夹(又称工作库或WORK LIBRARY),用于保存设计工程项目的有关文件。

注:设计工程项目的有关文件不能保存在根目录下,必须保存在一个文件夹之下。

例如建立的文件夹:E:\HADD(二)、启动Quartus II点击QUARTUSⅡ9.0图标打开QUARTUSⅡ9.0设计窗口。

(三)、设计文件输入1、打开输入文件编辑器点击菜单File\new…新建立一个文本设计文件。

用文本输入法输入程序。

程序见附录。

2、保存文件,文件名名同实体名。

后缀.v(四)、全编译(逻辑综合)1、创建工程点击菜单File\New Project Wizard…….进行工程设置。

完成工作文件夹的选定、工程名、顶层设计文件名、编程器件的确定等工程。

2、编译前的相关设置设置⑴选择PLD芯片:Assignmenmts\Settings\Device弹出的窗口中选择选择芯片。

⑵选择配置芯片的工作方式:Assignmenmts\Settings\Device\Device&Pin Options弹出的窗口中首选General项,在Options栏中选择Auto-restart-configuration after error.⑶选择配置芯片和编程方式:Assignmenmts\Settings\Device\Device&Pin Options弹出的窗口中选择Configuration栏,在窗口中设置配置方式,配置芯片和是否生成压缩的配置文件。

⑷选择输出设置:保持默认。

⑸选择目标器件闲置引脚的状态:Assignmenmts\Settings\Device\Device&Pin Options弹出的窗口中选择Unused Pins栏,在窗口中对闲置的引脚设置,推荐设置为As input driving groud。

3、执行全程编译:Processing\Start Compilation。

完成对设计项目的检错、逻辑综合、结构综合、配置文件生成以及时序分析。

(五)、功能仿真(或时序仿真)建议先做功能仿真,以检验设计项目的逻辑真确性,这样可以提供设计效率。

1、功能仿真设置:Assignmenmts\Settings弹出的窗口中选择Simulator Settings。

在右边Simulation mode中选择 Functional.2、Processing\Generate Functional Simulation netlist,生成功能仿真所需的文件。

3、建立波形文件并进行功能仿真⑴File\New,在窗口中选择Vector Waveform file打开向量波形文件编辑器。

⑵设置仿真时间区域:可默认。

一般几十微妙。

时间区域过长,使仿真时间变长,影响仿真效率。

⑶在向量波形文件编辑器中添加项目的相关引脚。

原则上是所有引脚,但有的项目引脚很多,可以只添加必要的一些引脚。

双击向量波形文件编辑器Name栏的空白区域后,会弹出一个“Insert Node or Bus”对话框,在弹出的对话框中选择“Node Finder…”按钮,则弹出“Node Finder…”对话框,选择Filter:Pins:all,然后点击List,Nodes Found栏将列出所有输入、输出端口。

选择要观察的信号,点击“>”命令按钮加入到观察目标窗口中。

选择OK,则在波形图中加入了待观察信号的图形。

或者执行View\Utility Windows\Node Finder命令打开Node Finder窗口,在弹出的窗口中将所需引脚拖入波形编辑器中。

⑷编辑输入波形:对所有的输入引脚设置合适的波形。

⑸启动仿真器:Processing\Start Simulation.⑹观察分析仿真结果。

仿真结果保存于文件“Simulation Report”,此文件在仿真完成后会自动弹出。

若仿真结果有出入,重新修改程序,直到仿真结果没有问题。

(六)、进时序仿真,验证设计的时序是否满足设计要求。

注:详细的使用说明见教材相关章节及实验材料。

附录:半加器程序module hadd(a,b,s,out1); input a,b; output s,out1;assign s=~a&b|~b&a; assign out1=a&b; endmodule实验二 一位二进制全加器的文本设计一:实验目的1、巩固QUARTUS Ⅱ设计过程和设计环境。

2、了解Verilog 的三种描述方式。

3、巩固Verilog 语言的构成要素。

二、实验内容用Verilog 设计一个如图的1位全加器。

要求采用结构描述法编写程序并进行下载验证。

全加器的结构图如上图。

用Verilog 语言描述其功能。

先描述半加器和或门电路,然后用例化语句将半加器和或门电路连接构成全加器。

下载验证提示:1、芯片选择ACEX1K\EP1K30QC208-2;2、引脚锁定:根据实验箱的设计,KD1-ain;KD2-bin;KD3-cin;LED1-sum;LED2-cout;所以sun,cout ,ain,bin,cin 分别锁定到EP1K30QC208-2的19,24,45,46,47脚。

管脚分布见《EDA 技术实验开发系统》15页;芯片引脚I/O 分布见《EDA 技术实验开发系统》24-25页.3、全编译;4、下载线连接:将25针连下一端连接电脑LPT1口,一端连接到编程模块的DB25接口,再用十针连线一头插入通用编程模块JTGA 下载接口处,另一头连接到目标芯片的下载接口。

5、打开实验箱电源,将模式选择开关CTRL 的(2)(4)(8)拨至ON ,使按键KD1,KD2,LED1,LED2,LED3,KL1,KL2等有效。

6、下载:Tools\Programmer,完成下载。

7、拨动开关按键KD1,KD2,KD3 ,验证电路。

注:下载时,关闭时钟模块的电源,以免对下载芯片干扰,无法完成下载。

实验三 用原理图输入法设计8位全加器一、实验目的:熟悉和掌握用QUARTUS Ⅱ的原理图输入方法设计简单组合电路的方法,并通过一个8位全加器的设计掌握用EDA 软件进行电子线路设计的详细流程。

二、实验原理:一个8位全加器可以由8个1位全加器构成,加法器间的进位可以串行方式实现,即将低位加法器的进位输出cout 与相邻的高位加法器的最低位输入信号cin 相接。

三、实验内容:用原理图输入法设计一个8位全加器。

四:实验步骤:1、打开原理图编辑器,完成半加器和全加器的设计。

包括原理图输入、编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路符号入库。

详细的过程见课件。

根据以上步骤画出以下原理图:1位半加器的原理图如图一。

名字hadder.图一在完成1位半加器的原理图后,进行编译综合之后,选择File\create\Create Symbol file for current file,将文件变成一个包装好的单一元件模块待调用。

仿真效果是:运用以上包装好的1位半加器可画以下1 位全加器,如图二。

名字adder。

图二在完成1位全加器的原理图后,进行编译综合之后,选择File\create\Create Symbol file for current file,将文件变成一个包装好的单一元件模块待调用。

仿真效果如图三:图三2、建立一个更高的原理图设计层次,利用以上获得的1位全加器构成8位全加器,并完成编译、综合、适配、仿真和测试。

运用以上包装好的1 位半加器、全加器,可画以下8位的全加器,如图四仿真效果如图五:注意:每一个设计(文本或原理图)都能创建一个原理图符号,并且也只可以在同工程设计中被调用。

实验四设计含异步清零和同步时钟使能的4位加法计数器一、实验目的:学习计数器的设计、仿真,进一步熟悉Verilog设计技术。

二、实验内容:设计一个10进制加法计数器,并且具有异步清零和同步时钟使能的功能。

在QUARTUS Ⅱ上对程序进行编辑、编译、综合、适配、仿真,编程下载验证逻辑功能。

用注释说明程序中各语句的作用,详细描述其功能特点,给出其所有信号的时序仿真波形。

再建立一个波形文件,进行时序仿真。

规定:时钟信号CLK;使能信号EN;清零信号RST;进位信号COUT;输出信号CQ[3:0]。

提示:管脚锁定根据实验箱组成特点,CLK锁定到79脚,EN锁定到44脚,RST锁定到45脚,COUT锁定到27脚,CQ 分别锁定到19、24、25、26脚。

(或自己根据实验箱锁定)思考题:总结时序逻辑电路的设计的方法。

实验五用状态机实现序列检测器的设计一、实验目的1、熟悉状态机的作用及设计方法;2、学习用状态机实现序列检测器的设计,并对其进行仿真和硬件测试。

二、实验原理序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果与检测器预先设置的码相同,则输出为1,否则输出为0。

三、实验内容设计一个序列检测器,对1110010进行检测,对设计进行仿真测试并给出仿真波形。

提示:序列检测器的状态转换图如下:实验六数字钟的设计一、实验目的1.掌握各类计数器及将它们相连的方法;2.掌握多个数码管动态显示的原理与方法;3.掌握用FPGA技术的层次化设计方法;4.进一步掌握用硬件描述语言的设计思想;5.了解有关数字系统的设计。

二、实验内容:设计一个数字钟,设计要求如下:(一)、基本要求:1、24小时计数显示;2、具有校时功能(时,分);(二)、附加要求:1、实现闹钟功能(定时,闹响);实验七:等精度频率计设计一、实验目的1.掌握等精度频率计设计方法;2.掌握多个数码管动态显示的原理与方法;3.掌握用FPGA技术的层次化设计方法;4.进一步掌握用硬件描述语言的设计思想;5.了解有关数字系统的设计。

二、实验内容:设计一个等精度频率计,设计要求如下:1、频率测试功能:测频范围0.1Hz~10MHz。

测频精度:测频全域相对误差恒为百万分之一。

2、脉宽测试功能:测试范围0.1μs~1s,测试精度0.01μs 。

(可选)3、占空比测试功能:测试精度1%~99%(可选)实验八:正弦信号发生器的设计一、实验目的1、掌握 LPM_ROM与FPGA资源的使用方法2、进一步掌握用硬件描述语言的设计思想;5.了解有关数字系统的设计。

相关文档
最新文档