【数字IC/FPGA】Verilog中的force和release

在Verilog中,将force 用于variable会覆盖掉过程赋值 ,或者assign引导的连续(procedural assign)赋值 ,直到release 。

下面通过一个简单的例子展示其用法:

加法器代码

c 复制代码
module adder
(
input  logic [31:0] a,
input  logic [31:0] b,
output logic [31:0] sum
);
//sum
assign sum = a + b;
endmodule

测试平台代码(主要用于产生激励)

cpp 复制代码
module test;

logic [31:0] a;

logic [31:0] b;

logic [31:0] sum;

initial begin

  forever begin

      a = $urandom % 128;

      b = $urandom % 128;

      #10;

  end

end

//

initial begin

    #200 

    force u_adder.a = 32'd33;

    force u_adder.b = 32'd66;

    #200

    release u_adder.a;

    release u_adder.b;

end

initial begin

   $fsdbDumpfile("adder.fsdb");

   $fsdbDumpvars(0);

   $fsdbDumpMDA();

end

initial begin

   #1000

   $finish;

end

//inst

adder u_adder

(

 .a  (a  ),

 .b  (b  ),

 .sum(sum)

);

endmodule

如上所示,正常情况下,u_adder模块的a和b端口由testbench中的a和b信号驱动,然而,在时间为200ns处,u_adder模块的输入u_adder.a和u_adder.b被强制固定为33和66,如下代码所示。

cpp 复制代码
    #200 
    force u_adder.a = 32'd33;
    force u_adder.b = 32'd66;

又经过200ns后,release语句释放了u_adder.a和u_adder.b的强制赋值,如下代码所示:

cpp 复制代码
    #200
    release u_adder.a;
    release u_adder.b;

编写makefile文件,对上述代码进行仿真,其中,makefile文件的内容如下:

cpp 复制代码
all: listfile com sim verdi clean

listfile:
	find -name "*.sv" > filelist.f

com:
	vcs -full64 -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed -sverilog -debug_access -timescale=1ns/10ps \
	-f filelist.f -l com.log -kdb -lca 

sim:
	./simv -l sim.log +fsdb+force


verdi:
	verdi -sv -f filelist.f -ssf *.fsdb -nologo &

clean:
	rm -rf csrc *.log *.key *simv* *.vpd *DVE*
	rm -rf verdiLog *.fsdb *.bak *.conf *.rc *.f

这里,在运行simv文件时,需要加上+fsdb +force选项,即:

cpp 复制代码
./simv -l sim.log +fsdb+force

运行verdi查看波形,有下图:

可以看到,第200-400ns,加法器实际的输入a和b被固定为33和66,其值不再与testbench中的a, b绑定。另外,图中的紫色三角形分别表示该信号被force和release的时刻,被force强制指定的值,在显示的时候,前面会有一个^符号,例如上图中的^33 和^66。

相关推荐
hexiaoyan8273 小时前
互联卡设计方案:504-PCIE X16 金手指 FPGA Aurora协议互联卡
fpga开发·测试载板·互联卡·fpga aurora协议·夹板连接器·板卡互联
星夜离尘563 小时前
FPGA 二进制数如何变成十进制显示:可背压的逐位 BCD 转换器
fpga开发
匠行科技4 小时前
基于VPX架构的4路10GSPS ADC信号采集处理板
fpga开发
幻智星科技1 天前
蒙哥马利模乘FPGA优化实战
fpga开发·密码学
星夜离尘561 天前
FPGA 多通道 DAC 目标码影子寄存器:成组提交、同拍写入与快照边界
fpga开发
t_niu_niu1 天前
基于多帧累加平均的图像传感器暗电流抑制方法与 FPGA 实现
fpga开发·ram·fpn·固定模式噪声·image sensor
幻智星科技1 天前
FPGA纯硬件UDP桥接:微秒级响应新范式
c++·fpga开发·硬件架构
小蘇的FPGA1 天前
基于FPGA实现PCIe H2C过程中TAG的一种管理方法
fpga开发
威嵌神州1 天前
一台加固平板,能替掉几台现场设备?
嵌入式硬件·fpga开发·电脑·平板
幻智星科技2 天前
树形架构破解FPGA扇出瓶颈
fpga开发·硬件架构