题解 | #多功能数据处理器#
多功能数据处理器
https://www.nowcoder.com/practice/e009ab1a7a4c46fb9042c09c77ee27b8
`timescale 1ns/1ns module data_select( input clk, input rst_n, input signed[7:0]a, input signed[7:0]b, input [1:0]select, output reg signed [8:0]c ); always@(posedge clk or negedge rst_n)begin if(!rst_n)begin c <= 9'b0; // c_bu <= 9'b0; end else begin case(select) 2'b00:c <= a; 2'b01:c <= b; 2'b10:begin // // c_bu <= a_bu + b_bu; // case(c_bu[8]) // 1'b0:c <= c_bu; // 1'b1:c <= {c_bu[8],~{c_bu[7:0] - 1'b1}}; // default: c <= 9'b0; // endcase c <= a + b; end 2'b11:begin // c_bu <= cfu_bu; // case(cfu_bu[8]) // 1'b0:c <= cfu_bu; // 1'b1:c <= {cfu_bu[8],~{cfu_bu[7:0] - 1'b1}}; // default: c <= 9'b0; // endcase // end // default:c <= 9'b0; // endcase c <= a - b; end endcase end end endmodule
电路中signed类型的数据保存格式为补码而非传统二进制,所以对有符号数的加减直接进行就可以了