题目
现在输入了一个压缩的16位数据,其实际上包含了四个数据[3:0][7:4][11:8][15:12],要求根据sel选择输出四个数据的相加结果,并输出valid_out信号(在不输出时候拉低),选择信息sel与输入d、输出out的关系如下表。
sel | out |
---|---|
0 | 不输出且只有此时的输入有效 |
1 | 输出d[3:0]+d[7:4] |
2 | 输出d[3:0]+d[11:8] |
3 | 输出d[3:0]+d[15:12] |
答案
`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] sr_d;
reg [4:0] sr_out;
always @(posedge clk or negedge rst)
if(!rst)
sr_d <= 16'd0;
else if(sel == 2'b0)
sr_d <= d;
else
sr_d <= sr_d;
always @(*)
if(!rst)
sr_out <= 'd0;
else
case(sel)
2'b00: sr_out = 'd0;
2'b01: sr_out = sr_d[3:0] + sr_d[7:4];
2'b10: sr_out = sr_d[3:0] + sr_d[11:8];
2'b11: sr_out = sr_d[3:0] + sr_d[15:12];
default:sr_out = 'd0;
endcase
assign out = sr_out;
assign validout = (sel==2'b00) ? 1'b0 : 1'b1;
//*************code***********//
endmodule