微信公众号 做不了微网站吗,在线平面设计工具,网页设计页面制作步骤,枣阳建设局网站描述
题目描述#xff1a;
现在输入了一个压缩的16位数据#xff0c;其实际上包含了四个数据[3:0][7:4][11:8][15:12],
现在请按照sel选择输出四个数据的相加结果,并输出valid_out信号#xff08;在不输出时候拉低#xff09;
0: 不输出且只有此时的输入有…描述
题目描述
现在输入了一个压缩的16位数据其实际上包含了四个数据[3:0][7:4][11:8][15:12],
现在请按照sel选择输出四个数据的相加结果,并输出valid_out信号在不输出时候拉低
0: 不输出且只有此时的输入有效
1输出[3:0][7:4]
2输出[3:0][11:8]
3输出[3:0][15:12]
信号示意图 波形示意图 输入描述
输入信号 d, clk, rst 类型 wire在testbench中clk为周期5ns的时钟rst为低电平复位
输出描述
输出信号 validout out 类型 reg
解题分析 寄存器的位是可以分开单独运算的并不是一个输入就一定是一个数据在很多情况下一个输入既包括数据又包括地址等其他有效信息 需要考虑数据锁存的问题一定要在sel为0的时候进行锁存只有此时的写入才是有效的validout的下降沿写入有效同时存在多种情况且没有优先级问题建议使用case语句
代码如下
timescale 1ns/1nsmodule data_cal(
input clk,
input rst,
input [15:0]d,
input [1:0]sel,output [4:0]out,
output validout
);
reg [4:0]out;
reg validout;
reg [15:0] dreg;
//*************code***********//
always (posedge clk or negedge rst)beginif(~rst)beginvalidout 0;out 0;dreg 0;endelsebegincase(sel)d0:begindreg d; out 0; validout 0; endd1:beginout dreg[7:4] dreg[3:0]; validout 1; endd2:beginout dreg[11:8] dreg[3:0]; validout 1; endd3:beginout dreg[15:12] dreg[3:0]; validout 1; endendcaseendend//*************code***********//
endmodule
波形图