可编程数字ASIC设计实验指导书Word格式.docx
- 文档编号:20413040
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:12
- 大小:108.90KB
可编程数字ASIC设计实验指导书Word格式.docx
《可编程数字ASIC设计实验指导书Word格式.docx》由会员分享,可在线阅读,更多相关《可编程数字ASIC设计实验指导书Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
b10101010;
endmodule
(2)利用过程赋值语句来实现(文件名led1.v)
moduleled1(led);
//模块名led1
0]led;
reg[7:
always
begin
led=8'
end
5.实验步骤
(1)建立新工程项目:
打开QuartusII软件,进入集成开发环境,点击File→Newproject
wizard建立一个工程项目led。
(2)建立文本编辑文件:
点击File→New...,在该项目下新建VerilogHDL源程序文件led.v,输入试验程序中的源程序代码保存后选择工具栏中的
按钮启动编译,若在编译中发现错误,则找出并更正错误,直到编译成功为止。
(3)选择器件型号及引脚的其他设置:
选择所用的FPGA器件,以及进行一些配置。
选择配置器件EPCS4,设置不需要使用的IO功能为Asinputs,tri-stated。
点击两次ok,回到主界面。
(4)配置FPGA引脚:
在QuartusII软件主页面下,选择Assignments→Pins或选择工具栏上
按钮,配置led[0]---led[7]以及clk的引脚。
(5)编译工程项目:
在QuartusII主页面下,选择Processing→StartCompilation或点击工具栏上的
按钮启动编译,直到出现“FullCompilationReport”对话框,点击OK即可。
(6)波形仿真:
由于本次试验比较简单,波形仿真将在后面实验详细讲解。
(7)下载设计程序到目标FPGA。
6.实验现象
第一个实验终于完成了,看到实验板上的8个LED灯间隔点亮,是不是特有成就感!
只要动手,一切都这么简单!
让我们进行下面的实验吧!
以后的实验将会更精彩!
FPGA系列实验二——LED闪烁灯
让实验板上的8个LED周期性的闪烁。
通过这个实验,熟悉并掌握采用计数与判断的方式来实现分频的VerilogHDL的编程方法以及QuartusII软件的使用方法和开发流程。
开发套件板载50MHz的时钟源,假如我们直接把它输入到发光二极管LED,由于人眼的延迟性,我们将无法看到LED闪烁,认为它一直亮着。
如果我们期望看到闪烁灯,就需要将时钟源的频率降低后再输出。
本实验采用计数与判段的方式来实现降低时钟源的频率。
计数电路可用计数器实现,每来一个时钟脉冲CLK,计数器就加1,而每当判断出计数器达到某个数值时,把输出状态求反,就使得8个LED的亮灭反转一次,即:
周期性的输出高电平“1”和低电平“0”。
这样设计相当于把50MHz的时钟源分频后输出。
如果最终要使得LED1S闪烁一次,即输出1Hz的时钟脉冲,让计数器计到25000000便可以让LED亮0.5秒、灭0.5秒。
moduleled1(clk,led);
//模块名及端口参数
inputclk;
//输入端口定义
output[7:
//输出端口定义
reg[7:
//输出端口定义为寄存器型
reg[25:
0]buffer;
//中间变量buffer定义为寄存器型
always@(posedgeclk)
begin//顺序语句,到end止
buffer<
=buffer+1;
//计数器buffer按位加1
if(buffer==26'
d25000000)//判别buffer中的数值为25000000时,
//做输出处理
begin
led<
=~led;
//led[0]-led[7]反转一次。
=0;
end
end
endmodule
wizard建立一个工程项目led1。
点击File→New...,在该项目下新建VerilogHDL源程序文件led1.v,输入试验程序中的源程序代码保存后选择工具栏中的
第二个实验完成了,看到实验板上8个LED灯周期性的闪烁,是不是觉
得这个实验比上个实验有意思呢?
回想一下我们通过这个实验学会了什么?
采用计数与判断的方式来实现分频的VerilogHDL的编程方法,你学会了没?
应该有那么一点点收获吧!
FPGA系列实验三——LED流水灯
让实验板上的8个LED实现流水灯的功能。
通过这个实验,进一步掌握采用计数与判断的方式来实现分频的VerilogHDL的编程方法以及移位运算符的使用。
流水灯,顾名思义就是让LED象水一样的点亮。
如果把流水做慢动作播放,可以想象到其实就是移动,即:
把水块不断地向同一方向移动,而原来的水块保持不动,就形成了流水。
同样,如果使得最左边的灯先亮;
然后,通过移位,在其右侧的灯,由左向右依次点亮,而已经亮的灯又不灭,便形成了向右的流水灯。
初始状态时,8个灯都不亮。
每来一个时钟脉冲CLK,计数器就加1。
每当判断出计数器中的数值达到25000000时,就会点亮一个灯,并进行移位。
FPGA输出的数据就应该首先是10000000,隔1秒钟变成11000000……一直变化到11111111,这样,依次点亮所有的灯,就形成了流水灯。
而当8个灯都点亮时,需要一个操作使得所有的灯恢复为初始状态,即:
灯都不亮。
然后,再一次流水即可。
如果是右移位,就出现向右流水的现象;
反之,向左流水。
moduleledwater(clk,led);
//输入端口定义,50M时钟
reg[8:
0]led_out;
//变量led_out定义为寄存器型
0]led_out1;
//变量led_out1定义为寄存器型
reg[25:
0]buffer;
//中间变量buffer定义为寄存器型
begin
buffer=buffer+1;
if(buffer==26'
d25000000)//判别buffer数值为25000000时,做输出处理
led_out=led_out<
<
1;
//led向左移位,空闲位自动添0补位
if(led_out==9'
b000000000)
led_out=9'
b111111111;
led_out1=~led_out;
//取反输出
end
assignled=led_out1[7:
0];
打开QuartusII软件,进入集成开发环境,点击File→Newprojectwizard建立一个工程项目ledwater。
点击File→New在该项目下新建VerilogHDL源程序文件ledwater.v,输入试验程序中的源程序代码保存后选择工具栏中的
设置不需要使用的IO功能为Asinputs,tri-stated。
在QuartusII软件主页面下,选择Assignments→Pins或选择工具栏上
在QuartusII主页面下,选择Processing—StartCompilation或点击工具栏上的
(7)下载设计程序到目标FPGA
经过前两个实验的训练,第三个实验应该很轻松地就做完了吧!
看到实验板上LED实验了流水灯的功能,你是否掌握了移位运算符的使用,你可以试着自己编写其他花样的流水灯,比如左流水或其他花样的流水灯,这就要看你的想象力了。
FPGA系列实验四——LED跑马灯
让实验板上的8个LED实现跑马灯的功能。
从LED[0]到LED[7]依次点亮,第二个灯点亮时第一个熄灭,每个灯交换的时间为0.5S;
看上去的效果就象一个亮点从LED[0]跑向LED[7],然后重复此循环,故命名跑马灯。
初始状态时,LED[0]亮,其余熄灭。
每来一个时钟脉冲CLK,计数器就加1。
每当判断出计数器中的数值达到25000000时,就会点亮LED[1],同时LED[0]熄灭,并进行移位。
这样,依次点亮所有的灯,就形成了跑马灯。
而当LED[7]点亮时,需要一个操作使得恢复为初始状态,即:
LED[0]亮,其余熄灭。
然后,再进行一次跑马灯,重复此循环。
如果是右移位,就出现向右跑马的现象;
反之,向左跑马。
moduleledwalk(led,clk);
reg[7:
0]led_out;
=buffer+1'
b1;
d25000000)
if(led_out==8'
b00000000)
led_out=8'
b00000001;
assignled=led_out;
打开QuartusII软件,进入集成开发环境,点击File→Newprojectwizard建立一个工程项目ledwalk。
点击File→New..在该项目下新建VerilogHDL源程序文件ledwalk.v,输入试验程序中的源程序代码保存后选择工具栏中的
选择所用的FPGA器件,以及进行一些配置。
按钮,配置LED[0]---LED[7]以及clk的引脚。
实验应该很轻松就成功了吧!
看到LED[0]到LED[7]依次点亮,移位运算符的使用应当非常熟练了吧!
你有没有想过用其他方式实现跑马灯的功能,比如用case语句。
下面给出一个用case语句实现的跑马灯程序供大家学习。
大家可以比较一下两钟方式实现跑马灯的资源占用情况。
FPGA系列实验五——LED花样彩灯
让实验板上的8个LED实现花样彩灯的功能。
通过这个实验,进一步掌握采用计数器实现分频的VerilogHDL的编程方法以及case语句的使用。
本次试验是对前几个实验的总结,让LED逐步实现闪烁—流水灯—闪烁—跑马灯—闪烁—对灯流水—闪烁,重复此循环即可实现彩灯显示功能。
本次实验程序采用case语句编写,程序比较通俗易懂,具体实现原理在前面实验都已详细讲述,本次试验将不再重复。
moduleled_run(sys_clk,led);
inputsys_clk;
reg[24:
0]count;
reg[4:
0]state;
wireclk;
always@(posedgesys_clk)
count<
=count+1'
assignclk=count[23];
always@(posedgeclk)
case(state)
5'
b00000:
led=8'
b11111111;
b00001:
b00000000;
b00010:
b10000000;
b00011:
b11000000;
b00100:
b11100000;
b00101:
b11110000;
b00110:
b11111000;
b00111:
b11111100;
b01000:
b11111110;
b01001:
b01010:
b01011:
b01100:
b01101:
b00000010;
b01110:
b00000100;
b01111:
b00001000;
b10000:
b00010000;
b10001:
b00100000;
b10010:
b01000000;
b10011:
b10100:
b10101:
b10110:
b10111:
b10000001;
b11000:
b11000011;
b11001:
b11100111;
b11010:
b11011:
b00011000;
b11100:
b00111100;
b11101:
b01111110;
b11110:
b11111:
endcase
state=state+1;
打开QuartusII软件,进入集成开发环境,点击File→Newprojectwizard建立一个工程项目led_run。
点击File→New..在该项目下新建VerilogHDL源程序文件led_run.v,输入试验程序中的源程序代码保存后选择工具栏中的
(7)下载设计程序.sof文件到目标FPGA,下载采用JTAG方式(由于配置芯片擦写次数有限,实验均采用JTAG下载方式)。
实验是对前面几个实验的总结,应该很轻松就能完成。
实验成功将会看到LED逐步实现闪烁—流水灯—闪烁—跑马灯—闪烁—对灯流水—闪烁的循环显示,大家可以试着按照自己的想象编写程序实现其他花样彩灯。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可编程 数字 ASIC 设计 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)