欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:44622935       资源大小:16.81KB        全文页数:16页
    • 资源格式: DOCX        下载积分:9.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要9.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    FPGA课程设计基于RAM十口8位计数器 FPGA课程设计报告 题 目: 基于RAM的十口8位计数器 院 系: 通信与信息工程学院 专业班级: 电科班 学生姓名: 导师姓名: 起止时间: 2012-9-10 至 2012-9-21 年 月 日 FPGA课程设计报告提纲 1 任务 用一个10×8的双口RAM完成10个8位计数器,计数器的初值分别为110,时钟频率为1MHz,计数器计数频率为1Hz。 用FPGA开发板上的按键作为计数器计数值的输出选择限制,数码管 (或led)作为选择计数器的计数值输出。 2 目的 采纳RAM实现计数器及FPGA功能验证 3 运用环境 (软件/硬件环境,设备等) 前仿 modelsim 6.1f 后仿  Quartus II 10.1 4 FPGA课程设计具体内容 4.1 技术规范 功能: 1 先由复位键从选定的RAM地址中读出预置的8位初值存入计数模块。 2. 由起先键起先计数,暂停键暂停计数并同时存入RAM中以选定的存储单元。 3. 双端口RAM为10×8RAM由一个地址切换键按依次切换110个地址端口。 4.系统工作流程: 切换端口 读出数据 起先计数 暂停计数 存入数据 计数流程 5切换端口 读出数 七段显示译码器译码 输出到数码管显示 读取结果输出流程 6 分频:1Hz的秒计时频率,用来进行秒计时; 4.2 设计方案 信号定义: 分频模块 Clk_50MHz clk_1Hz reset clk_1MHz 分频:1Hz的秒计时频率,用来进行秒计时 分频:时钟信号clk_50MHz; 分频信号 clk_1Hz; 分频信号 clk_1MHz; 计数模块 由RAM读出初值dout clk clk_1hz dout 7:0 din7:0 start start reset 切换端口 读出数据 起先计数 暂停计数 存入数据 计数:起先计数 start 计数器复位 reset; 计数输出 din7:0; 计数置数 add; 七段显示译码器 数码管 dout 显示模块 wr 7:0din clk_50MHz 10×8RAM计数器 dout7:0 3:0wr_address rd 3:0rd_adddress reseteetet start add RAM:10×8的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:0 I 写地址 din7:0 I 数据输入口,内部接口 dout7:0 O 数据输出,内部数据传送 reset I 复位端,时钟下降沿有效 add I 计数器置数端 start I 起先/暂停键,高电平起先,低电平暂停 Rd_address3:0 I 读地址 rd_clk I 读时钟,下降沿触发 wr_clk I 写时钟,上升沿触发 地址划分: ain3: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 En 数码管(或led)显示模块 start RAM输入/输出 110 clk_1hz clk 计数模块 置数 限制 分频模块 限制模块:起先、暂停、返回初值,计数器显示切换 4.3 功能验证方案 (1)验证对象及目的 本验证方案将描述对双端口RAM计数器的验证。在本文中验证指运用软件工具对其功能进行验证。 双端口RAM计数器功能和指标的具体描述请参见双端口RAM计数器技术规范.doc 在本文所描述的验证过程中侧重对RAM数据的读取进行验证,指标主要在硬件验证和测试过程中完成。 在本验证过程中将验证以下内容: (2)验证环境及工具 依据状况验证过程将运用以下的环境和工具进行: a)windows环境下运用ModelSim仿真工具; b)windows环境下运用QuartusII工具。 为进行验证还应当建立仿真激励模块 (3)预确认 a.系统主要技术参数; 经分析,系统的的主要参数包括:引脚数目,引脚工作电压,电源电压,系统的工作频率。 b.系统的模块数目及各模块实现的功能及如何知道模块工作正常; c.总模块验证,看总系统是否正常工作。 ( 4)仿真确认: a.目的 初步确认系统是否完成预期设计的功能; 先分析芯片全部模块连接关系,如下图 时钟分频模块 计数模块,实现计数,暂停,和与RAM之间的数据存取 clk(50M) en clk_1Hz 显示模块 led显示 clk (50M) 地址限制 10×8RAM en b.逐个完成各个模块的验证 分频模块:由于系统供应的频率为50MHz而计数时须要的是每秒那样计数,故须要将50MHz分频为1Hz.可为该程序编写激励,得到输出,用输出的频率与想要得到的1Hz的信号进行比较,即可验证。 计数模块:编写完成后可通过查看仿真图形确认计数范围,位宽等功能的正确。 RAM存取模块:需在仿真中编写测试激励对RAM进行存取验证,在仿真图形中确认RAM的存取功能的正确性。 显示模块:把计数的结果通过七段显示译码器显示在数码管上,视察数码管上的数字改变规律即可验证显示模块是否正确。 c.验证空标记产生逻辑: 先将复位信号置0(有效),在肯定时间内看系统是否产生空标记; d.验证正常状况下的信号: 系统运行时,让复位信号为1(即复位无效),依据输入信号得出输出信号,与想要得到的信号进行比较。 4.4 电路设计源代码,功能仿真激励源代码及功能仿真结果报告 分频器模块: module FPQ (clk_50MHz,clk_1MHz,reset,clk_1Hz); input clk_50MHz,reset; output clk_1MHz,clk_1Hz; reg clk_1Hz=0; reg clk_1MH z=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; 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 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; end endmodule 计数器模块: 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 ) 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(.start(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; reg6: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; 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<=7h90; 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 SMG_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 endmodule RAM模块: module RAM(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<=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 end end always( posedge rd_clk or negedge reset) begin if(!reset) dout<=8d0; else begin if(rd) begin dout<=memrd_address; end end end endmodule RAM模块激励: module RAM_test; 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=rd_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 (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; 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_1Hz),.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(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; add=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 endmodule 4.5 综合及布局布线报告和引脚分布报告 综合图: 管脚安排图: 时钟安排图: 4.6 后仿真结果报告 4.7 硬件测试结果报告 测试结果符合设计初衷,实现了将一个10×8的RAM变成十个8位的加法器,设置初始值为110,可以写入和读出数据进行加法操作。4.8 对结果和结论的问题探讨 试验结果基本上符合设计要求和初衷,主体功能可以很好的实现,但是在一些细微环节上没有做到很好的规划,比如在后仿真时出现了部分高阻状态,后检查发觉是由于在RAM模块中的复位有问题。5.课程设计的心得体会 经过两周的FPGA课程设计,使我对这门课程有了一个更加深刻地相识和感受,更加深化的了解了自己在课程学习上的不足以及理论学习和实践相互结合的重要性。在电路的设计初始时刻,我没有根据设计电路时从上到下的设计方法,而是盲目的对电路的模块进行设计。结果在最终的设计综合的时候,设计的各个模块不能进行顺当的综合和仿真。尤其是在数码管和RAM模块中出现了较大的问题,单个模块测试时,都是正确的,但是综合在一起时,就出现了问题。后来在老师和同学的帮助下,我发觉原来是时钟不匹配的问题。经过一系列的修改,最终得到了正确的结果,在以后的电路设计和描述中,我会深刻吸取这次的教训。在后仿真时,进行的特别顺当。后来我总结出了良好的编码习惯对于最终电路的综合和差错都是有很大的影响,便于自己刚好处理问题,做出改进方案,这对于处理逻辑错误特别有用,同时这也提示我们具体的规范和电路之间逻辑关系的合理支配的重要性。除此之外,不同模块之间的时序电路的合理协调,对于电路初始状态的设定都是至关重要的。总的来说,这两周的课程设计让我受益匪浅,在以后的学习中我会吸取这次的阅历,帮助自己在以后的学习和生活中取得更大的进步。6.参考资料等 基于Verilog的FPGA设计基础杜慧敏、李宥谋、赵全良著 西安电子科技大出版社学 Verilog HDL数字设计与综合(其次版) 美 Samir Palnitkar 著 夏宇闻、胡燕祥 刁岚松 等译 西安邮电学院-系-成果鉴定表 学生姓名 班级/学号 电科 进行时间 2012年 9 月 10 日 2012 年 9 月21 日 成果鉴定 学习内容(20分) 与教学任务安排结合程度(10分) 与专业培育结合程度(6分) 其它(4分) 接受单位评价 (20分) 实践实力(10分) 学习看法(6分) 学习纪律(4分) 报告鉴定 (60分) 报告内容与实践过程紧密结合(15分) 报告内容与教学安排内容紧密结合(15分) 报告质量(主题、结构、观点、逻辑、资料、字数 30分) 评阅老师姓名 刘正涛 职称 成果 评语 评阅老师签字 年 月 日 西安邮电学院 系 过程考核表 学生姓名 班级/学号 电科 担当任务试验室(单位) 2#试验楼 所在部门 实施时间 2012年 9月10 日 2012 年9 月21日 详细内容 第一周 进行设计规范和详细设计方案的构思,并以报告的形式写出来。其次周 进行相关模块程序的编写,仿真,综合,以及后仿真。 指导老师(师傅)姓名 刘正涛 职务或职称 指导老师(师傅) 对学生的评价 学习看法 仔细 一般 不仔细 学习纪律 全勤 间或缺勤 常常缺勤 实践实力 很强 一般 较差 指导老师(师傅)对学生专业学问或社会实践实力等状况的看法 指导老师(师傅)签字 年 月 日 西an邮电学院

    注意事项

    本文(FPGA课程设计基于RAM十口8位计数器.docx)为本站会员(ylj18****70940)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开