可编程数字ASIC设计_实验指导书.doc_第1页
可编程数字ASIC设计_实验指导书.doc_第2页
可编程数字ASIC设计_实验指导书.doc_第3页
可编程数字ASIC设计_实验指导书.doc_第4页
可编程数字ASIC设计_实验指导书.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长春建筑学院可编程数字ASIC设计课程 实 验 指 导 书电气信息学院FPGA系列实验一 点亮 LED1. 实验任务点亮发光二极管。通过这个实验,熟悉并掌握 CPLD/FPGA 开发软件 Quartus II 的使用方法和开发流程以及 Verilog HDL 的编程方法。2. 实验环境硬件实验环境为 FPGA实验开发系统。软件实验环境为 Quartus II 13.0 开发软件。3. 实验原理FPGA 器件同单片机一样,为用户提供了许多灵活的独立的输入/输出 I/O 口(单元)。FPGA 每个 I/O 口可以配置为输入、输出、双向、集电极开路和三态门等各种组态。作为输出口时,FPGA 的 I/O 口可以吸收最大为 24mA 的电流,可以直接驱动发光二极管 LED 等器件。通过原理图可知如果要点亮这八个 LED,所以只要正确分配并锁定引脚后,在相应的引脚上输出相应高电平“1”,就可实现点亮该发光二极管的功能。开发板均采用输出“1”点亮 LED 的模式,以后就不再另作说明。4. 实验程序(1) 利用连续赋值 assign 语句来实现(文件名 led.v) module led1 (led);/模块名 led output7:0 led;/定义输出端口 assign led=8b10101010; endmodule(2) 利用过程赋值语句来实现(文件名 led1.v) module led1(led);/模块名 led1 output7:0led;/定义输出端口 reg7:0led; always begin led= 8b10101010; end endmodule5. 实验步骤(1)建立新工程项目:打开 Quartus II 软件,进入集成开发环境,点击 FileNew projectwizard 建立一个工程项目 led。(2)建立文本编辑文件:点击 FileNew.,在该项目下新建 Verilog HDL 源程序文件 led.v,输入试验程序中的源程序代码保存后选择工具栏中的按钮启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。(3)选择器件型号及引脚的其他设置:选择所用的 FPGA 器件,以及进行一些配置。选择配置器件 EPCS4,设置不需要使用的 IO 功能为 As inputs,tri-stated。点击两次 ok,回到主界面。(4)配置 FPGA 引脚:在 Quartus II 软件主页面下,选择 AssignmentsPins 或选择工具栏上按钮,配置 led0-led7以及 clk 的引脚。(5)编译工程项目:在 Quartus II 主页面下,选择 ProcessingStart Compilation 或点击工具栏上的按钮启动编译,直到出现“Full Compilation Report”对话框,点击 OK 即可。(6)波形仿真:由于本次试验比较简单,波形仿真将在后面实验详细讲解。(7)下载设计程序到目标 FPGA。6. 实验现象第一个实验终于完成了,看到实验板上的 8 个 LED 灯间隔点亮,是不是特有成就感!只要动手,一切都这么简单!让我们进行下面的实验吧!以后的实验将会更精彩!FPGA系列实验二LED 闪烁灯1. 实验任务让实验板上的 8 个 LED 周期性的闪烁。通过这个实验,熟悉并掌握采用计数与判断的方式来实现分频的 Verilog HDL 的编程方法以及 Quartus II 软件的使用方法和开发流程。2. 实验环境硬件实验环境为 FPGA实验开发系统。软件实验环境为 Quartus II 13.0 开发软件。3. 实验原理开发套件板载 50MHz 的时钟源,假如我们直接把它输入到发光二极管 LED,由于人眼的延迟性,我们将无法看到 LED 闪烁,认为它一直亮着。如果我们期望看到闪烁灯,就需要将时钟源的频率降低后再输出。本实验采用计数与判段的方式来实现降低时钟源的频率。计数电路可用计数器实现,每来一个时钟脉冲 CLK,计数器就加 1,而每当判断出计数器达到某个数值时,把输出状态求反,就使得 8 个 LED 的亮灭反转一次,即:周期性的输出高电平“1”和低电平“0”。这样设计相当于把 50MHz 的时钟源分频后输出。如果最终要使得 LED 1S 闪烁一次,即输出 1Hz 的时钟脉冲,让计数器计到 25000000 便可以让 LED 亮 0.5 秒、灭 0.5 秒。4. 实验程序module led1 (clk ,led);/ 模块名及端口参数input clk; / 输入端口定义output 7:0led;/ 输出端口定义reg 7:0led;/ 输出端口定义为寄存器型reg 25:0 buffer;/ 中间变量 buffer 定义为寄存器型always(posedge clk) begin/ 顺序语句,到 end 止 buffer=buffer+1; / 计数器 buffer 按位加 1 if(buffer=26d25000000) /判别buffer中的数值为25000000 时, /做输出处理 begin led=led; / led0-led7反转一次。 buffer=0; end endendmodule5. 实验步骤(1)建立新工程项目:打开 Quartus II 软件,进入集成开发环境,点击 FileNew projectwizard 建立一个工程项目 led1。(2)建立文本编辑文件:点击 FileNew.,在该项目下新建 Verilog HDL 源程序文件 led1.v,输入试验程序中的源程序代码保存后选择工具栏中的按钮启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。(3)选择器件型号及引脚的其他设置:选择所用的 FPGA 器件,以及进行一些配置。选择配置器件 EPCS4,设置不需要使用的 IO 功能为 As inputs,tri-stated。点击两次 ok,回到主界面。(4)配置 FPGA 引脚:在 Quartus II 软件主页面下,选择 AssignmentsPins 或选择工具栏上按钮,配置 led0-led7以及 clk 的引脚。(5)编译工程项目:在 Quartus II 主页面下,选择 ProcessingStart Compilation 或点击工具栏上的按钮启动编译,直到出现“Full Compilation Report”对话框,点击 OK 即可。(6)波形仿真:由于本次试验比较简单,波形仿真将在后面实验详细讲解。(7)下载设计程序到目标 FPGA。6. 实验现象第二个实验完成了,看到实验板上 8 个 LED 灯周期性的闪烁,是不是觉得这个实验比上个实验有意思呢?回想一下我们通过这个实验学会了什么?采用计数与判断的方式来实现分频的 Verilog HDL 的编程方法,你学会了没?应该有那么一点点收获吧!FPGA系列实验三LED 流水灯1. 实验任务让实验板上的 8 个 LED 实现流水灯的功能。通过这个实验,进一步掌握采用计数与判断的方式来实现分频的 Verilog HDL 的编程方法以及移位运算符的使用。2. 实验环境硬件实验环境为 FPGA实验开发系统。软件实验环境为 Quartus II 13.0 开发软件。3. 实验原理流水灯,顾名思义就是让 LED 象水一样的点亮。如果把流水做慢动作播放,可以想象到其实就是移动,即:把水块不断地向同一方向移动,而原来的水块保持不动,就形成了流水。同样,如果使得最左边的灯先亮;然后,通过移位,在其右侧的灯,由左向右依次点亮,而已经亮的灯又不灭,便形成了向右的流水灯。初始状态时,8 个灯都不亮。每来一个时钟脉冲 CLK,计数器就加 1。每当判断出计数器中的数值达到 25000000 时,就会点亮一个灯,并进行移位。FPGA 输出的数 据 就应 该首先是 10000000 ,隔 1 秒钟 变成 11000000一 直 变化 到11111111,这样,依次点亮所有的灯,就形成了流水灯。而当 8 个灯都点亮时,需要一个操作使得所有的灯恢复为初始状态,即:灯都不亮。然后,再一次流水即可。如果是右移位,就出现向右流水的现象;反之,向左流水。4. 实验程序module ledwater(clk,led); / 模块名及端口参数output 7:0 led;/ 输出端口定义input clk;/ 输入端口定义,50M 时钟reg8:0 led_out;/ 变量 led_out 定义为寄存器型reg8:0 led_out1;/ 变量 led_out1 定义为寄存器型reg25:0buffer;/ 中间变量 buffer 定义为寄存器型always(posedge clk)begin buffer=buffer+1; if (buffer=26d25000000) / 判别 buffer 数值为 25000000 时,做输出处理 begin led_out=led_out1; / led 向左移位,空闲位自动添 0 补位 if(led_out=9b000000000) led_out=9b111111111;led_out1=led_out; /取反输出endendassign led=led_out17:0;endmodule5. 实验步骤(1)建立新工程项目:打开 Quartus II 软件,进入集成开发环境,点击 FileNew project wizard 建立一个工程项目 ledwater。(2)建立文本编辑文件:点击 File New 在该项目下新建 Verilog HDL 源程序文件 ledwater.v,输入试验程序中的源程序代码保存后选择工具栏中的按钮启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。(3)选择器件型号及引脚的其他设置:选择所用的 FPGA 器件,以及进行一些配置。设置不需要使用的 IO 功能为 As inputs,tri-stated。点击两次 ok,回到主界面。(4)配置 FPGA 引脚:在 Quartus II 软件主页面下,选择 Assignments Pins 或选择工具栏上按钮,配置 led0-led7以及 clk 的引脚。(5)编译工程项目: 在 Quartus II 主页面下,选择 Processing Start Compilation 或点击工具栏上的按钮启动编译,直到出现“Full Compilation Report”对话框,点击 OK 即可。(6)波形仿真:由于本次试验比较简单,波形仿真将在后面实验详细讲解。(7)下载设计程序到目标 FPGA6. 实验现象经过前两个实验的训练,第三个实验应该很轻松地就做完了吧!看到实验板上 LED 实验了流水灯的功能,你是否掌握了移位运算符的使用,你可以试着自己编写其他花样的流水灯,比如左流水或其他花样的流水灯,这就要看你的想象力了。FPGA 系列实验四LED 跑马灯1. 实验任务让实验板上的 8 个 LED 实现跑马灯的功能。通过这个实验,进一步掌握采用计数与判断的方式来实现分频的 Verilog HDL 的编程方法以及移位运算符的使用。2. 实验环境硬件实验环境为 FPGA实验开发系统。软件实验环境为 Quartus II 13.0 开发软件。3. 实验原理从LED0到LED7依次点亮,第二个灯点亮时第一个熄灭,每个灯交换的时间为0.5S;看上去的效果就象一个亮点从LED0 跑向LED7,然后重复此循环,故命名跑马灯。初始状态时,LED0亮,其余熄灭。每来一个时钟脉冲CLK,计数器就加1。每当判断出计数器中的数值达到25000000时,就会点亮LED1,同时LED0熄灭,并进行移位。这样,依次点亮所有的灯,就形成了跑马灯。而当LED7点亮时,需要一个操作使得恢复为初始状态,即:LED0亮,其余熄灭。然后,再进行一次跑马灯,重复此循环。如果是右移位,就出现向右跑马的现象;反之,向左跑马。4. 实验程序module ledwalk(led,clk);input clk;output 7:0 led;reg7:0led_out;reg25:0buffer;always(posedge clk)begin buffer=buffer+1b1; if(buffer=26d25000000) begin led_out=led_out1; if(led_out=8b00000000) led_out=8b00000001; endendassign led=led_out;endmodule5. 实验步骤(1)建立新工程项目:打开 Quartus II 软件,进入集成开发环境,点击 FileNew project wizard 建立一个工程项目 ledwalk。(2)建立文本编辑文件:点击 FileNew.在该项目下新建 Verilog HDL 源程序文件 ledwalk.v,输入试验程序中的源程序代码保存后选择工具栏中的按钮启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。(3)选择器件型号及引脚的其他设置: 选择所用的 FPGA 器件,以及进行一些配置。选择配置器件 EPCS4,设置不需要使用的 IO 功能为 As inputs,tri-stated。点击两次 ok,回到主界面。(4)配置 FPGA 引脚:在 Quartus II 软件主页面下,选择 AssignmentsPins 或选择工具栏上按钮,配置 LED0-LED7以及 clk 的引脚。(5)编译工程项目:在 Quartus II 主页面下,选择 ProcessingStart Compilation 或点击工具栏上的按钮启动编译,直到出现“Full Compilation Report”对话框,点击 OK 即可。(6)波形仿真:由于本次试验比较简单,波形仿真将在后面实验详细讲解。(7)下载设计程序到目标 FPGA6. 实验现象实验应该很轻松就成功了吧!看到 LED0到 LED7依次点亮,移位运算符的使用应当非常熟练了吧!你有没有想过用其他方式实现跑马灯的功能,比如用 case 语句。下面给出一个用 case 语句实现的跑马灯程序供大家学习。大家可以比较一下两钟方式实现跑马灯的资源占用情况。FPGA 系列实验五LED 花样彩灯1. 实验任务让实验板上的 8 个 LED 实现花样彩灯的功能。通过这个实验,进一步掌握采用计数器实现分频的 Verilog HDL 的编程方法以及 case 语句的使用。2. 实验环境硬件实验环境为 FPGA实验开发系统。软件实验环境为 Quartus II 13.0 开发软件。3. 实验原理本次试验是对前几个实验的总结,让LED逐步实现闪烁流水灯闪烁跑马灯闪烁对灯流水闪烁,重复此循环即可实现彩灯显示功能。本次实验程序采用case语句编写,程序比较通俗易懂,具体实现原理在前面实验都已详细讲述,本次试验将不再重复。4. 实验程序module led_run(sys_clk,led);input sys_clk;output 7:0 led;reg 7:0 led;reg 24:0 count;reg 4:0 state;wire clk;always (posedge sys_clk)count=count+1b1;assign clk=count23;always (posedge clk)begincase(state)5b00000: led=8b11111111;5b00001: led=8b00000000;5b00010: led=8b10000000;5b00011: led=8b11000000;5b00100: led=8b11100000;5b00101: led=8b11110000;5b00110: led=8b11111000;5b00111: led=8b11111100;5b01000: led=8b11111110;5b01001: led=8b11111111;5b01010: led=8b00000000;5b01011: led=8b11111111;5b01100: led=8b00000001;5b01101: led=8b00000010;5b01110: led=8b00000100;5b01111: led=8b00001000;5b10000: led=8b00010000;5b10001: led=8b00100000;5b10010: led=8b01000000;5b10011: led=8b10000000;5b10100: led=8b11111111;5b10101: led=8b00000000;5b10110: led=8b11111111;5b10111: led=8b10000001;5b11000: led=8b11000011;5b11001: led=8b11100111;5b11010: led=8b11111111;5b11011: led=8b00011000;5b11100: led=8b00111100;5b11101: led=8b01111110;5b11

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论