题解 | #并串转换#

并串转换

https://www.nowcoder.com/practice/296e1060c1734cf0a450ea58dd09d36c

`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] buffer        ;
reg        valid         ;

always@(posedge clk or negedge rst)begin
    if(!rst)
	    CNT <= 'd0        ;
    else if(CNT == 'd3)
	    CNT <= 'd0        ;  
    else 
	    CNT <= CNT + 1'd1 ;
end

always@(posedge clk or negedge rst)begin
    if(!rst)
	    valid <= 1'b0     ;
    else if(CNT == 'd3)
	    valid <= 1'b1     ;  
    else 
	    valid <= 1'b0     ;
end

always@(posedge clk or negedge rst)begin
    if(!rst)
	    buffer <= 'd0                          ;
    else if(CNT == 'd3)
	    buffer <= d                            ;  
    else 
	    buffer <= {buffer[2:0], buffer[3]}     ;
end

assign  dout     = buffer[3]   ;
assign  valid_in = valid       ;


//*************code***********//

endmodule

注解:很久没写代码了,思路有些混乱。再加上看错了输入输出,我把 valid_in 当成了输入。 其实很简单的。并转串的核心思想就是移位寄存,然后把最高位输出出来。

这题要注意的是,valid_in 信号是你自己产生并输出的。由于dout 信号和valid_in 信号 是同时输出的。所以不能使用valid_in信号来作为控制信号,而是使用你自己的计数器(因为这个valid_in 信号是你自己使用计数器 4个时钟产生的)CNT == ‘d3的时候进行赋值给你的缓存buffer,其他时候就移位寄存。

全部评论

相关推荐

09-02 11:14
已编辑
四川大学 Java
吴offer选手:这种面试是最烦的,学不到东西,然后还被挂的莫名其妙。之前看到一种说法是面试官如果不想要你了,就会问一些很简单的问题,防止你举报他
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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