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

上传人:沈*** 文档编号:41307745 上传时间:2021-11-19 格式:DOC 页数:20 大小:532.50KB
收藏 版权申诉 举报 下载
FPGA课程设计基于RAM的十口8位计数器_第1页
第1页 / 共20页
FPGA课程设计基于RAM的十口8位计数器_第2页
第2页 / 共20页
FPGA课程设计基于RAM的十口8位计数器_第3页
第3页 / 共20页
资源描述:

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

1、西安邮电学院FPGA课程设计报告题 目: 基于RAM的十口8位计数器 院 系: 通信与信息工程学院 专业班级: 电科0902班 学生姓名: 赵荷 导师姓名: 刘正涛 起止时间: 2012-9-10 至 2012-9-21 年 月 日FPGA课程设计报告提纲1 任务 用一个108的双口RAM完成10个8位计数器,计数器的初值分别为110,时钟频率为1MHz,计数器计数频率为1Hz。 用FPGA开发板上的按键作为计数器计数值的输出选择控制,数码管 (或led)作为选择计数器的计数值输出。2 目的采用RAM实现计数器及FPGA功能验证3 使用环境 (软件/硬件环境,设备等)前仿 modelsim 6

2、.1f后仿 Quartus II10.14 FPGA课程设计详细内容4.1 技术规范功能:1 先由复位键从选定的RAM地址中读出预置的8位初值存入计数模块。 2. 由开始键开始计数,暂停键暂停计数并同时存入RAM中以选定的存储单元。 3. 双端口RAM为108RAM由一个地址切换键按顺序切换110个地址端口。 4.系统工作流程: 切换端口读出数据开始计数 暂停计数 存入数据 计数流程 5切换端口读出数 七段显示译码器译码 输出到数码管显示 读取结果输出流程6 分频:1Hz的秒计时频率,用来进行秒计时;4.2 设计方案信号定义:分频模块Clk_50MHzclk_1Hz reset clk_1MH

3、z分频:1Hz的秒计时频率,用来进行秒计时分频:时钟信号clk_50MHz; 分频信号 clk_1Hz; 分频信号 clk_1MHz; 计数模块由RAM读出初值dout clkclk_1hz dout 7:0din7:0 start startreset切换端口 读出数据 开始计数 暂停计数 存入数据计数:开始计数 start计数器复位 reset; 计数输出 din7:0; 计数置数 add;七段显示译码器数码管dout显示模块 wr7:0dinclk_50MHz108RAM计数器dout7:03:0wr_addressrd3:0rd_adddressreseteetetstartaddRA

4、M:108的RAM存储阵列10个字每个子8位输入端 输入地址 wr_address 3:0; 输入数据 din7:0; 上升沿有效写入信号 wr; 输出端 输出地址rd_address3:0; 输出数据 dout7:0; 上升沿有效读信号 rd;端口I/O功能rd I读使能,高电平有效;系统使能工作,将din数据写入ram的存储单元中wr O写使能,高电平有效;将ram存储单元中的数据读出dout.Wr_address3:0I写地址din7:0 I数据输入口,内部接口dout7:0 O数据输出,内部数据传送reset I复位端,时钟下降沿有效add I计数器置数端startI开始/暂停键,高电

5、平开始,低电平暂停Rd_address3:0I读地址rd_clkI读时钟,下降沿触发wr_clkI写时钟,上升沿触发地址划分:ain3:0Ram存储单元00010000_000100100000_001000110000_001101000000_010001010000_010101100000_011001110000_011110000000_100010010000_100110100000_1010En数码管(或led)显示模块startRAM输入/输出 110clk_1hzclk计数模块置数控制分频模块控制模块:开始、暂停、返回初值,计数器显示切换4.3 功能验证方案(1)验证对象

6、及目的 本验证方案将描述对双端口RAM计数器的验证。在本文中验证指使用软件工具对其功能进行验证。 双端口RAM计数器功能和指标的详细描述请参见双端口RAM计数器技术规范.doc在本文所描述的验证过程中侧重对RAM数据的读取进行验证,指标主要在硬件验证和测试过程中完成。在本验证过程中将验证以下内容:(2)验证环境及工具 根据情况验证过程将使用以下的环境和工具进行:a)windows环境下使用ModelSim仿真工具;b)windows环境下使用QuartusII工具。 为进行验证还应当建立仿真激励模块(3)预确认a.系统主要技术参数; 经分析,系统的的主要参数包括:引脚数目,引脚工作电压,电源电

7、压,系统的工作频率。 b.系统的模块数目及各模块实现的功能及如何知道模块工作正常;c.总模块验证,看总系统是否正常工作。( 4)仿真确认:a.目的 初步确认系统是否完成预期设计的功能;先分析芯片所有模块连接关系,如下图 时钟分频模块计数模块,实现计数,暂停,和与RAM之间的数据存取clk(50M)en clk_1Hz显示模块led显示clk (50M)地址控制108RAMenb.逐个完成各个模块的验证 分频模块:由于系统提供的频率为50MHz而计数时需要的是每秒那样计数,故需要将50MHz分频为1Hz.可为该程序编写激励,得到输出,用输出的频率与想要得到的1Hz的信号进行比较,即可验证。 计数

8、模块:编写完成后可通过查看仿真图形确认计数范围,位宽等功能的正确。 RAM存取模块:需在仿真中编写测试激励对RAM进行存取验证,在仿真图形中确认RAM的存取功能的正确性。显示模块:把计数的结果通过七段显示译码器显示在数码管上,观察数码管上的数字变化规律即可验证显示模块是否正确。c.验证空标志产生逻辑:先将复位信号置0(有效),在一定时间内看系统是否产生空标志;d.验证正常情况下的信号:系统运行时,让复位信号为1(即复位无效),根据输入信号得出输出信号,与想要得到的信号进行比较。4.4 电路设计源代码,功能仿真激励源代码及功能仿真结果报告分频器模块:module FPQ (clk_50MHz,c

9、lk_1MHz,reset,clk_1Hz); input clk_50MHz,reset; output clk_1MHz,clk_1Hz; reg clk_1Hz=0; reg clk_1MHz=0; reg 31:0 cnt1=32d0; reg 31:0 cnt2=32d0; always(posedge clk_50MHz or negedge reset) begin if(!reset) clk_1Hz=32d0; else begin if(cnt1=32d100) begin cnt1=32d0;clk_1Hz=clk_1Hz; end else cnt1=cnt1+32d1

10、; end end always(posedge clk_50MHz or negedge reset) begin if(!reset) clk_1MHz=32d0; else begin if(cnt2=32d255) begin cnt2=32d0; clk_1MHz=clk_1MHz; end else cnt2=cnt2+32d1; end end endmodule分频器模块激励:module FPQ_test; reg clk_50MHz,reset; wire clk_1MHz;wire clk_1Hz; always # 2 clk_50MHz=clk_50MHz; FPQ

11、fpq(.reset(reset),.clk_50MHz(clk_50MHz),.clk_1MHz(clk_1MHz),.clk_1Hz(clk_1Hz); initial begin reset=0; clk_50MHz=0; #100 reset=1; endendmodule计数器模块:module JSQ(start,data,clk_1Hz,add,c_out); input clk_1Hz,add;input start;input 7:0data; output c_out; reg 7:0 c_out; always(posedge clk_1Hz or negedge add

12、 ) begin if(!add) begin c_out=data; end else begin if(start) begin c_out=c_out+8d1; if(c_out=8d255) begin c_out=0; end else c_out=c_out+8d1; end else c_out=c_out; end end endmodule计数器激励:module JSQ_test; reg start,add; reg clk_1Hz; reg 7:0data; wire 7:0 c_out; always #1 clk_1Hz=clk_1Hz; JSQ jsq(.star

13、t(start),.add(add),.clk_1Hz(clk_1Hz),.data(data),.c_out(c_out); initial begin clk_1Hz=0; add=0; start=0; data=8d1; #15 add=1; #15 start=1; #600 start=0; end endmodule 数码管显示模块:module SMG (clk_1MHz,data,data_g,data_s,data_b); input7:0 data; input clk_1MHz; output data_b; output data_s;output data_g; r

14、eg6:0data_b; reg6:0data_s;reg6:0data_g; reg 7:0mid_b; reg 7:0mid_s; reg 7:0mid_g; always(posedge clk_1MHz) begin mid_b=data/100; mid_s=data%100/10; mid_g=data%10; end always(mid_b) begin case(mid_b) 7d0:data_b=7hC0; 7d1:data_b=7hF9; 7d2:data_b=7hA4; 7d3:data_b=7hB0; 7d4:data_b=7h99; 7d5:data_b=7h92;

15、 7d6:data_b=7h82; 7d7:data_b=7hf8; 7d8:data_b=7h80; 7d9:data_b=7h90; default:data_b=7hC0; endcase end always(mid_s) begin case(mid_s) 7d0:data_s=7hC0; 7d1:data_s=7hF9; 7d2:data_s=7hA4; 7d3:data_s=7hB0; 7d4:data_s=7h99; 7d5:data_s=7h92; 7d6:data_s=7h82; 7d7:data_s=7hf8; 7d8:data_s=7h80; 7d9:data_s=7h

16、90; default:data_s=7hC0; endcase end always(mid_g) begin case(mid_g) 7d0:data_g=7hC0; 7d1:data_g=7hF9; 7d2:data_g=7hA4; 7d3:data_g=7hB0; 7d4:data_g=7h99; 7d5:data_g=7h92; 7d6:data_g=7h82; 7d7:data_g=7hf8; 7d8:data_g=7h80; 7d9:data_g=7h90; default:data_g=7hC0; endcase end endmodule数码管显示模块激励:module SM

17、G_test; reg7:0 data; reg clk_1MHz; wire 6:0data_g; wire 6:0data_s; wire 6:0data_b;SMG smg(.data(data),.clk_1MHz(clk_1MHz),.data_g(data_g),.data_s(data_s),.data_b(data_b);always # 10 clk_1MHz=clk_1MHz;initial begin data=0;clk_1MHz=0; #25 data=35; #25 data=15; #25 data=93 end endmoduleRAM模块:module RAM

18、(reset,wr,wr_clk,wr_address,din,rd,rd_clk,rd_address,dout); input wr,wr_clk,reset; input 3:0wr_address; input 7:0din; input rd,rd_clk; input 3:0rd_address; output 7:0dout; reg 7:0dout=0; reg7:0 mem 1:10; always(posedge wr_clk or negedge reset)begin if(!reset) begin mem1=8d1; mem2=8d2; mem3=8d3; mem4

19、=8d4; mem5=8d5; mem6=8d6; mem7=8d7; mem8=8d8; mem9=8d9; mem10=8d10; end else begin if(wr) begin if(wr_address=4d10) memwr_address=din; end endend always( posedge rd_clk or negedge reset)begin if(!reset) dout=8d0; else begin if(rd) begin dout=memrd_address; end end end endmoduleRAM模块激励:module RAM_tes

20、t; reg reset,wr,rd; reg wr_clk,rd_clk; reg 3:0wr_address,rd_address; reg 7:0 din; wire 7:0 mem 1:10; wire 7:0 dout;RAM ram(.reset(reset),.wrn(wr),.wr_clk(wr_clk),.wr_address(wr_address),.rd(rd),.rd_clk(rd_clk),.rd_address(rd_address),.din(din),.dout(dout); always #1 wr_clk=wr_clk; always #1 rd_clk=r

21、d_clk; initial begin wr_clk=0; rd_clk=0; reset=0; wr=0; rd=0; wr_address=4d0; rd_address=4d0; din=8d0; #15 reset=1 #15 rd=1; #25 rd_address=4d4;wr=1; #35 din=8d5;wr_address=4d1;rd_address=4d1; #15 din=8d8;wr_address=4d6;rd_address=4d6; #15 reset=0;rd_address=4d4; end endmodule顶层模块:module RAM_count (

22、reset,add,start,clk_50MHz,wr,wr_address,din,rd,rd_address,data_g,data_s,data_b); input reset,add,start,wr,rd,clk_50MHz; input 3:0wr_address,rd_address; input7:0 din; output 6:0data_g,data_s,data_b; wire 6:0 data_g,data_s,data_b; wire 7:0 dout; wire 7:0 mid_data; wire mid_clk_1Hz; wire mid_clk_1MHz;

23、FPQ fpq(.reset(reset),.clk_50MHz(clk_50MHz),.clk_1MHz(mid_clk_1MHz),.clk_1Hz(mid_clk_1Hz); RAM ram(.reset(reset),.wr(wr),.wr_clk(mid_clk_1MHz),.wr_address(wr_address),.din(din),.rd(rd),.rd_clk(mid_clk_1MHz),.rd_address(rd_address),.dout(mid_data); JSQ jsq(.add(add),.data(mid_data),.clk_1Hz(mid_clk_1

24、Hz),.start(start),.c_out(dout); SMG smg(.clk_1MHz(mid_clk_1Hz),.data(dout),.data_g(data_g),.data_s(data_s),.data_b(data_b);Endmodule顶层模块激励:module RAM_count_test; reg reset,add,start,wr,rd; reg clk_50MHz; reg 3:0wr_address,rd_address; reg 7:0 din; wire 6:0 data_g,data_s,data_b; RAM_count ram( .reset(

25、reset),.add(add),.start(start),.wr(wr),.rd(rd),.clk_50MHz(clk_50MHz), .wr_address(wr_address), .rd_address(rd_address),.din(din),.data_g(data_g),.data_s(data_s),.data_b(data_b); always #1 clk_50MHz=clk_50MHz; initial begin reset=1;start=1;din=1;wr=0;rd=1; wr_address=4d1;rd_address=4d1;clk_50MHz=0; a

26、dd=1; # 125 reset=0; # 250 reset=1; #250 add=0; # 250 add=1; # 250 wr=0;rd=1; # 10000 start=0; # 250 wr=1;rd=0; end endmodule4.5 综合及布局布线报告和引脚分布报告综合图:管脚分配图:时钟分配图:4.6 后仿真结果报告4.7 硬件测试结果报告测试结果符合设计初衷,实现了将一个108的RAM变成十个8位的加法器,设置初始值为110,可以写入和读出数据进行加法操作。4.8 对结果和结论的问题讨论实验结果基本上符合设计要求和初衷,主体功能可以很好的实现,但是在一些细节上没有做

27、到很好的规划,比如在后仿真时出现了部分高阻状态,后检查发现是由于在RAM模块中的复位有问题。5.课程设计的心得体会经过两周的FPGA课程设计,使我对这门课程有了一个更加深刻地认识和感受,更加深入的了解了自己在课程学习上的不足以及理论学习和实践相互结合的重要性。在电路的设计初始时刻,我没有按照设计电路时从上到下的设计方法,而是盲目的对电路的模块进行设计。结果在最后的设计综合的时候,设计的各个模块不能进行顺利的综合和仿真。尤其是在数码管和RAM模块中出现了较大的问题,单个模块测试时,都是正确的,但是综合在一起时,就出现了问题。后来在老师和同学的帮助下,我发现原来是时钟不匹配的问题。经过一系列的修改

28、,终于得到了正确的结果,在以后的电路设计和描述中,我会深刻吸取这次的教训。在后仿真时,进行的非常顺利。后来我总结出了良好的编码习惯对于最后电路的综合和差错都是有很大的影响,便于自己及时处理问题,做出改进方案,这对于处理逻辑错误非常有用,同时这也提醒我们详细的规范和电路之间逻辑关系的合理安排的重要性。除此之外,不同模块之间的时序电路的合理协调,对于电路初始状态的设定都是至关重要的。总的来说,这两周的课程设计让我受益匪浅,在以后的学习中我会吸取这次的经验,帮助自己在以后的学习和生活中取得更大的进步。6.参考资料等基于Verilog的FPGA设计基础杜慧敏、李宥谋、赵全良著 西安电子科技大出版社学V

29、erilog HDL数字设计与综合(第二版) 美 Samir Palnitkar 著 夏宇闻、胡燕祥 刁岚松 等译西安邮电学院-系-成绩鉴定表学生姓名赵荷班级/学号电科0902/04092034进行时间2012年 9 月 10 日 2012 年 9 月21 日成绩鉴定学习内容(20分)与教学任务计划结合程度(10分)与专业培养结合程度(6分)其它(4分)接受单位评价(20分)实践能力(10分)学习态度(6分)学习纪律(4分)报告鉴定(60分) 报告内容与实践过程紧密结合(15分)报告内容与教学计划内容紧密结合(15分)报告质量(主题、结构、观点、逻辑、资料、字数 30分)评阅教师姓名刘正涛职称成绩评语 评阅教师签字 年 月 日 西安邮电学院 系 过程考核表学生姓名赵荷班级/学号电科0902/04092034承担任务实验室(单位)2#实验楼336所在部门实施时间2012年 9月10 日 2012 年9 月21日具体内容第一周进行设计规范和具体设计方案的构思,并以报告的形式写出来。第二周进行相关模块程序的编写,仿真,综合,以及后仿真。指导教师(师傅)姓名刘正涛职务或职称指导教师(师傅)对学生的评价学习态度 认真 一般 不认真学习纪律 全勤 偶尔缺勤 经常缺勤实践能力 很强 一般 较差指导教师(师傅)对学生专业知识或社会实践能力等情况的意见指导教师(师傅)签字 年 月 日

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!