FPGA课程设计基于RAM的十口8位计数器.docx

上传人:b****6 文档编号:3064519 上传时间:2022-11-17 格式:DOCX 页数:22 大小:318.26KB
下载 相关 举报
FPGA课程设计基于RAM的十口8位计数器.docx_第1页
第1页 / 共22页
FPGA课程设计基于RAM的十口8位计数器.docx_第2页
第2页 / 共22页
FPGA课程设计基于RAM的十口8位计数器.docx_第3页
第3页 / 共22页
FPGA课程设计基于RAM的十口8位计数器.docx_第4页
第4页 / 共22页
FPGA课程设计基于RAM的十口8位计数器.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

FPGA课程设计基于RAM的十口8位计数器.docx

《FPGA课程设计基于RAM的十口8位计数器.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计基于RAM的十口8位计数器.docx(22页珍藏版)》请在冰豆网上搜索。

FPGA课程设计基于RAM的十口8位计数器.docx

FPGA课程设计基于RAM的十口8位计数器

西安邮电学院

FPGA课程设计报告

 

题目:

基于RAM的十口8位计数器

院系:

通信与信息工程学院

专业班级:

电科0902班

学生姓名:

赵荷

导师姓名:

刘正涛

起止时间:

2012-9-10至2012-9-21

 

年月日

 

FPGA课程设计报告提纲

1.任务

用一个10×8的双口RAM完成10个8位计数器,计数器的初值分别为1~10,时钟频率为1MHz,计数器计数频率为1Hz。

用FPGA开发板上的按键作为计数器计数值的输出选择控制,数码管(或led)作为选择计数器的计数值输出。

2.目的

采用RAM实现计数器及FPGA功能验证

3.使用环境(软件/硬件环境,设备等)

前仿modelsim6.1f

后仿 QuartusII 10.1

4.FPGA课程设计详细内容

4.1技术规范

功能:

1.先由复位键从选定的RAM地址中读出预置的8位初值存入计数模块。

2.由开始键开始计数,暂停键暂停计数并同时存入RAM中以选定的存储单元。

3.双端口RAM为10×8RAM由一个地址切换键按顺序切换1~10个地址端口。

4.系统工作流程:

切换端口读出数据开始计数暂停计数存入数据

计数流程

5.切换端口读出数七段显示译码器译码输出到数码管显示

读取结果输出流程

6.分频:

1Hz的秒计时频率,用来进行秒计时;

 

4.2设计方案

信号定义:

Clk_50MHz

clk_1Hz

resetclk_1MHz

 

分频:

1Hz的秒计时频率,用来进行秒计时

分频:

时钟信号clk_50MHz;

分频信号clk_1Hz;

分频信号clk_1MHz;

clk

clk_1hz

dout[7:

0]din[7:

0]

start

startreset

切换端口读出数据开始计数暂停计数存入数据

计数:

开始计数start

计数器复位reset;

计数输出din[7:

0];

计数置数add;

 

dout

 

显示模块

 

RAM:

10×8的RAM存储阵列10个字每个子8位

输入端输入地址wr_address[3:

0];

输入数据din[7:

0];

上升沿有效写入信号wr;

 

输出端输出地址rd_address[3:

0];

输出数据dout[7:

0];

上升沿有效读信号rd;

端口

I/O

功能

rd

I

读使能,高电平有效;系统使能工作,将din数据写入ram的存储单元中

wr

O

写使能,高电平有效;将ram存储单元中的数据读出dout.

Wr_address[3:

0]

I

写地址

din[7:

0]

I

数据输入口,内部接口

dout[7:

0]

O

数据输出,内部数据传送

reset

I

复位端,时钟下降沿有效

add

I

计数器置数端

start

I

开始/暂停键,高电平开始,低电平暂停

Rd_address[3:

0]

I

读地址

rd_clk

I

读时钟,下降沿触发

wr_clk

I

写时钟,上升沿触发

地址划分:

ain[3:

0]

Ram存储单元

0001

0000_0001

0010

0000_0010

0011

0000_0011

0100

0000_0100

0101

0000_0101

0110

0000_0110

0111

0000_0111

1000

0000_1000

1001

0000_1001

1010

0000_1010

 

4.3功能验证方案

(1)验证对象及目的

本验证方案将描述对双端口RAM计数器的验证。

在本文中验证指使用软件工具对其功能进行验证。

双端口RAM计数器功能和指标的详细描述请参见《双端口RAM计数器技术规范.doc》

在本文所描述的验证过程中侧重对RAM数据的读取进行验证,指标主要在硬件验证和测试过程中完成。

在本验证过程中将验证以下内容:

(2)验证环境及工具

根据情况验证过程将使用以下的环境和工具进行:

a)windows环境下使用ModelSim仿真工具;

b)windows环境下使用QuartusII工具。

为进行验证还应当建立仿真激励模块

(3)预确认

a.系统主要技术参数;

经分析,系统的的主要参数包括:

引脚数目,引脚工作电压,电源电压,系统的工作频率。

b.系统的模块数目及各模块实现的功能及如何知道模块工作正常;

c.总模块验证,看总系统是否正常工作。

(4)仿真确认:

a.目的

初步确认系统是否完成预期设计的功能;

先分析芯片所有模块连接关系,如下图

b.逐个完成各个模块的验证

分频模块:

由于系统提供的频率为50MHz而计数时需要的是每秒那样计数,故需要将50MHz分频为1Hz.可为该程序编写激励,得到输出,用输出的频率与想要得到的1Hz的信号进行比较,即可验证。

计数模块:

编写完成后可通过查看仿真图形确认计数范围,位宽等功能的正确。

RAM存取模块:

需在仿真中编写测试激励对RAM进行存取验证,在仿真图形中确认RAM的存取功能的正确性。

显示模块:

把计数的结果通过七段显示译码器显示在数码管上,观察数码管上的数字变化规律即可验证显示模块是否正确。

c.验证空标志产生逻辑:

先将复位信号置0(有效),在一定时间内看系统是否产生空标志;

d.验证正常情况下的信号:

系统运行时,让复位信号为1(即复位无效),根据输入信号得出输出信号,与想要得到的信号进行比较。

4.4电路设计源代码,功能仿真激励源代码及功能仿真结果报告

分频器模块:

moduleFPQ(clk_50MHz,clk_1MHz,reset,clk_1Hz);

inputclk_50MHz,reset;

outputclk_1MHz,clk_1Hz;

regclk_1Hz=0;

regclk_1MH

z=0;

reg[31:

0]cnt1=32'd0;

reg[31:

0]cnt2=32'd0;

always@(posedgeclk_50MHzornegedgereset)

begin

if(!

reset)

clk_1Hz<=32'd0;

else

begin

if(cnt1==32'd100)

begin

cnt1<=32'd0;clk_1Hz<=~clk_1Hz;

end

else

cnt1<=cnt1+32'd1;

end

end

always@(posedgeclk_50MHzornegedgereset)

begin

if(!

reset)

clk_1MHz<=32'd0;

else

begin

if(cnt2==32'd255)

begin

cnt2<=32'd0;

clk_1MHz<=~clk_1MHz;

end

else

cnt2<=cnt2+32'd1;

end

end

endmodule

分频器模块激励:

moduleFPQ_test;

regclk_50MHz,reset;

wireclk_1MHz;wireclk_1Hz;

always#2clk_50MHz=~clk_50MHz;

FPQfpq(.reset(reset),.clk_50MHz(clk_50MHz),.clk_1MHz(clk_1MHz),.clk_1Hz(clk_1Hz));

initial

begin

reset<=0;

clk_50MHz<=0;

#100reset<=1;

end

endmodule

计数器模块:

moduleJSQ(start,data,clk_1Hz,add,c_out);

inputclk_1Hz,add;

inputstart;

input[7:

0]data;

outputc_out;

reg[7:

0]c_out;

always@(posedgeclk_1Hzornegedgeadd)

begin

if(!

add)

begin

c_out<=data;

end

else

begin

if(start)

begin

c_out<=c_out+8'd1;

if(c_out==8'd255)

begin

c_out<=0;

end

else

c_out<=c_out+8'd1;

end

else

c_out<=c_out;

end

end

endmodule

计数器激励:

moduleJSQ_test;

regstart,add;

regclk_1Hz;

reg[7:

0]data;

wire[7:

0]c_out;

always#1clk_1Hz=~clk_1Hz;

JSQjsq(.start(start),.add(add),.clk_1Hz(clk_1Hz),.data(data),.c_out(c_out));

initial

begin

clk_1Hz=0;

add=0;

start=0;

data=8'd1;

#15add=1;

#15start=1;

#600start=0;

end

endmodule

数码管显示模块:

moduleSMG(clk_1MHz,data,data_g,data_s,data_b);

input[7:

0]data;

inputclk_1MHz;

outputdata_b;

outputdata_s;

outputdata_g;

reg[6:

0]data_b;

reg[6:

0]data_s;

reg[6:

0]data_g;

reg[7:

0]mid_b;

reg[7:

0]mid_s;

reg[7:

0]mid_g;

always@(posedgeclk_1MHz)

begin

mid_b<=data/100;

mid_s<=data%100/10;

mid_g<=data%10;

end

always@(mid_b)

begin

case(mid_b)

7'd0:

data_b<=7'hC0;

7'd1:

data_b<=7'hF9;

7'd2:

data_b<=7'hA4;

7'd3:

data_b<=7'hB0;

7'd4:

data_b<=7'h99;

7'd5:

data_b<=7'h92;

7'd6:

data_b<=7'h82;

7'd7:

data_b<=7'hf8;

7'd8:

data_b<=7'h80;

7'd9:

data_b<=7'h90;

default:

data_b<=7'hC0;

endcase

end

always@(mid_s)

begin

case(mid_s)

7'd0:

data_s<=7'hC0;

7'd1:

data_s<=7'hF9;

7'd2:

dat

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1