赞
踩
这是本学期第四节高速EDA设计课程,本节课的主要内容是结合前面所学Verilog的入门以及配合老师下发的Altera™公司的DE0开发板,去实地操作的将要实现的一些简单的逻辑功能通过软硬件配合的方式实现,并在这个过程中进一步熟悉Verilog语法和Quartus软件的使用。
本篇博客中代码和操作步骤部分基本来自于杜老师实验教学网站。 FPGA 电路开发入门实验
在进行这次实验工作之前,必须进行很重要的一步,安装驱动板的驱动程序。步骤如下
打开设备管理器面板,在设备列表的其他设备中找到USB-Blaster
右键点击USB-Blaster,选择列表中的更新驱动程序
在弹出的窗口中选择-浏览我的计算机以查找驱动程序软件
选择安装目录中的usb-blaster文件夹,具体路径为quartus\drivers\usb-blaster
本次课程需要使用开发板上一部分按钮(button)、开关(switch)、发光二极管(LED)以及时钟电路clk,下面给出这些器件所对应的管脚示意图:
以老师给出例子中的学生实验为例,即用1个拨码开关控制所有的LED灯亮灭
首先和之前的任务相同,在quartus 中创建一个项目文件
在项目中新建一个bdf文件,并在网格中放置一个input和十个output管脚,并将他们器件连接起来,并分别将其命名为开关SW和发光二极管LED0-9
接下来打开pin planer面板进行指派管脚,并按照上面已知的开发板管脚对应图,将input与开发板最右侧的开关SW0连接,output与所有LED连接
并在设置中将没有用到的管脚设定为三态
接下来进行编译,并将开发板接点,并通过USB连接到电脑,在顶栏中先点击编译接着点击打开下载面板
点击下载面板左侧的start按钮,将程序烧录进开发板等待右上角的progress进度条加载至100%
此时将开发板的SW0开关打到闭合状态,会发现LED0-9十个LED均被点亮,实验完成
将已经写好的2-4译码器模块的Verilog代码文件rtl_module.v加入项目
2-4译码器的Verilog原型代码如下所示
module dec_2to4( IN , OUT); input [2-1:0] IN ; output [4-1:0] OUT ; reg [4-1:0] OUT ; always @ (IN) begin case(IN) 2'b00: OUT = 4'b 0001; 2'b01: OUT = 4'b 0010; 2'b10: OUT = 4'b 0100; 2'b11: OUT = 4'b 1000; endcase end endmodule // module dec_2to4;
右键点击文件列表里的rtl_module.v选择列表中的Create Symbol Files For Current File为代码文件创建符号以便在BDF文件中调用
新建一个bdf文件,并搭建实现该逻辑所需要的电路
通过Pin Planer将开关与发光二极管LED管脚连接指派
编译下载后验证实验
根据已经给出的2-4译码器的Verilog原型代码,写出3-8译码器的Verilog代码并为其创建符号,如下所示
module dec_3to8( IN , OUT); input [3-1:0] IN ; output [8-1:0] OUT ; reg [8-1:0] OUT ; always @ (IN) begin case(IN) 3'b000: OUT = 8'b 00000001; 3'b001: OUT = 8'b 00000010; 3'b010: OUT = 8'b 00000100; 3'b011: OUT = 8'b 00001000; 3'b100: OUT = 8'b 00010000; 3'b101: OUT = 8'b 00100000; 3'b110: OUT = 8'b 01000000; 3'b111: OUT = 8'b 10000000; endcase end endmodule // module dec_3to8;
新建一个bdf格式文件画出实验所需电路图如下所示,并指派管脚
编译下载,并拨动开关验证
查阅手册中的7段译码器管脚对应关系,用4个拨码开关控制一个7段译码器的数字,从0-9-A-F,共16个数字和字母
在已知的译码器的Verilog原型代码上改动,得到实验要求的译码器的Verilog代码,如下
module bcd7seg( IN , OUT); input [4-1:0] IN ; output [7-1:0] OUT ; reg [7-1:0] OUT ; always @ (IN) begin case(IN) 4'b0000: OUT = 7'b 11000000;//0 4'b0001: OUT = 7'b 11111001;//1 4'b0010: OUT = 7'b 10100100;//2 4'b0011: OUT = 7'b 10110000;//3 4'b0100: OUT = 7'b 10011001;//4 4'b0101: OUT = 7'b 10010010;//5 4'b0110: OUT = 7'b 10000010;//6 4'b0111: OUT = 7'b 11111000;//7 4'b1000: OUT = 7'b 10000000;//8 4'b1001: OUT = 7'b 10010000;//9 4'b1010: OUT = 7'b 10001000;//A 4'b1011: OUT = 7'b 10000011;//B 4'b1100: OUT = 7'b 11000110;//C 4'b1101: OUT = 7'b 10100001;//D 4'b1110: OUT = 7'b 10000110;//E 4'b1111: OUT = 7'b 10001110;//F default: OUT = 7'b 10000000; endcase end endmodule // module dec_3to8;
新建一个bdf文件,画出实现逻辑所需电路图,并指派管脚
编译下载,并拨动开关进行验证
设计一个0-17的计数器,当计数值为17的时候,OV输出1,其他输出0
根据设计中老师给出的例子,修改部分代码及电路图实现如下:
module cnt_0to17(
CLK , // clock
CNTVAL, // counter value
OV ); // overflow
input CLK;
output [5-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。