基于FPGA高性能温控调速风扇系统设计 - 图文(6)

2019-04-08 22:00

重庆大学本科学生毕业设计(论文) 4 软件设计与仿真

4.2 Verilog HDL语言与Quartus II开发平台

4.2.1 Verilog HDL语言

FPGA支持Verilog HDL和VHDL两种语言,相比之下,由于Verilog HDL语

言的编程规则相似于C语言,所以比较适合初学者,所以本设计的程序采用Verilog HDL语言进行编写。

Verilog HDL是一种硬件描述语言(HDL:Hardware Description Language),以

文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。描述复杂的硬件电路,设计人员总是将复杂的功能划分为简单的功能,模块是提供每个简单功能的基本结构。设计人员可以采取“自顶向下”的思路,将复杂的功能模块划分为低层次的模块。这一步通常是由系统级的总设计师完成,而低层次的模块则由下一级的设计人员完成。自顶向下的设计方式有利于系统级别层次划分和管理,并提高了效率、降低了成本。“自底向上”方式是“自顶向下”方式的逆过程。使用Verilog描述硬件的基本设计单元是模块(module)。构建复杂的电子电路,主要是通过模块的相互连接调用来实现的。模块被包含在关键字module、endmodule之内。实际的电路元件。Verilog中的模块类似C语言中的函数,它能够提供输入、输出端口,可以实例调用其他模块,也可以被其他模块实例调用。模块中可以包括组合逻辑部分、过程时序部分。例如,四选一的多路选择器,就可以用模块进行描述。它具有两个位选输入信号、四个数据输入,一个输出端,在Verilog中可以表示为:module mux (out, select, in0, in1, in2, in3);output out;input [1:0] select;input in0, in1, in2, in3;//具体的寄存器传输级代码endmodule。设计人员可以使用一个顶层模块,通过实例调用上面这个模块的方式来进行测试。这个顶层模块常被称为“测试平台(Testbench)”。为了最大程度地对电路的逻辑进行功能验证,测试代码需要尽可能多地覆盖系统所涉及的语句、分支、条件、路径、触发、状态机状态,验证人员需要在测试平台里创建足够多的输入激励,并连接到被测模块的输入端,然后检测其输出端的表现是否符合预期(诸如SystemVerilog的硬件验证语言能够提供针对验证专门优化的数据结构,以随机测试的方式进行验证,这对于高度复杂的集成电路设计验证可以起到关键作用)。实例调用模块时,需要将端口的连接情况按照这个模块声明时的顺序排列。这个顶层模块由于不需要再被外界调用,因此没有输入输出端口:module tester;reg [1:0] SELECT;reg IN0, IN1, IN2, IN3;wire OUT;mux my_mux (OUT, SELECT, IN0, IN1, IN2, IN3); //实例调用mux模块,这个实例被命名为my_muxinitial //需要仿真的激励代码 begin endendmodule在这个测试平台模块里,设计人员可以设定仿真时的输入信号以及信号监视程序,然后观察仿真时的输出情况是否符合要求,这样就可以了解设计是否达到了预期。示例

20

重庆大学本科学生毕业设计(论文) 4 软件设计与仿真

中的对模块进行实例引用时,按照原模块声明时的顺序罗列了输入变量。除此之外,还可以使用或者采用命名端口连接的方式。使用这种方式,端口的排列顺序可以与原模块声明时不同,甚至可以不连接某些端口:

my_mux(.out(OUT), .select(SELECT), .in0(IN0), .in1(IN1), .in2(IN2), .in3(IN3));//使用命名端口连接,括号外面是模块声明时的端口,括号内是实际的端口连接//括号外相当于C语言的形式参数,括号内相当于实际参数endmodule。上面所述的情况是,测试平台顶层模块的测试变量直接连接了所设计的功能模块。测试平台还可以是另一种形式,即测试平台并不直接连接所设计的功能模块,而是在这个测试平台之下,将激励模块和功能模块以相同的抽象级别,通过线网相互连接。这两种形式的测试平台都可以完成对功能模块的测试。大型的电路系统,正是由各个层次不同模块之间的连接、调用,来实现复杂的功能的。

4.2.2 Quartus II开发平台

Quartus II 是Altera公司的综合性PLD/FPGA开发软件,原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware 支持Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。

Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。 此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。 Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

4.3 程序各部分调试

程序调试过程,采用了分块调试的方法,这样不仅便于找出各模块程序的问

21

重庆大学本科学生毕业设计(论文) 4 软件设计与仿真

题,而且有利于整体程序的调试。调试和编译用到的软件为:Quartus II。

4.3.1 数码管显示部分的调试

对数码管显示部分程序进行人为的赋值,如对其显示变量intmd, indwd赋22.5,2,去观察数码管是否能够正确的进行显示显示22.5,2,如若不能,则修改显示程序,直至能够正确显示,然后进行下一模块的调试。数码管显示程序display.v部分程序如下:

always@(i) begin case(i) 2'd0:

begin

sm_bit=8'b1111_1110;

disp_dat=intmd[3:0];//display the [3:0] of the tempreture and choose end

the leftest bit

2'd1: begin

sm_bit=8'b1111_1101; disp_dat=intmd[7:4]; end

2'd2: begin

sm_bit=8'b1111_1011; disp_dat=intmd[11:8]; end

2'd3: begin

sm_bit=8'b1011_1111; disp_dat=indwd; end

default:sm_bit=8'b000_0000;

endcase end

22

重庆大学本科学生毕业设计(论文) 4 软件设计与仿真

4.3.2 矩阵键盘输入部分的调试

首先不用加入内部控制或者算法程序,直接将矩阵键盘输入程序与数码管显示程序对接,用数码管显示的值去检验矩阵键盘输入程序是否正常,能否得到正确的键入值,如若不能,修改键入程序,直至能够正确输入,然后进行下一模块的调试。键盘输入程序key_debounce.v部分程序如下: always@(posedge sys_clk or negedge sys_rstn)//give the indwd

begin end

if(!sys_rstn)

get_key<=8'd11; else begin

case(key_low)

5'b00001:get_key<=8'd1; 5'b00010:get_key<=8'd2; 5'b00100:get_key<=8'd3; 5'b01000:get_key<=8'd10; 5'b10000:get_key<=8'd11;

default:get_key<=get_key; endcase

end

4.3.3 温度传感器测温程序的调试

同样先不加入内部控制或者算法程序,直接将数码管显示程序与其对接,用数

码管显示的值去检查测温程序是否正常,若不能,修改测温程序,直至能够正确测得温度并显示,然后进入下一模块的调试。温度获得程序tmget.v部分程序如下: case (state)

S00 : begin

temperature_buf <= 16'h001F; state <= S0; end

S0 : begin // rst cnt_1us_clear <= 1;

one_wire_buf <= 0; state <= S1;

23

重庆大学本科学生毕业设计(论文) 4 软件设计与仿真

end S1 : begin

cnt_1us_clear <= 0;

if (cnt_1us == 500) //down 500us begin

cnt_1us_clear <= 1;

one_wire_buf <= 1'bZ; //up state <= S2; end end

4.3.4 PWM调试程序的调试

直接人为赋转速信息,并结合硬件电路进行调试,看风扇转速是否符号相应的

要求,若不符合,则修改PWM程序,直至能够精准控制风扇转速,然后进入下一模块的调试。PWM调试程序pwm_out.v部分程序如下: always@(tm) begin if(tm>220)

pwm_count<=21'h1f_ffff;//full speed runing else if(tm<150)

pwm_count<=21'd0;// stop the fan

else if(15==(intmp[11:8]*10+intmp[7:4]))//if the tempreture too low to run the pwm_count<=21'd299590; else

machine,give it a power

pwm_count<=(tm-150)*29959;//(256/8)=31 end

4.3.5 算法及整体程序的调试

在上述各模块的调试都正确无误的情况下,再进行算法及整体程序的调试,直

接将各个模块程序接口与之相对应即可,并结合硬件电路,看所设计的程序是否符合设计要求,以及程序是否正确无误,若有错误之处,进行修改直至程序运行正常。顶层程序wenkongznfs_top.top部分程序如下: key_debounce

d1(.sys_clk(sys_clk),.sys_rstn(sys_rstn),.key_in(key_in),.get_key(indwd));

24


基于FPGA高性能温控调速风扇系统设计 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:环形加热炉的温度控制

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: