标签:reset clk clear 第三天 激励 Verilog 信号 设计 日志
设计的仿真与测试
一个设计一旦完成就应当对它进行测试。通过编写激励块,输入激励信号然后检测结果可以检测一个设计功能的正确性。将激励块和设计块分离开来是设计者应该养成的一个好习惯。通常测试块也被称为测试凳(Test Bench),应用不同的测试凳可以对一个设计块进行全方位的测试。激励信号的应用方式大致被分为两种。
第一种,在激励块内调用设计块,并且直接驱动设计块的信号。在图中,激励块成为顶层模块,对输入信号clk 和reset 进行操作,检测并显示输出信号q。
第二种,在顶层的假模块内同时调用激励块和设计块,激励块和设计块仅通过接口相互作用,如下图所示。激励模块驱动信号d_clk 和d_reset,这两个信号与设计块的两个端口clk 和 reset分别相连。它也检测并显示输出信号c_q,该信号与设计块的输出端口q相连。顶层假模块的功能仅仅是为了调用设计块和激励块。
下面对昨天学习的行波计数器进行仿真测试。
昨天行为级描述的代码为
module cnt_4bit (q,clear,clock);
output [3:0] q;
input clear,clock;
reg [3:0] q;
always @(posedge clear or negedge clock)
begin
if (clear)
q=4'd0;
else
q=(q+1) % 16;
end
endmodule
现在改为
module cnt_4bit (q,clear,clock);
output [3:0] q;
input clear,clock;
reg [3:0] q;
always @(posedge clear or negedge clock)
begin
if (clear)
q=4'd0;
else
q=(q+1) % 16;
end
endmodule
现在必须写出激励块以检测行波计数器功能是否正确。在此,必须控制信号clk和reset以检测行波计数器的计数功能和异步复位机制是否都正确。我们将使用下图所示的波形来检测设计块。图中显示了输入信号clk,reset以及4bit的输出信号q。时钟信号clk的时钟周期为10个时间单位;复位信号 reset从0到15保持为高,然后变低,直到195再次变高,至205后变低,输出信号q的范围是从0到15。
下面就准备写出激励块,生成上图中的波形。我们将使用如最开始的图所示的激励方式。在此不要过多考虑Verilog 的语法,将精力集中在激励模块是如何调用设计模块上。
编写激励块
module stimulusl;
reg clk;
reg reset;
wire [3:0] q;
cnt_4bit r1(q,reset,clk); //调用设计块cnt_4bit生成实例r1
//控制信号clk以驱动设计块,时钟周期设为10个时间单位
initial
clk=1'b0; //设置clk到0
always
#5 clk=~clk;
//控制复位信号reset以驱动设计块,0~15为高,15~195为低,195~205为高,然后变低
initial
begin
reset=1'b1;
#15 reset=1'b0;
#180 reset=1'b1;
#10 reset=1'b0;
#20 $finish;
end
//监视输出
initial
$monitor($time,"output q=%d,q);
endmodule
下面就可以运行仿真器了,以检测设计块功能的正确性。仿真的输出结果如图所示。
标签:reset,clk,clear,第三天,激励,Verilog,信号,设计,日志 来源: https://blog.csdn.net/weixin_43756556/article/details/121161312
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。