知名外贸网站建设公司,河南省住房城乡与建设厅网站,博达网站建设教程,it外包前景LV5_位拆分与运算 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1tabVerilog篇topicId301)
题目
题目描述#xff1a;
现在输入了一个压缩的16位数据#xff0c;其实际上包含了四个数据…LV5_位拆分与运算 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1tabVerilog篇topicId301)
题目
题目描述
现在输入了一个压缩的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
代码
timescale 1ns/1nsmodule data_cal(input clk,input rst,input [15:0]d,input [1:0]sel,output reg [4:0]out,output reg validout
);
//*************code***********//
/*代码思路先将d分为4个单独的变量
根据sel的值来选择不同的输出case语句
*/ reg [15:0] enable_in; //定义一个寄存器变量来存储有效输入时d的值reg [3:0] data1,data2,data3,data4 ;always (*) beginif(sel 0) begin //sel0,只有此时的输入有效 将此时的d的值存起来enable_in d;data1 enable_in[3:0];data2 enable_in[7:4];data3 enable_in[11:8];data4 enable_in[15:12]; endend//case循环根据sel的值来执行不同的输出always (posedge clk or negedge rst) beginif(!rst) beginvalidout 0;out 0;endelse begincase (sel)2d0 : beginout 0;validout 0;enable_in d;end2d1 : beginout data1 data2;validout 1;enable_in 0;end2d2 : beginout data1 data3;validout 1;enable_in 0;end2d3 : beginout data1 data4;validout 1;enable_in 0;enddefault : beginout 0;validout 0;enable_in 0;endendcaseendend//*************code***********//
endmodule