题解 | #位拆分与运算#
位拆分与运算
https://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
);
//*************code***********//
//首先一定要声明out与validout是reg型,否则会一直报错无法编译
reg out;
reg validout;
reg [15:0] d_temp;
//这里采用两段式或者一段式均可以,最重要的是这不是边沿触发型而是电平触发型;
//其次是输入信号d只有在sel时才会有效,因此需要设置一个锁存器来存储d_temp;
always @ (clk) begin
if(~rst) begin
out=0;
validout=0;
d_temp=0;
end
else begin
case(sel)
2'b0: begin
d_temp=d;
out=0;
validout=0;
end
2'd1: begin
d_temp=d_temp;
out=d_temp[3:0]+d_temp[7:4];
validout=1;
end
2'd2: begin
d_temp=d_temp;
out=d_temp[3:0]+d_temp[11:8];
validout=1;
end
2'd3: begin
d_temp=d_temp;
out=d_temp[3:0]+d_temp[15:12];
validout=1;
end
endcase
end
end
//*************code***********//
endmodule
#verilog刷题记录##悬赏#