用户工具

站点工具


edastudy:verilog

verilog

vcs仿真参考 vcs使用

1. 异步复位

异步复位,同步释放,复位释放时需和clk满足时序关系。

always@(posedge clk or negedge rst_n) begin
  if (!rst_n) begin
  end else begin
  end
end

2. 同步复位

同步复位时,rst_n拉低, 时钟需要一直有。

always@(posedge clk) begin
  if (!rst_n) begin
  end else begin
  end
end

3. 无毛刺切换电路

4. 操作符优先级

5. 驱动强度

Drive strength
four driving strengths:

supply strong pull weak
assign (strong1, pull0) mynet = enable ;

The charge strength specification shall be used only with trireg nets.
three charge storage strengths:

large medium small
# Strength name Strength level
# supply0 7
# strong0 6
# pull0 5
# large0 4
# weak0 3
# medium0 2
# small0 1
# highz0 0
# highz1 0
# small1 1
# medium1 2
# weak1 3
# large1 4
# pull1 5
# strong1 6
# supply1 7

6. define使用

# `` 拼接
 
`define  NAME   yb
`define  INST   `NAME``_inst    等价于yb_inst
# args方式
# 比如有如下define定义
`define append(f) f``_master 
 
# 当使用时
`append(clock) 等价于 clock_master
`define H(x) "Hello, x"
 
$display(`H(world));
#打印内容
Hello, world

7. fwrite

module file_test(
 
    );
reg [3:0]data[0:15];
reg [3:0]data2[0:15];
integer handle1;
integer i=0;
initial
begin
    $readmemb("num.txt",data);//默认文件在工程所在路径目录
 
    handle1 = $fopen("num2.txt","w");
    repeat(16)
    begin
        $fwrite(handle1,"%d\n",data[15-i]);
        i = i+1;
    end
    $fclose(handle1);
end
endmodule

8. module parameter

如果port width是参数

module a #(parameter WIDTH=8) (
    input [WIDTH-1:0] datai,
    output [WIDTH-1:0] datao
);
assign datao = datai;
endmodule

9. generate

wire  [7:0]	d;
wire  [7:0]	q;
wire  [7:0]	q2;
 
a u_a[7:0] (
  .clk	  (clk),
  .rst_n  (rst_n),
  .d      (d[7:0]),
  .q      (q[7:0])
);
 
genvar i;
generate
for (i=0;i<8;8=i+1) begin: a2inst
a u_a2 (
  .clk	  (clk),
  .rst_n  (rst_n),
  .d      (d[i]),
  .q      (q2[i])
);
end
endgenerate

10. 加延时

initial begin
  forever #5 clk = ~clk;
end
 
initial begin
  #5 rst_n = 1'b1;
end
 
assign #1 clk2 = clk1;
 
always @(posedge clk)
  data2 <= #1 data1;

11. 仿真force注意

force某一个net时,要意识到,其它这个force会前后传递的
不只是当前看到的PIN的值被force成期望值,而且从这个点向两个方向都会传递值,传递出去的值可能不是仿真预期的,最后造成仿真FAIL。

如果不想影响更多的点,可能是要想办法把线给断开,只有期望点才会被force。

edastudy/verilog.txt · 最后更改: 2025/06/03 16:27 由 user01

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki