分享
分销 收藏 举报 申诉 / 10
播放页_导航下方通栏广告

类型verilog八位十进制计数器实验报告(附源代码).docx

  • 上传人:Fis****915
  • 文档编号:554610
  • 上传时间:2023-12-08
  • 格式:DOCX
  • 页数:10
  • 大小:172.48KB
  • 下载积分:6 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    verilog 八位 十进制 计数器 实验 报告 源代码
    资源描述:
    8位10进制计数器实验报告 一、 实验目的 l 学习时序逻辑电路 l 学会用verilog语言设计时序逻辑电路 l 掌握计数器的电路结构 l 掌握数码管动态扫描显示原理 二、 实验内容 实现一个8bit十进制(BCD码)计数器 端口设置: 用拨动开关实现复位和使能 LED灯来表示8位数据 用数码管显示16进制的八位数据 1. 复位时计数值为8‘h0 2. 复位后,计数器实现累加操作,步长为1,逢9进1,,计数值达到8‘h99后,从0开始继续计数 3. 使能信号为1时正常计数,为0时暂停计数,为1时可继续计数。 4. 每0.5s计数值加1 5. 8位的结果显示在LED灯上,其中LED灯亮表示对应的位为1,LED灯灭表示对应的灯为0 6. 用isim进行仿真,用forever语句模拟时钟信号输入,并给变量赋值仿真initial语句。 7. 用7段数码管的后两位显示16进制下8位结果。 三、 实验结果 烧写结果: 拨动reset开关到1时,LED灯显示10010000,7段数码管显示“90”。 之后拨动WE开关呢,开始计数,LED开始变化并且7段数码管开始计数。从99后到达00,LED重新开始从00000000开始亮,且数码管重新从00开始计数。 之后拨动WE开关,暂停计数,LED暂停亮灭,七段数码管暂停变化,WE拨回1,继续计数。 拨动复位信号时,无视WE信号,直接复位。 仿真结果: 当输入reset信号时波形变化如下 当达到一个扫描信号的周期时的波形如下 当达到一个以上计数信号的周期时的波形 实验分析: 实验总体结构和模块间关系如图所示:(其中还需要补上使能信号) 实验原理: 由于要求实现数码管和LED灯的显示,先考虑LED灯,可以直接由8位输出信号控制,而数码管需要同时显示两个不同的数字,需要时分复用,即快速的交替显示十位和个位,利用人眼的视觉暂留来达到同时显示。这样就需要两种不同的频率信号。一种是每0.5s一次,作为计数信号,用脉冲生成器生成,另一种是1ms一次的扫描信号,用降频器生成,将计数信号输入计数器来计数,并将计数的值和扫描信号同时输入扫描显示模块。在扫描显示模块里用一个变量值在0和1间交替来指导选择信号选择数码管的不位数。交替的条件是收到扫描信号。7段数码管和LED灯都与计数值的变量相连即可实现。 实现细节 1. 首先写一个脉冲生成器(div.v),每0.5s输出一次计数脉冲cnt 2. 写一个计数器(cnt.v)设置一个8位计数变量,分成两个4位变量dnum(十位)和num (个位)。如果接受到rst信号,则将计数变量置成x90.否则每次接受到计数信号,将计数变量的值增1,(同时考虑进位和回到x00的情况) 3. 写一个扫描信号生成器(scan.v),每1ms生成一次扫描信号 4. 写一个显示器(display.v),设置对数码管位数的4位选择信号sel和led灯的控制变量dnum(高4位)和num(低四位)。设置seg作为7段数码管的控制变量。设置一个中间变量a(初值0),如果接受到scan信号,将a 0变1或1变0.如果a为0,sel为x1101,显示数码管十位,如果a为1,sel为x1110,显示数码管个位。 5. 以上各个模块均由时钟信号控制。 6. 写一个top模块综合以上模块。 附录(源代码): Div.v模块: module div( input clk, input rst, output reg cnt ); reg [25:0] cnt_div; always@(posedge clk or posedge rst) begin if(rst) cnt_div<=26'b0; else if(cnt_div==26'd49_999_999) cnt_div<=26'b0; else cnt_div<=cnt_div+26'b1; end always@(posedge clk or posedge rst) begin if(rst) cnt<=1'b0; else if(cnt_div==26'd49_999_999) cnt<=1'b1; else cnt<=1'b0; end endmodule cnt.v模块: module cnt( input clk, input WE, input rst, input cnt, output reg [3:0] dnum, output reg [3:0] num ); always@(posedge clk) begin if(rst) begin dnum<=4'h9; num<=4'h0; end else if(WE && cnt) begin if(num==4'h9) begin num<=4'h0; if(dnum==4'h9) dnum<=4'h0; else dnum<=dnum+4'h1; end else num<=num+4'h1; end end endmodule scan.v模块: module scan( input clk, output reg scan_sgn ); reg [16:0] scan_cnt; initial scan_sgn=0; initial scan_cnt=0; always@(posedge clk) begin if(scan_cnt==17'd99_999) scan_cnt<=17'd0; else scan_cnt<=scan_cnt+17'b1; end always@(posedge clk) begin if(scan_cnt==17'd99_999) scan_sgn<=1'b1; else scan_sgn<=1'b0; end endmodule display.v模块: module display( input clk, input scan_sgn, input [3:0] num, input [3:0] dnum, output reg [7:0] seg, output reg [3:0] sel ); reg a=0; //initial a =0; always@(posedge scan_sgn) begin if(a==1'b0) a=1'b1; else a=1'b0; end always@(posedge clk) begin if(a==1'b0) begin sel=4'b1101; case(dnum) 4'h0: seg=8'b0000_0011; 4'h1: seg=8'b1001_1111; 4'h2: seg=8'b0010_0101; 4'h3: seg=8'b0000_1101; 4'h4: seg=8'b1001_1001; 4'h5: seg=8'b0100_1001; 4'h6: seg=8'b0100_0001; 4'h7: seg=8'b0001_1111; 4'h8: seg=8'b0000_0001; default: seg=8'b0000_1001; endcase end else begin sel=4'b1110; case(num) 4'h0: seg=8'b0000_0011; 4'h1: seg=8'b1001_1111; 4'h2: seg=8'b0010_0101; 4'h3: seg=8'b0000_1101; 4'h4: seg=8'b1001_1001; 4'h5: seg=8'b0100_1001; 4'h6: seg=8'b0100_0001; 4'h7: seg=8'b0001_1111; 4'h8: seg=8'b0000_0001; default: seg=8'b0000_1001; endcase end end endmodule top模块: module top( input clk, input rst, input WE, output [7:0] seg, output [3:0] sel, output [3:0] dnum, output [3:0] num ); wire [3:0] dnum; wire [3:0] num; wire cnt; wire scan_sgn; div u_div( .clk (clk ), .rst (rst ), .cnt (cnt ) ); cnt u_cnt( .clk (clk ), .rst (rst ), .WE (WE ), .cnt (cnt ), .dnum (dnum ), .num (num ) ); scan u_scan( .clk (clk ), .scan_sgn (scan_sgn) ); display u_display( .clk (clk ), .sel (sel ), .seg (seg ), .dnum (dnum ), .num (num ), .scan_sgn (scan_sgn) ); endmodule ucf文件: Net "seg<7>" LOC = T17; Net "seg<6>" LOC = T18; Net "seg<5>" LOC = U17 ; Net "seg<4>" LOC = U18 ; Net "seg<3>" LOC = M14 ; Net "seg<2>" LOC = N14; Net "seg<1>" LOC = L14; Net "seg<0>" LOC = M13; Net "sel<0>" LOC = N16; Net "sel<1>" LOC = N15; Net "sel<2>" LOC = P18; Net "sel<3>" LOC = P17; NET "WE" LOC=T9; NET "rst" LOC=T10; NET "clk" LOC=V10; Net "num<0>" LOC = U16; Net "num<1>" LOC = V16; Net "num<2>" LOC = U15; Net "num<3>" LOC = V15; Net "dnum<0>" LOC = M11; Net "dnum<1>" LOC = N11; Net "dnum<2>" LOC = R11; Net "dnum<3>" LOC = T11; 仿真代码: module test5; // Inputs reg clk; reg rst; reg WE; // Outputs wire [7:0] seg; wire [3:0] sel; wire [3:0] dnum; wire [3:0] num; // Instantiate the Unit Under Test (UUT) top uut ( .clk(clk), .rst(rst), .WE(WE), .seg(seg), .sel(sel), .dnum(dnum), .num(num) ); initial begin clk = 0; #100; WE = 1; rst = 1; #10; rst=0; end always #1 clk=~clk; endmodule 対本实验的总结和体会; 1、 要仿真正确是烧写的前提,先仿真正确再烧写 2、 要给每个模块定义的变量一个initial语句,否则在仿真中会出现变量的值未定义的xxxx的情形 3、 实验时仿真一直出现的一个问题是没有写initial语句,导致各个模块的中间变量没有初值,而很多输出变量的变化条件都是根据中间变量的上升沿河下降沿来触发的,这样中间变量即使有值也不会产生电平变化,导致仿真时输出没有变化(虽然烧写到板子上没有问题) 4、 理解了仿真的原理是将整个project当成一个黑匣子,在isim的仿真程序中需要写语句模拟整个project的输入信号比如clk(用forever语句),rst和WE变量(在程序中赋值) 5、 为了能使仿真时各个变量异步的变化,比如在时钟变化的过程中使rst等其他输入变量变化,但是initial语句又是顺序执行的,此时可以写多个initial语句来并行得是变量变化。
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:verilog八位十进制计数器实验报告(附源代码).docx
    链接地址:https://www.zixin.com.cn/doc/554610.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork