题解 | #位拆分与运算#
位拆分与运算
http://www.nowcoder.com/practice/1649582a755a4fabb9763d07e62a9752
`timescale 1ns/1ns
module data_cal(
input clk,
input rst,
input [15:0]d,
input [1:0]sel,
output [4:0]out,
output validout
);
reg [15:0] d_buf;
assign out = sel == 'd0 ? 'd0 :
sel == 'd1 ? d_buf[3:0] + d_buf[7:4]:
sel == 'd2 ? d_buf[3:0] + d_buf[11:8]:
sel == 'd3 ? d_buf[3:0] + d_buf[15:12]:
'd0;
assign validout = sel == 'd0 ? 1'b0 : 1'b1;
always @(posedge clk or negedge rst) begin
if (!rst) begin
d_buf <= 0;
end if (sel == 'd0) begin
d_buf <= d;
end
end
endmodule
