题解 | #并串转换#
理解题意:如果输入的d = 0101,则:当 valid_in 有效时(即为高电平),采取d的值,存入 data 中,将 data 从高位向低位输出,即 dout依次输出 0、1、0、1。那么 valid_in在什么时候有效呢,就是在data的值全部输出完成过后,将valid_in 拉高,就是需要四个时钟周期,此时我们就需要定义一个计数器 cnt,来计数从0~3,共四个数,当 cnt == 3时,valid_in <= 1;此时逻辑就是很清楚了,代码如下:
`timescale 1ns/1ns
module huawei5(
input wire clk ,
input wire rst ,
input wire [3:0]d ,
output wire valid_in ,
output wire dout
);
//*************code***********//
reg [1:0]cnt;
reg [3:0]data;
reg valid;
assign valid_in = valid;
assign dout = data[3];
always@(posedge clk or negedge rst)
if(!rst)
cnt <= 2'd0;
else cnt <= cnt == 2'd3 ? 0 : cnt + 1;
always@(posedge clk or negedge rst)
if(!rst)
valid = 1'b0;
else if(cnt == 2'd3)
valid <= 1'b1;
else valid <= 1'b0;
always@(posedge clk or negedge rst)
if(!rst)begin
data <= 4'd0;
end
else
data <= cnt == 2'd3 ? d : {data[2:0],1'b0};
//*************code***********//
endmodule
查看20道真题和解析