基于FPGA智能窗控制系统 建立项目文件建立设计文件Verilog文本输入N编译成功Y软件仿真映射管脚下载
图4-1 Quartus II 软件的开发流程
Quartus II 软件的典型设计流程一般可分为设计输入、综合、布局布线、时序分析、仿真、编程和配置、调试、系统级全设计,如图4-2 Quartus II设计流程:
1.设计输入:设计输入可用多种方法实现,常用的有原理图输入和 HDL 硬件描述语言两种。在设计复杂的电路系统时,可采用硬件描述语言(如 VHDL,Verilog语言等)分模块、分层次的设计方法,然后生成图形模块再进行设计。
2.综合:分析和综合使用Quartus II Integrated Synthesis 综合Verilog 或者VHDL设计文件。
3.布局布线:Quartus II Fitter 对设计进行布局布线,在Quartus II软件中是指“fitting (适配)”。Fitter使用Analysis Synthesis建立数据库,将工程的逻辑和时序要求与器件的可用资源相匹配。它将每个逻辑结构分配给最佳逻辑单元位置,进行布线和时序分析,并选定相应的互联路径和引脚分配。
4.时序分析:Quartus II TimeQuest 时序分析器和标准时序分析器可用于分析设计中的所有逻辑,并有助于指导Fitter 达到设计中的时序要求。
实验成功- 20 -
基于FPGA智能窗控制系统 设计输入功耗分析综合布局布线调试时序分析工程更改管理仿真时序逼真编程和配置
图4-2 Quartus II设计流程
5.仿真:可以使用EDA仿真工具或Quartus II Simulator 对设计进行功能与时序的仿真。
6.编程和配置:使用Quartus II 软件成功编译工程后,就可以对Alter器件进行编程或配置。
7.系统设计:Quartus II 软件支持SOPC Builder和DSP Bulider 系统设计流程。系统设计流程可以使工程师能够以更高级的抽象概念快速设计、评估可编程芯片系统(SOPC)体系结构设计。
4.1.2 硬件描述语言(HDL)
硬件描述语言(Hardware Description Language,简称 HDL),是一种用形式化方法描述数字电路和系统的语言。利用这种语言,数字电路系统的设计可以从抽象到具体逐层描述自己的设计思想,把设计模块化。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。再用专用集成电路 ASIC 或现场可编程门阵列 FPGA 自动布局布线工具,把网表转换为要实现的具体电路布线结构。目前,最常用的硬件描述语言是 VHDL 和 Verilog HDL 语言,它们都是 IEEE标准。
VHDL即甚高速集成电路硬件描述语言。这个语言的目的旨在使电路文本化成为标准,目的是为了使文本描述的电路设计能够为其他人所理解,同时也可以作为一种模型语言并能通过软件进行仿真。
1.VHDL具有较强的功能特点: (1)具有较强的描述能力 (2)具有共享和复用的能力
(3)具有独立于器件和工艺设计的能力 (4)具有良好的可移植能力
- 21 -
基于FPGA智能窗控制系统 (5)具有良好的性能评估能力 (6)具有向ASIC移植的能力
Verilog HDL是硬件语言描述的一种,用于数字电子系统设计。它允许设计者用它来进行进行各种级别的逻辑设计,可以用它来进行数字逻辑系统的仿真验证、时序分析、逻辑综合。它是目前应用最广泛的一种硬件描述语言之一。
Verilog HDL和VHDL作为描述硬件电路设计的语言的优异性对比:
1.共同点,Verilog HDL和VHDL作为描述硬件电路设计的语言,其共同特点在于: (1)能形式化地抽象表示电路的结构和行为。 (2)支持逻辑设计中层次与领域的描述。
(3)可借用高级语言的精巧结构来简化电路的描述。 (4)支持电路描述由高层到低层的综合转换。 (5)便于文档管理,易于理解和设计重用。
2.不同点,Verilog HDL和VHDL作为描述硬件电路设计的语言,其不同点在于: (1)Verilog HDL拥有更广泛的设计群体,成熟的资源也远比VHDL丰富。 (2)与VHDL相比,Verilog更为容易掌握 (3)掌握VHDL设计技术比较困难
(4)Verilog HDL在系统级抽象方面比VHDL略差一些,而在门级开关电路描述方面比VHDL强很多
4.2 控制器对DS18B20操作
基于DS18B20数字温度传感器的软件设计采用Verilog HDL编写程序,主要完成DS18B20的测量温度值计算及温度值的显示功能。其采用模块化设计,程序设计包括系统初始化、控制器发送ROM指令、读取数据、DS18B20的写操作。 1.系统初始化:
(1)先将数据线置高电平“1” ;
(2)延时(该时间要求的不是很严格,但是尽可能的短一点); (3)数据线拉到低电平“0” ;
(4)延时750μs(该时间的时间范围可以从480-960μs); (5)数据线拉到高电平“1” ;
(6)延时等待(如果初始化成功则在15-60ms时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制);
①若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480μs; ②将数据线再次拉高到高电平“1”后结束。 2.控制器发送ROM指令:
ROM指令共5条,每一个工作周期只能发一条,读ROM,匹配ROM,跳跃ROM,查找ROM和报警查找。一般只挂接单个18B20芯片时可以使用跳过ROM指令;
- 22 -
基于FPGA智能窗控制系统 3.控制器发送存储器操作指令:
4.在ROM指令后,紧接着就是发送存储器操作指令了:
(1)温度转换指令:44H,启动DS18B20进行温度转换,将温度值放入RAM的第1、2个地址;
(2)读暂存器指令:BEH,从RAM中读数据,读地址从0开始,一直可以读到9,可只读前两个字节;
(3)写暂存器指令:4EH,将数据写入暂存器的TH、TL字节;
(4)复制暂存器指令:48H,把暂存器的TH、TL字节写到E2RAM中; (5)重新调E2RAM 指令:B8H,把E2RAM中的TH、TL字节写到暂存器TH、TL字节; (6)读电源供电方式指令:B4H,启动DS18B20发送电源供电方式的信号给主CPU。 5.若要读出当前的温度数据,需要执行两次工作周期,第一个周期为复位,跳过ROM指令,执行温度转换存储器指令等待500μs温度转换时间。紧接着执行第二个周期为复位,跳过ROM指令,执行读RAM的存储器,读数据;
6.DS18B20的写操作:在写数据时,前15μs总线需要是被控制器置低电平,而后则将是芯片对总线数据的采样时间,采样时间在15-60μs,采样时间内,如果控制器将总线拉高则表示写1,如果控制器将总线拉低则表示写0。每一位的发送都应该有一个至少15μs的低电平起始位随后的数据0或1应该在45μs内完成。整个位的发送时间应该保持在60-120μs,否则不能保证通信正常进行。如图4-3 DS18B20的写时序图所示。
图4-3 DS18B20的写时序图
7.DS18B20的读操作:读时序时也是必须先由主机产生至少1μs的低电平,表示读时间的起始。随后在总线被释放后的15μs中DS18B20会发送内部数据位。注意必须要在读间隙开始的15μs内读数据为才可以保持通信的正确。通信时,字节的读或写是从高位开始的,即A7到A0。控制器释放总线,也相当于将总线置1。如图4-4 DS18B20的读时序图。
部分代码如下:
- 23 -
基于FPGA智能窗控制系统
图4-4 DS18B20的读时序图
module Temperature (
input clk, // 50MHz时钟 input rst_n, // 异步复位
inout one_wire, // One-Wire总线
output [15:0] temperature // 输出温度值 );
reg rst_;
reg [19:0]count; always@(posedge clk) begin
if(count<20’h80000) begin
rst_n<=1;
count<=count+1; end
else if(count<20’h8ffff) begin
rst_n<=0;
count<=count+1; end else
rst_n<=1; end
4.3 实现电机动作
根据本次设计的目的电机驱动部分采用两相四线步进电机,L298N 作为运动驱动芯片;
- 24 -