强制所有X为0

时间:2017-03-23 01:49:52

标签: verilog

我有一个6位输入值,在整个逻辑中我想确保没有X(它们是未初始化的值(?))。无论如何,我可以强迫它确保其中的任何X都是0而不是X.我和它有什么关系吗?

module m(
   input [5:0] switches,
);

endmodule;

任何帮助都会很棒!

3 个答案:

答案 0 :(得分:0)

您可以使用其他初始化信号对其进行屏蔽。 例如。假设您知道条件init_condition之后,您的输入中不再有X:

logic init_mask;
always_ff @(posedge clk, negedge rstn)
    if (!rstn) init_mask <= 1'b0;
    else if (init_condition) init_mask <= 1'b1;

assign outp = {6{init_mask}} & switches;

当复位为低时,init_mask FF设置为0,同时将输出屏蔽为零。当init_condition在时钟的位置被捕获为高时,init_mask FF被设置为1,并且您的switches输入将通过未屏蔽的输出。{/ p >

答案 1 :(得分:0)

通常在硬件中,双触发器同步器可用于删除let Source = List.Times(#time(0,0,0) , 1440, #duration(0,0,1,0)), convertToTable = Table.FromList(Source, Splitter.SplitByNothing(), {"DayTime"}, null, ExtraValues.Error), createTimeKey = Table.AddColumn(convertToTable, "TimeKey", each Time.ToText([DayTime], "HHmmss")), hourIndex = Table.AddColumn(createTimeKey, "HourIndex", each Time.Hour([DayTime])), minuteIndex = Table.AddColumn(hourIndex, "MinuteIndex", each Time.Minute([DayTime])), setDataType = Table.TransformColumnTypes(minuteIndex,{{"DayTime", type time}, {"TimeKey", type text}, {"HourIndex", Int64.Type}, {"MinuteIndex", Int64.Type}}) in setDataType 值。但是,只有在X一段时间内,这才有效。

如果您有X常数,那么我认为没有数字硬件可以将其转换为有效的X0

这是双触发器同步器的代码。

1

答案 2 :(得分:0)

这不是可合成的,但如果您尝试在测试平台中屏蔽X,则可以使用case equality运算符===来检查{{ 1}}或X

Z