题解 | #位拆分与运算#

位拆分与运算

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届秋招##你的秋招进展怎么样了##硬件人如何看待稚晖君从华为离职#
全部评论

相关推荐

02-08 20:56
已编辑
南京工业大学 Java
在等offer的比尔很洒脱:我也是在实习,项目先不说,感觉有点点小熟悉,但是我有点疑问,这第一个实习,公司真的让实习生去部署搭建和引入mq之类的吗,是不是有点过于信任了,我实习过的两个公司都是人家正式早搭好了,根本摸不到部署搭建的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务