版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 对结果和结论的问题讨论实验结果基本上符合设计要求和初衷,主体功能可以很好的实现,但是在一些细节上没有做到很好的规划,比如在后仿真时出现了部分高阻状态,后检查发现是由于在ram模块中的复位有问题。5.课程设计的心得体会经过两周的fpga课程设计,使我对这门课程有了一个更加深刻地认识和感受,更加深入的了解了自己在课程学习上的不足以及理论学习和实践相互结合的重要性。在电路的设计初始时刻,我没有按照设计电路时从上到下的设计方法,而是盲目的对电路的模块进行设计。结果在最后的设计综合的时候,设计的各个模块不能进行顺利的综合和仿真。尤其是在数码管和ram模块中出现了较大的问题,单个模块测试时,都是正确的,但是综合在一起时,就出现了问题。后来在老师和同学的帮助下,我发现原来是时钟不匹配的问题。经
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年跨境电商综合服务合作协议
- 2024年版涂料厂员工合同
- 2024版凯悦技术服务合同
- 2024版医院合作协议书
- 四年级数学(四则混合运算)计算题专项练习与答案
- 2024年版商品交易促成居间协议典范版B版
- 2024年石矿开采与销售合同范本
- 2025年度离婚财产评估与分割协议合同3篇
- 全生命周期智能家居控制系统协议
- 2024年版权交易合同履行服务协议
- 小班数学《香香的饼干》
- 医院工会经费使用与管理办法、制度规则
- 2022年外交学院辅导员招聘笔试题库及答案解析
- 磁致伸缩液位传感器KYDM-路线设置使用
- 收割机转让协议
- 中学历史教育中的德育状况调查问卷
- 煤矿煤业掘进工作面班组安全确认工作记录表 模板
- 第8期监理月报(江苏版)
- 建筑工程质量管理体系文件
- 乙丙橡胶电力电缆绝缘一步法硅烷交联工艺
- 中止施工安全监督申请书(范例)
评论
0/150
提交评论