题解 | #位拆分与运算#
位拆分与运算
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***********// //首先一定要声明out与validout是reg型,否则会一直报错无法编译 reg out; reg validout; reg [15:0] d_temp; //这里采用两段式或者一段式均可以,最重要的是这不是边沿触发型而是电平触发型; //其次是输入信号d只有在sel时才会有效,因此需要设置一个锁存器来存储d_temp; always @ (clk) begin if(~rst) begin out=0; validout=0; d_temp=0; end else begin case(sel) 2'b0: begin d_temp=d; out=0; validout=0; end 2'd1: begin d_temp=d_temp; out=d_temp[3:0]+d_temp[7:4]; validout=1; end 2'd2: begin d_temp=d_temp; out=d_temp[3:0]+d_temp[11:8]; validout=1; end 2'd3: begin d_temp=d_temp; out=d_temp[3:0]+d_temp[15:12]; validout=1; end endcase end end //*************code***********// endmodule#verilog刷题记录##悬赏#