基于FPGA的现代数字系统设计实验报告
FPGA实验设计报告—广东技术师范学院

实验报告课程名称:FPGA设计及应用实验项目:FPGA设计实验时间:2014.12.8-2014.12.31实验班级:12应用师3班总份数:共 5 份指导教师:李豪彦电子与信息学院工业中心504 实验室二〇〇四年十二月十七日广东技术师范学院实验报告学院: 电信学院 专业: 应用电子技术教育 班级: 12应用师3班 成绩: 姓名: 张文斌 学号: 2012045344209 组别:组员:实验地点: 工业中心实验日期:指导教师签名:实验 (一) 项目名称: D 分 频 器设计一、实验目的1.学习分频器的设计,进一步了解、熟悉和掌握FPGA 开发软件Quartus II 的使用方法2.学习Verilog HDL 和VHDL 的编程方法二、实验内容编写一个分频器的Verilog 代码和VHDL 代码并仿真。
三、实验原理在数字电路中, 时钟信号的分频是很常见的电路。
分频器除了可以对时钟信号频率做除以二的计算外,分频器同时很类似涟波计数器。
涟波计数器是计数器的一种,它属于异步设计。
因为触发器并非皆由同一个时钟信号同步操作,所以它非常节省电路面积。
本实验要设一个带选择的分频时钟D[7:0]用于选择是几分频。
D 分频器设原理框图如图1所示:图1.D 分频器原理框图预习情况操作情况 考勤情况 数据处理情况四、实验步骤1.新建工程,取名为DVF,如下图2所示。
图2 新建工程DVF2.新建VHDL设计文件,选择“File|New ”,在New 对话框中选择Device Design Files下的VHDL File,单击OK,完成新建设计文件。
3.在新建设计文件中输入VHDL程序。
4.生成“Symbol ”文件,新建“Block Diagram/Schematic File”文件,在文件中添加刚刚生成的“Symbol ”以及输入输出管脚,最后完整的系统顶层模块图如图 3 所示。
图3 DVF 顶层模块图5.保存文件,使用qsf或者tcl 进行管脚分配。
FPGA实验报告材料实验2

西南科技大学实验报告课程名称:基于FPGA的现代数字系统设计实验名称:基于HDL十进制计数、显示系统设计姓名:学号:班级:通信1301指导教师:刘桂华西南科技大学信息工程学院制基于HDL十进制计数、显示系统设计一、实验目的1、掌握基于语言的 ISE 设计全流程;2、熟悉、应用 VerilogHDL描述数字电路;3、掌握基于 Verilog的组合和时序逻辑电路的设计方法;4、掌握 chipscope 片内逻辑分析仪的使用与调试方法。
二、实验原理1、实验内容:设计具有异步复位、同步使能的十进制计数器,其计数结果可以通过七段数码管、发光二极管等进行显示。
2、模块端口信号说明:输入信号:Clk_50m ---系统采样时钟clk -------待计数的时钟clr ---------异步清零信号,当 clr=0,输出复位为 0,当clr=1,正常计数ena---------使能控制信号,当 ena=1,电路正常累加计数,否则电路不工作输出信号:q[6:0]---------驱动数码管,显示计数值的个位cout -----------1bit 数据,显示计数值向十位的进位COM-----------共阳级数码管,公共端(接地,参考开发板原理图3、以自顶向下的设计思路进行模块划分:整个系统主要设计的模块是:十进制计数模块和数码管驱动模块,由于实验板的按键为实现硬件防抖,则需要将按键输入的时钟 clk,先通过消抖模块消抖后,再输出至后续使用。
1)十进制计数器模块设计输入: CLK -------待计数的时钟CLR ---------异步清零信号,当 CLR =0,输出复位为0,当 CLR =1,正常计数。
EN---------使能控制信号,当 EN=1,电路正常累加计数,否则电路不工作输出: SUM[3:0]---------- 计数值的个位。
即,在 CLK 上升沿检测到SUM=9 时,SUM 将被置 0,开始新一轮的计数。
FPGA实验报告

FPGA实验报告一、实验目的本次FPGA实验目的是通过使用FPGA开发板,了解FPGA的基本原理和应用,培养学生对数字电路设计的基本能力。
二、实验原理FPGA(Field-Programmable Gate Array)是一种可编程逻辑芯片,通过在芯片中加入多个查找表、可编程互连和触发器等基本模块,使得用户可以根据实际需求程序设计芯片的逻辑功能和互连关系。
FPGA的主要优点是能快速更新设计并且重配置灵活,而且速度快、功耗低。
本次实验我们使用的FPGA开发板是Xilinx Spartan-6系列,采用的开发环境是Xilinx ISE Design Suite。
三、实验内容1.实验用到的器件及端口我们使用的FPGA开发板上有多个输入输出端口,如LED灯、开关、按键等。
其中LED灯作为输出端口,开关和按键作为输入端口。
实验中,我们通过控制开关的状态,来控制LED灯的亮与灭。
2.设计电路我们的实验电路主要由一个FPGA芯片、多个LED灯、多个开关和按键等组成。
具体设计如下:(插入电路图)3.编写代码我们使用Verilog语言来描述逻辑电路的功能,并将其编写成代码。
代码示例如下:module led_controllerinput wire CLK,input wire [3:0] SWITCH,output reg [7:0] LEDcase(SWITCH)endcaseendendmodule4.烧录代码通过Xilinx ISE Design Suite的工具链,将上述代码综合、实现、生成比特文件。
然后通过JTAG接口将比特文件烧录到FPGA芯片中。
5.实验结果实验结果是通过观察LED灯的亮灭情况来验证代码的正确性。
根据开关的不同状态,LED灯的亮灭也不同。
四、实验总结通过本次实验,我们深入了解了FPGA的基本原理和应用,并且使用了Xilinx Spartan-6系列的开发板完成了LED控制的实验。
通过观察LED灯的亮灭情况,验证了我们编写的代码的正确性。
FPGA实验报告

南京理工大学泰州科技学院FPGA系统设计实验报告教材名称:FPGA系统设计与应用开发指导教师:周莉莉实验室:4401学院(系):电子电气工程学院专业班级:10电信(1)班姓名:周根生朱守超学号:1002040149 1002040150实验学期:2013-2014学年第一学期总评成绩:教师签字:南京理工大学泰州科技学院FPGA系统设计实验报告目录实验一Max+plusII原理图设计输入 (1)实验二简单逻辑电路设计与仿真 (6)实验三组合逻辑电路设计(一) (11)实验四组合逻辑电路设计(二) (16)实验五有限状态机的设计 (26)实验六数字频率计 (32)南京理工大学泰州科技学院FPGA系统设计实验报告课程: FPGA系统设计班级:10电信1班姓名:周根生朱守超学号:10020401491002040150指导教师:周莉莉实验日期:实验题目:Max+plusII原理图设计输入成绩:一、设计任务采用原理图设计输入法,设计一个具有四舍五入功能的电路,其输入为4位二进制数,要求输入大于或等于0101时,电路输出为高电平,小于0101时电路输出为低电平。
二、设计过程根据设计要求列出四舍五入的真值表,如图1.1所示。
图1.1 四舍五入真值表由图1.1可得化简的表达式为OUT=A+BD+BC,由逻辑表达式可知,要设计的电路图有四个输入端(A,B,C,D)和一个输出端OUT,整个电路由两个2输入端的与门和一个3输入的或门组成。
启动MAX+plusII,新建Graphic Editor file文件,后缀为.gdf。
在编辑界面空白处双击左键,出现输入元件对话框如图1.2所示,在Symbol Name栏中直接输入元件的符号名OK,输入端(input),输出端(output),连接电路如图1.3所示。
图1.2 操作图1.3 原理图芯片型号选择单击Assign,选择Device,如图1.4所示。
图1.4 型号引脚命名双击PIN_NAME,使其变黑后输入引脚名,并保存文件然后编译,如图1.5所示。
FPGA实验报告实验2

西南科技大学实验报告课程名称:基于FPGA的现代数字系统设计实验名称:基于HDL十进制计数、显示系统设计姓名:学号:班级:通信1301指导教师:刘桂华西南科技大学信息工程学院制基于HDL十进制计数、显示系统设计一、实验目的1、掌握基于语言的ISE 设计全流程;2、熟悉、应用VerilogHDL描述数字电路;3、掌握基于Verilog的组合和时序逻辑电路的设计方法;4、掌握chipscope 片内逻辑分析仪的使用与调试方法。
二、实验原理1、实验内容:设计具有异步复位、同步使能的十进制计数器,其计数结果可以通过七段数码管、发光二极管等进行显示。
2、模块端口信号说明:输入信号:Clk_50m ---系统采样时钟clk -------待计数的时钟clr ---------异步清零信号,当clr=0,输出复位为0,当clr=1,正常计数ena---------使能控制信号,当ena=1,电路正常累加计数,否则电路不工作输出信号:q[6:0]---------驱动数码管,显示计数值的个位cout -----------1bit 数据,显示计数值向十位的进位COM-----------共阳级数码管,公共端(接地,参考开发板原理图3、以自顶向下的设计思路进行模块划分:整个系统主要设计的模块是:十进制计数模块和数码管驱动模块,由于实验板的按键为实现硬件防抖,则需要将按键输入的时钟clk,先通过消抖模块消抖后,再输出至后续使用。
1)十进制计数器模块设计输入: CLK -------待计数的时钟CLR ---------异步清零信号,当CLR =0,输出复位为0,当CLR =1,正常计数。
EN---------使能控制信号,当EN=1,电路正常累加计数,否则电路不工作输出:SUM[3:0]---------- 计数值的个位。
即,在CLK 上升沿检测到SUM=9 时,SUM 将被置0,开始新一轮的计数。
tc ------------计数值的十位进位,即:只有在时钟CLK 上升沿检测到SUM=9 时,TC将被置1,其余情况下TC=0;在设计中可以使用always,if-else-if语句实现,设计中注意不要在两个以上的always 模块中对同一个变量进行赋值,否则会产生多重赋值源(multi-source)的问题。
FPGA实验报告 系统设计综合实践 自动售货机

FPGA实验报告系统设计综合实践自动售货机引言本实验报告旨在介绍FPGA实验中关于系统设计综合实践的内容,以及针对自动售货机的设计和实现过程。
本项目的目标是通过FPGA实现一个基本的自动售货机,能够接受货币投入并显示余额,实现商品选择和出货的功能。
设计概述在本项目中,我们使用FPGA作为硬件平台进行实现,采用VHDL语言进行编程。
整个设计主要分为三个模块:货币处理模块、商品选择模块和出货控制模块。
货币处理模块货币处理模块负责接收和处理投入的货币,并显示当前的余额。
具体实现过程如下:1.接收货币输入:使用FPGA板载的GPIO接口连接硬币接收器,将接收到的信息传递给FPGA。
2.处理货币信息:通过计算接收到的货币数量和面额,计算出当前的余额。
3.显示余额:使用FPGA板载的数码管显示当前的余额。
根据计算得到的余额,将其显示在数码管上。
商品选择模块商品选择模块负责接收用户的商品选择,并计算选中商品的价格。
具体实现过程如下:1.接收商品选择:使用FPGA板载的按键输入接口,接收用户按下的相应按键,确定用户选择的商品。
2.计算商品价格:根据用户选择的商品,从预先配置的商品价格表中查找相应的价格。
3.显示选中商品价格:使用FPGA板载的数码管显示选中商品的价格。
根据查找到的价格,将其显示在数码管上。
出货控制模块出货控制模块负责控制商品的出货和相关信息的提示。
具体实现过程如下:1.判断余额是否足够:根据当前余额和选中商品的价格,判断余额是否足够购买商品。
2.控制商品出货:如果余额足够购买商品,则触发相应的出货机构,实现商品的出货。
3.提示用户相关信息:根据出货情况,通过数码管显示相关信息,如余额不足、出货成功等提示。
实验结果经过对上述三个模块的设计和实现,我们成功地完成了自动售货机的基本功能。
在实验过程中,我们选取了几种常见的商品,并配置了相应的价格表。
通过按下相应的按键,用户可以选择购买的商品,并通过投币的方式支付。
基于FPGA设计的实验报告(模版)

基于FPGA设计的-实验报告姓名学号专业班级一.设计/实验项目名称:四输入抢答器设计基本内容描述:以两输入抢答电路为基本单元构建四输入抢答器。
抢答输入:IN1、IN2、IN3、IN4;低电平复位输入Reset_n;输出:OUT1、OUT2、OUT3、OUT4以高电平表示抢答成功。
二.电路设计及原理两输入抢答电路为基本单元本设计原理图(qiangdaqi_unit.bdf)如图1所示。
图1. 基本单元qiangdaqi_unit原理图图2. 四输入抢答器设计原理图基本单元电路qiangdaqi_unit以双JK触发器为核心,裁判总复位信号Reset_n(低电平有效)接触发器直接置位端,输出OUT1、OUT2应该为低电平,所以OUT1、OUT2接1QN、2QN。
抢答输入IN1和IN2分别作为触发器时钟输入(低电平有效),为限制OUT1、OUT2出现都为高电平情况,1Q和2Q分别与IN2和IN1与非后作为各触发器时钟。
考虑到基本单元电路qiangdaqi_unit扩展应用增加复位输入Reset_in和复位输出Reset_out,当OUT1或OUT2为“1”时产生(低电平有效的)Reset_out输出信号到另一基本单元电路的复位输入Reset_in端,避免产生触发器有效时钟,使该单元两输出均为低电平。
四输入抢答器以图1设计电路生成的设计模块符号进行设计的原理图如图2所示。
Reset_n接inst1和inst2的Reset_n,抢答前复位所有输出均为“0”。
四输入IN1~IN4经反相后接各模块输入,即“1”为有效电平。
三.设计电路仿真与分析四输入抢答器功能仿真结果如图3所示,由仿真图可以知道复位后哪个输入先为“1”则对应输出为“1”,实现四输入抢答器功能。
图3. 四输入抢答器功能仿真图四.实验结论由仿真试验可知:(1)设计功能正确,实现先按键者有输出;(2)输入、输出均为高电平有效,复位信号为低电平有效;(3)将图2电路中反相器inst12~inst15去掉,输入与模块直接相连可实现低电平输入有效。
FPGA实验报告5篇

FPGA实验报告5篇第一篇:FPGA实验报告FPGA实验报告专业:XXX 姓名:XXX 学号:XX一:实验目的1.熟悉Modelsim和Quartus II软件的运行环境和使用2.熟练使用Quartus II仿真软件生成网表。
3.熟悉FPGA前仿真和后仿真的整个流程。
二:实验内容编写counter计数器,在Quartus II仿真软件中生成网表,再在Modelsim中进行后仿真。
三: 实验步骤1.在Modelsim编写源程序(counter计数器及激励),编译源文件,确保程序的正确性,并进行前仿真,生成波形图如下:附:源程序如下:module counter(q,clk,reset);input clk,reset;output [3:0] q;reg [3:0] q;always @(posedge reset or negedge clk)if(reset)q <= 4'b0;elseq <= q + 1;endmodule module top;reg CLK,RESET;wire [3:0] Q;counter c1(Q,CLK,RESET);initialCLK=1'b0;always#1 CLK=~CLK;initial$monitor($time,“Q=%d”,Q);initialbeginRESET=1'b1;#5 RESET=1'b0;#180 RESET=1'b1;end endmodule 2.新建文件夹,将源程序counter.v放进去。
然后启动Quartus II仿真软件,生成网表。
1).在【File】下拉菜单中选中New Project Wizard选项,出现对话框。
并指定工程工作目录、工程名称和顶层模块名,如图(a)所示。
2).添加(Add)counter.v文件。
如图(b)所示。
3).选择器件系列4).指定其它EDA工具,如图(d)所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
****大学实验报告课程名称:基于FPGA的现代数字系统设计实验名称:基于HDL十进制计数显示系统设置姓名:学号: 班级:指导教师:****大学信息工程学院制基于HDL十进制计数显示系统设置一、实验要求1.设计具有异步复位,同步使能的十进制计数器,其计数结果通过七段数码管,发光二极管等进行显示。
2.主要设计的模块有十进制计数模块和数码管驱动模块以及消抖模块。
3.需要将按键输入的时钟,然后通过消抖模块消抖后,再输出至后续使用。
4.共阴极数码管驱动。
二、实验原理本次的设计是一个具有数显输出的十进制计数器。
示意图如2.1所示。
图2.1七段数码管属于数码管的一种,是由7段二极管组成。
按发光二极管单元衔接方式分为共阳极数码管和共阴极数码管。
本实验使用共阴数码管。
它是指将一切发光二极管的阴极接到一同构成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平相应字段就点亮,当某一字段的阳极为低电平相应字段就不亮。
显示译码器,用HDL语言判断CLK的上升沿信号,每次收到一次上升沿信号,计数器的值加一并显示在数码管上,所以本次实验会将十进制计数与七段数码管的显示分别写在两个模块里面。
系统模块划分及引脚连线图如下:三、实验步骤(设计输入)1.十进制计数器模块module cnt10(clk,clr,ena,sum,cout);input clk,clr,ena;output [3:0] sum;output cout;reg [3:0] sum;reg cout;always @ (posedge clk or posedge clr)if(clr==1)beginsum <= 4'b0000; cout<= 1'b0;endelse if(ena==1'b1)if(sum==4'b1001)beginsum <= 4'b0000; cout<= 1'b1; endelsebeginsum <= sum+1; cout<= 1'b0; endelsebeginsum <= sum; cout<= cout; endEndmodule程序主要思路是用always等待clk与clr的上升沿信号,因为是异步清零所以在always 中也要等待clr的清零信号。
用if语句判断clr信号,为1则清零。
判断ena信号,为1进行计数操作,为0输出保持不变。
计数中,判断sum的值如果为9时,进行进位操作,并将sum值赋值为02.数码管驱动模块module led7 (sum ,out );input [3:0] sum;output [6:0] out;reg [6:0] out ;always @(sum)beginout = {7{1'b0}};case (sum) //根据共阳接法译码4'b0000 : out [6:0] = 7'b1000000;4'b0001 : out [6:0] = 7'b1111001;4'b0010 : out [6:0] = 7'b0100100;4'b0011 : out [6:0] = 7'b0110000;4'b0100 : out [6:0] = 7'b0011001;4'b0101 : out [6:0] = 7'b0010010;4'b0110 : out [6:0] = 7'b0000010;4'b0111 : out [6:0] = 7'b1111000;4'b1000 : out [6:0] = 7'b0000000;4'b1001 : out [6:0] = 7'b0011000;default : out [6:0] = {7{1'b0}};endcaseendEndmodule用一个case语句判断输入的data_in的值,选择data_out的输出,这样比用原理图设计数码管要大大的减少工作量。
3.顶层模块①用verilog HDL代码描述模块的连接,构成如下图所示的系统:module top(clk_50,clk,clr,ena,cout,out);input clk,clr,ena,clk_50;output cout;output [6:0]our;wire [3:0]temp;cnt10 u1(pin_out,clr,ena,cout,temp);led u2(temp,out);debounce_module u3(clk_50,clk,pin_out);endmodule②引脚锁定引脚锁定表相应的用户约束文件:NET "clk" LOC = V16 | IOSTANDARD = LVCMOS33 | PULLDOWN ;NET "clk_50m" LOC = C9 | IOSTANDARD = LVCMOS33 ;NET "clr" LOC = N17 | IOSTANDARD = LVCMOS33;NET "ena" LOC = H18 | IOSTANDARD = LVCMOS33;NET "q[0]" LOC = C5 | IOSTANDARD = LVCMOS33; # DATA0 aNET "q[1]" LOC = B4 | IOSTANDARD = LVCMOS33; # DATA1 bNET "q[2]" LOC = A4 | IOSTANDARD = LVCMOS33; # DATA2 cNET "q[3]" LOC = F7 | IOSTANDARD = LVCMOS33; # DATA3 dNET "q[4]" LOC = B6 | IOSTANDARD = LVCMOS33; # DATA4 eNET "q[5]" LOC = E7 | IOSTANDARD = LVCMOS33; # DATA5 fNET "q[6]" LOC = A6 | IOSTANDARD = LVCMOS33; # DATA6 gNET "COM" LOC = D5 | IOSTANDARD = LVCMOS33; # DATA7 DIG注意:由于clk没锁于ISE默认的时钟输入引脚上,需要添加“CLOCK_DEDICATED_ROUTE = FALSE;”为了更好的消抖效果,需要在V16输入端口加入下拉电阻,即需加“PULLDOWN”。
所以在约束文件(.ucf)中clk的锁定应为为:1)NET “clk” LOC = “V16” |PULLDOWN | CLOCK_DEDICATED_ROUTE = FALSE;”:或者2)NET “clk” LOC = “V16” |PULLDOWN ;NET "clk" CLOCK_DEDICATED_ROUTE=FALSE;4.双击Implement Design,进行布局布线,双击Generate Programming File生成下载文件,双击Configure Target Device,完成结果如图所示。
四、实验结果及分析共阴极数码管驱动模块的输入与输出:输入是0000 输出是1111110;输入是0001 输出是0110000;输入是0010 输出是1101101; 输入是0011 输出是1111001;输入是0100 输出是0110011; 输入是0101 输出是1011011;输入是0110 输出是1011111; 输入是0111 输出是1110000;输入是1000 输出是1111111; 输入是1001 输出是1111011;输入是1010 输出是1110111; 输入是1011 输出是0011111;输入是1100 输出是1001110; 输入是1101 输出是0111101;输入是1110 输出是1001111; 其他输入输出是1000111;五、实验思考题解答(实验指导书要求的思考题)1.如何用两个或一个always 实现十进制计数模块?写出相应代码。
答:用always实现十进制计数模块,程序如下:module cnt10(clk,clr,ena,sum,cout);input clk,clr,ena;output [3:0] sum;output cout;reg [3:0] sum;reg cout;always @ (posedge clk or posedge clr)if(clr==1)beginsum <= 4'b0000; cout<= 1'b0;endelse if(ena==1'b1)if(sum==4'b1001)beginsum <= 4'b0000; cout<= 1'b1; endelsebeginsum <= sum+1; cout<= 1'b0; endelsebeginsum <= sum; cout<= cout; endEndmodule2.如何用always,或assign实现数码管的驱动设计?写出相应代码。
答:用always实现数码管驱动设计,程序如下:module led7 (sum ,out );input [3:0] sum;output [6:0] out;reg [6:0] out ;always @(sum)beginout = {7{1'b0}};case (sum) //根据共阳接法译码4'b0000 : out [6:0] = 7'b1000000;4'b0001 : out [6:0] = 7'b1111001;4'b0010 : out [6:0] = 7'b0100100;4'b0011 : out [6:0] = 7'b0110000;4'b0100 : out [6:0] = 7'b0011001;4'b0101 : out [6:0] = 7'b0010010;4'b0110 : out [6:0] = 7'b0000010;4'b0111 : out [6:0] = 7'b1111000;4'b1000 : out [6:0] = 7'b0000000;4'b1001 : out [6:0] = 7'b0011000;default : out [6:0] = {7{1'b0}};endcaseendEndmodule3.比较实验一与实验二的实验过程,说明原理图输入法与HDL输入法的不同的应用环境。