题解 | #位拆分与运算#

位拆分与运算

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 reg [4:0]out,
output reg validout
);
//*************code***********//
reg [15:0]datain;
always@(posedge clk or negedge rst)
if(!rst)
    datain <= 16'd0;
else if(sel == 2'd0)
    datain <= d;

always@(*)
if(!rst)
    out = 5'b0;
else case(sel)
2'd0:
out = 5'b0;
2'd1:
out = datain[3:0] + datain[7:4];
2'd2:
out = datain[3:0] + datain[11:8];
3'd3:
out = datain[3:0] + datain[15:12];
default:
out = 5'b0;
endcase
always@(*)
if(!rst)
    validout = 0 ;
else if(sel == 2'b0)
    validout = 0 ;
else 
    validout = 1 ;
//*************code***********//
endmodule

这个题有两个关键地方。

1, sel == 2‘d0 的时候,输入才有效。所以在sel ==2’d0 的时候才锁存输入。

2,从波形上面来看,这里应该用组合逻辑来实现。不应该用时序逻辑。

#如何看待2023届秋招##你的秋招进展怎么样了##硬件人如何看待稚晖君从华为离职#
全部评论

相关推荐

牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
想去夏威夷的小哥哥在度假:5和6才是重点
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务