FPGA实验一-计数器
- 格式:doc
- 大小:618.00 KB
- 文档页数:5
FPGA实验报告Xilinx FPGA及应⽤实验报告(⼀)实验⼀全加器⼀、实验⽬的1、编写简单门电路的RTL级描述程序;2、创建简单电路的结构级VHDL描述程序;3、实现全加器功能,由半加器组成,以元件⽅式调⽤。
⼆、实验环境1、ISE软件⼀套;2、PC机⼀台。
三、实验步骤1、创建⼀个新的⼯程(1)选择“开始->所有程序->Xilinx ISE 9.1i”或直接在桌⾯双击Xilinx ISE 9.1i的图标,打开ISE 9.1i集成环境。
(2)在ISE中,选择菜单栏中的File->New Project 打开创建新⼯程界⾯,在Project Name 中填⼊⼯程名,在Project Location中填⼊⼯程所在⽂件夹。
2、编写半加器的RTL级描述和全加器的结构级描述半加器源程序为:library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity half isPort ( a : in STD_LOGIC;b : in STD_LOGIC;s : out STD_LOGIC;co : out STD_LOGIC);end half;architecture Behavioral of half issignal c,d : STD_LOGIC;beginc <= a or b;d <= a nand b;s <= c and d;co <= not d;end Behavioral;波形仿真结果为:全加器源程序为:library IEEE;use IEEE.STD_LOGIC_1164.ALL;entity full isPort ( a : in STD_LOGIC;b : in STD_LOGIC;cin : in STD_LOGIC;s : out STD_LOGIC;co : out STD_LOGIC);end full;architecture Behavioral of full is component halfPORT (a, b: IN std_LOGIC;s,co: OUT std_LOGIC);end component;signal u0_co,u0_s,u1_co:std_logic;beginu0:half port map(a,b,u0_s,u0_co);u1:half port map(u0_s,cin,s,u1_co);co<=u0_co or u1_co;end Behavioral;波形仿真结果为:\ 实验⼆12进制计数器⼀、实验⽬的1、熟悉Xilinx的ISE软件的使⽤和设计流程;2、初步了解VHDL的编程⽅法;3、使⽤VHDL语⾔创建、仿真并验证12进制计数器。
基于fpga的计数器设计代码基于FPGA的计数器设计代码介绍:来自电子系统设计实验课程的一个项目,要求编写一段基于FPGA 的计数器设计代码,但是考虑到本实验课程源自一门免费的开源课程,因此无法提供实际的设备来验证此设计代码,但是可以通过模拟环境进行测试以确保实现正确设计功能,本文将介绍如何利用FPGA对计数器进行设计。
实现方法:1.首先需要确定将用哪种FPGA芯片来实现计数器功能,例如Xilinx Spartan-6的FPGA。
2.然后确定使用哪种电路来实现计数器功能,可以使用逻辑器件来实现,例如可以使用多路触发器、多变量单位、或是查找表等电路。
3.接下来就是根据前面两步的确定,开始编写实现计数器设计的代码,例如VHDL语言或Verilog语言。
4.最后进行代码仿真,使用设计的代码来仿真计数器的功能,以确保代码完全正确。
示例代码:下面是一段可以实现计数器设计的代码,采用的是VHDL语言:--计数器设计代码LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY COUNTER ISPORT (reset : IN STD_LOGIC;clk : IN STD_LOGIC;count : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));END COUNTER;ARCHITECTURE RTL OF COUNTER ISBEGINPROCESS(clk, reset)BEGINIF (reset='1') THENcount <= '00000000'; --初始值为0ELSIF (clk='1' and clk'EVENT) THENcount <= count + 1; --正常的计数END IF;END PROCESS;END RTL;以上代码可以实现一个八位的计数器,当reset为高电平时,计数器初始值为0,每次当clk上升沿时,计数器递增1,当计数器到达最大值255时,再次上升时从0开始重复计数。
实验一:基于原理图的十进制计数器设计一、实验目的:1.熟悉和掌握ISE Foudation软件的使用;2.掌握基于原理图进行FPGA设计开发的全流程;3.理解和掌握“自底向上”的层次化设计方法;4.温习数字电路设计的基础知识。
二、实验原理:本次实验采用的是七段数码管显示译码器和CD4CE同步十进制计数器组合的电路,实验原理图如下:本次实验采用七段数码管的字符显示真值表如下:CD4CE是同步十进制计数器,输入端有异步清零控制端CLR,工作控制使能端CE和时钟输入端C,输出端有BCD码计数值输出端Q3~Q0,进位输出端TC和输出状态标志CEO,其真值表如下图:三、实验过程:1.创建一个新的工程,并为工程新建一个原理图文件,根据实验要求绘制数码管A段LED驱动逻辑电路,并生成原理图模块符号,然后新建一个Test Bench WaveForm文件,进行仿真,查看实验是否符合真值表的内容:数码管A段LED驱动逻辑电路图2.根据步骤1绘制B、C、D、E、F、G段驱动逻辑电路,并生成相应的原理图模块符号,进行仿真,然后再根据实验要求将7个模块进行组合成七段显示译码器原理图:3.调用CD4CE计数器符号和上图中的seg7模块绘制十进制计数器原理图,然后进行仿真验证:4.执行综合,记录其中关于时钟频率、资源消耗等数据:5.根据实验指导书经行锁引脚操作,编辑引脚约束文件:6.生成下载配置文件,下载到开发板进行经行验证。
四、实验思考题:1.分析并说明本次实验所完成的工程文件结构关系。
答:本次实验采用的是自底向上的设计流程,即是先从最底层开始,逐步向上设计,所以本次实验所完成的工程文件的结构关系是一种底层与顶层结构关系。
2.如何分析仿真软件运行出的结果?答:观察实验仿真的结果,与实验要求的真值表进行对比,若符合则表示设计方案正确,否则则表示方案设计错误,需要修改设计方案。
3.在仿真激励信号的设计上组合电路和时序电路分别关注的重点是什么?为什么?答:组合电路关注当前的输入信号,而时序电路不仅要关注当前的输入信号,还需要关注上一时刻的输出的状态。
实验一组合逻辑3-8译码器的设计 .................... 错误!未定义书签。
实验二基于FPGA的数字钟的设计 ................... 错误!未定义书签。
实验三基于NIOS的交通灯实验 .......................... 错误!未定义书签。
实验四静态图像显示 ............................................. 错误!未定义书签。
实验一组合逻辑3-8译码器的设计一、实验目的:1、通过3-8译码器的设计,让学生掌握组合逻辑电路的设计方法。
2、掌握组合逻辑电路的静态测试方法。
3、初步了解可编程器件设计的全过程。
二、实验步骤:1、打开QuartusII软件。
2、选择路径。
选择File/New Project Wizard,指定工作目录,指定工程和顶层设计实体称;注意:工作目录名不能有中文。
3、添加设计文件。
将设计文件加入工程中。
单击“Next”,如果有已经建立好的VHDL 或者原理图等文件可以在File name中选择路径然后添加,或者选择Add All添加所有可以添加的设计文件(.VHDL ,.Verilog原理图等)。
如果没有直接点击“Next”,等建立好工程后再添加也可,这里我们暂不添加。
4、选择FPGA器件。
Family选择Cyclone II,Available device选EP2C35F484C8,Packge选择Any,Pin Count 选择484,Speed grade选择Any;点击“Next”。
5、选择外部综合器、仿真器和时序分析器。
Quartus II支持外部工具,可通过选中来指定工具的路径。
这里我们不做选择,默认使用Quartus II自带的工具。
6、结束设置。
单击“Next”,弹出“工程设置统计”窗口,上面列出了工程的相关设置情况。
最后单击“Finish”,结束工程设置。
7、建立原理图文件。
fpga计数器原理FPGA计数器是一种在可编程逻辑器件(FPGA)中实现计数器的方案。
FPGA是一种高度灵活的芯片,可以由用户按照具体需求进行编程,因此在实现各种逻辑电路中,FPGA被广泛应用。
计数器是一种常见的数字电路,用于计算输入脉冲信号的数量,也被广泛应用于数字信号处理、时间测量、频率测量等领域。
本文将介绍FPGA计数器的原理、设计和实现。
FPGA计数器的原理FPGA计数器的实现方案可以分为同步计数器和异步计数器两种。
同步计数器是基于时钟边沿触发的原理,每个时钟周期都可以更新计数器的值。
在FPGA中,时钟边沿可以通过PLL锁相环(Unit Phase Locked Loop)进行生成和控制。
异步计数器则是基于输入脉冲信号触发的原理,每当输入脉冲信号触发时,计数器的值加1。
下面分别介绍同步计数器和异步计数器的原理。
同步计数器同步计数器的实现原理是基于时钟边沿触发的原理,每个时钟周期都可以更新计数器的值。
在FPGA中,时钟边沿可以通过PLL锁相环进行生成和控制。
同步计数器的电路原理图如图1所示。
计数器的输入包括一个时钟信号CLK和一个重置信号RST。
计数器由4位二进制加法器和4位D触发器(D flip-flop)组成。
D0-D3为D 触发器的输入,Q0-Q3为D触发器的输出,Q0-Q3的值即为计数器的当前值。
时钟信号CLK 作为D触发器的时钟输入,每个时钟周期触发时计数器的值更新。
重置信号RST可以将计数器的值归零,以实现初始状态的确定。
在同步计数器的实现中,利用FPGA中的时钟控制功能,可以控制计数器的更新速率,实现各种不同的频率测量和时间计数功能。
异步计数器异步计数器的实现原理是基于输入脉冲信号触发的原理,每当输入脉冲信号触发时,计数器的值加1。
异步计数器的电路原理图如图2所示。
计数器的输入包括一个输入脉冲信号IN和一个重置信号RST。
计数器由4位二进制加法器和4位D触发器组成。
当输入脉冲信号IN触发时,计数器的值加1,直到计数器的值达到最大值时,计数器的值重新归零。
电力学院FPGA应用开发实验报告实验名称:触发器与计数器专业:电子科学与技术姓名:班级:学号:1.触发器功能的模拟实现实验目的:1.掌握触发器功能的测试方法。
2.掌握基本RS触发器的组成及工作原理。
3.掌握集成JK触发器和D触发器的逻辑功能及触发方式。
4.掌握几种主要触发器之间相互转换的方法。
5.通过实验,体会EPLD芯片的高集成度和多I/O口。
实验说明:将基本RS触发器,同步RS触发器,集成J-K触发器,D触发器同时集一个FPGA芯片中模拟其功能,并研究其相互转化的方法。
实验的具体实现要连线测试,实验原理如图所示:2.计数器在VHDL中,可以用Q<=Q+1简单地实现一个计数器,也可以用LPM来实现。
下面分别对这两种方法进行介绍。
方法一:第1步:新建一个Quartus项目。
第2步:建立一个VHDL文件,实现一个8位计数器。
计数器从“00000000”开始计到“11111111”,计数器的模是256。
计数器模块还需要包含一个时钟clock、一个使能信号en、一个异步清0信号aclr和一个同步数据加载信号sload。
模块符号如下图所示:第3步:VHDL代码如下:第4步:将VHDL文件另存为counter_8bit.vhd,并将其设定为项目的最顶层文件,再进行语法检查。
第5步:语法检查通过以后,用KEY[0]表示clock,SW[7..0]表示data,SW[8~10]分别表示en、sload和aclr;LEDR[7..0]表示q。
第6步:引脚分配完成后,编译并下载。
第7步:修改上述代码,把计数器的模更改为100,应如何操作。
模为100的计数器,VHDL代码如下:方法二:使用LPM实现8位计数器。
LPM是指参数化功能模块,用LPM可以非常方便快捷地实现一个计数器。
第1步:选择Tools->MegaWizard Plug-In Manager命令,打开如下图所示的对话框。
第2步:直接单击Next按钮,出现如下图所示的对话框。
西南科技大学实验报告课程名称:基于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(Field-Programmable Gate Array)计数器是一种基于可片上编程的逻辑器件的计数电路。
它通常用于在数字系统中实现计数功能,例如测量时间、频率或事件的数量。
FPGA计数器的工作原理如下:
1. 输入信号:FPGA计数器接收一个输入时钟信号作为输入。
该输入时钟信号可以是外部信号源提供的,也可以是FPGA
内部时钟信号。
2. 寄存器:计数器内部包含一个或多个寄存器。
这些寄存器用于存储当前计数值,并在每次时钟上升沿到来时更新计数值。
3. 计数逻辑:FPGA计数器还包含用于计算和确定新的计数值的逻辑电路。
具体的计数逻辑取决于计数器的类型。
例如,有些计数器是二进制计数器,使用二进制形式的计数逻辑;而其他计数器可能是BCD(Binary-Coded Decimal)计数器,使用十进制的计数逻辑。
4. 输出信号:根据计数器的设计,它可以输出计数值或其他相关信息。
例如,计数器可以输出达到特定计数值时产生的触发信号,以便触发其他电路或操作。
5. 清零和重装:FPGA计数器通常还具有清零和重装功能。
清零操作将计数器的值重置为初始值(通常为零),而重装操作将计数器的值设置为指定的值。
通过适当配置FPGA内部逻辑,可以实现各种类型的计数器以满足不同的应用需求。
同时,FPGA可编程的特性还允许根据需要进行灵活的定制和修改。
实验题目计数器
一、实验内容
1、设计一个8位的计数器;
2、计数器包含有时钟信号clk、置数端load及置数输入端d_in、始能端en、清零端clr
以及达到最高位100时的初始计数端m;
3、进一步熟悉QuartusII软件的功能及环境。
二、详细设计
设计步骤如下:
1、设计8位的计数器,计数器包含有时钟信号clk、置数端load及置数输入端d_in、始能
端en、清零端clr以及达到最高位100时的初始计数端m;
2、编译,查找错误,进入仿真环境;
三、仿真结果
(1)刚开始有置数load信号时得到的具体仿真图如下:
由图可以分析得出计数器包含有时钟信号clk、置数端load及置数输入端d_in、始能端en、清零端clr以及达到最高位100时的初始计数端m;置数时的输入端d_in,当load端位1时,输出端out输出为5,可见置数端起到作用。
使用modelsim仿真图如下:
(2)当计数计到100时要求它从10开始继续计数,具体仿真图形如下:
可见编写的计数器在正常计数的情况下是从5计到100的循环计数器。
当en为1,load端为0,clr为1时,正常计数。
其中en为始能端。
使用modelsim仿真如下:
四、调试情况,设计技巧及体会
通过本次实验我更加熟悉了利用verilo语言来描述电路,同时熟悉了利用软件仿真电路的逻辑功能并进行验证和分析。
使我对QuartusII有了初步的了解,同时让我了解到硬件可以用软件来完成,此软件的模拟仿真给我们学习数字电路有很大的帮助,形象的表达了信号的输出。
通过本次实验,除modelsim软件仿真电路以外,我又学会了QuartusII仿真软件的使用,觉得两个软件各自有各自的优点。
五、源程序清单
(1)verilog语言编辑的8位计数器:
module counter(m,d_in,clk,clr,en,load,out);
input clk,clr,en,load;
input [7:0] d_in,m;
output [7:0] out ;
reg [7:0] out;
always @ (posedge clk)
begin
if(en)
begin
if (clr)
out<=8'd0;
else if (load)
out<=d_in;
else if(out == 8'd100)
out<=m;
else
out<=out+1;
end
else
out<=8'bZZZZZZZZ;
end
endmodule
(2)激励如下:
module stimulate;
reg CLK,CLR,EN,LOAD;
reg [7:0] D_IN,M;
wire [7:0] OUT ;
counter tt (M,D_IN,CLK,CLR,EN,LOAD,OUT); initial
CLK =0;
always
#10 CLK=~CLK;
initial
begin
EN=1;
CLR =0;
CLR = 1;
D_IN= 5;
LOAD= 0;
M = 10;
#20 CLR =1;
EN=0;
#20 EN=1;
#10 CLR =0;
#80 LOAD=1;
#30 LOAD= 0;
end
endmodule
原始仿真图形如下:。