题解 | #乘法与位运算#

乘法与位运算

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]

全部评论

相关推荐

今年会有offer吗:一眼代码相似度过高
投递华为等公司10个岗位
点赞 评论 收藏
分享
牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务