上海智能模板建站,泉州人才网,京东客网站怎么做,《建设工程质量管理条例》在Verilog中#xff0c;将force用于variable会覆盖掉过程赋值#xff0c;或者assign引导的连续#xff08;procedural assign#xff09;赋值#xff0c;直到release。 下面通过一个简单的例子展示其用法#xff1a; 加法器代码
module adder
(
input logic [31:0] a,
…在Verilog中将force用于variable会覆盖掉过程赋值或者assign引导的连续procedural assign赋值直到release。 下面通过一个简单的例子展示其用法 加法器代码
module adder
(
input logic [31:0] a,
input logic [31:0] b,
output logic [31:0] sum
);
//sum
assign sum a b;
endmodule测试平台代码主要用于产生激励
module test;logic [31:0] a;logic [31:0] b;logic [31:0] sum;initial beginforever begina $urandom % 128;b $urandom % 128;#10;endend//initial begin#200 force u_adder.a 32d33;force u_adder.b 32d66;#200release u_adder.a;release u_adder.b;endinitial begin$fsdbDumpfile(adder.fsdb);$fsdbDumpvars(0);$fsdbDumpMDA();endinitial begin#1000$finish;end//instadder 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如下代码所示。 #200 force u_adder.a 32d33;force u_adder.b 32d66;又经过200ns后release语句释放了u_adder.a和u_adder.b的强制赋值如下代码所示 #200release u_adder.a;release u_adder.b;编写makefile文件对上述代码进行仿真其中makefile文件的内容如下
all: listfile com sim verdi cleanlistfile:find -name *.sv filelist.fcom:vcs -full64 -cpp g-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed -sverilog -debug_access -timescale1ns/10ps \-f filelist.f -l com.log -kdb -lca sim:./simv -l sim.log fsdbforceverdi: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文件时需要加上fsdbforce选项即
./simv -l sim.log fsdbforce运行verdi查看波形有下图 可以看到第200-400ns加法器实际的输入a和b被固定为33和66其值不再与testbench中的a, b绑定。另外图中的紫色三角形分别表示该信号被force和release的时刻被force强制指定的值在显示的时候前面会有一个^符号例如上图中的^33和^66。