题解 | #位拆分与运算#

位拆分与运算

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

全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务