硬件描述语言与EDA技术课程设计频率发生器

上传人:仙*** 文档编号:32042042 上传时间:2021-10-13 格式:DOC 页数:34 大小:725KB
返回 下载 相关 举报
硬件描述语言与EDA技术课程设计频率发生器_第1页
第1页 / 共34页
硬件描述语言与EDA技术课程设计频率发生器_第2页
第2页 / 共34页
硬件描述语言与EDA技术课程设计频率发生器_第3页
第3页 / 共34页
点击查看更多>>
资源描述
课 程 设 计 课程名称 硬件描述语言与EDA技术 题目名称 硬件描述语言与EDA技术实践学生学院 材料与能源 专业班级 12微电子学(2)班 学 号 3112007374 学生姓名 郑 培 柱 指导教师 陈 先 朝 2015年 6月 22日广东工业大学课程设计任务书题目名称硬件描述语言与EDA技术实践学生学院材料与能源学院专业班级12微电子学(2)班姓 名学 号一、课程设计的内容与要求1. 系统功能分析,分模块层次化设计;2. 实现系统功能的方案设计;3. 编写各功能模块Verilog HDL语言程序;4. 对各功能模块进行编译、综合、仿真和验证;5. 顶层文件设计,可用Verilog HDL语言设计,也可以用原理图设计;6. 整个系统进行编译、综合、仿真和验证;7. 在CPLD/FPGA实验开发系统试验箱上进行硬件验证;8. 按所布置的题目要求,每一位学生独立完成全过程。二、课程设计应完成的工作1. 所要求设计内容的全部工作;2. 按设计指导书要求提交一份报告书;3. 提交电子版的设计全部内容:工程目录文件夹中的全部内容,报告书三、课程设计进程安排序号设计各阶段内容地点起止日期1布置设计题目和要求;收集相关资料。工3317或宿舍6.222方案分析与确定;编写Verilog源程序。工3317或宿舍6.233编写Verilog源程序;编译、综合、仿真、定时分析、适配。工3317或宿舍6.244下载和硬件验证;验收。工33176.255下载和硬件验证;验收;撰写报告工33176.26678四、应收集的资料及主要参考文献1. 陈先朝,硬件描述语言与EDA技术实践指导书,2015年5月2. 潘松等编著,EDA技术与Verilog HDL ,电子工业出版社,2013年;3. 现代数字电子技术及Verilog设计,清华大学出版社,2014年; 4. 王金明等编著,EDA技术与Verilog HDL设计,电子工业出版社,2013年;5. 刘靳等编著,Verilog程序设计与EDA ,西安电子科技大学出版社,2012年;6. 刘福奇主编,Verilog HDL 应用程序设计实例精讲,电子工业出版社,2012年;7. 周润景等主编,基于Quartus 的数字系统Verilog HDL设计实例详解,电子工业出版社,2010年。发出任务书日期: 2015年6月 22日 指导教师签名:计划完成日期: 2015年6月 26日 基层教学单位责任人签章:主管院长签章:摘要 Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司购)开发。两种HDL均为IEEE标准。本课程设计以Verilog为基础设计一个多路彩灯控制器,能够在4种不同的彩灯花样之间进行循环变化,并可设置花型变化的节奏,且可进行复位。关键词:Verilog,彩灯,控制,FPGA一、 目的与任务 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6二、 设计原理及方案 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6三、 设计分析 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -63.1 三频率输出模块3.2 三选一选择模块3.3 彩灯显示模块 3.4 顶层文件设计 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -11 四、管脚分配 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 14 五、心得体会- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 15 六、参考文献- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 15附录- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -16一、 目的与任务1. 熟悉掌握EDA工具软件Quartus2的使用2. 熟练用Verilog硬件描述语言描述数字电路3. 学会使用Verilog进行大规模集成电路设计4. 学会用CPLD/FPGA实践系统硬件验证电路设计的正确性5. 初步掌握EDA技术并具备一定的可编程逻辑芯片的开发能力二、 设计原理及方案原理:建立一个并行操作的流水灯模块,形成不同的彩灯花样,同时使用不同频率,实现不同频率的不同花样显示。方案:总电路由一个三分频输出分频器模块,三选一选择模块,并行操作的流水灯模块。三频率输出分频器模块把输入频率分成三个不同的频率输出,四选一选择不同的频率输出给彩灯显示,从而达到控制彩灯闪烁速度的快慢。三、 设计分析3.1三频率输出模块 该模块是将高频时钟转换成低频时钟信号,CLK信号经分频器将50mHZ进行1分频、3分频和6分频提供给三选一选择器。按下复位键可使模块复位。 首先定义模块接口及变量如下: module fenpin(CLK,RSTn,CLK1, /1分频CLK2,/3分频CLK3 /6分频); input CLK; input RSTn; output CLK1,CLK2,CLK3; reg CLK2,CLK3;可见,分别定义了三个输出时钟信号,分别是1分频,3分频和6分频。其中1分频比较简单: assign CLK1 = CLK;三分频代码如下:reg 3:0a;/*frequency dividing 3*/always (posedge CLK or negedge RSTn) if( !RSTn ) a = 1d0;else if (CLK&a=3d3)beginCLK2=1d1;a=1d0; endelse begin CLK2=1d0;a=a+1d1;end 定义了reg变量a,计算CLK脉冲,每一个CLK脉冲自加,达到3的时候输输出一个CLK2脉冲并清零a变量,重复上面过程。这样便形成CLK时钟的三分频时钟CLK2。六分频代码如下:reg 4:0b;/*frequency dividing 6*/always (posedge CLK or negedge RSTn) if( !RSTn ) b = 1d0;else if (CLK&b=4d6) begin CLK3=1d1;b=1d0; end else begin CLK3=1d0; b=b+1d1; end类似三分频代码,只是reg变量计数CLK脉冲数到6才输出CLK3脉冲并清零。3.2 三选一选择模块 该模块是选择输入的三个频率中的一个频率给彩灯显示系统,f_choice1、f_choice2、f_choice3分别选择对应CLK1、CLK2、CLK3输出频率按键,RESn 复位按键实现对模块的复位。首先定义三选一选择器的模块端口及变量,代码如下:module choice_3( f_choice1, f_choice2,f_choice3,RSTn, CLK1,CLK2,CLK3,CLK_OUT); input f_choice1,f_choice2,f_choice3; input RSTn,CLK1,CLK2,CLK3; output CLK_OUT; reg CLK_OUT;先定义一个reg变量c,根据按键操作赋值。敏感信号为按键信号和复位信号。reg 3:0 c;always (negedge f_choice1 or negedge f_choice2 or negedge f_choice3 or negedge RSTn) if( !RSTn )c = 1d0; else if(!f_choice1)c=3d0;else if(!f_choice2)c=3d1;else if(!f_choice3)c=3d2; 最后根据reg变量c选择不同频率。/*/ always (*) case (c) 3d0:CLK_OUT=CLK1; 3d1:CLK_OUT=CLK2; 3d2:CLK_OUT=CLK3; default : CLK_OUT=CLK1;这样,就完成了三选一频率选择器。3.3 彩灯显示模块 以上图为基础,设计并行操作的流水灯,每一功能模块在将定时间内,将输出拉高。示意图如下: 从上图我们可以看到,功能模块1在时间的第一个1/4拉高输出,功能模块2在第二个1/4拉高输出,其余的模块也是以此类推。所以在一个特定的时间段内,每一个功能模块所占的时间都是一样。本设计采用六个LED资源。led0_module.v先定义接口:module led0_module( CLK, RSTn, LED_Out); input CLK; input RSTn; output LED_Out; /*/ 然后定义总的时间长度,总共分成15个时间段: parameter T100MS = 25d15_000_000; /*/ 利用Count1计算一个循环的时间: reg 25:0Count1; always ( posedge CLK or negedge RSTn ) if( !RSTn ) Count1 = 25d0; else if( Count1 = T100MS ) Count1 = 25d0; else Count1 = Count1 + 1b1; /*/在一个循环内的15个时间段中,让led0在特定时间段拉高输出:reg rLED_Out;always ( posedge CLK or negedge RSTn ) if( !RSTn ) rLED_Out = 25d0 & Count1 25d1_000_000 ) rLED_Out = 25d10_000_000 & Count1 25d11_000_000 ) rLED_Out = 25d14_000_000 & Count1 25d15_000_000 ) rLED_Out = 1b1; else rLED_Out = 1b0; /*/ assign LED_Out = rLED_Out; /*/ endmodule类似的,led1_module.v、led2_module.v、led3_module.v、led4_module.v、led5_module.v内,让led1、led2、led3、led4、led5分别在特定的时间段拉高输出,其他时间段拉低输出。最终形成了四个花样的流水灯。分别是1、从左到右依次点亮;2、从右到左依次点亮;3、从两边向中间依次点亮;4、从中间向两边依次点亮。即Count1 led0 led1 led2 led3 led4 led50-1000000: 1 0 0 0 0 01000000-2000000 0 1 0 0 0 02000000-3000000 0 0 1 0 0 03000000-4000000 0 0 0 1 0 04000000-5000000 0 0 0 0 1 0 5000000-6000000 0 0 0 0 0 16000000-7000000 0 0 0 0 1 07000000-8000000 0 0 0 1 0 08000000-9000000 0 0 1 0 0 09000000-10000000 0 1 0 0 0 010000000-11000000 1 0 0 0 0 111000000-12000000 0 1 0 0 1 012000000-13000000 0 0 1 1 0 013000000-14000000 0 1 0 0 1 014000000-15000000 1 0 0 0 0 1下一个循环3.4 顶层文件设计通过元件例化,将分频模块fenpin_module、频率选择模块f_choice_module、led0_module、led1_module、led2_module、led3_module、led4_module和led5_module连结起来。形成一多路频率选择的彩灯循环控制器。首先定义总端口:module top_module( CLK, RSTn, LED_Out,f_choice1,f_choice2,f_choice3,); input CLK; input RSTn,f_choice1,f_choice2,f_choice3; output 5:0LED_Out; /*/ 分频器模块连接: wire CLK1_Out,CLK2_Out,CLK3_Out; fenpin U7 ( .CLK( CLK ), .RSTn( RSTn ), .CLK1( CLK1_Out ), .CLK2( CLK2_Out ), .CLK3( CLK3_Out ) ); /*/ 数据选择器模块连结: choice_3 U8 ( .f_choice1(f_choice1), .f_choice2(f_choice2), .f_choice3(f_choice3), .RSTn( RSTn ), .CLK1( CLK1_Out ), .CLK2( CLK2_Out ), .CLK3( CLK3_Out ), .CLK_OUT(CLKOut) ); 各个led模块连结: /*/ wire LED0_Out; led0_module U1 ( .CLK( CLKOut ), .RSTn( RSTn ), .LED_Out( LED0_Out ) ); /*/ wire LED1_Out; led1_module U2 ( .CLK( CLKOut ), .RSTn( RSTn ), .LED_Out( LED1_Out ) ); /*/ wire LED2_Out; led2_module U3 ( .CLK( CLKOut ), .RSTn( RSTn ), .LED_Out( LED2_Out ) ); /*/ wire LED3_Out; led3_module U4 ( .CLK( CLKOut ), .RSTn( RSTn ), .LED_Out( LED3_Out ) ); /*/ wire LED4_Out; led4_module U5 ( .CLK( CLKOut ), .RSTn( RSTn ), .LED_Out( LED4_Out ) ); /*/ wire LED5_Out; led5_module U6 ( .CLK( CLKOut ), .RSTn( RSTn ), .LED_Out( LED5_Out ) ); /*/ assign LED_Out = LED5_Out,LED4_Out,LED3_Out, LED2_Out, LED1_Out, LED0_Out; /*/endmodule四、 管脚分配 本设计采用alera公司的EP2C5Q208芯片,在Category中,选择pin:在Edit下面的”To”和“location”中,分别为输入和输出端口指定芯片的引脚。第一次下载时,首先点击“Hardware Setup”,打开Hardware Setup对话框,然后点击Add Hardware,选择ByteBlaster II 后单击”Select Hardware”,下载形式为ByteBlaster II 。下载方式分别有AS下载和JTAG下载。 结果证实调试成功。五 、心得体会经过2天的程序编写和FPGA系统的下载调试,我不仅巩固了书本的知识,也进一步熟悉了Verilog语言的使用和编写,还对Quartus II 软件的使用更加熟练,也了解了FPGA开发系统的使用。通过这次课程设计,我认识到掌握书本的知识是远远不够,还要通过实践来巩固和提高。通过实践 ,让我对verilog理解更加深入,也对FPGA 开发有了较深入的理解。为以后工作实践打下良好基础。六 、参考文献陈先朝,硬件描述语言与EDA技术实践指导书,2015年5月潘松等编著,EDA技术与Verilog HDL ,电子工业出版社,2013年;现代数字电子技术及Verilog设计,清华大学出版社,2014年; 王金明等编著,EDA技术与Verilog HDL设计,电子工业出版社,2013年;刘靳等编著,Verilog程序设计与EDA ,西安电子科技大学出版社,2012年;刘福奇主编,Verilog HDL 应用程序设计实例精讲,电子工业出版社,2012年;周润景等主编,基于Quartus 的数字系统Verilog HDL设计实例详解,电子工业出版社,2010附录:fenpin.vmodule fenpin(CLK,RSTn,CLK1,CLK2,CLK3); input CLK; input RSTn; output CLK1,CLK2,CLK3; reg CLK2,CLK3;reg 3:0a;/*frequency dividing 3*/always (posedge CLK or negedge RSTn) if( !RSTn ) a = 1d0; else if (CLK&a=3d3) begin CLK2=1d1; a=1d0; end else begin CLK2=1d0; a=a+1d1; endreg 4:0b;/*frequency dividing 6*/always (posedge CLK or negedge RSTn) if( !RSTn ) b = 1d0; else if (CLK&b=4d6) begin CLK3=1d1; b=1d0; end else begin CLK3=1d0; b=b+1d1; end/*/ assign CLK1 = CLK; /*/endmodule choice_3.v:module choice_3( f_choice1, f_choice2,f_choice3,RSTn, CLK1,CLK2,CLK3,CLK_OUT); input f_choice1,f_choice2,f_choice3; input RSTn,CLK1,CLK2,CLK3; output CLK_OUT; reg CLK_OUT;reg 3:0 c;always (negedge f_choice1 or negedge f_choice2 or negedge f_choice3 or negedge RSTn) if( !RSTn ) c = 1d0; else if(!f_choice1) c=3d0; else if(!f_choice2) c=3d1; else if(!f_choice3) c=3d2; /*/ always (*) case (c) 3d0:CLK_OUT=CLK1; 3d1:CLK_OUT=CLK2; 3d2:CLK_OUT=CLK3; default : CLK_OUT=CLK1; endcase /*/endmoduleLed0_module:module led0_module( CLK, RSTn, LED_Out); input CLK; input RSTn; output LED_Out; /*/ parameter T100MS = 25d15_000_000; /*/ reg 25:0Count1; always ( posedge CLK or negedge RSTn ) if( !RSTn ) Count1 = 25d0; else if( Count1 = T100MS ) Count1 = 25d0; else Count1 = Count1 + 1b1; /*/reg rLED_Out;always ( posedge CLK or negedge RSTn ) if( !RSTn ) rLED_Out = 25d0 & Count1 25d1_000_000 ) rLED_Out = 25d10_000_000 & Count1 25d11_000_000 ) rLED_Out = 25d14_000_000 & Count1 25d15_000_000 ) rLED_Out = 1b1; else rLED_Out = 1b0; /*/ assign LED_Out = rLED_Out; /*/ EndmoduleLed1_module.vmodule led1_module( CLK, RSTn, LED_Out); input CLK; input RSTn; output LED_Out; /*/ parameter T100MS = 25d15_000_000; /*/ reg 25:0Count1; always ( posedge CLK or negedge RSTn ) if( !RSTn ) Count1 = 25d0; else if( Count1 = T100MS ) Count1 = 25d0; else Count1 = Count1 + 1b1; /*/reg rLED_Out;always ( posedge CLK or negedge RSTn ) if( !RSTn ) rLED_Out = 25d1_000_000 & Count1 25d2_000_000 ) rLED_Out = 25d9_000_000 & Count1 25d10_000_000 ) rLED_Out = 25d11_000_000 & Count1 25d12_000_000 ) rLED_Out = 25d13_000_000 & Count1 25d14_000_000 ) rLED_Out = 1b1; else rLED_Out = 1b0; /*/ assign LED_Out = rLED_Out; /*/ endmoduleled2_module.v:module led2_module( CLK, RSTn, LED_Out); input CLK; input RSTn; output LED_Out; /*/ parameter T100MS = 25d15_000_000; /*/ reg 25:0Count1; always ( posedge CLK or negedge RSTn ) if( !RSTn ) Count1 = 25d0; else if( Count1 = T100MS ) Count1 = 25d0; else Count1 = Count1 + 1b1; /*/reg rLED_Out;always ( posedge CLK or negedge RSTn ) if( !RSTn ) rLED_Out = 25d2_000_000 & Count1 25d3_000_000 ) rLED_Out = 25d8_000_000 & Count1 25d9_000_000 ) rLED_Out = 25d12_000_000 & Count1 25d13_000_000 ) rLED_Out = 1b1; else rLED_Out = 1b0; /*/ assign LED_Out = rLED_Out; /*/ endmoduleled3_module.v:module led3_module( CLK, RSTn, LED_Out); input CLK; input RSTn; output LED_Out; /*/ parameter T100MS = 25d15_000_000; /*/ reg 25:0Count1; always ( posedge CLK or negedge RSTn ) if( !RSTn ) Count1 = 25d0; else if( Count1 = T100MS ) Count1 = 25d0; else Count1 = Count1 + 1b1; /*/reg rLED_Out;always ( posedge CLK or negedge RSTn ) if( !RSTn ) rLED_Out = 25d3_000_000 & Count1 25d4_000_000 ) rLED_Out = 25d7_000_000 & Count1 25d8_000_000 ) rLED_Out = 25d12_000_000 & Count1 25d13_000_000 ) rLED_Out = 1b1; else rLED_Out = 1b0; /*/ assign LED_Out = rLED_Out; /*/ Led4_module.v:endmodule module led4_module( CLK, RSTn, LED_Out); input CLK; input RSTn; output LED_Out; /*/ parameter T100MS = 25d15_000_000; /*/ reg 25:0Count1; always ( posedge CLK or negedge RSTn ) if( !RSTn ) Count1 = 25d0; else if( Count1 = T100MS ) Count1 = 25d0; else Count1 = Count1 + 1b1; /*/reg rLED_Out;always ( posedge CLK or negedge RSTn ) if( !RSTn ) rLED_Out = 25d4_000_000 & Count1 25d5_000_000 ) rLED_Out = 25d6_000_000 & Count1 25d7_000_000 ) rLED_Out = 25d11_000_000 & Count1 25d12_000_000 ) rLED_Out = 25d13_000_000 & Count1 25d14_000_000 ) rLED_Out = 1b1; else rLED_Out = 1b0; /*/ assign LED_Out = rLED_Out; /*/ endmoduleled5_module.v:module led5_module( CLK, RSTn, LED_Out); input CLK; input RSTn; output LED_Out; /*/ parameter T100MS = 25d15_000_000; /*/ reg 25:0Count1; always ( posedge CLK or negedge RSTn ) if( !RSTn ) Count1 = 25d0; else if( Count1 = T100MS ) Count1 = 25d0; else Count1 = Count1 + 1b1; /*/reg rLED_Out;always ( posedge CLK or negedge RSTn ) if( !RSTn ) rLED_Out = 25d5_000_000 & Count1 25d6_000_000 ) rLED_Out = 25d10_000_000 & Count1 25d11_000_000 ) rLED_Out = 25d14_000_000 & Count1 25d15_000_000 ) rLED_Out = 1b1; else rLED_Out = 1b0; /*/ assign LED_Out = rLED_Out; /*/ endmoduletop_module.v:module top_module( CLK, RSTn, LED_Out,f_choice1,f_choice2,f_choice3,); input CLK; input RSTn,f_choice1,f_choice2,f_choice3; output 5:0LED_Out; /*/
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!