码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Verilog:【1】时钟分频电路(clk_divider.sv)


    碎碎念:

    作为Basic Verilog的第一个学习笔记,打算用这种命名方式来对博客进行命名,应该有助于检索。

    简单阅览了部分工程的代码,发现里面有很多嵌套关系,因此决定先从基础模块开始,也是为了整个博客内容的流畅性。

    读者朋友有问题的话,也可以随时和我进行讨论!咋们一起学习,一起进步!

    目录

    1 模块功能

    2 模块代码

    3 模块思路

    4 TestBench与仿真结果


    1 模块功能

    通过计数器来将时钟进行分频处理的功能,通过修改parameter部分,可以用来修改输出数据的范围大小。

    2 模块代码

    1. //------------------------------------------------------------------------------
    2. // clk_divider.sv
    3. // published as part of https://github.com/pConst/basic_verilog
    4. // Konstantin Pavlov, pavlovconst@gmail.com
    5. //------------------------------------------------------------------------------
    6. // INFO ------------------------------------------------------------------------
    7. // Divides main clock to get derivative slower synchronous clocks
    8. //
    9. /* --- INSTANTIATION TEMPLATE BEGIN ---
    10. clk_divider #(
    11. .WIDTH( 32 )
    12. ) CD1 (
    13. .clk( clk ),
    14. .nrst( 1'b1 ),
    15. .ena( 1'b1 ),
    16. .out( )
    17. );
    18. --- INSTANTIATION TEMPLATE END ---*/
    19. module clk_divider #( parameter
    20. WIDTH = 32
    21. )(
    22. input clk,
    23. input nrst,
    24. input ena,
    25. output logic [(WIDTH-1):0] out = '0
    26. );
    27. always_ff @(posedge clk) begin
    28. if ( ~nrst ) begin
    29. out[(WIDTH-1):0] <= '0;
    30. end else if (ena) begin
    31. out[(WIDTH-1):0] <= out[(WIDTH-1):0] + 1'b1;
    32. end
    33. end
    34. endmodule

    3 模块思路

    这个模块比较简单,当nrst=0的时候,复位;非复位的情况下,会利用计数器原理,对out进行加一处理,下面重点介绍一下其中两个值得注意的地方。

    1.always_ff

    相比Verillog中千篇一律的always模块,这是System中的升级写法(之后可以专门写一个专题机进行横向总结)。

    always_ff中,ff是flip_flop的缩写,表示它是边沿触发的触发器,需要加关键字posedge或negedge,本例中表示他是clk信号上升沿来触发。

    2.logic

    参考博客:SystemVerilog logic、wire、reg数据类型详解 - 民工袁师傅的文章 - 知乎

    logic类型是System Verilog中升级的部分,Verilog中数据类型整体分为net型和variable两个类型,net类型使用assign进行连续赋值,只能被综合成组合逻辑;variable类型使用过程赋值,可能被综合成时序逻辑,可能被综合成组合逻辑。

    logic类型,即可以被连续赋值也可以被过程赋值,由编译器来进行控制。但是logic只能允许一个输入,不能被多重驱动。wire定义时赋值是连续赋值,而logic定义时赋值只是赋初值,并且赋初值是不能被综合的。

    4 TestBench与仿真结果

    1. `timescale 1ns / 1ps
    2. module clk_divider_tb();
    3. reg clk;
    4. wire [31:0] out;
    5. parameter half_cycle = 10;
    6. initial
    7. begin
    8. // code that executes only once
    9. // insert code here --> begin
    10. clk = 0;
    11. forever begin
    12. #half_cycle clk = 1;
    13. #half_cycle clk = 0;
    14. end
    15. // --> end
    16. $display("Running testbench");
    17. end
    18. clk_divider #(
    19. .WIDTH( 32 )
    20. ) CD1 (
    21. .clk( clk ),
    22. .nrst( 1'b1 ),
    23. .ena( 1'b1 ),
    24. .out( out )
    25. );
    26. endmodule

    通过仿真波形可以看到,就是简单的计数器原理,之后可以在out输出连接组合逻辑(例如与门)来实现分频操作。


    这就是本期的全部内容啦,如果你喜欢我的文章,不要忘了点赞+收藏+关注,分享给身边的朋友哇~

  • 相关阅读:
    Spring 事务
    C#使用词嵌入向量与向量数据库为大语言模型(LLM)赋能长期记忆实现私域问答机器人落地之openai接口平替
    文件转换,简简单单,pdf转word,不要去找收费的了,自己学了之后免费转,之后就复制粘贴就ok了
    js将时间戳处理为年月日时分秒格式
    50个常用的Numpy函数解释,参数和使用示例
    某头部证券机构云化与信创双转型深度解析|信创专题
    QT+OSG/osgEarth编译之九十一:osgdb_pnm+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_pnm)
    GitHub仓库的README文件无法显示图片问题-非域名污染原因
    2022 需求工程综合论述题【太原理工大学】
    如何免费创建三级域名?
  • 原文地址:https://blog.csdn.net/Alex497259/article/details/126256266
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号