FPGA—约翰逊计数器
- 格式:docx
- 大小:125.52 KB
- 文档页数:6
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,直到计数器的值达到最大值时,计数器的值重新归零。
计数器(1):Verilog常⽤写法 计数器是⾮常基本的使⽤,没有计数器就⽆法处理时序。
我在学习时发现市⾯上有⼏种不同的计数器写法,⾮常有趣,在此记录下来:⼀、时序逻辑和组合逻辑彻底分开1.代码1//======================================================================2// --- 名称 : Count_13// --- 作者 : xianyu_FPGA4// --- ⽇期 : 2018-12-105// --- 描述 : 模10计数器,0到10循环累加6//======================================================================78module Count_19 (10input clk ,11input rst_n ,12output reg [ 3:0] cnt13 );1415//----------------------------------------------------------------------16//-- 组合电路17//----------------------------------------------------------------------18reg [ 3:0] cnt_n ;1920always @(*)begin21if(cnt == 4'd9)22 cnt_n = 4'd0;23else24 cnt_n = cnt + 1'b1;25end2627//----------------------------------------------------------------------28//-- 时序电路29//----------------------------------------------------------------------30always @(posedge clk or negedge rst_n)begin31if(!rst_n)32 cnt <= 4'b0;33else34 cnt <= cnt_n;35end3637endmodule3839/*40//----------------------------------------------------------------------41//-- 组合电路也可以这样写42//----------------------------------------------------------------------43wire [ 3:0] cnt_n ;4445assign cnt_n = (cnt==4'd9)? 4'd0 : cnt+1'b1;4647*/2.写法1的RTL视图3.写法2的RTL视图⼆、最常见的写法1.代码1//======================================================================2// --- 名称 : Count_23// --- 作者 : xianyu_FPGA4// --- ⽇期 : 2018-12-105// --- 描述 : 模10计数器,0到10循环累加6//======================================================================78module Count_29 (10input clk ,11input rst_n ,12output reg [ 3:0] cnt13 );1415always @(posedge clk or negedge rst_n)begin16if(!rst_n)17 cnt <= 4'd0;18else if(cnt==4'd9)19 cnt <= 4'd0;20else21 cnt <= cnt + 1'b1;22end23242526endmodule2.RTL视图三.代码⽚段写法1.代码1//====================================================================== 2// --- 名称 : Count_33// --- 作者 : xianyu_FPGA4// --- ⽇期 : 2018-12-105// --- 描述 : 模10计数器,0到10循环累加6//====================================================================== 78module Count_39//---------------------<端⼝声明>---------------------------------------10 (11input clk ,12input rst_n ,13output reg [ 3:0] cnt14 );15//---------------------<信号定义>---------------------------------------16wire add_cnt ;17wire end_cnt ;1819//----------------------------------------------------------------------20//-- 0-9计数21//----------------------------------------------------------------------22always @(posedge clk or negedge rst_n)begin23if(!rst_n)24 cnt <= 'd0;25else if(add_cnt)begin26if(end_cnt)27 cnt <= 'd0;28else29 cnt <= cnt + 1'b1;30end31else32 cnt <= cnt;33end3435assign add_cnt = 1;36assign end_cnt = add_cnt && cnt==10-1;3738394041endmodule2.RTL视图四、⾃减计数器(较少⽤到)1.代码1//====================================================================== 2// --- 名称 : Count_43// --- 作者 : xianyu_FPGA4// --- ⽇期 : 2018-12-195// --- 描述 : 模10⾃减计数器,10到0循环累减6//====================================================================== 78module Count_49//---------------------<端⼝声明>---------------------------------------10 (11input clk ,12input rst_n ,13output reg [ 3:0] cnt14 );15//---------------------<参数定义>---------------------------------------16parameter CNT_MAX = 10 ;1718//----------------------------------------------------------------------19//-- 10到0循环累减20//----------------------------------------------------------------------21always @(posedge clk or negedge rst_n)begin22if(!rst_n) begin23 cnt <= 0;24end25else if(cnt==0) begin26 cnt <= CNT_MAX;27end28else begin29 cnt <= cnt - 1;30end31end323334endmodule2.RTL视图3.仿真波形五、新学到的⼀种⾮常简洁的计数器 本以为计数器就是这样了,近来学习开源骚客《SDRAM那些事⼉》系列教程,⼜发现⼀种新的写法,对于特定功能的实现上⾮常简洁。
电力学院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至今已有10多年的时间。
至今记得当初第一次在EDA实验平台上完成数字秒表,抢答器,密码锁等实验时,那个兴奋劲。
当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。
后来读研究生,工作陆陆续续也用过Quartus II,Foundation,ISE,Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。
工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的。
逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘了,更不要说检错了;如果一个项目做了一半一个人走了,接班的估计得从头开始设计;如果需要在原来的版本基础上增加新功能,很可能也得从头来过,很难做到设计的可重用性。
在逻辑方面,我觉得比较重要的规范有这些:1.设计必须文档化。
要将设计思路,详细实现等写入文档,然后经过严格评审通过后才能进行下一步的工作。
这样做乍看起来很花时间,但是从整个项目过程来看,绝对要比一上来就写代码要节约时间,且这种做法可以使项目处于可控、可实现的状态。
2.代码规范。
如果在另一个设计中的时钟是40ns,复位周期不变,我们只需对CLK_PERIOD进行重新例化就行了,从而使得代码更加易于重用。
b.信号命名要规范化。
1)信号名一律小写,参数用大写。
2)对于低电平有效的信号结尾要用_n标记,如rst_n。
3)端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪个模块去的关系排列,这样在后期仿真验证找错时后方便很多。
4)一个模块尽量只用一个时钟,这里的一个模块是指一个module或者是一个entity。
fpga数码管动态显示原理FPGA数码管动态显示原理介绍本文将为读者详细介绍FPGA数码管动态显示的原理。
FPGA(可编程门阵列)是一种灵活的集成电路,可以根据设计人员的需求进行逻辑门的编程和配置。
数码管是一种数字显示设备,通过控制不同的段点亮可以显示不同的数字和字母。
基本原理FPGA数码管动态显示的基本原理如下:1.FPGA通过编程和配置可以实现不同的逻辑功能,其中包括控制数码管的段点亮。
2.数码管由多个段组成,每个段可以独立控制点亮与否。
3.数码管的段的编号是根据国际标准定义的,如a、b、c、d、e、f、g等。
4.数码管的动态显示是通过快速切换每个段的点亮状态来实现的。
原理详解FPGA数码管动态显示的原理更详细地描述如下:1.FPGA通过输入控制信号来选择需要显示的数字或字母。
2.FPGA将该数字或字母转换为相应的数码管段的控制信号。
3.FPGA通过时序控制逻辑来控制数码管段的点亮与否,实现数字或字母的显示。
4.FPGA在一个很短的时间内迅速切换不同的数码管段的点亮状态,使其看起来像是同时显示的。
5.通过不断重复上述步骤,FPGA可以实现数码管的动态显示。
应用实例FPGA数码管动态显示的应用实例包括但不限于以下几种:1.时钟显示:FPGA可以控制数码管动态显示当前时间的小时和分钟。
2.计数器:FPGA可以控制数码管动态显示计数器的值。
3.温度显示:FPGA可以根据输入的温度值,控制数码管动态显示当前的温度。
总结本文简要介绍了FPGA数码管动态显示的原理,包括基本原理和原理详解。
通过编程和配置FPGA,可以实现数码管的动态显示,从而达到显示不同数字和字母的目的。
同时,本文也提及了一些应用实例,展示了动态显示的广泛应用领域。
更大程度上,动态显示技术可以推动数字显示的发展,提供更丰富多样化的显示效果。
对于创作者而言,理解数码管动态显示的原理,可以在设计中灵活运用这一技术,创造出更具创意和功能性的作品。
约翰逊计数器原理
约翰逊计数器(Johnson counter)是一种常用的数字电路,用
于实现无限循环的计数功能。
它由一组触发器和反馈网络组成,可以产生一个递增的二进制计数序列。
约翰逊计数器的原理如下:
1. 约翰逊计数器通过将输出位的状态作为输入信号来实现计数功能。
它的输出位的状态是根据当前输入位的状态以及触发器的反馈路径来确定的。
2. 约翰逊计数器一般使用D触发器作为基本元件,每个D触
发器的输入信号来自于前一个触发器的输出信号。
3. 约翰逊计数器中,第一个触发器的输入信号为输入信号,最后一个触发器的输出信号作为反馈信号。
4. 当输入信号来到时,触发器根据输入信号的状态改变输出位的状态。
同时,将输出位的状态作为输入信号提供给下一个触发器。
5. 当所有触发器的输出状态都改变一轮后,最后一个触发器的输出状态作为反馈信号,经过反馈网络返回到第一个触发器,从而完成循环计数。
约翰逊计数器可以实现不同的计数序列,比如二进制和自适应计数。
它在数字电路中广泛应用于频率分频、频率合成、序列生成等场合。
基于FPGA的数字频率计设计随着科学技术的不断进步,数字电子技术在各个领域都得到了广泛的应用。
其中,FPGA(现场可编程门阵列)作为一种灵活、可编程、可重构的数字电路设备,具有较高的性能和灵活性,被广泛应用于数字信号处理、通信、图像处理等各个领域。
本篇文章将介绍基于FPGA的数字频率计设计。
一、概述数字频率计是一种用于测量信号频率的设备,可以方便快速地获取信号的频率信息。
传统的数字频率计通常采用微处理器或专用集成电路来实现,但是这些方案在某些应用场景下存在着局限性。
使用FPGA来设计数字频率计,既可以充分利用FPGA的灵活性和并行性,又可以实现高性能和低功耗的设计。
二、基于FPGA的数字频率计设计原理基于FPGA的数字频率计主要通过计数器和时钟信号来实现。
其设计原理可以分为以下几个步骤:1. 时钟信号同步:通过FPGA内部的PLL(锁相环)模块,可以实现时钟信号的同步和稳定。
2. 信号输入:将待测信号输入FPGA,可以通过外部接口或模拟输入模块实现。
3. 计数器设计:利用FPGA内部的计数器模块,对输入信号进行计数,从而获取信号的频率信息。
4. 频率计算:根据计数器的计数值和时钟信号的周期,可以计算出输入信号的频率信息。
三、基于FPGA的数字频率计设计实现基于上述原理,可以利用FPGA内部的逻辑资源,设计出一个高性能的数字频率计。
具体实现步骤如下:1. 确定输入信号的接口:选择适合的输入接口,可以是数字信号接口、模拟信号接口或者通用IO口。
2. 设计计数器模块:根据待测信号的频率范围和精度要求,设计合适的计数器模块,可以结合FPGA的时钟管理模块实现高精度计数。
3. 编写频率计算算法:根据计数器得到的计数值和时钟信号的周期,设计频率计算算法,可以采用移位运算、累加运算等实现高效的频率计算。
4. 实现显示与输出:设计合适的显示模块和输出接口,将测得的频率信息在显示屏或者外部设备上进行输出。
四、基于FPGA的数字频率计设计应用基于FPGA的数字频率计设计可以广泛应用于各种领域,如通信、测控、仪器仪表等。
FPGA入门系列实验教程——数码管动态显示FPGA(Field-Programmable Gate Array)是一种可编程逻辑设备,它可以通过编程的方式实现各种数字逻辑电路的功能。
在FPGA入门的过程中,了解如何使用数码管进行动态显示是一项非常基础而重要的实验。
本文将向读者介绍如何使用FPGA实现数码管的动态显示,并提供相关的实验教程。
一、实验目的本实验的目的是通过FPGA控制数码管以一定的时间间隔显示不同的数字或字符。
通过本实验的学习,读者可以了解到FPGA的编程方式和数码管的控制原理,并初步掌握FPGA的基本应用。
二、实验材料和准备1. FPGA开发板(如Xilinx Spartan系列)2.七段数码管模块3.连接线三、实验步骤1.搭建电路连接将开发板上的数码管模块通过连接线与FPGA的GPIO引脚相连接,确保连接正确无误。
2.创建工程打开FPGA开发环境(如Xilinx ISE),创建一个新的工程。
3.编写代码在创建的工程中,通过HDL语言(如Verilog或VHDL)编写数码管控制的代码。
以下是一个简单的Verilog代码示例:module seven_segment_displayinput wire clk,output wire [6:0] seg,output wire [3:0] anreg [23:0] count;reg [3:0] digit;reg [6:0] segment;count <= count + 1;digit <= 0;digit <= 1;digit <= 2;digit <= 3;count <= 0;endendassign seg = segment;assign an = digit;endmodule以上代码实现了数码管的动态显示功能。
其中,clk为时钟信号,seg为七段数码管的引脚,an为数码管的位选引脚。
使用VHDL 进行分频器设计作者:ChongyangLee摘要使用VHDL 进行分频器设计作者:ChongyangLee本文使用实例描述了在FPGA/CPLD 上使用VHDL 进行分频器设计,包括偶数分频、非50%占空比和50%占空比的奇数分频、半整数(N+0.5)分频、小数分频、分数分频以及积分分频。
所有实现均可通过Synplify Pro 或FPGA 生产厂商的综合器进行综合,形成可使用的电路,并在ModelSim 上进行验证。
目录概述 (1)计数器 (1)普通计数器 (1)约翰逊计数器 (3)分频器 (4)偶数分频器 (4)奇数分频器 (6)半整数分频器 (9)小数分频器 (11)分数分频器 (15)积分分频器 (18)概述分频器是数字电路中最常用的电路之一,在FPGA 的设计中也是使用效率非常高的基本设计。
基于FPGA 实现的分频电路一般有两种方法:一是使用FPGA 芯片内部提供的锁相环电路,如ALTERA 提供的PLL (Phase Locked Loop),Xilinx 提供的DLL(Delay Locked Loop);二是使用硬件描述语言,如VHDL、Verilog HDL 等。
使用锁相环电路有许多优点,如可以实现倍频;相位偏移;占空比可调等。
但FPGA 提供的锁相环个数极为有限,不能满足使用要求。
因此使用硬件描述语言实现分频电路经常使用在数字电路设计中,消耗不多的逻辑单元就可以实现对时钟的操作,具有成本低、可编程等优点。
计数器计数器是实现分频电路的基础,计数器有普通计数器和约翰逊计数器两种。
这两种计数器均可应用在分频电路中。
普通计数器最普通的计数器是加法(或减法)计数器。
下面是加法计数器的VHDL实现,其Synplify Pro下的RTL View如图1所示。
--file Name: ripple.vhd--Description: 带复位功能的加法计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ripple isgeneric (width: integer := 4);port(clk, rst: in std_logic;cnt: out std_logic_vector(width - 1 downto 0));end ripple;architecture a of ripple issignal cntQ: std_logic_vector(width - 1 downto 0);beginprocess(clk, rst)beginif (rst = '1') thencntQ <= (others => '0');elsif (clk'event and clk = '1') thencntQ <= cntQ + 1;end if ; end process ;cnt <= cntQ;end a;代码 1 加法计数器 VHDL 代码图 1 加法计数器 RTL 视图加法计数器的Test Bench 代码如下所示,在ModelSim 下进行功能仿真,仿真 波形结果如图 2所示。
fpga实训课程设计一、课程目标知识目标:1. 掌握FPGA的基本原理与结构,理解数字电路设计的基本流程;2. 学习并运用硬件描述语言(如VHDL/Verilog)进行数字电路设计与仿真;3. 理解FPGA实训项目中涉及的算法与逻辑设计,如计数器、状态机、数字信号处理等。
技能目标:1. 能够独立完成FPGA开发环境的搭建与基本操作;2. 培养学生利用硬件描述语言进行数字电路设计的能力,能够对设计进行调试与优化;3. 培养学生团队协作能力,通过项目实践,学会分析问题、解决问题,提高创新能力。
情感态度价值观目标:1. 激发学生对数字电路设计及FPGA技术的兴趣,培养良好的学习习惯;2. 培养学生面对困难与挑战时,具备积极的心态和坚持不懈的精神;3. 强化学生的工程意识,培养严谨、求实的科学态度,提高学生的职业素养。
课程性质:本课程为实践性较强的课程,注重培养学生动手能力与创新能力。
学生特点:学生具备一定的电子技术基础和编程能力,对新技术充满好奇。
教学要求:结合课程特点和学生特点,通过理论教学与实践操作相结合的方式,使学生在掌握基本知识的基础上,提高实际应用能力。
将课程目标分解为具体的学习成果,以便在教学过程中进行有效的设计与评估。
二、教学内容1. FPGA基本原理与结构:介绍FPGA的发展历程、基本组成、工作原理,以及FPGA在设计中的优势与应用领域。
教材章节:第一章 FPGA概述2. 硬件描述语言基础:学习Verilog/VHDL基本语法,掌握数字电路设计的基本描述方法。
教材章节:第二章 硬件描述语言基础3. FPGA开发环境搭建:学习FPGA开发工具(如ISE、Quartus等)的使用,掌握FPGA设计流程。
教材章节:第三章 FPGA开发环境与工具4. 数字电路设计与仿真:学习并实践简单的数字电路设计,如门电路、组合逻辑电路、时序逻辑电路等。
教材章节:第四章 数字电路设计与仿真5. 实践项目:开展FPGA实践项目,涵盖计数器、状态机、数字信号处理等应用。
约翰逊计数器
1熟悉ISE 软件的使用;
2、 掌握用原理图设计数字电路的办法;
3、 掌握利用层次结构描述法设计电路;
1、约翰逊计数器(扭环计数器)是一种环形计数器,其原理框图如下所示:
图i 约翰逊计数器原理框图
它由一个移位寄存器和一个组合反馈逻辑电路闭环构成, 扭环计数器是将移 位寄存器最后一级的输出取反后反馈到第一级输入端而构成的。
2、本次设计一共有八个端口: 一个时钟输入 CLK 三个控制输入端:左移 控制端LEFT 右移控制端RIGHT 和停止控制端STOP 控制信号都是低电平有效; 四个计数输出端:q (0)~q ( 3)。
输入端口引脚接目标板的四个按键,输出端口 引脚接目标板的四个LED
三、实验步骤
1、原理图设计,新建工程然后用原理图设计的方式设计约翰逊计数器。
实验目的
实验原理
務人端~F
CP-^—
F
t-Lr
图2 新建原理图工程
SR4CLED
FJKC
图3约翰逊计数器电路原理图
画出的电路图如图3所示。
2、对设计进行综合,如出现错误请按照错误提示进行修改。
Processed! ^topjvatch
迟Design Summary/Reports
H 护Design Utilities
国$ U^er Constraints
Lt D© Synth e^ize - XST
+ f iQ Implemert Design
f〕Generate Pro gram rni ng File
1+ 耍Conficure Target Devic t 硏Analyze
Using ChipSc..< 3、添加测试文件,进行电路仿真。
图5建立激励文件
激励文件的设计可以分别在stop信号有效与无效的时候进行左移或右移操
作,来验证设计的正确性。
4、根据板子锁定引脚,并生成下载文件。
本次试验中,输入端口LEFT, RIGHT STOP CLK信号分别用一个拨动开关来产生,分别为端口p20,p26,p32,p54。
数据输出用LED灯显示,q[0]~q[3]分别对应端口p22,p23,p24,p25。
在实验板上,拨动开关在上面是低电平,在下面是高电平。
低电平时LED灯发光,高电平时不发光。
生成下载文件。
Design Sum mar//Reports
Design Utilities
User Cofi^traintE
Synthesise -
mplem电nt Design
Generate Programming File 匚onfigure Target DZ匚u
Analyze Decigri Udng ChipSr...
图6生成下载文件
四、实验结果及分析
1仿真波形:
图7 仿真时间0ns~250ns
由图形可以看出此时STOP信号为低电平即无效,由于是时序仿真所以在LEFT信号有效后,输出数据开始移动,并且移动正确。
图8 仿真时间250ns~500ns
从图中不难看出,在STOP信号有效时,输出数据不变,即是停止移动
2、结果分析:
本次设计为4位约翰逊计数器,通过仿真波形可知LEFT控制端控制寄存器
向左移位,RIGHT控制端控制寄存器向右移位,并将最后一位输出取反后输入到第一位。
所以设计正确,在下载到板子上之后,拨动开关2、3 打到低电平,拨动开关1打到高电平,然后反复拨动拨动开关4,会发现LED灯依次向左点亮后
有依次熄灭这样循环。
所以设计结果满足功能。
五、体会
这一次的实验让我感到自己有很大的不足,对ISE的运用还欠缺许多,基本
可以说是一窍不通。
所以,这次实验以后还要花大量的时间在FPGA的学习上,希望可以从中学习到很多的东西。
同时通过这个简单的实验,让我感受到了数字电路设计的魅力,这将是不同于以往单片机编程的一种体验。
六、附件
1 、激励文件:
'timescale 1ns / 1ps
module jc2_jc2_sch_tb();
// Inputs
reg LEFT;
reg RIGHT;
reg STOP;
reg CLK;
// Output
wire [3:0] q;
// Bidirs
// Instantiate the UUT
jc2 UUT (
.LEFT(LEFT),
.RIGHT(RIGHT),
.STOP(STOP),
.CLK(CLK),
.q(q)
);
// Initialize
Inputs initial
begin
CLK = 0; forever #10 CLK = ~CLK; end
initial begin
LEFT = 0; RIGHT = 1; STOP = 1; #100 LEFT = 1; RIGHT = 0; STOP = 1; #100 LEFT
= 0; RIGHT = 1; STOP = 0; #100 LEFT = 1; RIGHT = 0; STOP = 0; #100 $stop;
end
endmodule
2、引脚锁定
net LEFT loc = p20;
net RIGHT loc = p26;
net STOP loc = p32;
net CLK loc = p54;
net q[0] loc = p22;
net q[1] loc = p23;
net q[2] loc = p24;
net q[3] loc = p25;
net CLK CLOCK_DEDICATED_ROUTE = FALSE;
欢迎您的下载,
资料仅供参考!
致力为企业和个人提供合同协议,策划案计划书,学习资料等等
打造全网一站式需求。