山东建筑大学信息与电气工程学院学院课程设计说明书
总结与致谢
通过本次课程设计进一步熟悉Quartus II软件的使用和操作方法,以及硬件实现时的下载方法与运行方法;对Verilog HDL语言的自顶向下设计方法有了进一步的认识,对其中的许多语句也有了新了解,掌握;对自己独立思考和解决问题的能力也有了很大的锻炼。
本次课程设计设计的选题、课题调研与撰写工作是在和老师的指导下完成的。在我的课程设计期间,同课题的同学都给予了我热情的帮助和无私的指导,在此向这些同学们表示衷心的感谢。
在我的学习过程中,杨红娟和王涛老师也给了我耐心的指导和帮助。我在此对各位老师表示诚挚的感谢!
13
山东建筑大学信息与电气工程学院学院课程设计说明书
参考文献
[1] 黄仁欣.EDA技术实用教程.北京:清华大学出版社,2006 [2] 潘松,黄继业.EDA技术与VHDL.北京:清华大学出版社,2009 [3] 江国强编著.EDA技术与应用(第三版)..北京:电子工业出版社,2010 [4] 夏宇闻编著.Verilog HDL数字系统设计教程..北京:北京航空航天大学出版社,2008
[5] 周祖成,程晓军,马卓钊编著.数字电路与系统教学实验教程.北京:科学出版社,2010
[6] 周润景,苏良碧.基于Quartus II 的数字系统Verilog HDL设计实例详解.北京:电子工业出版社,2010
[7] (美国)Sanir Palnitkar 译者:夏宇闻 胡燕祥 刁岚松.Verilog HDL数字设计与综合(第2版).北京:电子工业出版社,2009
[8] 云创工作室.Verilog HDL程序设计与实践.北京:人民邮电出版社,2009
[9] 刘福奇,刘波.Verilog HDL应用程序设计实例精讲.北京:电子工业出版社,2009
[10] 张延伟,杨金岩,葛爱学.verilog hdl程序设计实例详解.北京:人民邮电出版社,2008
14
山东建筑大学信息与电气工程学院学院课程设计说明书
附录
1、分频模块
module frequence_div(cp_50M,cp_1); input cp_50M;//板子提供的最高时钟 output cp_1;//要求得到的秒脉冲 reg [27:0] counter_1;//计数器 reg cp_1;//类型声明 always@(posedge cp_50M) begin
if(counter_1==28'h17D7840)//50M的一半到了,秒脉冲翻转 begin
cp_1<=~cp_1;//翻转 counter_1<=28'h0000000; end else
counter_1<=counter_1+1'b1;//否则加1 end endmodule
2、智能电梯主控制模块 module elevator_controller(//input ports: cp_50M,clk,reset,forbid,
call_up_1, call_up_2, call_up_3, call_up_4, call_up_5,
call_down_2, call_down_3, call_down_4, call_down_5,call_down_6, request_1, request_2, request_3, request_4, request_5, request_6, //output ports:
out,LiftState,over_alarm,count_out,count );
//output ports:
output [6:0]out;//输出楼层
output [6:0] LiftState;//输出电梯状态 output over_alarm;//出错
output [6:0]count_out;//计数器输出,便于我控制开关门的状态显示 output [2:0]count;//计数器 //input ports: input cp_50M; input
clk,reset,call_up_1,call_up_2,call_up_3,call_up_4,call_up_5,call_down_2,call_down_3,call_down_4,call_down_5,call_down_6,request_1,request_2,request_3,request_4,request_5,request_6;
input forbid;
15
山东建筑大学信息与电气工程学院学院课程设计说明书
UP
//即将切换到第二个UP时,才加一。
//这个说的简单一点,就是移位寄存器,便于对电梯状态的实时的控制 wire over_alarm; wire [6:0]out; wire [6:0]count_out;
//pos与Posout的关系:当前状态一改变,pos立即作相应改变,而PosOut则是当前状态在要变到下一状态//,将PosOut作相应改变。如从WAIT切换到第一个UP时,pos立即加一,而PosOut则要等到第一个
的瞬间
reg [5:0]pos,PosOut;
reg [2:0] count;//门开后要持续5个时钟周期,用count来计数 reg DoorFlag; reg [1:0] UpDnFlag;
reg [6:0] LiftState,NextState;//分别表示电梯的当前状态和下一状态
wire real_clk;
//up_all,down_all,request_all分别用来合并向上请求的各信号,向下请求的各信号和停靠请求的各信号 //以便判断电梯在状态间如何转移时更简洁 //定义电梯7种状态的符号常量
reg [5:0] up_all,down_all,request_all;
parameter WAIT=7'b0000001, UP=7'b0000010, DOWN=7'b0000100, UPSTOP=7'b0001000 , DOWNSTOP=7'b0010000, OPENDOOR=7'b0100000, CLOSEDOOR=7'b1000000;
//定义楼层的符号常量
FLOOR1=6'b000001,
FLOOR2=6'b000010,
FLOOR3=6'b000100,
FLOOR4=6'b001000,
parameter
FLOOR5=6'b010000, FLOOR6=6'b100000; parameter TRUE=1'b1, FALSE=1'b0;
assign real_clk=(clk&(~forbid));
//采用屏蔽时钟的方法来实现“电梯强制禁止运行”。方法虽然违反了“同步电路最好
//没有时钟门控”的要求,但是在此只要“负面影响”不是很大还是可以接受的。
//将各上升请求信号实时地合并(6楼为顶层,无上升请求,考虑到通用性,将第4位填零) always @(call_up_1 or call_up_2 or call_up_3 or call_up_4 or call_up_5)
up_all={1'b0, call_up_5, call_up_4, call_up_3, call_up_2, call_up_1};
//将各下降请求信号实时地合并(1楼为底层,无下降请求,考虑到通用性,将第1位填零) always @(call_down_2 or call_down_3 or call_down_4 or call_down_5 or call_down_6) down_all={call_down_6, call_down_5, call_down_4, call_down_3, call_down_2, 1'b0};
//将各停靠请求信号实时地合并
always @(request_1 or request_2 or request_3 or request_4 or request_5 or request_6)
16
//定义门打开和门关闭的符号常量 //定义电梯上升,下降和静止的符号常量 parameter OPEN=1'b1, CLOSED=1'b0;
parameter UPFLAG=2'b01,DNFLAG=2'b10,STATIC=2'b00;
相关推荐: