通信工程专业实训报告

发布时间:2017-06-06 17:34:15   来源:文档文库   
字号:

本科生实训报告

实训课程 通信工程专业实训

学院名称 信息科学与技术学院

专业名称 通信工程

学生姓名 王城、张清静、谭政

学生学号 2013130702020305

指导教师 高嵩老师、刘同老师等

实训地点 6C601

实训成绩

二〇一六年十二月 二〇一六年十二月



填写说明

1、 适用于本科生所有的实训报告(印制实训报告册除外);

2、 专业填写为专业全称,有专业方向的用小括号标明;

3、 格式要求:

1 A4纸双面打印(封面双面打印)或在A4大小纸上用蓝黑色水笔书写。

2 打印排版:正文用宋体小四号,1.5倍行距,页边距采取默认形式(上下2.54cm,左右2.54cm,页眉1.5cm,页脚1.75cm)。字符间距为默认值(缩放100%,间距:标准);页码用小五号字底端居中。

3 具体要求:

题目(二号黑体居中);

摘要(“摘要”二字用小二号黑体居中,隔行书写摘要的文字部分,小4号宋体

关键词(隔行顶格书写“关键词”三字,提炼3-5个关键词,用分号隔开,小4号黑体)

正文部分采用三级标题;

1 ××(小二号黑体居中,段前0.5)

1.1 ×××××小三号黑体×××××(段前、段后0.5行)

1.1.1小四号黑体(段前、段后0.5行)

参考文献(黑体小二号居中,段前0.5行),参考文献用五号宋体,参照《参考文献著录规则(GB/T 77142005)》。



按键控制LED灯的流动方向

摘要

FPGAFieldProgrammable Gate ),即现场可编程门阵列,它是在PALGALCPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。以硬件描述语言(VerilogVHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录 FPGA 上进行测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如ANDORXORNOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器Flipflop)或者其他更加完整的记忆块。

关键词:FPGALED灯;流动方向控制

1

1.1工具、芯片

试验芯片:

仿真工具:ISE Design Suite 14.7 Modelsim SE 10.1c

1.2问题分析

点亮LED灯,控制LED灯的流动,是用按键控制LED灯流动的方向。经过问题分析使用不同模块实现不同的功能。分模块实现的有点:每个的模块的功能尽量的单一化,使模块的复用性提高,方便其他模块的复用。

1.3模块的分化

时钟分频模块:FPGA时钟分频即对FPGA的系统时钟根据自己所 需进行频率处理,使之达到原来的1/N倍频率,使流水灯的流动速度达到肉眼可见。

按键消抖模块:在机械按键的按下和松开时,都会产生抖动,为了保证系统能正确识别按键的按下和松开,就必须对按键的抖动进行处理。

LED 灯流水作业模块:具体控制 LED 灯的流动方向。

顶层模块:包含 时钟分频模块、按键消抖模块、LED灯流水作业模块、引脚绑定。

2

2.1时钟分频模块代码编写

module freq(

input clk,

input rest_n,

output reg clk_slow

);

reg [31:0]counter;

always@ (posedge clk or negedge rest_n)

begin

if (!rest_n)

begin

counter <= 0;

clk_slow <= 0;

end

else

begin

if(counter < 5000000) // 0.1s翻转一次,周期0.2m 50M * 8 / 1000 = 5M

counter <= counter + 1;

else

begin

counter<=0;

clk_slow <= ~clk_slow;

end

end

end

2.2按键消抖模块

module KEY_button(

input clk,

input rest_n,

input key_in,

output reg key_out

);

reg [1:0]state;

reg [31:0]cnt;

reg [31:0]temp;

always@(posedge clk or negedge rest_n)

begin

if(!rest_n)

cnt<=0;

else

cnt<=cnt+1;

end

always@(posedge clk or negedge rest_n )

begin

if(!rest_n)begin

key_out<=1;

state<=0;

temp<=0;

end

else begin

case(state)

0:begin

if(key_in==0) begin//刚刚按下

temp<=cnt;//按下时记录cnt

state<=1;

end

end

1:begin

if(cnt-temp>400000)//按下有效,当cnt和当时按下的temp的差为 400000=50Mhz* 1/8 8ms

begin

if(key_in==0)begin

key_out<=0;

state<=2;

end

else begin

state<=0;

end

end

end

2:begin

if(key_in==1) begin//刚刚抬起

state<=3;

temp<=cnt;

end

end

3:begin

if(cnt-temp>400000) begin//抬起有效

if(key_in==1) begin

key_out<=1;

state<=0;

end

else begin

state<=2;

end

end

end

endcase

end

end

endmodule

2.3LED灯流水作业模块

module led(

input clk_slow,

input rest_n,

input key_direct,

output reg [3:0] gpio_led

);

reg flag;

always@(posedge key_direct or negedge rest_n)

begin

if (!rest_n)

flag<=0;

else

flag<=~flag;

end

reg [1:0]state;

always@ (posedge clk_slow or negedge rest_n)

begin

if (!rest_n)

begin

gpio_led <= 4'b0000;

state <= 0;

end

else if(!flag) begin

case(state)

0:begin

gpio_led <= 4'b1000;

state <= 1;

end

1:begin

gpio_led <= 4'b0100;

state <= 2;

end

2:begin

gpio_led <= 4'b0010;

state <= 3;

end

3:begin

gpio_led <= 4'b0001;

state <= 0;

end

default: begin

state <= 0;

end

endcase

end

else begin

case(state)

0:begin

gpio_led <= 4'b1000;

state <= 3;

end

1:begin

gpio_led <= 4'b0100;

state <= 0;

end

2:begin

gpio_led <= 4'b0010;

state <= 1;

end

3:begin

gpio_led <= 4'b0001;

state <= 2;

end

default: begin

state <= 0;

end

endcase

end

end

endmodule

2.4顶层模块

module TOP_LED(

input clk,

input key_direct,

input rest_n,

output wire [3:0]gpio_led

);

wire key_out;

//---------------------

//时钟分频器:产生一秒的时钟

//---------------------

freq freq_inst (

.clk(clk),

.rest_n(rest_n),

.clk_slow(clk_slow)

);

//---------------------------------------------------------------------------------------

//按键消抖:控制流水灯方向的 按键进行消抖处理

//在机械按键的按下和松开时,都会产生抖动,为了保证系统能正确识别按键的按下和松开,就必须对按键的抖动进行处理。

//---------------------------------------------------------------------------------------

KEY_button key_button (

.clk(clk),

.rest_n(rest_n),

.key_in(key_direct),

.key_out(key_out)

);

//-------------------------

//流水灯模块

//-------------------------

led led_inst (

.clk_slow(clk_slow),

.rest_n(rest_n),

.key_direct(key_out),

.gpio_led(gpio_led)

);

Endmodule

2.4引脚绑定模块

NET "clk" LOC = P24;

NET "rest_n" LOC = P94;

NET "key_direct" LOC = P97;

NET "gpio_led[0]" LOC = P92;

NET "gpio_led[1]" LOC = P87;

NET "gpio_led[2]" LOC = P55;

NET "gpio_led[3]" LOC = P59;

2.5 RTL schematic 视图



3

3.1试验心得

学生实训 心得

在学习FPGA时,遇到的问题有许多,譬如,写代码时的警告,特别是一些不能忽视的警告,每次遇到时,总是还要检查一会儿才能改过来,或者有的警告已经出现了几次,但是就是解决不掉。每次在学一个模块时,只要是看懂了,它的一些重点就没有及时的记录在本子上,只有个别的想起来时,才会做笔记。每做完一个模块,没有及时记录下自己从这个模块中学到了什么。上面的不足,都是在写模块的过程中,自己逐渐暴露出来的。我很庆幸自己的一些问题能及时的被发现,避免类似的事情再次发生。像遇到警告时,都要记录下来,通过改正后,要注释,写下警告的原因,定期看一下。每次写模块的时候,都要记下重点知识,即使是自己懂得的,好记性都是比不过烂笔头的。关于以上的总结,我相信在以后的学习中一定会对自己有莫大的帮助,它会时刻警醒自己,在以前的学习中,自己有哪些不足,以后千万不能再去犯同样的错误,不断地纠正,不断地进步,相信自己一定会学好FPGA的。

生(签 名):

指导

教师

评语

定:

师(签 名):

本文来源:https://www.2haoxitong.net/k/doc/8c63be611611cc7931b765ce05087632311274dc.html

《通信工程专业实训报告.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式