仅对英特尔可见 — GUID: bpv1661264480787
Ixiasoft
1.9. 在HDL代码中使用force语句
SystemVerilog中的force语句是一个对网络(net)和变量的连续过程赋值(continuous procedural assignment)。
将force语句应用于网络或者变量会覆盖该网络或变量的所有驱动器(driver)。在仿真中,您可以将force语句与release语句一起使用。然而,英特尔Quartus Prime软件综合仅支持使用force语句来覆盖一个网络(门输出,模块输出和连续赋值)的驱动器以及之前在特定网络或网络总线上进行的赋值。
注: 综合(synthesis)仅支持在初始模块内使用force语句。
综合(synthesis)中的force语句示例
以下是英特尔Quartus Prime软件综合支持的一些force语句示例:
使用force语句将Counter enable设置为0
以下是如何使用force语句将counter实例u1的en端口连接到逻辑0的一个示例:
module top(clk, rst, enable, dout); input clk, rst, enable; output [3:0] dout; counter u1(.clk(clk), .reset(rst), .en(enable), .q(dout)); initial begin force u1.en = 1'b0 end endmodule
您可以观察到force语句覆盖了en端口的另一个驱动器,即top模块的enable端口。
使用force语句更改连接
以下示例展示了如何使用force语句来更改设计中的连接:
module top(input [3:0] din, din1, output logic [3:0] dout, dout1, input clk, rst); dff i0(.din(din), .dout(dout), .clk(clk), .rst(rst) ); dff i1(.din(din1), .dout(dout1), .clk(clk), .rst(rst) ); endmodule module top_modified(input [3:0] din, din1, output logic [3:0] dout, dout1, input clk, rst); top i_top(.*); initial begin force i_top.i1.din = i_top.din; end endmodule
在此示例中,设计的top模块例化了dff模块的两个实例。top模块的din和din1端口驱动i0和i1实例的din端口。
假设您想要在不更改top模块中的RTL的情况下更改top模块中的连接。在这种情况下,您可以在wrapper模块(top_modified)中使用force语句,此模块成为一个新的top模块。在新的top模块中,使用force语句来修改top模块中的连接,以便i0和i1实例的din端口都由top模块的同一din端口进行驱动。force语句使用跨模块引用(XMR)来访问其下方层次结构中的信号。关于XMR的更多信息,请参考HDL代码中的跨模块引用(XMR)。
注:
关于此示例,除了创建一个用于例化top模块的wrapper top_modified,您还可以创建一个次级顶层实体并在此实体中进行force assignment,如下所示:
module secondary_top(input [3:0] din, din1, output logic [3:0] dout, dout1, input clk, rst); initial begin force top.i1.din = top.din; end endmodule