20##秋《可编程逻辑器件》
课程设计报告
采用自顶向下分层设计思想的大概设计示意图如下:
分频器,能将高频脉冲变换为低频脉冲,它可由触发器以及计数器来完成。由于一个触发器就是一个二分频器,N个触发器就是2N个分频器。如果用计数器作分频器,就要按进制数进行分频。例如十进制计数器就是十分频器,M进制计数器就为M分频器。 一般使用的石英晶体振荡器频率为32768HZ,要想用该振荡器得到一个频率为1HZ的秒脉冲信号,就需要用分频器进行分频,分频器的个数为2N= 32768HZ,N =15 即有15个分频器。这样就将一个频率为32768HZ的振荡信号降低为1HZ的计时信号,这样就满足了计时规律的需求:60秒=1分钟,60分=1小时。
表1 模块1输入输出接口定义
分频器模块用verilog语言实现采用“计数-翻转”的方法。在模块中,当计数变量计数至某一值n时输出信号翻转一次,如此循环,便可以输出占空比为50%的方波信号,设计程序为:
module DIV_FRE(
rclk,
dclk,
rst);
input rclk;
input rst;
output dclk;
reg dclk;
parameter DIV=50;
reg[25:0] buff=26'd0;
always @(posedge rclk or posedge rst)
begin
if(rst)
begin
buff<=0;
dclk<=0;
end
else
begin
if(buff==DIV-1)
begin
buff<=0;
dclk<=1;
end
else
begin
dclk<=0;
buff<=buff+1;
end
end
end
Endmodule
表2 模块2输入输出接口定义
本设计中计时器模块完全采用verilog语言描述,计时器的基本原理是利用两个模60计数器,串连工作,同时采用一个时钟统一控制。其程序如下:
module counter_num(
clk,
num,
rst);
input clk;
input rst;
output[3:0] num;
reg[3:0] num=4'd0;
parameter COUNTER=10;
initial
begin
num=4'd0;
end
always@ (posedge clk or posedge rst)
begin
if(rst)
begin
num<=4'd0;
end
else
begin
if(num==COUNTER-1)
num<=4'd0;
else
num<=num+1;
end
end
Endmodule
控制模块:
module digit_num_fluid_display_4bit(
clk,
num0,
num1,
num2,
num3,
wela,
dula,
rst );
input clk;
input rst;
input[3:0] num0;
input[3:0] num1;
input[3:0] num2;
input[3:0] num3;
output[3:0] wela;
output[7:0] dula;
wire[3:0] num;
reg[3:0] num_buff;
wire[1:0] pos;
reg[1:0] pos_buff;
reg[1:0] i=2'b0;
assign num=num_buff;
assign pos=pos_buff;
digit_led_display_1bit led_display (
.clk(clk),
.num(num),
.pos(pos),
.dula(dula),
.wela(wela) );
always@(posedge clk or posedge rst)
begin
if(rst)
begin
i<=2'b00;
pos_buff<=2'b00;
num_buff<=0;
end
else
begin
case(i)
2'b00:
begin
pos_buff<=2'b00;
num_buff<=num0;
end
2'b01:
begin
pos_buff<=2'b01;
num_buff<=num1;
end
2'b10:
begin
pos_buff<=2'b10;
num_buff<=num2;
end
2'b11:
begin
pos_buff<=2'b11;
num_buff<=num3;
end
endcase
i<=i+1;
end
end
endmodule
计数模块:
module digit_led_display_1bit( //display digit led 1bit
clk, //clk of refresh
num, //the num to display
pos, //the position
dula, //duan bianma
wela);
input clk;
input[3:0] num;
input[1:0] pos;
output[7:0] dula;
output[3:0] wela;
reg[7:0] dula=8'b1111_1111;
reg[3:0] wela=4'b1111;
parameter[7:0] num_0=8'b1100_0000,
num_1=8'b1111_1001,
num_2=8'b1010_0100,
num_3=8'b1011_0000,
num_4=8'b1001_1001,
num_5=8'b1001_0010,
num_6=8'b1000_0010,
num_7=8'b1111_1000,
num_8=8'b1000_0000,
num_9=8'b1001_0000 ;
always@(posedge clk)
begin
case(pos)
2'b00: wela<=4'b1110;
2'b01: wela<=4'b1101;
2'b10: wela<=4'b1011;
2'b11: wela<=4'b0111;
endcase
case(num)
4'b0000: dula<=num_0;
4'b0001: dula<=num_1;
4'b0010: dula<=num_2;
4'b0011: dula<=num_3;
4'b0100: dula<=num_4;
4'b0101: dula<=num_5;
4'b0110: dula<=num_6;
4'b0111: dula<=num_7;
4'b1000: dula<=num_8;
4'b1001: dula<=num_9;
endcase
end
Endmodule
测试文件:
module testclock;
// Inputs
reg clk;
reg rst;
// Outputs
wire [7:0] dula;
wire [3:0] wela;
// Instantiate the Unit Under Test (UUT)
clock uut (
.clk(clk),
.dula(dula),
.wela(wela),
.rst(rst));
initial begin
// Initialize Inputs
clk = 0;
rst = 1;
// Wait 100 ns for global reset to finish
#100;
rst = 1'b0;
// Add stimulus here
end
always #5 clk = ~clk;
endmodule
仿真时序图:
实验结果:
在实验板上显示如下:
59分08秒:
0分1秒:
18分04秒:
通过本次设计,学习了FPGA的知识,对FPGA的应用有了一定的认识,本次设计的主要工作和成果如下
1、在学习了verilong语言的基础上,能地运用verilong语言进行电路设计。
2、运用自顶向下的设计思想,对计时器各个功能模块进行分解设计。
3、进行仿真验证了整个模块功能的正确性。
4、将各个模块连接,组成一个系统,并在不断调试中发现问题,并及时解决。
5、在实验板上形成计时器的完整作品。
个人心得:
1:
在此次实验的过程中我也有过挫折有不太清楚明了的地方,但是我并没有气馁,遇到困难我总是先自己寻找失败的原因,仔细的检查分析,请教同学、请教老师。在这一过程中我对FPGA的掌握有了更进一步的见解, 我和我的组员分工合作,各自完成自己的模块,大家相互学习,相互提高。我相信自己定能在以后的实验课中能学到更多方面的知识,成为一个全面发展的学践型学生。
2:
通过参加这次实验,我学到了很多东西,首先我通过听老师讲述、查阅书本、网络等多种渠道学习了FPGA的知识。在学习的过程中,我既体会到了学习的乐趣,又提高了合作能力,还懂得了对于我们在做事过程中发现的问题要冷静的思考,不要盲目的进行。在这次设计过程中所得到的体会,在过去是没有过的,在书本中是也是无法找到的。我以后将更努力的学习这方面的知识。
3:
在学习FPGA的整个过程中,我建立起对FPGA学习的兴趣,遇到困难时要勇于面对它,并想办法解决。要对数字系统设计有比较全面的把握,如寄存器、内存、计数器、DSP等,尽力拓宽自己的知识面,比如数字电路、高速时钟系统、电路工艺方面及系统设计等。 结合具体项目进行设计开发应用,这样才能有一个明确的进步方向。尝试着从硬件底层起进行一些开发和设计。多动手,增加实践经验。多借用成功者的经验,拓宽自己的视野,通过网络到各种EDA论坛进行技术设计交流,提高自己。
4:
通过最近的学习可编程逻辑器件,我了解了一些它的特点:FPGA提供了最高的逻辑密度、最丰富的特性和最高的性能。我了解到了它的基本使用方法,学会了练习导入或者编辑一些简单的程序,并能通过仿真软件进行仿真。同时我通过学习FPGA慢慢形成了硬件设计思想,虽然对于Verilog语言不是很懂,我相信我以后会慢慢熟悉的。对于我这个初学者,一定要多动手,多练习,多仿真。总之,FPGA给我带来的思想上的提升是难以言语的。我决心以后要好好学习。
浙江科技学院机械与汽车工程学院浙江科技学院实验报告控制系统实验可编程控制器题目半自动运输装置学院机械学院专业机械设计制造及其自动化…
可编程控制器应用技术实验报告学班学指成生姓名级号导教师绩20xx年11实验一S7200PLC编程软件使用实验1实验目的熟悉STEP…
《可编程控制器技术》课程设计题目:交通信号灯控制设计学院:信息工程与自动化系:通信工程专业:通信工程年级:061班姓名:**学号:…
可编程控制器开放性实验题目基于梯形图的程序设计与调试院系名称电气工程学院专业班级学生姓名学号一实验目的熟悉掌握基于梯形图的程序设计…
“五一”文体活动总结20xx年x月x日,阳光明媚,惠风和畅,镇平公司值“五一国际劳动节”来临之际,在公司领导的大力支持和关心下,通…
★★县环境保护局20xx年上半年工作总结和下半年工作计划今年以来,我局在县委、县政府正确领导下,在县人大、政协监督下,在区、市环保…
三结合教育工作总结为了进一步加强德育工作,提高德育实效,一年来我校着重在德育管理方面进行了一些探讨和实践,取得了一些成功的经验,德…
曹家乡贯彻万源市第5次党代会精神工作总结根据中共万源市委宣传部《关于做好万源市第五次党代会精神学习宣传贯彻活动的紧急通知》(万委宣…
林西街道南工房二社区20xx年“庆五一爱岗敬业鞠躬尽瘁先进典型事迹报告会”活动总结为迎接五一劳动节,同时为广泛宣传先进典型,推动全…