Что ж, если вы настаиваете на том, чтобы по какой-то причине вы сохраняли его в троичной форме, ваша читаемость значительно повысилась бы, если бы вы просто правильно отформатировали его.
const bool cond1 = MEMWBRegWrite && MEMWBrd != 0 &&
!(EXMEMRegWrite == 1 && EXMEMrd != 0 && EXMEMrd == IDEXrs) &&
MEMWBrd == IDEXrs;
ForwardA = cond1
? 2'b01
: ((EXMEMRegWrite && EXMEMrd != 0 && EXMEMrd == IDEXrs) ? 2'b10 : 0);
const bool cond2 = IDEXTest == 0 &&
MEMWBRegWrite && MEMWBrd != 0 &&
!(EXMEMRegWrite == 1 && EXMEMrd != 0 && EXMEMrd == IDEXrt) &&
MEMWBrd == IDEXrs;
ForwardB = cond2
? 2'b01
: ((EXMEMRegWrite && EXMEMrd != 0 && EXMEMrd == IDEXrt && IDEXTest == 0) ? 2'b10 : 0);
Теперь этот код отформатирован так, как если бы он был на C ++, а не на том, что вы на самом деле используете, но теперь становится намного легче понять, что происходит.
Однако я хотел бы отметить, что ваши операторы if не могут соответствовать вашим троичным выражениям. Ваши операторы if не имеют предложения else, а троичные выражения всегда имеют предложения else. Однако, поскольку ваш вопрос даже не дает полной ясности, пытаетесь ли вы преобразовать операторы if в троичные выражения или троичные выражения в операторы if, немного сложно дать вам именно то, что вы хотите.
EDIT : Тернарные выражения всегда содержат предложения if и else. Вы не можете напрямую превратить оператор if без предложения else в троичный, потому что у вас не будет остальной части троичного. Теперь вы можете использовать некоторые приемы в некоторых случаях, если вам нужно, например, установить переменную для себя. Например,
ForwardA = cond1 ? newValue : FordwardA;
Вы в основном говорите не изменять значение в предложении else - но это предполагает, что вы присваиваете результат переменной. Чем сложнее выражение, тем сложнее его реализовать, и тем более запутанным становится код, когда вы это делаете. Не говоря уже о том, что в зависимости от того, какие оптимизации выполняет или не делает компилятор, он может назначать переменную себе, что не очень эффективно.
Вообще говоря, перевод операторов if без предложений else в троичные выражения является плохой идеей. Это может быть сделано только путем использования трюков, вместо того, чтобы прямо сказать, что вы имеете в виду, и это только усложняет ситуацию. И этот код достаточно сложен, как есть.
Я бы посоветовал не использовать здесь троицу, если вам это действительно не нужно. И если вы делаете, по крайней мере, сломать выражение. Даже если ваше троичное выражение было правильным, его намного сложнее читать, чем операторы if.
РЕДАКТИРОВАТЬ 2 : Если вам действительно нужно, чтобы это было троичное выражение, то я бы посоветовал вам сесть и выяснить точные условия, при которых ForwardA должен быть тем или иным набором значений, и создать троичное выражение, основанное на этом, вместо того, чтобы пытаться напрямую преобразовать операторы if, которые у вас есть (и то же самое для ForwardB). Ваши if-statments не только решают, какое значение назначить каждой переменной, но и какую переменную назначить этому значению, и это значительно усложняет ситуацию.
В других языках (я не знаю о verilog) вы можете использовать троичное выражение для выбора, какой переменной присваивать значение в дополнение к тому, что вы делаете в правой части выражения, но это действительно сложно. Лучше всего создать временный объект, содержащий значение, которое должно быть назначено, и отдельный троичный объект, чтобы определить, какой переменной присвоить его.
Не зная verilog, я действительно не знаю, что вы можете и не можете сделать с помощью операторов if и троичного выражения, но я думаю, что должен быть лучший способ справиться с этим, чем использование троичного. Может и нет, но то, что вы пытаетесь сделать, очень сложно и подвержено ошибкам.