题解 | #乘法与位运算#
乘法与位运算
https://www.nowcoder.com/practice/e41980b698624eb2b20c0d6e2bee7f45
`timescale 1ns/1ns module dajiang13( input [7:0] A, output [15:0] B ); //*************code***********// // 关键: 使用移位来进行乘法操作 // 即:A[7:0]*8'b11111011 == A[7:0]*(9'b100000000-8'b00000100-8'b00000001) // 而A[7:0]*8'b00000100 == {8'b0, A[7:0]} << 2 == {6'b0, A[7:0], 2'b0}; // 而A[7:0]*9'b100000000 == {8'b0, A[7:0]} << 8 == {A[7:0], 8'b0}; // 而A[7:0]*8'b00000001 == {8'b0, A[7:0]} << 0 == {8'b0, A[7:0]}; wire c; assign {c, B[10:0]} = {A[2:0], 8'b0} - {1'b0, A, 2'b0} - {3'b0, A}; assign B[15:11] = A[7:3]-c; //*************code***********// endmodule 分成两段:[15:11] 以及 [10:0]