题解 | #位拆分与运算#

位拆分与运算

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***********//
reg validout;
reg [4:0] out;
reg [15:0] temp;
always  @(posedge clk or negedge rst)
begin
if(!rst)begin
    out[4:0]<=5'b0;
    validout<=0;
    temp[15:0]<=16'b0;
end
else 
begin
    case(sel)
     0:
     begin
     temp<=d;
     out<=0;
     validout<=0;
     end
    
     1:
     begin
     out[4:0]<=temp[3:0]+temp[7:4];
     validout<=1'b1;
     end
     
     2:
     begin
     out[4:0]<=temp[3:0]+temp[11:8];
     validout<=1'b1;
     end

     3:
     begin
     out[4:0]<=temp[3:0]+temp[15:12];
     validout<=1'b1;
     end

     default:
     begin
      out[4:0]<=5'b0;
     validout<=1'b0;
     end
    endcase
end
end




//*************code***********//
endmodule

本题首先想到用case语句,需要注意题干中sel=0才输入有效。通过观察给的时序图。发现sel=1.2.3都是根据sel=0时的数据进行操作的,因此需要进入中间变量对d值进行锁存。此外case语句使用时,需要加begin end 不加不知道为啥报错了

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 11:33
点赞 评论 收藏
分享
07-09 15:55
门头沟学院 Java
点赞 评论 收藏
分享
06-17 00:26
门头沟学院 Java
程序员小白条:建议换下项目,智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend 智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem 选项目要选自己能掌握的,然后最好能自己拓展的,分布式这种尽量别去写,不然你只能背八股文了,另外实习的话要多投,尤其是学历不利的情况下,多找几段实习,最好公司title大一点的
无实习如何秋招上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务