码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Verilog中parameter在仿真时的应用


    parameter能够定义一个常量

    例如   parameter [7:0]A = 8'd123;

    在仿真时我们可以用它来改变模块的参数,而不会影响综合的结果。

    考虑下面的模块,输入时钟是clk,频率为24MHz,输出一个1Hz的方波驱动小灯让其闪烁

    1. module test1(
    2. input clk,//24MHz的时钟
    3. output reg led
    4. );
    5. reg [25:0]cnt;
    6. initial begin
    7. led <= 1'b0;
    8. cnt <= 1'b0;
    9. end
    10. always @(posedge clk)begin
    11. if(cnt == 26'd11_999_999)begin
    12. cnt <= 1'b0;
    13. led <= ~led;
    14. end else begin
    15. cnt <= cnt + 1'b1;
    16. end
    17. end
    18. endmodule

    如果我们要对这个模块进行仿真,因为计数值非常大,所以需要仿真很长时间我们才会看到结果。

    不妨对代码进行如下修改。用MAX这个常数替代11_999_999,模块的行为没有任何改变。

    1. module test1(
    2. input clk,
    3. output reg led
    4. );
    5. parameter [25:0]MAX = 26'd11_999_999;
    6. reg [25:0]cnt;
    7. initial begin
    8. led <= 1'b0;
    9. cnt <= 1'b0;
    10. end
    11. always @(posedge clk)begin
    12. if(cnt == MAX)begin
    13. cnt <= 1'b0;
    14. led <= ~led;
    15. end else begin
    16. cnt <= cnt + 1'b1;
    17. end
    18. end
    19. endmodule

    好了,下面我们编写测试用例

    1. `timescale 1ns/1ps
    2. module sim_test1();
    3. reg clk;
    4. wire led;
    5. initial begin
    6. clk <= 1'b0;
    7. end
    8. always #5 clk <= ~clk;
    9. test1 #(.MAX(10))UUT(
    10. .clk(clk),
    11. .led(led)
    12. );
    13. endmodule

      #(.MAX(10)) 这段代码就是对UUT这个实例中的长度临时进行了修改,让仿真的时间缩短了。

    又因为作为test1的顶层模块并没有变动,所以不会改变配置到FPGA时的效果。当我们把配置文件下载到FPGA中时,会发现led灯还是按照1Hz的频率在闪烁。

  • 相关阅读:
    个人学习记录——MySQL的模糊查询
    c语言练习42:判断回文数
    【目标检测】Faster R-CNN 论文复现代码(含源代码)
    java面试小经历
    最简单的方法教你查看 iOS 手机上的日志
    Linux /dev目录详解和Linux系统各个目录的作用
    春秋云境靶场CVE-2022-28512漏洞复现(sql手工注入)
    【二叉树】数中的特殊结构->堆
    【Pandas】Python处理数据透视(行转列、列转行)
    IP 属地功能会泄露你的隐私吗?
  • 原文地址:https://blog.csdn.net/hayiji/article/details/133012148
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号