CORRUPT_ON_ACTIVITY name itself indicates that corrupt signal if there is any activity .
It means that any combinational or sequential element can hold the current value until there is any activity on the dependent signals.
let us consider below example to understand the above statement.
Example (combo logic ) :
Design:
UPF:
create_power_domain TOP
Example (Sequential logic ) :
Design:
module top (input in1,clk,rst,output out);
always @ (posedge clk, posedge rst) begin
if (!rst) begin
out <= 1'b0 ;
end
else begin
out <= in1 ;
end
end
endmodule
UPF:
create_power_domain TOP
It means that any combinational or sequential element can hold the current value until there is any activity on the dependent signals.
let us consider below example to understand the above statement.
Example (combo logic ) :
Design:
module top (input in1,in2,output out);
assign out = in1 & in2;
endmodule
UPF:
create_power_domain TOP
add_power_state TOP.primary -state NORMAL_STATE { -supply_expr {power==`{FULL_ON, 1.2}} -simstate NORMAL}
add_power_state TOP.primary -state COA_STATE { -supply_expr {power==`{FULL_ON, 1.0}} -simstate CORRUPT_ON_ACTIVITY}
>> So here I have two states of power domain. One is NORMAL and another is CORRUPT_ON_ACTIVITY.
>> So when voltage value of power net of power domain TOP changes to 1.0 volt from 1.2 volt. After that it can hold on the last stable value of signal "out" until there is any change in signal "in1" or "in2".
>> If there is any change in signal "in1" or "in2" when the domain simstate is "CORRUPT_ON_ACTIVITY" , signal "out" will changes to 1'bx.
time = 20 ns in1 = 1 ; in1 = 1 ; out = 1'b1 ; simstate : NORMAL
time = 22 ns in1 = 1 ; in1 = 1 ; out = 1'b1 ; simstate : CORRUPT_ON_ACTIVITY
time = 30 ns in1 = 1 ; in1 = 0 ; out = 1'bx ; simstate : CORRUPT_ON_ACTIVITY
Design:
module top (input in1,clk,rst,output out);
always @ (posedge clk, posedge rst) begin
if (!rst) begin
out <= 1'b0 ;
end
else begin
out <= in1 ;
end
end
endmodule
UPF:
create_power_domain TOP
add_power_state TOP.primary -state NORMAL_STATE { -supply_expr {power==`{FULL_ON, 1.2}} -simstate NORMAL}
add_power_state TOP.primary -state COA_STATE { -supply_expr {power==`{FULL_ON, 1.0}} -simstate CORRUPT_ON_ACTIVITY}
>> So here I have two states of power domain. One is NORMAL and another is CORRUPT_ON_ACTIVITY.
>> So when voltage value of power net of power domain TOP changes to 1.0 volt from 1.2 volt. After that it can hold on the last stable value of signal "out" until there is any change in signal "clk" or "rst".
>> If there is any change in signal "clk" or "rst" when the domain simstate is "CORRUPT_ON_ACTIVITY" , signal "out" will changes to 1'bx.
time = 0 ns clk = 0 ; rst = 1; in1 = 1 ;out = 1'bx ; simstate : NORMAL
time = 10 ns clk = 1 ; rst = 1; in1 = 1 ; out =1 ; simstate : NORMAL
time = 20 ns clk = 0 ; rst = 1; in1 = 1 ;out =1 ; simstate : NORMAL
time = 22 ns clk = 0 ; rst = 1; in1 = 1 ; out =1 ; simstate : CORRUPT_ON_ACTIVITY
time = 30 ns clk = 1 ; rst = 1; in1 = 1 ; out =1'bx ; simstate : CORRUPT_ON_ACTIVITY
Nice Post.
ReplyDeleteCan you please tell me the difference between CORRUPT_ON_ACTIVITY and CORRUPT_ON_CHANGE?
Corrupt on activity means whenever there is change in input output will corrupt irrespective of whether that change in input will change the current state of output or not .
ReplyDeleteCorrupt on change means output will be corrupted only if the change in input causes change in current state or value of output .
What is the difference between voltage domain and power domain ?
ReplyDeletecan a single power domain can have more than multiple voltage ?
can a single voltage domain can have multiple power domains ?
There is not a specific term called as voltage domain .Yes single power domain can have multiple voltages . i.e primary and secondary voltages.
ReplyDelete