b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

testbench_vhdl testbench reset_HDL testbench

电脑杂谈  发布时间:2017-03-09 10:05:17  来源:网络整理
testbench

TestBench基本概念:

测试激励->待测设计->观察比对波形/在终端打印或生产文本/自动对比输出结果

TestBench编写三步曲

1:对被测试设计的顶层接口进行例化

2:给被测试设计的输入接口添加激励

3:判断被测试设计的输出想要是否满足设计要求

TestBench内容主要分为

1:时钟的产生

2:复位的产生

3:其他激励信号的产生(用户自定义 )

第一种时钟产生方式

//时钟产生

//定义时钟周期为20ns,已经定义'timescale 1ns/1ps 单位/精度

parameter PERIOD = 20;

initial

begin

clk = 0;

forever

#(PERIOD/2) clk = ~clk;

end

parameter是参数的意思类似于#define

initial是初始化

begin end类似于括号的作用

clk =0 ;初始化时钟为低电平

forever是程序一直执行的意思

#10 表示每间隔10ns执行一次clk=~clk;clk取反一次

第二种时钟产生方式

//时钟产生

//定义时钟周期为20ns,已经定义'timescale 1ns/1ps 单位/精度

parameter PERIOD = 20;

always

begin

#(PERIOD/2) clk = 0;

#(PERIOD/2) clk = 1;

end

always是从第一条语句执行到最后一条语句,再从第一条语句执行

复位信号的产生

//复位产生

initial

begin

//复位低电平有效 已经定义了'timescale 1ns/1ps

rst_n = 0;//复位状态

#100;//100ns延时

rst_n = 1; //撤销复位

end

//例子:

initial

begin

reset_task(100);//复位100ns,已经定义了'timescale 1ns/1ps

end

//任务的写法

task reset_task;

input[15:0] reset_time;//复位事件

begin

reset=0;

#reset_time;

reset=1;

end

endtask

task 是任务名

之后是输入输出

再紧跟是begin end

实例解说

//自己定义

`timescale 1 ps/ 1 ps

//verilog模块名

module verilog_ex2_vlg_tst();

reg clk;//数据类型与顶层文件的数据类型不同

reg rst_n;

wire clk_div;

//verilog_ex2是被测试设计的顶层模块名,顶层模块例化为i1,也可以为i2 i3 i4

//括号中是接口

//.clk .clk_div .rst_n这3个.后面的引脚必须和顶层文件中的引脚名一致

//clk是对应得,接口引脚都是对应的

verilog_ex2 i1 (

// port map - connection between master ports and signals/registers

.clk(clk),

.clk_div(clk_div),

.rst_n(rst_n)

);

initial

begin

// code that executes only once

// insert code here --> begin

clk = 0;

forever

#10 clk = ~clk;

// --> end

$display("Running testbench");

end

initial

begin

rst_n = 0;

#1000;

rst_n = 1;

#5_000;//delay 5us

$stop;

end

//i1中的的.clk 后面的是clk也可以改为clk0实例代码如下:

`timescale 1 ps/ 1 ps

module verilog_ex2_vlg_tst();

reg clk0;//clk0

reg rst_n;

wire clk_div;

verilog_ex2 i1 (

.clk(clk0),//clk0

.clk_div(clk_div),

.rst_n(rst_n)

);

initial

begin

clk0 = 0;

forever

#10 clk0 = ~clk0;

end

initial

begin

rst_n = 0;

#1000;

rst_n = 1;

#5_000;//delay 5us

$stop;

end

在顶层文件verilog_ex2.v 中

clk是输入引脚,是测试脚本的输出

clk_div是输出引脚,是测试脚本的输入

rst_n是输入引脚,是测试脚本的输出

#10 clk0 = ~clk0;表示每间隔10ns时间clk取反一次

#1000;表示延时1000ns

$stop;表示测试时间结束

编写完之后设置

编写完之后Tools->EDA RTL Simulation就可以ModelSim仿真了

好书推荐:

吴继华,王诚《设计与验证Verilog HDL》

Janick Bergeron 《Writing Testbench》

张春,陈新凯,李晓雯 《编写测试平台》

Testbench 应用实例:

先新建一个Quartu工程

工程文件夹verilog_EX2是文件夹名;

工程名为verilog_ex2;

工程设置为仿真工具为ModelSim,而不是ModelSim-Altera,

我使用的是ModelSim6.5 SE版本。

新建一个verilog HDL文件

输入以下代码:

/////////////////////////////////////////////////////////////////////////////

module verilog_ex2(

clk,

rst_n,

clk_div

);

input clk;//20MHz时钟输入信号

input rst_n;//低电平复位信号

output clk_div;//分频输出信号,连接到蜂鸣器

//---------------------------------------------------------

reg cnt;

always @(posedge clk or negedge rst_n)

if(!rst_n)

cnt <= 1'd0; //异步复位

else

cnt <= ~cnt ;

assign clk_div = cnt;

endmodule

////////////////////////////////////////////////////////////////////////////////////

保存为verilog_ex2.v文件

编译Quartus工程。testbench

编译之后有警告:

再把不用的引脚设置为三态输入,配置3个信号的引脚。

在使用TestBench之前就要设置ModelSim,

Tools -> Options-> General -> EDA Tool Options界面下的ModelSim路径设置为D:\modeltech_6.5\win32

(我的ModelSim6.5 SE安装路径是D:\modeltech_6.5\win32,关于ModelSim安装和破解的问题,网上有许多的教程)

在一个工程中新建一个TestBench的步骤:

由于新建一个工程之后,并没有TestBench文件,因此要建立一个Testbench文件

Processing->Start->Start Test Bench Template Writer

新建一个TestBench模板,会提示Test Bench Template Writer was successful,成功新建模板

接下来要打开新建的模板

File->Open->simulation文件夹/modelsim文件夹/verilog_ex2.vt

选择的时候注意把文件类型选择为 :All Files

打开verilog_ex2.vt文件后,删除原有代码写入:

//////////////////////////////////////////////////////////////////////////////////////////

`timescale 1 ns/ 1 ps

module verilog_ex2_vlg_tst();

reg clk;

reg rst_n;

wire clk_div;

verilog_ex2 i1 (

.clk(clk),

.clk_div(clk_div),

.rst_n(rst_n)

);

initial

begin

clk = 0;

forever

#10 clk = ~clk;

end

initial

begin

rst_n = 0;

#1000;

rst_n = 1;

#5_000;//delay 5us

$stop;

end

endmodule

//////////////////////////////////////////////////////////////////////////////////////////

保存文件

编译Quartus工程

以上只是新建了一个TestBench

之后就要向工程中添加Test脚本的内容

Assignment->Settings->EDA Tool Setting->Simulation

界面中Tool name选择Modelsim,

在NativeLink Settings中勾选Compile test bench:

单击后面的TestBenches,之后单击New,

出现一个New Test Bench Settings界面中

Test bench name(测试凳名称)中输入:verilog_ex2

Top Level module in test bench (测试凳中的顶层模块名):verilog_ex2_vlg_tst

Top Level module in test bench (测试凳中的顶层模块名)的输入查找方式是在Testbench中查找module后面的内容有:

module verilog_ex2_vlg_tst();就可以找到了。

Design instance name in testbench:实例化的模块名:i1也可以在testbench中找到

在下面的Test bench Files中的File name中单击按钮,选择打开verilog_ex2.vt,再单击Add按钮加入testbench 文件

依次单击OK,退出设置界面。

再次重新编译Quartus工程文件

想查看Testbench 的结果就在Quartus工具中:

Tools->Run EDA Simulation tool->EDA RTL Simulation

进行RTL级仿真就可以看到Modelsim仿真的波形了

仿真完之后需要做一个时序约束:

Tools->TimeQuest Timing Analyzer

初次打开时会提示:

No SDC files were found in the Quartus Settings File and verilog_ex2.sdc doesn't exist.

Would you like to generator an SDC file from the Quartus Settings file?

单击是按钮

双击Create Timing Netlist

双击Read SDC File

在TimeQuest Timing Analyzer 界面中的工具栏中

Constraints->Create Clock

Clock name时钟名称输入:sys_clk

Period周期是:50ns(时钟晶振是 20MHz)

单击Targets后面的按钮:

单击list选择clk,单击,选择OK按钮,单击Run。

双击Update Timing Netlist

双击Write SDC file,

打开SDC文件就可以看到

create_clock -name {sys_clk} -period 50.000 -waveform { 0.000 25.000 } [get_ports *]

周期是50ns,

再重新编译Quartus工程,编译之后,工程就会有新的布局布线。

如果没有达到实序约束就会在Cirtical Waring中产生警告。

编译之后再到TimeQuest中查看一下。

双击Create Timing Netlist

双击Read SDC File

在Datasheet中Report Fmax Summary最大值的报告(主频最高)

再看一下具体的时序约束的路径;

Macros->Report All Core Timings

可以看到Core clock setup和Core clock hold的两条报告

查看RTL Viewer 和Technolgy Map Viewer

在Fitter中查看Chip Planner。

另一篇比较好的可以参考:

Quartus ii与Modelsim-altera 6.5b联调前仿真


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-36623-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...