题解 | #位拆分与运算#
位拆分与运算
https://www.nowcoder.com/practice/1649582a755a4fabb9763d07e62a9752
有时序图可知,validout与out为组合逻辑输出。 当sel等于0时,上升沿采样d的值。
`timescale 1ns/1ns
module data_cal(
input clk,
input rst,
input [15:0]d,
input [1:0]sel,
output [4:0]out,
output validout
);
//*************code***********//
reg[15:0]d_reg;
always@(posedge clk or negedge rst)
if(!rst)
d_reg <= 16'b0;
else if(sel == 2'b00)
d_reg <= d;
else
d_reg <= d_reg;
assign validout = (sel == 2'b0) ? 1'b0 : 1'b1;
assign out = (sel == 2'd0)? 5'b0:
(sel == 2'd1)? d_reg[3:0] + d_reg[7:4]:
(sel == 2'd2)? d_reg[3:0] + d_reg[11:8]:
(sel == 2'd3)? d_reg[3:0] + d_reg[15:12]: 5'b0;
//*************code***********//
endmodule
