日常记录(91)分频、序列检测、建立保持时间、DVE操作
作者:互联网
三分频器
https://zhuanlan.zhihu.com/p/367798872
module taa (output clk_o, input clk_i, rst_n);
reg [3:0] cnt;
reg clk1, clk2;
assign clk_o = clk1 ^ clk2;
always @(posedge clk_i, negedge rst_n) begin
if (!rst_n) begin
cnt <= 0;
clk1 <= 0;
end else if (cnt == 2'h2) begin
clk1 <= ~clk1 ;
cnt <= 0;
end else begin
cnt <= cnt + 1;
end
end
always @(negedge clk_i, negedge rst_n) begin
if (!rst_n) begin
clk2 <= 0;
end else if (cnt == 2'h1) begin
clk2 <= ~clk2;
end
end
endmodule
测试
vcs -sverilog -R test_taa.sv taa.sv -gui
点击查看代码
module test_taa ();
logic clk_o, clk_i, rst_n;
taa taa_inst(clk_o, clk_i, rst_n);
initial begin
clk_i = 0;
forever begin
#1 clk_i = ~clk_i;
end
end
initial begin
rst_n = 0;
#100 rst_n = 1;
end
endmodule
序列检测器
https://blog.csdn.net/SummerXRT/article/details/118879287
状态机和移位方式,检测111序列。
module taa (output zo, input x, clk, rst_n);
reg [1:0] state, next_state;
parameter A = 2'b00;
parameter B = 2'b01;
parameter C = 2'b10;
parameter D = 2'b11;
always @(posedge clk, negedge rst_n) begin
if (!rst_n) begin
state <= A;
next_state <= A;
end else begin
state <= next_state;
end
end
always @(state, x) begin
case(state)
A:if (x) begin
next_state = B;
end else begin
next_state = A;
end
B:if (x) begin
next_state = C;
end else begin
next_state = A;
end
C:if (x) begin
next_state = D;
end else begin
next_state = A;
end
D:if (x) begin
next_state = D;
end else begin
next_state = A;
end
endcase
end
assign zo = (state == D);
endmodule
module tbb (output z, input x, clk, rst_n);
reg [2:0] q;
always @(posedge clk, negedge rst_n) begin
if(!rst_n) begin
q <= 3'b0;
end else begin
q <= {q[1:0], x};
end
end
assign z = (q == 3'b111);
endmodule
测试
vcs -sverilog test_taa.sv taa.sv tbb.sv -R -gui
module test_taa ();
logic clk, rst_n;
logic z, x;
/* taa taa_inst(z, x, clk, rst_n); */
tbb tbb_inst(z, x, clk, rst_n);
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
end
initial begin
rst_n = 0;
#100;
rst_n = 1;
end
initial begin
forever begin
#10
x = $random();
end
end
initial begin
#1000000
$finish;
end
endmodule
建立、保持时间和亚稳态--从门电路来看
- STA(静态时序分析),时序验证,主要检查建立保持时间是否存在违例。
- STA在功能仿真、综合、综合后的仿真之后进行。
https://mp.weixin.qq.com/s/cuspahsUouq4uWnuBfP-ng
在以RS锁存器构成的D触发器实现后
当信号从外部传递,需要在CLK为低电平,等待信号传入到第一段RS锁存器,经历两次门电路和线网的数据传递后,达到信号稳定,得到输入。
输入后,需要在CLK为高电平,信号维持一定时间等待第二段RS锁存器经历各种电路以及开关,达到数据稳定输出。
- 建立保持时间影响了系统最大时钟频率。
DVE的force value
- 选中信号,实现force value,在面向soc的验证上,在中间过程对bug假定修复,节约从验证到设计的修复时间。
- force 的freeze是持久性,deposit模式是一次性的。
DVE的expand time
在仿真前,使能simulator->CaptureDelta cycle values,然后记录相应波形信号。在波形对应的时间点,单击右键,选择"Expand Time",接下来时钟沿附近各个变量的变化顺序将显现出来。
DVE的在特定实例下的断点
DVE跟踪信号变化和驱动
DVE的时间点回退
首先记录(add checkpoint),后续可以选择回退到该点
VCS常用tcl命令
- 实现自动化
restart重启
finish结束
get获得信号
force强制信号
release释放强制
dump保存波形
do 执行tcl脚本
vbus创建虚拟总线
标签:分频,begin,end,clk,DVE,91,taa,rst 来源: https://www.cnblogs.com/bai2022/p/16349433.html