题解 | #并串转换#

理解题意:如果输入的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

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-01 13:13
ecece:这么明目张胆虚报就业率啊
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务