题解 | #位拆分与运算#
位拆分与运算
http://www.nowcoder.com/practice/1649582a755a4fabb9763d07e62a9752
/* 提醒:一定要注意题干的这句话:sel=0时: 不输出且只有此时的输入有效 ! 所以sel=0时,数据才能送入寄存器保存,并当sel为其他数值时,针对sel=0时输入的数值进行位拆分与运算! 并且要完全吻合题目给出的逻辑的话,就不能把位拆分后的数放入新的四个4位寄存器再进行运算,因为那样会多出一个时钟的延迟, 直接进行位拆分后的运算即可 */ `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 [3:0]data1,data2,data3,data4; reg validout; reg out; reg [15:0]d1; //选择输出数值 always @(posedge clk or negedge rst) begin if(!rst) begin out<=0; validout<=0; d1<=0; end else begin case(sel) 2'd0:begin d1<=d; out<=0; validout<=0; end 2'd1:begin out<=d1[3:0]+d1[7:4]; validout<=1'd1; end 2'd2:begin out<=d1[3:0]+d1[11:8]; validout<=1'd1; end 2'd3:begin out<=d1[3:0]+d1[15:12]; validout<=1'd1; end default:out<=0; endcase end end // always @(posedge clk) // begin // data1<=d1[3:0]; // data2<=d1[7:4]; // data3<=d1[11:8]; // data4<=d1[15:12]; // end //**code// endmodule