作者:李秋凤,华清远见嵌入式学院讲师。
仿真可以分为前仿真和后仿真,前仿真是功能仿真,目标是分析电路的逻辑关系的正确性,仿真速度快,可以根据需要观察电路输入输出端口和电路内部任一信号和寄存器的波形,后仿真是将电路的门延迟参数和各种电路单元之间的连线情况考虑在内后进行仿真,得到的仿真结果接近真实的应用情况,后仿真的速度相对于前仿真慢得多,在观测内部节点波形时比较困难,在一个完整的电路设计中应该包括这两个过程。
下面是简单的数字电路,代码及综合后的RTL网表如下:
`timescale 1ns/1ps
module ml(clk,in1,in2,in3,out);
input clk;
input in1,in2,in3;
output out;
wire w1,w2;
reg d1,d2;
assign w1=~(in1&in2);
always@(posedge clk)
d1<=w1;
assign w2=~d1;
always@(posedge clk)
d2<=w2;
assign ut= d2^in3;
endmodule
分析上面代码可以看出,上面只是反映的是逻辑功能,实际上,每个门电路都有工作延时,如果考虑到工作延时,则代码需要进行修改,修改后的代码更能反映电路的实际工作情况
`timescale 1ns/1ps
module ml(clk,in1,in2,in3,out);
input clk;
input in1,in2,in3;
output out;
wire w1,w2;
reg d1,d2;
parameter delay1=1,delay2=2;
assign # delay1 w1=~(in1&in2);
always@(posedge clk)
d1<= # delay2 w1;
assign # delay1 w2=~d1;
always@(posedge clk)
d2<= # delay2 w2;
assign # delay1 ut= d2^in3;
endmodule
这段代码中定义了两个延时参数,分别对应组合逻辑的门延时和寄存器的传输延时,这里的延时与真正的门延时在具体数值上是不同的,但是这种每次赋值操作时都加入延时的方法有助于对电路后仿真时可能的延时情况给出定性分析的结果。
“本文由华清远见https://www.embedu.org/index.htm提供”
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。