赋值操作符
+=和其他赋值操作符
out += in;//将out和in相加并将结果赋值给out
//out = out + in;
注意:这些操作符都是阻塞赋值
packdage definitions;typedef enum logic[2:0] {ADD,SUB,MULT,DIV,SL.SR} opcode_t;typedef enum logic{UNSIGNED,SIGNED}operand_type_t;typedef union packed{logic[23:0] u_data;logic signed[23:0] s_data;}data_t;typedef struct packed{opcode_t opc;operand_type_t op_type;data_t op_a;data_t op_b;}instruction_t;
endpackageimport definitions::*;//将包导入$unint域module alu(input instruction_t instr,outpout data_t alu_out);always_combbeginif(instr.op_type == SIFNED)beginalu_out.s_data = instr.op_a.s_data ;unique case(instr.opc)ADD:alu_out.s_data += instr.op_b.s_data ;SUB:alu_out.s_data -= instr.op_b.s_data ;MULT:alu_out.s_data *= instr.op_b.s_data ;DIV:alu_out.s_data /= instr.op_b.s_data ;SL:alu_out.s_data <<<= 2;SR:alu_out.s_data >>>= 2 ;encaseendelsebeginalu_out.s_data = instr.op_a.u_data ;unique case(instr.opc)ADD:alu_out.u_data += instr.op_b.u_data ;SUB:alu_out.u_data -= instr.op_b.u_data ;MULT:alu_out.u_data *= instr.op_b.u_data ;DIV:alu_out.u_data /= instr.op_b.u_data ;SL:alu_out.u_data <<<= 2;SR:alu_out.u_data >>>= 2 ;encaseendend
endmodule