FPGA学习笔记(一):计数器

目录

一、逻辑设计

1.端口设计

2.波形图绘制

二、程序设计

1.计数器代码

2.仿真代码

3.仿真结果

总结


使用Verilog语言设计一个3bit的计数器电路


一、逻辑设计

1.端口设计

df6da313d0d54e5484833317a27fcadb.png

模块的输入端口包含系统时钟sys_clk、复位信号sys_rst_n;输出端口包含3bit的计数器信号cnt[2:0]。

2.波形图绘制

810a017adaa24121acb383196f7118b0.png

每个时钟上升沿之后,计数器的值就加1,cnt循环从0计数到7,每当计数器计数到最大值时,就会从零开始重新累加。

二、程序设计

根据波形图使用Verilog编写计数器(counter.v)代码

1.计数器代码

代码如下:

module counter(
    input sys_clk,        // 系统时钟信号
    input sys_rst_n,      // 系统复位信号(低电平有效)
    
    output reg [2:0] cnt  // 输出计数器值,3位宽度
);

always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)  // 如果复位信号为低电平
        cnt <= 3'd0; // 计数器复位为0
    else
        cnt <= cnt + 3'd1; // 计数器值加1
end

endmodule

2.仿真代码

代码如下:

`timescale 1ns / 1ns // 仿真单位/仿真精度

module tb_counter();

// 定义输入端口
reg sys_clk;      // 系统时钟信号
reg sys_rst_n;    // 系统复位信号(低电平有效)

// 定义输出端口
wire [2:0] cnt;   // 计数器值输出端口

// 初始化模块
initial begin
    sys_clk = 1;             // 初始时钟信号为高电平
    sys_rst_n = 1'b0;        // 初始复位信号为低电平
    #201                     // 延迟201个时间单位
    sys_rst_n = 1'b1;        // 将复位信号置为高电平,使计数器开始计数
end

// 时钟信号反转模拟
always #10 sys_clk = ~sys_clk;

// 实例化计数器模块
counter counter_inst(
    .sys_clk(sys_clk),      // 传递时钟信号
    .sys_rst_n(sys_rst_n),  // 传递复位信号
    .cnt(cnt)               // 传递计数器输出
);

endmodule

3.仿真结果

9012d8b2591d4041b120f8c19b356bd3.png

仿真波形与我们绘制的波形图一致


总结

计数器是逻辑设计中非常常用的一个时序电路,计数器是由寄存器和加法器组成的,使用计数器可以实现使用计数器可以对脉冲的个数计数,以实现测量、计数、分频和控制的功能。

 

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
小梅哥在学习Xilinx FPGA期间进行了积极的探索,特别是对Cyclone V SOC的开发流程进行了学习。从裸机到基于Linux嵌入式系统,小梅哥实现了FPGA和ARM Cortex-A9 CPU之间的双向控制和数据传输。 在代码编写方面,小梅哥设计了一个名为mux2的模块,用于实现二选一多路器。模块包含了输入和输出端口,并通过assign语句实现了信号的赋值。 在激励文件中,小梅哥使用reg和wire定义了输入和输出信号,并通过mux2模块进行了实例化。然后,通过initial块生成了一系列的激励信号,对模块进行仿真。 总结来说,小梅哥在Xilinx FPGA学习笔记中记录了自己对Cyclone V SOC的学习代码编写和激励文件的使用。这些学习内容对于理解FPGA开发流程以及实现特定功能非常有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [FPGA自学笔记——设计与验证VIP版.pdf](https://download.csdn.net/download/qq_30307853/11656682)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [小梅哥Xilinx FPGA学习笔记1——二选一多路器](https://blog.csdn.net/weixin_42454243/article/details/122026484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值