数电实验1:计数器实验

这篇具有很好参考价值的文章主要介绍了数电实验1:计数器实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 设计要求分析

       计数是一种最简单基本的运算。计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。本次实验采用50MHz时钟进行系统仿真,并具备低电平有效的复位信号。计数从0~100,当计数器记满100后归零重新计数。

2 系统设计

2.1 总体设计思路

       实验采用50MHZ时钟进行系统仿真,即20ns,可以计算得出计数范围为。计数从0到100,则需要一个至少7位()计数器,且记满后归零。并且计数器对脉冲个数计数,所以计数器需与时钟信号严格同步。同时还需要设计一个低电平有效复位信号,而此信号与时钟不同步,是异步复位,即当复位信号为低,则计数器立即复位,不需要等待时钟触发。

2.2 接口设计

端口数 I/O 功能描述
I_sys_clk_50MHz  input 50MHz时钟
I_sys_rst_n input 低电平有效复位信号
O_cnt output 计数输出

2.3 计数器模块

       首先输入为I_sys_clk_50Mhz和I_sys_rst_n,分别为wire型变量,代表输入时钟和输入低电平复位信号,此时复位信号是异步信号,不和时钟同步,该信号复位可发生在任意信号为低的时刻,所以在always块中,敏感列表包含时钟上升沿时刻和低电平复位信号下降沿。

       输出端口为计数器O_cnt,变量类型为wire,为保证该模块输出为寄存器形式,即输出和系统时钟同步,引入中间变量O_cnt_temp,通过连续赋值语句assign再将O_cnt_temp赋给O_cnt。在系统复位时,需要给所有内部寄存器变量初始化,即O_cnt_temp<=7'd0。当计数器变量值在当前时钟上升沿已经为100时,采用非阻塞赋值,即时钟上升沿时刻出开始执行O_cnt_temp<=7'd0,达到重新计数的功能。在计数不满100的时候,O_cnt_temp变量,在时钟上升沿时刻依次递进1,达到计数功能。

3 功能仿真测试

3.1 源程序设计

`timescale 1ns / 1ps

module Counter(
        input           I_sys_clk_50MHz     ,
        input           I_sys_rst_n         ,
        
        output  [7:0]   O_cnt
    );
        reg     [7:0]   O_cnt_temp;
        
        assign   O_cnt=O_cnt_temp;
        
always @(posedge I_sys_clk_50MHz or negedge I_sys_rst_n) begin
        if(!I_sys_rst_n) begin
            O_cnt_temp<=7'd0;
        end
        else if(O_cnt_temp==7'd100) begin
            O_cnt_temp<=7'd0;
        end
        else begin
            O_cnt_temp<=O_cnt_temp+7'd1;
        end
 end       
endmodule

3.2 testbench程序测试

`timescale 1ns / 1ps

module testbench_Counter(

    );
    reg             I_sys_clk_50MHz;
    reg             I_sys_rst_n;
    
    wire    [7:0]   O_cnt;
    
    initial begin
        I_sys_clk_50MHz=1'b0;
        I_sys_rst_n=1'b0;
        
        #10 I_sys_rst_n=1'b1;
    end
    
    always #10 I_sys_clk_50MHz=~I_sys_clk_50MHz;
    
    Counter Counter_u(
    
        .I_sys_clk_50MHz        (I_sys_clk_50MHz),
        .I_sys_rst_n            (I_sys_rst_n),
        
        .O_cnt                  (O_cnt)
    );
endmodule

3.3 时序仿真波形

计数器实验,fpga开发

计数器实验,fpga开发

3.4 结果分析 

       由上面时序波形图可知,复位信号为低时,计数器复位为0,复位信号为高时,计数器开始计数。计数器在时钟上升沿计数,在计数未满100时,计数加1,当计数已满100时,计数器归0重新开始计数。

4 思考

       在代码中我们引入了reg型中间变量O_cnt_temp,并将这个reg型变量赋值给了wire型变量输出O_cnt。一个模块的输入input我们往往是wire的申明,因为wire为无逻辑连线,所以输入什么输出就是什么;但输出端口却要求需要做寄存器形式的输出,这是因为在过程语句块(initial,always)中,只能对reg数据进行赋值,且这种形式的输出比较稳定、扇出能力也较好。

       可以简记为:当output作为过程赋值语句的左值,则应该用reg类型;如果output作为连续赋值语句的左值或元件例化输出,则应该用wire类型。

5 技术小结与感想

       通过这次实验,完成了一整套FPGA实现流程,实现了计数器的功能,在实验过程中了解了计数器的逻辑结构,更加理解了异步复位,时钟触发等的概念,同时也练习了利用Vivado完成Verilog的编写。文章来源地址https://www.toymoban.com/news/detail-754924.html

到了这里,关于数电实验1:计数器实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA实验二:模可变计数器设计

    目录 一、实验目的 二、实验要求 三、实验代码 1.实验源码

    2024年02月12日
    浏览(50)
  • 数电:计数器

    同步计数器和异步计数器的区别 1.同步计数器的外部时钟端都连在一起,而异步计数器没有 2.同步计数器在外部信号到来时触发器同时翻转,而异步计数器的触发器为串行连接,工作频率较低 3.异步计数器输出状态的建立,要比CP慢一个传输时间,容易存在竞争冒险 竞争冒险

    2024年02月06日
    浏览(46)
  • 【30-60s计数器电路设计】数电课设

    这是徐州工程学院2021年的电子工艺实习课程作业之一,我是20级计嵌专业的学生。电路方面的东西并不是我们的主修课程,所以在完成这项作业的过程中遇到了许多困难( 特别是在查不到样板的情况下 )。网上也找到过一位仁兄的案例,不过并没有详细的电路运行原理和操

    2024年02月08日
    浏览(49)
  • FPGA开发] 使用Verilog实现一个简单的计数器

    计数器是数字电路中常见的元件之一,它能够按照一定的规律进行计数。在FPGA开发中,我们可以使用硬件描述语言Verilog来实现一个简单的计数器。本文将为您详细介绍如何使用Verilog编写一个基于FPGA的计数器,并提供相应的源代码。 首先,我们需要定义计数器的功能和规格

    2024年02月03日
    浏览(60)
  • FPGA设计开发(基础课题):74LS160计数器芯片设计

    一、设计目的 1、学会用HDL语言设计时序电路; 2、用HDL语言设计74LS160计数器芯片的数字功能。 二、设计原理 计数器是最常用的寄存器逻辑电路,从微处理器的地址发生器到频率计都需要用到计数器。一般计数器可以分为两类:加法计数器和减法计数器。加法计数器每来一个

    2024年02月08日
    浏览(57)
  • 【FPGA】Verilog:计数器 | 异步计数器 | 同步计数器 | 2位二进制计数器的实现 | 4位十进制计数器的实现

    目录 Ⅰ. 实践说明 0x00 计数器(Counter) 0x01 异步计数器(Asynchronous Counter)

    2024年02月05日
    浏览(57)
  • 【FPGA】Verilog:升降计数器 | 波纹计数器 | 约翰逊计数器 | 实现 4-bit 升降计数器的 UP/DOWN

    目录 Ⅰ. 理论部分 0x00 升降计数器(UP DOWN Counter) 0x01 波纹计数器(Ripple Counter)

    2024年02月05日
    浏览(50)
  • FPGA拾忆_(3):调用IP 计数器&BCD计数器

    调用IP计数器: 每来一个cin(进位输入)信号,计数器输出值加一,当计数值为9且cin为1时,输出一个时钟长度的cout(进位输出)信号。 首先采用调用quartus种IP的方式,具体步骤: Tools----IP Catalog: 然后会调出IP目录窗口: 通过搜索counter来添加计数器模块,需要设置的内容

    2024年02月03日
    浏览(56)
  • FPGA-计数器的实现

    计数器是依托时钟实现的,在时钟沿(一般在上升沿)进行检测,实现计数加1; 计数是从0开始计数的,所以计数值为(M-1),其中M为计数的值。比如计数到10,我们实现时到9即可; 这里为计数器的第一种实现方法,该方法非最优方法,我们只需要了解即可,后续我们会介

    2024年02月04日
    浏览(41)
  • 实验四 计数器

    五、实验步骤与实验结果 1、用Verilog VHDL设计D触发器。打开QuarterII新建一个基于ALTERA的Cyclone系列FPGA芯片EP1C3T144C8N的项目保存在D:dianluecp1文件夹中,新建一个Verilog HDL文件,将附件一代码写入,运行无错误,查看My74161计数器的逻辑图(图1-1),重新运行,无误后,进行“Creat sy

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包