博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】在仿真中如何使用好parameter?
阅读量:5056 次
发布时间:2019-06-12

本文共 2243 字,大约阅读时间需要 7 分钟。

参考:

Introduction

使用环境:Debussy + Modelsim

counter是最基本的循序電路應用,為了更加彈性,我們想讓使用者可以自己指定counter的大小,從什麼數字開始數,數到哪個數字停止,而不是寫死在程式裡。利用parameter的小技巧就可以。

Debussy的下载地址:

关于Debussy+modelsim联合仿真的配置可以参考:

 

1.首先建立文件:

--rtl.f

--sim.do

--run.bat

--rtl文件夹包含:parameter_counter.v  parameter_counter_tb.v

 

2. rtl.f文件的内容:

       rtl/parameter_counter.v

       rtl/parameter_counter_tb.v

3 sim.do文件的内容:

      vlib work

      vlog -f rtl.f
      vsim work.parameter_counter_tb
      run 10us
      q

4  run.bat的内容

5   parameter_counter.v

********************************************************

`timescale 1ns/10ps

module parameter_counter (
  clk,
  rst_n,
  cnt,
);

parameter size  = 16;

parameter start = 0;
parameter stop  = 100;

input clk;

input rst_n;
output reg [size-1 : 0] cnt;

always@(posedge clk or negedge rst_n) begin

  if (!rst_n)
    cnt <= start;
  else if (cnt == stop)
    cnt <= start;
  else
    cnt <= cnt + 1;
end

endmodule

*******************************************************

6  parameter_counter_tb.v

*******************************************************

`timescale 1ns/10ps

//`include "parameter_counter.v"

module parameter_counter_tb;

reg clk;

reg rst_n;
wire [7:0] cnt;

//parameter_counter u0 (.clk(clk), .rst_n(rst_n), .cnt(cnt));

parameter_counter # (.size(8),.start(3),.stop(11))

u0 (.clk(clk), .rst_n(rst_n), .cnt(cnt));

/*

parameter_counter u0 (
  .clk(clk),
  .rst_n(rst_n),
  .cnt(cnt)
);

defparam u0.size = 8;

defparam u0.start = 3;
defparam u0.stop = 9;
*/
parameter clkper = 100;
initial clk = 1'b0;
always #(clkper / 2) clk = ~clk;

initial begin

  rst_n = 1'b0;
  #1;
  rst_n = 1'b1;
end

// dump fsdb file for debussy

initial

begin

  $fsdbDumpfile("wave.fsdb");

  $fsdbDumpvars;

end

endmodule

********************************************************  

7 双击run.bat,结果如下:

 

  

    在parameter_counter.v中红色字:  parameter宣告,即為Verilog的參數式寫法,之後接的是預設值,如此一來,counter的大小,從什麼數字開始數,數到哪個數字停止都不在是寫死在程式裡。

 

    要讓testbench調用module時,能動態的調整參數,有幾種寫法:

(1)parameter_counter u0 (.clk(clk), .rst_n(rst_n), .cnt(cnt));

   是使用预设的参数值;

(2)parameter_counter # (.size(8),.start(3),.stop(9))

       u0 (.clk(clk), .rst_n(rst_n), .cnt(cnt));

   若要傳入參數,這是第一種寫法,加上#,再用()傳入參數;

(3)

parameter_counter u0 (

  .clk(clk),

  .rst_n(rst_n),

  .cnt(cnt)

);

defparam u0.size = 8;

defparam u0.start = 3;

defparam u0.stop = 9;

這是第二種傳入參數的寫法,靠defparam將參數傳進去。

转载于:https://www.cnblogs.com/socquan/p/3310382.html

你可能感兴趣的文章
windows下编译FreeSwitch
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
App.config自定义节点读取
查看>>
unity3d根据手机串号和二维码做正版验证
查看>>
二十六、Android WebView缓存
查看>>
django Models 常用的字段和参数
查看>>
linux -- 嵌入式linux下wifi无线网卡驱动
查看>>
SVN使用教程总结
查看>>
SQL中varchar和nvarchar有什么区别?
查看>>
(转)跟我一起写MAKEFILE
查看>>
Linux内存段的分析
查看>>
网卡启动问题
查看>>
Ruby元编程:单元测试框架如何找到测试用例
查看>>
[FJOI2016]神秘数(脑洞+可持久化)
查看>>
android配置开发环境
查看>>
PhpStorm本地断点调试
查看>>
iOS----------YYModel
查看>>
比起 Windows,怎样解读 Linux 的文件系统与目录结构?
查看>>