Нельзя использовать вложенные блоки всегда, потому что это , а не часть определения языка.
Модуль verilog состоит из операторов assign
, процедурных блоков (always
,initial
, final
) и instances
других модулей (или других элементов дизайна).
Процедурные блоки могут содержать алгоритмический код и операторы управления событиями, но они не могут содержать элементы, которые принадлежатуровень модуля.
Чтобы выразить иерархию, вы создаете экземпляры модулей внутри других модулей.
В вашем случае вы можете выразить свою логику за один флоп, что-то вроде следующего:
always_ff @(posedge clk) begin
unique casez(OP)
3'b000:
data_out <= 8'b00000000;
3'b001:
data_out <= {data_in[7], data_in[7:1]}; ;
3'b010:
data_out <= {data_in[6:0], zero}; ;
...
endcase
end
Вы должны пройти учебники Verilog, чтобы овладеть языком.